documentation for skills; full site proofreading

master
chimchooree 2 years ago
parent ca5f0f984e
commit 6c4399a7f1

@ -7,6 +7,11 @@
<li><a href="/blessfrey-gdd/docs/tangible-body">tangible-body</a> </li>
</ul> <br></p>
<br>
<h2>skill</h2>
<p><ul>
<li><a href="/blessfrey-gdd/docs/skill-json">json file</a> </li>
</ul></p>
<br>
<h2>UI</h2>
<p><ul>
<li><a href="/blessfrey-gdd/docs/highlight">highlight</a> </li>

@ -0,0 +1,22 @@
<p>A skill is defined as a <a href="">JSON file</a> housed at res://res/text/skills/. Its filename is its base id, and all data and keywords are expressed through JSON. <br></p>
<br>
<h2>structure </h2>
<p>A skill is defined as a <a href="">JSON file</a> housed at res://res/text/skills/. Its filename is its base id, and all data and keywords are expressed through JSON. <br></p>
<br>
<p>A skill's JSON array contains a... <br></p>
<ul>
<li>"note" (unused but useful summary for humans)</li>
<li>"id" (the base id)</li>
<li>"name_key" (key used by the TranslationServer)</li>
<li>"name" (English name used for file/folder naming)</li>
<li>"prof" (its associated job)</li>
<li>"stat" (its associated perk or attribute)</li>
<li>"e_cost" (its spirit cost)</li>
<li>"a_time" (its activation duration)</li>
<li>"cd" (its cooldown duration)</li>
<li>"target" (list of possible targets: self, etc.)</li>
<li>"s_range" (its range: social, etc)</li>
<li>"functionality" (list of keywords)</li>
</ul>
<br>
<p>Every skill's functionality is built from keywords read from that list. Each keyword is a dictionary containing its "type" (keyword's category) and some optional data. <br></p>

@ -2,8 +2,6 @@
<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>
<h2>structure </h2>
<p>relevant <br></p>
<br>
<p>Every tangible entity has an exported dictionary of inspect_options: {index: ['tr_key', 'method']}. For example, {0:['tr_pick up','pickup'],1:['tr_extinguish','extinguish']}. Every tangible appends 'examine' at ready. <br></p>
<br>
<p>The Clickable has a _ready input event signal looking for "right-click." <br></p>

