proofreading

small-nav
Mimi Momo 3 years ago
parent 9b8647a1cd
commit 99112ab82f

@ -3,19 +3,21 @@
august 6, 2020<br>
#game <br>
<br>
<b>blessfrey</b> is a 2D action RPG developed for PC by chimchooree. <br>
<b>Blessfrey</b> is a 2D action RPG developed for PC by Chimchooree. <br>
<br>
<a target="_blank" href="/static/img/ent/screenshot_June292019.png">
<img src="/static/img/ent/screenshot_June292019.png" alt="(image: Lots of Angels and other characters at a shopping center)" width="500" height="278.66">
</a><br>
<br>
The game is designed to pit your skill + creativity against a series of combat + puzzle challenges while exploring the depths of the downtown dungeon. <br>
The game is designed to pit your skill and creativity against a series of combat and puzzle challenges while exploring the depths of the downtown dungeon. <br>
<br>
Class progression is freeform, and virtually no decision is permanent. At character creation, you will choose a permanent First Class, but you can unlock several new classes for multiclassing through gameplay. Through swapping out Second Classes, you can find a combination to express your playstyle. <br>
Class progression is free-form, and virtually no decision is permanent. At character creation, you will choose a permanent First Class, but you can unlock new classes for multiclassing during gameplay. Swap out Second Classes to find a combination to overcome challenges and express your playstyle. <br>
<br>
Each class has its own style of skills associated with it. Skills are individual powers gained through gameplay which give specific effects according to their rules. Your skillbar only has 8 skill slots and can only be edited in safe areas. The challenge comes from building winning strategies + synergies against the next area. <br>
Each class has its own style of skills associated with it. Skills are individual powers gained through gameplay which give specific effects. Your skillbar only has 8 skill slots and can only be edited in safe areas. The challenge comes from discovering effective strategies and synergies against the next area. <br>
<br>
Skills are gained through exploration of the game world. As you encounter enemies, meet people, and reach new areas, you will translate those experiences into new skills. There are multiple paths to learning, so you can focus on parts of the game you prefer. <br>
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>
<br>
blessfrey has been lots of fun to work on. I hope you enjoy it once a demo and eventually a game drops. <br>
Blessfrey has been lots of fun to work on. I hope you enjoy it once a demo and eventually a game drops. <br>
<br>
Last updated June 8, 2021 <br>
<br>

@ -3,7 +3,7 @@
august 20, 2020<br>
#assets<br>
<br>
<b><a href="https://fontstruct.com/fontstructions/show/1596262/pixel-joy">pixel joy</a></b> is a small, round sans-serif pixel font, made using <a href="https://fontstruct.com/">FontStruct's FontStructor</a> for an old version of blessfrey. Freely use and edit for your personal and commercial projects. No credit needed. <br>
<b><a href="https://fontstruct.com/fontstructions/show/1596262/pixel-joy">pixel joy</a></b> is a small, round sans-serif pixel font, made using <a href="https://fontstruct.com/">FontStruct's FontStructor</a> for an old version of Blessfrey. Freely use and edit for your personal and commercial projects. No credit needed. <br>
<br>
Download it from <a href="https://fontstruct.com/fontstructions/show/1596262/pixel-joy">FontStruct</a>.<br>
<br>
@ -11,3 +11,5 @@ Download it from <a href="https://fontstruct.com/fontstructions/show/1596262/pix
<br>
Font released under public domain. Sample text in the preview image is from Imogen Heap's "Pocket Sun," and the colors are from <a href="https://lospec.com/palette-list/aap-64">Adigun Polack's AAP-64 palette</a>. :)<br>
<br>
Last updated June 8, 2021 <br>
<br>

