Compare commits

...
17 Commits
68 changed files with 821 additions and 276 deletions
+1 -6
View File
@@ -1,6 +1,3 @@
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - IDs</h1>
<h2>description </h2> <h2>description </h2>
<p>Entities need IDs for serving translations (even English is pulled in through the TranslationServer) and judging comparisons. <br></p> <p>Entities need IDs for serving translations (even English is pulled in through the TranslationServer) and judging comparisons. <br></p>
<br> <br>
@@ -255,7 +252,5 @@
</ul> </ul>
<br> <br>
<h3>ref ID </h3> <h3>ref ID </h3>
<p>Every entity with the base.gd script has a ref ID. It identifies a specific instance of an entity. The MessageBus assigns them sequentially as integers starting at 0 during the <span class="code">_ready</div> stage of each entity. The earlier the ref ID, the older the entity. <br></p> <p>Every entity with the base.gd script has a ref ID. It identifies a specific instance of an entity. The MessageBus assigns them sequentially as integers starting at 0 during the <span class="code">_ready</span> stage of each entity. The earlier the ref ID, the older the entity. <br></p>
<br> <br>
</div>
+1
View File
@@ -0,0 +1 @@
<p>All acts of god are attributed to him. His steed is the MessageBus. He is technically an entity. <br></p>
+11
View File
@@ -0,0 +1,11 @@
<h2>description </h2>
<p> <br></p>
<br>
<h2>challenges/known issues </h2>
<p> <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>???✓ </li>
<li>???✗ </li>
</ul>
+17
View File
@@ -0,0 +1,17 @@
<h2>description </h2>
<p>pushing buttons and stuff <br></p>
<br>
<h2>list of default controls </h2>
<p><ul>
<li><b>left-click:</b> target entity</li>
<li><b>I:</b> open inventory app</li>
</ul></p>
<br>
<h2>challenges/known issues </h2>
<p> <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>???✓ </li>
<li>rebinding controls✗ </li>
</ul>
+35
View File
@@ -0,0 +1,35 @@
<h2>description </h2>
<p>Floor items are the representation of an item that spawns in the environment, drops from opponents, and can be picked up. They are technically tangible entities. <br></p>
<br>
<h2>structure </h2>
<p><ul>
<li>Node2D - $ThreeLeafClover (floor_item.gd, inherits from tangible.gd)</li>
<ul><li>Node2D - $Body (tangibleBody.gd, inherits from mobileBody.gd)</li>
<ul><li>Area2D - $Sprite (Items/Components/Sprite.gd)</li>
<ul><li>Sprite - $Sprite</li>
<ul><li>PanelContainer - $Highlight (the <a href="/blessfrey-gdd/highlight">highlight scene</a></li></ul>
<li>CollisionPolygon2D - $CollisionPolygon2D</li></ul>
</ul>
</ul>
</ul></p>
<br>
<h2>variables</h2>
<p><ul>
<li>ITEM_SCENE_NAME, a constant reference to the <a href="/blessfrey-gdd/base-item">base item</a>'s path within the folder </li>
<li>item_scene, the base item's scene, loaded from ITEM_SCENE_NAME </li>
<li>item, the <a href="/blessfrey-gdd/base-item">base item</a>. It's instanced from item_scene and added as a child of the floor item.
<li>display_name, the name seen in the <a href="/blessfrey-gdd/highlight">highlight</a> label, <a href="/blessfrey-gdd/inventory">inventory</a> listings, etc. </li>
<br>
<h2>logic </h2>
<p> <br></p>
<br>
<br>
<h2>challenges/known issues </h2>
<p> <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>???✓ </li>
<li>???✗ </li>
</ul>
@@ -1,6 +1,3 @@
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - <a href="blessfrey-mechanics">game mechanic</a> - inspect menu</h1>
<h2>description </h2> <h2>description </h2>
<p>Right-click on an tangible entity or inventory item to open a popup inspect menu with all relevant inspect options. Selecting one will execute a method. Examples are 'follow Chloe' (pathfind after Chloe wherever she moves until action is cancelled), 'pick up clover' (item pickup), and 'examine button' (write a descriptive line about her in Helia's thought bubble) <br></p> <p>Right-click on an tangible entity or inventory item to open a popup inspect menu with all relevant inspect options. Selecting one will execute a method. Examples are 'follow Chloe' (pathfind after Chloe wherever she moves until action is cancelled), 'pick up clover' (item pickup), and 'examine button' (write a descriptive line about her in Helia's thought bubble) <br></p>
<br> <br>
@@ -12,7 +9,7 @@
<p>The inspect menu ("res://UI/InspectMenu/InspectMenu.tscn") is instanced at declaration and added as a child at ready in the UI singleton. <br></p> <p>The inspect menu ("res://UI/InspectMenu/InspectMenu.tscn") is instanced at declaration and added as a child at ready in the UI singleton. <br></p>
<br> <br>
<h2>logic </h2> <h2>logic </h2>
<p>When tangible entity is right-clicked (@ $Body/Sprite/Clickable), the UI enters InspectMenu with its subject set. The "id_pressed" signal is reset for each subject. InspectMenu connects "about_to_show" the first time it's needed and keeps it forever. Before popup(), it resets, adds a label at an offset with the subject's display name, then adds a UI option for each inspect option. <br></p> <p>When tangible entity is right-clicked (@ $Body/Sprite/Clickable), the UI enters InspectMenu with its subject set. (The subject setter also sets the player's target.) The "id_pressed" signal is reset for each subject. InspectMenu connects "about_to_show" the first time it's needed and keeps it forever. Before popup(), it resets, adds a label at an offset with the subject's display name, then adds a UI option for each inspect option. <br></p>
<br> <br>
<p>When a selection is made, the "id_pressed" signal calls "id_pressed" on the subject, which calls the method at its inspect_options[pressed_id][1]. So 'examine' calls 'examine,' which is in tangible.gd. Most related methods are on tangible.gd, though they may be at a more specific script. <br></p> <p>When a selection is made, the "id_pressed" signal calls "id_pressed" on the subject, which calls the method at its inspect_options[pressed_id][1]. So 'examine' calls 'examine,' which is in tangible.gd. Most related methods are on tangible.gd, though they may be at a more specific script. <br></p>
<br> <br>
@@ -23,6 +20,8 @@
<br> <br>
<p>Tangibles and inventory items both have inspect menus, but their code has to be separate. They are too different from each other. <br></p> <p>Tangibles and inventory items both have inspect menus, but their code has to be separate. They are too different from each other. <br></p>
<br> <br>
<p>It doesn't close the inspect menu if pickup is chosen while item out of range, even after item is picked up. <br></p>
<br>
<h2>works for...</h2> <h2>works for...</h2>
<ul> <ul>
<li>player✓ </li> <li>player✓ </li>
@@ -32,4 +31,3 @@
<li>floor items✗ </li> <li>floor items✗ </li>
<li>inventory items✗ </li> <li>inventory items✗ </li>
</ul> </ul>
</div>
+27
View File
@@ -0,0 +1,27 @@
<h2>description </h2>
<p>The programmatic element facilitates picking up, collecting, and dropping items. The control element displays and offers relevant options. <br></p>
<br>
<h2>pickup: floor item -> inventory item </h2>
<p>Item pickup is initiated by MoveToDestination.gd/_on_item_arrived(floor_item) -> floor_item.pick_up().pick_up(). The base item's pick_up initiates character/pickup(base_item) and publishes "item_picked_up" and itself to the <a href="/blessfrey-gdd/achievements">MessageBus</a>. <br></p>
<br>
<p>character.gd/pickup(base_item) calls (programmatic)Inventory.gd/pickup and _pickup(base_item) which updates the phone inv app if it's currently open. <br></p>
<br>
<p>Inventory.gd/pickup(base_item) published "item_obtained" and the base item to the <a href="/blessfrey-gdd/achievements">MessageBus</a> then calls reverse_pickpocket(base_item). <br></p>
<br>
<p>Inventory.gd/reverse_pickpocket(base_item) appends the base item to the inventory and connects the depleted and dropped signals. <br></p>
<br>
<h2>opening the inventory app </h2>
<p>If you press the <a href="/blessfrey-gdd/controls">inventory key (I)</a>, UI/open_window(UI.open_inv_scene(),"inventory", Vector2(100,150)) is called. It opens a window at the Vector2, assigns "inventory" as its key, and fills it with the given scene. The UI will call open_app and provide the inventory app scene. <br></p>
<br>
<p>If you bring up the smartphone and tap the inventory app from the home screen, the inventory button is connected to 'open_app" on "pressed", sending the associated app. <br></p>
<br>
<p>Smartphone.gd/open_app(scene) sets is_open to true, the current_app to the scene,
<br>
<h2>challenges/known issues </h2>
<p> <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>???✓ </li>
<li>???✗ </li>
</ul>
+54
View File
@@ -0,0 +1,54 @@
<h2>description </h2>
<p>Items are objects that may be picked up, purchased, used, equipped, dropped, or sold. They include currency, quest items, equipment, consumables, readables, upgrades, keys, and trinkets. <br></p>
<br>
<h2>four representations </h2>
<p>An item changes its form depending on its context. <br></p>
<br>
<p><a href="/blessfrey-gdd/base-item">Base items</a> are the purest form of an item, maintaining its continuity and containing its essential data. Other items hold the base item as a child or generates one if one doesn't already exist. <br></p>
<br>
<p><a href="/blessfrey-gdd/floor-item">Floor items</a> are the representation of an item that spawns in the environment, drops from opponents, and can be picked up. They are technically tangible entities. <br></p>
<br>
<p>Inventory items appear in the inventory window. They are technically control nodes. <br></p>
<br>
<p>Merchandise appears in store windows. <br></p>
<br>
<h2>move to pick up item </h2>
<p>Items can only be picked up by the player. They can be picked up via item targeting or through selecting 'pick up' on the <a href="/blessfrey-gdd/inspect">inspect menu</a>. <br></p>
<br>
<p>Item pickup is triggered when a <a href="/blessfrey-gdd/floor-item">floor item</a> is targeted, that is, a <a href="/blessfrey-gdd/controls">'target' (left-click)</a> triggers a $Item/Body/Sprite/Sprite.gd/_on_input_event. If 'no_move_to_target' (shift) is held while targeting, the <a href="/blessfrey-gdd/floor-item">floor item</a> will be targeted without initiating pickup. Otherwise, floor_item.gd/target_event(viewport,event,shape_idx) is called to set the target and handle the input before prompting the player to consider pickup. <br></p>
<br>
<p>Item pickup is also an option on the <a href="/blessfrey-gdd/floor-item">floor items</a>' <a href="/blessfrey-gdd/inspect">inspect menu</a>. Choosing it triggers that <a href="/blessfrey-gdd/floor-item">floor item</a>'s id_pressed(id), which calls the associated method from its inspect_options dictionary: floor_item.gd/move_player_then_pickup(), prompting the player to consider pickup. <br></p>
<br>
<p>Character.gd/consider_pickup(item) passes to UserControl/pickup(item). The next branch depends on a distance check. <br></p>
<br>
<p>If the <a href="/blessfrey-gdd/floor-item">floor item</a> is within the player's <a href="/blessfrey-gdd/proxemics">intimate distance</a>, the character will be prompted to pick up the <a href="/blessfrey-gdd/floor-item">floor item</a>. <br></p>
<br>
<p>Otherwise, <a href="/blessfrey-gdd/pathfinding">pathfinding</a> begins towards the <a href="/blessfrey-gdd/floor-item">floor item</a>. Upon arrival, it calls floor_item.pick_up().pick_up(). The <a href="/blessfrey-gdd/floor-item">floor item</a>'s pick_up removes itself from the room and returns the base item, then the <a href="/blessfrey-gdd/inventory">inventory system</a> takes care of the rest. <br></p>
<br>
<h2>drop item </h2>
<p>Items can be dropped from the <a href="/blessfrey-gdd/inventory">inventory</a> app when the player selects 'drop' on the <a href="/blessfrey-gdd/inspect">inspect menu</a>. <br></p>
<br>
<p>Choosing 'drop' triggers that <a href="/blessfrey-gdd/inventory-item">inventory item</a>'s id_pressed(id), which calls the associated method from its inspect_options dictionary: inventory_item.gd/drop. It, in turn, calls the drop method off its <a href="/blessfrey-gdd/base-item">base item</a>.<br></p>
<br>
<p>The <a href="/blessfrey-gdd/base-item">base item</a>'s drop() emits the 'dropped' signal, which triggers the inventory item to queue_free then the inventory app to be refreshed. (connected @ InvContainer.gd/make_inventory_items(base_item).
<br>
<h2>challenges/known issues </h2>
<p>pick up in range puts a floor item in the programmatic inventory. out of range puts a proper base item. STOP at line 309 on character.gd. <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>add to wallet✗ </li>
<li>bestow constant keyword effect✗ </li>
<li>buy, sell✗ </li>
<li>container, randomized loot, take out, put in, persist in container✗ </li>
<li>drop from inv✗ </li>
<li>drop from death drop table✗ </li>
<li>equip✗ </li>
<li>inspect inventory item, <a href="/blessfrey-gdd/floor-item">floor item</a>✗ </li>
<li>pickup in range, out of range, target, inspect✓ </li>
<li>progress quest, open door✗ </li>
<li>read✗ </li>
<li>spawn from spawner✗ </li>
<li>use✗ </li>
</ul>
+2
View File
@@ -0,0 +1,2 @@
<p>There are six standard jobs available to the player, but more can be discovered in the Abyss. <br></p>
+2
View File
@@ -0,0 +1,2 @@
<p>Keywords are the building blocks of skills. <br></p>
+22
View File
@@ -0,0 +1,22 @@
<p>documenting Blessfrey game mechanics<br></p>
<br>
<p>Game mechanics are the rules of the world. <br></p>
<br>
<h2>character creation</h2>
<p>Players control Helia and develop her character through making decisions. During her first day of school in Lucrest, you will fill out a personal questionnaire and try out the common jobs before choosing one permanently. She will also receive her starter skills and her choice of starter gear and weapon. <br>
<br>
<h2>job, side job + skills</h2>
<p>Her job determines the perk, attributes, and skills available for her. Skills will scale in power according to the amount of attributes assigned to the relevant attribute. She can also take a side job, which will offer more attributes and skills for defining your playstyle. Side jobs are optional and can be changed outside of combat, but they do not offer perks, nor can their perk-related skills be improved. <br></p>
<br>
<p>All acquired skills will be stored in the character's skill library, but only 8 can be equipped onto the skillbar at a time. You must choose carefully and adapt challenge-by-challenge. <br></p>
<br>
<p>To gain more skills and side job offers, you explore the world, gain combat experience, meet characters, and more. She'll encounter <a href="/char/WISE">a certain system</a> that will guide her to greater development early in the dungeon. <br></p>
<br>
<p>You'll not only develop Helia but a team of friends you meet in town and below, all with jobs, side jobs, and skills for building a viable team. <br></p>
<br>
<h2>playstyle</h2>
<p>Blessfrey emphasizes frequent and free adaptation of playstyle. Except for your job, decisions are not permanent. You can change your side job, reallocate attribute points freely, and swap out skills outside of combat. You can do the same for your teammates' builds, and call them in and out of your team freely outside of combat. <br></p>
<br>
<p>Enemies and allies have access to many of the same jobs and skills, so while you learn the offensive advantage of your skills, you will also have to learn to defend against them. You can learn new skills through combat experience, copying techniques. <br></p>
<br>
<p>Death is not a final failure. Characters can resurrect each other. If the entire team dies, they will be revived at the nearest bed of resurrection lillies, able to retry. <br></p>
+28
View File
@@ -0,0 +1,28 @@
<p>Pathfinding programmatically moves an entity towards a point. <br></p>
<br>
<h2>move to pick up an item </h2>
<p>If an entity decides to pick up a floor item, UserControl.gd/pickup(floor_item) checks the range. If too far away, it will trigger MoveToDestination.gd/pickup_setup(floor_item). <br></p>
<br>
<p>Signals are disconnected, track is made true, 'item_arrived' signal is connected to UserControl/Move, and the goal target is set. <br></p>
<br>
<p>MoveToDestination.gd's Execute method constantly loops between path_to_point() and choose_velocity(). <br></p>
<br>
<p>path_to_point calls cancel on the player and path_to_object(goal_target). Mobile.gd/path_to_object(goal_target) sets the floor item as the next then reassesses the path with each call. If there is no current_dot, dots are set between the user and the goal_target and the method ends. Otherwise, the last_dot is either the last dot or the current_dot. If the goal hasn't moved, the method ends. If the goal is further, the path is wholly or partially recalculated. If the goal is nearer, the path is recalculated between the last_dot and the goal. <br></p>
<br>
<p>choose_velocity() sets the entity's body's internal velocity to current_dot - current_pos. mobileBody.gd/_process(delta) sets its physics_body_node's move_and_collide to velocity (judged from internal velocity) * speed * delta * <a href="/blessfrey-gdd/achievements">KnowledgeBase</a>.logic_time, publishing "moved" and the entity to the <a href="/blessfrey-gdd/achievements">MessageBus</a>. <br></p>
<br>
<p>The <a href="/blessfrey-gdd/achievements">MessageBus</a>'s Moved.gd handler will judge progress and emit a signal. Since "reached", "arrived", etc are connected during MoveToDestination's Enter phase, handle_moved_result handles the package. If it is "arrived" and track is true, 'item_arrived' signal is emitted, the first waypoint is popped off, and the entity calls clear_movement. <br></p>
<br>
<p>MoveToDestination.gd/_on_item_arrived(floor_item) calls arrived to disconnect signals, set track to false, and clear the entity's movement. Then it calls item.pick_up().pick_up(). <br></p>
<br>
<h2>challenges/known issues </h2>
<p>Navigation2D and get_simple_path will be removed in a future version of Godot. <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>move to item then pick up✓ </li>
<li>move to target then attack✗ </li>
<li>move to target but don't attack✗ </li>
<li>move to target then interact✗ </li>
</ul>
+35
View File
@@ -0,0 +1,35 @@
<p>Generally, proxemics refers to the study of the relationship between social beings and physical distance.
Since spatial distance in Blessfrey (and all games) varies wildly due to distortion of physical proportions and angles, I am addressing the mechanical distance, i.e. the reach of a weapon, the distance from which an item can be picked up, and earshot. Relative distances are modeled after <a href="https://en.wikipedia.org/wiki/Proxemics">Edward T. Hall's interpersonal distances of man</a>: public, social, personal, and intimate distance. <br></p>
<br>
<p>I like the implication of a generalized "personal bubble" instead of the solely combat-oriented "aggro bubble" of other RPGs. It's so unfortunate that the pandemic was everyone's introduction to proxemics. I don't really wanna change it, but I kinda cringe when I hear "social distance" now. Whatever, I guess. <br></p>
<img src="/static/img/gdd/personalbubble.svg" alt="(chart: concentric rings. From outer to inner, public space is 25-12', social space is 12-4', personal space is 4-1.5', and intimate space is 1.5' or less.)">
<p>(image by WebHamster for Wikipedia) <br></p>
<br>
<p>Distances are declared in the mobile entity's mobile.gd. I...don't know what Godot units are supposed to be. I think they are pixels? Let's call them degrees(❥). I estimate 1❥ to equal ~2.5 social inches. <br></p>
<br>
<h2>extrapersonal distance </h2>
<p><ul>
<li>range: ???-∞❥ </li>
<li>relevancy: conceptual interentitic outerspace </li>
</ul></p>
<h2>public distance </h2>
<p><ul>
<li>range: 90-???❥ </li>
<li>relevancy: </li>
</ul></p>
<h2>social distance </h2>
<p><ul>
<li>60-90❥. </li>
<li> </li>
</ul></p>
<h2>personal distance </h2>
<p><ul>
<li>45-60❥. </li>
<li> </li>
</ul></p>
<h2>intimate distance </h2>
<p><ul>
<li>range: 0-45❥ </li>
<li>relevancy: item pickup, melee attacks </li>
</ul></p>
<br>
@@ -3,5 +3,10 @@
<div class="content-grid"> <div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - setting</h1> <h1><a href="/gdd">blessfrey gdd</a> - setting</h1>
<p>Blessfrey takes place in Lucrest, Nickajack, a small town unknowingly situated over an abyssal dungeon. <br></p> <p>Blessfrey takes place in Lucrest, Nickajack, a small town unknowingly situated over an abyssal dungeon. <br></p>
</div> <br>
<ul>
% for i in ["CSA"],["castaway"],["huntsville"],["Lucrest"],["USA"]:
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i}}>{{i}}</a></li>
% end
</ul>
</div>
@@ -1,7 +1,2 @@
% import random
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - skills</h1>
<p>Skills are individual powers usable by entities. They can take 8 at a time on their skillbar. They can be used for combat, puzzle-solving, and roleplaying. They are acquired through exploring. <br></p> <p>Skills are individual powers usable by entities. They can take 8 at a time on their skillbar. They can be used for combat, puzzle-solving, and roleplaying. They are acquired through exploring. <br></p>
</div>
@@ -1,7 +1,3 @@
% import random
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - story</h1> <h1><a href="/gdd">blessfrey gdd</a> - story</h1>
<p>Helia explores the Abyss with her friends. <br></p> <p>Helia explores the Abyss with her friends. <br></p>
</div>
+22
View File
@@ -0,0 +1,22 @@
<p><ul>
<li><b><a href="/blessfrey-gdd/item">base item</a></b>: the core of data of an individual item. Floor items and inventory items contain a base item. </li>
<li><b><a href="/blessfrey-gdd/pathfinding">current_dot</a></b>: (variable, StateMachine.gd) the immediate point the entity is pathfinding to in order to ultimately reach the goal_target. </li>
<li><b><a href="/blessfrey-gdd/proxemics">degrees(❥)</a></b>: (concept) the unit of social distance </li>
<li><b><a href="/blessfrey-gdd/pathfinding">dot</a></b>: (variable, StateMachine.gd) a set of coordinates for a global position. </li>
<li><b><a href="/blessfrey-gdd/pathfinding">dots</a></b>: (variable, StateMachine.gd) the discreet path between points, esp. the entity and the goal target. </li>
<li><b><a href="/blessfrey-gdd/item">floor item</a></b>: </li>
<li><b><a href="/blessfrey-gdd/pathfinding">goal target</a></b>: (variable, MoveToDestination.gd) It is set when the entity decides to pathfind and nulled during clear_goal(). mobile.gd/path_to_object(goal_target) is called from MoveToDestination every Execute loop to reassess the path between entity and goal. </li>
<li><b><a href="/blessfrey-gdd/inspect">inspect menu</a></b>: (UI) presents options for interacting with the subject </li>
<li><b><a href="/blessfrey-gdd/proxemics">intimate distance</a></b>: 45❥, declared at mobile.gd/intimate_space </li>
<li><b><a href="/blessfrey-gdd/item">inventory item</a></b>: </li>
<li><b><a href="/blessfrey-gdd/item">item</a></b>: varies in form depending on its context - base item, floor item, inventory item, merchandise </li>
<li><b><a href="/blessfrey-gdd/item">merchandise</a></b>: </li>
<li><b><a href="/blessfrey-gdd/pathfinding">next</a></b>: (variable, StateMachine.gd) same as the goal_target. The current waypoint for the entity. </li>
<li><b><a href="/blessfrey-gdd/pathfinding">next_dot</a></b>: (variable, StateMachine.gd) the first item in the dots array that is not at the entity's global_position. </li>
<li><b><a href="/blessfrey-gdd/proxemics">personal distance</a></b>: 60❥, declared at mobile.gd/personal_space </li>
<li><b><a href="/blessfrey-gdd/proxemics">proxemics</a></b>: (concept) interentitic, mechanical distances </li>
<li><b><a href="/blessfrey-gdd/proxemics">social distance</a></b>: 90❥, declared at mobile.gd/social_space </li>
<li><b><a href="/blessfrey-gdd/inspect">subject</a></b>: inspect menu has a subject; inspect options will affect it </li>
<li><b><a href="/blessfrey-gdd/pathfinding">track</a></b>: (variable, MoveToDestination.gd) If the AI is pathfinding to a point or object, track is true. Upon arrived(), it is false. It is checked in handle_moved_result(result, entity).</li>
<li><b><a href="/blessfrey-gdd/pathfinding">waypoints</a></b>: (variable, StateMachine.gd) the list of selected points the entity will be traveling to. Usually a patrol route. </li>
</ul></p>
@@ -1,6 +1,3 @@
% rebase('frame.tpl')
<div class="content-grid">
<h1>blessfrey gdd - vibe</h1>
<p>The overall vibe of Blessfrey will be warm, fun, upbeat, pop, and stylish with pink colors. I need to find some pervasive motiff, especially one that symbolizes home for Helia. <br></p> <p>The overall vibe of Blessfrey will be warm, fun, upbeat, pop, and stylish with pink colors. I need to find some pervasive motiff, especially one that symbolizes home for Helia. <br></p>
<br> <br>
<h2>fantasy, modern, slice-of-life </h2> <h2>fantasy, modern, slice-of-life </h2>
@@ -55,5 +52,3 @@
<p>Patty Cake, London Bridge is Falling Down, Five Little Monkeys, Itsy Bitsy Spider, Rain Rain Go Away, This Little Piggy, Here are Mother's Knives and Forks, Red Rover Red Rover (absolutely hated this one), Finger Family, The Muffin Man, Row Row Row Your Boat, Eenie Minnie Minie Moe, clean up songs, Father Abraham Had Many Sons, B-I-N-G-O, He's Got the Whole World in His Hands, Jesus Loves Me, Jesus Loves the Little Children, This Little Light of Mine, Head Shoulders Knees and Toes, Duck Duck Goose, Baa Baa Black Sheep, Sharks and Minnows, Cops and Robbers, Freeze Tag, How Much Wood Would a Woodchuck Chuck?, Guess What Chicken Butt, One Two Buckle My Shoe, Frere Jacques, If wishes were horses, You're a Grand Ole Flag, The Ants Go Marching One by One <br></p> <p>Patty Cake, London Bridge is Falling Down, Five Little Monkeys, Itsy Bitsy Spider, Rain Rain Go Away, This Little Piggy, Here are Mother's Knives and Forks, Red Rover Red Rover (absolutely hated this one), Finger Family, The Muffin Man, Row Row Row Your Boat, Eenie Minnie Minie Moe, clean up songs, Father Abraham Had Many Sons, B-I-N-G-O, He's Got the Whole World in His Hands, Jesus Loves Me, Jesus Loves the Little Children, This Little Light of Mine, Head Shoulders Knees and Toes, Duck Duck Goose, Baa Baa Black Sheep, Sharks and Minnows, Cops and Robbers, Freeze Tag, How Much Wood Would a Woodchuck Chuck?, Guess What Chicken Butt, One Two Buckle My Shoe, Frere Jacques, If wishes were horses, You're a Grand Ole Flag, The Ants Go Marching One by One <br></p>
<br> <br>
<p>Honestly, people are very musical, especially when they are younger. I can find most of these online, but we regularly made up our own songs, too. </p> <p>Honestly, people are very musical, especially when they are younger. I can find most of these online, but we regularly made up our own songs, too. </p>
</div>
+4
View File
@@ -0,0 +1,4 @@
general 8003508220
specific 702 840 4504 - customer sevice, spoken to allie, extension 135
the sec I get 10k refund email, call allie, say you already spoke to her. eligible for program.
+1 -1
View File
@@ -1 +1 @@
<p>Her quiet femininity contrasts with her titanic arms and powerful thighs. (I maxxed out the arm muscularity and arm thickness sliders.) Perplexingly, she's retained an hourglass figure, which she attributes to a life of wearing belts. She always presents herself with excellence, wearing a meticulously perfected coral monochromatic face of makeup to set off her pale eyes, deep auburn hair, and glassy skin. Through experience, it wears gracefully even through sweat and heat. Her wardrobe is purely functional, consisting entirely of training and ceremonial uniforms, especially those that pair well with belts and scarves. Her favorite colors to wear are orange and jade. <br></p> <p>Her quiet femininity contrasts with her titanic arms and powerful thighs. (I maxxed out the arm muscularity and arm thickness sliders.) Perplexingly, despite all her muscle mass, she's retained an hourglass figure, which she attributes to a life of wearing belts. She always presents herself with excellence, wearing a meticulously perfected coral monochromatic face of makeup to set off her pale eyes, deep auburn hair, and glassy skin. Through experience, it wears gracefully even through sweat and heat. Her wardrobe is purely functional, consisting entirely of training and ceremonial uniforms, especially those that pair well with belts and scarves. Her favorite colors to wear are orange and jade. <br></p>
+1 -1
View File
@@ -1,3 +1,3 @@
<p>My Black Desert Online main! The community and gear system ruin what is one of the best tycoon and life skilling MMOs, so I didn't play it for very long. I still adore Aristen, though. <br></p> <p>My Black Desert Online main! The community and gear system ruin what is one of the best tycoon and life skilling MMOs, so I didn't play it for very long. I still adore Aristen, though. <br></p>
<br> <br>
<p>She's an honest and direct person who won't betray her core values of loyalty, submission towards authority, and denial of the flesh. Her Spartan lifestyle borders on asceticism. She lives off the land. Though her body is shaped by extreme discipline, she isn't necessarily the wisest person. She's always falling into the "work harder, not smarter" fallacy, leading to some pretty comical blunt-force solutions for her jobs. <br></p> <p>She's an honest and direct person who won't betray her core values of loyalty, submission towards authority, and denial of the flesh. Her Spartan lifestyle borders on asceticism. She lives off the land. Though her body is shaped by extreme discipline, she isn't necessarily the wisest person. She's always falling into the "work harder, not smarter" fallacy, leading to comical blunt-force solutions for her jobs. <br></p>
+1 -2
View File
@@ -8,6 +8,5 @@
<li><b>height:</b> 5'1 </li> <li><b>height:</b> 5'1 </li>
<li><b>residence:</b> <a href="https://wiki.guildwars.com/wiki/Isle_of_the_Dead">Isle of the Dead</a>, <a href="https://aion.fandom.com/wiki/Poeta">Akarios Village, Poeta</a> </li> <li><b>residence:</b> <a href="https://wiki.guildwars.com/wiki/Isle_of_the_Dead">Isle of the Dead</a>, <a href="https://aion.fandom.com/wiki/Poeta">Akarios Village, Poeta</a> </li>
<li><b>likes:</b> cats, her pet <a href="https://wiki.guildwars.com/wiki/Miniature_Necrid_Horseman">mini Necrid Horseman</a>, powertrading </li> <li><b>likes:</b> cats, her pet <a href="https://wiki.guildwars.com/wiki/Miniature_Necrid_Horseman">mini Necrid Horseman</a>, powertrading </li>
<li><b>dislikes:</b> Prince Rurik </li> <li><b>dislikes:</b> fish </li>
<li><b>notes:</b> </li>
</ul> </ul>
+1 -1
View File
@@ -1,3 +1,3 @@
<p>Her favorite colors to wear are brown, white, and black. If she wears makeup, it's usually brown or gold tones. She also usually has short, straight hair with peek-a-boo bangs. <br></p> <p>Her favorite colors to wear are brown, white, and black. If she wears makeup, it's usually brown or gold tones. She also usually has short, straight hair with peek-a-boo bangs. <br></p>
<br> <br>
<p>She had a frizzy brunette phase for a few years because I convinced myself creative interpretations and personas are cringy. Maybe they are, but whatever. That line of thinking strips away my ability to abstract stressors into art and writing. My creative outlet matters way more to me than some arbitrary standard of coolness. So her brunette phase is an important part of her journey, but her true self has white hair. <br></p> <p>She had a frizzy brunette phase for a few years because I convinced myself creative interpretations and personas are cringy. Maybe they are, but whatever. That line of thinking strips away my ability to abstract stressors into art and writing. My creative outlet matters way more to me than some arbitrary standard of coolness. So her brunette phase is an important part of her journey, but her true self has white hair, whatever that means. <br></p>
+24
View File
@@ -0,0 +1,24 @@
WISE | means <i>knowledgeable</i> | AI⚲ <br>
<br>
<h2>basics </h2>
<ul>
<li>role: virtual guide, mascot </li>
<li>age: ??? </li>
<li>birthday: </li>
<li>mental: impossible processing power </li>
<li>physical: holographic. heavy-breasted, drooping oversized glasses, messy hair tangled in her horns, pendulous manner </li>
<li>style: varies </li>
<li>height: 6' </li>
<li>residence: wherever she can be projected </li>
<li>likes: well-formatted requests </li>
<li>dislikes: user error </li>
<li>notes: </li>
</ul><br>
<br>
<h2>story </h2>
<p>She is a relatively older AI but is widely used due to her ease of use, long-term support, and wide availability of libraries and plug-ins. She was originally designed as a virtual assistant for archives and research labs, but is now commonly seen at festivals and sites of interest. She uses a database provided by the owner to process and answer higher-level questions in the natural language of the user. The owner can manipulate the data in the database to give her some semblance of opinions, but she is intended to be bluntly factual. She can't be projected more than 3 feet off her hub, so she must be placed very near everything she needs to interact with. <br></p>
<br>
<h2>description </h2>
<p>She has voice recognition but also allows for written input via a written language similar to stenography. Everything she says is also displayed as text in holographic chat bubbles. In addition to chat bubbles, she can display all kinds of symbols, emoticons, and images as relevant. <br></p>
<br>
<p>Her natural state is to rest. During extended usage, her posture will droop and her mannerisms will become less animated. If her task is completed or she receives no input for an certain period of time, she will nod off to sleep, displaying a stream of Zzz. <br></p>
+24
View File
@@ -0,0 +1,24 @@
WISE | means <i>knowledgeable</i> | AI⚲ <br>
<br>
<h2>basics </h2>
<ul>
<li>role: virtual guide, mascot </li>
<li>age: ??? </li>
<li>birthday: </li>
<li>mental: impossible processing power </li>
<li>physical: holographic. heavy-breasted, drooping oversized glasses, messy hair tangled in her horns, pendulous manner </li>
<li>style: varies </li>
<li>height: 6' </li>
<li>residence: wherever she can be projected </li>
<li>likes: well-formatted requests </li>
<li>dislikes: user error </li>
<li>notes: </li>
</ul><br>
<br>
<h2>story </h2>
<p>She is a relatively older AI but is widely used due to her ease of use, long-term support, and wide availability of libraries and plug-ins. She was originally designed as a virtual assistant for archives and research labs, but is now commonly seen at festivals and sites of interest. She uses a database provided by the owner to process and answer higher-level questions in the natural language of the user. The owner can manipulate the data in the database to give her some semblance of opinions, but she is intended to be bluntly factual. She can't be projected more than 3 feet off her hub, so she must be placed very near everything she needs to interact with. <br></p>
<br>
<h2>description </h2>
<p>She has voice recognition but also allows for written input via a written language similar to stenography. Everything she says is also displayed as text in holographic chat bubbles. In addition to chat bubbles, she can display all kinds of symbols, emoticons, and images as relevant. <br></p>
<br>
<p>Her natural state is to rest. During extended usage, her posture will droop and her mannerisms will become less animated. If her task is completed or she receives no input for an certain period of time, she will nod off to sleep, displaying a stream of Zzz. <br></p>
+24
View File
@@ -0,0 +1,24 @@
WISE | means <i>knowledgeable</i> | AI⚲ <br>
<br>
<h2>basics </h2>
<ul>
<li>role: virtual guide, mascot </li>
<li>age: ??? </li>
<li>birthday: </li>
<li>mental: impossible processing power </li>
<li>physical: holographic. heavy-breasted, drooping oversized glasses, messy hair tangled in her horns, pendulous manner </li>
<li>style: varies </li>
<li>height: 6' </li>
<li>residence: wherever she can be projected </li>
<li>likes: well-formatted requests </li>
<li>dislikes: user error </li>
<li>notes: </li>
</ul><br>
<br>
<h2>story </h2>
<p>She is a relatively older AI but is widely used due to her ease of use, long-term support, and wide availability of libraries and plug-ins. She was originally designed as a virtual assistant for archives and research labs, but is now commonly seen at festivals and sites of interest. She uses a database provided by the owner to process and answer higher-level questions in the natural language of the user. The owner can manipulate the data in the database to give her some semblance of opinions, but she is intended to be bluntly factual. She can't be projected more than 3 feet off her hub, so she must be placed very near everything she needs to interact with. <br></p>
<br>
<h2>description </h2>
<p>She has voice recognition but also allows for written input via a written language similar to stenography. Everything she says is also displayed as text in holographic chat bubbles. In addition to chat bubbles, she can display all kinds of symbols, emoticons, and images as relevant. <br></p>
<br>
<p>Her natural state is to rest. During extended usage, her posture will droop and her mannerisms will become less animated. If her task is completed or she receives no input for an certain period of time, she will nod off to sleep, displaying a stream of Zzz. <br></p>
+29
View File
@@ -0,0 +1,29 @@
Let's chat about makeup again! <a href="https://phyrra.net/">Phyrra</a>, cruelty-free and gothic beauty blogger, answered a <a href="https://phyrra.net/makeup-opinions-tag.html>Makeup Opinions tag</a>, and I wanted to answer it, too. I think she got it from the MUACJDiscussion subreddit, but I couldn't find it there.
1. Your most favorite category of makeup?
Blue-gray lipstick
Mauve lipstick
2. One makeup product you cannot live without?
Navy eyeshadow
3. A makeup trend youll do forever?
I think my attention span only lasts 4-5 years for most trends, but my doll lips are still going strong since high school, just like the Harajuku Girls in Rich Girl. It's cuter to underline and narrow your lips than to overline, I think.
Most favorite makeup brand?
I would say Urban Decay, but they discontinued everything I liked...So Sydney Grace! Like Urban Decay, they actually carry cool tones and have lots of fun but nuanced colors.
Your biggest makeup disappointment (brand/products)?
A luxury brand that feels cheap?
Pretty much all the brands use a lot of plastic these days.
An affordable brand that feels very luxurious?
I don't think any of my makeup feels that luxurious. My Becca lipstick feels luxurious, and it sure was affordable during closeout sales. The lid is magnetic.
One popular makeup opinion you disagree with?
Specific body parts as trending. It's cool to have fun and be creative, but intentionally pining after a different face from your own seems unhealthy. Overdrawing lips to make them look bigger, adding freckles you never had, plastic surgery to insert aegyo-sal under your eyes. Be yourself.
Your signature lipstick shade if you had to pick one?
Mauvy pink?
+44
View File
@@ -0,0 +1,44 @@
<!---->
<h1>makeup of the day </h1>
august 11, 2022<br>
#fashion #makeup #motd <br>
<br>
<p>Sometimes, I feel like sharing my makeup. <br></p>
<br>
<h2>red eyeshadow as eyeliner </h2>
<p>Red eyeshadow! I wanted to match my makeup to my outfit ~ a black t-shirt with a vibrant orange tiger print and rich tan fall coat with red and black plaid. Red is a forever favorite to wear in igari style, but it's bordering on socially irresponsible to try to look ill during a pandemic. Maybe my red can come back with more conventional styles, though navy and bronze are far superior liner colors for brown eyes. <br></p>
<br>
<p>I applied a red metallic eyeshadow with an eyeliner brush along the outer third of the upper lashline and blended into the inner third. Up to my brow, I used a base shade to even out my tone. The outer third of the lower lash line was lined with deep burgundy and flicked out and up with my finger to form a subtle wing. <br></p>
<br>
<p>Photo is after 8 hours of wear. I think the pencil got a little messy, but the red could last forever. <br></p>
<img src="/static/img/otd/motd_221106.png" alt="(photo: metallic red eyeshadow-as-eyeliner look)"><br>
<br>
<p>Specific shades: <br></p>
<p><ul>
<li>Base: Stila One Step Correct primer </li>
<li>Brow pencil: Ulta Ultra Slim Brow Pencil (Dark Brown) </li>
<li>Eyeshadow: Sydney Grace Queen of Hearts, ABH Base (Norvina palette) </li>
<li>Eyeliner: Urban Decay (Alkaline) </li>
<li>Setting spray: Urban Decay All-Nighter (Ultra Matte) </li>
</ul></p>
<br>
<h2>red eyeshadow-as-eyeliner </h2>
<p>Red eyeshadow! I wanted to match my makeup to my outfit ~ a black t-shirt with a vibrant orange tiger print and rich tan fall coat with red and black plaid. Red is a forever favorite to wear in igari style, but I dropped it because it's plain rude to intentionally look ill and unapproachable during a pandemic. Maybe red can come back with more conventional styles, though navy and bronze are the supreme liner colors for dark brown eyes. <br></p>
<br>
<p>I applied a red metallic eyeshadow with an eyeliner brush along the outer third of the upper lashline and blended into the inner third. Up to my brow, I used a base shade to even out my tone. The outer third of the lower lash line was lined with deep burgundy and flicked out and up with my finger to form a subtle wing. <br></p>
<br>
<p>Photo is after 8 hours of wear. I think the pencil got a little messy, but the red is unmoved. <br></p>
<img src="/static/img/mu/221106.png" alt="(photo: metallic red eyeshadow-as-eyeliner look)"><br>
<br>
<p>Specific shades: <br></p>
<p><ul>
<li>Base: Stila One Step Correct primer </li>
<li>Brow pencil: Ulta Ultra Slim Brow Pencil (dark brown) </li>
<li>Eyeshadow: Sydney Grace Queen of Hearts, ABH Base (Norvina palette) </li>
<li>Eyeliner: Urban Decay Alkaline </li>
<li>Setting spray: Urban Decay All-Nighter Ultra Matte </li>
</ul></p>
<br>
<br>
Last updated July 31, 2022 <br>
<br>
+44
View File
@@ -0,0 +1,44 @@
<!---->
<h1>outfit of the day </h1>
august 11, 2022<br>
#fashion #ootd <br>
<br>
<p>Sometimes, I feel like remembering what I wore. <br></p>
<br>
<h2>lazy tiger</h2>
<p>Don't feel like wearing pants or a blouse. Can never go wrong with my favorite skirt and a t-shirt. Today, I went with a black souveneir t-shirt with a vibrant orange tiger on the front. I think the colors look okay with my fall coat & hat combo. There was a simple moonstone teardrop pendant on a gold-colored chain, but I took it off before picture time. Oops. <br></p>
<br>
<p>I wore makeup to match - red eyeshadow as eyeliner with mauve-purple shimmer blush and a purple-plum lip water stain. <br></p>
<br>
<img src="/static/img/otd/ootd_221106.jpg" alt="(photo: my outfit - a black t-shirt with a painterly tiger's face on the front over a black and dusty purple lace maxi skirt. My coat has red and black plain over rich tan. My cloche hat is nearly the same tan.)"><br>
<br>
<p>Clothes: <br></p>
<p><ul>
<li>Hat: C&C (ebay repurchase of a wholesale hat from an Atlanta Apparel at AmericasMart tradeshow) </li>
<li>Coat: Avec Les Filles's Longline Plaid Blazer in RED MOTIF (Anthropologie) </li>
<li>Pendant: (TJ Maxx)</li>
<li>T-shirt: Cincinnati Zoo gift shop </li>
<li>Skirt: Free People (bought in 2011 and has never had a break) </li>
<li>Socks: some pack from Target </li>
</ul></p>
<br>
<h2>lazy </h2>
<p>Don't feel like wearing pants or a blouse. Can never go wrong with my favorite skirt and a t-shirt. Today, I went with a black souveneir t-shirt with a vibrant orange tiger on the front. I think the colors look okay with my fall coat & hat combo. There was a simple moonstone teardrop pendant on a gold-colored chain, but I took it off before picture time. Oops. <br></p>
<br>
<p>I wore makeup to match - red eyeshadow as eyeliner with mauve-purple shimmer blush and a purple-plum lip water stain. <br></p>
<br>
<img src="/static/img/otd/ootd_221106.jpg" alt="(photo: my outfit - a black t-shirt with a painterly tiger's face on the front over a black and dusty purple lace maxi skirt. My coat has red and black plain over rich tan. My cloche hat is nearly the same tan.)"><br>
<br>
<p>Clothes: <br></p>
<p><ul>
<li>Hat: C&C (ebay repurchase of a wholesale hat from an Atlanta Apparel at AmericasMart tradeshow) </li>
<li>Coat: Avec Les Filles's Longline Plaid Blazer in RED MOTIF (Anthropologie) </li>
<li>Pendant: (TJ Maxx)</li>
<li>T-shirt: Cincinnati Zoo gift shop </li>
<li>Skirt: Free People (bought in 2011 and has never had a break) </li>
<li>Socks: some pack from Target </li>
</ul></p>
<br>
<br>
Last updated July 31, 2022 <br>
<br>
+67 -97
View File
@@ -120,7 +120,7 @@ def find_gallery(name):
gal.append([["name.png","desc"]]) gal.append([["name.png","desc"]])
if name == "Lune": if name == "Lune":
gal.append("Persona") gal.append("Persona")
gal.append([["RingOfFire.jpg","Lune in the Ring of Fire in her Vabbian"],["HallOfMonuments.png","My Guild Wars Necromancer showing off her Hall of Monuments"],["PhariseeFlying.jpg","My Aion Elysian Spiritmaster with really pretty hair"],["LuneMarine.png","Lune Marine, my gold side resistance Water Controller in City of Heroes"],["ArcheageGuild.jpg","My ArcheAge dwarf ghost girl with gold-dipped hair and a frilly gown, sitting with her guildmates"],["Pixelmon.png","Customs Officer Lune and her sidekick Lilligant in Pixelmon"],["tinypool.png","Bikini Lune in a tiny pool with her kitty in Minecraft"]]) gal.append([["RingOfFire.jpg","Lune in the Ring of Fire in her Vabbian"],["HallOfMonuments.png","My Guild Wars Necromancer showing off her Hall of Monuments"],["PhariseeFlying.jpg","My Aion Elysian Spiritmaster with really pretty hair"],["LuneMarine.png","Lune Marine, my gold side resistance Water Controller in City of Heroes"],["ArcheageGuild.jpg","My ArcheAge dwarf ghost girl with gold-dipped hair and a frilly gown, plus her guildmates"],["Pixelmon.png","Customs Officer Lune and her sidekick Lilligant in Pixelmon"],["tinypool.png","Bikini Lune in a tiny pool with her kitty in Minecraft"]])
if name == "Nephele": if name == "Nephele":
gal.append("Verpets") gal.append("Verpets")
gal.append([["name.png","desc"]]) gal.append([["name.png","desc"]])
@@ -138,7 +138,7 @@ def find_gallery(name):
gal.append([["alchemy.png","Morning alchemy before work"],["dream.jpg","Stupid dream bubbles"]]) gal.append([["alchemy.png","Morning alchemy before work"],["dream.jpg","Stupid dream bubbles"]])
if name == "Rune": if name == "Rune":
gal.append("Blessfrey") gal.append("Blessfrey")
gal.append([["AnimeEnding.png","A still from an attempt to emulate the Little Busters ending animation. Man, animating is hard."],["Bless+Rune.png","Rune and his dinosaur mother"],["Blessfrey.png","Emulating old RPG coverart like Elden Gate in mixed media. Don't feel like working on it anymore."],["FlightRising.png","his oc dragon form in FlightRising (I still can't believe they added not-styracosaur to the game!)"],["RuneHeadshot.png","emulating the art style of Battle Girl High School"],["CawfeeCakes_Artfight.png","2022 Artfight attack by CawfeeCakes"],["Teriuuuu_Artfight.png","2020 Artfight attack by Teriuuuu"]]) gal.append([["AnimeEnding.png","A still from an attempt to emulate the Little Busters ending animation. Man, animating is hard."],["Bless+Rune.png","Rune and his dinosaur mother"],["Blessfrey.png","Emulating old RPG coverart like Elden Gate in mixed media. Don't feel like working on it anymore."],["FlightRising.png","his oc dragon form in FlightRising"],["RuneHeadshot.png","emulating the art style of Battle Girl High School"],["CawfeeCakes_Artfight.png","2022 Artfight attack by CawfeeCakes"],["Teriuuuu_Artfight.png","2020 Artfight attack by Teriuuuu"]])
if name == "Ryada": if name == "Ryada":
gal.append("Guild Wars") gal.append("Guild Wars")
gal.append([[]]) gal.append([[]])
@@ -399,6 +399,13 @@ def is_it_time(date):
today_string = today.strftime("%y") + today.strftime("%m") + today.strftime("%d") today_string = today.strftime("%y") + today.strftime("%m") + today.strftime("%d")
return int(date) <= int(today_string) return int(date) <= int(today_string)
def prepare_gdd_page(page, loc):
result = []
with open(loc + page) as f:
result = f.readlines()
content = ''.join(result)
return content
## Static ## ## Static ##
# Serve CSS # Serve CSS
@@ -530,74 +537,41 @@ def fashion():
@route('/blessfrey-gdd') @route('/blessfrey-gdd')
def gddbf(): def gddbf():
"""Game Design Document""" """Game Design Document"""
info = {'css': 'gdd', 'title': 'blessfrey gdd', 'year': find_year()} info = {'css': 'doc', 'title': 'blessfrey gdd', 'year': find_year()}
return template('bf-gdd.tpl', info) return template('bf-gdd.tpl', info)
@route('/gdd') @route('/gdd')
def gdd(): def gdd():
return gddbf() return gddbf()
# Cast @route('/blessfrey-gdd/<page>')
@route('/blessfrey-cast') def page(page):
def cast(): if page.lower() == "credits":
"""Cast Page"""
return char3()
# Credits
@route('/blessfrey-credits')
def creditsbf():
"""Credits Page"""
return credits() return credits()
# ID if page.lower() == "cast":
@route('/blessfrey-ids') return char2()
def id(): if page.lower() == "milestones":
"""ID Page""" return milestones()
info = {'css': 'doc', 'title': 'blessfrey gdd - IDs + keys', 'year': find_year()} if page.lower() == "setting":
return template('bf-id.tpl', info) return setting()
# Jobs if page.lower() in ["style","style guide", "style%20guide"]:
@route('/blessfrey-jobs') return style()
def jobs(): if page.lower() in ["mechanics","game-mechanics","game_mechanics"]:
"""Jobs Page""" return mech()
info = {'css': 'doc', 'title': 'blessfrey gdd - jobs', 'year': find_year()} if page.lower() in ["job","keyword","skill"]:
return template('bf-jobs.tpl', info) return mechpage(page)
# Keywords loc = 'blessfrey-gdd/'
@route('/blessfrey-keywords') info = {'css': 'doc', 'title': 'blessfrey gdd - ' + page, 'year': find_year(), 'topic': page.lower(), 'writeup': prepare_gdd_page(page, loc)}
def keywords(): return template('page.tpl', info)
"""Keywords Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - keywords', 'year': find_year()}
return template('bf-keywords.tpl', info)
# Blessfrey Mechanics # Blessfrey Mechanics
@route('/blessfrey-mechanics') @route('/blessfrey-gdd/mechanics')
def mech(): def mech():
"""mechanics""" """mechanics"""
info = {'css': 'doc', 'title': 'blessfrey gdd - game mechanics', 'year': find_year()} info = {'css': 'doc', 'title': 'blessfrey gdd - game mechanics', 'year': find_year(), 'topic': 'game mechanics', 'writeup': prepare_gdd_page('mechanics', 'blessfrey-gdd/mechanics/')}
return template('bf-mechanics.tpl', info) return template('page.tpl', info)
@route('/blessfrey-inspect') @route('/blessfrey-gdd/mechanics/<page>')
def mech1(): def mechpage(page):
"""inspect""" loc = 'blessfrey-gdd/mechanics/'
info = {'css': 'doc', 'title': 'blessfrey gdd - game mechanics', 'year': find_year()} info = {'css': 'doc', 'title': 'blessfrey gdd - ' + page, 'year': find_year(), 'topic': '<a href="/blessfrey-gdd/mechanics">game mechanic</a> ~ ' + page.lower(), 'writeup': prepare_gdd_page(page, loc)}
return template('bf-mech-inspect.tpl', info) return template('page.tpl', info)
# Mercur
@route('/blessfrey-mercur')
def mercur():
"""Mercur Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - Mercur', 'year': find_year()}
return template('bf-mercur.tpl', info)
# Setting
@route('/blessfrey-setting')
def setting():
"""Setting Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - setting', 'year': find_year()}
return template('bf-setting.tpl', info)
# Skills
@route('/blessfrey-skills')
def skills():
"""Skills Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - skills', 'year': find_year()}
return template('bf-skills.tpl', info)
# Story
@route('/blessfrey-story')
def story():
"""Story Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - story', 'year': find_year()}
return template('bf-story.tpl', info)
# Blessfrey Style Guide Page # Blessfrey Style Guide Page
@route('/blessfrey-style-guide') @route('/blessfrey-style-guide')
def style3(): def style3():
@@ -613,46 +587,26 @@ def style():
"""style guide""" """style guide"""
info = {'css': 'doc', 'title': 'blessfrey style guide', 'year': find_year()} info = {'css': 'doc', 'title': 'blessfrey style guide', 'year': find_year()}
return template('style-guide.tpl', info) return template('style-guide.tpl', info)
# Terms
@route('/blessfrey-terms')
def terms():
"""Terms Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - dictionary of terms', 'year': find_year()}
return template('bf-terms.tpl', info)
# Art Direction
@route('/blessfrey-vibe')
def vibe():
"""GDD Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - vibe', 'year': find_year()}
return template('bf-vibe.tpl', info)
# Website
@route('/website')
def website():
"""Website Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - website', 'year': find_year()}
return template('website.tpl', info)
# Home Page - Index Template
#@route('/')
#def home():
#"""home"""
# loc = 'diary/entries/'
# info = {'css': 'index', 'title': 'blessfrey ~ action rpg by chimchooree', 'year': find_year(), 'news': list_headlines(sort_files(curate_files(gather_files(loc)))[0:10])}
# return template('index.tpl', info)
# Location Page # Location Page
@route('/location/') # if no location given
def loc3():
return setting()
@route('/loc/') # if no location given @route('/loc/') # if no location given
def loc2(): def loc2():
return loc("Lucrest") return setting()
@route('/location/<location_name:path>') @route('/loc/<page:path>')
def loc(location_name): def loc(page):
"""location page""" """location page"""
loc = 'location/' loc = 'loc/'
info = {'css': 'char', 'title': 'blessfrey - location | meet ' + location_name, 'year': find_year(), 'ocs': ["human","giant","serpent"], 'name': location_name, 'profile': prepare_profile(loc, location_name), 'gallery': find_gallery(location_name)} info = {'css': 'doc', 'title': 'blessfrey gdd - setting - ' + page, 'year': find_year(), 'topic': page.lower(), 'writeup': prepare_gdd_page(page, loc)}
abs_app_dir_path = os.path.dirname(os.path.realpath(__file__)) return template('page-setting.tpl', info)
abs_views_path = os.path.join(abs_app_dir_path, 'views') # loc = 'location/'
TEMPLATE_PATH.insert(0, abs_views_path ) # info = {'css': 'char', 'title': 'blessfrey - location | about ' + location_name, 'year': find_year(), 'name': location_name, 'profile': prepare_profile(loc, location_name), 'gallery': find_gallery(location_name)}
return template(os.path.join(abs_views_path,'char.tpl'), info) # abs_app_dir_path = os.path.dirname(os.path.realpath(__file__))
# abs_views_path = os.path.join(abs_app_dir_path, 'views')
# TEMPLATE_PATH.insert(0, abs_views_path )
# return template(os.path.join(abs_views_path,'char.tpl'), info)
# Me Page # Me Page
@route('/dev') @route('/dev')
@@ -685,6 +639,13 @@ def presskit():
info = {'css': 'doc', 'title': 'blessfrey presskit', 'year': find_year()} info = {'css': 'doc', 'title': 'blessfrey presskit', 'year': find_year()}
return template('blessfrey-presskit.tpl', info) return template('blessfrey-presskit.tpl', info)
# Sitemap
@route('/sitemap')
def sitemap():
"""sitemap"""
info = {'css': 'doc', 'title': 'blessfrey sitemap', 'year': find_year()}
return template('sitemap.tpl', info)
# Species Page # Species Page
@route('/race/') # if no species given @route('/race/') # if no species given
def spec4(): def spec4():
@@ -705,6 +666,15 @@ def spec(species_name):
TEMPLATE_PATH.insert(0, abs_views_path ) TEMPLATE_PATH.insert(0, abs_views_path )
return template(os.path.join(abs_views_path,'char.tpl'), info) return template(os.path.join(abs_views_path,'char.tpl'), info)
# Blessfrey - Setting Page
@route('/setting')
def setting2():
return setting()
@route('/blessfrey-gdd/setting')
def setting():
"""setting"""
info = {'css': 'doc', 'title': 'blessfrey gdd - setting', 'year': find_year()}
return template('setting.tpl', info)
# Search Diary by Tag # Search Diary by Tag
@route('/diary/tag/<tagin>') # Start on first Diary tag page if no page given @route('/diary/tag/<tagin>') # Start on first Diary tag page if no page given
+1
View File
@@ -0,0 +1 @@
<p>Country the game takes place in. <br></p>
+1
View File
@@ -0,0 +1 @@
<p>The capital city, a large metropolitan area. <br></p>
+1
View File
@@ -0,0 +1 @@
<p>Blessfrey takes place in Lucrest, Nickajack, a small town unknowingly situated over an abyssal dungeon. <br></p>
+1
View File
@@ -0,0 +1 @@
<p>Dumping grounds for factory rejects. <br></p>
+1
View File
@@ -0,0 +1 @@
<p>Helia's home country. <br></p>
+1
View File
@@ -0,0 +1 @@
<p>All books are always 100% off after you sign up for a library card! Occasionally visited by Mookerjee. <br></p>
+1
View File
@@ -0,0 +1 @@
<p>Obviously you need 10 minigames inside your game, or you aren't scoping properly. <br></p>
+19 -5
View File
@@ -30,9 +30,10 @@
margin:0; margin:0;
font-family: 'pf_ronda_sevenregular', sans-serif; font-family: 'pf_ronda_sevenregular', sans-serif;
background-color: black; background-color: black;
font-size: 1em;
} }
html, body {padding:0; margin:0; height:100%;} html, body {padding:0; margin:0; height:100%;}
footer{ footer {
position: fixed; bottom: 0; left: 0; position: fixed; bottom: 0; left: 0;
color: #C0AAC0; color: #C0AAC0;
background-color: transparent; background-color: transparent;
@@ -65,8 +66,14 @@ h1,h2,h3,h4,img,i {
} }
h1 { h1 {
font-family: 'mitochondriaregular', sans-serif; font-family: 'mitochondriaregular', sans-serif;
font-size: 1.5em;
}
h1 a,h1 a:visited,h1 a:hover,h1 a:active {
font-family: 'mitochondriaregular', sans-serif;
}
h2 a:hover,h2 a:active {
font-family: 'mitochondriaregular', sans-serif;
} }
.mundane {color:#aca79e;} .mundane {color:#aca79e;}
.common {color:#5576d1;} .common {color:#5576d1;}
.unusual {color:#9873AC;} .unusual {color:#9873AC;}
@@ -94,7 +101,7 @@ pre,code {
display: grid; display: grid;
position: relative; position: relative;
grid-template-columns: 1fr; grid-template-columns: 1fr;
grid-template-rows: 3em auto; grid-template-rows: 3.5em auto;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
box-sizing: border-box; box-sizing: border-box;
@@ -104,6 +111,7 @@ pre,code {
grid-area: 1 / 1 / 2 / 2; grid-area: 1 / 1 / 2 / 2;
color: #C0AAC0; color: #C0AAC0;
text-align: center; text-align: center;
font-size: 1.5em;
} }
.top a { .top a {
color: #C0AAC0; color: #C0AAC0;
@@ -111,6 +119,12 @@ pre,code {
} }
.top a:hover { .top a:hover {
color: #A88AA8; color: #A88AA8;
font-family: 'mitochondriaregular', sans-serif;
font-size: .73em;
}
.top a:visited {
color: #C0AAC0;
font-weight: bold;
} }
.content-grid { .content-grid {
@@ -132,12 +146,12 @@ pre,code {
.nav { .nav {
grid-area: 1 / 1 / 2 / 2; grid-area: 1 / 1 / 2 / 2;
background-color: transparent; background-color: transparent;
width: 60vw;
display: grid; display: grid;
grid-template-columns: 26% 51% 23%; grid-template-columns: 26% 51% 23%;
grid-template-rows: 1fr; grid-template-rows: 1fr;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
margin: auto; margin: auto;
min-width: 636px; width: 40vw;
min-width: 374px;
} }
+24 -21
View File
@@ -1,14 +1,29 @@
.content-grid { .content-grid {
max-width: MAX(50em, 50%); display: column;
display: grid; align-content: flex-start;
grid-template-columns: 2fr 1fr;
grid-template-rows: 40px auto 40px;
grid-column-gap: 0em;
grid-row-gap: 0em;
margin: auto; margin: auto;
} }
.diary-grid {
display: flex;
flex-wrap: wrap;
align-content: stretch;
margin-right: 2em;
margin-left: 2em;
}
.diary-pages {
max-width: 55ch;
margin: auto;
margin-top: 0em;
/* margin-right: 1.5em;*/
}
.sidebar {
max-width: 30ch;
margin: auto;
}
.diary-dir { .diary-dir {
flex-shrink: 0; display: flex;
justify-content: center;
background-color: transparent; background-color: transparent;
font-size: 1.5em; font-size: 1.5em;
color: #AAA39D; color: #AAA39D;
@@ -36,15 +51,6 @@
-1px 2px 1px #080410, -1px 2px 1px #080410,
-1px 0 1px #080410; -1px 0 1px #080410;
} }
.diary-dir.top {
grid-area: 1 / 1 / 2 / 3;
padding-top: 0em;
margin: auto;
}
.diary-dir.bottom {
grid-area: 3 / 1 / 4 / 3;
margin: auto;
}
.diary-dir-left { .diary-dir-left {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
@@ -53,6 +59,8 @@
height: 0em; height: 0em;
display: inline-block; display: inline-block;
white-space: nowrap; white-space: nowrap;
margin-left: .3em;
margin-right: .3em;
} }
.diary-dir-number { .diary-dir-number {
background-color: #886488; background-color: #886488;
@@ -67,10 +75,6 @@
vertical-align: middle; vertical-align: middle;
} }
.diary-pages {
grid-area: 2 / 1 / 3 / 2;
margin-right: 2em;
}
.title { .title {
color: white; color: white;
} }
@@ -116,6 +120,7 @@
0 2px 1px #182448, 0 2px 1px #182448,
-1px 2px 1px #182448, -1px 2px 1px #182448,
-1px 0 1px #182448; -1px 0 1px #182448;
font-family: 'mitochondriaregular', sans-serif;
} }
.snippet-content { .snippet-content {
background-color: #C0AAC0; background-color: #C0AAC0;
@@ -169,5 +174,3 @@
background-color: #585c88; background-color: #585c88;
height: 1em; height: 1em;
} }
.sidebar {grid-area: 2 / 2 / 2 / 3;}
+13
View File
@@ -4,3 +4,16 @@
width: 80%; width: 80%;
margin: auto; margin: auto;
} }
.content-grid a:link {
color: #C0AAC0;
}
.content-grid a:visited {
color: #C0AAC0;
}
.content-grid a:hover {
color: #E1B9E6;
}
.content-grid a:active {
color: #C0AAC0;
}
-13
View File
@@ -1,16 +1,3 @@
a {
color: #1D1761;
}
a:hover {
color: #3127A5;
}
a:visited {
color: #1D1761;
}
a:active {
color: #3B2FC6;
}
hr { hr {
border: 1px solid black; border: 1px solid black;
} }
+8 -11
View File
@@ -4,6 +4,7 @@
grid-template-rows: 992px; grid-template-rows: 992px;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
color: white;
} }
.content-left { .content-left {
grid-area: 1 / 1 / 2 / 2; grid-area: 1 / 1 / 2 / 2;
@@ -15,30 +16,26 @@
} }
.content-right { .content-right {
grid-area: 1 / 2 / 2 / 3; grid-area: 1 / 2 / 2 / 3;
background-image: url(../img/dev/collage.png); margin-right: 2em;
/* background-image: url(../img/dev/collage.png);
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;*/
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: auto auto auto auto;
grid-column-gap: 0px;
grid-row-gap: 0px;
} }
.content-right h1, h2, ul, li, b, i, p, img, a { .content-right h1, h2, ul, li, b, i, p, img, a {
background-color: transparent; background-color: transparent;
} }
.content-right a:link { .content-right a:link {
color: #305285; color: #C0AAC0;
} }
.content-right a:visited { .content-right a:visited {
color: #305285; color: #C0AAC0;
} }
.content-right a:hover { .content-right a:hover {
color: #9092ca; color: #E1B9E6;
} }
.content-right a:active { .content-right a:active {
color: #9092ca; color: #C0AAC0;
} }
.content-right ul { .content-right ul {
list-style-type: none; list-style-type: none;
+10 -2
View File
@@ -1,4 +1,10 @@
/*set heart and star to 0px if viewport too small*/ /*set heart and star to 0px if viewport too small*/
@media (max-width: 625px) {
.heart {
width: auto;
}
}
.heart { .heart {
grid-area: 1 / 1 / 2 / 2; grid-area: 1 / 1 / 2 / 2;
background-color: transparent; background-color: transparent;
@@ -15,7 +21,7 @@
background-position: bottom center; background-position: bottom center;
background-size: contain; background-size: contain;
display: grid; display: grid;
grid-template-columns: auto; /*repeat(4, minmax(5ch,128px))*/ grid-template-columns: auto;
grid-template-rows: repeat(4, auto); grid-template-rows: repeat(4, auto);
/*grid-template-columns: minmax(0%,10%) repeat(6, minmax(7ch,96px)) minmax(0%,10%);*/ /*grid-template-columns: minmax(0%,10%) repeat(6, minmax(7ch,96px)) minmax(0%,10%);*/
grid-column-gap: 0px; grid-column-gap: 0px;
@@ -78,11 +84,13 @@
text-align: center; text-align: center;
} }
.navlink a:link { .navlink a:link {
color: #C0AAC0;
} }
.navlink a:visited { .navlink a:visited {
color: #C0AAC0;
} }
.navlink a:hover { .navlink a:hover {
color: #f463ad; color: #E1B9E6;
} }
.navlink a:active { .navlink a:active {
color: #C0AAC0; color: #C0AAC0;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

+23
View File
@@ -0,0 +1,23 @@
<svg width="868" height="868" viewBox="-434 -434 868 868" font-family="Arial" font-size="18" text-anchor="middle" xmlns="http://www.w3.org/2000/svg">
<g fill="#FFF" stroke="#000">
<g stroke-dasharray="2">
<circle r="417" fill="#AFE9C6"/>
<circle r="260" fill="#BCD35F"/>
<circle r="111" fill="#FF7F2A"/>
<circle r="54" fill="#D35F5F"/>
</g>
<path d="M-23.6 11.5a9.84 10.15 0 0 1 0-20.3H23.6a9.84 10.15 0 0 1 0 20.3Z"/>
<path d="M-4.46 14.3a13.34 13.34 0 1 1 8.92 0 4.8 8.66 0 0 1-8.92 0Z"/>
<path d="M-13.1 4.11c10.52 9.21 15.68 9.21 26.2 0" fill="none"/>
</g>
<g font-size="20">
<text y="-327.07">PUBLIC SPACE</text>
<text y="-169.09">SOCIAL SPACE</text>
</g>
<text y="-78.5">PERSONAL<tspan x="0" dy="18">SPACE</tspan></text>
<text y="-15.7">INTIMATE<tspan x="0" y="36.86">SPACE</tspan></text>
<text y="69.84">1.5 ft<tspan x="0" dy="18">(0.45 m)</tspan></text>
<text y="133.19">4 ft<tspan x="0" dy="18">(1.2 m)</tspan></text>
<text y="275.88">12 ft<tspan x="0" dy="18">(3.6 m)</tspan></text>
<text y="392.32">25 ft<tspan x="0" dy="18">(7.6 m)</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

+45
View File
@@ -0,0 +1,45 @@
So God created man in his own image, in the image of God he created him; male and female he created them. ~ Genesis 1:27
God is our refuge and strength, a very present help in trouble. ~ Psalm 46:1
Be still, and know that I am God. ~ Psalm 46:10
Your word is a lamp to my feet and a light to my path. ~ Psalm 119:105
I praise you, for I am fearfully and wonderfully made. Wonderful are your works; my soul knows it very well. ~ Psalm 139:14
Trust in the Lord with all your heart, and do not lean on your own understanding. In all your ways acknowledge him, and he will make straight your paths. ~ Proverbs 3:5-6
One gives freely, yet grows all the richer; another withholds what he should give, and only suffers want. ~ Proverbs 11:24
Death and life are in the power of the tongue, and those who love it will eat its fruits. ~ Proverbs 18:21
Iron sharpens iron, and one man sharpens another. ~ Proverbs 27:17
For I know the plans I have for you, declares the Lord, plans for welfare[a] and not for evil, to give you a future and a hope. ~ Jeremiah 29:11
“Do not lay up for yourselves treasures on earth, where moth and rust destroy and where thieves break in and steal, but lay up for yourselves treasures in heaven, where neither moth nor rust destroys and where thieves do not break in and steal. For where your treasure is, there your heart will be also. ~ Matthew 6:19-21
And which of you by being anxious can add a single hour to his span of life? ~ Matthew 6:27
But seek first the kingdom of God and his righteousness, and all these things will be added to you. ~ Matthew 6:33
Therefore do not be anxious about tomorrow, for tomorrow will be anxious for itself. Sufficient for the day is its own trouble. ~ Matthew 6:34
Come to me, all who labor and are heavy laden, and I will give you rest. Take my yoke upon you, and learn from me, for I am gentle and lowly in heart, and you will find rest for your souls. For my yoke is easy, and my burden is light.” ~ Matthew 11:28-30
I tell you, on the day of judgment people will give account for every careless word they speak, for by your words you will be justified, and by your words you will be condemned. ~ Matthew 12:36-37
Go therefore and make disciples of all nations, baptizing them in the name of the Father and of the Son and of the Holy Spirit, teaching them to observe all that I have commanded you. And behold, I am with you always, to the end of the age. ~ Matthew 28:19-20
For what does it profit a man to gain the whole world and forfeit his soul? ~ Mark 8:36
In the beginning was the Word, and the Word was with God, and the Word was God. ~ John 1:1
For God so loved the world,[a] that he gave his only Son, that whoever believes in him should not perish but have eternal life. ~ John 3:16
For God did not send his Son into the world to condemn the world, but in order that the world might be saved through him. ~ John 3:17
Jesus said to him, “I am the way, and the truth, and the life. No one comes to the Father except through me. ~ John 14:6
For all have sinned and fall short of the glory of God ~ Romans 3:23
For the wages of sin is death, but the free gift of God is eternal life in Christ Jesus our Lord. ~ Romans 6:23
And we know that for those who love God all things work together for good,[a] for those who are called according to his purpose. ~ Romans 8:28
Likewise the Spirit helps us in our weakness. For we do not know what to pray for as we ought, but the Spirit himself intercedes for us with groanings too deep for words. ~ Romans 8:26
Because, if you confess with your mouth that Jesus is Lord and believe in your heart that God raised him from the dead, you will be saved. For with the heart one believes and is justified, and with the mouth one confesses and is saved. ~ Romans 10:9-10
No temptation has overtaken you that is not common to man. God is faithful, and he will not let you be tempted beyond your ability, but with the temptation he will also provide the way of escape, that you may be able to endure it. ~ 1 Corinthians 10:13
Now you are the body of Christ and individually members of it. ~ 1 Corinthians 12:27
Love is patient and kind; love does not envy or boast; it is not arrogant or rude. It does not insist on its own way; it is not irritable or resentful; it does not rejoice at wrongdoing, but rejoices with the truth. Love bears all things, believes all things, hopes all things, endures all things. ~ 1 Corinthians 13:4-7
Therefore, if anyone is in Christ, he is a new creation.[a] The old has passed away; behold, the new has come. ~ 2 Corinthians 5:17
But the fruit of the Spirit is love, joy, peace, patience, kindness, goodness, faithfulness, 23 gentleness, self-control; against such things there is no law. ~ Galatians 5:22-23
For by grace you have been saved through faith. And this is not your own doing; it is the gift of God, not a result of works, so that no one may boast. ~ Ephesians 2:8-9
Let no corrupting talk come out of your mouths, but only such as is good for building up, as fits the occasion, that it may give grace to those who hear. ~ Ephesians 4:29
And I am sure of this, that he who began a good work in you will bring it to completion at the day of Jesus Christ. ~ Philippians 1:6
Do not be anxious about anything, but in everything by prayer and supplication with thanksgiving let your requests be made known to God. And the peace of God, which surpasses all understanding, will guard your hearts and your minds in Christ Jesus. ~ Philippians 4:6-7
I can do all things through him who strengthens me. ~ Philippians 4:13
Do not despise prophecies, 21 but test everything; hold fast what is good. 22 Abstain from every form of evil. ~ 1 Thessalonians 5:20-21
Now faith is the assurance of things hoped for, the conviction of things not seen. ~ Hebrews 11:1
Jesus Christ is the same yesterday and today and forever. ~ Hebrews 13:8
Count it all joy, my brothers, when you meet trials of various kinds, for you know that the testing of your faith produces steadfastness. And let steadfastness have its full effect, that you may be perfect and complete, lacking in nothing. ~ James 1:2-4
So whoever knows the right thing to do and fails to do it, for him it is sin. ~ James 4:17
But in your hearts honor Christ the Lord as holy, always being prepared to make a defense to anyone who asks you for a reason for the hope that is in you; yet do it with gentleness and respect ~ 1 Peter 3:15
Beloved, do not believe every spirit, but test the spirits to see whether they are from God, for many false prophets have gone out into the world. ~ 1 John 4:1
There is no fear in love, but perfect love casts out fear. For fear has to do with punishment, and whoever fears has not been perfected in love. ~ 1 John 4:18
+1
View File
@@ -0,0 +1 @@
One gives freely, yet grows all the richer; another withholds what he should give, and only suffers want. ~ Proverbs 11:24
+2 -2
View File
@@ -1,8 +1,8 @@
% rebase('frame.tpl') % rebase('frame.tpl')
<div class="content-grid"> <div class="content-grid">
<div class="center"><h1>about blessfrey</h1></div> <div class="center"><h1>about blessfrey</h1></div>
<div class="jump"><img src="/static/img/prom/BlessFREY_logo.png" alt="(link: BLESSFREY" class="logo"> <div class="center"><!--<img src="/static/img/prom/BlessFREY_logo.png" alt="(link: BLESSFREY" class="logo">
<a href="#demo">play</a> • <a href="#system">system</a> • <a href="#story">story</a> • <a href="#characters">characters</a> • <a href="#info">info</a><br> --><a href="#demo">play</a> • <a href="#system">system</a> • <a href="#story">story</a> • <a href="#characters">characters</a> • <a href="#info">info</a><br>
</div> </div>
<div class="system" id="system"> <div class="system" id="system">
-6
View File
@@ -1,6 +0,0 @@
% import random
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - Mercur</h1>
<p>All acts of god are attributed to him. His steed is the MessageBus. He is technically an entity. <br></p>
</div>
+2 -2
View File
@@ -5,8 +5,8 @@
<p>The vision for Blessfrey <br></p> <p>The vision for Blessfrey <br></p>
<br> <br>
<ul> <ul>
% for i in [["cast","blessfrey-cast"],["credits","blessfrey-credits"],["game mechanics","blessfrey-mechanics"],["IDs","blessfrey-ids"],["jobs","blessfrey-jobs"],["keywords","blessfrey-keywords"],["Mercur","blessfrey-Mercur"],["milestones","blessfrey-milestones"],["setting","blessfrey-setting"],["skills","blessfrey-skills"],["story","blessfrey-story"],["style guide","style-guide"],["terms","blessfrey-terms"],["vibe","blessfrey-vibe"],["website","website"]]: % for i in ["achievements","cast","controls","credits","dialogue","highlight","ID","inspect menu", "inventory","item","job","keyword","mechanics","Mercur","milestones","pathfinding","proxemics","setting","skill","story","style guide","terms","vibe","website"]:
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i[1]}}>{{i[0]}}</a></li> <li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/blessfrey-gdd/{{i}}>{{i}}</a></li>
% end % end
</ul> </ul>
</div></div> </div></div>
-7
View File
@@ -1,7 +0,0 @@
% import random
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - jobs</h1>
<p>There are six standard jobs available to the player, but more can be discovered in the Abyss. <br></p>
</div>
-7
View File
@@ -1,7 +0,0 @@
% import random
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - keywords</h1>
<p>Keywords are the building blocks of skills. <br></p>
</div>
-12
View File
@@ -1,12 +0,0 @@
% import random
% rebase('frame.tpl')
<div class="content-grid"><div class="center">
<h1>blessfrey game design document </h1>
<p>documenting Blessfrey game mechanics<br></p>
<br>
<ul>
% for i in [["inspect menu","blessfrey-inspect"],["jobs","blessfrey-jobs"],["keywords","blessfrey-keywords"],["skills","blessfrey-skills"]]:
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i[1]}}>{{i[0]}}</a></li>
% end
</ul>
</div></div>
-6
View File
@@ -1,6 +0,0 @@
% rebase('frame.tpl')
<div class="content-grid">
<h1>blessfrey gdd - dictionary of terms</h1>
<p>Definitions of technical terms will go here. </p>
</div>
+8 -5
View File
@@ -1,7 +1,8 @@
% rebase('frame.tpl') % rebase('frame.tpl')
% import re % import re
<div class="content-grid"> <div class="content-grid">
<div class="diary-dir top"> <!-- DIRECTORY -->
<div class="diary-dir">
% max_pages = int((total - 1) / limit) % max_pages = int((total - 1) / limit)
<% <%
# page never below 0 # page never below 0
@@ -86,7 +87,8 @@
</a> </a>
</div> </div>
</div> </div>
<div class="diary-grid">
<!-- DIARY PAGES -->
<div class="diary-pages"> <div class="diary-pages">
<span class=title><h1>diary</h1></span> <span class=title><h1>diary</h1></span>
@@ -125,10 +127,11 @@
</div> </div>
% end % end
</div> </div>
<!-- SIDEBAR -->
% include diary-boxes.tpl % include diary-boxes.tpl
</div>
<div class="diary-dir bottom"> <!-- DIRECTORY -->
<div class="diary-dir">
% max_pages = int((total - 1) / limit) % max_pages = int((total - 1) / limit)
<% <%
# page never below 0 # page never below 0
+3 -3
View File
@@ -17,8 +17,8 @@
<div class="nav-about"> <div class="nav-about">
<a href="/about"> <a href="/about">
<div class="navbutton"><img src="/static/img/nav/about.png" alt="(link: about)"></div> <div class="navbutton"><img src="/static/img/nav/about.png" alt="(link: info)"></div>
<div class="navlink">about</div> <div class="navlink">info</div>
</a> </a>
</div> </div>
@@ -30,6 +30,6 @@
</div> </div>
</div><div class="star"></div></div> </div><div class="star"></div></div>
<div class="links"> <div class="links">
. •  . <a href=/milestones>milestones</a> {{random.choice(['.','•','☆','★'])}} <a href=/gdd>game design document</a> {{random.choice(['.','•','☆','★'])}} <a href=/blessfrey-presskit>presskit</a> {{random.choice(['.','•','☆','★'])}} &#169; chimchooree 2020-{{year}} ☆  .. . <br> . •  . <a href=/milestones>milestones</a> {{random.choice(['.','•','☆','★'])}} <a href=/gdd>gdd</a> {{random.choice(['.','•','☆','★'])}} <a href=/blessfrey-presskit>presskit</a> {{random.choice(['.','•','☆','★'])}}<!-- &#169; chimchooree 2020-{{year}}--> ☆  .. . <br>
</div> </div>
</div></footer> </div></footer>
+4 -3
View File
@@ -1,14 +1,15 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<head>
% include('header.tpl') % include('header.tpl')
</head>
<body> <body>
<div class="grid"> <div class="grid">
<div class="top">.  ★. . <a href="/">blessfrey.me</a> .. ☆  .</div> <div class="top">.  ★. . <a href="/">blessfrey.me</a> .. .</div>
{{!base}} {{!base}}
+17 -38
View File
@@ -1,57 +1,36 @@
% import random
% rebase('frame.tpl') % rebase('frame.tpl')
<div class="content-grid"> <div class="content-grid">
<div class="content-left"> <div class="content-left">
</div> </div>
<div class="content-right"> <div class="content-right">
</div>
</div>
<!--
<div class="intro"> <div class="intro">
<p><b>hello</b>, call me chimchooree. <br></p> <h2>hello,</h2>
<p>call me chimchooree. <br></p>
<br> <br>
<p>I'm a developer from the USA and like to show off my projects here. I dabble in Python, Java, Angular, Godot Engine, and HTML5+CSS, but I sew clothes, draw, and write, too. <br></p> <p>I'm a developer from the USA and like to show off my projects here. I dabble in Python, Java, Angular, Godot Engine, and HTML5+CSS, but I sew clothes, draw, and write, too. <br></p>
<br> <br>
Contact: </div>
<div class="contact">
<h2>contact</h2>
<p>I wouldn't mind hearing from you. <br></p>
<ul> <ul>
<li><a href="https://discord.com/">Discord (CustomsOfficer#3449)</a> </li> <li><a href="https://discord.com/">Discord (CustomsOfficer#3449)</a> </li>
<li><a href="https://twitter.com/lilchimchooree">Twitter (@lilchimchooree)</a> </li> <li><a href="https://twitter.com/lilchimchooree">Twitter (@lilchimchooree)</a> </li>
<li><a href="https://flightrising.com/main.php?p=lair&tab=userpage&id=525948">FlightRising (Aristene#525948)</a> </li>
</ul> </ul>
<br>
</div> </div>
<div class="rpg">
<h2>blessfrey is...</h2>
<p>a Godot Engine action rpg inspired by Guild Wars 1's class and skill systems, which were in turn inspired by Magic: The Gathering. You will amass a large library of skills through exploration and practice, but you may only take 8 with you into combat. You will also befriend AI companions and manage the skillbars of your team. Plan synergies and team strategies to overcome each challenge. Enemies will be have skillbars of their own, so the same skillbar won't work everywhere! No decision is permanent, so experiment to your heart's content. <br></p>
<br>
<p>Okay, I lied. Blessfrey also has a dual job system. The job you pick at character creation is permanent, but you can take a second as a side gig. Change your side gig frequently to find the best combinations! <br></p>
<br>
<p>I'm currently working towards the first demo! Learn more on the <a href="/demo">Blessfrey page</a> or <a href="/diary/tag/blessfrey">my blog</a>. <br></p>
<br>
<p><a href="/blessfrey-presskit">Presskit is available here.</a> <br></p>
</div>
<div class="fashion">
<h2>fashion is...</h2>
<p>problem-solving, just like any design field. I approach each garment as a realization of both personal and social desires and technical and mathematical challenges. <br></p>
<br>
<p>Though I enjoy the full process of apparel construction, technical design and pattern-making are my strengths. I'm creative but I'm able to engage my technical background, too, when breaking down a sketch of a 3D vision into 2D pieces that will fit a person's measurements, place design elements at flattering locations, and fall within budget and time limitations. It is the pattern-maker, after all, who numbers the yarns on a garment and prepares zipper placement within an eighth of an inch. <br></p>
<br>
<p>I make individual or small batches of each design, but I retain patterns for future reference. I also repair and alter existing clothing to improve fit or style. Read about my collections on the <a href="/fashion">fashion page</a> or on <a href="/diary/tag/fashion">my blog</a>. <br></p>
</div>
<div class="projects"> <div class="projects">
<h2>other projects</h2> <h2>other projects</h2>
<p>The most obvious is <b>blessfrey.me</b>, this very portfolio and blog website. It is coded in <a href="https://bottlepy.org/docs/dev/">Bottle: Python</a>, <a href="https://bottlepy.org/docs/dev/stpl.html">SimpleTemplate</a>, and HTML+CSS. Any embedded applications will probably be HTML5. <br></p> <p><ul>
<br> <li>{{random.choice(['.','•','☆','★'])}}&#9;<b>blessfrey.me</b> - The most obvious, this very portfolio and blog website. It is coded in <a href="https://bottlepy.org/docs/dev/">Bottle: Python</a>, <a href="https://bottlepy.org/docs/dev/stpl.html">SimpleTemplate</a>, and HTML+CSS. Any embedded applications are probably be HTML5. </li>
<p>Cat Store - Java, text-based cat breeding and cat show life sim. <br></p> <li>{{random.choice(['.','•','☆','★'])}}&#9;Cat Store</b> - Java, text-based cat breeding and cat show life sim. </li>
<br> <li>{{random.choice(['.','•','☆','★'])}}&#9;<a href="https://chimchooree.itch.io/">itch.io (chimchooree)</a> and <a href="https://gitlab.com/chimchooree">GitLab (chimchooree)</a> for micro games and general coding projects. </li>
<p>I'll also leave my <a href="https://chimchooree.itch.io/">itch.io (chimchooree)</a> and <a href="https://gitlab.com/chimchooree">GitLab (chimchooree)</a> for micro games and general coding projects. <br></p> <li>{{random.choice(['.','•','☆','★'])}}&#9;OCs from gamedev projects, creative writing, and games are stored in the <a href="/characters">characters page</a>. </li>
<li>{{random.choice(['.','•','☆','★'])}}&#9;<a href="/diary/tag/OoTD">OotD</a> and <a href="/diary/tag/MoTD">MotD</a> looks are periodically shared in my <a href="/diary/tag/fashion">diary</a>. </li>
</ul></p>
</div>
</div> </div>
<div class="ocs">
<h2>characters</h2>
<p>View my characters from gamedev projects, creative writing, and elsewhere on the <a href="/characters">characters page</a><br></p>
</div>-->
+1 -1
View File
@@ -29,7 +29,7 @@
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic audio adjustments - volume slider, mute button</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic audio adjustments - volume slider, mute button</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>pause button</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>pause button</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>activator - button, switch</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>activator - button, switch</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>item pickup</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=rare>item pickup</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>inventory</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>inventory</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>interact - character, container</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>interact - character, container</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>containers</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>containers</span> </li>
+6
View File
@@ -0,0 +1,6 @@
% rebase('frame.tpl')
% import random
<div class="content-grid">
<h1><a href="/gdd" class="h1link">blessfrey gdd</a> - <a href="/blessfrey-gdd/setting">setting</a> - {{!topic}}</h1>
{{!writeup}}
</div>
+6
View File
@@ -0,0 +1,6 @@
% rebase('frame.tpl')
% import random
<div class="content-grid">
<h1><a href="/gdd" class="h1link">blessfrey gdd</a> - {{!topic}}</h1>
{{!writeup}}
</div>
+11
View File
@@ -0,0 +1,11 @@
% import random
% rebase('frame.tpl')
<div class="content-grid">
<h1><a href="/gdd">blessfrey gdd</a> - setting</h1>
<p>Blessfrey takes place in Lucrest, Nickajack, a small town unknowingly situated over an abyssal dungeon. <br></p>
<br>
<ul>
% for i in ["arboretum","black lake","buffer","club 302","go long sporting goods","lucrest","lusk apothecary","mayor's mansion","mercur library","merry-go-round","nickajack","questionmart","scrapyard","sixth view baptist","thunderspy arcade","USA"]:
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/loc/{{i}}>{{i}}</a></li>
% end
</ul>
+77
View File
@@ -0,0 +1,77 @@
% import random
% rebase('frame.tpl')
<div class="content-grid"><div class="center">
<h1>sitemap </h1>
<p>every page on blessfrey.me that I can remember <br></p>
<br>
<details>
<summary><a href="diary">diary</a></summary>
<ul>
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/diary/1>specific diary page</a></li>
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/diary/tag/webdev>specific diary tag</a></li>
% for i in ["220831"]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i}}>{{i}}</a></li>
% end
</ul>
</details>
<br>
<a href="play">play</a><br>
<br>
<details>
<summary><a href="about">info</a></summary>
<ul>
% for i in ["milestones","gdd","presskit","characters"]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i}}>{{i}}</a></li>
% end
</ul>
</details>
<br>
<a href="dev">dev</a><br>
<br>
<details>
<summary><a href="gdd">gdd</a></summary>
<ul>
% for i in ["cast","credits","ID","inspect menu","item","job","keyword","mechanics","Mercur","milestones","proxemics","setting","skill","story","style guide","terms","vibe","website"]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i}}>{{i}}</a></li>
% end
</ul>
</details>
<br>
<details>
<summary><a href="characters">characters</a></summary>
<ul>
% for i in ["Helia","Rune","Tessa","Abbey","Calder","Silke","Aristen","Chimchooree","Lune"]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/char/{{i}}>{{i}}</a></li>
% end
</ul>
</details>
<br>
<details>
<summary><a href="species">species</a></summary>
<ul>
% for i in ["human"]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/species/{{i}}>{{i}}</a></li>
% end
</ul>
</details>
<br>
<details>
<summary><a href="location">location</a></summary>
<ul>
% for i in ["Lucrest"]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/loc/{{i}}>{{i}}</a></li>
% end
</ul>
</details>
<br>
<a href="presskit">presskit</a><br>
</div></div>