@ -1,2 +1,66 @@
<h2>description </h2>
<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>
<br>
<h2>structure </h2>
<p>A skill is defined as a <a href="/blessfrey-gdd/docs/skill-json">JSON file</a> housed at res://res/text/skills/. Its filename is its base id, and all data and keywords are expressed through JSON. <br></p>
<br>
<p>A SkillEquip contains a skill's base id. SkillEquips are housed at Skillbar/Skill SlotX's skill variable and the entity's arsenal. <br></p>
<br>
<p>A SkillEquip contains a DMV. A DMV handles the flow of the skill and collects skill data, including its tags. <br></p>
<br>
<h2>logic </h2>
<p>Every skill is built from a JSON dictionary, and its functionality is built from a list of nested dictionaries. <br></p>
<br>
<p>At ready, the SkillBase singleton uses the JSONreader singleton to convert all the JSON files into an array of skill dictionaries, accessed using the desired skill's base id. <br></p>
<br>
<p>A character's skill library's skill_library holds an array of all the base_ids for the skills he knows. When a skill is learned, it is added to the skill_library and passes the skill and the character through the MessageBus to the LearnSkill event handler. <br></p>
<br>
<p>The LearnSkill handler instances a SkillEquip and adds it to the character. The character entity appends the SkillEquip to its skill_arsenal and adds it as a child to the SkillBase. If the character has an empty slot on his skillbar, the skill is equipped onto the character. The character's Skillbar/Skill SlotX's skill variable holds the SkillEquip. <br></p>
<br>
<p>The character decides to use a skill. The character find_skill(slot index) returns the SkillEquip, whose use method takes the skill's dealer and taker. <br></p>
<br>
<p>If it doesn't fail, the SkillEquip creates a cooldown timer and sets cooling to true and sets up and enters its DMV. <br></p>
<br>
<p>The DMV publishes 'skill_used' along with {id,dealer,taker}. Then it runs the activation time, consumes the skill cost, adds its tags, then registers the skill. <br></p>
<br>
<p>Skill registry at the DMV involves registering each keyword and its activation requisites. <br></p>
<br>
<p>If the keyword is an 'if', it parses the keyword's conditional statement, it registers the accompanying "then" keyword. Ifs are one-time conditionals, so if it's not true at registry, the whole keyword chunk misses its chance. <br></p>
<br>
<p>If the keyword is 'when', it generates a 'when' event handler from res://skills/keyword/when/when.tscn and connects the 'happened' signal to registering the accompanying then keyword. Tags are added for the 'when', support for removal by tag is set up, and the 'when' is entered. <br></p>
<br>
<p>'When' has a 'repeat', so it can trigger as many times as desired. Once is the assumed 'repeat', and -1 is an infinite repeat. The 'when' subscribes to its signal and provides itself as the handler. If it's conditional signal is just 'duration', a timer is set up and publishes to 'duration'. When the desired signal triggers, it verifies whether the full conditions of the 'when' are satisfied and should emit a 'happened' (and the DMV should register 'then'). If 'repeat' - 1 isn't 0, it goes around again. <br></p>
<br>
<p>If the keyword is 'expire', it frees the relevant keyword. <br></p>
<br>
<p>If the keyword is 'refresh', it resets the relevant keyword. <br></p>
<br>
<p>If the keyword is just a 'keyword', it instances the relevant keyword object, tags it, sets up removal by tag, adds it as a child, then enters it, doing whatever special code the keyword does. <br></p>
<br>
<h2>challenges/known issues </h2>
<p>Skill stuff -> character level but maybe should be entity level <br></p>
<br>
<p>I think every character has a skill equip for every known skill in his arsenal. Is that too many? Should one copy be on the SkillBase? <br></p>
<br>
<h2>works for...</h2>
<ul>
<li>skill autoequip from save✗ </li>
<li>skill equip new skill/empty slot/rearrange skillbar✗ </li>
<li>skill use by click/keyboard/AI selection✗ </li>
<li>skill range✗ </li>
<li>skill move into range✗ </li>
<li>skill activation✓ </li>
<li>skill cooldown✓ </li>
<li>skill cost/insuffient funds✗ </li>
<li>skill interrupt✗ </li>
<li>skill removal✗ </li>
<li>room/equipment skill✗ </li>
<li>Skill. (20 seconds) Gain 5 spirit every time you use a skill.✗ </li>
<li>If character has over 50% health, deal 75 damage.✗ </li>
<li>Blessing. (2 seconds) Removal: heal 80 life. No effect if ends early.✗ </li>
<li>Blessing. When character is moving, heal for 5 life every 1 second.✗ </li>
<li>Remove all blessings and poisons. Heal for 10 life for each blessing removed. Gain 10 spirit for each poison removed.✗ </li>
<li>Poison. If target is Blessed, Reduce Max Health by 25% (20 seconds). If poison ends early, target takes 50 damage.✗ </li>
<li>Blessing. Increase effectiveness of Disciple skills.✗ </li>
<li>Miracle. Remove 1 blessing. Disable skill on source's bar (5 seconds).✗ </li>
</ul>

@ -469,8 +469,8 @@ def page(page):
return style()
if page.lower() in ["mechanics","game-mechanics","game_mechanics"]:
return mech()
if page.lower() in ["job","keyword","skill"]:
return mechpage(page)
# if page.lower() in ["job","keyword","skill"]:
# return mechpage(page)
loc = 'blessfrey-gdd/'
info = {'css': 'doc', 'title': 'blessfrey gdd - ' + page, 'year': find_year(), 'topic': page.lower(), 'writeup': prepare_gdd_page(page, loc)}
return template('page.tpl', info)

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

