Compare commits

..
1 Commits
Author SHA1 Message Date
chimchooree 4a261ace16 this one, not the first 2022-10-25 23:46:39 -05:00
55 changed files with 288 additions and 678 deletions
-1
View File
@@ -1 +0,0 @@
<p>All acts of god are attributed to him. His steed is the MessageBus. He is technically an entity. <br></p>
-11
View File
@@ -1,11 +0,0 @@
<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>
-16
View File
@@ -1,16 +0,0 @@
<h2>description </h2>
<p>pushing buttons and stuff <br></p>
<br>
<h2>list of default controls </h2>
<p><ul>
<li>I: 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>
-27
View File
@@ -1,27 +0,0 @@
<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>
-48
View File
@@ -1,48 +0,0 @@
<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>Base items 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>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>
<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 floor item is targeted, that is, a 'target' (left-click) triggers a $Item/Body/Sprite/Sprite.gd/_on_input_event. If 'no_move_to_target' (shift) is held while targeting, the item 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 floor items' <a href="/blessfrey-gdd/inspect">inspect menu</a>. Choosing it triggers that floor item'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 item is within the player's <a href="/blessfrey-gdd/proxemics">intimate distance</a>, the character will be prompted to pick up the item.
<br>
<p>Otherwise, <a href="/blessfrey-gdd/pathfinding">pathfinding</a> begins towards the floor item. Upon arrival, it calls floor_item.pick_up().pick_up(). The floor item'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>
<br>
<h2>challenges/known issues </h2>
<p> <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, floor item✗ </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
@@ -1,2 +0,0 @@
<p>There are six standard jobs available to the player, but more can be discovered in the Abyss. <br></p>
-2
View File
@@ -1,2 +0,0 @@
<p>Keywords are the building blocks of skills. <br></p>
-22
View File
@@ -1,22 +0,0 @@
<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
@@ -1,28 +0,0 @@
<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
@@ -1,35 +0,0 @@
<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>It's so unfortunate that proxemics became associated with the pandemic over anthropology. I kinda cringe when I hear "social distance" now tbh. I still like the implication of a generalized "personal bubble" instead of the solely combat-oriented "aggro bubble" of other RPGs. I don't really want to change, but the term just got sour. 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 was made 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>
-20
View File
@@ -1,20 +0,0 @@
% 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>
</div>
% import random
% rebase('frame.tpl')
<div class="content-grid"><div class="center">
<h1>blessfrey setting </h1>
<p>Blessfrey's world starts in Lucrest, an economic boomtown in the rural South, and expands deep through the pockets and tunnels of the earth until another world is discovered. <br></p>
<br>
<ul>
% for i in [["csa","blessfrey-csa"],["castaway kingdom","blessfrey-castaway-kingdom"],["huntsville","blessfrey-huntsville"],["Lucrest","blessfrey-lucrest"],["usa","blessfrey-usa"]]:
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i[1]}}>{{i[0]}}</a></li>
% end
</ul>
</div></div>
-22
View File
@@ -1,22 +0,0 @@
<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 -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, 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> <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>
+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 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 some pretty comical blunt-force solutions for her jobs. <br></p>
+2 -1
View File
@@ -8,5 +8,6 @@
<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> fish </li> <li><b>dislikes:</b> Prince Rurik </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, whatever that means. <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. <br></p>
-24
View File
@@ -1,24 +0,0 @@
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
@@ -1,24 +0,0 @@
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
@@ -1,24 +0,0 @@
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>
-44
View File
@@ -1,44 +0,0 @@
<!---->
<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
@@ -1,44 +0,0 @@
<!---->
<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>
+89 -45
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, 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"]]) 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"]])
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"],["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 (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"]])
if name == "Ryada": if name == "Ryada":
gal.append("Guild Wars") gal.append("Guild Wars")
gal.append([[]]) gal.append([[]])
@@ -399,13 +399,6 @@ 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
@@ -537,39 +530,74 @@ def fashion():
@route('/blessfrey-gdd') @route('/blessfrey-gdd')
def gddbf(): def gddbf():
"""Game Design Document""" """Game Design Document"""
info = {'css': 'doc', 'title': 'blessfrey gdd', 'year': find_year()} info = {'css': 'gdd', '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()
@route('/blessfrey-gdd/<page>') # Cast
def page(page): @route('/blessfrey-cast')
if page.lower() == "credits": def cast():
"""Cast Page"""
return char3()
# Credits
@route('/blessfrey-credits')
def creditsbf():
"""Credits Page"""
return credits() return credits()
if page.lower() == "cast": # ID
return char2() @route('/blessfrey-ids')
if page.lower() == "milestones": def id():
return milestones() """ID Page"""
if page.lower() in ["style","style guide", "style%20guide"]: info = {'css': 'doc', 'title': 'blessfrey gdd - IDs + keys', 'year': find_year()}
return style() return template('bf-id.tpl', info)
if page.lower() in ["mechanics","game-mechanics","game_mechanics"]: # Jobs
return mech() @route('/blessfrey-jobs')
if page.lower() in ["job","keyword","skill"]: def jobs():
return mechpage(page) """Jobs Page"""
loc = 'blessfrey-gdd/' info = {'css': 'doc', 'title': 'blessfrey gdd - jobs', 'year': find_year()}
info = {'css': 'doc', 'title': 'blessfrey gdd - ' + page, 'year': find_year(), 'topic': page.lower(), 'writeup': prepare_gdd_page(page, loc)} return template('bf-jobs.tpl', info)
return template('page.tpl', info) # Keywords
@route('/blessfrey-keywords')
def keywords():
"""Keywords Page"""
info = {'css': 'doc', 'title': 'blessfrey gdd - keywords', 'year': find_year()}
return template('bf-keywords.tpl', info)
# Blessfrey Mechanics # Blessfrey Mechanics
@route('/blessfrey-gdd/mechanics') @route('/blessfrey-mechanics')
def mech(): def mech():
"""mechanics""" """mechanics"""
info = {'css': 'doc', 'title': 'blessfrey gdd - game mechanics', 'year': find_year(), 'topic': 'game mechanics', 'writeup': prepare_gdd_page('mechanics', 'blessfrey-gdd/mechanics/')} info = {'css': 'doc', 'title': 'blessfrey gdd - game mechanics', 'year': find_year()}
return template('page.tpl', info) return template('bf-mechanics.tpl', info)
@route('/blessfrey-gdd/mechanics/<page>') @route('/blessfrey-inspect')
def mechpage(page): def mech1():
loc = 'blessfrey-gdd/mechanics/' """inspect"""
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)} info = {'css': 'doc', 'title': 'blessfrey gdd - game mechanics', 'year': find_year()}
return template('page.tpl', info) return template('bf-mech-inspect.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():
@@ -585,15 +613,38 @@ 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 loc("Lucrest")
@route('/loc/') # if no location given @route('/loc/') # if no location given
def loc2(): def loc2():
return loc("Lucrest") return loc("Lucrest")
@route('/loc/<location_name:path>') @route('/location/<location_name:path>')
def loc(location_name): def loc(location_name):
"""location page""" """location page"""
loc = 'location/' loc = 'location/'
@@ -634,13 +685,6 @@ 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():
+6 -20
View File
@@ -30,7 +30,6 @@
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{
@@ -66,14 +65,8 @@ 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;}
@@ -101,7 +94,7 @@ pre,code {
display: grid; display: grid;
position: relative; position: relative;
grid-template-columns: 1fr; grid-template-columns: 1fr;
grid-template-rows: 3.5em auto; grid-template-rows: 3em 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;
@@ -111,7 +104,6 @@ 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;
@@ -119,12 +111,6 @@ 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 {
@@ -141,17 +127,17 @@ pre,code {
grid-row-gap: 0px; grid-row-gap: 0px;
background-color: transparent; background-color: transparent;
width: 100vw; width: 100vw;
min-width: 636px; /*min-width: 636px;*/
} }
.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: auto;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
margin: auto; margin: auto;
width: 40vw; /* min-width: 636px;*/
min-width: 374px;
} }
+21 -24
View File
@@ -1,29 +1,14 @@
.content-grid { .content-grid {
display: column; max-width: MAX(50em, 50%);
align-content: flex-start; display: grid;
margin: auto; grid-template-columns: 2fr 1fr;
} grid-template-rows: 40px auto 40px;
.diary-grid { grid-column-gap: 0em;
display: flex; grid-row-gap: 0em;
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; 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;
@@ -51,6 +36,15 @@
-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;
@@ -59,8 +53,6 @@
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;
@@ -75,6 +67,10 @@
vertical-align: middle; vertical-align: middle;
} }
.diary-pages {
grid-area: 2 / 1 / 3 / 2;
margin-right: 2em;
}
.title { .title {
color: white; color: white;
} }
@@ -120,7 +116,6 @@
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;
@@ -174,3 +169,5 @@
background-color: #585c88; background-color: #585c88;
height: 1em; height: 1em;
} }
.sidebar {grid-area: 2 / 2 / 2 / 3;}
-13
View File
@@ -4,16 +4,3 @@
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,3 +1,16 @@
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;
} }
+11 -8
View File
@@ -4,7 +4,6 @@
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;
@@ -16,26 +15,30 @@
} }
.content-right { .content-right {
grid-area: 1 / 2 / 2 / 3; grid-area: 1 / 2 / 2 / 3;
margin-right: 2em; background-image: url(../img/dev/collage.png);
/* 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: #C0AAC0; color: #305285;
} }
.content-right a:visited { .content-right a:visited {
color: #C0AAC0; color: #305285;
} }
.content-right a:hover { .content-right a:hover {
color: #E1B9E6; color: #9092ca;
} }
.content-right a:active { .content-right a:active {
color: #C0AAC0; color: #9092ca;
} }
.content-right ul { .content-right ul {
list-style-type: none; list-style-type: none;
+15 -19
View File
@@ -1,10 +1,5 @@
/*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;
@@ -21,12 +16,14 @@
background-position: bottom center; background-position: bottom center;
background-size: contain; background-size: contain;
display: grid; display: grid;
grid-template-columns: auto; grid-template-columns: auto; /*repeat(4, minmax(5ch,128px))*/
grid-template-rows: repeat(4, auto); grid-template-rows: repeat(4, minmax(0px,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;
grid-row-gap: 0px; grid-row-gap: 0px;
align-items: center; align-items: center;
font-size: 2vw;
margin-bottom: 0px;
} }
.star { .star {
grid-area: 1 / 3 / 2 / 4; grid-area: 1 / 3 / 2 / 4;
@@ -40,42 +37,42 @@
.nav-diary { .nav-diary {
grid-area: 1 / 1 / 2 / 2; grid-area: 1 / 1 / 2 / 2;
display: grid; display: grid;
grid-template-columns: 100%; grid-template-columns: auto;
grid-template-rows: 80% 20%; grid-template-rows: 80% 20%;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
flex-direction: column; flex-direction: column;
min-width: 48px; /*min-width: 48px;*/
} }
.nav-play { .nav-play {
grid-area: 1 / 2 / 2 / 3; grid-area: 1 / 2 / 2 / 3;
display: grid; display: grid;
grid-template-columns: 100%; grid-template-columns: auto;
grid-template-rows: 80% 20%; grid-template-rows: 80% 20%;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
flex-direction: column; flex-direction: column;
min-width: 48px; /*min-width: 48px;*/
} }
.nav-about { .nav-about {
grid-area: 1 / 3 / 2 / 4; grid-area: 1 / 3 / 2 / 4;
display: grid; display: grid;
grid-template-columns: 100%; grid-template-columns: auto;
grid-template-rows: 80% 20%; grid-template-rows: 80% 20%;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
flex-direction: column; flex-direction: column;
min-width: 48px; /*min-width: 48px;*/
} }
.nav-dev { .nav-dev {
grid-area: 1 / 4 / 2 / 5; grid-area: 1 / 4 / 2 / 5;
display: grid; display: grid;
grid-template-columns: 100%; grid-template-columns: auto;
grid-template-rows: 80% 20%; grid-template-rows: 80% 20%;
grid-column-gap: 0px; grid-column-gap: 0px;
grid-row-gap: 0px; grid-row-gap: 0px;
flex-direction: column; flex-direction: column;
min-width: 48px; /*min-width: 48px;*/
} }
.navlink { .navlink {
font-size: 110%; font-size: 110%;
@@ -84,20 +81,19 @@
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: #E1B9E6; color: #f463ad;
} }
.navlink a:active { .navlink a:active {
color: #C0AAC0; color: #C0AAC0;
} }
.nav-grid img { .nav-grid img {
height: auto; height: auto;
width: 100%; max-width:100%;
max-height:100%;
} }
.links { .links {
grid-area: 2 / 1 / 3 / 2; grid-area: 2 / 1 / 3 / 2;
Binary file not shown.

After

Width:  |  Height:  |  Size: 447 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

-23
View File
@@ -1,23 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 KiB

+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="center"><!--<img src="/static/img/prom/BlessFREY_logo.png" alt="(link: BLESSFREY" class="logo"> <div class="jump"><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
@@ -0,0 +1,6 @@
% 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 ["achievements","cast","controls","credits","ID","inspect menu", "inventory","item","job","keyword","mechanics","Mercur","milestones","pathfinding","proxemics","setting","skill","story","style guide","terms","vibe","website"]: % 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"]]:
<li class="list">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/blessfrey-gdd/{{i}}>{{i}}</a></li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<a href=/{{i[1]}}>{{i[0]}}</a></li>
% end % end
</ul> </ul>
</div></div> </div></div>
+6 -1
View File
@@ -1,3 +1,6 @@
% 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>
@@ -252,5 +255,7 @@
</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</span> 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</div> stage of each entity. The earlier the ref ID, the older the entity. <br></p>
<br> <br>
</div>
+7
View File
@@ -0,0 +1,7 @@
% 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
@@ -0,0 +1,7 @@
% 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>
@@ -1,3 +1,6 @@
% 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>
@@ -9,7 +12,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 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> <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>
<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>
@@ -20,8 +23,6 @@
<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>
@@ -31,3 +32,4 @@
<li>floor items✗ </li> <li>floor items✗ </li>
<li>inventory items✗ </li> <li>inventory items✗ </li>
</ul> </ul>
</div>
+12
View File
@@ -0,0 +1,12 @@
% 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>
+7
View File
@@ -0,0 +1,7 @@
% 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>
</div>
@@ -1,2 +1,7 @@
% 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,3 +1,7 @@
% 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>
+6
View File
@@ -0,0 +1,6 @@
% rebase('frame.tpl')
<div class="content-grid">
<h1>blessfrey gdd - dictionary of terms</h1>
<p>Definitions of technical terms will go here. </p>
</div>
@@ -1,3 +1,6 @@
% 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>
@@ -52,3 +55,5 @@
<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>
+5 -8
View File
@@ -1,8 +1,7 @@
% rebase('frame.tpl') % rebase('frame.tpl')
% import re % import re
<div class="content-grid"> <div class="content-grid">
<!-- DIRECTORY --> <div class="diary-dir top">
<div class="diary-dir">
% max_pages = int((total - 1) / limit) % max_pages = int((total - 1) / limit)
<% <%
# page never below 0 # page never below 0
@@ -87,8 +86,7 @@
</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>
@@ -127,11 +125,10 @@
</div> </div>
% end % end
</div> </div>
<!-- SIDEBAR -->
% include diary-boxes.tpl % include diary-boxes.tpl
</div>
<!-- DIRECTORY --> <div class="diary-dir bottom">
<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: info)"></div> <div class="navbutton"><img src="/static/img/nav/about.png" alt="(link: about)"></div>
<div class="navlink">info</div> <div class="navlink">about</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>gdd</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>game design document</a> {{random.choice(['.','•','☆','★'])}} <a href=/blessfrey-presskit>presskit</a> {{random.choice(['.','•','☆','★'])}} &#169; chimchooree 2020-{{year}} ☆  .. . <br>
</div> </div>
</div></footer> </div></footer>
+3 -4
View File
@@ -1,15 +1,14 @@
<!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}}
+38 -17
View File
@@ -1,36 +1,57 @@
% 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">
<h2>hello,</h2> <p><b>hello</b>, call me chimchooree. <br></p>
<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>
</div> Contact:
<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><ul> <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>
<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> <br>
<li>{{random.choice(['.','•','☆','★'])}}&#9;Cat Store</b> - Java, text-based cat breeding and cat show life sim. </li> <p>Cat Store - Java, text-based cat breeding and cat show life sim. <br></p>
<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> <br>
<li>{{random.choice(['.','•','☆','★'])}}&#9;OCs from gamedev projects, creative writing, and games are stored in the <a href="/characters">characters page</a>. </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;<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=rare>item pickup</span> </li> <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>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
@@ -1,6 +0,0 @@
% rebase('frame.tpl')
% import random
<div class="content-grid">
<h1><a href="/gdd" class="h1link">blessfrey gdd</a> - {{!topic}}</h1>
{{!writeup}}
</div>
-77
View File
@@ -1,77 +0,0 @@
% 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>