diff --git a/src/diary/entries/201112 b/src/diary/entries/201112 index 3aaf6d6..1fbff4f 100644 --- a/src/diary/entries/201112 +++ b/src/diary/entries/201112 @@ -1,4 +1,4 @@ - +

tidying up my skill phases

november 12, 2020
#programming #skills
diff --git a/src/diary/entries/201210 b/src/diary/entries/201210 index aa57bf7..209857d 100644 --- a/src/diary/entries/201210 +++ b/src/diary/entries/201210 @@ -4,25 +4,48 @@ december 10, 2020
#writing


-I like collecting common tropes from games I play. Maybe it can inspire some game beats? Here's a few of them listed with some games I've seen them in ~
+I like collecting common tropes from games I play. Maybe it can it root out cliches? Or inspire some game beats? Here's a few tropes spotted in multiple games ~

-If you're worried about spoilers, games mentioned are The Cat Lady, Dreamfall: The Longest Journey, Fire Emblem, Guild Wars, Guild Wars 2, Half-Life, Mass Effect, Neverwinter Nights 2, Oblivion, Persona 4, Planescape: Torment, RuneScape 2 +If you're worried about spoilers, games mentioned are Arcanum, The Cat Lady, Divine Divinity, Dreamfall: The Longest Journey, Fable, Fire Emblem, Guild Wars, Guild Wars 2, Half-Life, Jade Empire, Legend of Zelda: A Link to the Past, The Longest Journey, Mass Effect, Neverwinter Nights 2, Oblivion, Persona 4, Planescape: Torment, RuneScape 2

+
+

opening scene + first level

+ +

+

protagonist

+ +

+

levels, story points, fights

+

+

side content

+ +
+last updated: 2/21/2021
diff --git a/src/diary/entries/210201 b/src/diary/entries/210201 index 4323551..254f8e7 100644 --- a/src/diary/entries/210201 +++ b/src/diary/entries/210201 @@ -16,7 +16,7 @@ february 1, 2021

sunday, january 3


+

wednesday, january 27

+ +

thursday, january 28

+
+

saturday, january 30

+

week 6, january 31


-#

+

sunday, january 31

+ +
+last updated 3/2/2021
diff --git a/src/diary/entries/210204 b/src/diary/entries/210204 index ee86344..5de6344 100644 --- a/src/diary/entries/210204 +++ b/src/diary/entries/210204 @@ -1,28 +1,31 @@

new year's resolution - making the most of 2021

february 4, 2021
-
+#offtopic

-2020 was a year of loss and difficult changes. I was largely unproductive in game development, web development, social media, and just about every aspect of my life. Most of a year passed without much to show for it. 2021 probably isn't going to be any better, but I will be. Now when I pray, "Father, thank you for this day," I won't take a normal, healthy day for granted and make the most of what I've been given.
+Everyone had difficulties during 2020. A small part of that was losing my energy for programming and every other aspect of my life, so most of the year passed without significant progress towards shipping Blessfrey and perfecting my website. 2021 probably isn't going to be a return to normal, but I will try to be more productive. Now when I pray, "Father, thank you for this day," I'll try not to take a normal, healthy day for granted and make the most of what I've been given.

-Honestly, it's a special kind of prolonged suffering to be separated from people for a year. Going out is such a fantasy to me now, no matter how masked and socially distant. Simple grocery shopping has become an event that I celebrate with my cutest clothes and hair. I even started wearing makeup to make outings just that much more special. To learn fun colorful makeup, I started watching small beauty youtubers. For a such a frivolous topic, their videos incorporate a lot of self-reflection about the wastefulness of large collections. It got me thinking about the wastefulness of my 2020 and how I want to spend 2021.
+Being separated from people for a year is draining. I might be a quiet person, but I get my energy from being around people. Even being near crowds of strangers cheers me up when I'm feeling down.
+
+I began severely limiting my outdoor activities during the second week of January, about two months before social distancing was mandated. After a full indoor year, going out has become such a fantasy. Simple grocery shopping has become an event to celebrate with my cutest clothes + hairstyles. I even started wearing makeup to make outings just that much more special.
+
+For inspiration, I started watching lots of small beauty youtubers for tutorials. It turns out nobody makes tutorials anymore, but the closest equivalents incorporate a surprising amount of self-reflection about makeup, particularly the wastefulness of large collections. I felt like they could have been speaking about the wastefulness of my 2020, and it influenced how I want to spend 2021.


panning makeup


-Online beauty communities value the concept of panning. Against a consumer landscape of constant releases and rising quality of affordable drugstore + indie brands, it's aspirational to be content with what you already have. Panning means reaching the bottom packaging of a product, like this Instagram girl did. #projectpan and #panporn are full of well-loved makeup.
+Online beauty communities value panning. It's aspirational to be content with what you already have and use it regularly. Panning means reaching the bottom packaging of a product, like this Instagram girl did, and #projectpan + #panporn are full of photos of well-loved makeup.

View this post on Instagram

A post shared by Curated By Léah (@_curatedbyleah)


-Panning is difficult. I used to wear a full face of makeup for work. Besides some complexion products, I had one lipstick, four eyeshadow singles, and one blush. Even after using an extremely minimal collection daily for two years, there were noticeable dips but no pans in my color cosmetics.
-
-If you buy more than a palette or two, it's easy to buy more makeup than you could ever use in your life. Even worse, cream products dry up within a year or two. Panners find that excess wasteful, so they cut back on spending and intentionally enjoy their makeup to the fullest before it expires.
+Panning is difficult. Powders vary in consistency, but as a reference point, I had four eyeshadow singles that I wore every day for work. After a year, there were big dips but no pans.

-There's another angle to panning. Since so many releases are limited edition, there's a natural tendency to save your favorite makeup for special occasions. That's equally wasteful, since it's more likely to mold than empty. If it's your favorite, you should wear it every single day.
+Panning is obviously encouraging you to buy less and all that, but the message that stands out to me is to use the things you have. Since makeup brands are always discontinuing their best products and making their new ones limited edition, there's a natural tendency to save your favorites for special occasions. That's wasteful, since makeup is more likely to expire than empty. If it's your favorite, you should wear it every single day!


panning other areas of life