@ -7,19 +7,19 @@
<div class="system" id="system">
<div class="center"><h2>system</h2>
<p>Blessfrey is a 2D action rpg with a dual-job system which will determine the skill pool from which you will build your skillbar. Your AI companions will have skillbars of their own to edit, so think in terms of teams in order to defeat bosses and solve puzzles. Barely any class progression decisions are permanent, so you can experiment and express your playstyle. <br></p>
<p>Blessfrey is a 2D minideckbuilding action rpg. Your skillbar has limited slots and locks outside safe zones, so build a winning combination. The multiclass system will determine your skillpool. Your AI companions will have skillbars of their own to edit, so think in terms of teams to defeat bosses and solve puzzles. Freely experiment and express your playstyle. <br></p>
<br>
<h3>jobs </h3>
<p>Blessfrey jobs are equivalent to RPG classes. Your first job is a permanent decision which you will make early in gameplay. You will be able to unlock the rest and more during gameplay as side gigs. You can only have one side gig at a time, but you can always swap it outside of combat areas. <br></p>
<p>Blessfrey jobs are equivalent to RPG classes. Your first job is a permanent decision made early in gameplay. The rest will become available as side gigs. You can only have one side gig at a time, but you can always swap it in safe zones. <br></p>
<br>
<p>Each job has its own skill pool. Each skill is assigned to a job trait (similar to an RPG attribute). Each character has a set number of trait points they can use to raise job traits and the effectiveness of their associated skills. You gain more trait points through leveling up, but traits can be raised or lowered at will. Experiment to find your specialization! <br></p>
<p>Each job has its own skill pool. Each skill is assigned to a job trait (similar to an RPG attribute). Each character has a set number of trait points they can use to raise job traits and the effectiveness of their associated skills. You gain more trait points through gameplay, but traits can be raised or lowered at will. Experiment to find your specialization! <br></p>
<br>
<p>Your first job offers an exclusive trait called a job perk. It is not only tied to the effectiveness of related skills but also provides a constant buff. You can use the skills of your side gig's perk-related skills, but you cannot raise their effectiveness nor gain the buff. Perks are what distinguish characters from each other. <br></p>
<p>Your first job offers an exclusive trait called a job perk. It is not only tied to the effectiveness of related skills but also provides a constant buff. You can use the skills of your side gig's perk-related skills, but you cannot increase their effectiveness nor gain the buff. Perks distinguish teammates' roles from each other. <br></p>
<br>
<h3>skills</h3>
<p>Skills are individual powers that modify entities in the world of Blessfrey. They can launch fireballs, protect against incoming damage, spawn items or minions, teleport characters, reveal more UI details, and more. Your skillbar only has 8 skill slots and can only be edited in safe areas. The challenge comes from discovering effective strategies and synergies. Many of the same skills will be available to the player and enemy characters alike, so you must learn how to both use and counter each skill. <br></p>
<p>Skills are individual powers that modify entities in the world of Blessfrey. They can launch fireballs, protect against incoming damage, spawn items or minions, teleport characters, reveal more UI details, and more. Your skillbar only has 8 skill slots and can only be edited in safe zones. The challenge comes from discovering effective strategies and synergies. Many of the same skills will be available to the player and enemy characters alike, so you must learn how to both use and counter each skill. <br></p>
<br>
<p>Skills are inspired by Magic: The Gathering keywords. There are a limited number of keywords that are quick to learn, but I will combine them with interesting conditions to create a wide arsenal of options. <br></p>
<p>Skills + keywords are inspired by Magic: The Gathering cards + keywords. There are a limited number of keywords that are quick to learn, but they will combine with interesting conditions to create a wide arsenal of options. <br></p>
<br>
<p>Skills are gained during exploration. As you find new areas, encounter enemies, and interact with your surroundings, you will internalize those experiences as new skills. There are multiple paths to learning, so you are free to focus on your favorite parts of the game. <br></p>
<br>
@ -29,26 +29,26 @@
<div class="story" id="story">
<div class="center"><h2>story</h2>
<p>You play as Helia, a foreign transfer student living with her estranged uncle in a rural southern American town. You'll find an inexplicable amount of amenities, but none of them hold a candle to the haunted dungeon beneath the city. It's off-limits, but a dare's a dare. <br></p>
<p>You play as Helia, a foreign transfer student living with her estranged uncle in a rural town. You'll find an inexplicable amount of amenities given the population, but none of them hold a candle to the haunted dungeon beneath the city. It's off-limits, but a dare's a dare. <br></p>
<br>
<p>There's a whole other world down there with multiple fantastical races. Once you've been down there once, it's hard to avoid getting tangled in its mysteries. <br></p>
<p>There's a whole other world down there with multiple fantastical species. Even one dip puts you at risk of getting tangled in its mysteries. <br></p>
<br>
<p>The town is strange in its own right. Lucrest flourished under it's remarkably young mayor and became an economic oasis in an expanse of farmlands and mining communities, drawing people from out-of-state to enjoy its attractions. Mayor Dia claims to have a magic wand that controls economy, and people aren't inclined to disagree. <br></p></div>
<p>The town is strange in its own right. Lucrest flourished under its remarkably young mayor and became an economic oasis in an expanse of farmlands and mining communities, drawing tourists to enjoy its attractions. Mayor Dia claims to have a magic wand that controls the economy, and people aren't inclined to disagree. <br></p></div>
</div>
<div class="characters" id="characters">
<div class="center"><h2>characters</h2>
<p><b><a href="/char/Helia">Helia</a></b> (?/?) - The player character! Where she comes from, combat training is unheard of, so pick a job for her. No one really knows why she had to move from the US so suddenly and all alone. <br></p>
<p><b><a href="/char/Helia">Helia</a></b> (?/?) - The player character! Where she comes from, combat training is unheard of, so she'll have to pick a job soon. No one really knows why she had to move from the US so suddenly and all alone. <br></p>
<br>
<p><b><a href="/char/Angel">Angel</a></b> (Weaponmaster/Hacker) - Her real name's Miriam, but it sounds too frumpy, so please call her Angel. She is a naturally gifted with heavy blades and participates in a competitive swordsman league, but she usually comes across as friendly if not a little absent-minded. Computers interest her deeply, so she's always tinkering away with some new gadget or software. <br></p>
<p><b><a href="/char/Angel">Angel</a></b> (Brawler/Hacker) - A natural talent with heavy blades, programming, and networking, despite inconsistent study. She's a friendly and outgoing person who tries to do good and please others but hasn't really established firm personal values. <br></p>
<br>
<p><b><a href="/char/Tessa">Tessa</a></b> (Tamer/Streetfighter) - She actually has a foreign background, too. Her mom and late father moved with her from France when she was really little. She loves the outdoors, animals, and fashion and is always sticking her nose in everyone's business. She's all fun all the time, so she doesn't always know where the boundary is between playful teasing and outright bullying. <br></p>
<p><b><a href="/char/Tessa">Tessa</a></b> (Tamer/Brawler) - Good at commanding animals in combat and using the environment to her advantage. She actually has a foreign background, too. Her mom and late father moved with her from France when she was really little. She loves the outdoors, animals, and fashion and is always sticking her nose in everyone's business. She's all fun all the time, so she doesn't always know where the boundary is between playful teasing and outright bullying. <br></p>
<br>
<p><b><a href="/char/Chloe">Chloe</a></b> (Disciple/Weaponmaster) - She's an orphan girl who was taken in by the church, and she spends a lot of her time serving there. She's reticent and deeply introverted but very sweet to those who get to know her. <br></p>
<p><b><a href="/char/Chloe">Chloe</a></b> (Disciple/Armsman) - Often called upon for prayers of spiritual healing and divine protection. She's an orphan girl who was taken in by the church, and she spends a lot of her time serving there. She's reticent and deeply introverted. <br></p>
<br>
<p><b><a href="/char/Aries">Aries</a></b> (Weaponsmaster/Tamer) - Angel's twin brother, though he's her opposite in many ways. He's more attentive, but his frankness and disregard for etiquette makes him seem boorish. He also takes things with more gravity, fully committing himself to his studies and training. He prefers light weapons, light armor, and practical survival skills. <br></p>
<p><b><a href="/char/Aries">Aries</a></b> (Armsman/Disciple) - Prefers light or ranged weaponry, light armor, and a disciplined approach. He's Angel's twin brother, though he's her opposite in many ways. He takes things with more gravity, fully committing himself to his studies, but his frankness and disregard for etiquette makes him seem boorish. <br></p>
<br>
<p><b><a href="/char/Night">Night</a></b> (Chemist/Weaponsmaster) - Despite not being much older than the other teens, he's completed a few years of apprenticeships at the leading research hospitals in the capital. The deterioration and death of his grandparents forced his return to close the final paperwork and figure out how to support his baby brother in the meantime. He runs a local pharmacy for now. <br></p>
<p><b><a href="/char/Night">Night</a></b> (Chemist/Brawler) - An expert in poisons and weapon oils. Despite his age, he's always had a crystal clear plan for his future, so he left school early to begin apprenticeships at research hospitals in the capital. Tragically, the deterioration and death of his grandparents forced his return. He runs a local pharmacy in the meantime while trying to decide how to support <a href="/char/Milo">baby brother</a> by himself. <br></p>
<br>
<p><b><a href="/char/Rune">Rune</a></b> (?/?) - A startlingly tall and listless horned boy discovered in the local dungeon, surrounded by dinosaurs and other abyssal beasts. He doesn't trust people from the surface at first. <br></p>
<br>
@ -57,19 +57,13 @@
<div class="info" id="info">
<div class="center"><h2>info</h2>
<p>Blessfrey is a singleplayer action RPG game that will be playable in at least Windows, Linux, and HTML5. I'm going to sell it on Steam and wherever else lets me list it. It's being developed by me (chimchooree) in Godot Engine with original writing and art, though I'll need help with music and SFX eventually. (Unless I am an audio savant and don't yet know it?) My husband also helps sometimes, especially with writing plug-ins for the engine.♡ The full credits are available on the <a href="/credits">credits page</a>.<br></p>
<br>
<p>Blessfrey is a singleplayer action RPG game that will be playable in at least Windows, Linux, and HTML5. I'll sell it on Steam and wherever else makes sense. It's being developed by me (chimchooree) in Godot Engine with original writing and art, though I'll need help with music and sound design eventually. (Unless I am an audio savant and don't yet know it?) My husband also helps sometimes, especially with writing plug-ins for the engine.♡ The full credits are available on the <a href="/credits">credits page</a>.<br></p>
<br><br>
<h2>timeline</h2>
<p>Legless the Cat is the first demo. It has nothing to do with the game, but it's an important exercise for exporting and embedding an HTML5 game. I'd hate to make a sophisticated game over multiple years and be too inexperienced to actually share it with anyone. It also lets my kitty be in his own videogame! So cute. <br></p>
<br>
<p>As for the first real demo, I am currently creating a vertical slice of the game, focusing on a robust presentation of the skill system. This demo will be more of a tech demo than a game. It will feature 3 demo areas, and you will receive a bingo card directing you to try a smattering of what the full game will have to offer. <br></p>
<br>
<p>The next demo will demonstrate the game's faction system and AI, presenting more as a cutscene with unpredictable outcomes. A couple of different AI groups will wander around a map, intersect, then attack or aid according to affiliation. The faction system is rather complex, so I need to isolate it for testing purposes. <br></p>
<br>
<p>I think at this point, I will be able to put out a real demo. Demo #3 is going to be a level from the full game, introducing Rune and his multiphase boss fight. <br></p>
<p>Legless the Cat is the first official demo. It has nothing to do with the game, but it's an exercise in exporting and embedding an HTML5 game. It also lets my kitty be in his own videogame! So cute. <br></p>
<br>
<p>If I can do that, I'll definitely be ready to make chunks of the game until the entire thing is complete. <br></p>
<p>I worked on a version of Blessfrey for years, made a lot of mistakes, learned a lot of design practices and programming techniques, and ended up with an unmanageable mess. I'm starting over from scratch and ironing out the skill system (the most important element of gameplay) first this time. <br></p>
<br>
<p>No hard timeline, though! <br></p></div>
<p>I'll try to release playable builds as I complete features, even if they are ugly text-based versions, and document as I go. No particular timeline. </div>
</div>
</div>