@ -1,87 +1,97 @@
<!--200930,201031-->
<h1>august 2020: new server, new site</h1>
september 1, 2020<br>
#apache #css #html #nginx #php #server #website<br>
#diary <br>
<br>
<h2>tuesday, august 4 </h2>
<h2>week 2 </h2>
#apache #css #php #server #webdesign #website <br>
<br>
<h3>tuesday, august 4 </h3>
<ul>
<li>CentOS VPS obtained through OVH. Always wanted a server. </li>
</ul>
<br>
<h2>wednesday, august 5 </h2>
<h3>wednesday, august 5 </h3>
<ul>
<li>design the website </li>
<li>prototype of website running on the server </li>
<li>Design the website </li>
<li>Prototype of website running on the server </li>
</ul>
<br>
<h2>thursday, august 6 </h2>
<h3>thursday, august 6 </h3>
<ul>
<li>create some placeholder graphics, articles + CSS </li>
<li>add a <a href="https://publish.twitter.com/#">Twitter timeline embed</a> </li>
<li>Create some placeholder graphics, articles + CSS </li>
<li>Add a <a href="https://publish.twitter.com/#">Twitter timeline embed</a> </li>
</ul>
<br>
<h2>friday, august 7 </h2>
<h3>friday, august 7 </h3>
<ul>
<li>decide to use PHP for manage blessfrey's blog </li>
<li>set up a local Apache server for practice. It was a little confusing! </li>
<li>wrote a vaguely functioning Hello World script in PHP </li>
<li>Decide to use PHP for manage Blessfrey's blog </li>
<li>Set up a local Apache server for practice. It was a little confusing! </li>
<li>Wrote a vaguely functioning Hello World script in PHP </li>
</ul>
<br>
<h2>saturday, august 8 </h2>
<h3>saturday, august 8 </h3>
<ul>
<li>added images to live site despite conflicts with Linux's security </li>
<li>Added images to live site despite conflicts with Linux's security </li>
</ul>
<br>
<h2>sunday, august 9 </h2>
<h2>week 3 </h2>
#php #python <br>
<h3>sunday, august 9 </h3>
<ul>
<li>studied PHP with <a href="https://www.w3schools.com/php/php_intro.asp">W3Schools</a> </li>
<li>Studied PHP with <a href="https://www.w3schools.com/php/php_intro.asp">W3Schools</a> </li>
</ul>
<br>
<h2>monday, august 10 </h2>
<h3>monday, august 10 </h3>
<ul>
<li>studied PHP with <a href="https://www.w3schools.com/php/php_intro.asp">W3Schools</a> </li>
<li>Studied PHP with <a href="https://www.w3schools.com/php/php_intro.asp">W3Schools</a> </li>
</ul>
<br>
<h2>saturday, august 15 </h2>
<h3>saturday, august 15 </h3>
<ul>
<li>Made a Python script that spits out new skill scenes for Godot after answering a little command line questionnaire. I could make it an plugin for the engine, but it would be a lot slower to develop + functionally no better. </li>
<li>Maybe I can rewrite it later in JSON, since Godot can read JSON. </li>
</ul>
<br>
<h2>monday, august 17 </h2>
<h2>week 4 </h2>
#mysql #pagination #php <br>
<h3>monday, august 17 </h3>
<ul>
<li>Research PHP + MySQL while attending. I think MySQL is overkill for my purposes, since all my articles couldn't possibly be that much data. It might be interesting for analyzing data, though, like adding a word cloud of the most common tags or a search feature. I'll keep things simple for now. </li>
</ul>
<br>
<h2>august 18 - august 21 </h2>
<h3>august 18 - august 21 </h3>
<ul>
<li>Help run a FlightRising community event while trying out ArcheAge, since my friends play it. </li>
<li>I told a friend I would play Go with him soon but was too busy with the raffle. Then someone told him I was online a lot in ArcheAge...oops...that looked bad lol. It wasn't like I played more than a few minutes at a time. I'm sorry, friend;; </li>
<li>finally get access to the code for an MMO some friends work on. I start familiarizing myself with the code and start planning my new feature. </li>
</ul>
<br>
<h2>saturday, august 22 </h2>
<h3>saturday, august 22 </h3>
<ul>
<li>I work on pagination. The concept boggles my mind, but I can break it into pieces to solve like any other problem. </li>
</ul>
<br>
<h2>sunday, august 23 </h2>
<h2>week 5 </h2>
#css #cssgrid #html #pagination <br>
<h3>sunday, august 23 </h3>
<ul>
<li>I work on my friends' MMO more. I make my own branch and make my first changes. The work environment is Windows-only, and the server is live with active players. Pretty cool experience. </li>
<li>I work on my friends' MMO some. I make my own branch and make my first changes. The work environment is Windows-only, and the server is live with active players. Pretty cool experience. </li>
</ul>
<br>
<h2>monday, august 24 </h2>
<h3>monday, august 24 </h3>
<ul>
<li>Still working on pagination in PHP to create a navigation bar for my development blog. </li>
</ul>
<br>
<h2>tuesday, august 25 </h2>
<h3>tuesday, august 25 </h3>
<ul>
<li>Play around with CSS + HTML for the website. The CSS Grid didn't exist the last time I used CSS (for 2000s petsite profiles), so I'm more comfortable with floats. The Grid looks so worth learning, though, for more consistent and responsive web design. </li>
</ul>
<br>
<h2>wednesday, august 26 </h2>
<h3>wednesday, august 26 </h3>
<ul>
<li>Get the landing page looking okay while using the CSS Grid. </li>
</ul>
<br>
Last updated June 8, 2021 <br>
<br>