-I guess the concept is obvious, but I find a lot of wisdom in that mindset. The concept can be applied anywhere - videogame backlogs, unread book collections, stocked up baking ingredients, unused art supplies, ignored MOOCs, forgotten exercise equipment, and hoarded assets and libraries. For each item in those areas, I could have been developing skills, gaining new perspectives, and having fun. Otherwise, it's just junk taking up space in my apartment and hard drive.
+I guess the concept is obvious, but I find wisdom in panning. It can be applied anywhere - unfinished projects, videogame backlogs, unread book collections, stocked up baking ingredients, unused art supplies, ignored MOOCs, forgotten exercise equipment, and hoarded assets + libraries...For each item in those areas, I could have been developing skills, gaining new perspectives, and having fun. Otherwise, it's just junk taking up space in my apartment and hard drive.

-In 2021, even if I have to do it all alone at home, I'm going to be more intentional about enjoying my hobbies. I've already finished 2 books, sewn 4 face masks, started an art journal, and gotten further than ever in Planescape: Torment.
+In 2021, even if I have to do it all cooped up at home, I'm going to be more intentional about enjoying my hobbies. I've already finished 2 books, sewn 4 face masks, made freezer cookie logs, started an art journal, and actually completed a playthrough of Planescape: Torment.

-Happy (belated) New Year. Enjoy 2021. :)
+Happy (belated) New Year. Enjoy 2021 and look forward to more active development for Blessfrey. :)

+last updated 3/2/21
diff --git a/src/diary/entries/210218 b/src/diary/entries/210218 index ae8ca12..a2adf33 100644 --- a/src/diary/entries/210218 +++ b/src/diary/entries/210218 @@ -1,18 +1,64 @@ - -

Writing Resources

+ +

refactoring characters: black box

february 18, 2021
-
+#character #refactor

-Blessfrey has a story and character arcs. Let's get more confident with our story with online resources.
+The character script was one of blessfrey's first scripts. Since it's never seen a serious refactor, it has retained its clueless beginner style to this day. Every single line of code related to characters was buried somewhere in this unmanageable monolith. The time has finally come for refactoring.

-

plot


- +The two biggest problems with my character script were the lack of structure + encapsulation.

-

general


- +

adding structure