@ -1,33 +0,0 @@
% rebase('frame.tpl')
<div class="content-grid">
<div class="art">
<h2>art gallery</h2>
<p>You will mostly find pixelart, digital painting, and mixed media here. <br><br></p>
<div class="ocs-nav">
<h3>pixelart </h3>
% for c in pixelart:
<img src="/static/img/art/{{c}}" alt="(image: {{c}})" class="ocs-btn">
% end
</div>
<div class="ocs-nav">
<h3>digital painting </h3>
% for c in digital:
<a href="/art/{{c}}">
<img src="/static/img/art/{{c}}" alt="(link: {{c}})" class="ocs-btn">
</a>
% end
</div>
<div class="ocs-nav">
<h3>fanart </h3>
% for c in fanart:
<a href="/art/{{c}}">
<img src="/static/img/art/{{c}}/{{c}}avi.png" alt="(link: {{c}})" class="ocs-btn">
</a>
% end
</div>
</div>
</div>

@ -17,8 +17,8 @@
<li><b>Engine:</b> Godot Engine</li>
<li><b>Website:</b> blessfrey.me</li>
<li><b>Price:</b> $874.99 USD</li>
<li><b>Press Contact:</b> <a href="https://twitter.com/lilchimchooree">Twitter (@lilchimchooree)</a>, Discord (CustomsOfficer#3449)</li>
<li><b>Social:</b> <a href="https://twitter.com/lilchimchooree">Twitter (@lilchimchooree)</a></li>
<li><b>Press Contact:</b> find me IRL</li>
<li><b>Social:</b> taking a social media break but should try Mastodon, HIVE more seriously</li>
</ul>
</div>
@ -28,7 +28,7 @@
In active development, Blessfrey is the first commercial game by US-based indie game developer chimchooree. <br>
<br>
Blessfrey is a 2D action RPG set in a rural southern town riddled with secret tunnels and dungeons.
The dual-class and skill systems are inspired by Guild Wars 1 and Magic: The Gathering and emphasize player skill, personal expression, and experimentation. Delve deeper under the town by discovering new skills, building synergies within your skillbar, and recruiting AI teammates. Bosses, puzzles, and a secret world await. <br>
The dual-class and skillbar building systems are inspired by Guild Wars 1 and Magic: The Gathering and emphasize player skill, personal expression, and experimentation. Delve deeper under the town by discovering new skills, building synergies within your skillbar, and recruiting AI teammates. Bosses, puzzles, and a secret world await. <br>
<br>
</div>
@ -37,16 +37,16 @@ The dual-class and skill systems are inspired by Guild Wars 1 and Magic: The Gat
<h2>Features </h2>
<ul>
<li>Try tens of possible dual-class combinations</li>
<li>Experiment with hundreds of skillbar combinations</li>
<li>Freely relocate skill points and swap out skills in safe areas</li>
<li>Experiment with lots of skillbar combinations</li>
<li>Freely relocate skill points and swap out skills in safe zones</li>
<li>Learn new skills through themed exploration and gameplay. No skill shops nor UI skill trees</li>
<li>Explore an underground world populated by fantasy races and an above ground rural town</li>
<li>Explore an above ground rural town and an underground world populated by fantasy species </li>
</ul>
</div>
<div class="textbox dev">
<h2>Developer </h2>
Chimchooree has a programming and art background, studying both in school and at home since she was a kid. Her five favorite games are Oblivion, Guild Wars 1, Arcanum, Divine Divinity, and Anachronox. Keep up with her activity on her <a href="/diary">dev diary</a> and <a href="https://twitter.com/lilchimchooree">Twitter</a>. <br>
Chimchooree has a programming and art background, studying both in school and at home since she was a kid. Her five favorite videogames are Oblivion, Guild Wars 1, Arcanum, Divine Divinity, and Anachronox. Keep up with her activity on her <a href="/diary">dev diary</a>. <br>
</div>
<div class="textbox videos"> </div>
@ -59,15 +59,15 @@ The dual-class and skill systems are inspired by Guild Wars 1 and Magic: The Gat
<div class="textbox contact">
<h2>Contact</h2>
Please message me on <a href="https://twitter.com/lilchimchooree">Twitter (@lilchimchooree) or Discord (CustomsOfficer#3449)</a>.
<p>I'll link social media, etc, later. <br></p>
</div>
<div class="textbox credits">
<h2>Credits</h2>
<ul>
<li>Code: chimchooree</li>
<li>Code: chimchooree, husband</li>
<li>Art: chimchooree</li>
<li>Design: chimchooree</li>
<li>Design: chimchooree, husband</li>
<li>Engine: Godot Engine</li>
<li><a href="/credits">Full Credits</a></li>
</ul>

@ -5,15 +5,14 @@
<h2>about</h2>
<b>Blessfrey</b> is a 2D action RPG developed for PC in Godot Engine by Chimchooree. <br>
<br>
Edit your skillbar from hundreds of skills to fight enemies, solve puzzles, + explore. <br>
Edit your skillbar from lots of skills to fight enemies, solve puzzles, + explore. <br>
<br>
Inspired by Guild Wars 1 and Magic: The Gathering. <br>
</div>
<div class="diary-box twitter-box">
<h2>chat</h2>
discord: <a href="https://discord.com/">CustomsOfficer#3449</a><br>
twitter: <a href="https://twitter.com/lilchimchooree">@lilchimchooree</a>
<p>(social links to be added) </p>
<br>
</div>

@ -1,3 +0,0 @@
<div class="top-row"> </div>
<div class="logo"> </div>

@ -16,8 +16,7 @@
<h2>contact</h2>
<p>I wouldn't mind hearing from you. <br></p>
<ul>
<li><a href="https://discord.com/">Discord (CustomsOfficer#3449)</a> </li>
<li><a href="https://twitter.com/lilchimchooree">Twitter (@lilchimchooree)</a> </li>
<li>(social links to be added) </li>
</ul>
<br>
</div>

@ -6,71 +6,70 @@
<br>
<p>Focus and finish the game! <br></p>
<br>
<p>Legend: <span class=mundane>nothing at all</span>, <span class=common>designed</span>, <span class=unusual>basic implementation</span>, <span class=rare>intentionally designed, documented, but with known issues</span>, <span class=unique>ironed out and polished</span>
<p>Legend: <span class=mundane>nothing at all</span>, <span class=common>designed</span>, <span class=unusual>basic implementation</span>, <span class=rare>intentionally designed, documented, but with known issues</span>, <span class=unique>ironed out and polished...or at least as done as it will ever be</span>
<h2><span class=unique>0.0 - first</span> </h2>
<ul>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>feature: export, embed</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>feature: export, embed</span> </li>
</ul>
<h2><b><span class=unusual>0.1 - bingo</span></b> </h2>
<h2><b><span class=mundane>0.1 - bingo</span></b> </h2>
<ul>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=rare>feature: KnowledgeBase - achievements, progression </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=common>~70 new skills</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>solid, extendable base for skills, keywords, skill equips, DMVs</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>ignore input during main menu, etc</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic dialog</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic serialization - save, load, config</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic pathfinding</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic obstructions - walls</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic AI - states, transitions</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic combat - life, spirit, attacks, skills, hitbox, aggro</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=rare>base id, ref id</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic UI - start screen, controls screen, credits screen</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>basic audio - BGM, attack SFX, skill SFX, ambience</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=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>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>containers</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>travel between rooms</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>drop items</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=rare>inspect</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>spawnpoints</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>XP, levels</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>skillbar - drag & drop, enforces deckbuilding rules</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>attack loop</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>skill use - out of range, cancel</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>learning skills</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>room skills</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>life/spirit regen</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>multiple idle animations</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>idle barks - contextual, story-based, character relationship-based</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>feature: KnowledgeBase - achievements, progression </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>60 new skills</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>solid, extendable base for skills, keywords, skill equips, DMVs</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>base id, ref id</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>achievements, MessageBus, event handlers </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>activator - button, switch</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic AI - states, transitions, patrols, flocking </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic animations - walk up, walk down, walk right, pick up, weapon swing, skill use, death, chatting, idle </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>attack loop</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic audio support - BGM, attack SFX, skill SFX, footsteps, voiceacting, ambience</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic audio adjustments - volume slider, mute button</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic combat - life, spirit, attacks, skills, hitbox, aggro</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>containers - guaranteed, random</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic dialogue system - branches, variables</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic equipment - slots, change appearance, modify combat numbers</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>multiple idle animations + barks - contextual, story-based, character relationship-based</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>inspect</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>interact - character, container, foes</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>inventory - sort, rearrange, split, drop</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>item - pickup, drop, use</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic job, sidegig, learn sidegig, switch sidegig, perk, traits, skills scale with traits</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic obstructions - obstruct projectiles + view, obstruct neither, obstruct projectiles but not view, obstruct view but not projectiles</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic pathfinding, following</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>pause button, speed up + slow down game time </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>life/spirit regen</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>resurrection</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic serialization - save, load, config</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>skills - learning, using, moving to out-of-range target, cancel, interrupt, room/equipment/perk skills, projectiles</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>skillbar - drag & drop, enforces deckbuilding rules</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>spawnpoints</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>travel between rooms</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic UI menus - start screen, controls screen, credits screen</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>basic UI - lifebar, spiritbar, skillbar, skill pool, inventory, dialogue, highlight </span> </li>
</ul>
<h2><span class=mundane>0.11 - AI factions</span> </h2>
<ul>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>feature: factions - disposition towards other factions</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>pathfinding</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>pathfinding</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>teams</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>death</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>drop tables</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>death</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>drop tables</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>item rarity</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>flocking</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>idle, wander</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>patrol routes</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>aggro range</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>targeting, prioritization</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>idle, wander</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>patrol routes</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>aggro range</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>targeting, prioritization</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>skill use prioritization</span> </li>
</ul>
<h2><span class=mundane>0.12 - boss fight</span> </h2>
<ul>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>feature: multiphase, dynamic boss</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>obstacles - impermeable walls, permeable walls, opaque walls, transparent walls, destructible walls</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>obstacles - impermeable walls, permeable walls, opaque walls, transparent walls, destructible walls</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>boss splash screen</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>cutscene-like scripting</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>resurrection</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>projectiles</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>only change skill in noncombat rooms</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>projectiles</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>only change skill in safe zones</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>interrupt</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>items - use to impart keywords</span> </li>
</ul>
@ -87,26 +86,26 @@
</ul>
<h2><span class=mundane>0.14 - UI</span> </h2>
<ul>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>feature: phone</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>feature: phone</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>codex app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>messenging app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>inventory app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>music app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>inventory app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>music app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>settings app</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>app store</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>app store</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>store page, functionality</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>store sales, promotions</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>pop-up notifications, tool tips</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>skill library, skillbar</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>skill library, skillbar</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>skill library - sort by job, classifications, alphabetical, order obtained, frequency of use</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>containers</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>highlight</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>main menu, submenus</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=unusual>inspect menu</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>containers</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>highlight</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>main menu, submenus</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>inspect menu</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>forms, questionnaires, homework sheets</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>iron out canvas layer layers</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>dialog - name, rich text, emoticons, options, </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>dialog portraits</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>dialogue - name, rich text, emoticons, options, </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>dialogue portraits</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>all text ready for translation</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>titles related to KnowledgeBase</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>custom cursors</span> </li>
@ -140,9 +139,9 @@
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>zone: slime kingdom</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>boss: slime king</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>zone: Santa's factory</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>boss: Dia</span> </li>
<!-- <li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>boss: Dia</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>zone: holding cell, local security HQ</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>quest: freedom - parents come retrieve their children and apologize. no one comes for Helia, so eventually Ray comes over and lets her out himself. </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>quest: freedom - parents come retrieve their children and apologize. no one comes for Helia, so eventually Ray comes over and lets her out himself. </span> </li>-->
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>zone: Lucrest shopping center - Mayor's Mansion, gym, apothecary, library, QuestionMart, sporting goods, clothing store, theatre, arcade, cable company, atelier, woks, cafe, photobooth, stage, gondolier, carousel, splash sidewalk, piano sidewalk (look at Disney World for fun sidewalk ideas) </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>zone: Lucrest residential zone - uncle's, Tidwell's, McIntyre's, St Martin's, playground, walking trail</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>zone: Lucrest - church</span> </li>
@ -183,7 +182,7 @@
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>press - YouTubers, Twitch streamers, bloggers, game journalists, local news, etc. I'll def reach out to Godot's showcase. </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>festivals/contests - local conventions, Godot con, Indie Games Expo, PAX, GDC. I'll probably do a booth/panel at the cons in my town because why not. </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>booths - computers, keyboards, mouses, decorations, fliers, freebie promo items </span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>funding - kickstarter, etc (no reason not to try. Even if I can finish the game in my freetime, I can set it up to cover fees then set wild stretch goals like getting Trigger to do my animations or hiring my favorite voice actor and composer or something)</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>funding - kickstarter, etc No reason not to try. Even if I can finish the game in my freetime, I can set it up to cover publishing/legal fees then set valid stretch goals like translating all text into more languages, supporting more platforms, getting a professional editor to look over my script, keyart by cool artists like vickisigh...so long as it seems like a reasonable amount of extra work. Then set wild goals like getting Trigger to redo my animations and hiring Imogen Heap to redo my soundtrack or whatever. </span> </li>
</ul>
<h2><span class=mundane>1 - release</span> </h2>
<ul>
@ -222,7 +221,7 @@
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>store screenshots in phone gallery</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>gear changes sprite appearance</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>gear changes companions' sprite appearance</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>gear changes dialog portaits - paper doll</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>gear changes dialogue portaits - paper doll</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>holidays</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>fishing minigame</span> </li>
<li class="latest">{{random.choice(['.','•','☆','★'])}}&#9;<span class=mundane>hide UI for screenshots optionally</span> </li>

@ -5,7 +5,7 @@
<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"]:
% for i in ["arboretum","black lake","buffer","cafe 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>

Loading…
Cancel
Save