@ -3,42 +3,38 @@
september 3, 2020<br>
#gamejam<br>
<br>
<b><a href="https://weeklygamejam.itch.io/">WeeklyGameJam</a></b> is a weekly theme-based game jam hosted through itch.io. It's fairly laid-back for a jam, giving you a full week's time, allowing for premade/stock assets and code, and being understanding towards late submissions. Most people make videogames, but any kind of game is allowed. At the end of the week, streamers will play and critique the submissions while the devs hang out in their chatrooms. <br>
<b><a href="https://weeklygamejam.itch.io/">WeeklyGameJam</a></b> is a weekly theme-based game jam hosted through itch.io. It's fairly laid-back for a jam, giving you a full week's time, allowing for premade/stock assets and code, and being understanding towards late submissions. Most people make videogames, but any kind of game is allowed. At the end of the week, streamers will play and critique the submissions while the developers hang out in their chatrooms. <br>
<br>
<center><img src="/static/img/ent/SmallThingThatMakesThings.png" alt="(image: Key art of Elwell and Small Thing, buried in dogs)" width="500" height="223.77"></center> <br>
<br>
<br>
<h2>small thing that makes things</h2>
<br>
I participated in Week 85 under the theme Offspring, submitting my game on February 27, 2019. My game was Small Thing That Makes Things, an adventure platformer. You can play it on <a href="https://chimchooree.itch.io/small-thing-that-makes-things">itch.io</a>. <br>
<br>
You play as Hamish T. Elwell, the hero accountant of an overcrowded animal shelter, investigating the recent explosion of the local stray population. You can walk, jump on platforms, collect items, and chat with NPCs. There's multiple endings, depending on your choices. <br>
<br>
<br>
<h2>positives </h2>
<br>
For a week-made game, I think STTMT is pretty cute, and I'm pretty happy with it.<img src="/static/img/emo/star.gif" alt=":)"> <br>
<br>
I actually finished a game, and someone actually finished playing it on a stream. That's really cool, even if STTMT isn't all that good. The deadline forced me to make final decisions, complete features, and move on, and there's a lot of value in that. <br>
<br>
The short time-frame forced me to get around to every aspect of game development, many of which I had never done before. I had to learn how to export a Godot project, upload an HTML5 game to itch, and make sure the exported game was complete and playable. Lots of the features were first-times for me, too. I've never written code for platformer movements or moving cameras. This also was the first time I've really gotten branching and conditional dialog working in Godot, which was a skill I immediately applied to blessfrey. <br>
<br>
The short time-frame forced me to get around to every aspect of game development, many of which I had never done before. I had to learn how to export a Godot project, upload an HTML5 game to itch, and make sure the exported game was complete and playable. Lots of the features were first-times for me, too. I've never written code for platformer movements or moving cameras. This also was the first time I've really gotten branching and conditional dialog working in Godot, which was a skill I immediately applied to Blessfrey. <br>
<br>
<h2>mistakes</h2>
<br>
I recolored OPP's pixel art and lost the high contrast for the rock ledges. They blend into the rocky background, so you can't tell you can jump on them. I didn't even notice until <a href="https://www.twitch.tv/mrjoshuamclean">Joshua McLean</a> pointed this out during his stream. Having more eyes on your game is so important.<br>
I recolored OPP's pixel art and lost the high contrast for the rock ledges. They blend into the rocky background, so you can't tell you can jump on them. I didn't even notice until <a href="https://www.twitch.tv/mrjoshuamclean">Joshua McLean</a> pointed this out during his stream. Having more eyes on your game is so important. <br>
<br>
Also the level design is just not interesting. I spent lots of time on the choices and adventure game aspects, while the platforming as an extreme afterthought. It's a game jam, though, what do you expect?<br>
<br>
I took the easy way out with animation. I might have learned more working from scratch, but modifying OPP's sprites to suit my character designs was way faster when I was already struggling to finish on time.<br>
<br>
I took the easy way out with animation. I might have learned more working from scratch, but modifying OPP's sprites to suit my character designs was way faster when I was already struggling to finish on time. <br>
<br>
<h2>screenshots + progression </h2>
<center>
<a target="_blank" href="/static/img/ent/SmallThingThatMakesThings_flatland.png">
<img src="/static/img/ent/SmallThingThatMakesThings_flatland.png" alt="(image: Elwell and Small Thing in a jumble of dogs)" width="500" height="300.92">
</a><br>
Experimenting with Small Thing's summoning mechanic. In this version, the characters are just blocks with collision that can move around the flat, empty world with WASD.<br>
Experimenting with Small Thing's summoning mechanic. In this version, the characters are just blocks with collision that can move around the flat, empty world with WASD. <br>
<br><br>
<a target="_blank" href="/static/img/ent/chimchooree_weekly_game_jam.gif">
<img src="/static/img/ent/chimchooree_weekly_game_jam.gif" alt="(gif: Elwell rides a broken-physics dog across the valley)" width="500" height="215.77">
@ -56,15 +52,13 @@ Dogs rain down upon Elwell's animal shelter in the finished version. <br>
Dialog between Elwell and his boss. <br>
</center>
<br>
<br>
<h2>conclusion</h2>
<br>
If you're looking for a jam to jump into, WeeklyGameJam is a cute one to try. You aren't too rushed, you get to watch people play your game, you get useful criticism, and the community is pretty chill. The themes are always inspiring, too.<img src="/static/img/emo/heart.gif" alt="<3"> <br>
<br>
<br>
<h2>credits</h2>
<ul>
<li>coding + art by chimchooree</li>
<li>coding and art by chimchooree</li>
<li>Open Pixel Project (OPP) (animations & tiles, edited to fit my characters & palette) @ <a href="http://www.openpixelproject.com/">http://www.openpixelproject.com/</a></li>
<li>Music track "forest" by syncopika under CC-BY 3.0 @ <a href="https://opengameart.org/content/forest">https://opengameart.org/content/forest</a> & <a href="https://greenbearmusic.bandcamp.com/album/bgm-fun-vol-5">https://greenbearmusic.bandcamp.com/album/bgm-fun-vol-5</a></li>
<li>Bad ending image from Wikimedia, credit to Jon Sullivan @ <a href="https://tinyurl.com/y6oswx8v">https://tinyurl.com/y6oswx8v</a> (URL contains spoilers)</li>