+An entire game can fit in one mega script, but an object-oriented approach is more manageable. It's good to keep your code close to where it is implemented.
+
+First, I expanded the character's node hierarchy. I combed through the code, forming abstract categories for each section. These categories became my subnodes. (Nodes are objects in Godot, by the way.) If a subnode was too complex, it was broken into another level of subnodes. Then, I cut+pasted as much code as I could into these subscripts. My tree now looks like this, when before, it just had the AI, Body, and UI nodes:
+
+ + (image: character's node tree. Character's children are AI, Body, DropTable, Actions, UI, Inventory, Skillbar, Serialization, InspectMenu, Equipment, Properties, Effects, Events, SkillLibrary, and Class. Under Properties are Health, Energy, and XP. Under Skillbar is Skillslot. Under SkillLibrary is Skill. Under Class is FirstClass and SecondClass. Under AI is State. Under Body is ClickableArea, RangeBubble, Camera, Sprite, Hitbox, Feet, Effects, Animation, Light, and Debug. Under the Body's Sprite is Highlight.) +
+
+

adding encapsulation


+Within the monolith, every part of the character had direct access to every other part. A major step towards getting everything running again was adding encapsulation, or grouping related logic + data into objects then restricting direct access of its internal components from other objects. I did this through designating entrypoints as the only way of performing actions or accessing data. These entrypoints are the character's verbs and setters + getters.
+
+

verbs

+Verbs are what the object does. Some of them are obvious, like "use skill," "be damaged," and "pick up item," but some of them are more abstract, like "calculate level."
+
+The character script should act as a central hub, executing verbs by contacting subnodes for the actual logic and passing back the output. These subnodes should act as black boxes, so the character script only worries about input + output, not how the request is performed.
+
+
(image: illustration of the concept of a black box: input goes in, output comes out, it doesn't matter what happens inside.)

+
+Before, I didn't apply this concept to the character at all. Outside objects would travel all over the tree to pick out specific methods. That resulted in code like body.get_parent().UI.skillbar.healthbar.label.set_value("100") instead of something like character.set_health(100). As I modified systems, all the outside references made it difficult to remove old versions. Since everything didn't necessarily use the entrypoint, there was a lot of redundant code + unexpected behavior.
+
+
+ (image: a code excerpt's before and after, can also be read @ https://pastebin.com/xhJqVVKe.) +

+
+

setters + getters

+Another closely related concept is setters + getters. If you tack a setget followed by method names onto a variable, those methods will be called whenever you access that variable. The first method is the setter and is conventionally prefixed with "set_", while the second is the getter. If you don't want a setter, don't write anything before the comma: setget , get_whatever. If you don't want a getter, don't even add the comma: setget set_whatever.
+
+
(image: code example of setters and getters, can also be read @ https://pastebin.com/y6AJVBMu.)

+
+Setters + getters are related because they increase consistency. If something needs to happen every time a variable is changed, the setter is a good entrypoint. If a variable needs to be obtained in a specific way, that process can be taken care of inside a get_thing(). This way, your variable-specific code is encapsulated, and you are no longer encouraged to manipulate them outside of their little box.
+
+Unsurprisingly, using verbs, black boxes, and setters + getters fixed a lot of long-running bugs.
+
+

controlling flow


+Another problem popped up concerning when the tree's nodes initialize. Now that everything isn't in the same script, everything isn't ready at the same time. To see the initialization order, I made a small project. Each node prints its name when at ready, and, as you see, it works from lowest level to highest level, top node to bottom node.
+
+
(image: The order goes from top-to-bottom node, lowest level to highest level. The tree, code, and output can be read @ https://pastebin.com/Z4VG9ey5.)

+
+To have more control over the flow of my character, dependency-sensitive nodes rely more on a setup method than the _ready method. Also, characters who inherit from the base script use a super _setup method called from the setup method for their own specialized needs. (Super methods are discussed in tidying up my skill phases.) This way, I can ensure a node is ready and has all its properties set at the moment it's needed.
+
+
(image: the base character's _ready is broken into more methods. Supermethod are used for calling specialized code at a specific time.)

+
(image: the player no longer uses _ready. It uses a supermethod called off the base character's setup method.)

+
+

happy script


+The refactor paid off immediately. So many "known issues" were immediately resolved. The character scripts are way easier to maintain now. The main script's halved in size. And I feel like I've improved a lot since I first started working on blessfrey. I wanted to go through the rest of the program and apply these concepts throughout, but it turned out I was already using them. It was just this ancient mess of a script that was left behind.
+
+I'll finish with a before + after of the base character script.
+
+
(image: 604 lines of spaghetti code vs 374 lines of verbs + setup code)

+
+Enjoy your day!
+
+last updated 2/21/21

diff --git a/src/diary/entries/210301 b/src/diary/entries/210301 new file mode 100644 index 0000000..b8d8bff --- /dev/null +++ b/src/diary/entries/210301 @@ -0,0 +1,119 @@ + +

february 2020: AI

+march 1, 2021
+
+
+I just feel like rambling about games.
+
+

week 1, february 1-6


+#design #localization #writing
+
+

tuesday, february 2

+ +
+

wednesday, february 3

+ +
+

thursday, february 4

+ +
+

thursday, february 5

+ +
+

thursday, february 9 - second impeachment trial of the president begins (first time in U.S. history)

+
+

week 2, february 7-13


+#design #writing
+

thursday, february 11

+ +
+

week 3, february 14-20


+#design #writing
+

wednesday, february 17

+ +
+

thursday, february 18 - Perseverance Rover Landing on Mars

+ +
+

friday, february 19

+ +
+

saturday, february 20

+ +
+

week 4, february 21 - 27


+#ai #webdev
+

sunday, february 21

+ +
+

monday, february 22

+ +
+

thursday, february 25

+ +
+

friday, february 26

+ +
+

saturday, february 27

+ +
+

week 5, february 28 - march 6


+#nothing
+

sunday, february 28

+ +
diff --git a/src/diary/entries/210304 b/src/diary/entries/210304 new file mode 100644 index 0000000..4f1715b --- /dev/null +++ b/src/diary/entries/210304 @@ -0,0 +1,139 @@ + +

python writes my skills for me

+march 4, 2021
+#godotengine #json #python
+
+Similar to Magic: The Gathering and Guild Wars 1, the functionality of my skills is composed of keywords. For instance, a skill with the 'damage' keyword + 'bleeding' keyword will inflict pure damage + a bleeding status effect.
+
+Since skills derive their effects from existing keywords, each individual skill has very little to no unique code. Repetitive, formulaic tasks are better left to scripts, so I wrote a skillmaker to write skills for me.
+
+

what do blessfrey skills look like?


+
+(Click on the shrunk images for an expanded view.)
+
+They are Godot scenes composed of a single node with an attached script.
+
+
(image: That's it - the tree's just one node with a script.)

+
+The .TSCN and .GD files look like this in the engine.
+
+
+ (image: Screenshot from the engine - the node tree, attached script, properties, and groups are all neatly displayed.) +

+
+But Godot files are just simple text, so you can open them in any text editor. Really, you could write the bulk of a Godot game in Notepad, if you wanted to. That's perfect for me!
+
+The same files look like this in xed (similar program to Notepad):
+
+
+ (image: The same files displayed in xed.) +

+
+The .GD file is identical to what gets displayed in Godot Engine, but the .TSCN is a little cryptic. If I learn how the syntax, I can make a script to write it for me. I don't understand all of it, since I only deciphered what I need for making a skill.
+
+

examining the skill scene file


+
+
+ (image: The .TSCN file broken into color-coded sections.) +

+(You can also see the text @ Pastebin.)
+
+Since I designed Blessfrey skills to have a simple, consistent structure, the .TSCN for any two skills will be very similar.
+After experimenting in + out of Godot Engine, I've found that that first line is always the same.
+
+

red + yellow resources


+The red + yellow sections are the scene's resources. This includes any .GD files attached to nodes in the scene tree and any resources (textures, fonts, etc) you load as properties. Those are the properties that look like my icon:
+
+
(image: This is what resources look like after being loaded into the properties.)

+
+The script + the resources look so similar because they are both treated as properties of the node. The formula is...
+
+ +
+

green groups


+Green marks the groups of each node in the scene. You can see the groups are just an array of strings.
+
+Broken into pieces, that looks like
+
+ +
+Two interesting things about the group_name property. One, the engine adds a comma at the end of every line, even to last or only group of the node. Two, if your scene node has no groups, this property will be omitted from the node. If CuttheGuy belonged to no groups, it would just look like [node name="CuttheGuy" type="Node"].
+
+

blue properties


+The properties are inside blue. Since scripts are treated the same as any other resource property, the attached script is referenced in this section.
+
+Resources look like icon = ExtResource( 2 ). +
+
+Icon is my variable. I declared it in a script that the skill inherits from as export(Texture) var icon = preload('res://res/art/skillIcons/EmptySkillSlot.png') setget , get_icon. The script variable was declared by the engine and isn't in my .GD files.
+
+The 2 is an id from the yellow section. It must match the resource's number from earlier.
+
+If I store all my skill icons in the skillIcons directory and give them the proper name, they'll be found when they're needed, no manually loading necessary. This is a test skill with a generic skill icon, but it would be named something like CuttheGuy.png.
+
+Other properties are more straight-forward. They are the same exported member variables declared in the node's attached .GD script, followed by an equal sign and the value.
+ +
+

overall


+They aren't so confusing when read as text files. The Godot team must have planned them to be human-readable. :)
+
+

altar of spellmaking


+So as you modify the groups and properties of a node, the engine is actually just formatting your input into text files. Since I have a functional understanding of how to manually format data, I can write a skill-formatting script to do it for me.
+
+The tool is named "Altar of Spellmaking" as an Oblivion reference and uses JSON + Python3. Godot can interpret JSON files on its own, so maybe someday the game will automatically generate skills from on the JSON file at load time. For now, though, I see a frivolous excuse to use Python, so the interpreter is going to be in Python. Its input shall be a JSON file, and its output shall be matching .TSCN + .GD files.
+
+

writing a skill with JSON


+JSON isn't a Turing complete language, just a notation. It looks like a dictionary and uses attribute-value relationships. It's good at storing nested groups of information and can be easily interpretted by other languages. Since my skills can be described as a collection of attributes + keyword effects, they can wrestled into the JSON format.
+
+
(image: The skill as it appears in the JSON file.)
+(You can also see the text @ Pastebin.)
+
+All the repetitive, obvious, or derivative aspects of the skill do not need to appear in the JSON, since Python will be compensating.
+
+I identify the skill by its name in lower-case + underscores just for my sake. The program doesn't care what the skill's id is or if it has an id at all.
+
+Inside, I have some basic attributes like the id and associated class + stat. The tags will become some of the node's groups. The keywords take place in the skill's phases, which are lists of dictionaries. To build the skill phase, Python will interate over each item in the dictionary and use the internal data to supply the keyword's necessary input or conditions.
+
+Conditional effects look like the image below.
+
+
+ (image: A skill entry with a conditional effect.) +
+(You can also see the text @ Pastebin.)
+
+The cond consists of the code (literal GDscript code) and desc (an English translation of that code). It's not perfect, but it's quicker for me to just write the code and write the skill description than try to have Python translate. This does mean my code has to be perfect, and I have pressure to adhere to the standard language of a skill description. That's a problem, but it is much smaller than the problem of not using JSON at all.
+
+Eventually, I would prefer the desc to be an id from the translation spreadsheet instead of hard-coded text. (I discussed translation in blessfrey in japanese.)
+
+

writing a Godot scene with Python3


+Using Python to format JSON values into a Godot scene + script is kind of ridiculous, so I have 168 lines of code and half of them start with f.write. Now that it's written, though, it's easy to maintain. Since the overall structure doesn't change, all I have to do is tweak a line here or there to reflect refactors. I'll include a picture of the main method, so you can get a sense of the flow of the program:
+
+
+ (image: The main method in the Python script.) +
+(You can also see the text @ Pastebin.)
+
+The output is a nested directory of all the skills, so I can just copy + paste the skills folder over the one in the engine. And it works! The first skill image's code looks machine-generated because it was.
+
+
+ (image: skills>Common>Brawler>DirtyFighting>CuttheGuy, same directories as the engine.) +
+
+

is it better than just making skills in the engine?

+
+If I only had ten or eleven skills, then probably not. I'm planning on having around 40 skills per class, though, and I'm only one person. Since the skills are very formulaic, I'd rather have Python do all the copying + pasting for me while I worry about what makes my skills unique!
+
diff --git a/src/diary/entries/210401 b/src/diary/entries/210401 new file mode 100644 index 0000000..b5fc651 --- /dev/null +++ b/src/diary/entries/210401 @@ -0,0 +1,34 @@ + +

march 2020: AI

+april 1, 2021
+
+
+

week 1, february 28 - march 6


+#ai #webdev
+
+

monday, march 1

+ +
+

tuesday, march 2

+ +
+

wednesday, march 3

+ +
+

thursday, march 4

+ +
diff --git a/src/diary/entries/extra/210204 b/src/diary/entries/extra/210204 new file mode 100644 index 0000000..ee86344 --- /dev/null +++ b/src/diary/entries/extra/210204 @@ -0,0 +1,28 @@ + +

new year's resolution - making the most of 2021

+february 4, 2021
+
+
+2020 was a year of loss and difficult changes. I was largely unproductive in game development, web development, social media, and just about every aspect of my life. Most of a year passed without much to show for it. 2021 probably isn't going to be any better, but I will be. Now when I pray, "Father, thank you for this day," I won't take a normal, healthy day for granted and make the most of what I've been given.
+
+Honestly, it's a special kind of prolonged suffering to be separated from people for a year. Going out is such a fantasy to me now, no matter how masked and socially distant. Simple grocery shopping has become an event that I celebrate with my cutest clothes and hair. I even started wearing makeup to make outings just that much more special. To learn fun colorful makeup, I started watching small beauty youtubers. For a such a frivolous topic, their videos incorporate a lot of self-reflection about the wastefulness of large collections. It got me thinking about the wastefulness of my 2020 and how I want to spend 2021.
+

+

panning makeup


+Online beauty communities value the concept of panning. Against a consumer landscape of constant releases and rising quality of affordable drugstore + indie brands, it's aspirational to be content with what you already have. Panning means reaching the bottom packaging of a product, like this Instagram girl did. #projectpan and #panporn are full of well-loved makeup.
+
+
View this post on Instagram

A post shared by Curated By Léah (@_curatedbyleah)

+ +
+Panning is difficult. I used to wear a full face of makeup for work. Besides some complexion products, I had one lipstick, four eyeshadow singles, and one blush. Even after using an extremely minimal collection daily for two years, there were noticeable dips but no pans in my color cosmetics.
+
+If you buy more than a palette or two, it's easy to buy more makeup than you could ever use in your life. Even worse, cream products dry up within a year or two. Panners find that excess wasteful, so they cut back on spending and intentionally enjoy their makeup to the fullest before it expires.
+
+There's another angle to panning. Since so many releases are limited edition, there's a natural tendency to save your favorite makeup for special occasions. That's equally wasteful, since it's more likely to mold than empty. If it's your favorite, you should wear it every single day.
+

+

panning other areas of life


+I guess the concept is obvious, but I find a lot of wisdom in that mindset. The concept can be applied anywhere - videogame backlogs, unread book collections, stocked up baking ingredients, unused art supplies, ignored MOOCs, forgotten exercise equipment, and hoarded assets and libraries. For each item in those areas, I could have been developing skills, gaining new perspectives, and having fun. Otherwise, it's just junk taking up space in my apartment and hard drive.
+
+In 2021, even if I have to do it all alone at home, I'm going to be more intentional about enjoying my hobbies. I've already finished 2 books, sewn 4 face masks, started an art journal, and gotten further than ever in Planescape: Torment.
+
+Happy (belated) New Year. Enjoy 2021. :)
+
diff --git a/src/diary/entries/extra/dunn b/src/diary/entries/extra/dunn new file mode 100644 index 0000000..38fd021 --- /dev/null +++ b/src/diary/entries/extra/dunn @@ -0,0 +1,18 @@ + +

writing resources

+march 4, 2021
+
+
+Blessfrey has a story and character arcs. Let's get more confident with our story with online resources.
+
+

plot


+ +
+

general


+ +
diff --git a/src/diary/entries/extra/ideabox b/src/diary/entries/extra/ideabox index fc68604..2de4ebe 100644 --- a/src/diary/entries/extra/ideabox +++ b/src/diary/entries/extra/ideabox @@ -86,6 +86,7 @@ citrine city of the dead clipart clover +cobweb coin flip cold iron confetti @@ -423,6 +424,7 @@ squid spellbook spelunking spice cookie +spiderweb spirit animal spy stained-glass diff --git a/src/diary/entries/extra/stop-the-steal b/src/diary/entries/extra/stop-the-steal index 69660a1..2616013 100644 --- a/src/diary/entries/extra/stop-the-steal +++ b/src/diary/entries/extra/stop-the-steal @@ -3,5 +3,63 @@ january 6, 2020


-Today, the March for Trump resulted in a Capitol break-in. The photos are like something out of a videogame. I took them from Twitter, so I can't easily credit.
+The March for Trump interrupted Congress during the joint session to certify the Electoral College vote. It looks like a Far Cry game. All photos are stolen from Twitter, so sorry for inconsistent credits + quality.
+
+
+ (image: pro-Trump crowds gather around Capitol Hill) +
pro-Trump crowds gather around Capitol Hill
credit: Anadolu Agency, Getty Images
+

+
+ (image: civilians scale Capitol Hill) +
civilians scale Capitol Hill
credit: Stephanie Keith, REUTERS
+

+
+ (image: civilians scale Capitol Hill) +
civilians scale Capitol Hill
+

+
+ (image: civilians clash with D.C. police) +
civilians clash with D.C. police
credit: Julio Cortez, AP
+

+
+ (image: civilians clash with D.C. police) +
civilians clash with D.C. police
credit: Julio Cortez, AP
+

+
+ (image: civilian dangles from Senate Chamber) +
civilian dangles from Senate Chamber
credit: Win McNamee, Getty Images
+

+
+ (image: protestors breach the Capitol Building) +
civilians confront Capitol security
credit: Manuel Balce Ceneta, AP
+

+
+ (image: civilian clashes with Capitol security) +
civilian clashes with Capitol security
credit: Kevin Dietsch / Pool, EPA
+

+
+ (image: representatives take cover in the Capitol) +
representatives take cover in the Capitol
credit: Tom Williams / CQ-Roll Call, Inc, Getty Images
+

+
+ (image: armed standoff with police as civilians break into House Chamber) +
armed standoff with police as civilians break into the House Chamber
credit: J. Scott Applewhite, AP
+

+
+ (image: Capitol Building in disarray during breach) +
Capitol Building in disarray during breach
credit: Olivier Douliery, AFP
+

+
+ (image: Capitol Building in disarray during breach) +
Capitol Building in disarray during breach
credit: Olivier Douliery, AFP
+

+
+ (image: police munition explosion on Capitol Hill) +
police munition explosion on Capitol Hill
credit: Evelyn Hockstein, The Washington Post
+

+
+ (image: Capitol Hill engulfed in tear gas and smoke) +
Capitol Hill engulfed in tear gas and smoke
credit: Leah Millis, REUTERS
+
+last updated 2/21/21

diff --git a/src/diary/entries/extra/to-do b/src/diary/entries/extra/to-do new file mode 100644 index 0000000..7ff3510 --- /dev/null +++ b/src/diary/entries/extra/to-do @@ -0,0 +1,72 @@ + +

to do

+january 30, 2020
+
+
+A to-do list I can see anywhere with Wi-Fi.
+
+

UI

+ +
+

Skill

+ +
+

Tools

+ +
+ + + +

Codes

+ +
+

Skill - 0x100f00f00f

+ +
+

Char - 0x3f0f00f00f

+ +
+

Item - 0x31f00f000f

+ +
+

Loc - 0x41f00f000f

+ +
diff --git a/src/index.py b/src/index.py index 127173f..eaa2d8b 100644 --- a/src/index.py +++ b/src/index.py @@ -288,7 +288,7 @@ def box(): @route('/credits') def credits(): """credits page""" - info = {'css': 'box', 'title': 'blessfrey - credits', 'year': datetime.datetime.now()} + info = {'css': 'contact', 'title': 'blessfrey - credits', 'year': datetime.datetime.now()} return template('credits.tpl', info) @@ -296,7 +296,7 @@ def credits(): @route('/contact') def contact(): """contact page""" - info = {'css': 'box', 'title': 'blessfrey - contact chimchooree', 'year': datetime.datetime.now()} + info = {'css': 'contact', 'title': 'blessfrey - contact chimchooree', 'year': datetime.datetime.now()} return template('contact.tpl', info) # Idea Box Page - Box Template diff --git a/src/static/css/box.css b/src/static/css/box.css index e0ba04e..637b801 100755 --- a/src/static/css/box.css +++ b/src/static/css/box.css @@ -1,6 +1,5 @@ * { - padding:25; - margin:25; + font-family: trebuchet ms; arial; calibri; gill sans; helvetica neue; candara; geneva; verdana; sans-serif; } a { @@ -43,6 +42,7 @@ body { .content { grid-area: 3 / 2 / 4 / 3; } .nav-row { grid-area: 2 / 1 / 3 / 4; } + .nav-grid { grid-area: 2 / 2 / 3 / 3; display: flex; diff --git a/src/static/css/contact.css b/src/static/css/contact.css new file mode 100644 index 0000000..f929fdc --- /dev/null +++ b/src/static/css/contact.css @@ -0,0 +1,118 @@ +* { + padding:0; + margin:0; + font-family: trebuchet ms; arial; calibri; gill sans; helvetica neue; candara; geneva; verdana; sans-serif; + font-size: 18px; +} + +a { + text-decoration: none; +} +a:link { + color: red; +} +a:visited { + color: hotpink; +} +a:hover { + color: green; +} +a:active { + color: blue; +} +mark { + background-color: #900C3F; + color: hotpink; +} +ul { list-style-position: inside; } +h1 { font-size: 30px;} +h2 { font-size: 25px;} + +.grid { + display: grid; + grid-template-columns: auto 800px auto; + grid-template-rows: 25px 90px auto; + grid-column-gap: 0px; + grid-row-gap: 0px; +} + +body { + background-color: #e5c5d1; + color: #900C3F; +} + +.whitespace { grid-area: 1 / 1 / 2 / 4; } +.blessfrey-logo { grid-area: 1 / 2 / 2 / 3; } +.body-row { grid-area: 3 / 1 / 4 / 4; } +.content { grid-area: 3 / 2 / 4 / 3;} + +.nav-row { grid-area: 2 / 1 / 3 / 4; } + +.nav-grid { + grid-area: 2 / 2 / 3 / 3; + display: flex; + flex-direction:column; + justify-content:flex-end; + display: grid; + grid-template-columns: auto repeat(4, 70px) auto; + grid-template-rows: 90px; + grid-column-gap: 17px; + grid-row-gap: 0px; + align-items: end; + justify-items: center; +} + +.nav-bar { + grid-area: 1 / 1 / 2 / 7; + background-image: url(../img/ele/navbar.png); + height: 86px; + width: 800px; +} +.nav-index { + grid-area: 1 / 2 / 2 / 3; + padding-bottom: 3px; + position: relative; +} +.nav-game { + grid-area: 1 / 3 / 2 / 4; + padding-bottom: 3px; + position: relative; +} +.nav-diary { + grid-area: 1 / 4 / 2 / 5; + padding-bottom: 3px; + position: relative; +} +.nav-presskit { + grid-area: 1 / 5 / 2 / 6; + padding-bottom: 3px; + position: relative; +} +.nav-link { + position: absolute; + top: 45%; + left: 50%; + transform: translate(-50%, -50%) +} +.nav-link a { + font-size: 18px; +} + +.nav-link a:link { + color: #66C7F4; +} +.nav-link a:visited { + color: #CB9CF2; +} +.nav-link a:hover { + color: #F9B3D7; +} +.nav-link a:active { + color: #f463ad; +} + +.footer-content { + padding-top: 5px; + text-align: right; + overflow: hidden; +} diff --git a/src/static/css/index.css b/src/static/css/index.css index ee53ee7..65fb4e7 100755 --- a/src/static/css/index.css +++ b/src/static/css/index.css @@ -138,7 +138,7 @@ a { flex-direction:column; background-color: #581845; color: #F9B3D7; - height: 85px; + height: 150px; overflow-y: scroll; margin-right: 0px; margin-left: 0px; diff --git a/src/static/img/bg/medallion.png b/src/static/img/bg/medallion.png deleted file mode 100644 index 889106a..0000000 Binary files a/src/static/img/bg/medallion.png and /dev/null differ diff --git a/src/static/img/bg/medallion_v2.png b/src/static/img/bg/medallion_v2.png deleted file mode 100644 index e5874db..0000000 Binary files a/src/static/img/bg/medallion_v2.png and /dev/null differ diff --git a/src/static/img/bg/yellow.png b/src/static/img/bg/yellow.png deleted file mode 100644 index c8e4e78..0000000 Binary files a/src/static/img/bg/yellow.png and /dev/null differ diff --git a/src/static/img/bg/yellow.png~ b/src/static/img/bg/yellow.png~ deleted file mode 100644 index 101789c..0000000 Binary files a/src/static/img/bg/yellow.png~ and /dev/null differ diff --git a/src/static/img/ele/twitter-ribbon.png b/src/static/img/ele/twitter-ribbon.png deleted file mode 100644 index b6ccc77..0000000 Binary files a/src/static/img/ele/twitter-ribbon.png and /dev/null differ diff --git a/src/static/img/ent/blackbox.png b/src/static/img/ent/blackbox.png new file mode 100644 index 0000000..c856114 Binary files /dev/null and b/src/static/img/ent/blackbox.png differ diff --git a/src/static/img/ent/characternodehierarchy.png b/src/static/img/ent/characternodehierarchy.png new file mode 100644 index 0000000..ee92801 Binary files /dev/null and b/src/static/img/ent/characternodehierarchy.png differ diff --git a/src/static/img/ent/characterrefactor_before+after.png b/src/static/img/ent/characterrefactor_before+after.png new file mode 100644 index 0000000..8611054 Binary files /dev/null and b/src/static/img/ent/characterrefactor_before+after.png differ diff --git a/src/static/img/ent/characterrefactor_oldvsnewcode.png b/src/static/img/ent/characterrefactor_oldvsnewcode.png new file mode 100644 index 0000000..9f5f8ab Binary files /dev/null and b/src/static/img/ent/characterrefactor_oldvsnewcode.png differ diff --git a/src/static/img/ent/nodetree_ready.png b/src/static/img/ent/nodetree_ready.png new file mode 100644 index 0000000..8f61047 Binary files /dev/null and b/src/static/img/ent/nodetree_ready.png differ diff --git a/src/static/img/ent/screenshot_website_201129.png~ b/src/static/img/ent/screenshot_website_201129.png~ deleted file mode 100644 index 874d982..0000000 Binary files a/src/static/img/ent/screenshot_website_201129.png~ and /dev/null differ diff --git a/src/static/img/ent/setters+getters_dollars.png b/src/static/img/ent/setters+getters_dollars.png new file mode 100644 index 0000000..fa3143f Binary files /dev/null and b/src/static/img/ent/setters+getters_dollars.png differ diff --git a/src/static/img/ent/setup_base.png b/src/static/img/ent/setup_base.png new file mode 100644 index 0000000..2d93cee Binary files /dev/null and b/src/static/img/ent/setup_base.png differ diff --git a/src/static/img/ent/setup_player.png b/src/static/img/ent/setup_player.png new file mode 100644 index 0000000..62f419d Binary files /dev/null and b/src/static/img/ent/setup_player.png differ diff --git a/src/static/img/ent/skill_dir.png b/src/static/img/ent/skill_dir.png new file mode 100644 index 0000000..dc2895a Binary files /dev/null and b/src/static/img/ent/skill_dir.png differ diff --git a/src/static/img/ent/skill_json.png b/src/static/img/ent/skill_json.png new file mode 100644 index 0000000..fdb8b18 Binary files /dev/null and b/src/static/img/ent/skill_json.png differ diff --git a/src/static/img/ent/skill_json_cond.png b/src/static/img/ent/skill_json_cond.png new file mode 100644 index 0000000..d425aea Binary files /dev/null and b/src/static/img/ent/skill_json_cond.png differ diff --git a/src/static/img/ent/skill_python.png b/src/static/img/ent/skill_python.png new file mode 100644 index 0000000..e4730d5 Binary files /dev/null and b/src/static/img/ent/skill_python.png differ diff --git a/src/static/img/ent/skillscene_cipher.png b/src/static/img/ent/skillscene_cipher.png new file mode 100644 index 0000000..09a4c0b Binary files /dev/null and b/src/static/img/ent/skillscene_cipher.png differ diff --git a/src/static/img/ent/skillscene_resproperty.png b/src/static/img/ent/skillscene_resproperty.png new file mode 100644 index 0000000..48001db Binary files /dev/null and b/src/static/img/ent/skillscene_resproperty.png differ diff --git a/src/static/img/ent/skillscene_xed.png b/src/static/img/ent/skillscene_xed.png new file mode 100644 index 0000000..a51f2a6 Binary files /dev/null and b/src/static/img/ent/skillscene_xed.png differ diff --git a/src/static/img/ent/skillsceneshot.png b/src/static/img/ent/skillsceneshot.png new file mode 100644 index 0000000..e56a95d Binary files /dev/null and b/src/static/img/ent/skillsceneshot.png differ diff --git a/src/static/img/ent/skillscenetree.png b/src/static/img/ent/skillscenetree.png new file mode 100644 index 0000000..049f744 Binary files /dev/null and b/src/static/img/ent/skillscenetree.png differ diff --git a/src/static/img/ext/stealthevote_1.jpeg b/src/static/img/ext/stealthevote_1.jpeg new file mode 100644 index 0000000..dfc682e Binary files /dev/null and b/src/static/img/ext/stealthevote_1.jpeg differ diff --git a/src/static/img/ext/stealthevote_10.jpeg b/src/static/img/ext/stealthevote_10.jpeg new file mode 100644 index 0000000..5c08813 Binary files /dev/null and b/src/static/img/ext/stealthevote_10.jpeg differ diff --git a/src/static/img/ext/stealthevote_11.png b/src/static/img/ext/stealthevote_11.png new file mode 100644 index 0000000..60ea5cb Binary files /dev/null and b/src/static/img/ext/stealthevote_11.png differ diff --git a/src/static/img/ext/stealthevote_12.png b/src/static/img/ext/stealthevote_12.png new file mode 100644 index 0000000..232e2e2 Binary files /dev/null and b/src/static/img/ext/stealthevote_12.png differ diff --git a/src/static/img/ext/stealthevote_16.jpeg b/src/static/img/ext/stealthevote_16.jpeg new file mode 100644 index 0000000..8186ee2 Binary files /dev/null and b/src/static/img/ext/stealthevote_16.jpeg differ diff --git a/src/static/img/ext/stealthevote_17.jpg b/src/static/img/ext/stealthevote_17.jpg new file mode 100644 index 0000000..4c476b3 Binary files /dev/null and b/src/static/img/ext/stealthevote_17.jpg differ diff --git a/src/static/img/ext/stealthevote_18.png b/src/static/img/ext/stealthevote_18.png new file mode 100644 index 0000000..426cd5b Binary files /dev/null and b/src/static/img/ext/stealthevote_18.png differ diff --git a/src/static/img/ext/stealthevote_2.jpeg b/src/static/img/ext/stealthevote_2.jpeg new file mode 100644 index 0000000..b7d67d6 Binary files /dev/null and b/src/static/img/ext/stealthevote_2.jpeg differ diff --git a/src/static/img/ext/stealthevote_20.png b/src/static/img/ext/stealthevote_20.png new file mode 100644 index 0000000..76dca03 Binary files /dev/null and b/src/static/img/ext/stealthevote_20.png differ diff --git a/src/static/img/ext/stealthevote_3.jpeg b/src/static/img/ext/stealthevote_3.jpeg new file mode 100644 index 0000000..282ab8e Binary files /dev/null and b/src/static/img/ext/stealthevote_3.jpeg differ diff --git a/src/static/img/ext/stealthevote_4.jpeg b/src/static/img/ext/stealthevote_4.jpeg new file mode 100644 index 0000000..5c6fad1 Binary files /dev/null and b/src/static/img/ext/stealthevote_4.jpeg differ diff --git a/src/static/img/ext/stealthevote_7.png b/src/static/img/ext/stealthevote_7.png new file mode 100644 index 0000000..b8db0bb Binary files /dev/null and b/src/static/img/ext/stealthevote_7.png differ diff --git a/src/static/img/ext/stealthevote_8.png b/src/static/img/ext/stealthevote_8.png new file mode 100644 index 0000000..f2682b1 Binary files /dev/null and b/src/static/img/ext/stealthevote_8.png differ diff --git a/src/static/img/ext/stealthevote_9.png b/src/static/img/ext/stealthevote_9.png new file mode 100644 index 0000000..01e2670 Binary files /dev/null and b/src/static/img/ext/stealthevote_9.png differ diff --git a/src/static/img/fr/badge/5YmOyWY.png b/src/static/img/fr/badge/5YmOyWY.png new file mode 100644 index 0000000..15c4a87 Binary files /dev/null and b/src/static/img/fr/badge/5YmOyWY.png differ diff --git a/src/static/img/fr/badge/IVuYFzF.png b/src/static/img/fr/badge/IVuYFzF.png new file mode 100644 index 0000000..2e084d2 Binary files /dev/null and b/src/static/img/fr/badge/IVuYFzF.png differ diff --git a/src/static/img/fr/badge/MKnMNpc.png b/src/static/img/fr/badge/MKnMNpc.png new file mode 100644 index 0000000..8986951 Binary files /dev/null and b/src/static/img/fr/badge/MKnMNpc.png differ diff --git a/src/static/img/fr/badge/QV5kPQS.png b/src/static/img/fr/badge/QV5kPQS.png new file mode 100644 index 0000000..efc5fdd Binary files /dev/null and b/src/static/img/fr/badge/QV5kPQS.png differ diff --git a/src/static/img/fr/badge/UOpcsdF.png b/src/static/img/fr/badge/UOpcsdF.png new file mode 100644 index 0000000..455ec88 Binary files /dev/null and b/src/static/img/fr/badge/UOpcsdF.png differ diff --git a/src/static/img/fr/badge/aSqaIRB.png b/src/static/img/fr/badge/aSqaIRB.png new file mode 100644 index 0000000..605b9fe Binary files /dev/null and b/src/static/img/fr/badge/aSqaIRB.png differ diff --git a/src/static/img/fr/badge/cEri3un.png b/src/static/img/fr/badge/cEri3un.png new file mode 100644 index 0000000..1751d2b Binary files /dev/null and b/src/static/img/fr/badge/cEri3un.png differ diff --git a/src/static/img/fr/badge/cJOH7DA.png b/src/static/img/fr/badge/cJOH7DA.png new file mode 100644 index 0000000..e92c841 Binary files /dev/null and b/src/static/img/fr/badge/cJOH7DA.png differ diff --git a/src/static/img/fr/badge/g4CvViZ.png b/src/static/img/fr/badge/g4CvViZ.png new file mode 100644 index 0000000..ef471e9 Binary files /dev/null and b/src/static/img/fr/badge/g4CvViZ.png differ diff --git a/src/static/img/fr/badge/vnZ0ULt.png b/src/static/img/fr/badge/vnZ0ULt.png new file mode 100644 index 0000000..c12dc79 Binary files /dev/null and b/src/static/img/fr/badge/vnZ0ULt.png differ diff --git a/src/static/img/fr/bu/36306.png b/src/static/img/fr/bu/36306.png new file mode 100644 index 0000000..942cf8a Binary files /dev/null and b/src/static/img/fr/bu/36306.png differ diff --git a/src/views/contact.tpl b/src/views/contact.tpl index c45fc55..e6a7c43 100644 --- a/src/views/contact.tpl +++ b/src/views/contact.tpl @@ -1,13 +1,22 @@ % rebase('frame.tpl')
-

chimchooree

-

contact - general + business

- Reach me through Twitter as @lilchimchooree or Discord as chimchooree#7250.
+

+

chimchooree


+

hello


+ I'm just a US-based indiedev who's learning to program through game development + web development. My hobbies include enjoy studying Japanese, translating isekai manga for others, and playing 90s/00s CRPGs + JRPGs.
+
+ To practice different languages, I bounce among a few solo projects in Godot Engine, Java, and Python. My main project is a widely scoped ARPG dungeon crawler called Blessfrey, which I hope to release a demo for soon.
+
+ Feel free to say hello, especially if you're interested in gamedev, too.
+
+

general + business contact


+
-

a few personal pages

- +



diff --git a/src/views/credits.tpl b/src/views/credits.tpl index 387f5f4..2cb8f4b 100644 --- a/src/views/credits.tpl +++ b/src/views/credits.tpl @@ -1,70 +1,160 @@ % rebase('frame.tpl') +

Credits



game + art by chimchooree
(all assets are placeholder)

-game engine: godot engine, by Juan Linietsky, Ariel Manzur and contributors
+

engine


+game engine: Godot Engine
+Juan Linietsky, Ariel Manzur and contributors
+license: MIT License
+text:
+"Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
+Copyright (c) 2014-2021 Godot Engine contributors.

+Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.
+
+-- Godot Engine <https://godotengine.org>"
+
+
+

third parties used by Godot Engine


+I may or may not use these.
+
+FreeType
+license: FreeType License
+text:
+"Portions of this software are copyright © The FreeType Project (www.freetype.org). All rights reserved."
+
+ENet
+Lee Salzman
+license
+text:
+"Copyright (c) 2002-2020 Lee Salzman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+
+MBedTLS
+The Mbed TLS Contributors
+license: Apache License, Version 2.0
+text:
+"Copyright The Mbed TLS Contributors
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
+

+

audio


background music: "straight"
Benjamin "Bensound" Tissot
-https://www.bensound.com/royalty-free-music/track/straight
-license: Creative Commons License
+https://www.bensound.com/royalty-free-music/track/straight
+license: Free License With Attribution
+text: "Royalty Free Music from Bensound"

background music: "energy"
Benjamin "Bensound" Tissot
https://www.bensound.com/royalty-free-music/track/energy
-license: Creative Commons License
+license: Free License With Attribution
+text: "Royalty Free Music from Bensound"

background music: "save"
LokiF
https://opengameart.org/content/gui-sound-effects
-license: Public Domain CC0
+license: Public Domain CC0

door sound: "Abandoned Villa- Thailand! Door Knocker & Door Knocking Sound Effects"
-freetousesounds https://freetousesounds.bandcamp.com/album/abandoned-villa-thailand-door-knocker-door-knocking-sound-effects
-license: Attribution 3.0 Unported (CC BY 3.0)
+freetousesounds
+https://freetousesounds.bandcamp.com/album/abandoned-villa-thailand-door-knocker-door-knocking-sound-effects
+license: Attribution 3.0 Unported (CC BY 3.0)

click sound: "Click 1" from the UI SFX set
Kenney Vleugels
https://www.kenney.nl/assets/ui-audio
-license: Public Domain CC0
+license: Public Domain CC0 1.0 Universal

wrong sound: "Wrong 02"
+NoiseForFun.com
https://www.noiseforfun.com/2012-sound-effects/wrong-02/
-license: CC-BY-ND 3.0 Attribution license
+license: CC-BY-ND 3.0 Attribution license

skill failure sound: "Negative" from the GUI Sound Effects set
LokiF
https://opengameart.org/content/gui-sound-effects
-license: Public Domain CC0
+license: Public Domain CC0

appraise sound: "Shimmer Glimmer Magic"
The Berklee College of Music
submitted to Open Game Art by qubodup
https://opengameart.org/content/shimmer-glitter-magic
-license: CC-BY 3.0
+license: CC-BY 3.0

summon sound: "Elemental Spell"
Iwan "qubodup" Gabovitch
https://opengameart.org/content/elemental-spell
-license: CC Attribution-ShareAlike 3.0 Unported
-Copyright 2012 Iwan 'qubodup' Gabovitch http://qubodup.net qubodup@gmail.com | License: CC Attribution-ShareAlike 3.0 Unported http://creativecommons.org/licenses/by-sa/3.0/
+license: CC Attribution-ShareAlike 3.0 Unported
+text: "Copyright 2012 Iwan 'qubodup' Gabovitch http://qubodup.net qubodupOBFUSCATION@gmail.com | License: CC Attribution-ShareAlike 3.0 Unported http://creativecommons.org/licenses/by-sa/3.0/"

bingo win sound: "Positive"
Lokif
https://opengameart.org/content/gui-sound-effects
-license: Public Domain CC0
-
+license: Public Domain CC0
+

+

fonts


font: JFドットjiskan16 (JF Dot Jiskan16)
Sony Corp
http://jikasei.me/font/jf-dotfont/
-license: Public Domain, stored in art/Fonts/Documentation/JF Dot Jiskan16/readme.txt
+license: Public Domain, stored in res/fonts/Documentation/JF Dot Jiskan16/readme.txt
+text:
+"8x16 / 8x16rk / 12x24 / 12x24rk
+-------------------------------
+
+Copyright 1989 by Sony Corp.
+
+Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +provided that the above copyright notices appear in all copies and +that both those copyright notices and this permission notice appear +in supporting documentation, and that the name of Sony Corp. +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. Sony +Corp. makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty.
+
+SONY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL SONY BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE."

-font: pixel joy
-chimchooree
-https://fontstruct.com/fontstructions/show/1596262/pixel-joy
-license: Public Domain
+font: pixel joy
+chimchooree
+https://fontstruct.com/fontstructions/show/1596262/pixel-joy
+license: Public Domain


- +
diff --git a/src/views/diary-boxes.tpl b/src/views/diary-boxes.tpl index 1d1666e..4f5bd9b 100644 --- a/src/views/diary-boxes.tpl +++ b/src/views/diary-boxes.tpl @@ -2,7 +2,11 @@ diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..194d376 --- /dev/null +++ b/test.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +python3 -m venv venv/ +source venv/bin/activate +cd src/ +python3 index.py