@ -1,7 +1,7 @@
<!--201001,201112-->
<h1>coroutines in godot engine </h1>
september 17, 2020<br>
#programming<br>
#coroutines #godot #programming<br>
<br>
<b>Coroutines</b> are functions that, instead of running to completion, can yield until certain criteria are met. Godot Engine supports coroutines through <a href="https://docs.godotengine.org/en/stable/classes/class_@gdscript.html#class-gdscript-method-yield"><b>yield</b> ( Object object=null, String signal="")</a>, <a href="https://docs.godotengine.org/en/stable/classes/class_gdscriptfunctionstate.html#class-gdscriptfunctionstate-method-resume"><b>resume</b></a>, and the <a href="https://docs.godotengine.org/en/stable/classes/class_gdscriptfunctionstate.html"><b>GDScriptFunctionState</b></a> object.<br>
<br>
@ -9,7 +9,6 @@ september 17, 2020<br>
<br>
Coroutines allow for scripted game scenarios that respond dynamically to the player and the changing game world. They let you bounce between functions, step-by-step, and respond to interruptions. This means functions can be automatically called at the completion of other functions, animations, player actions, in-game events, or timers. Add in interruptions and conditionals, and you have a tool for building a responsive game world. <br>
<br>
<br>
<h2>stoplight example </h2>
<br>
As a basic example of coroutines in Godot Engine, I made a stoplight. Follow along with my code on <a href="https://gitlab.com/chimchooree/stoplight">GitLab</a>. <br>
@ -22,7 +21,6 @@ In my example, the light changes every few seconds, going from green, yellow, th
</a><br>
</center>
<br>
<br>
<h2>how does it work? </h2>
<br>
<h3>node hierarchy </h3>
@ -30,18 +28,14 @@ In my example, the light changes every few seconds, going from green, yellow, th
<img src="/static/img/ent/stoplight_nodehierarchy.png" alt="(image: node hierarchy - Root is a node named Main. It's children are TextureRect BG, AnimatedSprite Stoplight, Sprite WalkButton, and a Label. Stoplight's child is a Sprite. WalkButton's child is a TextureButton.)"><br>
</center>
<br>
<br>
I have a TextureRect background, an AnimatedSprite stoplight, a Sprite walk button with a TextureButton, and a label for displaying a timer. Since this is a simple example, most of the code is attached to the root. It's better to have code closer to where it's being used and to watch your separation of concerns in real projects, though. <br>
<br>
<br>
<h3>animation</h3>
<br>
<center>
<img src="/static/img/ent/stoplight_animationframes.png" alt="(image: the AnimatedSprite Stoplight has 4 animations - default (which is no light), green, red, and yellow.)"><br>
</center><br>
The light is changed by setting its animation to one of these options. Each is one-frame - just the stoplight with the one or none of the lights colored in. <br>
<br>
<br>
<h3>the code </h3>
<br>
This project has two scripts: Main.gd, which is attached to the root node, and Label.gd, which is attached to the Label. <br>
@ -56,7 +50,6 @@ This project has two scripts: Main.gd, which is attached to the root node, and L
<img src="/static/img/ent/stoplight_label.png" alt="(image: Label script.)"><br>
</center>
<br>
<br>
<h3>how the code works </h3>
<br>
At <code>_ready()</code>, <code>wait()</code> is assigned to the GDScriptFunctionState <code>result</code> and is called for the first color, green. <code>_ready()</code> yields until the given function <code>wait()</code> is completed. <br>
@ -65,17 +58,16 @@ The wait method yields for the given amount of seconds then sets the stoplight t
<br>
At <code>wait()</code>'s completion, <code>_ready()</code> calls <code>wait()</code> for yellow, then red. Each is called one at a time, waiting for the color to complete before moving on. <br>
<br>
<br>
<h3>interrupting the stoplight </h3>
<br>
The Wait Button interrupts the wait times between colors. Before <code>_ready()</code> yields, it connects the <code>'pressed'</code> signal on the Wait Button. <br>
<br>
If the Wait Button is clicked during <code>wait()</code>'s yield, the GDScriptFunctionState <code>result</code> resumes immediately, ignoring <code>wait()</code>'s yield timer. This time, <code>result</code> has a string arg <code>'interrupted on green'</code>, so it will print the result, change the stoplight's color, then print <code>'done: green'</code>. The <code>wait</code> method is complete, so <code>_ready()</code> resumes and calls <code>wait()</code> for the next color. <br>
<br>
<br>
<h2>applications </h2>
<br>
The outcomes in this example be swapped out for anything. I use coroutines in blessfrey's skills to manage the flow of phases from activation, different phases of effects, cooldown, and interactions with any counters. I also use it in the basic weapon attack so the character continuously swings at the rate of his attack speed until he cancels, uses a skill, or moves. It could also be used for something like cars that stop and honk when the player walks in front of them and drive off once the path is clear. <br>
The outcomes in this example can be swapped out with anything. I use coroutines in Blessfrey's skills to manage the flow of phases from activation, different phases of effects, cooldown, and interactions with any counters. I also use it in the basic weapon attack so the character continuously swings at the rate of his attack speed until he cancels, uses a skill, or moves. It could also be used for something like cars that stop and honk when the player walks in front of them then drive off once the path is clear. <br>
<br>
Coroutines enable lots of practical ways to improve the flow and interactivity of your game, so just keep experimenting. <br>
<br>
Last updated June 8, 2021 <br>
<br>

@ -1,37 +1,46 @@
<!--200831,201031-->
<h1>september 2020: bye php, hello bottle</h1>
october 1, 2020<br>
#bottle #css #git #html #regex #regularexpressions #website<br>
<br>
<h2>wednesday, september 2 </h2>
#diary <br>
<h2>week 1 </h2>
#blogging #webdesign
<h3>wednesday, september 2 </h3>
<ul>
<li>Study examples of my favorite blogs, popular blogs, and just any blogs I can find from modern gaming, retro gaming, tech, cooking, beauty, and any genre </li>
<li>Determine essential features for my blog </li>
<li>Plan design of blog </li>
</ul>
<br>
<h2>friday, september 18 </h2>
<h2>week 3 </h2>
#bottle #php #python #simpletemplate #webdevelopment
<h3>friday, september 18 </h3>+
<ul>
<li>decided to switch from PHP to Bottle </li>
<li>Hello World in Bottle </li>
<li>created templates for main pages </li>
<li>Created templates for main pages </li>
<li>Used Bottle to fill values in a template using variables </li>
<li>Used Bottle to avoid repeating HTML code in navigation pane, header, and footer </li>
</ul>
<br>
<h2>friday, september 25</h2>
<h2>week 4 </h2>
#bottle #python #webdevelopment
<h3>friday, september 25</h3>
<ul>
<li>Diary snippets are formatted from data taken from their articles. The article preview is cut to the character limit.</li>
</ul>
<br>
<h2>saturday, september 26</h2>
<h3>saturday, september 26</h3>
<ul>
<li>Updated the blessfrey.me script to serve static content like CSS stylesheets + images. Now the pages are actually styled.</li>
</ul>
<br>
<h2>wednesday, september 30</h2>
<h2>week 5 </h2>
#bottle #debugging #python #webdevelopment
<h3>wednesday, september 30</h3>
<ul>
<li>fix bugs for blessfrey.me's static pages - no footer in the middle of the body, no unclosed &lt;ul&gt; tags from diary entry snippets breaking the CSS.</li>
<li>Fixed bugs for blessfrey.me's static pages - no footer in the middle of the body, no unclosed &lt;ul&gt; tags from diary entry snippets breaking the CSS.</li>
<li><a href="https://validator.w3.org/nu/">w3's Nu Html Checker</a> (lol @ the nu name) is really handy for automatically checking whether all my HTML tags are closed and CSS is valid, especially the parts generated through Bottle + SimpleTemplate. </li>
</ul>
<br>
Last updated June 8, 2021 <br>
<br>

@ -1,26 +1,23 @@
<!--201224,200806-->
<h1>making of blessfrey.me</h1>
october 15, 2020<br>
#bottle #css #html #simpletemplate #webdesign #webdev<br>
<br>
blessfrey.me is a personal website I use to showcase projects + blog my process. I originally wrote it in PHP, but now it's written in <a href="https://bottlepy.org/docs/dev/">Bottle</a>, a Python web framework. <br>
#bottle #css #html #simpletemplate #webdesign #webdevelopment<br>
<br>
Blessfrey.me is a personal website I use to showcase projects and blog my process. It was originally written in PHP, but now it uses <a href="https://bottlepy.org/docs/dev/">Bottle</a>, a Python web framework. <br>
<br>
<h2>why not use a premade blogging platform like WordPress? </h2><br>
blessfrey.me's needs are fairly simple - just some static pages and a blog page. Generalized blogging platforms are overkill. I don't need support for multiple users, localization, e-commerce, and so on. Unused features only bog down the website, potentially contributing to poor performance + security vulnerabilities. <br>
<br>
Also, it's just fun to write my own. I'm learning a lot as I take my website from initial sketches, to Hello World, to various prototypes, to something polished enough to show my friends. Also, since it can be considered a programming portfolio, it just makes sense that it itself should be something I programmed. <br>
Blessfrey.me's needs are fairly simple - some static pages and a blog page. Generalized blogging platforms are overkill for my purposes. I don't need support for multiple authors, comments, localization, e-commerce, and so on. Unused features bog down the website at best and contribute to security vulnerabilities at worst. <br>
<br>
Also, it's fun to write my own platform. I'm learning a lot as I take my website from initial sketches, to Hello World, to various prototypes, to something polished enough to show my friends. Regardless, since it can be considered my programming portfolio, it makes sense that it itself should be something I programmed. <br>
<br>
<h2>why Bottle? </h2><br>
I originally wrote blessfrey.me in PHP. I switched to Bottle after looking for a templating engine. Bottle comes with SimpleTemplate and can do everything PHP can do but faster + with less verbosity. Plus, you get to write in Python, which is always fun. <br>
<br>
I originally wrote Blessfrey.me in PHP. I switched to Bottle after looking for a templating engine. Bottle comes with SimpleTemplate and can do everything PHP can do but faster and with less verbosity. Plus, I get to write in Python, a much more enjoyable language. <br>
<br>
<h2>how does blessfrey.me work? </h2><br>
<h3>SimpleTemplate </h3><br>
Instead of a static collection of HTML pages on my server, blessfrey.me's pages are constructed from SimpleTemplate templates and filled in using a Bottle script upon request. <br>
Instead of existing as a static collection of HTML pages on my server, Blessfrey.me's pages are constructed upon request by the website's Bottle script from SimpleTemplate templates. <br>
<br>
Every page uses the frame template below, so the basic skeleton is consistent and code for repetitive elements only has to exist in one place. Each page's content is made unique by bringing in a different template as <code>{{!base}}</code>. (Double curly brackets refer to variables, and exclamation marks disable escaping.) <br>
Every page uses the frame template pictured below, so the basic skeleton is consistent without requiring copy-pasted code. Each page is individualize through bringing in a new template within <code>{{!base}}</code>. (Double curly brackets refer to variables, and exclamation marks disable escaping.) <br>
<br><center>
<img src="/static/img/ent/blessfrey_website_alltemplate.png" alt="(image: basic template code.)"><br>
</center>
@ -48,7 +45,7 @@ Bottle takes URLs and generates the corresponding web page upon request. Each UR
</center>
(The code can be found on <a href="https://pastebin.com/Bf96F9Ha">Pastebin</a>.) <br>
<br>
This is what the methods for specific routes look like. So every time you go to blessfrey.me/diary, one of the above methods is called, depending on whether also you supplied an integer. To generate the page content, it calls a lot of Python functions to find my diary entries, convert them into previews for the snippets section + headlines for the sidebar, and get the current time for the footer. <br>
This is what the methods for specific routes look like. So every time you go to Blessfrey.me/diary, one of the above methods is called, depending on whether also you supplied an integer. To generate the page content, it calls a lot of Python functions to find my diary entries, convert them into previews for the snippets section and headlines for the sidebar, and get the current time for the footer. <br>
<br>
<br>
<br>
@ -60,9 +57,11 @@ The website is styled using CSS, heavily relying on the CSS Grid and a bit of Fl
<br>
The projects page is an example of nested grids. Almost every page uses the yellow general layout. The content unique to the projects page is mapped out in green, with a section for the header, featured projects, and other projects. The other projects use a 2-column grid in blue to evenly space out all the little thumbnails. <br>
<br>
The CSS code for project's general grid + the nested unfeatured grid are shown below.<br>
The CSS code for project's general grid and the nested unfeatured grid are shown below.<br>
<br><center>
<img src="/static/img/ent/blessfrey_website_projectcss.png" alt="(image: projects css code.)"><br>
</center>
(The code can be found on <a href="https://pastebin.com/pVgkmT5k">Pastebin</a>, but you can always see a web page's CSS by right-clicking and viewing the source.) <br>
<br>
Last updated June 8, 2021 <br>
<br>

@ -1,7 +1,7 @@
<!--201001,201112-->
<h1>blessfrey in japanese </h1>
october 29, 2020<br>
#internationalization #localization<br>
#godot #internationalization #localization<br>
<br>
Instead of hard-coding text, keep it in a spreadsheet instead. It's easier to organize, edit, and it also makes possible future translations a much smoother process. <br>
<br>
@ -54,7 +54,7 @@ Set the locale in your script, somewhere like _ready() or on a 'change language'
<br>
<h2>step 5 - continue adding to your spreadsheet </h2>
<br>
Now that everything's in place, you can keep adding new ids + translations, and Godot will automatically use your changes in-game. <br>
Now that everything's in place, you can keep adding new ids and translations, and Godot will automatically use your changes in-game. <br>
<br>
<br>
<h2>step 6 - insert values into text </h2>
@ -81,8 +81,10 @@ Now the formatted string will appear in-game. <br>
<br>
<h2>that's the basics </h2>
<center>
<img src="/static/img/ent/internationalization_japanese.png" alt="(image: blessfrey screenshot in Japanese)" width="500" height="370.46"><br>
<img src="/static/img/ent/internationalization_japanese.png" alt="(image: Blessfrey screenshot in Japanese)" width="500" height="370.46"><br>
</center>
<br>
It all comes together for an old screenshot of blessfrey's main menu in my broken Japanese. やべーな!<br>
It all comes together for an old screenshot of Blessfrey's main menu in my broken Japanese. やべーな! <br>
<br>
Last updated June 8, 2021 <br>
<br>

@ -1,23 +1,23 @@
<!--200930,201130-->
<h1>october 2020: a blog that works</h1>
november 1, 2020<br>
#css #html #python #webdev #website<br>
#diary <br>
<br>
<h2>week 1 </h2><br>
#bottle #python #regularexpression #website <br>
#bottle #git #python #regularexpression #webdevelopment <br>
<br>
<h3>thursday, october 1 </h3><br>
<ul>
<li>blessfrey.me's diary properly displays snippets for all articles: a header taken from the title, a truncated view of the article, the date + a place for social media share links, and a link to the article.</li>
<li>Cleaning the snippets enough to look okay and not break the page was a challenge. I used regular expressions to remove HTML link + header tags, <a href="https:/git sta/stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags">which is apparently a lost cause Stack Overflow users stand against daily, hourly even</a>. It's not so bad if it's not user content and the content is pretty predictable, right?
<li><a href="https://pythex.org/">Pythex</a> is useful for checking whether your regular expression will catch your target strings</li>
<li>First command line git merge. I usually do it on the website. It's really simple - switch to the branch you're merging the second branch into, type '<code>git merge second-branch</code>' (<code>second-branch</code> = name of the second branch obviously), and fix any conflicts.</li>
<li>Blessfrey.me's diary properly displays snippets for all articles: a header taken from the title, a truncated view of the article, the date + a place for social media share links, and a link to the article. </li>
<li>Cleaned the snippets enough to look okay and not break the page was a challenge. I used regular expressions to remove HTML link + header tags, <a href="https:/git sta/stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags">which is apparently a lost cause Stack Overflow users stand against daily, hourly even</a>. It's not so bad if it's not user content and the content is pretty predictable, right? </li>
<li><a href="https://pythex.org/">Pythex</a> has been useful for checking whether regular expressions will catch target strings </li>
<li>First command line git merge. I usually do it on the website. It's really simple - switch to the branch you're merging the second branch into, type '<code>git merge second-branch</code>' (<code>second-branch</code> = name of the second branch obviously), and fix any conflicts. </li>
</ul>
<br>
<h3>friday, october 2 </h3><br>
<ul>
<li>All articles are kept in the same folder. There's really no reason to split them up. If I want to differentiate types of articles, I can use tags or something.</li>
<li>Set up blog navigation</li>
<li>Set up blog navigation </li>
</ul>
<br>
<h3>saturday, october 3 </h3><br>
@ -27,7 +27,7 @@ november 1, 2020<br>
</ul>
<br>
<h2>week 2 </h2><br>
#bottle #python #website<br>
#bottle #pagination #python #webdevelopment<br>
<br>
<h3>sunday, october 4 </h3><br>
<ul>
@ -42,7 +42,7 @@ november 1, 2020<br>
<br>
<h3>tuesday, october 6 </h3><br>
<ul>
<li>researched + added a robots.txt, sitemap, nofollow links</li>
<li>researched and added a robots.txt, sitemap, nofollow links. It's probably unnecessary for my website, but it's fun to LARP that Blessfrey.me is a real professional site.</li>
<li>added social media share links to all snippets that allow you to share the title and a link to Twitter, Facebook, or email. Not sure if Facebook or email work because I don't feel like getting Facebook or connecting email to my browser.</li>
</ul>
<br>
@ -83,3 +83,5 @@ november 1, 2020<br>
<li>added 'extra' articles, for articles that are unlisted from the main directory. I'm using it to include more GDC talk notes per talk while keeping the GDC talk article general and summarized.</li>
</ul>
<br>
Last Updated June 8 <br>
<br>

@ -1,39 +1,6 @@
<!--210318,210304-->
<h1>writing a game design document </h1>
may 27, 2021<br>
#gamedesign #gdd #worldbuilding <br>
<br>
A game design document (GDD) is a detailed document used to communicate the vision for a videogame. They are used internally by AAA game developers to keep hundreds of people on the same page, but it's worth considering keeping one as a small team or individual. I'll share how I organize mine. <br>
<br>
<h2>why keep a GDD if everyone's already on the same page? </h2><br>
Even small games are complex pieces of software requiring a broad skillset spanning computer science, design, art, music, creative writing, and marketing. The development process can take years, too. A GDD can serve as a single place to collect your thoughts and document the evolution of your design over time. Even as a single person, it's been helpful to give every aspect a little thought as I fill it out. Also, whenever I need to refer back to something, it's a boon to have an organized GDD instead of random notebooks and files. <br>
<br>
Of course, writing a GDD isn't developing a game. Barely anyone shares their GDD outside of their team, so unless your team or publisher has extra requirements, they only exist to facilitate game development. If you can't keep the document up-to-date with development or it would never be referenced by anyone, consider alternative forms of documentation. Sometimes a GDD is more effective as a game prototype, a mood board, or merely a thought in your head. If you're keeping scattered notes like I did, though, consider compiling them into a single word document or keeping them all in a binder. <br>
<br>
<h2>download the GDD template </h2><br>
Download my <a href="/download/DesignDocumentTemplate.docx">GDD template</a> and make a copy every time you have a new game idea so you never forget any! Obviously, it's just a template. If some parts aren't suitable for your genre or development process, swap them out for something better. <br>
<br>
<h2>worldbuilding bible </h2><br>
I feel it's easier to keep some parts in a different format from my GDD. For worldbuilding, I use a modified version of <a href="https://ellenbrockediting.com/worldbuilding-bible-template/">Ellen Brock's worldbuilding questionnaire</a>. I keep her headings and delete the detailed bullet prompts for less clutter. In general, I try to write my own prompts so they are closely tailored to my fantasy world. If I don't even know where to begin, though, her prompts are a great starting point. <br>
<br>
<center><img src="/static/img/ent/gdd_worldbuilding.png" alt="(image: Ellen Brock's worldbuilding questionnaire.)"></center> <br>
<br>
Every nation in my game gets their own copy that's written from their perspective, since different people groups can have different experiences or explanations regarding the same world. <br>
<br>
<h2>story + dialog </h2><br>
The pacing and direction of game narratives are dependent on the player's actions, so the stories are less like monolithic pages of text and more like a series of events strung together. For that reason, I don't keep the story or major events in my GDD. I keep an outline of the story and each scene in individual flowchart documents instead, so I can move the pieces around and connect them freely. <br>
<br>
<center>
<a target="_blank" href="/static/img/ent/gdd_diagram.png">
<img src="/static/img/ent/gdd_diagram.png" alt="(image: event diagram with an unnecessary amount of choices)" width="500" height="313">
</a></center><br>
<br>
To make my flowcharts, I open diagramming software like <a href="https://wiki.gnome.org/Apps/Dia">Dia</a> and make a box for the title and one for the goals of the scene. Then, using color coding to separate character dialog, conditional statements, stage directions, and emotes, I write the event box-by-arrow-by-box. <br>
<br>
Every time I have an idea for a scene, I scribble it in a flowchart to keep with my GDD. Some of them are dumb, but it's never bad to have a giant pile of potential game events. <br>
<br>
<h2>backing up your GDD </h2><br>
Finally, there's no point to keeping everything together in one place if the hard drive loses them. Try to keep a current copy in about 3 places. I have a GDD folder that contains an individual folder for each game. That way, it's easy to push all my GDDs to git at once. Better safe than sorry! <br>
<br>
Last updated May 26, 2021 <br>
<!--210429,210402-->
<h1>how to get a character to follow a moving target </h1>
june 10, 2021<br>
#ai #character #movement <br>
<br>

@ -1,5 +1,5 @@
<!--210601,210801-->
<h1>june 2020: </h1>
<h1>june 2020: mostly sewing </h1>
july 1, 2021<br>
#diary <br>
<br>
@ -15,5 +15,40 @@ july 1, 2021<br>
<br>
<h3>sunday, june 6 </h3>
<ul>
<li>I feel like I've been so busy with translating manga, sewing new clothes, and socializing that I haven't worked on Blessfrey enough. I kinda forgot I'm so close to my first demo release. That would be so cool. I worked on refactoring movement and </li>
<li>I feel like I've been so busy with translating manga, sewing new clothes, and socializing that I haven't worked on Blessfrey enough. I kinda forgot I'm so close to my first demo release. That would be so cool. Today I worked on refactoring movement. </li>
</ul>
<br>
<h3>tuesday, june 8 </h3>
<ul>
<li>Let's make a schedule for sewing my new capsule wardrobe: </li>
<li>Today - 泣き虫 cutting done </li>
<li>??? - findings, trims, and accent fabric arrive </li>
<li>June 13 - turtleneck, pajama pants patterns done </li>
<li>June 20 - foil, tissue, nightshade cutting done </li>
<li>June 27 - turtleneck, pajama pants sewing done </li>
<li>whenever Mood coupon is good for - order Penitentiary, 4x2 knit </li>
<li>??? - those arrive </li>
<li>July 4 - 泣き虫 sewing done </li>
<li>July 11 - bomber pattern done </li>
<li>July 18 - bomber cutting done </li>
<li>July 25 - bomber sewing done </li>
<li>August 1 - plaid pants pattern done </li>
<li>August 8 - plaid pants cutting done </li>
<li>August 15 - plaid pants sewing done </li>
<li>August 22 - silk turban, silk scrunchies done </li>
<li>August 29 - wrap pajama pattern done </li>
<li>September 5 - wrap pajama cutting done </li>
<li>September 12 - wrap pajama sewing done </li>
<li>September 19 - kimono pattern done </li>
<li>September 26 - kimono, 4x2 turtleneck cutting done </li>
<li>October 3 - kimono, 4x2 turtleneck sewing done </li>
<li>October 10 - bodice pattern done </li>
<li>October 17 - bodice cutting done </li>
<li>October 24 - bodice sewing done </li>
<li>October 31 - rickrack pajamas pattern done </li>
<li>November 7 - rickrack pajamas cutting done </li>
<li>November 14 - rickrack pajamas sewing done </li>
<li>November 21 - trip </li>
<li>If I keep it moving at a good pace, I can finish 3 mock turtlenecks, a button shirt, a bodice, pants, a jacket, a kimono, two pajama sets, a silk turban, some silk scrunchies, and a pair of pajama pants for my husband. If I go faster, I can also include the two shorts I have planned. Too bad if not, but it's still a big step up from wearing hand-me-downs and my husband's clothes all the time. Plus, new pajamas that actually fit will be so great. <li>
</ul>

Loading…
Cancel
Save