<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Queen Of Squiggles&#x27;s Blog</title>
    <link href="https://queenofsquiggles.codeberg.page/atom.xml" rel="self"/>
    <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page"/>
    <updated>2026-06-04T14:57:15+0000</updated>
    <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page</id>

    
    
    
    
        
        <entry>
            <title>Voice Over Demo</title>
            <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;voice&#x2F;"/>
            <updated>2026-05-16T00:00:00+0000</updated>
            <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;voice&#x2F;</id>
            <content type="html">&amp;lt;p&amp;gt;Unless otherwise specified, all voice work is done by myself with little to no editing. This is specifically for the goal of presenting my voice skills rather than my editing or composition skills.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;!-- # Monologues (historical speeches) --&amp;gt;
&amp;lt;!-- ## Elie Wiesel&amp;#x27;s &amp;quot;The Perils of Indifference&amp;quot; --&amp;gt;
&amp;lt;!-- TBD --&amp;gt;
&amp;lt;!-- ## Eugene Debbs&amp;#x27;s &amp;quot;Statement To The Court&amp;quot; --&amp;gt;
&amp;lt;!-- TBD --&amp;gt;
&amp;lt;h1 id=&amp;quot;Public_auditions&amp;quot;&amp;gt;Public auditions&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;Wynncraft_Voices_Of_Wynn_Mod,_Recruiter_Riva&amp;quot;&amp;gt;Wynncraft Voices Of Wynn Mod, Recruiter Riva&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.castingcall.club&amp;#x2F;submissions&amp;#x2F;5460797&amp;quot;&amp;gt;Wynncraft, Recruiter Riva Role&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;wynncraft-voices-of-wynn-role-recruiter-riva.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Character notes:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Recruiter Riva helps recruit soldiers for the Fruma military, is more strict and impatient&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;In AABBCC&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Stop lingering around. The sooner you get this challenge done, the sooner I get to have lunch. {impatient, blunt}&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Took you a while to find your way here, did you get lost or something? {mocking, impatient}&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;You’re lucky Effal is a pushover, if you were in my group, you’d be out of here without a second thought. {dismissive}&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;FNIA_RX,_RX_Foxy&amp;quot;&amp;gt;FNIA RX, RX Foxy&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.castingcall.club&amp;#x2F;submissions&amp;#x2F;5460861&amp;quot;&amp;gt;FNIA RX, RX Foxy Role&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;ffnia-rx-wave1-role-rx-foxy.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Character Notes:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;The first of many that’s not part of The Main 3, is a Confident Tomboy but can get easily aroused and is a bit more aggressive than the others&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;In AABBCC&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Damn it! How did you manage to dodge me? You’re really fast…&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I love tough guys like you… you’re totally my type~&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;You and I are going to have a very hot and passionate moment once I manage to catch you~&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Social_Media_Posts&amp;quot;&amp;gt;Social Media Posts&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;@ana,_“AI_Datacenters”&amp;quot;&amp;gt;@ana, “AI Datacenters”&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;starlite.rodeo&amp;#x2F;@ana&amp;#x2F;116576462064794200&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;ai_datacenters.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Why do they call them ‘AI Datacenters’ instead of…. Slopping Malls?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@Transbian_Arsonists,_“Any_sexuality_is_ok…”&amp;quot;&amp;gt;@Transbian_Arsonists, “Any sexuality is ok…”&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;catwithaclari.net&amp;#x2F;notes&amp;#x2F;am5g3rzkduse0119&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;any_sexuality_is_ok.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;any sexuality is okay as long as you’re attracted to me specifially&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@typeswitch,_“Pretending_at_mutability”&amp;quot;&amp;gt;@typeswitch, “Pretending at mutability”&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;gamedev.lgbt&amp;#x2F;@typeswitch&amp;#x2F;116569395887658476&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;pretending_at_mutability.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;everyone is pretending at mutability, even the hardware.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;Smooth_Lesbian_Rat&amp;quot;&amp;gt;Smooth Lesbian Rat&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;private vo request&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;smooth_lesbian_rat.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;p&amp;gt;In AA&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Smooth lesbian rat sailing for this one&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@vvilliam,_silly_joke&amp;quot;&amp;gt;@vvilliam, silly joke&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;mk.absturztau.be&amp;#x2F;notes&amp;#x2F;alxum34g7nm8015l&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;williams_joke.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;A woman goes to a bar and starts talking to the first guy she finds.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;She says “do you prefer stew or salmon?”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;He is immediately hooked and asks if she wants a drink.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The bartender found it strange, but he’d seen stranger things. The next day, she comes to the bar again and says the same thing to a random girl at the bar.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;“Do you prefer stew or salmon?”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;And just like last time, the other person is instantly charmed.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This repeats for a couple more days, the bartender getting more and more confused each time.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;After about a week of this going on, finally the girl meets her match. Her love interest rejects the attempt. The bartender sees this and approaches, meaning to ask what that was about.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;“Everyone she’s asked this to, they’ve all fallen head over heels for her! Why did you refuse? What’s the logic??”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;“I don’t know what people see in those types… she’s so soup-or-fish-ial”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@iamhand,_Godot_Radio_Advert&amp;quot;&amp;gt;@iamhand, Godot Radio Advert&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;mastodon.gamedev.place&amp;#x2F;@iamhand&amp;#x2F;116573547949508991&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;godot_radio_ad.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Dialog between two characters&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Ugh!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;What?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The commercial game engine I’m using just updated. They made everything worse and they’re charging me more for it!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Why don’t you just Godot?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Guh-what?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Godot is this totally cool game engine made together by a community of game developers, and it’s totally free!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Wait, did you say free?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Mmhmm! And open source!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Wow! I think I’ll check it out!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@LillyHerself,_As_far_back_as_I_can_remember…&amp;quot;&amp;gt;@LillyHerself, As far back as I can remember…&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;mastodon.social&amp;#x2F;@LillyHerself&amp;#x2F;116496847788991490&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;as_far_back_as_i_can_remember.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;As far back as I can remember, I always wanted to be a medium-large account on the smallest site of the least popular form of social media&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@pho4cexa,_Evil_truth_tables&amp;quot;&amp;gt;@pho4cexa, Evil truth tables&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;mastodon.gamedev.place&amp;#x2F;@iamhand&amp;#x2F;116573547949508991&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;evil_truth_tables.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;you’ve heard of truth tables, now get ready for lie algebra&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;@0xDokki,_Touching_grass&amp;quot;&amp;gt;@0xDokki, Touching grass&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;lgbtqia.space&amp;#x2F;@0xDokki&amp;#x2F;116578611730167717&amp;quot;&amp;gt;post&amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;audio controls&amp;gt;
    &amp;lt;source src=&amp;quot;&amp;amp;#x2F;vo_demo&amp;amp;#x2F;kyaa_touching_grass.mp3&amp;quot; type=&amp;quot;audio&amp;#x2F;mpeg&amp;quot;&amp;gt;
    Ooops. Your browser doesn&amp;#x27;t support audio controls!
  &amp;lt;&amp;#x2F;audio&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;maybe the grass touchers were on to something, not sitting at my pc all the time anymore has done wonders for my mental health and productivity &amp;lt;img src=&amp;quot;https:&amp;#x2F;&amp;#x2F;transfem.social&amp;#x2F;proxy&amp;#x2F;image.webp?url=https%3A%2F%2Fcdn2.miau.pub%2Fcustom_emojis%2Fimages%2F000%2F318%2F865%2Foriginal%2Fneobot_floof.png&amp;amp;amp;emoji=1&amp;quot; alt=&amp;quot;:neobot_floof:&amp;quot; title=&amp;quot;:neobot_floof:&amp;quot; &amp;#x2F;&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
</content>
        </entry>
        
    
        
        <entry>
            <title>Portfolio</title>
            <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;about&#x2F;"/>
            <updated>2024-01-15T00:00:00+0000</updated>
            <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;about&#x2F;</id>
            <content type="html">&amp;lt;h1 id=&amp;quot;Freelancing_Work&amp;quot;&amp;gt;Freelancing Work&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;Godot_On-Screen_Controls_Plugin&amp;quot;&amp;gt;Godot On-Screen Controls Plugin&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;For this project a client hired me to develop modular on-screen controls for a Godot game they were developing that would need mobile support. I leveraged Godot’s built-in Event system and Input Actions to allow the on-screen controls to send the same events that a keyboard and mouse would while on desktop to ease the integration process for the client.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The client offered me this quote:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;“I sought a commission for some UI work from QueenOfSquiggles. She completed the task very quickly, with well-written and highly useable code. She will become a go-to for me when I need help completing my games and apps.”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Notable_Projects&amp;quot;&amp;gt;Notable Projects&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;Squiggles_Stupid_Build_System_(SSBS)&amp;quot;&amp;gt;Squiggles Stupid Build System (SSBS)&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;github.com&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;squiggles-stupid-build-system&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;ssbs_config.png&amp;quot; alt=&amp;quot;Image of an SSBS configuration file&amp;quot;
                title=&amp;quot;Image of an SSBS configuration file&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;An opinionated build system written in C++17 I wrote to learn some newer language features, and to help me with compiling small projects.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;My development of SSBS demonstrates ability with modern C++ and software construction.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Bevy_Smooth_Pixel_Camera_(Fork_of_original)&amp;quot;&amp;gt;Bevy Smooth Pixel Camera (Fork of original)&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;codeberg.org&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;bevy_smooth_pixel_camera&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;bevy_pixel.png&amp;quot; alt=&amp;quot;A scene of a pixelated character in a vibrant dungeon scene.&amp;quot;
                title=&amp;quot;A scene of a pixelated character in a vibrant dungeon scene.&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;Bevy Smooth Pixel Camera is a plugin that enables a modern approach to pixel graphics in games. Specifically it rejects the retro purity of restricted pixel density and opts for an approach that allows smoother blending and 3D rendering despite using strict 2D rendering&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;In order to utilize the plugin in a more recent version of Bevy, I opted to fork the project and perform requisite updates to the codebase. I believe the commit history is demonstrative of my skills for understanding legacy code and upgrading to a modern system.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;IBM_Full_Stack_Developer_Certification_-_Capstone_Project&amp;quot;&amp;gt;IBM Full Stack Developer Certification - Capstone Project&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;github.com&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;agfzb-CloudAppDevelopment_Capstone&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;fullstack.jpg&amp;quot; alt=&amp;quot;A goofy drawing that has the text, &amp;amp;amp;#x27;Fullstack is my passion&amp;amp;amp;#x27;. A spoof on the &amp;amp;amp;#x27;graphic design is my passion&amp;amp;amp;#x27; meme&amp;quot;
                title=&amp;quot;A goofy drawing that has the text, &amp;amp;#x27;Fullstack is my passion&amp;amp;#x27;. A spoof on the &amp;amp;#x27;graphic design is my passion&amp;amp;#x27; meme&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A website based in Django for handling a variety of car dealerships and their inventories, allowing administrators to update catalogs and users to browse the selection. This full stack web applcation was a composition of all skills developed over the course of the certification&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The capstone web app is no longer deployed due to maintenance costs. The capstone, and the associated certification, attest to my abilities in a Fullstack environment.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Finite_State_Machines_versus_Behaviour_Trees&amp;quot;&amp;gt;Finite State Machines versus Behaviour Trees&amp;lt;&amp;#x2F;h2&amp;gt;



&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;queenofsquiggles.codeberg.page&amp;amp;#x2F;guides&amp;amp;#x2F;fsm-vs-bt&amp;amp;#x2F;&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;banner-notext.jpg&amp;quot; alt=&amp;quot;A banner image blending a representaton of behaviour trees and a representation of finite state machines. &amp;quot;
                title=&amp;quot;A banner image blending a representaton of behaviour trees and a representation of finite state machines. &amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A technical guide explaining the two approaches to modelling a game character’s AI and explanations for when one would choose to utilize one over the other.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I believe that this article demonstrates not only my ability to break down technical concepts into simpler terms and explain for the target audience of beginner game developers the available solutions to a common problem and how best to determine the best option for their individual use case.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Sqree_(Squiggles_Tree)&amp;quot;&amp;gt;Sqree (Squiggles Tree)&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;codeberg.org&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;sqree&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;sqree.png&amp;quot; alt=&amp;quot;An example Sqree tree file with nested data and comments&amp;quot;
                title=&amp;quot;An example Sqree tree file with nested data and comments&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A custom file format inspired by my desire to easily write tree structures in a text file with intuitive data tagging. The format was inspired by XML and the obtuseness of it, and accidentally ended up very similar to another implementation, ‘KDL’&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Sqree demonstrates my ability to solve text parsing issues and developing tooling for common issues in my own workflows.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Squiggles_Core_4X&amp;quot;&amp;gt;Squiggles Core 4X&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;github.com&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;Squiggles-Core-4X&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;sqore_cs.jpg&amp;quot; alt=&amp;quot;A dumb godot logo with the text, &amp;amp;amp;#x27;Sqore C Sharp&amp;amp;amp;#x27;&amp;quot;
                title=&amp;quot;A dumb godot logo with the text, &amp;amp;#x27;Sqore C Sharp&amp;amp;#x27;&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A core library of common utyilities for making a game in Godot 4 using C#. This library is highly opinionated and contains a range of accessibility features to encourage developers to include at least some of the easier to implement features.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Squiggles Core 4X is my first iteration of developing a robust framework of tooling for the purposes of game development. It attests to my passion for crafting tools that enable creators to create more without needing to worry about the little details, but still moving out of the way when they do.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.github.io&amp;#x2F;Squiggles-Core-4X&amp;#x2F;&amp;quot;&amp;gt;Additional Documentation Site for Squiggles Core 4X&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Sqore&amp;quot;&amp;gt;Sqore&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;github.com&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;Sqore&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;sqore_rust.jpg&amp;quot; alt=&amp;quot;A dumb godot logo with the text, &amp;amp;amp;#x27;Sqore Rust&amp;amp;amp;#x27;&amp;quot;
                title=&amp;quot;A dumb godot logo with the text, &amp;amp;#x27;Sqore Rust&amp;amp;#x27;&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A recreation of ‘Squiggles Core 4X’ utilizing Godot’s FFI capabilities to write library code in Rust which enabled easier use of GDScript for consumers of the library.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Sqore demonstrates adaptability and reprioritization as I discovered how most users prefer to use GDScript than C#. This reconstruction also enabled performance optimizations and required structuring a deployment strategy to enable easier installation for end-users.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Where_The_Dead_Lie&amp;quot;&amp;gt;Where The Dead Lie&amp;lt;&amp;#x2F;h2&amp;gt;

&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;github.com&amp;amp;#x2F;QueenOfSquiggles&amp;amp;#x2F;gogodot3-horror-game&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;ascension_header.png&amp;quot; alt=&amp;quot;A Playstation style render of a truck in the forest with running lights illuminating the surroudning area.&amp;quot;
                title=&amp;quot;A Playstation style render of a truck in the forest with running lights illuminating the surroudning area.&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A horror game made for a game jam which has reached nearly 2000 lifetime downloads and has been a major touchstone in my artistic profile.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Where The Dead Lie is a game made during a game jam, a type of hackathon where I was challenged to construct a game from start to finish while adhering to certain criteria. This project clearly demonstrates my ability to work with a clearly defined vision even under pressure of a deadline.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;Shell_Fur_Breakdown&amp;quot;&amp;gt;Shell Fur Breakdown&amp;lt;&amp;#x2F;h2&amp;gt;



&amp;lt;div style=&amp;quot;display: flex; flex-direction: column; width: 100%;&amp;quot;&amp;gt;
    &amp;lt;hr &amp;#x2F;&amp;gt;
    &amp;lt;figure class=&amp;quot;image-link-figure&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;queenofsquiggles.codeberg.page&amp;amp;#x2F;tech&amp;amp;#x2F;shell-fur-breakdown&amp;amp;#x2F;&amp;quot; class=&amp;quot;image-link-element&amp;quot;&amp;gt;
            &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;about&amp;#x2F;demo_physics.gif&amp;quot; alt=&amp;quot;A short GIF demonstrating how a user can define how stiff the strands of fur are for the generated fur system.&amp;quot;
                title=&amp;quot;A short GIF demonstrating how a user can define how stiff the strands of fur are for the generated fur system.&amp;quot; &amp;#x2F;&amp;gt;
        &amp;lt;&amp;#x2F;a&amp;gt;
        &amp;lt;figcaption class=&amp;quot;image-link-element&amp;quot;&amp;gt;A narrative focused breakdown of my journey developing a plugin for Godot that allowed for generating Shell Fur which is a fairly simple implementation for rendering fur. The plugin boasts partial physics reactivity, customizations for strand stiffness, textures, and full PBR material support.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The breakdown of Shell Fur Rendering takes a more narrative approach to focus on the journey of creation rather than the specific implementation. I express the struggles I faced in a somewhat lighthearted manner while reinforncing the idea that the entire art of creation is a struggle throughout.&amp;lt;&amp;#x2F;figcaption&amp;gt;
    &amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h2 id=&amp;quot;This_blog&amp;quot;&amp;gt;This blog&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;This blog is an evolving beast that I have maintained in one form or another. It is statically generated from source code (see footer). The resulting website is robust, responsive, and strictly uses HTML and CSS, no JavaScript required! This is done to minimize load times and maximize security.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Technology_Experience&amp;quot;&amp;gt;Technology Experience&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;Software&amp;quot;&amp;gt;Software&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Software&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th&amp;gt;Type&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;&amp;lt;&amp;#x2F;thead&amp;gt;&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Git&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;All things version control&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Godot&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Hobby development&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Unity&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Hobby Development&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Blender&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;3D Game art&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Krita&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;2D Game art&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Inkscape&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Vector Art (primarily icons)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Office Suite&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Word processing, Sheets, Presentation, etc…&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;&amp;#x2F;tbody&amp;gt;&amp;lt;&amp;#x2F;table&amp;gt;
&amp;lt;h2 id=&amp;quot;Languages&amp;quot;&amp;gt;Languages&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Web&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th&amp;gt;Scripting&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th&amp;gt;System&amp;#x2F;Native&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;&amp;lt;&amp;#x2F;thead&amp;gt;&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;C#&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;C#&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;C#&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Python&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Python&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Rust&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;HTML&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;GDScript&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Java&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;CSS&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;lua&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;C++&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;JavaScript&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;Bash&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TypeScript&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Shopify&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;&amp;#x2F;tbody&amp;gt;&amp;lt;&amp;#x2F;table&amp;gt;
&amp;lt;h2 id=&amp;quot;Open_Source_Contributions&amp;quot;&amp;gt;Open Source Contributions&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;h3 id=&amp;quot;Godot_Rust&amp;quot;&amp;gt;Godot Rust&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Godot Rust is a library that allows for writing rust code that integrates with the Godot Game Engine, whether for specific game scripting or for more general purpose tools development&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Recipes Section Documentation Guides
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;godot-rust.github.io&amp;#x2F;book&amp;#x2F;recipes&amp;#x2F;custom-resources.html&amp;quot;&amp;gt;Custom Resources&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;godot-rust.github.io&amp;#x2F;book&amp;#x2F;recipes&amp;#x2F;editor-plugin&amp;#x2F;index.html&amp;quot;&amp;gt;Editor Plugins&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;godot-rust.github.io&amp;#x2F;book&amp;#x2F;recipes&amp;#x2F;engine-singleton.html&amp;quot;&amp;gt;Engine Singletons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;godot-rust.github.io&amp;#x2F;book&amp;#x2F;recipes&amp;#x2F;custom-icons.html&amp;quot;&amp;gt;Custom Icons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Note that some of these pages may have been updated since my last contribution&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Voice_Work&amp;quot;&amp;gt;Voice Work&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;My voice demo recordings get their own page &amp;lt;a href=&amp;quot;&amp;#x2F;voice&amp;quot;&amp;gt;here&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Hobbies&amp;quot;&amp;gt;Hobbies&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I enjoy a variety of things including&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Cooking&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;At home, improvised film review&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Spending time with my family&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Hiking&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Camping&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Playing games myself&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
</content>
        </entry>
        
    
    
    
        
        
            
            <entry>
                <title>Godot SDF Gen</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tools&#x2F;godot-sdf-gen&#x2F;"/>
                <updated>2022-05-20T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tools&#x2F;godot-sdf-gen&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Tool_Overview&amp;quot;&amp;gt;Tool Overview&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Godot SDF Gen is a small tool I made for myself and others to easily generate “Signed Distance Field” textures, which can be used to create a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;shaderfun.com&amp;#x2F;2018&amp;#x2F;07&amp;#x2F;01&amp;#x2F;signed-distance-fields-part-7-some-simple-effects&amp;#x2F;&amp;quot;&amp;gt;variety of fun effects&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Purposes&amp;quot;&amp;gt;Purposes&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I wanted to create a small, useful tool with the &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;godotengine.org&amp;#x2F;&amp;quot;&amp;gt;Godot Game Engine&amp;lt;&amp;#x2F;a&amp;gt;. Although largely marketed as a &amp;lt;em&amp;gt;game&amp;lt;&amp;#x2F;em&amp;gt; engine, Godot does actually provide a plethera of features beneficial to desktop and mobile tool applications. And that very distinction that the software application can be made in Godot and exported to desktop and mobile with minimal extra effort was very attractive. Given this project, a mobile version didn’t really make sense.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;UI&amp;quot;&amp;gt;UI&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Godot had recently revamped their Theme designing system, which allowed for the user interface to be customized in many ways. I would say that I over did it on this project. I have a much stronger sense for code and narrative than I do for art. Colour blindness may have affected this.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Systems&amp;quot;&amp;gt;Systems&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Originally, I created it as a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Minimum_viable_product&amp;quot;&amp;gt;Minimal Viable Product (MVP)&amp;lt;&amp;#x2F;a&amp;gt;. I used the built-in Godot UI systems and the scripting language, GDScript to manually read the pixels of an image in and process the kernel to determine the SDF value. After getting it to work, I ported the logic to a shader so it could utilize the GPU’s processing power. Unfortunately, setting the kernel size too high actually crashed my computer for reasons I’m still unsure. I believe it had something to do with my desktop environment, but as I said, I’m not sure. I added in a “safety lock” for keeping the kernel within a certain range. I also added a feature where you could have the program play a small notification sound once processing was completed. This was helpful for processing larger files since I was working mainly with a slower laptop at the time.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Reception&amp;quot;&amp;gt;Reception&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;The tool went largely unnoticed by the public. It is available freely, but due to the niche feature, it is mostly just helpful for me and my purposes. Which is still a valuable way to spend my time.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Screenshots&amp;quot;&amp;gt;Screenshots&amp;lt;&amp;#x2F;h1&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tools&amp;#x2F;godot-sdf-gen&amp;#x2F;tool_preview_1.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;tool_preview_1.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tools&amp;#x2F;godot-sdf-gen&amp;#x2F;tool_preview_2.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;tool_preview_2.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tools&amp;#x2F;godot-sdf-gen&amp;#x2F;tool_preview_3.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;tool_preview_3.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h1 id=&amp;quot;Widget&amp;quot;&amp;gt;Widget&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;div class=&amp;quot;container max-w-md&amp;quot;&amp;gt;
    &amp;lt;iframe src=&amp;quot;https:&amp;#x2F;&amp;#x2F;itch.io&amp;#x2F;embed&amp;#x2F;1538319?dark=true&amp;quot; width=&amp;quot;45%&amp;quot; frameborder=&amp;quot;0&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;queenofsquiggles.itch.io&amp;amp;#x2F;godot-sdf-gen&amp;quot;&amp;gt;
            Godot SDF Gen by QueenOfSquiggles
        &amp;lt;&amp;#x2F;a&amp;gt;
    &amp;lt;&amp;#x2F;iframe&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
    
        
        
            
            <entry>
                <title>Chuffelabs</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;chuffelabs&#x2F;"/>
                <updated>2026-03-16T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;chuffelabs&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;ChuffeLabs&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#ChuffeLabs&amp;quot; aria-label=&amp;quot;Anchor link for: ChuffeLabs&amp;quot;&amp;gt;ChuffeLabs&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Chuffelabs is a goofy little horror game that was made in 10 days for a jam called “B1T Jam 4” and was largely inspired by classic Resident Evil.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Press_Kit&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Press_Kit&amp;quot; aria-label=&amp;quot;Anchor link for: Press_Kit&amp;quot;&amp;gt;Press Kit&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;a href=&amp;quot;&amp;#x2F;press&amp;#x2F;chuffelabs_presskit.zip&amp;quot;&amp;gt;Download Press Kit zip archive&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Press Kit includes detailed descriptions of the game as well as various assets that could be useful to any form of press (yes, even streamers and YouTubers). If you are a fellow indie developer, please &amp;lt;a href=&amp;quot;&amp;#x2F;guides&amp;#x2F;micro-indies-simple-press-kit&amp;#x2F;&amp;quot;&amp;gt;read this&amp;lt;&amp;#x2F;a&amp;gt; for more reasons on why you should start making press kits for your games.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Ascension Of The Lamb</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;ascension-of-the-lamb&#x2F;"/>
                <updated>2024-01-15T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;ascension-of-the-lamb&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Game_Overview&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Game_Overview&amp;quot; aria-label=&amp;quot;Anchor link for: Game_Overview&amp;quot;&amp;gt;Game Overview&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Ascension Of The Lamb&amp;lt;&amp;#x2F;em&amp;gt; is a “Retro PBR” game about exploring a mysterious cult bunker.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_1.png&amp;quot; alt=&amp;quot;A dark, dirty tunnel illuminated by a weak flashlight&amp;quot; title=&amp;quot;A dark, dirty tunnel illuminated by a weak flashlight&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A dark, dirty tunnel illuminated by a weak flashlight&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;!-- ![A dark, dirty tunnel illuminated by a weak flashlight](ascension_gallery_1.png) --&amp;gt;
&amp;lt;h1 id=&amp;quot;Story_of_the_Creation&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Story_of_the_Creation&amp;quot; aria-label=&amp;quot;Anchor link for: Story_of_the_Creation&amp;quot;&amp;gt;Story of the Creation&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I participated in the Go Godot Jam 3 (Website formerly https:&amp;#x2F;&amp;#x2F;gogodotjam.com&amp;#x2F;the-jam&amp;#x2F;, is now down and possibly no longer operated), which to save you a click is a game jam coordinated by the Godot community, specifically ‘Redefine Gamedev’, who is a fairly active member of the community. The jam was very exciting, with online social events planned for participants and hosted by various well known community members.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I participated in the “Classic” experience, which was the easier of the two. We had roughly 9 days to make the game and were allowed to work on a team. I did end up working alone. But I was still determined to finish this game. I was excited to get working on making horror games. And for this one, I wanted to focus on setting up a proper atmosphere. Which if the feedback I got was honest, I think I succeeded there.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The Theme for the jam was “Evolution” and I wanted to take that into an artistic interpretation of the cultists believing they would “evolve” or rather ascend into a higher form of life. The cult itself was inspired by some of the famous American cults from the 80s and 90s.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_2.png&amp;quot; alt=&amp;quot;A hallway with a rusting grate at the end and some strange material further past that&amp;quot; title=&amp;quot;A hallway with a rusting grate at the end and some strange material further past that&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A hallway with a rusting grate at the end and some strange material further past that&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Gameplay&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Gameplay&amp;quot; aria-label=&amp;quot;Anchor link for: Gameplay&amp;quot;&amp;gt;Gameplay&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;The game is essentially a walking simulator. There is a simple physics simulation system that I used to make some simple puzzles and encourage exploration. There are two main &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;tvtropes.org&amp;#x2F;pmwiki&amp;#x2F;pmwiki.php&amp;#x2F;Main&amp;#x2F;LockAndKeyPuzzle&amp;quot;&amp;gt;“lock and key”&amp;lt;&amp;#x2F;a&amp;gt; puzzles which serve to stop the player and encourage them to explore the area more.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_3.png&amp;quot; alt=&amp;quot;Another dark hallway with a lamp on the wall illuminating the brick and plaster around it&amp;quot; title=&amp;quot;Another dark hallway with a lamp on the wall illuminating the brick and plaster around it&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Another dark hallway with a lamp on the wall illuminating the brick and plaster around it&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Visual_Style_-_Retro_PBR&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Visual_Style_-_Retro_PBR&amp;quot; aria-label=&amp;quot;Anchor link for: Visual_Style_-_Retro_PBR&amp;quot;&amp;gt;Visual Style - Retro PBR&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;For this game, I wanted to create a Playstation-similar style. I personally don’t have any nostalgia for the Playstation, but I’ve seen a lot of other small indie horror games using the Playstation style to evoke a nostalgic feeling in the players. I wanted to add my own twist to it so I tweaked the parameters a bit. I kept the texture size of 128x128 and the dithering. But I swapped the standard blocky &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Bayer_filter&amp;quot;&amp;gt;bayer-matrix dithering&amp;lt;&amp;#x2F;a&amp;gt; for &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;momentsingraphics.de&amp;#x2F;BlueNoise.html&amp;quot;&amp;gt;blue noise dithering&amp;lt;&amp;#x2F;a&amp;gt;. I used two noise textures scrolling in different directions across the screen to affect the dithering which gave every surface a almost pulsating effect. Additionally, while I was going for a Retro look, I opted to use &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Physically_based_rendering&amp;quot;&amp;gt;PBR textures&amp;lt;&amp;#x2F;a&amp;gt;, specifically albedo, metallic, normal, and roughness.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I got some praise for this visual effect and I’ve taken to calling it “Retro PBR” as a general way to describe Retro-similar visuals that utlize a PBR rendering pipeline.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I did struggle a lot with &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.opengl-tutorial.org&amp;#x2F;intermediate-tutorials&amp;#x2F;tutorial-16-shadow-mapping&amp;#x2F;&amp;quot;&amp;gt;“shadow acne”&amp;lt;&amp;#x2F;a&amp;gt;. It was quite difficult because this version of Godot had some issues with the 3D rendering. It was generally considered unfit for making 3D games, but I tried anyway.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_4.png&amp;quot; alt=&amp;quot;A small bedroom can be seen with a side table, a book on that side table, a desk, and several motes of dust floating about&amp;quot; title=&amp;quot;A small bedroom can be seen with a side table, a book on that side table, a desk, and several motes of dust floating about&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A small bedroom can be seen with a side table, a book on that side table, a desk, and several motes of dust floating about&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Overall_Reception&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Overall_Reception&amp;quot; aria-label=&amp;quot;Anchor link for: Overall_Reception&amp;quot;&amp;gt;Overall Reception&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;The game did fairly well considering how it was made. Feedback ranged but there were a few common notes:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Writing is very good&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Atmosphere is well set up&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;#x2F;&amp;gt;
The game lacks action, which makes it less fun to play&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;#x2F;&amp;gt;
Some players suggested adding jumpscares to make more of a haunted house experience&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_5.png&amp;quot; alt=&amp;quot;A messy kitchen with wretched substances in pots as well as a plethora of scattered cans&amp;quot; title=&amp;quot;A messy kitchen with wretched substances in pots as well as a plethora of scattered cans&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A messy kitchen with wretched substances in pots as well as a plethora of scattered cans&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_6.png&amp;quot; alt=&amp;quot;A cold brick staircase descending into the darkness&amp;quot; title=&amp;quot;A cold brick staircase descending into the darkness&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A cold brick staircase descending into the darkness&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;My_comments_on_the_game&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#My_comments_on_the_game&amp;quot; aria-label=&amp;quot;Anchor link for: My_comments_on_the_game&amp;quot;&amp;gt;My comments on the game&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I feel that this game was a success for where I was at my experience level for the time. I had some specific goals and I accomplished them. Because I went for an artistic interpretation of the jam theme, it did not do very well. Likewise, I encountered several issues with my workflow such as a lack of experience in Blender, which I used for creating the level geometry, as well as struggling with the 3D capabilities of Godot 3, which uses a fairly outdated &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.khronos.org&amp;#x2F;opengles&amp;#x2F;&amp;quot;&amp;gt;OpenGL ES 3&amp;lt;&amp;#x2F;a&amp;gt; based rendering engine.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I think like many of my projects, this game served as an opportunity for me to learn. The feedback I got for this game really helped me hone my craft and I am incredibly grateful to everyone involved in the jam for helping me grow.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_7.png&amp;quot; alt=&amp;quot;A barely illuminated playroom with weak lamps in different sections. There are a few blocks on the ground as well as a rubix cube on the shelf by a book and a small lamp&amp;quot; title=&amp;quot;A barely illuminated playroom with weak lamps in different sections. There are a few blocks on the ground as well as a rubix cube on the shelf by a book and a small lamp&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A barely illuminated playroom with weak lamps in different sections. There are a few blocks on the ground as well as a rubix cube on the shelf by a book and a small lamp&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;ascension_gallery_8.png&amp;quot; alt=&amp;quot;A sitting room with a radio and a couch with a book resting on the cushions is illuminated by a weak wall lamp&amp;quot; title=&amp;quot;A sitting room with a radio and a couch with a book resting on the cushions is illuminated by a weak wall lamp&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A sitting room with a radio and a couch with a book resting on the cushions is illuminated by a weak wall lamp&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Widget&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Widget&amp;quot; aria-label=&amp;quot;Anchor link for: Widget&amp;quot;&amp;gt;Widget&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;div class=&amp;quot;container max-w-md&amp;quot;&amp;gt;
    &amp;lt;iframe src=&amp;quot;https:&amp;#x2F;&amp;#x2F;itch.io&amp;#x2F;embed&amp;#x2F;1562397?dark=true&amp;quot; width=&amp;quot;45%&amp;quot; frameborder=&amp;quot;0&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;queenofsquiggles.itch.io&amp;amp;#x2F;the-ascension-of-the-lamb&amp;quot;&amp;gt;
            The Ascension Of The Lamb by QueenOfSquiggles
        &amp;lt;&amp;#x2F;a&amp;gt;
    &amp;lt;&amp;#x2F;iframe&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h1 id=&amp;quot;Gallery&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Gallery&amp;quot; aria-label=&amp;quot;Anchor link for: Gallery&amp;quot;&amp;gt;Gallery&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_header.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_header.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_1.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_1.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_2.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_2.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_3.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_3.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_4.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_4.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_5.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_5.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_6.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_6.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_7.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_7.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;ascension_gallery_8.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;ascension_gallery_8.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
            
            <entry>
                <title>Contact Range</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;contact-range&#x2F;"/>
                <updated>2024-01-15T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;contact-range&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Release_Trailer&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Release_Trailer&amp;quot; aria-label=&amp;quot;Anchor link for: Release_Trailer&amp;quot;&amp;gt;Release Trailer&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;div class=&amp;quot;not-prose container mx-auto justify-center&amp;quot;&amp;gt;
    &amp;lt;iframe class=&amp;quot;w-full aspect-video&amp;quot; height=&amp;quot;auto&amp;quot;
        src=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;embed&amp;#x2F;7z3I9_15p2w&amp;quot;
        webkitallowfullscreen mozallowfullscreen allowfullscreen&amp;gt;
    &amp;lt;&amp;#x2F;iframe&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Trailer is made from 100% in-game footage&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;contact-range&amp;#x2F;sensor_array.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;sensor_array.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;contact-range&amp;#x2F;pilot.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;pilot.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;contact-range&amp;#x2F;captain.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;captain.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;contact-range&amp;#x2F;wrench.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wrench.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
            
            <entry>
                <title>Gruesome Claim</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;gruesome-claim&#x2F;"/>
                <updated>2024-01-15T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;gruesome-claim&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Gruesome_Claim&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Gruesome_Claim&amp;quot; aria-label=&amp;quot;Anchor link for: Gruesome_Claim&amp;quot;&amp;gt;Gruesome Claim&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;This game was my foray into photo-realism with Godot 4. The game itself relied heavily on third party, high quality assets. The focus on my work on it was to create interesting mechanics.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The premise of the game is that you play as an insurance investigator checking in on a client who seems to have suddenly stopped paying.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Interesting_Pathing_Constraints&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Interesting_Pathing_Constraints&amp;quot; aria-label=&amp;quot;Anchor link for: Interesting_Pathing_Constraints&amp;quot;&amp;gt;Interesting Pathing Constraints&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Teardrop (That funky clown doll), has three distinct stages of presence, with increasing threat to the player.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Ominous_Presence&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Ominous_Presence&amp;quot; aria-label=&amp;quot;Anchor link for: Ominous_Presence&amp;quot;&amp;gt;Ominous Presence&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Teardrop takes up two different, static poses during this phase. As the player aclimates themselves with the game space, they can be unnerved by Teardrop, but are not in any real danger.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The first setpiece is her in a rocking chair and the second is her &amp;lt;del&amp;gt;masturbating&amp;lt;&amp;#x2F;del&amp;gt; lounging on a couch in a different room.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Obstruction&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Obstruction&amp;quot; aria-label=&amp;quot;Anchor link for: Obstruction&amp;quot;&amp;gt;Obstruction&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;After the player has found a few of the insurance claim items, Teardrop converts to a stage where she will find a suitable location to teleport to. She will only teleport if the player is not able to see:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Her current location&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Her target location&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;This helps with the premise that she is actually moving to these locations off-screen. While standing she plays a simple animation and watches the player. If the player gets too close she will “jumpscare” them (which is a game over). As long as the player pays attention to where they are going, they are in very little danger during this phase.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Weeping_Angel&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Weeping_Angel&amp;quot; aria-label=&amp;quot;Anchor link for: Weeping_Angel&amp;quot;&amp;gt;Weeping Angel&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Literally in the code of the game I called the sensor for her being on-screen the “Weeping Angel Sensor”. Given that, you can guess how she operates. She will crawl along the floor and stop moving once the player looks at her. Though that isn’t entirely accurate. She is offset by a small timer at both ends, meaning you cn look away very quickly without triggering her motion, and once looking at her, she will continue to move for a short time. This solves two problems:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;The player needs to look where they are going without entirely losing track of Teardrop&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;The player might &amp;lt;em&amp;gt;never notice&amp;lt;&amp;#x2F;em&amp;gt; what is happening without her moving for a short second after being seen.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h3 id=&amp;quot;Interesting_Navigation&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Interesting_Navigation&amp;quot; aria-label=&amp;quot;Anchor link for: Interesting_Navigation&amp;quot;&amp;gt;Interesting Navigation&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;I honestly had forgotten to fill this out, but I was able to see what I did when I made an update to the game on September 14th, 2024.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;There are two different methods of navigation that Teardrop uses. The most efficient way to find a path from point A to point B is using a Navigation Mesh. But Teardrop also makes use of a more dynamic raycast based sensor system that allows her to avoid obstacles (mainly preventing her from hugging the wall which makes corners unfair for the player).
A combination of the guidance from a traditional pathing system and a dynamic sensor based steering system allows her to semi-organically navigate the apartment. Unfortunately this interesting system isn’t really shown off terribly well since she doesn’t move on screen much, the scene is very static, and there’s just the one of her.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I think in the future I definitely want to revisit this approach for monster AI agents. Perhaps when I finally get around to fleshing out Watery Wails???&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Gallery&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Gallery&amp;quot; aria-label=&amp;quot;Anchor link for: Gallery&amp;quot;&amp;gt;Gallery&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;entrance.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;entrance.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;back_hallway.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;back_hallway.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;lamp_desk.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;lamp_desk.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;clock.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;clock.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;couch.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;couch.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;camera.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;camera.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;gruesome-claim&amp;#x2F;storage.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;storage.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
            
            <entry>
                <title>This Metal Heart Still Beats</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;this-metal-heart-still-beats&#x2F;"/>
                <updated>2024-01-15T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;this-metal-heart-still-beats&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Game_Overview&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Game_Overview&amp;quot; aria-label=&amp;quot;Anchor link for: Game_Overview&amp;quot;&amp;gt;Game Overview&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;This game was made for Ludum Dare 51, which had the theme “Every 10 seconds”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Story&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Story&amp;quot; aria-label=&amp;quot;Anchor link for: Story&amp;quot;&amp;gt;Story&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I made the game a story of a person and their robotic partner, Ava, who has short circuited. You as the player have to try to fix their wiring while they are in a ‘sleep mode’ that ticks their circuits every ten seconds. The game is mostly a puzzle game of having Ava clean up some trash. The circuits are intentionally similar to &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;dev.epicgames.com&amp;#x2F;documentation&amp;#x2F;en-us&amp;#x2F;unreal-engine&amp;#x2F;blueprints-visual-scripting-in-unreal-engine?application_version=5.1&amp;quot;&amp;gt;Unreal’s Blueprints&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Technical_Information&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Technical_Information&amp;quot; aria-label=&amp;quot;Anchor link for: Technical_Information&amp;quot;&amp;gt;Technical Information&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;At the time of development, the Godot Engine Development Team had announced they would be sunsetting the “Visual Script” language for Godot. It was a visual scripting language option similar to Blueprints, but lacking in many ways, which led to the sunsetting. There were many flaws with it, one of the key flaws was that it was slower to make functionality in Visual Script than it was to write it in GDScript. And the logical flow of Visual Script was nearly identical to GDScript.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Thinking of these problems, and often referencing Unreal Engine’s documentation on Blueprints, I decided to try to make a small programming puzzle game. I made sure to focus on “macro level” functions. So instead of smaller components I worked on specific actions and sequencing.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I used an &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;dzone.com&amp;#x2F;articles&amp;#x2F;design-patterns-event-bus&amp;quot;&amp;gt;Event Bus&amp;lt;&amp;#x2F;a&amp;gt; to decouple the different interlocked systems. Mainly I used the Event Bus to push events for each of the node actions.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Note: in this case “node” is referring to the nodes in the visual scripting system within the game. However it is worth noting that Godot’s basic elements of structure are also called “node” because the structure of a program in Godot is in a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;docs.godotengine.org&amp;#x2F;en&amp;#x2F;stable&amp;#x2F;tutorials&amp;#x2F;scripting&amp;#x2F;scene_tree.html&amp;quot;&amp;gt;Tree of Nodes&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;There were several subscribers to these events. The logging system would print out information about what actions are being taken, or if a sensor event is going unhandled. Ava would listen to the action events and perform them in sequence with a small time delay and some smooting to make the actions more appealing. However, because they used an Event Bus and neither depended on each other, I was able to insert events manually and debug each component on its own, which saved valuable time in the game jam.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Surprisingly enough, Godot’s UI system has the structure for a basic node and sockets GUI. I customized them with a custom theme and worked to make sure they were usable for the game.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Technical_Failings&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Technical_Failings&amp;quot; aria-label=&amp;quot;Anchor link for: Technical_Failings&amp;quot;&amp;gt;Technical Failings&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;h3 id=&amp;quot;Missing_Failure_State&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Missing_Failure_State&amp;quot; aria-label=&amp;quot;Anchor link for: Missing_Failure_State&amp;quot;&amp;gt;Missing Failure State&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;I originally wanted the tension of the game to come from making a mistake. I planned on having the fail state be when Ava’s circuits tick while the circuits are being manipulated, or are in an invalid configuration. However, I didn’t finish this system, and I put too much effort to prevent the players from creating an invalid configuration.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Event_System&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Event_System&amp;quot; aria-label=&amp;quot;Anchor link for: Event_System&amp;quot;&amp;gt;Event System&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Events were scripted in GDScript, which largely relies on &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Duck_typing&amp;quot;&amp;gt;Duck Typing&amp;lt;&amp;#x2F;a&amp;gt; over &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Nominal_type_system&amp;quot;&amp;gt;nominative typing&amp;lt;&amp;#x2F;a&amp;gt;. As such using specific Event classes to differentiate and encapsulate the event data didn’t make a lot of sense. Or at least would have been too cumbersome in that paradigm. So I opted for a string serialization, which can be seen in the log. Ava’s actions are printing the unedited event string. This event string had to be constructed and subsequently parsed by each subscriber. In this case there were only two subscribers and a very short list of possible events. So handling this was relatively simple. But since working on this game, I’ve opted to use C# over GDScript in order to make more coherent Event Bus structures using delegates and C# events. C# is available as an optional scripting language for Godot, and there has been talk of making it included in the “standard build” of Godot 4, but as of writing this is not the case.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Free_Movement&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Free_Movement&amp;quot; aria-label=&amp;quot;Anchor link for: Free_Movement&amp;quot;&amp;gt;Free Movement&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Despite forcing an integer based movement system, and a 2D tile based world, the motion is actually in pixels and not in tiles. So if someone tells Ava to move 3 units to the left, they will slide 3 pixels to the left instead of 3 tiles, which was generally expected of a puzzle game of this nature.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Reception&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Reception&amp;quot; aria-label=&amp;quot;Anchor link for: Reception&amp;quot;&amp;gt;Reception&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;The game was made for the “Compo” version of the jam, which is 48 hours long instead of 72 hours. It ranked 142nd out of 2421 submitted projects (623 of which were in the Compo). This places it in the top 6% of games submitted in the competition. If you are interested in more information about Ludum Dare 51, the host has created an interesting &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;ldjam.com&amp;#x2F;events&amp;#x2F;ludum-dare&amp;#x2F;51&amp;#x2F;stats&amp;quot;&amp;gt;Statistics Page&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Widget&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Widget&amp;quot; aria-label=&amp;quot;Anchor link for: Widget&amp;quot;&amp;gt;Widget&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;div class=&amp;quot;container max-w-md&amp;quot;&amp;gt;
    &amp;lt;iframe src=&amp;quot;https:&amp;#x2F;&amp;#x2F;itch.io&amp;#x2F;embed&amp;#x2F;1726321?dark=true&amp;quot; width=&amp;quot;45%&amp;quot; frameborder=&amp;quot;0&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;queenofsquiggles.itch.io&amp;amp;#x2F;this-metal-heart-still-beats&amp;quot;&amp;gt;
            This Metal Heart Still Beats by QueenOfSquiggles
        &amp;lt;&amp;#x2F;a&amp;gt;
    &amp;lt;&amp;#x2F;iframe&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h1 id=&amp;quot;Gallery&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Gallery&amp;quot; aria-label=&amp;quot;Anchor link for: Gallery&amp;quot;&amp;gt;Gallery&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;this-metal-heart-still-beats&amp;#x2F;screenshots_1.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;screenshots_1.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;this-metal-heart-still-beats&amp;#x2F;screenshots_2.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;screenshots_2.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;this-metal-heart-still-beats&amp;#x2F;screenshots_4.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;screenshots_4.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;this-metal-heart-still-beats&amp;#x2F;screenshots_3.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;screenshots_3.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
            
            <entry>
                <title>Where The Dead Lie</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;where-the-dead-lie&#x2F;"/>
                <updated>2024-01-15T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;games&#x2F;where-the-dead-lie&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Game_Overview&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Game_Overview&amp;quot; aria-label=&amp;quot;Anchor link for: Game_Overview&amp;quot;&amp;gt;Game Overview&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Where The Dead Lie is a short horror experience made in roughly a week to test my skills of game development and the features of Godot 4’s beta release 16.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Goals_and_Lessons&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Goals_and_Lessons&amp;quot; aria-label=&amp;quot;Anchor link for: Goals_and_Lessons&amp;quot;&amp;gt;Goals and Lessons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;For this game I wanted to try out the features of Godot 4. Mainly the new Vulkan based rendering engine and the various refactors made for the C# scripting system. Additionally, I wanted to stretch my skills a bit by trying a genre of games that I had never made before, jumpscare horror games. While I had a general idea of how jumpscare horror games (JHG) work, I had never properly made one of these games myself and wanted to see if I could.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Additionally, I wanted to work on balancing priorities between my games and my school work. So I also wanted to make sure that the game never got more important to me than my school work.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Goals&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Goals&amp;quot; aria-label=&amp;quot;Anchor link for: Goals&amp;quot;&amp;gt;Goals&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Make a Jumpscare Horror Game&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Utilize the new Vulkan Renderer and “Signed Distance Field Global Illumination” (SDFGI)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Use lessons from &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;@ascension-of-the-lamb.md&amp;quot;&amp;gt;Ascension Of The Lamb&amp;lt;&amp;#x2F;a&amp;gt; to create a creepy atmosphere&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Get some practice with &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.blender.org&amp;#x2F;&amp;quot;&amp;gt;Blender&amp;lt;&amp;#x2F;a&amp;gt; to make semi-realistic models&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Don’t let the game get a higher priority than school work&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h2 id=&amp;quot;Lessons&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Lessons&amp;quot; aria-label=&amp;quot;Anchor link for: Lessons&amp;quot;&amp;gt;Lessons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I learned a lot from making this game. Firstly I learned that making a JHG can be quite fun, even if I don’t personally enjoy the genre as much. Additionally, I did a lot of work improving my asset workflow.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Asset_Workflow&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Asset_Workflow&amp;quot; aria-label=&amp;quot;Anchor link for: Asset_Workflow&amp;quot;&amp;gt;Asset Workflow&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;For 3D models, I found that it was worth it to look for 3rd party assets under permissive licenses in some cases. Not necessarily because I couldn’t model them myself, but because allowing myself to use someone else’s asset saved me time which could be focused more and the tricky parts of the game.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Additionally, I was comfortable enough in Blender to make changes to existing models as needed. And I did this often to tweak embedded materials and sometimes the geometry as well.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Some changes I made include:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Changing the Godot Robot to a blue metal instead of a rough blue&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Changing the DSLR Camera to a simple metal&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Simplifying the geometry of the DLSR Camera&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h2 id=&amp;quot;Lessons_Review&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Lessons_Review&amp;quot; aria-label=&amp;quot;Anchor link for: Lessons_Review&amp;quot;&amp;gt;Lessons Review&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Overall, I feel that I learned a lot. I got much better with using Blender for procedural material baking as well as texture painting. I learned techniques to cut the bake time down to several seconds per texture instead of several minutes per texture.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I also learned about the Godot 4 Vulkan Forwar+ Rendering pipeline. I was able to utilize more robust materials and larger textures to create very realistic scenes, while still including an air of fantasy to it through the monster and the general setting.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I also learned how to properly animate a character in Blender, utilizing Inverse Kinematics to make the animation process much easier.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Goals_Review&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Goals_Review&amp;quot; aria-label=&amp;quot;Anchor link for: Goals_Review&amp;quot;&amp;gt;Goals Review&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Make a Jumpscare Horror Game&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Utilize the new Vulkan Renderer and “Signed Distance Field Global Illumination” (SDFGI)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Use lessons from &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;@ascension-of-the-lamb.md&amp;quot;&amp;gt;Ascension Of The Lamb&amp;lt;&amp;#x2F;a&amp;gt; to create a creepy atmosphere&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Get some practice with &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.blender.org&amp;#x2F;&amp;quot;&amp;gt;Blender&amp;lt;&amp;#x2F;a&amp;gt; to make semi-realistic models&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;#x2F;&amp;gt;
Don’t let the game get a higher priority than school work&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;Overall, I met my goals. The only one I failed with it letting it get in the way of school work. I’m incredibly passionate about game development. But when I allow myself to indulge in this passion, some other parts of my life tend to fade into the background. Now I was able to get everything done. Both the game and my school work. And I only had one late assignment during development. And that assignment was only late by about six hours.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;So in summary, I’ve been growing in my ability to synthesize lessons from provious projects. I’ve also been gaining momentum with learning softwares.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Software_Used&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Software_Used&amp;quot; aria-label=&amp;quot;Anchor link for: Software_Used&amp;quot;&amp;gt;Software Used&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Godot 4 Beta 16
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Beta versions available on the download repo&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Krita
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;General 2D texturing and UI Elements&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;GIMP
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Technical texture processing&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Blender
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;3D Modelling&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Texture Painting&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Procedural Material Design&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Rodzilla’s Material Maker
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Procedural Material Generation&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;ORM Texture Generation
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Ambient Occlusion&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Roughness&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Metalness&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Audacity
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Audio Processing&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h1 id=&amp;quot;The_Windows_Debacle&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_Windows_Debacle&amp;quot; aria-label=&amp;quot;Anchor link for: The_Windows_Debacle&amp;quot;&amp;gt;The Windows Debacle&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;For whatever reason, the game would freeze on windows upon release. I use a Linux desktop for all of my daily purposes so I wasn’t able to properly test on Windows myself. I’m incredibly grateful to the various people who were able to provide system information and logs to help with the solving of the issue. We finally found a solution when I submitted an issue to the Godot Engine Repository. There I learned that there was a bug in the version of Godot where certain Resource failures could result in infinite recursion. Specifically the segment in my game that was triggering it was the font. I chose to try out the System Font feature and chose a few system fonts that I was familiar with “Noto Sans” and “Fira Sans”. Unfortunately, most Windows PCs didn’t have these fonts installed, which resulted in the bug.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Switching to a resource that used a Noto Sans TTF file fixed the problem, and I pushed it out to my players to enjoy.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Marketing_and_Sales_Review&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Marketing_and_Sales_Review&amp;quot; aria-label=&amp;quot;Anchor link for: Marketing_and_Sales_Review&amp;quot;&amp;gt;Marketing and Sales Review&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;For this game I did fairly minimal marketing. The game was released with fairly minimal fanfare. Despite this there was a surge in downloads upon release. In part due to the sale I made where for the first week of release the game could be claimed for free. After which the game costs $1 minimum, with a recommended $5. This sale was listed on a reddit thread and the game held a position in the “New and Popular” section for Horror games on &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;itch.io&amp;#x2F;&amp;quot;&amp;gt;Itch IO&amp;lt;&amp;#x2F;a&amp;gt;. As of writing, the game has 1350 views, 109 downloads, and 3 purchases. Considering the effort put into this game, I feel this is a pretty good outcome. The genre is fairly saturated, so asking for money will tend to hurt downloads overall.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I think in th future, I might make the release sale much shorter. Most of the downloads occured during the sale, and only a few people chose to purchase. As much as I like to think myself a philanthropist, I really need that money to sustain my life. In the future, I think I’ll be removing options for free downloads. And for the demos, I’ll actually restrict the content of the game as opposed to allowing the full version of the game. I thought the “Pirate Version” was a fun way to describe it, and I set it to prompt the players to donate to me or purchase the game to remove the prompt. It opens pages in their browser and is generally annoying, but still a free way to play the entirety of the game.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Since the end of the sale, the Pirate Versions have been outpacing the paid versions in terms of releases.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;In the future, I’ll change a lot in terms of marketing and sale style. I’m hoping that my next game will do much better. I’ll be utilizing Godot’s &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;docs.godotengine.org&amp;#x2F;en&amp;#x2F;stable&amp;#x2F;tutorials&amp;#x2F;export&amp;#x2F;feature_tags.html#custom-features&amp;quot;&amp;gt;“Release Feature”&amp;lt;&amp;#x2F;a&amp;gt; system to manage building demos that are restricted versions of the main game.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Butler,_and_Incremental_Patches&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Butler,_and_Incremental_Patches&amp;quot; aria-label=&amp;quot;Anchor link for: Butler,_and_Incremental_Patches&amp;quot;&amp;gt;Butler, and Incremental Patches&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;In the past, I’ve used GitHub and GitHub actions to push incremental builds to my projects. One issue I did have was with the autoamtic versioning and with the fact that I had limited processing minutes available on my free account.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I learned about a tool make by the Itch IO team called “Butler”, which was a command line tool for uploading the game with automatic incremental patches and consistent download channels on the project page. Despite being fairly comfortable in the terminal, I was hesitant to use Butler on my computer. But after trying it with this game I think it will be my default approach to uploading game builds going forwards.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I especially appreciate the “channel” approach which means that each named “channel” results in one downloadable file. And each channel can be updated independantly. Additonally, the versioning can be overridden or the default incrementer can be used.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For my next project, I’m planning on making a shell script to run through pushing all of the versions to their respective channels. Or possibly a python script to make it platform independant.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Screenshots&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Screenshots&amp;quot; aria-label=&amp;quot;Anchor link for: Screenshots&amp;quot;&amp;gt;Screenshots&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;wtdl-img-2.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wtdl-img-2.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;wtdl-img-1.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wtdl-img-1.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;wtdl-img-3.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wtdl-img-3.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;wtdl-img-4.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wtdl-img-4.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;where-the-dead-lie&amp;#x2F;wtdl-img-5.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wtdl-img-5.png&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;&amp;lt;h1 id=&amp;quot;Widget&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Widget&amp;quot; aria-label=&amp;quot;Anchor link for: Widget&amp;quot;&amp;gt;Widget&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;div class=&amp;quot;container max-w-md&amp;quot;&amp;gt;
    &amp;lt;iframe src=&amp;quot;https:&amp;#x2F;&amp;#x2F;itch.io&amp;#x2F;embed&amp;#x2F;1900264?dark=true&amp;quot; width=&amp;quot;45%&amp;quot; frameborder=&amp;quot;0&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https:&amp;amp;#x2F;&amp;amp;#x2F;queenofsquiggles.itch.io&amp;amp;#x2F;where-the-dead-lie&amp;quot;&amp;gt;
            Where The Dead Lie by QueenOfSquiggles
        &amp;lt;&amp;#x2F;a&amp;gt;
    &amp;lt;&amp;#x2F;iframe&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
    
        
        
            
            <entry>
                <title>Choreographer Design Documentation</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;choreographer-design&#x2F;"/>
                <updated>2023-12-09T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;choreographer-design&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Blog_Post_Note&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Blog_Post_Note&amp;quot; aria-label=&amp;quot;Anchor link for: Blog_Post_Note&amp;quot;&amp;gt;Blog Post Note&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Update (August 24th, 2024)&amp;lt;&amp;#x2F;strong&amp;gt;: This effort&amp;#x2F;project has since been abandoned. However anyone wishing to take this idea further is quite welcome to!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;Hey, this is the same markdown that is in the choreographer git repository. And one is significantly more likely to be updated. This is the version that was initially uploaded on December 19th, 2023. If you are from the future reading this, it is entirely possible the design has changed by some amount to accommodate changes in our reality. Otherwise please enjoy my mess :3&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Preface:&amp;lt;&amp;#x2F;strong&amp;gt; For simplicity, this document is written in present tense for specific end-goals and in future tense for possible but unlikely goals. This project could be considered to be “complete” once all present tense declarations are true.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Choreographer&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Choreographer&amp;quot; aria-label=&amp;quot;Anchor link for: Choreographer&amp;quot;&amp;gt;Choreographer&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Choreographer (C11R) is a GDExtension based scripting language for Godot 4.2+.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Similar to Unreal Engine’s Blueprints system, it uses a Node-Graph Event system to manage code paths. Where an Event is equivalent to a “method” or “function” and is not necessarily related to Events in the context of an Observer Pattern.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;User_Groups&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#User_Groups&amp;quot; aria-label=&amp;quot;Anchor link for: User_Groups&amp;quot;&amp;gt;User Groups&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;There are three core user groups of interest for Choreographer:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Game developers&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Tooling Developers&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Team Collaboration&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h3 id=&amp;quot;Game_Developers&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Game_Developers&amp;quot; aria-label=&amp;quot;Anchor link for: Game_Developers&amp;quot;&amp;gt;Game Developers&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Game developers are (usually) less concerned with what they use to make a game and more concerned with actually finishing and releasing their game. To that end, Choreographer is intended to be highly usable for increasing efficacy of development as well as lowering the barrier to entry for developers who may not have experience with traditional programming languages.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Tooling_Developers&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Tooling_Developers&amp;quot; aria-label=&amp;quot;Anchor link for: Tooling_Developers&amp;quot;&amp;gt;Tooling Developers&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Tooling developers enjoy creating tools for Game Developers to use. They enjoy clean and documented systems which allow them to create interesting resources with minimal effort. Tooling developers are more likely to contribute back to the source project if they deem it worthy and&amp;#x2F;or interesting.
In order to serve tools developers, as well as to leverage their skills, Choreographer provides a simple “Block” registration system which allows custom logic blocks to be registered from a plugin and can be used from within the Choreographer Scripting Interface&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Team_Collaboration_&amp;#x2F;_Professional_Development&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Team_Collaboration_&amp;amp;#x2F;_Professional_Development&amp;quot; aria-label=&amp;quot;Anchor link for: Team_Collaboration_&amp;amp;#x2F;_Professional_Development&amp;quot;&amp;gt;Team Collaboration &amp;#x2F; Professional Development&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Teams, both for smaller ventures like game jams and larger ventures like a complete game company, require specific features that may not necessarily be needed for individuals. For example teams will benefit from being able to leverage Version Control Systems such as git to collaborate more effectively. Additionally, teams are typically comprised of people with a diversity of skills and experience. In order to best leverage their unique skills and talents, they need to be able to leverage each other in mutually beneficial ways.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;In order to best serve teams and professional groups, Choreographer uses a text-based (XML) file format, which allows easily readable files which can ease aches and pains from merge conflicts.
Additionally, the same feature which allows tooling developers to register custom logic blocks allows individual team members to provide logic blocks internally to their own team. And those highly specialized logic blocks can be used to increase the efficiency and ease of development for all team members.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Language_Specification&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Language_Specification&amp;quot; aria-label=&amp;quot;Anchor link for: Language_Specification&amp;quot;&amp;gt;Language Specification&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;Definitions&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Definitions&amp;quot; aria-label=&amp;quot;Anchor link for: Definitions&amp;quot;&amp;gt;Definitions&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;“Script” - a single file and class of Choreographer.
“Block” - a single node in the graph of a script.
“Event” - a method contained in a C11R Script comprised of a directed acyclic graph of Blocks.
“Connection” - a relationship between two Blocks marked by a line
“Emit”&amp;#x2F;“Emitting” - refers to a situation where the connection is on the right side of the block meaning it is an output
“Receive”&amp;#x2F;“Receiving” - refers to a situation where the connection is on the left side of the block meaning it is an input&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Graph_Systems_Review_(Mathematical)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Graph_Systems_Review_(Mathematical)&amp;quot; aria-label=&amp;quot;Anchor link for: Graph_Systems_Review_(Mathematical)&amp;quot;&amp;gt;Graph Systems Review (Mathematical)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The graphs in Choreographer are “directed acyclic graphs”, which is a specific type of graph which allows for validation of certain properties. For simplicity the details are described here:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;“Directed” - connections between nodes go in a particular direction and can but are not necessarily bi-directional
“Acyclic” - there are no sequences of connections in the graph which would allow a “cycle”, or a chain that loops infinitely.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Directed and Acyclic graphs are both long-standing mathematical descriptions and have a plethora of algorithms available for managing them.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;In terms of the mathematical description, “nodes” can also be referred to as “vertices”, but in this specific case we call them “Blocks” to avoid confusion with the &amp;lt;code&amp;gt;Node&amp;lt;&amp;#x2F;code&amp;gt; types in Godot.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Event_Systems&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Event_Systems&amp;quot; aria-label=&amp;quot;Anchor link for: Event_Systems&amp;quot;&amp;gt;Event Systems&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Each &amp;lt;code&amp;gt;Event&amp;lt;&amp;#x2F;code&amp;gt; is a sequence of operations. A specific type of connection called the &amp;lt;code&amp;gt;Event Connection&amp;lt;&amp;#x2F;code&amp;gt; is connected across the graph to determine the flow of logic. Other connections are of a value type, called &amp;lt;code&amp;gt;Value Connection&amp;lt;&amp;#x2F;code&amp;gt;. Internally, these are an &amp;lt;code&amp;gt;enum Connection&amp;lt;&amp;#x2F;code&amp;gt; which allows every connection to be one of each type, not both, and not nothing(&amp;lt;code&amp;gt;null&amp;lt;&amp;#x2F;code&amp;gt;).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Event_Connection&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Event_Connection&amp;quot; aria-label=&amp;quot;Anchor link for: Event_Connection&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Event Connection&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Event Connections work through a push system. Once the block emitting the event connection completes execution, the event connections which are marked as active are used to find the next Block(s) in the event graph.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Value_Connection&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Value_Connection&amp;quot; aria-label=&amp;quot;Anchor link for: Value_Connection&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Value Connection&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Value connections work through a pull system. When a block is triggered to execute, it checks in memory for the input data. If any receiving port has stale (&amp;lt;code&amp;gt;null&amp;lt;&amp;#x2F;code&amp;gt;) data, it first triggers the emitting block to regenerate that data, this can trigger recursively if necessary.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Block_Definitions&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Block_Definitions&amp;quot; aria-label=&amp;quot;Anchor link for: Block_Definitions&amp;quot;&amp;gt;Block Definitions&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Blocks can be defined in a variety of ways depending on the source of their creation.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;All block definitions require a data segment and a logic segment as follows:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Name (String)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Documentation (String) (Optional)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Inputs (Array&amp;amp;lt;Connection&amp;amp;gt;)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Outputs (Array&amp;amp;lt;Connection&amp;amp;gt;)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Execution Function (sig: &amp;lt;code&amp;gt;fn(Vec&amp;amp;lt;Connection&amp;amp;gt;) -&amp;amp;gt; Vec&amp;amp;lt;Connection&amp;amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Input Icons (Array&amp;amp;lt;String&amp;amp;gt;)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Output Icons (Array&amp;amp;lt;String&amp;amp;gt;)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h2 id=&amp;quot;Core_Library&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Core_Library&amp;quot; aria-label=&amp;quot;Anchor link for: Core_Library&amp;quot;&amp;gt;Core Library&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The Core Library, or the collection of Block Definitions made available by Choreographer itself, are all namespaced to “core”. These block definitions are the basic units of logic for Choreographer and are registered internally by defining them as rust structs that implement the &amp;lt;code&amp;gt;IBlock&amp;lt;&amp;#x2F;code&amp;gt; trait and submitting them to the &amp;lt;code&amp;gt;ChoreographerServer&amp;lt;&amp;#x2F;code&amp;gt; registry.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Third_Party_Libraries&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Third_Party_Libraries&amp;quot; aria-label=&amp;quot;Anchor link for: Third_Party_Libraries&amp;quot;&amp;gt;Third Party Libraries&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Third Party Libraries are collections of blocks registered by some means besides Choreographer. This is the intended way to add specificity to Choreographer.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;While it is potentially possible to define and register these block definitions through an additional GDExtension project, it is recommended to write custom block definitions in GDScript and register them through a plugin.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The reasoning behind this is that I am not entirely certain how to use Choreographer as a library for type definitions without simply appending it to the project as a dependency, which could potentially cause problems with FFI. Should someone smarter than me know how this part of GDExtension&amp;#x2F;FFI works and is able to help with this side, registering custom blocks through GDExtension could become possible. However, please remember that the end user will require a binary for every platform they may want to publish their game on, and as such the number of GDExtension libraries in their project will exponentially increase the difficulty of exporting if those libraries are not pre-compiled for the user’s target platforms (Think Mobile and Apple platforms, which are tricky).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;How_Third_Party_Block_Definitions_work_internally&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#How_Third_Party_Block_Definitions_work_internally&amp;quot; aria-label=&amp;quot;Anchor link for: How_Third_Party_Block_Definitions_work_internally&amp;quot;&amp;gt;How Third Party Block Definitions work internally&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Internally, there is a “CustomBlock” block definition which redirects standard &amp;lt;code&amp;gt;IBlock&amp;lt;&amp;#x2F;code&amp;gt; function calls to a series of &amp;lt;code&amp;gt;Callable&amp;lt;&amp;#x2F;code&amp;gt;s point at particular function names.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;In the future, when abstract method definitions become available, I want this to be refactored to use abstract methods instead, which should ease the pain of development&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;The method of storage for these callables should be &amp;lt;code&amp;gt;Option&amp;amp;lt;Callable&amp;amp;gt;&amp;lt;&amp;#x2F;code&amp;gt; such that when encountering a value of &amp;lt;code&amp;gt;None&amp;lt;&amp;#x2F;code&amp;gt;, we can emit a warning message and skip processing.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Virtual_Heap_Memory&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Virtual_Heap_Memory&amp;quot; aria-label=&amp;quot;Anchor link for: Virtual_Heap_Memory&amp;quot;&amp;gt;Virtual Heap Memory&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Choreographer uses a heap memory abstraction. That is, a &amp;lt;code&amp;gt;Vec&amp;amp;lt;Option&amp;amp;lt;Variant&amp;amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;code&amp;gt; which allows indices to serve as a memory address and value checking on the rust-side of things.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The organization of the heap is as such:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Script local variables (effectively static as variables cannot be de-initialized until the script itself is dropped)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Temporary Event execution memory (dropped upon event completion)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;An option available to the user could be to choose between memory usage and performance. For example, to save performance costs, the memory heap could simply be nulled (&amp;lt;code&amp;gt;None&amp;lt;&amp;#x2F;code&amp;gt;) out rather than resizing the &amp;lt;code&amp;gt;Vec&amp;lt;&amp;#x2F;code&amp;gt;. But this could create a memory cost as each execution unit increases the size of the nothing array. The immediate deletion would remove need for some kind of garbage collection system, which I see as a band-aid for bad memory management.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;Each script is in charge of its own virtual heap memory.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Note, though it is referred to as “virtual” the data being stored is also literally in the program’s heap memory. But by virtualizing it the scripts create an effective memory arena such that the entire block of memory can be dropped all at once when the script instance is dropped.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;How_do_individual_blocks_interact_with_the_virtual_heap?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#How_do_individual_blocks_interact_with_the_virtual_heap?&amp;quot; aria-label=&amp;quot;Anchor link for: How_do_individual_blocks_interact_with_the_virtual_heap?&amp;quot;&amp;gt;How do individual blocks interact with the virtual heap?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The script execution maps inputs and outputs to virtual heap addresses (&amp;lt;code&amp;gt;usize&amp;lt;&amp;#x2F;code&amp;gt; value) such that when an output is calculated it is assigned to the address that inputs requiring that value are also targeting. A value goes stale once there are no remaining inputs that target that address, and as such can be dropped.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;It is possible to develop a system by which stale memory is detected throughout the execution of an event graph, this would certainly increase the efficiency of larger event graphs, however this may be difficult to implement based on a variety of factors. Testing will be needed.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Choreographer_Scripting_Interface_(CSI)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Choreographer_Scripting_Interface_(CSI)&amp;quot; aria-label=&amp;quot;Anchor link for: Choreographer_Scripting_Interface_(CSI)&amp;quot;&amp;gt;Choreographer Scripting Interface (CSI)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;The CSI is a visual representation of the data model contained in memory and in the corresponding &amp;lt;code&amp;gt;.c11r&amp;lt;&amp;#x2F;code&amp;gt; file. Hence, the reasonable approach towards developing the CSI is to use the Model-View-Controller system.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The CSI is effectively the View and Controller as the Model is the only component required for execution at runtime. CSI displays a graph of blocks using Godot’s &amp;lt;code&amp;gt;GraphEdit&amp;lt;&amp;#x2F;code&amp;gt; systems. And all changes are marshalled out to the controller component which in turn serializes changes in data.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;The_.c11r_format&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_.c11r_format&amp;quot; aria-label=&amp;quot;Anchor link for: The_.c11r_format&amp;quot;&amp;gt;The &amp;lt;code&amp;gt;.c11r&amp;lt;&amp;#x2F;code&amp;gt; format&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Choreographer Script files use the &amp;lt;code&amp;gt;c11r&amp;lt;&amp;#x2F;code&amp;gt; extension and are in the well tested XML file format. The logic behind using XML is that it allows attributes to be appended onto a tag, which allows for a more detailed description of individual objects without necessitating deep nesting like JSON would require. Additionally, as HTML is a superset of XML, those familiar with web development should be able to easily read &amp;lt;code&amp;gt;c11r&amp;lt;&amp;#x2F;code&amp;gt; files with minimal effort.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Example_.c11r_data&amp;#x2F;schema&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Example_.c11r_data&amp;amp;#x2F;schema&amp;quot; aria-label=&amp;quot;Anchor link for: Example_.c11r_data&amp;amp;#x2F;schema&amp;quot;&amp;gt;Example &amp;lt;code&amp;gt;.c11r&amp;lt;&amp;#x2F;code&amp;gt; data&amp;#x2F;schema&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;?&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;xml&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; version&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;1.0&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;?&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;c11r&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;godot&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; uid&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;02123&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;godot&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;dependencies&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;res&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; guid&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;02165&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; path&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;res:&amp;#x2F;&amp;#x2F;asdaslkhjasd&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;res&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;dependencies&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;vars&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;item&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; type&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; name&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;some_var&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; value&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;12&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; isconst&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;false&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;item&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;item&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; type&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;12&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; name&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;another_var&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; value&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;something&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; isconst&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;false&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;item&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;vars&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;blocks&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;block&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; id&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0001&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; type&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;IfElse&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;block&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;blocks&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;connections&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;link&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; left_id&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0001&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; left_port&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; right_id&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0002&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; right_port&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;link&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;connections&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;metadata&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;doc&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; id&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0001&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;            This is a docstring&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;doc&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;gui&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; id&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0001&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; pos&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;1.2;3.6&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;gui&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;comment&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; id&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;0001&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; pos&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;1.2;1.0&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;            This is a comment block&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;comment&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;metadata&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;c11r&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;&amp;lt;h1 id=&amp;quot;Testing_Challenges&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Testing_Challenges&amp;quot; aria-label=&amp;quot;Anchor link for: Testing_Challenges&amp;quot;&amp;gt;Testing Challenges&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Unit testing is incredibly helpful for verifying that functions operate as intended when changes are made. Unfortunately for godot-rust, the actual components that interoperate with Godot’s types cannot be used because the definitions are only known when Godot loads the library into memory and initializes it over FFI. What this means is that &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;no component that uses Godot types can be unit tested without a very specific setup&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt;. There are currently tools and attempts to create a custom testing environment for godot-rust, however as of now I believe the most effective way to test a godot-rust project is to extract what logic is possible away from the Godot Types. For example the serialization&amp;#x2F;deserialization systems are based on a submodule that emits and receives structured metadata rather than a Godot type. This allows these systems to be unit tested.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Continuation_of_documentation&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Continuation_of_documentation&amp;quot; aria-label=&amp;quot;Anchor link for: Continuation_of_documentation&amp;quot;&amp;gt;Continuation of documentation&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;This here is all I can think of that should be included at this present moment. Unfortunately I am a mortal and am prone to mistakes, so please let me know if something needs to be changed and&amp;#x2F;or updated by creating an issue in the repository.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Godot Engine Editor Icon Colours</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;godot-icon-colours&#x2F;"/>
                <updated>2023-11-24T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;godot-icon-colours&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Colours_LUT&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Colours_LUT&amp;quot; aria-label=&amp;quot;Anchor link for: Colours_LUT&amp;quot;&amp;gt;Colours LUT&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;The markdown doesn’t really support custom colours, so see below for examples. (dark reader users make sure you disable it for this website if you wanna see accurate colours!!!!)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;text-align: center&amp;quot;&amp;gt;Hex Light&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th style=&amp;quot;text-align: center&amp;quot;&amp;gt;Hex Dark&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th style=&amp;quot;text-align: left&amp;quot;&amp;gt;Engine Name&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;&amp;lt;&amp;#x2F;thead&amp;gt;&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#478cbf&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#478cbf&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Godot Blue&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#414042&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#414042&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Godot Gray&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#000000&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#bfbfbf&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Pure black&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ff0000&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ff0000&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Pure red&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#00ff00&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#00ff00&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Pure green&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#0000ff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#0000ff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Pure blue&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#808080&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#808080&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;GUI disabled color&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#b3b3b3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#363636&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;GUI disabled light color&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#699ce8&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#699ce8&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;GUI highlight color&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f9f9f9&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#606060&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Scrollbar grabber highlight color&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#fc7f7f&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#cd3838&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Spatial&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#8da5f3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#3d64dd&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;2D&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#4b70ea&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#1a3eac&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;2D Dark&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#8eef97&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#2fa139&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Control&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#003e7a&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#2b74bb&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Selection (darker blue)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f7f5cf&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#615f3a&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Gizmo (yellow)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#80ff45&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#74ff34&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Green&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#45ffa2&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#2cff98&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Aqua&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#45d7ff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#22ccff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Blue&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#8045ff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#702aff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Purple&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ff4596&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ff2781&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Pink&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#75d1e6&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#41acc5&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Frozen gradient middle&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#84ffee&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#49ccba&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Frozen gradient bottom&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#eec315&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#d58c0b&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Color track orange&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#dbee15&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#b7d10a&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Color track yellow&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#288027&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#218309&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Color track green&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#a2d2ff&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#4998e3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Shape resource (light blue)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ea7940&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#bd5e2c&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;3D Position track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ff2b88&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#bd165f&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;3D Rotation track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#eac840&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#bd9d1f&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;3D Scale track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#3cf34e&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#16a827&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Call Method track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#2877f6&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#236be6&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Bezier Curve track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#eae440&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#9f9722&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Audio Playback track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#a448f0&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#9853ce&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Animation Playback track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#5ad5c4&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#0a9c88&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Blend Shape track&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#919191&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#6e6e6e&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Border part&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#c6ced4&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#828f9b&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;New Atlas&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#5abbef&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#4fb2e9&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;int&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#35d4f4&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#27ccf0&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;float&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#4593ec&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#4690e7&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;String&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ac73f1&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ad76ee&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Vector2&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f1738f&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ee758e&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Rect2&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#de66f0&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#dc6aed&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Vector3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#b9ec41&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#96ce1a&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Transform2D&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f74949&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f77070&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Plane&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ec418e&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ec69a3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Quaternion&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ee5677&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#ee7991&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;AABB&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#e1ec41&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#b2bb19&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Basis&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f68f45&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#f49047&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Transform3D&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#417aec&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#6993ec&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;NodePath&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#41ec80&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#2ce573&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;RID&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#55f3e3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#12d5c3&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Object&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#54ed9e&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#57e99f&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Dictionary&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#cf68ea&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#c050dd&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Functions and expressions&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#eac968&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;#d9b64f&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Textures and cubemaps&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;&amp;#x2F;tbody&amp;gt;&amp;lt;&amp;#x2F;table&amp;gt;
&amp;lt;h1 id=&amp;quot;Colour_Details&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Colour_Details&amp;quot; aria-label=&amp;quot;Anchor link for: Colour_Details&amp;quot;&amp;gt;Colour Details&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Here’s all the colours. First colour is the light theme, second is dark. Then some text in each colour to show what it looks like.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Godot_Blue&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Godot_Blue&amp;quot; aria-label=&amp;quot;Anchor link for: Godot_Blue&amp;quot;&amp;gt;Godot Blue&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;478cbf –&amp;amp;gt; 478cbf&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #478cbf;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #478cbf;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Godot_Gray&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Godot_Gray&amp;quot; aria-label=&amp;quot;Anchor link for: Godot_Gray&amp;quot;&amp;gt;Godot Gray&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;414042 –&amp;amp;gt; 414042&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #414042;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #414042;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Pure_black&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Pure_black&amp;quot; aria-label=&amp;quot;Anchor link for: Pure_black&amp;quot;&amp;gt;Pure black&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;000000 –&amp;amp;gt; bfbfbf&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #000000;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #bfbfbf;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Pure_red&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Pure_red&amp;quot; aria-label=&amp;quot;Anchor link for: Pure_red&amp;quot;&amp;gt;Pure red&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ff0000 –&amp;amp;gt; ff0000&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ff0000;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ff0000;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Pure_green&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Pure_green&amp;quot; aria-label=&amp;quot;Anchor link for: Pure_green&amp;quot;&amp;gt;Pure green&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;00ff00 –&amp;amp;gt; 00ff00&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #00ff00;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #00ff00;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Pure_blue&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Pure_blue&amp;quot; aria-label=&amp;quot;Anchor link for: Pure_blue&amp;quot;&amp;gt;Pure blue&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;0000ff –&amp;amp;gt; 0000ff&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;GUI_disabled_color&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#GUI_disabled_color&amp;quot; aria-label=&amp;quot;Anchor link for: GUI_disabled_color&amp;quot;&amp;gt;GUI disabled color&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;808080 –&amp;amp;gt; 808080&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #808080;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #808080;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;GUI_disabled_light_color&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#GUI_disabled_light_color&amp;quot; aria-label=&amp;quot;Anchor link for: GUI_disabled_light_color&amp;quot;&amp;gt;GUI disabled light color&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;b3b3b3 –&amp;amp;gt; 363636&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #b3b3b3;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #363636;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;GUI_highlight_color&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#GUI_highlight_color&amp;quot; aria-label=&amp;quot;Anchor link for: GUI_highlight_color&amp;quot;&amp;gt;GUI highlight color&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;699ce8 –&amp;amp;gt; 699ce8&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #699ce8;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #699ce8;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Scrollbar_grabber_highlight_color&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Scrollbar_grabber_highlight_color&amp;quot; aria-label=&amp;quot;Anchor link for: Scrollbar_grabber_highlight_color&amp;quot;&amp;gt;Scrollbar grabber highlight color&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;f9f9f9 –&amp;amp;gt; 606060&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f9f9f9;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #606060;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Spatial&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Spatial&amp;quot; aria-label=&amp;quot;Anchor link for: Spatial&amp;quot;&amp;gt;Spatial&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;fc7f7f –&amp;amp;gt; cd3838&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #fc7f7f;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #cd3838;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;2D&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#2D&amp;quot; aria-label=&amp;quot;Anchor link for: 2D&amp;quot;&amp;gt;2D&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;8da5f3 –&amp;amp;gt; 3d64dd&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #8da5f3;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #3d64dd;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;2D_Dark&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#2D_Dark&amp;quot; aria-label=&amp;quot;Anchor link for: 2D_Dark&amp;quot;&amp;gt;2D Dark&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;4b70ea –&amp;amp;gt; 1a3eac&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #4b70ea;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #1a3eac;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Control&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Control&amp;quot; aria-label=&amp;quot;Anchor link for: Control&amp;quot;&amp;gt;Control&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;8eef97 –&amp;amp;gt; 2fa139&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #8eef97;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #2fa139;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Selection_(darker_blue)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Selection_(darker_blue)&amp;quot; aria-label=&amp;quot;Anchor link for: Selection_(darker_blue)&amp;quot;&amp;gt;Selection (darker blue)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;003e7a –&amp;amp;gt; 2b74bb&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #003e7a;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #2b74bb;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Gizmo_(yellow)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Gizmo_(yellow)&amp;quot; aria-label=&amp;quot;Anchor link for: Gizmo_(yellow)&amp;quot;&amp;gt;Gizmo (yellow)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;f7f5cf –&amp;amp;gt; 615f3a&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f7f5cf;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #615f3a;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Green&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Green&amp;quot; aria-label=&amp;quot;Anchor link for: Green&amp;quot;&amp;gt;Green&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;80ff45 –&amp;amp;gt; 74ff34&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #80ff45;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #74ff34;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Aqua&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Aqua&amp;quot; aria-label=&amp;quot;Anchor link for: Aqua&amp;quot;&amp;gt;Aqua&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;45ffa2 –&amp;amp;gt; 2cff98&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #45ffa2;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #2cff98;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Blue&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Blue&amp;quot; aria-label=&amp;quot;Anchor link for: Blue&amp;quot;&amp;gt;Blue&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;45d7ff –&amp;amp;gt; 22ccff&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #45d7ff;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #22ccff;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Purple&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Purple&amp;quot; aria-label=&amp;quot;Anchor link for: Purple&amp;quot;&amp;gt;Purple&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;8045ff –&amp;amp;gt; 702aff&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #8045ff;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #702aff;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Pink&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Pink&amp;quot; aria-label=&amp;quot;Anchor link for: Pink&amp;quot;&amp;gt;Pink&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ff4596 –&amp;amp;gt; ff2781&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ff4596;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ff2781;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Frozen_gradient_middle&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Frozen_gradient_middle&amp;quot; aria-label=&amp;quot;Anchor link for: Frozen_gradient_middle&amp;quot;&amp;gt;Frozen gradient middle&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;75d1e6 –&amp;amp;gt; 41acc5&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #75d1e6;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #41acc5;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Frozen_gradient_bottom&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Frozen_gradient_bottom&amp;quot; aria-label=&amp;quot;Anchor link for: Frozen_gradient_bottom&amp;quot;&amp;gt;Frozen gradient bottom&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;84ffee –&amp;amp;gt; 49ccba&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #84ffee;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #49ccba;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Color_track_orange&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Color_track_orange&amp;quot; aria-label=&amp;quot;Anchor link for: Color_track_orange&amp;quot;&amp;gt;Color track orange&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;eec315 –&amp;amp;gt; d58c0b&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #eec315;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #d58c0b;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Color_track_yellow&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Color_track_yellow&amp;quot; aria-label=&amp;quot;Anchor link for: Color_track_yellow&amp;quot;&amp;gt;Color track yellow&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;dbee15 –&amp;amp;gt; b7d10a&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #dbee15;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #b7d10a;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Color_track_green&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Color_track_green&amp;quot; aria-label=&amp;quot;Anchor link for: Color_track_green&amp;quot;&amp;gt;Color track green&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;288027 –&amp;amp;gt; 218309&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #288027;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #218309;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Shape_resource_(light_blue)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Shape_resource_(light_blue)&amp;quot; aria-label=&amp;quot;Anchor link for: Shape_resource_(light_blue)&amp;quot;&amp;gt;Shape resource (light blue)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;a2d2ff –&amp;amp;gt; 4998e3&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #a2d2ff;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #4998e3;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;3D_Position_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#3D_Position_track&amp;quot; aria-label=&amp;quot;Anchor link for: 3D_Position_track&amp;quot;&amp;gt;3D Position track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ea7940 –&amp;amp;gt; bd5e2c&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ea7940;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #bd5e2c;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;3D_Rotation_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#3D_Rotation_track&amp;quot; aria-label=&amp;quot;Anchor link for: 3D_Rotation_track&amp;quot;&amp;gt;3D Rotation track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ff2b88 –&amp;amp;gt; bd165f&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ff2b88;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #bd165f;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;3D_Scale_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#3D_Scale_track&amp;quot; aria-label=&amp;quot;Anchor link for: 3D_Scale_track&amp;quot;&amp;gt;3D Scale track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;eac840 –&amp;amp;gt; bd9d1f&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #eac840;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #bd9d1f;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Call_Method_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Call_Method_track&amp;quot; aria-label=&amp;quot;Anchor link for: Call_Method_track&amp;quot;&amp;gt;Call Method track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;3cf34e –&amp;amp;gt; 16a827&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #3cf34e;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #16a827;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Bezier_Curve_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Bezier_Curve_track&amp;quot; aria-label=&amp;quot;Anchor link for: Bezier_Curve_track&amp;quot;&amp;gt;Bezier Curve track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;2877f6 –&amp;amp;gt; 236be6&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #2877f6;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #236be6;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Audio_Playback_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Audio_Playback_track&amp;quot; aria-label=&amp;quot;Anchor link for: Audio_Playback_track&amp;quot;&amp;gt;Audio Playback track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;eae440 –&amp;amp;gt; 9f9722&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #eae440;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #9f9722;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Animation_Playback_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Animation_Playback_track&amp;quot; aria-label=&amp;quot;Anchor link for: Animation_Playback_track&amp;quot;&amp;gt;Animation Playback track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;a448f0 –&amp;amp;gt; 9853ce&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #a448f0;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #9853ce;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Blend_Shape_track&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Blend_Shape_track&amp;quot; aria-label=&amp;quot;Anchor link for: Blend_Shape_track&amp;quot;&amp;gt;Blend Shape track&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;5ad5c4 –&amp;amp;gt; 0a9c88&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #5ad5c4;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #0a9c88;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Border_part&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Border_part&amp;quot; aria-label=&amp;quot;Anchor link for: Border_part&amp;quot;&amp;gt;Border part&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;919191 –&amp;amp;gt; 6e6e6e&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #919191;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #6e6e6e;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;New_Atlas&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#New_Atlas&amp;quot; aria-label=&amp;quot;Anchor link for: New_Atlas&amp;quot;&amp;gt;New Atlas&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;c6ced4 –&amp;amp;gt; 828f9b&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #c6ced4;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #828f9b;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;int&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#int&amp;quot; aria-label=&amp;quot;Anchor link for: int&amp;quot;&amp;gt;int&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;5abbef –&amp;amp;gt; 4fb2e9&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #5abbef;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #4fb2e9;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;float&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#float&amp;quot; aria-label=&amp;quot;Anchor link for: float&amp;quot;&amp;gt;float&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;35d4f4 –&amp;amp;gt; 27ccf0&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #35d4f4;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #27ccf0;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;String&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#String&amp;quot; aria-label=&amp;quot;Anchor link for: String&amp;quot;&amp;gt;String&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;4593ec –&amp;amp;gt; 4690e7&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #4593ec;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #4690e7;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Vector2&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Vector2&amp;quot; aria-label=&amp;quot;Anchor link for: Vector2&amp;quot;&amp;gt;Vector2&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ac73f1 –&amp;amp;gt; ad76ee&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ac73f1;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ad76ee;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Rect2&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Rect2&amp;quot; aria-label=&amp;quot;Anchor link for: Rect2&amp;quot;&amp;gt;Rect2&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;f1738f –&amp;amp;gt; ee758e&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f1738f;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ee758e;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Vector3&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Vector3&amp;quot; aria-label=&amp;quot;Anchor link for: Vector3&amp;quot;&amp;gt;Vector3&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;de66f0 –&amp;amp;gt; dc6aed&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #de66f0;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #dc6aed;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Transform2D&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Transform2D&amp;quot; aria-label=&amp;quot;Anchor link for: Transform2D&amp;quot;&amp;gt;Transform2D&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;b9ec41 –&amp;amp;gt; 96ce1a&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #b9ec41;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #96ce1a;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Plane&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Plane&amp;quot; aria-label=&amp;quot;Anchor link for: Plane&amp;quot;&amp;gt;Plane&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;f74949 –&amp;amp;gt; f77070&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f74949;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f77070;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Quaternion&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Quaternion&amp;quot; aria-label=&amp;quot;Anchor link for: Quaternion&amp;quot;&amp;gt;Quaternion&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ec418e –&amp;amp;gt; ec69a3&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ec418e;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ec69a3;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;AABB&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#AABB&amp;quot; aria-label=&amp;quot;Anchor link for: AABB&amp;quot;&amp;gt;AABB&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ee5677 –&amp;amp;gt; ee7991&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ee5677;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #ee7991;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Basis&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Basis&amp;quot; aria-label=&amp;quot;Anchor link for: Basis&amp;quot;&amp;gt;Basis&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;e1ec41 –&amp;amp;gt; b2bb19&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #e1ec41;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #b2bb19;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Transform3D&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Transform3D&amp;quot; aria-label=&amp;quot;Anchor link for: Transform3D&amp;quot;&amp;gt;Transform3D&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;f68f45 –&amp;amp;gt; f49047&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f68f45;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #f49047;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;NodePath&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#NodePath&amp;quot; aria-label=&amp;quot;Anchor link for: NodePath&amp;quot;&amp;gt;NodePath&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;417aec –&amp;amp;gt; 6993ec&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #417aec;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #6993ec;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;RID&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#RID&amp;quot; aria-label=&amp;quot;Anchor link for: RID&amp;quot;&amp;gt;RID&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;41ec80 –&amp;amp;gt; 2ce573&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #41ec80;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #2ce573;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Object&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Object&amp;quot; aria-label=&amp;quot;Anchor link for: Object&amp;quot;&amp;gt;Object&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;55f3e3 –&amp;amp;gt; 12d5c3&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #55f3e3;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #12d5c3;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Dictionary&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Dictionary&amp;quot; aria-label=&amp;quot;Anchor link for: Dictionary&amp;quot;&amp;gt;Dictionary&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;54ed9e –&amp;amp;gt; 57e99f&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #54ed9e;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #57e99f;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Functions_and_expressions&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Functions_and_expressions&amp;quot; aria-label=&amp;quot;Anchor link for: Functions_and_expressions&amp;quot;&amp;gt;Functions and expressions&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;cf68ea –&amp;amp;gt; c050dd&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #cf68ea;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #c050dd;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Textures_and_cubemaps&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Textures_and_cubemaps&amp;quot; aria-label=&amp;quot;Anchor link for: Textures_and_cubemaps&amp;quot;&amp;gt;Textures and cubemaps&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;eac968 –&amp;amp;gt; d9b64f&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #eac968;&amp;quot;&amp;gt; Example Light &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p style=&amp;quot;color: #d9b64f;&amp;quot;&amp;gt; Example Dark &amp;amp;#9608; &amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Why_does_this_exist?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Why_does_this_exist?&amp;quot; aria-label=&amp;quot;Anchor link for: Why_does_this_exist?&amp;quot;&amp;gt;Why does this exist?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I really like to make my SVG icons for tools and such to be reactive to light&amp;#x2F;dark theme colouration swapping. The godot engine has a massive look up table (LUT) for hex codes that it will swap when going from light to dark themes. So long as you use these colours as a palette for your icons, they will look good in both light and dark themes. This page is mainly a reference page for the various colour codes&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;How_to_use_this&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#How_to_use_this&amp;quot; aria-label=&amp;quot;Anchor link for: How_to_use_this&amp;quot;&amp;gt;How to use this&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;This reference page is mainly intended for people who want to make editor icons for Godot. However you can assign custom icons for any global class you desire. If you are creating a plugin or some kind of code-base to be distributed to third party developers, it is highly recommended that you use these palette swapping colours so the icon will have a greater chance of having a decent contrast against the background. If not please ensure that your icon has enough internal contrast to be clearly visible. Also please be sure that your icon is not completely reliant on colour for users who may be colour blind. (A main example of this is how &amp;lt;code&amp;gt;Node&amp;lt;&amp;#x2F;code&amp;gt;, &amp;lt;code&amp;gt;Control&amp;lt;&amp;#x2F;code&amp;gt;, &amp;lt;code&amp;gt;Node2D&amp;lt;&amp;#x2F;code&amp;gt;, and &amp;lt;code&amp;gt;Node3D&amp;lt;&amp;#x2F;code&amp;gt; are all the exact same shape but differentiated by colour. That’s a bad practice in general).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;If you want more resources on how to author meaningful and efficiently loaded icons, please refer to &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;docs.godotengine.org&amp;#x2F;en&amp;#x2F;stable&amp;#x2F;contributing&amp;#x2F;development&amp;#x2F;editor&amp;#x2F;creating_icons.html&amp;quot;&amp;gt;the official godot documentation on this subject&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Shell Fur Breakdown</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;shell-fur-breakdown&#x2F;"/>
                <updated>2023-11-14T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;shell-fur-breakdown&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;What_happened???&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_happened???&amp;quot; aria-label=&amp;quot;Anchor link for: What_happened???&amp;quot;&amp;gt;What happened???&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Well you see a little youtuber called “Acerola” made a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;youtu.be&amp;#x2F;9dr-tRQzij4&amp;quot;&amp;gt;little video&amp;lt;&amp;#x2F;a&amp;gt; and put out a challenge. As a creature fueled by an unholy combination of caffeine and raw impulse, I had to take on this “Acerola Furry Challenge” and exceed.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;The_Challenge&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_Challenge&amp;quot; aria-label=&amp;quot;Anchor link for: The_Challenge&amp;quot;&amp;gt;The Challenge&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Acerola’s original video did a breakdown for how shell fur works and demonstrated how to get it working in Unity. As an elite Godot game dev, I was able to port most of it over quite easily. Acerola’s challenge was to implement the fur rendering he demonstrated in the video, and then extend the functionality in at least one key way.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;anime-goku.gif&amp;quot; alt=&amp;quot;Goku from Dragon Ball Z power up to *super saiyin*&amp;quot; title=&amp;quot;Goku from Dragon Ball Z power up to *super saiyin*&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Goku from Dragon Ball Z power up to *super saiyin*&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Well_what_is_“Shell_Fur”?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Well_what_is_“Shell_Fur”?&amp;quot; aria-label=&amp;quot;Anchor link for: Well_what_is_“Shell_Fur”?&amp;quot;&amp;gt;Well what is “Shell Fur”?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;If you already know Shell Fur and just wanna get to the results, you don’t need to read this.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;Shell Fur is named for the way it implements fur rendering. It utilizes a common method for sub-vertex geometry visualization. If you do work with 3D game development and&amp;#x2F;or tech art, you are probably at least familiar with normal maps, and possibly parallax rendering (height maps) for materials. Both add extra visual detail without requiring extra vertices. Shell fur does a similar effect by layering multiple meshes on top of each other and selectively discarding specific pixels based on some kind of algorithm.
Essentially, if you break the UV coordinates into a smaller grid and then discard pixels at the edges of each cell, you would get a square fur, similar to what Acerola references in the game &amp;lt;em&amp;gt;Viva Pinata&amp;lt;&amp;#x2F;em&amp;gt;. By doing a little extra math you can discard anything outside of a circle in the cell. Then going out along the layers you can shrink the size of the circle. With enough layers, this creates a visual effect that resembles strands of fur.
Something that is incredibly helpful about this method is that while it does increase the vertex count, it does so by such a small margin compared to the details provided. Because we do a lot of our calculations on the pixel level, for a game where furry objects can’t be looked at too closely, it can look quite realistic while not incurring too much of a performance hit.
Of course I love games with style and I found that it can quite easily create stylized effects as well.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;boykisser.gif&amp;quot; alt=&amp;quot;The boykisser meme character smirking&amp;quot; title=&amp;quot;The boykisser meme character smirking&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;The boykisser meme character smirking&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;So_what_did_I_do?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#So_what_did_I_do?&amp;quot; aria-label=&amp;quot;Anchor link for: So_what_did_I_do?&amp;quot;&amp;gt;So what did I do?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;First, I simply wanted to get fur working. So I made a &amp;lt;del&amp;gt;simple&amp;lt;&amp;#x2F;del&amp;gt; system that would make duplicates of the mesh and extrude every single vertex slightly out based on the provided “strand length” and “shell count”. Through that we could make the layers, or shells, very easily. Additionally, it felt appropriate to be placing fur on a character rather than on a cube or sphere. So I searched “furry” into sketchfab and found a League of Legends character called “Kindred”. So I used this mesh and it actually didn’t work.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;How_do_extrusions_work?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#How_do_extrusions_work?&amp;quot; aria-label=&amp;quot;Anchor link for: How_do_extrusions_work?&amp;quot;&amp;gt;How do extrusions work?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I used a nifty tool in Godot called &amp;lt;code&amp;gt;MeshDataTool&amp;lt;&amp;#x2F;code&amp;gt;, which has some lovely documentation. Basically it can load a surface from one mesh, perform manipulations on the data, and then push that new mesh to a mesh object (which could be the original mesh but it wasn’t in this case). So what I did is I loaded each surface and iterated throught the vertices. The &amp;lt;code&amp;gt;MeshDataTool&amp;lt;&amp;#x2F;code&amp;gt; provides a lookup to get all face indices touching a given vertex index. Then I got the normals of each connected face and averaged them out. I normalized the average normal and then multiplied it by the shell layer depth. The original vertex is then offset by that value and we move to the next one.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I’m actually really interested to see what kinds of fun procedural mesh generation I can do with the &amp;lt;code&amp;gt;MeshDataTool&amp;lt;&amp;#x2F;code&amp;gt; in the future. I believe I could push new vertex data to it should I have something interesting for it. Maybe I could even make a voxel renderer with greedy tiling?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;It’s_rigged&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#It’s_rigged&amp;quot; aria-label=&amp;quot;Anchor link for: It’s_rigged&amp;quot;&amp;gt;It’s rigged&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;So the character model was rigged for an animation, which I thought would be cool to try to make the fur work properly with it. However something about how rigged meshes work means that the original mesh would be properly deformed by the skeleton and the fur meshes would not. It actually resulted in the fur shell meshes doing a T-pose while laying on the ground behind the properly rendering character. Which was quite frustrating. I am not terribly familiar with how skeleton rigs and mesh deforms actually work in terms of the mesh data, so I decided to just strip the rig and make it a static mesh.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;With the stripped mesh, everything was working wonderfully.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Next I took on working on different systems that could make the fur look nicer.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;wow-t-posing.gif&amp;quot; alt=&amp;quot;A Hatsune Miku model in a t-pose rotating&amp;quot; title=&amp;quot;A Hatsune Miku model in a t-pose rotating&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A Hatsune Miku model in a t-pose rotating&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h2 id=&amp;quot;Shader_improvements&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Shader_improvements&amp;quot; aria-label=&amp;quot;Anchor link for: Shader_improvements&amp;quot;&amp;gt;Shader improvements&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I wanted to make the fur look nicer, and one way to do that was to use some fun shader stuff. In Godot 4 we have &amp;lt;code&amp;gt;instance uniform&amp;lt;&amp;#x2F;code&amp;gt; variables in shaders which are uniform values that can be assigned on a per-&amp;lt;code&amp;gt;MeshInstance3D&amp;lt;&amp;#x2F;code&amp;gt; basis. So I was able to give each shell layer information on what percentage of the depth it was at and also assigning strand colours. Realistically, the strand colours didn’t need to be on a per-instance basis, but I did it so…yeah.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Simulation_improvements&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Simulation_improvements&amp;quot; aria-label=&amp;quot;Anchor link for: Simulation_improvements&amp;quot;&amp;gt;Simulation improvements&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;So you may have noticed that the fur doesn’t really do anything and just sticks straight out. So what I wanted to do was add a basic physics simulation, especially a better one than Acerola made in the video (sorry not surry, bud). I used some basic physics lerping and damped the physics affect factor based on a curve resource.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Godot_Resources_Are_Magical_And_You_Better_Use_Them_Or_Else&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Godot_Resources_Are_Magical_And_You_Better_Use_Them_Or_Else&amp;quot; aria-label=&amp;quot;Anchor link for: Godot_Resources_Are_Magical_And_You_Better_Use_Them_Or_Else&amp;quot;&amp;gt;Godot Resources Are Magical And You Better Use Them Or Else&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;happy-cry.gif&amp;quot; alt=&amp;quot;James from Pokemon crying happy tears&amp;quot; title=&amp;quot;James from Pokemon crying happy tears&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;James from Pokemon crying happy tears&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;Something that was really awesome for me when I first moved to Godot from Unity way back in 2020 (yeah I switched before it was cool) was the sheer quantity of useful resources available to be as a developer. And the ability to just export that and use it to manipulate stuff was incredible. They’ve only gotten better over time. Though &amp;lt;code&amp;gt;Curve&amp;lt;&amp;#x2F;code&amp;gt; is definitely a classic. It’s simply a curve that supports different handle types and can have multiple vertices as well. I generally used it for making a basic smoothstep function, but the curve resource is fully customizable to change the thickness of strands along their length.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I was able to use &amp;lt;code&amp;gt;Curve&amp;lt;&amp;#x2F;code&amp;gt;s not only for visual thickness but also for the simulated “stiffness” of the strands along the length. What that means is that you can choose which parts of the strand are stiff and which aren’t.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Working_in_realtime&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Working_in_realtime&amp;quot; aria-label=&amp;quot;Anchor link for: Working_in_realtime&amp;quot;&amp;gt;Working in realtime&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;So all of this is &amp;lt;strong&amp;gt;technically&amp;lt;&amp;#x2F;strong&amp;gt; working in real-time. One trouble is that the fur shells don’t exist until the game starts and a behemoth of mesh generation is done (at startup!!!)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;And_then…?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#And_then…?&amp;quot; aria-label=&amp;quot;Anchor link for: And_then…?&amp;quot;&amp;gt;And then…?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;What comes next may surprise you… I made a plugin. Of course I made a plugin. I’m an addict for plugins. Tooling is love and tooling is life.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;A_Shell_Fur_Plugin&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#A_Shell_Fur_Plugin&amp;quot; aria-label=&amp;quot;Anchor link for: A_Shell_Fur_Plugin&amp;quot;&amp;gt;A Shell Fur Plugin&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Recently I got to see the lovely GodotCon talk by Miguel (bitbrain) talking about tooling in Godot. It was a great talk and if you love Godot you should really check it out. One of the key things I learned from the talk (at least that is relevant here) is the difference between “addon” and “plugin” in godot. “addon” is literally just something third party. Plugins are specifically code that is registered with the engine and requires the &amp;lt;code&amp;gt;plugin.cfg&amp;lt;&amp;#x2F;code&amp;gt; file for godot to handle it. Basically, all plugins are addons, but not all addons are plugins.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;So I got to work on a proper plugin for this shell fur. I had a few hopes, but I wasn’t sure what would all work in-editor so I had to play around with.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;A key difference in my approach was in my programming language. For my original development, I chose to use C# since it’s one of my favourite languages to use with Godot. However, for this plugin, I wanted to make it compatible with more projects (and most people don’t use C# to my knowledge. Yes you may gasp now.) So this was ported to GDScript. Since, to my knowledge, there is no transpiler from C# to GDscript, I did basically rewrite everything but in a different language. On the bright side, I got to play with some of the new GDScript features introduced to recent versions of Godot such as &amp;lt;code&amp;gt;static var&amp;lt;&amp;#x2F;code&amp;gt; and typed arrays.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Once I had the basics up and running for the shell fur I wanted to make some spicy stuff (No, no, not that! Where’s the damn spray bottle?). I wanted to see how much of the fur I could get running in the editor. That means mesh generation, real-time editing of fur properties, and physics. It turned out surprisingly well, excepting a few key areas.
Basically, the mesh generation takes a ton of processing time (1.5 seconds in some instances). Which causes a huge stutter if I do it synchronously. But if I try to use a coroutine or a thread, I have to make sure I’m managing data access (async code is hell). I spent days just trying to get different asynchronous bits of code working. In the end I never actually got it to work. I opted to just have buttons at the top (inserted by a custom &amp;lt;code&amp;gt;InspectorPlugin&amp;lt;&amp;#x2F;code&amp;gt;, which are surprisingly easy to set up!). The buttons would either trigger mesh regeneration, or purge the shell meshes. I did have to learn a bit more about editor instanced nodes. For example, if they don’t have an owner, they don’t save. If you don’t have an &amp;lt;code&amp;gt;EditorInterface&amp;lt;&amp;#x2F;code&amp;gt; reference, you can’t tell the editor that it needs to be saved. Oh and that group you’re using to separate out your instanced meshes out from the other meshes in the scene that really need to not be messed with? Yeah you gotta add the group slightly differently to ensure it stays when saving, else it gets purged upon reload.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;(Lewd Joke Incoming) Plugin development is a either like sex or school team projects: either way I’m getting fucked, all that changes is if I’m having a good time or not.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;I had to do a lot of work trying to make the asynchronous code work and ended up failing after trying for almost an entire week. And it’s probably worth mentioning that I’m currently (as of writing) unemployed. I was putting 9-10 hours a day for like 5 days into this and couldn’t make it work. I want to believe there is a fundamental gap in my knowledge that is causing this problem, but I was unable to figure it out with all that time so if you know how to make it work submit a PR or something? It’s open source.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;That rant out of the way, what I did manage to get working was basically everything else on my checklist. Additionally, I added the option to provide a texture to the fur, which would let you do more intersting stylings for the fur. And this is where the strand colours being a per-instance and not a per-material uniform gets really fun. (And it was totally on purpose and definitely not a happy accident). The instance colours are multiplied on the texture colour, which lets you have colour variations across instances of the same fur material, for example if you wanted to have a slight variation across several furry creatures. (Frankly if you wanted to make a wetness system you could modify the colour and stiffness. However currently the roughness and metalness are on a per-material basis so a shader rewrite may be needed to make that totally work as desired.) Hey speaking of shader rewrites, I made an option so the fur tool will allow you to load a custom material instead of the default material. So while the default material is pretty robust, if you want a different style you can totally do that. You could even go so far as to have a custom shader so long as the uniforms match the expected names and types.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Also if you are super cool and awesome, there might be a few “easter eggs” in the plugin to find. Mainly because I can’t help myself when I’m banging my head into the wall for days. I needed something fun, so now you get to deal with it. XOXO&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;toradora-palm-top-tiger.gif&amp;quot; alt=&amp;quot;Toradora laughing with the caption &amp;amp;amp;#x27;menace to society&amp;amp;amp;#x27;&amp;quot; title=&amp;quot;Toradora laughing with the caption &amp;amp;#x27;menace to society&amp;amp;#x27;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Toradora laughing with the caption &amp;amp;#x27;menace to society&amp;amp;#x27;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Future_Plans&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Future_Plans&amp;quot; aria-label=&amp;quot;Anchor link for: Future_Plans&amp;quot;&amp;gt;Future Plans&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I’m not entirely certain if I have any plans for this addon. I did get an issue requesting support for older Godot version, since &amp;lt;code&amp;gt;static var&amp;lt;&amp;#x2F;code&amp;gt; isn’t actually supported in Godot 4.0. So I rewrote some sections that would allow compatibilty for all currently available 4.X versions. If at some point people want to use it with 4.3 and there’s some breaking change, I could look into upgrading it, but with projects like this I generally do a “lazy maintenance” approach. That is, because I am not personally using this tool in my own projects, I don’t have any real needs for it. I could theoretically develop it forever. So instead I let it sit and if someone submits an issue I’ll look into fixing it, or mark the plugin as archived&amp;#x2F;unmaintained. Really I probably have several repositories that I need to do that for, so if I ever have a boring afternoon I might have to spruce up my GitHub repos.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;As this plugin is MIT licensed and fully open source, anyone is free to fork it and make it their own, or even better they can do a pull request for adding new features to the plugin. But that is only really meaningful if there are a decent number of people using the plugin, and as far as I am aware the total number is zero. That could definitely just be my limited ability to see who uses my tools. I really can only see when people star the repo on GitHub. Downloads from there and from the Godot Asset Library are completely opaque and provide no insights as to whether anyone is using my tools. Which can feel disheartening at times since I can’t ever be sure if all of this work is for nothing.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;little-witch-academia-sucy.gif&amp;quot; alt=&amp;quot;Sucy from Little Witch Academia shrugging&amp;quot; title=&amp;quot;Sucy from Little Witch Academia shrugging&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Sucy from Little Witch Academia shrugging&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Please_I_beg_of_you&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Please_I_beg_of_you&amp;quot; aria-label=&amp;quot;Anchor link for: Please_I_beg_of_you&amp;quot;&amp;gt;Please I beg of you&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;adorable-pleading.gif&amp;quot; alt=&amp;quot;A young anime girl with a pleading look on her face (I don&amp;amp;amp;#x27;t know the character or anime lol)&amp;quot; title=&amp;quot;A young anime girl with a pleading look on her face (I don&amp;amp;#x27;t know the character or anime lol)&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A young anime girl with a pleading look on her face (I don&amp;amp;#x27;t know the character or anime lol)&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;If you use a plugin, even once, go tell the creator(s) that you used it. Tell them how you feel about it, especially if you really enjoyed it (And maybe keep things kind and constructive if you had a negative experience). It really means a lot. Frankly, everyone who creates things for others wants to know that people are enojying it. Can you imagine what it would be like if you published a game and the platform you published on didn’t have comments, views, downloads, or anything for analytics??&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;While I’m on this topic, it really stretches well beyond the confines of game development! I don’t talk about it much, but I recently self published a book. I spent maybe a year or two on it and to this day I have barely any insights into what people think besides my family members that tell me. Everyone who creates for others, deserves to hear that their creations sparked joy, even if it was just for a moment. Even if it was something dumb.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Also the reason I don’t talk about the book much is that it had some pretty personal stuff in it that if I linked in my socials would basically doxx me. My next novel is gonna have absolutely nothing unsafe and it’s gonna be published under a different pen name so I’ll be totally safe to hype it up for my online friends.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Showcase&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Showcase&amp;quot; aria-label=&amp;quot;Anchor link for: Showcase&amp;quot;&amp;gt;Showcase&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;

&amp;lt;div class=&amp;quot;flex flex-row flex-wrap bg-base-200 p-2 rounded-box container mx-auto gap-4 justify-center&amp;quot;&amp;gt;
    
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tech&amp;#x2F;shell-fur-breakdown&amp;#x2F;fuzzy.gif&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;fuzzy.gif&amp;quot; alt=&amp;quot;Showing off how the fur reacts to motion (in a simulation of physics)&amp;quot; title=&amp;quot;Showing off how the fur reacts to motion (in a simulation of physics)&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Showing off how the fur reacts to motion (in a simulation of physics)&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tech&amp;#x2F;shell-fur-breakdown&amp;#x2F;demo_pbr.png&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;

        
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;demo_pbr.png&amp;quot; alt=&amp;quot;The fur can handle PBR materials as well. Here it&amp;amp;amp;#x27;s a reflective gold, smoothed because it&amp;amp;amp;#x27;s using the base normals of the mesh instead of individual strands&amp;quot; title=&amp;quot;The fur can handle PBR materials as well. Here it&amp;amp;#x27;s a reflective gold, smoothed because it&amp;amp;#x27;s using the base normals of the mesh instead of individual strands&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;The fur can handle PBR materials as well. Here it&amp;amp;#x27;s a reflective gold, smoothed because it&amp;amp;#x27;s using the base normals of the mesh instead of individual strands&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tech&amp;#x2F;shell-fur-breakdown&amp;#x2F;demo_physics.gif&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;demo_physics.gif&amp;quot; alt=&amp;quot;A little tool allows setting the stiffness of the strands along their length, which can create some interesting effects&amp;quot; title=&amp;quot;A little tool allows setting the stiffness of the strands along their length, which can create some interesting effects&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A little tool allows setting the stiffness of the strands along their length, which can create some interesting effects&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
    
    

    &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;tech&amp;#x2F;shell-fur-breakdown&amp;#x2F;demo_texture.gif&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;
        

&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;demo_texture.gif&amp;quot; alt=&amp;quot;It also supports realtime texturing. In this example I used a noise map to make a weird cheetah print&amp;quot; title=&amp;quot;It also supports realtime texturing. In this example I used a noise map to make a weird cheetah print&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;It also supports realtime texturing. In this example I used a noise map to make a weird cheetah print&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;


    &amp;lt;&amp;#x2F;a&amp;gt;
&amp;lt;&amp;#x2F;div&amp;gt;</content>
            </entry>
            
        
            
            <entry>
                <title>Godot Lighting Exploration</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;godot-lighting-exploration&#x2F;"/>
                <updated>2023-10-05T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;tech&#x2F;godot-lighting-exploration&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;The_goal&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_goal&amp;quot; aria-label=&amp;quot;Anchor link for: The_goal&amp;quot;&amp;gt;The goal&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I recently competed in Ludum Dare 54 (theme “Limited Space”). One of the problems players have mentioned is the poor performance. Mainly this is due to heavy leaning on &amp;lt;code&amp;gt;VoxelGI&amp;lt;&amp;#x2F;code&amp;gt; and &amp;lt;code&amp;gt;SDFGI&amp;lt;&amp;#x2F;code&amp;gt; which are Godot’s premier techniques for rendering realtime global illumination. What I wanted out of this is to explore what is possible with Godot, and what options are available if I want to lean towards supporting end users on lower end hardware.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Let’s look at the techniques we have available to us!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;SDFGI&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#SDFGI&amp;quot; aria-label=&amp;quot;Anchor link for: SDFGI&amp;quot;&amp;gt;SDFGI&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;SDFGI is a light model managed not by a particular node but as a part of the &amp;lt;code&amp;gt;WorldEnvironment&amp;lt;&amp;#x2F;code&amp;gt;. The technical details of it go way over my head, but basically it uses the geometry of the scene to approximate(?) the global illumination while making heavy use of Signed Distance Fields&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;VoxelGI&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#VoxelGI&amp;quot; aria-label=&amp;quot;Anchor link for: VoxelGI&amp;quot;&amp;gt;VoxelGI&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;VoxelGI is a semi-realtime model that makes use some some baked data as well as real time calculations. This does limit how fully an environment is able to be lit realistically. However it makes up for that by being quite easy to set up and immediately adds details to the game. The main downside is runtime performance.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;LightmapGI&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#LightmapGI&amp;quot; aria-label=&amp;quot;Anchor link for: LightmapGI&amp;quot;&amp;gt;LightmapGI&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Lightmap Global Illumination uses exclusively pre-baked data. Meaning that while requiring a large file that caches the lighting data, the runtime performance cost is extremely low. (But not zero because nothing is ever easy!)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Because the lighting model is baked ahead of time, you can have highly realistic simulated light for a given space. And on top of that, the node automatically places lighting probes based on your settings. Though there is a lightmap probe node if you want to set some specific probe locations.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;ReflectionProbe&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#ReflectionProbe&amp;quot; aria-label=&amp;quot;Anchor link for: ReflectionProbe&amp;quot;&amp;gt;ReflectionProbe&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Reflection Probe might not be something you think of for lighting model. While extremely useful for creating &amp;lt;em&amp;gt;reflections&amp;lt;&amp;#x2F;em&amp;gt;, it also provides some indirect lighting through the reflection contribution. Because of this, it can provide some added light while also making reflections appear more realistic.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;However, there are two modes:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Update Once&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;More performant&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Does not detect changes&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Update Always&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Slower&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Reacts to changes in the scene&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;So when it comes to reflection probes, you may want to evaluate which mode is most effective for your scene in particular. Because I made a purely static scene for this experiment, I used “Update Once”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;The_experiment&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_experiment&amp;quot; aria-label=&amp;quot;Anchor link for: The_experiment&amp;quot;&amp;gt;The experiment&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;This experiment was to create a somewhat interesting scene. I recently saw the new Dune movie and liked the “mars” themes of this asset pack by Kay Lousberg. So I decided to make a desert planet themed scene.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The main reason I opted to use this asset pack (besides looking really cool) is that LightmapGI requires UV2 data from meshes. And Godot can only generate those for &amp;lt;code&amp;gt;MeshInstance3D&amp;lt;&amp;#x2F;code&amp;gt; nodes that are using an &amp;lt;code&amp;gt;ArrayMesh&amp;lt;&amp;#x2F;code&amp;gt; resource. At least as far as I could tell. With the GLTF models Kay produced, I was able to import them with static light baking enabled (which is &amp;lt;strong&amp;gt;not&amp;lt;&amp;#x2F;strong&amp;gt; on by default)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The experiment was to see if individual light model nodes could all contribute to the same scene, and if disabling individual nodes would affect the illumination contributions negatively.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Designing_a_level&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Designing_a_level&amp;quot; aria-label=&amp;quot;Anchor link for: Designing_a_level&amp;quot;&amp;gt;Designing a level&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;With the assets I started to make a little story about a landing zone, some bases set up and trucks moving cargo around. The actual details of it were not super important, the goal was to show off the lighting anyway. But making little stories is one of my joys.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Something I discovered is all of the assets use a single material and texture, and it’s their UV coordinates that affect the colour of the mesh. Which is incredibly efficient for space when making a game. However it did not allow me to override individual “materials” of different models. For example I wanted to make the trucks have reflective windshields and more metallic hulls. Instead I opted to duplicate one of the rock meshes and replace the entire material with a slightly rough metallic material. Just to make sure the reflection probes were working as expected.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Initial_bugs&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Initial_bugs&amp;quot; aria-label=&amp;quot;Anchor link for: Initial_bugs&amp;quot;&amp;gt;Initial bugs&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;As it would turn out, moving nodes arround, which I did to make the project easier to parse for people hoping to learn from it, actually breaks &amp;lt;code&amp;gt;LightmapGI&amp;lt;&amp;#x2F;code&amp;gt; nodes. As it would turn out, &amp;lt;code&amp;gt;LightmapGI&amp;lt;&amp;#x2F;code&amp;gt; nodes only search for meshes among their siblings and children (recursively). So if there are components of a specific branch of the scene tree that are inaccessible, the &amp;lt;code&amp;gt;LightmapGI&amp;lt;&amp;#x2F;code&amp;gt; will be unable to discover them!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;While frustrating at first, this is actually &amp;lt;em&amp;gt;incredibly&amp;lt;&amp;#x2F;em&amp;gt; useful! What this means is that you can have individual “segments” of your level with different light maps baked. So you could have a segment that the player will see all the time, and a segment that is only seen in cutscenes and even putting those in the same scene file, you can separate the lightmap baking and even use different settings!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Results&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Results&amp;quot; aria-label=&amp;quot;Anchor link for: Results&amp;quot;&amp;gt;Results&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;It appears that layering static and dynamic light model nodes works rather well! There are some artifacts produced when the settings are changed, but it would appear that overall the quality is extremently high!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;If you want to try out the application for yourself, it’s free on my itch. &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.itch.io&amp;#x2F;squiggles-godot-lighting-demo&amp;quot;&amp;gt;Download here!&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
    
        
        
            
            <entry>
                <title>&#x27;Fate&#x2F;Stay Night: Unlimited Blade Works&#x27; Saved My Life</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;personal-essay&#x2F;fate-stay-night-saved-my-life&#x2F;"/>
                <updated>2026-06-04T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;personal-essay&#x2F;fate-stay-night-saved-my-life&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Content_Warnings&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Content_Warnings&amp;quot; aria-label=&amp;quot;Anchor link for: Content_Warnings&amp;quot;&amp;gt;Content Warnings&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;This article covers some heavy topics including:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Suicide&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Mental Health&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Fascism&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;US Politics&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Religious Trauma&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;There is never any shame in prioritizing your mental health. If this is as far as you read, that’s totally ok. If you’d rather come back another time on a better day for you.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Spoiler_Warning&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Spoiler_Warning&amp;quot; aria-label=&amp;quot;Anchor link for: Spoiler_Warning&amp;quot;&amp;gt;Spoiler Warning&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Hey, I’m gonna be talking about the ending of “Fate&amp;#x2F; Stay Night: Unlimited Blade Works” extensively in this article. So like if you wanna go and watch that before I go and spoil everything, that’s super hecking valid.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Hot_Takes_Inbound&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Hot_Takes_Inbound&amp;quot; aria-label=&amp;quot;Anchor link for: Hot_Takes_Inbound&amp;quot;&amp;gt;Hot Takes Inbound&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Also, there are a handful of hot takes in here. And to get ahead of any possible assumptions you may have, I am &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;not&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt; going to argue that Fate is a “good” series. I simply don’t believe there is an objective way to prove any media is “good” in any universal sense. Rather I will be focusing on one component of the narrative and how I emotionally related to it.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;What_is_Fate?_And_why_does_it_stay_the_night?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_is_Fate?_And_why_does_it_stay_the_night?&amp;quot; aria-label=&amp;quot;Anchor link for: What_is_Fate?_And_why_does_it_stay_the_night?&amp;quot;&amp;gt;What is Fate? And why does it stay the night?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Fate is, originally, a visual novel. It was later adapted into many different anime series and films. Each would focus on a specific route of the game. The anime in question that I want to talk about is the adaptation of the “Fate&amp;#x2F;stay night” game’s “Unlimited Blade Works” route. If you want to experience the narrative in the original form, there is &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;store.steampowered.com&amp;#x2F;app&amp;#x2F;2396980&amp;#x2F;Fatestay_night_REMASTERED&amp;#x2F;&amp;quot;&amp;gt;a remaster of the game&amp;lt;&amp;#x2F;a&amp;gt; that came out in 2024 that seems to run on basically anything and looks very pretty.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Anyway I’ve actually never played the Visual Novels, the anime adaptations are mainly my understanding of the story. And that’s important to note because if there are any discrepancies that I am not aware of, that would be why I “get X wrong”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Also crucially I am talking about the 2014 iteration of the show instead of the 2006 “Fate&amp;#x2F;stay night”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;High_Level_Summary&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#High_Level_Summary&amp;quot; aria-label=&amp;quot;Anchor link for: High_Level_Summary&amp;quot;&amp;gt;High Level Summary&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The Fate series is a modern-fantasy hidden society story that takes place in the fictional Japanese city, Fuyuki. Which is generally inspired by Kobe city, the capital of Hyogo Prefecture. Within this world there are families of “mages” which pass down their magical arts generation by generation in the form of knowledge. Crucially, this means that there is nothing inherent to a person that prevents or allows them to interact with magic, but it does appear that one’s capacity for mana acts more like a muscle to be trained.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The main conflict of the story follows a “Holy Grail War.” In this story, rather than being “a cup of a carpenter”, the holy grail is a semi-sentient entity of raw magical power.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Some of the main plot of the anime follows the protagonist, Shirou Emiya (I am following western naming style, Given Name followed by Family Name. If you watch the anime in Japanese you probably know him more as “Emiya” than “Shirou” and that’s a fun language thing that is very interesting but I won’t get into it here because that is not the focus of this blog post). He is a boy that nearly died as a bystander in the previous Holy Grail War. Clearly the mages in Fate went to the MCU school of how to fight in a city.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Shirou was adopted by a very chill mage who wants to keep Shirou outside of the cycle of the Holy Grail war. Because of this he begins the story generally unaware of various aspects of magic, the Grail, the War, other mage families, and is basically just a clueless dudebro who just knows a few basic magics and uses them to just be an all around decent guy.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Surprise, as the heir to his magic family (The Grail is based as fuck for recognizing adoption as legitimate family structure BTW) he is now thrust into a magic battle royale against other people who have been training their entire lives for the day they are in this. Lucky for him a girl at school, Rin Tosaka (Tohsaka in some romanizations), is a fellow mage thrust into the war and holds herself to a high standard of honor.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Now a battle royale between different intellectual ancestries of magic would be cool enough as is, but in addition to that, the Holy Grail summons “Herioic Champions” as spirits to protect and fight for their mages. They are generally heroes from all of time that and then bound by contract to serve their “master” and referred to as “servant”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;For me, personally, I don’t feel comfortable using those terms here, and will be referring to the characters who do the summoning as “mages” and the summoned spirits as “champions”. No kink shaming for those that are into Master&amp;#x2F;Servant dynamics in their own lives, for me it’s mainly the context of the show that makes it feel a bit uncomfortable for me.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;The champions are all pigeon-holed into different “classes” but very different classes than you would expect. The champions have several rules around them. The mages are given three “Command Seal“s which the mage can expend to force a champion to obey the command. Which leads into the next wrinkle in the situation. The champions are fully people with their own free will. They volunteered to join the Grail War in the hope that they will be the last one standing with their mage and will receive the wish that winning the grail promises. Each champion also has something called a “Noble Phantasm” which is basically an ultimate ability that is based on who they were in life. Each champion has an imperative to hide their true identity, so they often are called by their class rather than their names, for example Archer, Saber, Rider, Assassin.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The champions have a contiguous memory and sense of time, so they can remember, learn, and grow over each grail war that they are summoned for. The Episode 0, which I highly recommend watching, follows Rin performing the summoning ritual to guarantee that she gets a powerful champion. Apparently Saber is &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;the&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt; premium champion. Arguably that is true in the case of Rin, who specializes in ranged magical attacks. But generally it seems like &amp;lt;em&amp;gt;everyone&amp;lt;&amp;#x2F;em&amp;gt; thinks Saber is the best of the best despite having no clue what her identity is.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The show itself has to have a lot of exposition which can bog down the pacing. Watching with my girlfriend I got to hear about how painful it can be for someone who doesn’t already have a special interest in the series. But hopefully that is painfully clear in just how much I had to write just to get you ready to understand even the narrative that affected me.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;The_Unlimited_Blade_Works_Route&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_Unlimited_Blade_Works_Route&amp;quot; aria-label=&amp;quot;Anchor link for: The_Unlimited_Blade_Works_Route&amp;quot;&amp;gt;The Unlimited Blade Works Route&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The main focus of the Unlimited Blade Works route follows Shirou repeatedly allying with Rin, and the scuffles that they both get into. Rin’s champion is Archer (my girlfriend called him Virgil because he looks like the character from Devil May Cry). Archer generally hates Shirou. And Shirou’s accidental summon of Saber makes Rin very jealous. Together they have to face off against some truly despicable people. Shirou is working through the ideals he wears like a mantle. He wants to be a “hero of justice” and believes that if he fights really hard he should be able to save everyone. He wants to avoid fighting when possible but if someone is being deeply immoral then his sense of justice wins over her desire to avoid fighting. Time and time again Archer contests against Shirou’s ideals and argues that he needs to be “more realistic” about his sense of justice. Towards the later end of the series, Archer straight up tries to kill Shirou several times, forcing Rin to expend a Command Seal to prevent him from killing Shirou before their alliance can come to fruition.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Eventually it comes to a point where Archer betrays Rin and pledges himself to another champion as their champion in order to “side with the winning team”. In a different way, Saber is forced to sever her ties with Shirou and is captured by another champion who tries to coerce her to pledge as well.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Shirou’s story eventually comes to a minor climax when he must face down Archer, who reveals himself to be the heroic champion of justice “Shirou Emiya”. (For clarity I’ll keep referring to him as Archer). Archer is Shirou from the future when he made good on his ideals and became such a true champion of justice that the holy grail took him in as a champion. Before being taken for the grail war, he was made into a “Guardian” who is dispatched by some cosmic entity that the show doesn’t really get into in order to save humanity during times of great peril. Archer is sent time and time again into horrific war situations and forced to kills hundreds of thousands in order to save humanity time and time again. Specifically during the sequence he describes this we are shown stills of different factions throughout history, such as people in what I think is ancient Egypt, modern Middle Eastern combatants, African child soldiers, different factions in medieval Europe, all bloody and broken by Archer’s supernatural powers. He grows more and more jaded at having his powers and his ideals used to cause such suffering of people deemed to be the cause of strife. (Uh oh I think this anime is getting a little political &amp;#x2F;s). Archer explains all of this to Shirou in an attempt to convince him to kill himself and save them both from that fate.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;My_damage&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#My_damage&amp;quot; aria-label=&amp;quot;Anchor link for: My_damage&amp;quot;&amp;gt;My damage&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I was raised Catholic. I was raised so damn Catholic that I was sent to a private Catholic school that was generally sub-par at being a school but very good at being Catholic. There I was always taught the “correct” faith which just so happened to be conservative Catholicism. My parents themselves are and were more progressive, basically “hippies” compared to the adults at the school. They encouraged me to base my faith on the simple premise “God is love” and “love one another as I have loved you.” The school&amp;#x2F;church I spent 9 years of my adolescence at, didn’t seem to agree. Generally I was told time after time that, as a mortal, I am inherently predisposed towards sin. And especially any deviance from being “normal” is giving in to that predisposition towards sinful living. (Another thing that I was apparently sinful for according to the adults at that school was not being racist enough. But if that’s a sin then maybe I’d really rather avoid heaven.)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I also developed the signifiers of Tourette’s Syndrome around the age of 5, the typical age for many neurological conditions to start making themselves known. Now thankfully this very modern and reasonable school decided to help me in the most reasonable way possible, they decided that I must be possessed by a demon and needed to be saved. My parents were more grounded but a doctor had suggested that I had a brain stem tumor so they weren’t doing so hot either.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This lovely little whirlwind of bullshit culminated when I started to go through puberty. Now if you know me outside of this article you may already know this, but I am transgender. So this first puberty was pretty traumatizing for me. I was feeling all kinds of different feelings that I couldn’t understand and I worried more and more that I was becoming some kind of sexual deviant. Of course along with the absolute flood of testosterone into my brain the sexual urges started as well. I wanted to experience things as a woman, all throughout my younger years, I was just hanging out with the girls at school because I related to them better. And it was only when we started “growing up” that the girls told me that I shouldn’t hang out with them anymore because of the social repercussions. Which was devastating. Of course around that same time, most of my peers were being told my their parents not to consort with me because my family had the “audacity” to adopt a child who wasn’t white. I generally wasn’t doing so hot and was getting more and more suicidal.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;My overall decision at this time in my life, at the ripe old age of 11, was that my entire life was forfeit. I fully believed that when I died, I would be sent to hell for my deviancy. Every time I tried to absolve myself of my sins through the Church prescribed method, I would struggle to express to the priest all of my deviancy, often for fear of punishment. And ultimately I determined that I would never be able to clear my soul of sin before death.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;My determination then was that the only good I could do in life was to sacrifice myself in any way possible to care for others and get their souls to heaven. I saw myself as a doomed soul who could only desperately offer themselves to others in servitude in the hopes that by some glimmering grace the god above would lend an ounce of mercy on my scarred soul. During this time I struggled severely with suicidal ideation. I frequently had to push down that urge to end myself. The only things that stopped me was knowing that the Church says that people who commit suicide go straight to hell no questions asked, and knowing that I would only be more of a burden on my family by causing them to clean up the mess of my death and fund the funeral and tend to whatever was left of my body and any other financial costs added in related to my death.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Side note&amp;lt;&amp;#x2F;strong&amp;gt;: It is currently my firm belief that religion does have a great capacity to be an uplifting and encouraging force in people’s lives, and for those that this is the case I highly encourage them to continue to pursue their faith in the ways that it serves them. But when religion is used as a cudgel to dissuade deviation from the norm, when religion is used to torment those that seek to find relief in it, that religion itself becomes morally bankrupt. It is for that reason that I no longer associate with the Catholic Church personally. My own trauma from the experience prevents me from seeing any god in a positive light. But I know that for those that have a positive experience with their faith, it can be a significant help in their life and I want them to be able to continue to pursue that religion as far as they like, provided they are not themselves using their religion as a cudgel on others like we see so often in the USA from “Christians” (who as far as I can tell have never read a single passage of Jesus’s teachings).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Why_the_story_is_so_damn_compelling&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Why_the_story_is_so_damn_compelling&amp;quot; aria-label=&amp;quot;Anchor link for: Why_the_story_is_so_damn_compelling&amp;quot;&amp;gt;Why the story is so damn compelling&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Over and over again Rin admonishes Shirou for putting others before himself. He is a character that strives against all odds to care for others, regardless of what suffering that brings himself. Which makes his character all the more sad as his future self describes how his very ideals of servitude and caring for others eventually betrays him as he is forced to kill and kill and kill only to save humanity from destroying itself. The two ends of Shirou demand that final confrontation.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Throughout the story we get different beats of foreshadowing like how Shirou finds Archer’s fighting style more natural to himself, how Shirou develops the ability to “project” (instantly create physical objects from raw mana) and his first projections are the same dual short-swords that Archer wields. The blades themselves are curved but one is a stark white while the other is a black with a grey hexagon outline patterning. They appear vaguely ancient and futuristic all at once and their dichotomy serves to further represent that internal conflict that Shirou&amp;#x2F;Archer undergo.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The question consistently is made of, how many people is Shirou or Archer willing to let die so that the greater number of people may live. Towards the end of the show Archer allies himself with a champion who is on track to kill all of the people living in Fuyuki city in order to better fuel her own mana and take the Holy Grail for herself. Shirou insists that any concession of lives is morally bankrupt.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;When the two clash their physical assaults are broken up by moments of banter, like all good fighting media. They spar verbally on their ideals as well as physically with their projections. Eventually Archer uses his ultimate ability (which the show insists is &amp;lt;em&amp;gt;not&amp;lt;&amp;#x2F;em&amp;gt; a “noble phantasm”), a “reality marble”. The Reality Marble places all that surround Archer, including himself, into a physical manifestation of his mentality. It is the same scene that is shown in subtle ways time and time again throughout the show prior, frequently in the opening of the second half of the season. It is a desolate wasteland with an “unlimited” number of swords all plunged into the sandy earth. They are all different swords from different eras and heroes. Archer describes them as copies of every original sword he has ever seen, and since the Grail had him  popping into different moments in time for an unspecified duration, he has seen quite a few different swords. Archer’s power to project swords comes from his physche where he stores every sword he has ever seen.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Here Shirou demonstrates his sheer tenacity and holds to his ideals even stronger. He demonstrates that he will never become the person that Archer is because he is fully committed to fighting as hard as he can to ensure that everyone in the world gets the chance to smile. And he admits that he will never succeed absolutely, but that in and of itself is the very nature of an ideal. Few ideals are possible to create within reality, but striving for them is the noblest thing one can do, and it is what Shirou commits himself to with Archer and Saber as his witnesses. It is with this pledge and one final assault that he finally beats Archer who is so fully taken aback by Shirou that he accepts Shirou will never become the person he did.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;How_in_the_hell_did_this_save_my_life?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#How_in_the_hell_did_this_save_my_life?&amp;quot; aria-label=&amp;quot;Anchor link for: How_in_the_hell_did_this_save_my_life?&amp;quot;&amp;gt;How in the hell did this save my life?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Who am I? Certainly not a “hero of justice” nor a mage, nor a badass sword fighter. But I am, or at least I choose to identify myself as, an artist. I have been having a “crisis of faith” as it were. I was struggling to create and struggling to find a reason to carry on through all the horrors and pain that have been happening recently. Again, I live in the USA in the year of all kinds of bullshit, 2026. My country that I have lived in for my whole life is careening towards fascism with a smile on its face, the highest courts of the country are doing everything they can to purge any remnant of civil rights, mobs of dumb white fascists in ski masks and military cosplay are being given &amp;lt;em&amp;gt;carte blanche&amp;lt;&amp;#x2F;em&amp;gt; to harass, arrest, deport, detain, abuse, torture, and murder anyone they deem to be “probably foreign” (Even going so far as to determine someone must be here illegally because they speak with a ‘foreign sounding accent’). My country that I live in is by and large, supremely fucked. And the overall global hegemony seems to be placing the USA in power, with many countries choosing to walk on eggshells around Trump or to bend over backwards trying to appease him. The man who himself is a crybaby, a bully, a pedophile, a fascist, a war monger, narcissist, and is gleefully dismantling anything that he thinks will get him more popularity while destroying the very fabric of society. And all he is even doing is exploiting the fundamental problems our country already had. In the face of all of this, the fear of being persecuted for being trans, the fear that I will never find a future in this country, the knowledge that if this continues to go on unfettered it may reach a time where I am no longer able to move voluntarily but will be forced to flee or submit. All of this fear and anguish, grief over the loss of a home that I never moved away from, it broke me. How could I create art when all I felt was pain. How could I bring joy to others when I felt none in my heart.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I was struggling to move on, I had to take a day off work to try and recover mentally. My girlfriends (polyamorous BTW) were urging me to rest and take a break. Luckily the weekend came before I completely broke down. That weekend I went and visited my local girlfriend and we watched anime, had good food, cuddled, and generally had a really good time. It was very restorative. And the reminder of how good art, no matter when it was made, can give such joy to someone who couldn’t possibly ever track down the creative(s) behind it helped to put things into perspective.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Shirou’s inner conflict, externalized through Archer as a foil, gave me greater determination to strive for the very reason that I got into making games. And it told me that it’s OK if I don’t match that ideal beat for beat, so long as I strive for the ideal then the work is noble enough as it is. And by existing as a piece of art originally made back in 2004, adapted by other creatives several times culminating in a 2014 iteration that captured my heart when I was in college enough that I thought to make my girlfriend watch it with me, Fate found a way to burrow into my heart and tell me that everything was going to be okay like the story itself was a “guardian” chosen by the grail to transcend time and space and gift joy into the hearts of people.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;And that’s just it, by nature art is not ephemeral. Art stays existing for as long as we preserve it. Art can transcend time, space, language, and it can touch the hearts of people that the creator(s) could never have anticipated.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Why_I_make_games&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Why_I_make_games&amp;quot; aria-label=&amp;quot;Anchor link for: Why_I_make_games&amp;quot;&amp;gt;Why I make games&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I have spent a significant portion of my life struggling against my depression. It has been hard and there are many different “weapons” in my arsenal to help me fight. Prescriptions make it easier, being recognized as my gender in society makes it easier, having people who love and support me makes it easier, and having something to live for definitely makes it easier. When any one of these starts to falter, I risk slipping backwards in my mental state. But the thing that always seems to bolster me in this fight is art. Stories through games, books, movies, TV (which is where I am lumping in anime for the dorks that like to think that Japanese television shows are somehow some higher form of art than any other television media), have all touched my heart one way or another.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Horror games in particular bolstered me when I was at my lowest. When I had none of the things that help me fight, horror media got me through. And so now that I find myself relatively stable and able to give back to communities that got me through the lowest points of my life, I ask what I can give. And the answer is resoundingly, “comfort.” I am one of many who believes that art, including horror, should serve to “comfort the afflicted and afflict the comfortable.” I create horror to strike terror into those that have no concept of living in fear while at the same time showing those who feel it every last day that they are not alone. That they will &amp;lt;em&amp;gt;never&amp;lt;&amp;#x2F;em&amp;gt; be alone. And the comfort of knowing that art can transcend time and space gives me hope of someday creating something that will touch the heart of someone struggling. That the things I create can bolster someone else who is struggling through their lowest point. That maybe just maybe, I can change someone else’s life for the better.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;And like Shirou taught me, I can’t promise that I will always succeed. But I can promise that I will always fight like hell to get there.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
    
        
        
            
            <entry>
                <title>The Boy And His Paints</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;stories&#x2F;theboyandhispaints&#x2F;"/>
                <updated>2025-07-25T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;stories&#x2F;theboyandhispaints&#x2F;</id>
                <content type="html">&amp;lt;p&amp;gt;A young boy gathered clays and oils and flowers and ground them into pastes. He mixed various ingredients to make different colours and sold them in his mother’s market stall. The people of his town came to love the interesting colours he was able to make and took joy in accenting their homes, artworks, and tools with affectations of the boy’s paints.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;As he grew older, the boy began to daub the paint himself on tapestries. No one was able to paint the intricate depths of colour in a crashing river, nor the violent waves of a setting sun. No one could capture the elegant movement of soaring deer through the glens. And all the people revelled in the beauty.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;As he was just becoming a man, he had earned for himself enough to buy a small storefront for his mother. There, they were able to sell plenty to feed their family and extra to take care of those around them. They were truly blessed, and the people shared in their joy.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;But then a time came where war marched through their town. None could say which side was which or who was right. Few even knew of the nascent countries forming this squabble. Yet the town became trampled and ravaged by this war. Each side tried to claim the village as their own. The townspeople took up their tools and barricaded their homes. They armed themselves with what they could and hid their children in the forest. They aimed to take back their home as best they could.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;But the young boy, now a young man, began to gather his paints, and daub the colours across the barricades, and on the tools, even some on the people. He shared the colours of the river and the seas. He shared with his people the sunset and the sunrise. The elegant deer and the powerful hunters.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Then the people began to cry, “Boy! Why haven’t you taken up your tools to defend our home? You make beauty but beauty cannot save us.”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;And the boy smiled as he replied, “Why I believe it is only beauty that can save us. It is my paints that drew my family from poverty. It was my art that pulled our town out of poverty. It was in the beauty that we were able to rejoice year after year even when crops grew poorly. Even your tools for war are painted in beauty. And now even those that fight us, will first have to see our humanity. They will see that we are every bit the people they are. And only those who can ignore that truly deserve the end of the blade.”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;(448 words)&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>The Seductive Ritual</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;stories&#x2F;seductive-ritual-cw&#x2F;"/>
                <updated>2025-07-23T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;stories&#x2F;seductive-ritual-cw&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;If_you_are_under_18_turn_back_now!!!!!!&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#If_you_are_under_18_turn_back_now!!!!!!&amp;quot; aria-label=&amp;quot;Anchor link for: If_you_are_under_18_turn_back_now!!!!!!&amp;quot;&amp;gt;If you are under 18 turn back now!!!!!!&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h1 id=&amp;quot;Content_Warnings_for:&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Content_Warnings_for:&amp;quot; aria-label=&amp;quot;Anchor link for: Content_Warnings_for:&amp;quot;&amp;gt;Content Warnings for:&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Outdoor sex&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;authority figure&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;jealousy&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;witchy stuff&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;trans woman X cis woman&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;interruption&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h2 id=&amp;quot;Read_here&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Read_here&amp;quot; aria-label=&amp;quot;Anchor link for: Read_here&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;stories&amp;#x2F;seductive-ritual&amp;#x2F;&amp;quot;&amp;gt;Read here&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
</content>
            </entry>
            
        
            
        
    
        
        
            
            <entry>
                <title>Attestation Of Resistance to Usages of LLM AIs in Academic Settings</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;anti-llm-attestation-2025-11-07&#x2F;"/>
                <updated>2025-11-07T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;anti-llm-attestation-2025-11-07&#x2F;</id>
                <content type="html">&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Please note that this was originally written for my own personal usage within my experiences in a college setting and within the MNSCU system. Other university and colleges may have different core requirements of students. If you draw inspiration from this, YMMV&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;Dear professor,&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I am choosing not to write this with the academic rigor any typical essay would require. This is not that kind of writing.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;If you are reading this there is likelihood that you are assigning coursework that requires and&amp;#x2F;or encourages the use of an LLM AI to assist or complete. This document is here my declaration and explanation of why I detest such things and why it is my firmest belief that such shortcuts in reasoning have no place in academia.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;First a background, as it is also likely that you do not know me well on a personal basis. I am, generally speaking, associated more with arts and creation that technology, though my declared major may have misled you on this. I draw art, I sing, I do voice acting, I create videos, I develop video games, and I write stories. Even this is not a fully exhaustive list of my varied artistic endeavors. I also know the tale of the starving artist. And I have seen this play out time and time again. Hell I’ve lived it for a time. I aim to secure a job that pays me enough money that I can indulge in these artistic pursuits. That is my primary goal in life. And since I find myself somewhat adept with writing code to make funky things happen on computers, I chose software engineering as a solution for acquiring funding.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Hopefully I need to inform you the things that are being done in the technology space with LLM AIs to replace creatives in creative spaces. The use of LLMs immediately after their achievement of baseline passability in the public sphere should be a horrifying concept to any decent person but especially Americans living today who can see the ways our government is choosing to use this technology.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;A common reasoning for the “value” of AI generated arts is that it “democratizes” the artistic process. I call absolute bullshit on that. Art has never been a thing that requires much of anything. You can take a bus to the local library, or walk if it is close enough, and use a freely available computer to use a freely available word processing application to put a series of keystrokes together to form a series of sentences and phrases and altogether it creates art. The claim of using LLM AI assists for creating of art due to lack of skill only furthers the demonstrably harmful fixed mindset. My entire childhood teachers were fighting tooth and nail to help students learn growth and how to focus on that growth. I grew up watching Bob Ross paint before the morning cartoons. As he often said, “Anybody can paint.”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Another issue I have with these LLM AIs is the generation of fluff. Why do we have word requirements in essays? Why do we write emails? Why do we communicate with other flesh and blood human beings? To me, the usage of an LLM to “create” these kinds of things says to me: “I couldn’t care a single drop less about this, but I expect you to care about it enough to ingest it in its entirety.” What is the value added by one person using an AI to expand their bullet point list of information into a multi-paragraph long email if the other person is then expected to use an AI to summarize that. A double-ended non-deterministic filter is being applied on the information that one person is trying to express. You wouldn’t want to dilute your message with fluff or risk a misunderstanding in effective communication. The usage of LLM AIs in this space only serves to degrade the quality of communications while selling the solution to a problem that it creates.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;So to continue the thread of monetary affects the surge of LLM “creation” has, it is worth looking at economics as well. Even the most basic plan (anything above the free tier) of ChatGPT has been $20 USD per month, which runs $240 per year not accounting for taxes or potential changes in pricing. Now oppose that to the yearly gross income of someone working full time while earning the federal minimum wage. They would earn $7.25 per hour, reaching $15,080 per year ( $1,256.67 monthly average). That means that a worker earning the absolute minimum that a company can pay them is just over a 500% markup in price. Another notable element that I doubt I need remind you is that we exist in a free market capitalist economy. Any entity within this economy is able to set prices as they see fit proportional to demand and its elasticity. In the United States, having effective health care all but requires employment with a decent company. Likewise the typical cost of living in any given area typically exceeds that of a minimum wage worker. Simply put, the typical American cannot afford to live here. And they can’t afford to leave. And now we introduce a technology that gives companies a steep discount on employing these workers. LLMs do not require a benefits package. They don’t require breaks, or food. All they require is all the water on our planet and every single joule we can extract from our dying planet’s remaining natural resources. When I look and see what  is happening in the world with respect to AI, I do not feel hope. I feel fear and abject horror and the atrocities that are completely avoidable. But the demand of our market is that any given company raises their profits year by year. Where is this infinite growth going to come from? Is there a spare planet for the coal and oil to come from? An exoplanet that we can harvest hydrogen and oxygen from? Are those methods even reasonably adequate to afford us this reckless cost to our resources. A single query of ChatGPT is expected to consume roughly 0.001 to 0.01 kWh. To put that into proper context, a web search using google consumes roughly 0.0003 kWh. Assuming purely linear energy consumption of web searches, one could perform 3 to 33 google web searches before consuming the same energy as asking ChatGPT..&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Time and time again throughout my life I have watched “once in a lifetime” economic events. My family has experienced a number of hardships just to get to today. I can only even afford to pay for this schooling due to a payment plan my company that I work for is helping me do. And that is an entire other discussion that I have equally strong thoughts about. But to avoid getting too far off track, please understand that this choice is not a victimless action. Ambivalence and centrism only serve the dominant force.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Now to discuss the academic side of things. Personally, I would state that the primary value of attending formal higher education (post-secondary education, colleges, universities, I’m going to oversimplify that a bit) is to gain a particular set of skills that can be valuable for an individual’s life and career. Notably:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Experience from and with professionals in the student’s field of interest&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Gain valuable critical thinking skills that enable one to experience and interrogate the world around them in professional and private settings&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Develop oneself into a member of a productive society, contributing to the well-being of themselves, their loved ones, their community, and their country.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;It may be important to note the core goal areas required of any graduate in the Minnesota State Colleges &amp;amp;amp; Universities system:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Communication&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Critical Thinking&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Natural Sciences&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Mathematical &amp;#x2F; Logical Reasoning&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;History and the Social and Behavioral Sciences&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Humanities and the Fine Arts&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Human Diversity, Race, Power, and Justice in the United States&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Global Perspective&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Ethical and Civic Responsibility&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;People and the Environment&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
&amp;lt;p&amp;gt;It is my firm belief that any person willing to contend with the expected goal areas of our educational system would be able to understand how harmful the rampant use of LLM AIs is. Any one of these goal areas should provide enough reason to avoid the use of LLMs.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;We are not “living in the future”, “democratizing art”, or “saving time and effort”. We are killing our planet and ourselves while laughing at shitty pictures of generated clones of existing artwork.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Note once again that while this is not a formal essay or academic paper, I felt the urge to provide some resources that I used for my reasoning and estimations.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.npr.org&amp;#x2F;2024&amp;#x2F;10&amp;#x2F;18&amp;#x2F;nx-s1-5153741&amp;#x2F;ai-images-hurricanes-disasters-propaganda&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;www.npr.org&amp;#x2F;2024&amp;#x2F;10&amp;#x2F;18&amp;#x2F;nx-s1-5153741&amp;#x2F;ai-images-hurricanes-disasters-propaganda&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.businessenergyuk.com&amp;#x2F;knowledge-hub&amp;#x2F;chatgpt-energy-consumption-visualized&amp;#x2F;&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;www.businessenergyuk.com&amp;#x2F;knowledge-hub&amp;#x2F;chatgpt-energy-consumption-visualized&amp;#x2F;&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;dev.to&amp;#x2F;nilanth&amp;#x2F;how-much-energy-does-chatgpt-use-per-prompt-a-look-at-its-hidden-environmental-costs-2j3a&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;dev.to&amp;#x2F;nilanth&amp;#x2F;how-much-energy-does-chatgpt-use-per-prompt-a-look-at-its-hidden-environmental-costs-2j3a&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;kanoppi.co&amp;#x2F;search-engines-vs-ai-energy-consumption-compared&amp;#x2F;&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;kanoppi.co&amp;#x2F;search-engines-vs-ai-energy-consumption-compared&amp;#x2F;&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;medium.com&amp;#x2F;@sohail_saifi&amp;#x2F;the-real-environmental-cost-of-every-google-search-with-actual-calculations-6b72e2dd7f3c&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;medium.com&amp;#x2F;@sohail_saifi&amp;#x2F;the-real-environmental-cost-of-every-google-search-with-actual-calculations-6b72e2dd7f3c&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.minnstate.edu&amp;#x2F;admissions&amp;#x2F;transfer&amp;#x2F;mntc.html&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;www.minnstate.edu&amp;#x2F;admissions&amp;#x2F;transfer&amp;#x2F;mntc.html&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>The Balugust Bust</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blaugust-bust&#x2F;"/>
                <updated>2025-08-23T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blaugust-bust&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Blaugust&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Blaugust&amp;quot; aria-label=&amp;quot;Anchor link for: Blaugust&amp;quot;&amp;gt;Blaugust&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;So &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;nerdgirlthoughts.game.blog&amp;#x2F;2025&amp;#x2F;07&amp;#x2F;10&amp;#x2F;blaugust-2025-is-coming&amp;#x2F;&amp;quot;&amp;gt;Blaugust&amp;lt;&amp;#x2F;a&amp;gt; is very similar to NaNoWriMo where a bunch of people who have independent blogs try to get out a certain number of articles. And my original goal was to hit the 10 article goal. I’m ready to call it a bust with 8 days left. Mainly that’s due to how frickin busy I’ve been these last few weeks. So maybe in the spirit of not completely giving up, I wanted to write this article on why I failed.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;I’m_going_back_on_a_lot_of_things&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#I’m_going_back_on_a_lot_of_things&amp;quot; aria-label=&amp;quot;Anchor link for: I’m_going_back_on_a_lot_of_things&amp;quot;&amp;gt;I’m going back on a lot of things&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;So I’m returning in many different ways to things I’ve done before. And this is for various reasons.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Back_to_school&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Back_to_school&amp;quot; aria-label=&amp;quot;Anchor link for: Back_to_school&amp;quot;&amp;gt;Back to school&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;billy-madison-back-to-school.gif&amp;quot; alt=&amp;quot;A scene from the movie Billie Madison where Adam Sandler is pacing and saying the words, &amp;amp;amp;#x27;Back to school. Back to school. To prove to dad I&amp;amp;amp;#x27;m not a fool&amp;amp;amp;#x27;&amp;quot; title=&amp;quot;A scene from the movie Billie Madison where Adam Sandler is pacing and saying the words, &amp;amp;#x27;Back to school. Back to school. To prove to dad I&amp;amp;#x27;m not a fool&amp;amp;#x27;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A scene from the movie Billie Madison where Adam Sandler is pacing and saying the words, &amp;amp;#x27;Back to school. Back to school. To prove to dad I&amp;amp;#x27;m not a fool&amp;amp;#x27;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;Yeah I’m going back to school so I can have a proper Software Engineering degree for my resume. Especially with the rise of automated filtering, literally the title is almost necessary unless I can network my way in. So for the eventuality that I want to work at a company that I can’t talk my way into, I want that pretty little piece of paper (Arguably it’s kindof a big piece of paper but you get my drift. Right? Please!?? Please take ittt).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I’m taking accelerated classes while working fulltime. So in short the next few years of my life are probably gonna suck. But I’ve been trying to find small gems of joy. Like flirting on social media (hey cutie~) and working on my various creative endeavors (oh wow like this very blog? And also some games but I haven’t published an actual game in &amp;lt;em&amp;gt;years&amp;lt;&amp;#x2F;em&amp;gt; now).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Back_to_…_Godot?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Back_to_…_Godot?&amp;quot; aria-label=&amp;quot;Anchor link for: Back_to_…_Godot?&amp;quot;&amp;gt;Back to … Godot?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;lets-godot-let&amp;amp;#x27;s-godot.gif&amp;quot; alt=&amp;quot;A stick figure with the godot logo for a face dancing as the text reads &amp;amp;amp;#x27;let&amp;amp;amp;#x27;s godot&amp;amp;amp;#x27; which is a play on the phrase &amp;amp;amp;#x27;let&amp;amp;amp;#x27;s go&amp;amp;amp;#x27; because they sound similar&amp;quot; title=&amp;quot;A stick figure with the godot logo for a face dancing as the text reads &amp;amp;#x27;let&amp;amp;#x27;s godot&amp;amp;#x27; which is a play on the phrase &amp;amp;#x27;let&amp;amp;#x27;s go&amp;amp;#x27; because they sound similar&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A stick figure with the godot logo for a face dancing as the text reads &amp;amp;#x27;let&amp;amp;#x27;s godot&amp;amp;#x27; which is a play on the phrase &amp;amp;#x27;let&amp;amp;#x27;s go&amp;amp;#x27; because they sound similar&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;Yeah so turns out I really couldn’t be assed to manage windowing, rendering, and scene structuring myself. So the SFML based game idea is going straight to the trash (I never made a blog post about it LOL). Though if you are curious how far I got I did make &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;codeberg.org&amp;#x2F;QueenOfSquiggles&amp;#x2F;sfml-cs-test-game&amp;quot;&amp;gt;a repository for the code&amp;lt;&amp;#x2F;a&amp;gt;. It should run just fine.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;But what I found is that the current most robust engine for rendering, windowing, scene structuring, and in general making games with C# is… Unity? Fuck that I’m using Godot.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;So if you aren’t familiar (somehow? Goddam how’d you get here??) Godot is a fucking awesome open source game engine that has its own scripting language called &amp;lt;em&amp;gt;GDScript&amp;lt;&amp;#x2F;em&amp;gt; but every version of the engine has an alternative .NET version which allows writing C# code instead. So I can hail back to literally my most popular game I’ve ever made, &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;games&amp;#x2F;ascension-of-the-lamb&amp;#x2F;&amp;quot;&amp;gt;The Ascension Of The Lamb&amp;lt;&amp;#x2F;a&amp;gt;, which I made using Godot 3 way back in the day.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;A huge plus since I’ve been gone is that Godot is updated to a more modern C# version as of Godot 4.4, which enables a ton of timesaving tricks like the “with” syntax.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;csharp&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #8B949E;&amp;quot;&amp;gt;&amp;#x2F;&amp;#x2F; Before&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt;var&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA657;&amp;quot;&amp;gt; temp&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; GodotVector;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;temp.X&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; NewValue;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;GodotVector&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; temp;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #8B949E;&amp;quot;&amp;gt;&amp;#x2F;&amp;#x2F; Now&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;GodotVector&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; GodotVector&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; with&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; { X&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; NewValue};&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;Now the reason I wanted to work with C# instead of Rust is because I’ve been advised by some coworkers that it would greatly improve my ability to find a job. And frankly, I want to make games that my friends can play. Not all of my friends have computers with dedicated graphics (which Bevy basically requires AFAIK). My main basis for this is that my laptop is a &amp;lt;del&amp;gt;total shitbox&amp;lt;&amp;#x2F;del&amp;gt; interesting AMD chipset for integrated graphics that even AMD struggles to support. So somehow every time I boot it up there’s an 80% chance the Linux Mint installation will not recognize the GPU and I’ll be stuck with LLVM-pipe, which sucks so much ass in terms of performance bc the CPU isn’t all that strong anyway.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Back_to_potato&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Back_to_potato&amp;quot; aria-label=&amp;quot;Anchor link for: Back_to_potato&amp;quot;&amp;gt;Back to potato&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;So I also want to ensure I make games that can run on low end PCs that only support OpenGL. Maybe someday I’ll look into pure software rendering? But unless someone specifically tells me that it’s necessary, I prefer the convenience of OpenGL and the GLSL shading language. And so Godot (as of like version 4.4 I think) will automatically fall back on OpenGL instead of strictly requiring Vulkan. Which means for PCs that support it, they can zoom. But weraker PCs should still be able to play the game, likely at a slower FPS than that of Vulkan.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Back_to_the_blog&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Back_to_the_blog&amp;quot; aria-label=&amp;quot;Anchor link for: Back_to_the_blog&amp;quot;&amp;gt;Back to the blog&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Oh yeah so if you’re reading this anytime after publishing, yeah I’m back on writing stuff for the blog. I wanna get into a better habit with this blog. In fact I’ve already had someone messaging me to fix some broken RSS links on my site. Which was kindof annoying because Zola (the static site generator I use) theoretically checks links when it builds and fails if any of the links are dead. But I guess if I do templating code it does not offer that safeguard. I should have assumed that but I didn’t. Ope.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I’ve got a couple things I’ve thought of (some I’ve even done already!~)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Relocate blog to Codeberg based hosting to get off of GitHub’s AI scraping hellhole&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Purge as much JavaScript from my website as possible
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;I’m now considering JavaScript running on this blog to be a bug. And I’m slowly purging different embeds from legacy pages as I go.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Reorganize blog to enable extra interests of mine
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;I’ve gotten back into creative writing. And some of that I’ve published on this blog in the &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;stories&amp;#x2F;&amp;quot;&amp;gt;Stories Section&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot; checked=&amp;quot;&amp;quot;&amp;#x2F;&amp;gt;
Spruce up my portfolio with newer things like SSBS and such&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;#x2F;&amp;gt;
Make another game to finally have made a new game&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;#x2F;&amp;gt;
(Still Undecided) Change the “meta” section to “personal”
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Currently it’s called “meta” because it’s supposed to be metatextual articles about the blog as a whole and what I plan to do with it. However I really just talk about myself and what’s going on in my life here, so I figure a rename may be warranted.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;input disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;#x2F;&amp;gt;
Finally get an email “comment” on my blog?
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Oh wait that’s on your todo list isn’t it ;D&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h1 id=&amp;quot;What_I’ve_been_up_to&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_I’ve_been_up_to&amp;quot; aria-label=&amp;quot;Anchor link for: What_I’ve_been_up_to&amp;quot;&amp;gt;What I’ve been up to&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I talked above about creative writing. I actually have a book that’s self-published out there already. It’s only sold to family members for now. And I realized I really shot myself in the foot using my &amp;lt;em&amp;gt;actual name&amp;lt;&amp;#x2F;em&amp;gt; as the author instead of a penname because I’d feel comfortable promoting it on my online channels if I had used a penname! So for now I just write short stories and I’m hoping to finish a shorter novel or two someday (maybe they’ll be novellas IDFK).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Spicy_Time&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Spicy_Time&amp;quot; aria-label=&amp;quot;Anchor link for: Spicy_Time&amp;quot;&amp;gt;Spicy Time&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;So if you checked out my stories section you may have noticed a fun little “🔞” on one (or more) of those stories. That’s because I’ve been playing around with writing erotica. And apparently it’s not half bad. I’ve also heard from some friends that it’s “surprisingly wholesome given the subject matter and genre.” which I’ve elected to decide is a compliment on my writing ability and not myself just being a big old vanilla softie who likes missionary and hand-holding.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;My_Life_Is_Like_A_Video_Game_Romance_Novel&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#My_Life_Is_Like_A_Video_Game_Romance_Novel&amp;quot; aria-label=&amp;quot;Anchor link for: My_Life_Is_Like_A_Video_Game_Romance_Novel&amp;quot;&amp;gt;My Life Is Like A &amp;lt;del&amp;gt;Video Game&amp;lt;&amp;#x2F;del&amp;gt; Romance Novel&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Yeah so turns out I’m poly? And I now have two adorable girlfriends who treat me so well. And one of those relationships is relatively fresh so I’ve been struggling to muster the desire to work on my usual pile of projects when I could just be flirting with a girlfriend instead? I’m like, super duper gay NGL.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;All_work_and_no_play_makes_Squiggles_a_dull_fae&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#All_work_and_no_play_makes_Squiggles_a_dull_fae&amp;quot; aria-label=&amp;quot;Anchor link for: All_work_and_no_play_makes_Squiggles_a_dull_fae&amp;quot;&amp;gt;All work and no play makes Squiggles a dull fae&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I’ve been working a ton. Specifically in order to fund my schooling, pay off my studen loans from my previous degree, and also keep up with basic costs of living despite still living with my parents. With my current income, the choice was paying debts or living independently. And not getting a bounty hunter chasing my ass sounded like a good plan.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This does mean I’ve been stealing joy where I can usually in the form of watching dumb YouTube videos. Cuddling my more local girlfriend (long distance sucks and I will beat Palkia’s ass about that). And sometimes having the energy to work on a project.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;A_Successful_Failure&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#A_Successful_Failure&amp;quot; aria-label=&amp;quot;Anchor link for: A_Successful_Failure&amp;quot;&amp;gt;A Successful Failure&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;All in all, the “participation” in Blaugust was good for me. It encourages me to really focus on my blog. Unfortunately 99% of the work on my blog has been things like adjusting the CSS and templating, or adjusting structure of articles and feeds. Fixing various bugs like HTML not being properly escaped in feeds and dead links thanks to auto-formatting affecting hard-coded links.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;So yeah I sure as fuck didn’t hit that 10 article goal. And with my only articles in the backlog being two smut stories and maybe a post about my current long term game project JKTD, I could just maybe push out a few moere articles to be just shy of half my goal. But I have to return to my reason for this blog. I blog because I want to. Because I enjoy writing out my thoughts and ideas and sharing knowledge with people in a freely accessible way. Rushing to finish wouldn’t leave me with anything that I could be proud of. So I won’t.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;That being said, yes I have stories on the backlog. And I’m even considering posting singlet chapters and snippets from larger story projects. Like a YA dystopia&amp;#x2F;utopia novel (i.e. not smut) focused on interpersonal relationships and desire inspired by my frustration with RWBY’s writing. Or a story about an atheistic catholic priest who’s haunted by a terrible past in a supernatural horror mystery story. Which is partially available on my &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.scribblehub.com&amp;#x2F;series&amp;#x2F;1565424&amp;#x2F;the-faithless-father&amp;#x2F;&amp;quot;&amp;gt;ScribbleHub&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Engine Switch 2024</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;engine-switch-2024&#x2F;"/>
                <updated>2024-09-27T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;engine-switch-2024&#x2F;</id>
                <content type="html">&amp;lt;p&amp;gt;To be real, this post has been a long time coming. I’ve been toying in my head with how I want to go about this. So hey, here it goes&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Godot_is_seriously_awesome&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Godot_is_seriously_awesome&amp;quot; aria-label=&amp;quot;Anchor link for: Godot_is_seriously_awesome&amp;quot;&amp;gt;Godot is seriously awesome&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Before anyone gets all tribalistic about this: Godot is incredible. It is an amazing software that lets people with even the most minimal experience make games. And almost every week I personally see another reason to love this funky little game engine. So before we begin, please please please don’t think that just becauses I have a newfound love of bevy that it means it’s better than Godot. Game Engines are (usually) subjective. Use the tool that works for you and is enjoyable to use!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Bevy_is_also_seriously_awesome&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Bevy_is_also_seriously_awesome&amp;quot; aria-label=&amp;quot;Anchor link for: Bevy_is_also_seriously_awesome&amp;quot;&amp;gt;Bevy is also seriously awesome&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I’ll lead with a brief description, shamelessly stolen from &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;bevyengine.org&amp;#x2F;&amp;quot;&amp;gt;Bevy’s website&amp;lt;&amp;#x2F;a&amp;gt;. Bevy is “A refreshingly simple data-driven game engine built in Rust[;] Free and Open Source Forever!”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;There are a few key areas that I wanna drill down for why I think Bevy is so cool, without needing to compare it to any other engines.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;As a side note, my hot take is that Bevy is more accurately a “framework” rather than an “engine” since my definition of engines, frameworks, and libraries break down as such:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;An engine is an executable software that dispatches your code (typically a scripting language) as it sees fit based on the engine’s design&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;A framework is code that gets compiled (or included for non compiled languages) into your application and takes control of the application’s main thread.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;A library is code that gets compiled into your application but does not take control over the application’s main thead (save situations like blocking and sleeping)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;It is probably of note that these definitions are distinctly different from existing attempts such as &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;gamefromscratch.com&amp;#x2F;gamedev-glossary-library-vs-framework-vs-engine&amp;#x2F;&amp;quot;&amp;gt;GameFromScratch&amp;lt;&amp;#x2F;a&amp;gt;)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;!-- I think I like using this label system for managing hardcoded links --&amp;gt;
&amp;lt;h2 id=&amp;quot;Rust&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Rust&amp;quot; aria-label=&amp;quot;Anchor link for: Rust&amp;quot;&amp;gt;Rust&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Bevy is written in rust, users write in rust, and (with some limitations) any platform that rust supports targeting should be able to run the compiled application.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Because of Rust’s language features, memory safety is just inherent to the development of the game.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;ECS&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#ECS&amp;quot; aria-label=&amp;quot;Anchor link for: ECS&amp;quot;&amp;gt;ECS&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;ECS (Entity Component System) is a style of development you may have heard of if you’ve been in game development long enough. It’s a design that allows everything to be broken down into &amp;lt;em&amp;gt;entities&amp;lt;&amp;#x2F;em&amp;gt; which are defined by their attached &amp;lt;em&amp;gt;components&amp;lt;&amp;#x2F;em&amp;gt; which store data that can be queried and transformed by &amp;lt;em&amp;gt;systems&amp;lt;&amp;#x2F;em&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Overall it is really conducive to Data Driven Design, which is a really cool paradigm that operates fairly differently than traditional OOP (Object Oriented Programming) that you’d find in Unity or Godot.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Yeah I know it’s a comparison to other engines but I wanted to illuminate a key detail here as a fun tool we can use later!.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Free_and_Open_Source&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Free_and_Open_Source&amp;quot; aria-label=&amp;quot;Anchor link for: Free_and_Open_Source&amp;quot;&amp;gt;Free and Open Source&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;If you’re someone reading this blog and know me from social media, you’re probably already on this and hopefully agree that having open source code for the tools you use (especially as a programmer) is a massive boon. Adding in that the engine itself is written the same as the games, and that drops the barrier to contribute code by a significant margin!.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Simple&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Simple&amp;quot; aria-label=&amp;quot;Anchor link for: Simple&amp;quot;&amp;gt;Simple&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;This might not get a whole lot of attention but a key detail about Bevy is the simplicity. Components are typical rust structs, systems are just rust functions. Everything is fairly simple to set up and makes liberal usage of &amp;lt;code&amp;gt;Default::default()&amp;lt;&amp;#x2F;code&amp;gt; and builder patterns. And this simplicity doesn’t get in the way of writing more advanced code systems.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;What_I’ve_been_up_to&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_I’ve_been_up_to&amp;quot; aria-label=&amp;quot;Anchor link for: What_I’ve_been_up_to&amp;quot;&amp;gt;What I’ve been up to&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Since checking out bevy, I started working on a couple different projects to whet my appetite for this engine.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Games&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Games&amp;quot; aria-label=&amp;quot;Anchor link for: Games&amp;quot;&amp;gt;Games&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I’ve started out on one game and I’m planning to get working on a second as time allows.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Watery_Wails&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Watery_Wails&amp;quot; aria-label=&amp;quot;Anchor link for: Watery_Wails&amp;quot;&amp;gt;Watery Wails&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Watery Wails is a horror game inspired by the &amp;lt;em&amp;gt;Five Nights At Freddy’s&amp;lt;&amp;#x2F;em&amp;gt; series of games. Notably the original few games. It is also heavily inspired by experiences in my past including working at a pool as a lifeguard and some pretty tragic things I ended up witnessing there. Which is why I joke that it’s “made with trauma” (probably not a great joke but it helps me cope).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This game is planned to include a breadth of changes from my previous style of development. Notably usage of Bevy, unit testing, Hierarchical Task Network Planning (think super-charged GOAP), and tools for making translation files.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Magical_Farming,_Cooking,_and_Ranching_Game_(Title_TBD)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Magical_Farming,_Cooking,_and_Ranching_Game_(Title_TBD)&amp;quot; aria-label=&amp;quot;Anchor link for: Magical_Farming,_Cooking,_and_Ranching_Game_(Title_TBD)&amp;quot;&amp;gt;Magical Farming, Cooking, and Ranching Game (Title TBD)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;This is a game both new and old. Previously I had tried to make a magical farming game in Godot that was inspired by Slime Rancher. It had cheesefruit crops, cute rats to ranch, and a super basic “spell” that acted as the vacuum tool.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The new addition is the cooking component. I think it would be fun to make the player play through little mini-games to prepare different foods. And then they could serve these magically imbued foods to their clients: adventuring parties! I’m hoping I can even add some fun references to some more well known “adventuring parties”. Though I may need to be vague is cases of copyright and such.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Prioritization&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Prioritization&amp;quot; aria-label=&amp;quot;Anchor link for: Prioritization&amp;quot;&amp;gt;Prioritization&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;I’m not certain how I want to prioritize the different games. I’ve found my interest in horror wanes the more stable of a situation I’m in. So if I’m stressed,  I find solace in horror. But without that stress the horror is still enjoyable, but less interesting than ther swath of other games I could be working on.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;So_why_leave_Godot?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#So_why_leave_Godot?&amp;quot; aria-label=&amp;quot;Anchor link for: So_why_leave_Godot?&amp;quot;&amp;gt;So why leave Godot?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I have various reasons, but I would boil it down to primarily &amp;lt;em&amp;gt;Object Oriented Programming&amp;lt;&amp;#x2F;em&amp;gt;. While I can’t blame OOP for everything , one of the major pain points I have hadc in various game projects was in rooted in &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Inheritance_(object-oriented_programming)&amp;quot;&amp;gt;Inheritance&amp;lt;&amp;#x2F;a&amp;gt;. Modern day Object Oriented Design (OOD) has so many different solutions to resolve this. One such solution pushed among the Godot community is “Design By Composition”. That being, create new objects by compositing different components that are at least mostly self-contained. And that is definitely a solution I employed while working with Godot. But I’ve been working on games for over a decade now. And almost that entire time has been in OOD contexts. A brief history of the systems I’ve used to make games in the past:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;MIT’s Scratch&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Raw Java&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;LWJGL (Java)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;LibGDX (Java)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Unity (C#)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Godot (C#)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Godot (GDscript)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Godot (Rust)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Bevy (Rust)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;While the journey has not been entirely linear, this journey has been heavily in the trenches of Object Oriented Programming. And in many ways I was starting to feel like I was just going through the motions to make some features. I craved some novelty, to return to the original reason I had started learning to make games in the first place.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Where_did_I_start?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Where_did_I_start?&amp;quot; aria-label=&amp;quot;Anchor link for: Where_did_I_start?&amp;quot;&amp;gt;Where did I start?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I started learning to write code in seventh grade (roughly age 12 for non-Americans). I was going to a private school that had such a weird mix of pivilige and non-privilige. Like it was still a private school with funding and such, but I was the “poor kid” in that group for where I lived, dressed, and such. The other side that was strange about the school, is there was no system for advanced learning. A trait I seemingly have always possessed is being a fast learner. My greatest strength will always be my ability to learn. And in the classes I was taking, I was exceptionally bored. Another fun fact about that school is that because of how America&amp;#x2F;Minnesota handled education (at the time), none of the teachers were actually required to have a teaching license or even really any experience teaching. I had a Math teacher I would try to ask questions of and I’d just get a blank stare. I remember asking “Hey do we ever get to use &amp;lt;em&amp;gt;modulus&amp;lt;&amp;#x2F;em&amp;gt; in this year?” and my teacher didn’t even know what that was. Which I guess modulus is a Discrete Math concept, not necessary for teaching trigonometry, but it would have been nice.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;So I was exceptionally bored, I rarely had homework because it was so dumbed down. So I dove headfirst into what was immediately available: &amp;lt;del&amp;gt;becoming a better person&amp;lt;&amp;#x2F;del&amp;gt; &amp;lt;strong&amp;gt;videogames&amp;lt;&amp;#x2F;strong&amp;gt;. I was priviliged enough to basically always have a computer. I never really did console gaming besides Gameboy and DS. Of course Minecraft had just come out and I was obsessed. It was full of wonder and mystery, crying myself to sleep because someone online called me a “noob” and I didn’t know what it meant, and vast creativity. It didn’t take long for me to find mods and started wanted to make my own.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I got into programming, crucially, because I lacked the intellectual stimulation that makes me feel complete. I don’t just crave new challenges, I need them. What better challenge to tackle creating games using an entirely new design paradigm?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;So_why_Bevy?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#So_why_Bevy?&amp;quot; aria-label=&amp;quot;Anchor link for: So_why_Bevy?&amp;quot;&amp;gt;So why Bevy?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Besides all of the previous reasons to like Bevy that I mentioned earlier, Bevy is much closer to the kind of development that I enjoy. Bevy:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Provides me with new design challenges to overcome&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Gives me much more breathing room to tinker as I see fit.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Enables a modular development approach that I much prefer
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;You can even see my attempts to make modularity work in Godot through several of my Squiggles Zone &amp;#x2F; Sqore based projects such as &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;QueenOfSquiggles&amp;#x2F;WhereTheDeadLie&amp;quot;&amp;gt;Where The Dead Lie&amp;lt;&amp;#x2F;a&amp;gt; and &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;QueenOfSquiggles&amp;#x2F;squiggle-pt&amp;quot;&amp;gt;Gruesome Claim&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h1 id=&amp;quot;Why_now?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Why_now?&amp;quot; aria-label=&amp;quot;Anchor link for: Why_now?&amp;quot;&amp;gt;Why now?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Recently I’ve been working on applying to some game industry jobs. And a few of them had quite interesting application requirements that really forced me to look past recent history and see my “career” with code in its entirety. Having done that, I realized how prolific I’ve been over the years. I’ve privated so many of the games I made because they included my full deadname as well as my ex’s name that I worked with back in highschool. But seriously I’ve been making a ton of games over the years. And my driving light has always been facing a challenge and overcoming it. The human spirit is indominatible and deserves all the spoils.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For me, this has become such an intrinsic element of my personal identity. I am a game &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.merriam-webster.com&amp;#x2F;dictionary&amp;#x2F;artisan&amp;quot;&amp;gt;artisan&amp;lt;&amp;#x2F;a&amp;gt; before I’m a game developer. And I much prefer that terminology. Ity truely is an art for me. And no doubt I’m not alone in feeling that way.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;What’s_the_plan?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What’s_the_plan?&amp;quot; aria-label=&amp;quot;Anchor link for: What’s_the_plan?&amp;quot;&amp;gt;What’s the plan?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;My plan, for the foreseeable future, is to pull on this thread of Bevy and Rust. Given I can easily create unit tests for different systems without needing to mock all the other modules affected by it, I can make better guarantees on functionality than I could with Godot. Stripping the shackles of OOD frees me to develop more systemic approaches to different functionalities. And I hope will be much more conducive to the types of games I want to make. Of course time will tell. But for now, I gotta say I’m having the most fun making games I’ve had in a long while. Even if my free time is severely limited recently.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Blog Update Feb. 2024 - C++ Development</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blog-update-cpp-engine-dev&#x2F;"/>
                <updated>2024-02-06T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blog-update-cpp-engine-dev&#x2F;</id>
                <content type="html">&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;Caution&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Hot Takes Inside!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;General_Update&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#General_Update&amp;quot; aria-label=&amp;quot;Anchor link for: General_Update&amp;quot;&amp;gt;General Update&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Hey y’all! I haven’t been making much “Content™️” but I’ve been doing a lot of stuff otherwise! I’ve been talking with more professional game developers trying to figure out how I can break into the game development industry and actuall start a career. It’ll be one year since my graduation soon and I’d like to find some kind of employment in my field 😅&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Blog_Technical&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Blog_Technical&amp;quot; aria-label=&amp;quot;Anchor link for: Blog_Technical&amp;quot;&amp;gt;Blog Technical&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;As a technical detail, I switched the system used to create the blog. I was using Jekyll to create a static website and I switched to Hugo for doing the same. There’s a lot of benefits to switched to hugo. Writing is easier because it automatically refreshes my browser when detecting a change, manages images a lot nicer, and generally supports a much more robust website. I’m using a custom framework “HB (Hugo Bootstrap) Framework” (see the footer for links &amp;amp;amp; details).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Resume_updates&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Resume_updates&amp;quot; aria-label=&amp;quot;Anchor link for: Resume_updates&amp;quot;&amp;gt;Resume updates&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I imagine unless you’re a tech recruiter (which if you are, why are you reading this? Hire me already!) you’re probably not watching my resume. But now after taking with several more professional developers I was able to garner some critiques on my resume. I’ve even had a recruiter say they remembered me based off of the pictures in my resume. (Go put pictures in your resume right now!)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I added some posts for some recent games that I had forgotten to do write-ups for. But they are currently really bare-bones at best. Mostly just showing off screenshots more than anything. I’m nervous I won’t be able to write a proper write-up for these games since its been so long since I made them, and I’d have to re-learn my own code-base to remember what I was doing and why.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;C++???&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#C++???&amp;quot; aria-label=&amp;quot;Anchor link for: C++???&amp;quot;&amp;gt;C++???&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Yes! It has been a long while since I’ve done any development in C++. Mainly because I have had no reason to. I started programming with Java and made games with a pixel-raster system written in pure Java. And eventually worked up to LWJGL (which gave access to OpenGL draw calls). But for the most part, I have been doing scripting with game engines since I wanted to make games, and was less concerned with having fine-grain control over the intricacies of the runtime.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Some people have told me that any moment I spend brushing up on my C++ is not a moment wasted, with respect towards employment in the game industry. So I wanted to make sure I am not just capable but highly proficient in C++ game development.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I had two main project goals. One of which is complete with patches added from time to time. The other is a bit larger and I am still working through it as it is a full game written in C++.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;A_new_standard&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#A_new_standard&amp;quot; aria-label=&amp;quot;Anchor link for: A_new_standard&amp;quot;&amp;gt;A new standard&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;xkcd_standards.png&amp;quot; alt=&amp;quot;XKCD&amp;amp;amp;#x27;s comic &amp;amp;amp;#x27;Standards&amp;amp;amp;#x27;&amp;quot; title=&amp;quot;XKCD&amp;amp;#x27;s comic &amp;amp;#x27;Standards&amp;amp;#x27;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;XKCD&amp;amp;#x27;s comic &amp;amp;#x27;Standards&amp;amp;#x27;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;xkcd.com&amp;#x2F;927&amp;quot;&amp;gt;XKCD reference&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I am rather picky about build systems. And one of my biggest complaints when it comes to c++ build systems is how non-opinionated (wishy-washy) they are! What I really love about a build system like rust’s &amp;lt;code&amp;gt;cargo build&amp;lt;&amp;#x2F;code&amp;gt; or C#’s &amp;lt;code&amp;gt;dotnet build&amp;lt;&amp;#x2F;code&amp;gt; is that they expect a particular project layout, with a specific configuration file that details exactly what the build system needs to know to prep the code into an executable state.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;When I searched for C++ build systems. The main ones that got recommended were “Make” and “CMake”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;The_problem_with_Make&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_problem_with_Make&amp;quot; aria-label=&amp;quot;Anchor link for: The_problem_with_Make&amp;quot;&amp;gt;The problem with Make&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Make is a super generic build system for linux. You define a serious of tasks and each task and list zero or more tasks that it depends on. And by chaining these with arcane combinations of symbols, you can craft a moderately usable build system. And in that sense I’d consider it only slightly more efficient than just writing a shell script for all the &amp;lt;code&amp;gt;g++&amp;lt;&amp;#x2F;code&amp;gt; calls I want.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The trouble as well is there is little to be said about a standard. The only standard is the name of the script file (I dare not call it a configuration file!). From there you can actually use Make to do just about anything. You could have a make-file that downloads images from a website, formats them, and exports them to a particular directory. Which is impressive. But again, that’s scripting, not necessarily a build system.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;The_problem_with_CMake&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#The_problem_with_CMake&amp;quot; aria-label=&amp;quot;Anchor link for: The_problem_with_CMake&amp;quot;&amp;gt;The problem with CMake&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;CMake, or “the build system for creating make files”. It is arguably a very robust system which enables cross platform development and coordination of large code bases with less effort than most major build systems. Additionally, it is truely not a scripting system but an actual build system. Using the incredibly odd language system you can define variables and perform processes and… I promise it’s technically not a scripting system again.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The main detail in CMake that makes it more promising is that it doesn’t require you to write out your &amp;lt;code&amp;gt;g++&amp;lt;&amp;#x2F;code&amp;gt; calls (since that would really break the cross platform capabilities). So all you have to do is define a project target and attach source files to that target. Simple right? Well every time you make, delete, or move a file, you need to change one &amp;lt;strong&amp;gt;or more&amp;lt;&amp;#x2F;strong&amp;gt; &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;&amp;#x2F;code&amp;gt; files.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;My_best_effort&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#My_best_effort&amp;quot; aria-label=&amp;quot;Anchor link for: My_best_effort&amp;quot;&amp;gt;My best effort&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;I wanted a stupid simple build system that expects a specific project layout but uses that to create a very dynamic build approach. I never really intended for it to be used by anyone but myself so I named it “SSBS”, which is an acronym for “Squiggles Stupid Build System” but also sounds like a ship name, “S.S. Bullshit”. Please clap I am very clever 😢.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The build system itself is rather small and written in C++ for compiling C++ on linux specifically. I considered developing for cross platform. But the appeal of a simple Makefile to bootstrap the project was appealing.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Basically what it does is searches recursively in a &amp;lt;code&amp;gt;src&amp;#x2F;&amp;lt;&amp;#x2F;code&amp;gt; directory for any &amp;lt;code&amp;gt;.c&amp;lt;&amp;#x2F;code&amp;gt;, &amp;lt;code&amp;gt;.h&amp;lt;&amp;#x2F;code&amp;gt;, &amp;lt;code&amp;gt;.cpp&amp;lt;&amp;#x2F;code&amp;gt;, and &amp;lt;code&amp;gt;.hpp&amp;lt;&amp;#x2F;code&amp;gt; files and adds them to a source list. It then generates &amp;lt;code&amp;gt;g++&amp;lt;&amp;#x2F;code&amp;gt; commands for each source file and emits the objects into a similar tree structure as source in the &amp;lt;code&amp;gt;build&amp;#x2F;&amp;lt;&amp;#x2F;code&amp;gt; directory. Additionally, the output of the &amp;lt;code&amp;gt;g++&amp;lt;&amp;#x2F;code&amp;gt; call is emitted to a log file. Then once the calls are complete, it reads the log files to parse out errors, warnings, and notes. (For now, I couldn’t manage to capture the actual output of the &amp;lt;code&amp;gt;g++&amp;lt;&amp;#x2F;code&amp;gt; call and this is the best solution since linux has a piping system for commands).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Then it prints out all of the errors, warnings, and notes (with a little bit of style using a single-header library). It also ends with a breakdown of whether it succeeded or failed and how many errors, warnings, and notes were found.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I could probably write a lot more about SSBS. But unless literally anyone besides me finds interest in it, I might not? But I realize I might have to because it’s pretty telling for my skills and drive to create solutions for problems and easing friction of development.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;A_new_game?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#A_new_game?&amp;quot; aria-label=&amp;quot;Anchor link for: A_new_game?&amp;quot;&amp;gt;A new game?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I’m still playing around with name ideas. So far I like, “Watery Wails” since it is an interesting title, gives some but not all details of the content, and is also relatively unique. (I had considered “Sunken Souls” briefly but I know people working on a game called “Sunken …” that I don’t wanna be terribly similar in name to. To avoid competition.)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Engine_Development&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Engine_Development&amp;quot; aria-label=&amp;quot;Anchor link for: Engine_Development&amp;quot;&amp;gt;Engine Development&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;The area of the games industry I am most excited about is engine &amp;amp;amp; tool development. And so for that purpose, this game is mostly an excuse to make a super basic game engine. Though unlike popular game engines such as “Godot” and less important engines like “Unity” have robust scripting capabilities, a straightforward GUI, and decent scene structure systems, the engine I am making is much closer to a library or framework. Technically it is a framework but I really want to be able to say I  made a custom engine so I’m calling it an engine.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The goal of this engine is to be highly specialized. The reason for that is the more specialized a system is, the easier it is to get it feature complete. I really like making 3D PBR horror games with as much style as I can muster.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;watery_wails_pbr_demo.png&amp;quot; alt=&amp;quot;A demo of the PBR capabilites of the engine as of writing&amp;quot; title=&amp;quot;A demo of the PBR capabilites of the engine as of writing&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A demo of the PBR capabilites of the engine as of writing&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;Important note: I got this model online, I didn’t model it myself.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;Here you can see a few interesting details:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;The object with multiple different PBR materials attached&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Albedo, Normal, ORM mapping enabled&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;ImGUI used to display basic debug information (for now!)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;Some details you can’t really see here:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Resource management system (prevents loading the same file twice)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Smart-pointer backed systems&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Render batching through single render passes for objects with a common shader program.
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;I’m toying with the idea of further sorting by material, but that would be a bit extra work and I’m not going to optimize much until I actually encounter performance issues.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Robust input action system through a TOML file specification
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Includes gamepad support&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Game Objects&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Transform objects (position, rotation, and scale packaged together and easily loaded into model &amp;lt;em&amp;gt;transform&amp;lt;&amp;#x2F;em&amp;gt; matrix)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;A custom GLSL &amp;lt;code&amp;gt;#include&amp;lt;&amp;#x2F;code&amp;gt; system (which allows for shared information across many shader files).&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;My goals for the engine, “Next Steps”:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Support static environment irradiance maps in the PBR rendering (to make reflections and such more realistic)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Access mouse input from the input system (very little work, it’s just a bit lower priority than others)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;OpenAL integration for sound effects and streamed music. (My current task as of writing)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Some kind of GUI system
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;I’m tempted to opt for ImGUI as the GUI system for the game as a whole, but I think making my own GUI system would be significantly better because it would give me skills I could translate into a UI&amp;#x2F;UX position if that’s what gets my “foot in the door” in the game industry.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;h3 id=&amp;quot;Game_Development&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Game_Development&amp;quot; aria-label=&amp;quot;Anchor link for: Game_Development&amp;quot;&amp;gt;Game Development&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;The actual gameplay of this game is almost entirely theoretical at this moment. Since I really need a ton of engine systems in place before I’m comfortable actually building gameplay systems.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The overall goal is to be similar to &amp;lt;em&amp;gt;Five Nights At Freddy’s&amp;lt;&amp;#x2F;em&amp;gt; (Specifically the first game) and &amp;lt;em&amp;gt;I’m On Observation Duty&amp;lt;&amp;#x2F;em&amp;gt; (maybe I should give my game a longer title to fit in?? More syllables == better game right?)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The game will take place at a pool since I’m drawing on my experience when I worked as a lifeguard. I had my fair share of terrifying experiences there, and I want to try to translate the fear and axiety of literally having people’s lives in your hands into the game. And a hefty amount of frustration for the parents that would literally abandon their kids to the pool because it was cheaper than daycare. (Basically take all of the corporatism parody of later FNAF games and translate that into parody of negligent parents and I think I’m there?)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;One of my main struggles is finding ways to share what I’m making. Until I am ready to work on the game itself, any screenshots would just be “Hey look at this raw code that made such and such system more efficient!” (Imagine trying to write alt text for that!)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h4 id=&amp;quot;Release?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Release?&amp;quot; aria-label=&amp;quot;Anchor link for: Release?&amp;quot;&amp;gt;Release?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h4&amp;gt;
&amp;lt;p&amp;gt;I have absolutely no clue when a release date would be. But I can say that it will be available for linux and &amp;lt;em&amp;gt;possibly&amp;lt;&amp;#x2F;em&amp;gt; windows. I need to do a bit more research into how cross compilation for MacOS is on linux, but if I have to buy a developer’s license the cost is too high for whatever meager profit I’ll be making on this game. If I somehow break $50 I’m literally going to have a party or something.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Why_this_blog_post?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Why_this_blog_post?&amp;quot; aria-label=&amp;quot;Anchor link for: Why_this_blog_post?&amp;quot;&amp;gt;Why this blog post?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Well I wanted to give a lot of general updates. But also I wanted to talk about my C++ development a little bit since it’s probably going to take a long while before it’s actually done.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Blog Update 2023</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blog-update-october-2023&#x2F;"/>
                <updated>2023-10-07T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blog-update-october-2023&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Happy_Halloween&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Happy_Halloween&amp;quot; aria-label=&amp;quot;Anchor link for: Happy_Halloween&amp;quot;&amp;gt;Happy Halloween&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Hi there y’all! It’s October, a great time to indulge in horror and spooky things. I’m doing something pretty scary myself, and that’s trying to use this blog more!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;What_this_blog_is_for&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_this_blog_is_for&amp;quot; aria-label=&amp;quot;Anchor link for: What_this_blog_is_for&amp;quot;&amp;gt;What this blog is for&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Originally this blog was intended to be a portfolio to help me get a job working in tech, but time and time again I get rejected because “games aren’t real experience.” So if this blog isn’t doing anything helpful for my job prospects, I might as well focus it in more on my interests than anything else!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Game_Post-Mortums&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Game_Post-Mortums&amp;quot; aria-label=&amp;quot;Anchor link for: Game_Post-Mortums&amp;quot;&amp;gt;Game Post-Mortums&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;While I’m not a huge fan of the naming, I do like writing up articles talking about the games I’ve made, why I made them and any challenges I faced while doing so. Additionally I like to talk about any interesting tech problems I had to solve as well. I’ve definitely lapsed in writing those, so I do have a backlog to work through!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Tutorials_and_Informational_Guides&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Tutorials_and_Informational_Guides&amp;quot; aria-label=&amp;quot;Anchor link for: Tutorials_and_Informational_Guides&amp;quot;&amp;gt;Tutorials and Informational Guides&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;If you have already been following my blog, you probably saw my last article, which was definitely in the “Informational Guide” category. I really enjoy sharing information in a way that people can more easily read. Additionally, I want to serve as a way for people to get practice with parts of game development and specifically Godot that they may not have before.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I’ve definitely heard different opinions on shelving my YouTube channel and writing more. But what’s most important to me is that I actually have the time to put things out. If I force myself to do YouTube, I don’t end up posting anything for months because of the time investment. Whereas with this blog, I’m literally taking the first step of making a YouTube video (writing the script), and posting that directly, with some formatting.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Games_Discussions&amp;#x2F;Reviews&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Games_Discussions&amp;amp;#x2F;Reviews&amp;quot; aria-label=&amp;quot;Anchor link for: Games_Discussions&amp;amp;#x2F;Reviews&amp;quot;&amp;gt;Games Discussions&amp;#x2F;Reviews&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Another thing that I really enjoy that I haven’t done yet is discussing existing games. I usually jot down notes about different game elements as I play a game and then I refer to those notes when I want to implement a similar result. It’s really helpful for those squishy design things like, “I want the player to feel anxious.” It’s not really a difficult problem to solve, but doing so in a way that also doesn’t hurt the overall enjoyment and gameplay mechanics can be incredibly difficult.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I’m not sure I would be so narcissitic to call myself a games reviewer. But perhaps what I would like to do is rather similar. More so than just pumping out opinions as fast as possible, I like to dig deep. For example, I’ve been trying to beat &amp;lt;em&amp;gt;The Forest&amp;lt;&amp;#x2F;em&amp;gt; pretty much since it came out (arguably starting well before I should have given my age and the content). I want to do this with more games. I’ve already worked on picking apart notes for &amp;lt;em&amp;gt;Resident Evil 7&amp;lt;&amp;#x2F;em&amp;gt;. The only component missing is my hard-mode replay, which got incredibly difficult for me.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Closing&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Closing&amp;quot; aria-label=&amp;quot;Anchor link for: Closing&amp;quot;&amp;gt;Closing&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;I have strong aspirations. If you’ve followed me for any length of time you might be skeptical of whether I can actually accomplish this. I think the best I can say is that &amp;lt;strong&amp;gt;I want to do this&amp;lt;&amp;#x2F;strong&amp;gt;. My most common struggle is against the tension between doing what I love, and having an income. So often the two seem to be mutually exclusive. I may start putting a “support me” badge on my posts in hope that people will want to throw me a dollar or two for the information I write. Though without comments implemented on this blog there isn’t a lot of back and forth.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I suppose if you want to contact me, I have a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;blobfox.coffee&amp;#x2F;@queenofsquiggles&amp;quot;&amp;gt;mastodon account&amp;lt;&amp;#x2F;a&amp;gt; and an &amp;lt;a href=&amp;quot;mailto:thequeenofsquiggles@gmail.com&amp;quot;&amp;gt;email account&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Blog Introduction</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blog-intro&#x2F;"/>
                <updated>2023-02-09T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;meta&#x2F;blog-intro&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Introduction&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Introduction&amp;quot; aria-label=&amp;quot;Anchor link for: Introduction&amp;quot;&amp;gt;Introduction&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Hello hello! This is the blog introduction. I’m porting over from a hand-crafted HTML website to a Github Pages Jekyll generated static website. This change allows me to have a much more visually appealing website with a fraction of the effort, which leaves me more time to focus on what I love, which is making games!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Notable_Tech_Changes&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Notable_Tech_Changes&amp;quot; aria-label=&amp;quot;Anchor link for: Notable_Tech_Changes&amp;quot;&amp;gt;Notable Tech Changes&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;h3 id=&amp;quot;Blog&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Blog&amp;quot; aria-label=&amp;quot;Anchor link for: Blog&amp;quot;&amp;gt;Blog&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Due to the change, I took the opportunity to switch over to a blog style website. This will allow me to manage individual posts on their own pages without needing to sift through a massive &amp;lt;code&amp;gt;index.html&amp;lt;&amp;#x2F;code&amp;gt; file.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;RSS&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#RSS&amp;quot; aria-label=&amp;quot;Anchor link for: RSS&amp;quot;&amp;gt;RSS&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Because of using Jekyll to generate a blog, this website &amp;lt;em&amp;gt;should&amp;lt;&amp;#x2F;em&amp;gt; support RSS feeds, and possibly Atom feeds as well. Although as of writing I haven’t tested that. I’m trying to have the bare-bones of the website put together before pushing it to production.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Portfolio&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Portfolio&amp;quot; aria-label=&amp;quot;Anchor link for: Portfolio&amp;quot;&amp;gt;Portfolio&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;I am using this website not just as a blog but also as a portfolio&amp;#x2F;CV. Because of this the about page is going to be more fomal information about my projects. And I’ll try to share some more technical information about making the games and non-game projects. I’m not entirely sure if this website will help me make it into the game development industry, but at the very least, I’ll have a nice place to make cool posts about my games. Also people more interested in my process can read what I write here, since Mastodon’s microblogging system doesn’t work for the longer posts I want to make.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
    
        
        
            
            <entry>
                <title>Micro Indies Simple Press Kit Suggestions</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;micro-indies-simple-press-kit&#x2F;"/>
                <updated>2026-02-01T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;micro-indies-simple-press-kit&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Press_Kits_and_you!&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Press_Kits_and_you!&amp;quot; aria-label=&amp;quot;Anchor link for: Press_Kits_and_you!&amp;quot;&amp;gt;Press Kits and you!&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;So just in case you don’t already know, a &amp;lt;em&amp;gt;press kit&amp;lt;&amp;#x2F;em&amp;gt; is a handy little guide that communicates to “the press” how to cover what you made. They exist far beyond games and can encompass all kinds of things such as coordinated events, corporate branding kits, movie debuts.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;When it comes to press kits for video games, these kits can be extremely useful for the press to know how to cover your game, what details to focus on, if there are any things you want to leave out of coverage, and even suggestions to make the process of covering the game easier.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;But_who_even_is_the_press?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#But_who_even_is_the_press?&amp;quot; aria-label=&amp;quot;Anchor link for: But_who_even_is_the_press?&amp;quot;&amp;gt;But who even is the press?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;So you ever heard of this fancy little website like YouTube? Or Twitch? Maybe you don’t think of things that way but when a “content creator” (youtuber, streamer, blog author, formal reporter, etc…) covers your game, they become “the press” for as far as you need be concerned.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The important thing is that if you &amp;lt;em&amp;gt;want&amp;lt;&amp;#x2F;em&amp;gt; your game to get covered (which let’s be honest, you’re reading this I bet you do), it’s a good idea to make coverage as easy as possible.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;What_goes_in_a_press_kit?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_goes_in_a_press_kit?&amp;quot; aria-label=&amp;quot;Anchor link for: What_goes_in_a_press_kit?&amp;quot;&amp;gt;What goes in a press kit?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;A press kit usually entails a zip archive easily acquired by the press&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;An_informational_document&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#An_informational_document&amp;quot; aria-label=&amp;quot;Anchor link for: An_informational_document&amp;quot;&amp;gt;An informational document&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;You should include a document with some core details.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Simple_description_of_the_game&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Simple_description_of_the_game&amp;quot; aria-label=&amp;quot;Anchor link for: Simple_description_of_the_game&amp;quot;&amp;gt;Simple description of the game&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;You want to include some details about the game so the press can understand quickly what kind of context they are going to be in. Is it a horror game? Maybe they wanna dim the lights and give it the right spooky presence. Is it a game of cozy bunnies frolicking in a field of peonys? They might wanna cozy it up for their stream!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Important_content_warnings_(if_applicable)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Important_content_warnings_(if_applicable)&amp;quot; aria-label=&amp;quot;Anchor link for: Important_content_warnings_(if_applicable)&amp;quot;&amp;gt;Important content warnings (if applicable)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Does your game include jumpscares? Does the dog die? Are there triggering elements like rape and&amp;#x2F;or abuse? You need to let the press know that. A YouTuber whose target audience is 8-12 year old Catholic children isn’t going to want to cover the game about gritty blood and carnage.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Key_areas_to_engage_with&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Key_areas_to_engage_with&amp;quot; aria-label=&amp;quot;Anchor link for: Key_areas_to_engage_with&amp;quot;&amp;gt;Key areas to engage with&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Are there specific parts of your game you really want to show off, make sure to note that in the press kit. Ideally these are things they would come across naturally, but if the system is somewhat esoteric you may need to do additional explaining.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Relevant_notes_(if_applicable)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Relevant_notes_(if_applicable)&amp;quot; aria-label=&amp;quot;Anchor link for: Relevant_notes_(if_applicable)&amp;quot;&amp;gt;Relevant notes (if applicable)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;On an as needed basis, share what kinds of important things the press should know while reviewing. Is your game early access, note that and specifically what that means for your game. If there are sections that are incomplete in the game or systems that aren’t done yet, you should note that as well.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Additionally if you have esoteric features (anything slightly more complex than the average AAA game) it can be helpful to give more details on the systems. Ideally this is in a properly formatted PDF so readers can skip around to different headers as needed.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Let’s say as an example that you have a highly dynamic character AI built into one of the monsters. Some kind of Hierarchical Task Network Planner or extremely robust Hierarchical Finite State Machine or Behaviour Tree, you are going to want to call that out and potentially some ways to elicit the more interesting behaviours. If that monster has a system for planning an ambush, let the press know how to get that ambush to occur and how to recognize it. They are voluntarily reading this so spoilers are totally OK! It’s better for you to accidentally spoil something than for the press to think they bugged out your game!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Branding_&amp;#x2F;_Assets&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Branding_&amp;amp;#x2F;_Assets&amp;quot; aria-label=&amp;quot;Anchor link for: Branding_&amp;amp;#x2F;_Assets&amp;quot;&amp;gt;Branding &amp;#x2F; Assets&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Assets are typically images but not always. Maybe you want to include sound files, a particular font even!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;A_logo&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#A_logo&amp;quot; aria-label=&amp;quot;Anchor link for: A_logo&amp;quot;&amp;gt;A logo&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;At the bare minimum you should include some kind of logo. Otherwise press coverage will have to make their own, which discourages coverage. Make a simple logo, even if it’s just a particular font with the title of your game on a transparent background.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Preferred_color_palatte&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Preferred_color_palatte&amp;quot; aria-label=&amp;quot;Anchor link for: Preferred_color_palatte&amp;quot;&amp;gt;Preferred color palatte&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Does your game follow a reduced color palette? Or do you know that a particular scheme looks best with your game? Instead of forcing the press to dig into the game and get the exact color values for your palette, give them that information!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Sample_screenshots&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Sample_screenshots&amp;quot; aria-label=&amp;quot;Anchor link for: Sample_screenshots&amp;quot;&amp;gt;Sample screenshots&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Your game likely has visual components. You likely prepared some screenshots for the game’s store page anyway, so include full-resolution images in your press kit. Some websites will compress those images to save on storage so ensuring the press has access to high resolution images they can use. Whether for videos they want to make some kind of thumbnail using these (consider this when selecting thumbnails!) or if they are writing a blog which will likely want some kind of imagery in the page.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Any_useful_sound_files&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Any_useful_sound_files&amp;quot; aria-label=&amp;quot;Anchor link for: Any_useful_sound_files&amp;quot;&amp;gt;Any useful sound files&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Maybe as a streamer they want to really immerse into your game. They could make a superchat notification use a sound from your game, if you provide a sound file in the press kit, they can do this fairly easily.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Great_I_made_a_press_kit,_now_what?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Great_I_made_a_press_kit,_now_what?&amp;quot; aria-label=&amp;quot;Anchor link for: Great_I_made_a_press_kit,_now_what?&amp;quot;&amp;gt;Great I made a press kit, now what?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Cool so your press kit is ready to go and you’re hopeful for some coverage! Let’s make it easy to find. First of all you want a hosting system that is easily recognized as safe. Most people will recognize Google Drive or DropBox, maybe Mega and a few other providers. If the option allows, include it as an optional download on your store page or as a download from your personal website. Now copy the download link and keep it safe.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;You want that download link in your store page (assuming you can’t include it as an optional download, I know Itch.io has that functionality). You want to call out that you &amp;lt;em&amp;gt;have a press kit&amp;lt;&amp;#x2F;em&amp;gt; and that it &amp;lt;em&amp;gt;includes useful information for streamers and youtubers&amp;lt;&amp;#x2F;em&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Now, to be pessimistic, typical content creators probably didn’t read a whole lot of that description. They might not have read any of it. But it’s still important to have it there for those that will. Especially the more professional press will at least skim through for a press kit.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Let’s make sure they actually find the press kit. There are several ways to do this. An easy way is to just add a button to your main menu that opens a web browser to the press kit download. You’ll want one extra click to prevent people from accidentally downloading the press kit if they don’t want to.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Another option is to include a popup when the game first starts to announce that this game does have a press kit. This should be just for the first time they open the game. This is a great way to catch the less aware one last time before they get into the game. After this point there’s not much more you can do. Hope for the best.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Embedding GIFs</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;embedding-gifs&#x2F;"/>
                <updated>2024-08-24T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;embedding-gifs&#x2F;</id>
                <content type="html">&amp;lt;h1 id=&amp;quot;Hey_look!_A_new_post&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Hey_look!_A_new_post&amp;quot; aria-label=&amp;quot;Anchor link for: Hey_look!_A_new_post&amp;quot;&amp;gt;Hey look! A new post&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Yeah I’m moving the discussion about how I embed tenor GIFs out of the &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;guides&amp;#x2F;fsm-vs-bt&amp;#x2F;&amp;quot;&amp;gt;FSMs versus Behaviour Trees&amp;lt;&amp;#x2F;a&amp;gt; page to make that page more readable and make a coherent page for different approaches to embedding gifs easily. As of writing, I’m adding a third recipe here so hopefully this is appreciated.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;GIF_Embedding&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#GIF_Embedding&amp;quot; aria-label=&amp;quot;Anchor link for: GIF_Embedding&amp;quot;&amp;gt;GIF Embedding&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;h2 id=&amp;quot;In_Jekyll&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#In_Jekyll&amp;quot; aria-label=&amp;quot;Anchor link for: In_Jekyll&amp;quot;&amp;gt;In Jekyll&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;_includes&amp;#x2F;tenor.html&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; style&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;margin: auto; width: {{ include.width }}; border: 3px solid black; padding: 10px;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  class&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;tenor-gif-embed&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data_postid&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ include.data_postid }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data-share-method&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;host&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data_aspect_ratio&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ include.data_aspect_ratio }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data-width&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;100%&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; href&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ include.url }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;script&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; type&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;text&amp;#x2F;javascript&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; async src&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;https:&amp;#x2F;&amp;#x2F;tenor.com&amp;#x2F;embed.js&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;script&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    {% if include.caption %}}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt; {{ include.caption }} &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; {% endif %}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;Then in any article (or page) I can just use:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;markdown&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{% include tenor.html data_postid=&amp;amp;quot;THE-POST-ID&amp;amp;quot; data_aspect_ratio=&amp;amp;quot;ASPECT&amp;amp;quot; width=&amp;amp;quot;DESIRED-WIDTH&amp;amp;quot; url=&amp;amp;#39;EMBED-URL&amp;amp;#39; caption=&amp;amp;quot;OPTIONAL-CAPTION&amp;amp;quot; %}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;the three values are stripped from the embed code for the gif: &amp;lt;code&amp;gt;data_postid&amp;lt;&amp;#x2F;code&amp;gt;, &amp;lt;code&amp;gt;data_aspect_ratio&amp;lt;&amp;#x2F;code&amp;gt;, and &amp;lt;code&amp;gt;url&amp;lt;&amp;#x2F;code&amp;gt;. Those ensure the image is actually loaded. Then &amp;lt;code&amp;gt;width&amp;lt;&amp;#x2F;code&amp;gt; controls how wide on the screen they are. I prefer &amp;lt;code&amp;gt;50%&amp;lt;&amp;#x2F;code&amp;gt; for my gifs in this article. The the &amp;lt;code&amp;gt;caption&amp;lt;&amp;#x2F;code&amp;gt; is an optional tag that will add some text below the gif.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;In_Hugo&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#In_Hugo&amp;quot; aria-label=&amp;quot;Anchor link for: In_Hugo&amp;quot;&amp;gt;In Hugo&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;For Hugo you need to use shortcodes. Which are not terribly different from Jekyll’s includes.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;#x2F;layouts&amp;#x2F;shortcodes&amp;#x2F;tenor.html&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; style&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;margin: auto; width: {{ .Get &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;width&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; }}; border: 3px solid black; padding: 10px;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  class&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;tenor-gif-embed&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data_postid&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ .Get &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;data_postid&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data-share-method&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;host&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data_aspect_ratio&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ .Get &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;data_aspect_ratio&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;  data-width&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;100%&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; href&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ .Get &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;url&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;script&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; type&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;text&amp;#x2F;javascript&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; async src&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;https:&amp;#x2F;&amp;#x2F;tenor.com&amp;#x2F;embed.js&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;script&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;noscript&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ if .Get &amp;amp;quot;fallback&amp;amp;quot; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;img&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; src&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ .Get &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;fallback&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ else }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;p&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;   &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;No fallback provided!&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;   &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;p&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;br&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;#x2F;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ end }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;p&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;   &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;GIF embed failed. &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;   &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; href&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ .Get &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;url&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FFA198;font-style: italic;&amp;quot;&amp;gt;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;Click to view source.&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;  &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;p&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;noscript&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ if .Get &amp;amp;quot;caption&amp;amp;quot; }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;br&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;#x2F;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;Caption: &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt; {{ .Get &amp;amp;quot;caption&amp;amp;quot; }} &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ end }}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;br&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;#x2F;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;And loading the shortcode can be done in different ways (line breaks are ignored with Hugo’s shortcodes). Note that a space between &amp;lt;code&amp;gt;{{&amp;lt;&amp;#x2F;code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;code&amp;gt; is only present because it would otherwise be rendered as normal in this page.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Easier to read:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;markdown&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ &amp;amp;lt; tenor &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; data_postid=&amp;amp;quot;8246706&amp;amp;quot; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; data_aspect_ratio=&amp;amp;quot;1.43103&amp;amp;quot; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; width=&amp;amp;quot;50%&amp;amp;quot; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; url=&amp;amp;#39;https:&amp;#x2F;&amp;#x2F;tenor.com&amp;#x2F;view&amp;#x2F;anime-goku-dbz-dragon-ball-super-saiyan-gif-8246706&amp;amp;#39; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; caption=&amp;amp;quot;Goku from Dragon Ball Z power up to &amp;amp;#39;super saiyin&amp;amp;#39;&amp;amp;quot; &amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt; fallback=&amp;amp;quot;https:&amp;#x2F;&amp;#x2F;media.tenor.com&amp;#x2F;XfrqyR_-jzIAAAAC&amp;#x2F;anime-goku.gif&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;&amp;amp;gt;}}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;Shorter:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;markdown&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{ &amp;amp;lt; tenor data_postid=&amp;amp;quot;8246706&amp;amp;quot; data_aspect_ratio=&amp;amp;quot;1.43103&amp;amp;quot; width=&amp;amp;quot;50%&amp;amp;quot; url=&amp;amp;#39;https:&amp;#x2F;&amp;#x2F;tenor.com&amp;#x2F;view&amp;#x2F;anime-goku-dbz-dragon-ball-super-saiyan-gif-8246706&amp;amp;#39; caption=&amp;amp;quot;Goku from Dragon Ball Z power up to &amp;amp;#39;super saiyin&amp;amp;#39;&amp;amp;quot; fallback=&amp;amp;quot;https:&amp;#x2F;&amp;#x2F;media.tenor.com&amp;#x2F;XfrqyR_-jzIAAAAC&amp;#x2F;anime-goku.gif&amp;amp;quot; &amp;amp;gt;}}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;&amp;lt;h2 id=&amp;quot;In_Zola&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#In_Zola&amp;quot; aria-label=&amp;quot;Anchor link for: In_Zola&amp;quot;&amp;gt;In Zola&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Yet another update to this. Zola has a templating system much more similar to Jekyll than hugo. One step forwards; two steps back 😅&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;#x2F;templates&amp;#x2F;shortcodes&amp;#x2F;tenor.html&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; style&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;display: flex; flex-direction: column; justify-items: center; align-items: center; &amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; class&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{% if background %} bg-{{background}} {% else %} bg-secondary {% endif %} rounded&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;        style&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;width: 50%; padding: .5rem;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; class&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;tenor-gif-embed&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; data-postid&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ data_postid }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; data-share-method&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;host&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;            data-aspect-ratio&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ data_aspect_ratio }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; data-width&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;100%&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;script&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; type&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;text&amp;#x2F;javascript&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; async src&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;https:&amp;#x2F;&amp;#x2F;tenor.com&amp;#x2F;embed.js&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;script&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;noscript&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;            &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;img&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; src&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ fallback }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;#x2F;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;            &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;p&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;                &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; href&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{{ url }}&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;                    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;GIF embed fallback in use. &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;                &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;a&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;            &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;p&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;noscript&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt; class&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;{% if background %} btn-{{background}} {% else %} btn-secondary {% endif %} rounded-bottom&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #79C0FF;&amp;quot;&amp;gt;        style&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;&amp;amp;quot;padding: .5rem; max-width: 45%;&amp;amp;quot;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;Caption: &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;b&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;        &amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;{{ caption }}&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;i&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    &amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;#x2F;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;div&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;amp;lt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;br&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; &amp;#x2F;&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;</content>
            </entry>
            
        
            
            <entry>
                <title>Indie Game Design Using Obsidian</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;game-design-using-obsidian&#x2F;"/>
                <updated>2024-01-15T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;game-design-using-obsidian&#x2F;</id>
                <content type="html">&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;This guide is primarily aimed at game developers who may not have explored options for project organization and management. If that’s not you, enjoy learning about my personal workflow&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Obsidian,_a_note-taking_app_with_(mostly)_good_features&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Obsidian,_a_note-taking_app_with_(mostly)_good_features&amp;quot; aria-label=&amp;quot;Anchor link for: Obsidian,_a_note-taking_app_with_(mostly)_good_features&amp;quot;&amp;gt;Obsidian, a note-taking app with (mostly) good features&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;As much as I do love FOSS (Free and Open Source Software), &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;obsidian.md&amp;#x2F;&amp;quot;&amp;gt;Obsidian&amp;lt;&amp;#x2F;a&amp;gt; is my favourite app to use for notes and organizing my ideas. I’ve used it for everything from project management, sequence planning, personal to-do lists, notes for a story I’m writing, and even school notes!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;One of the most valuable uses I’ve found is organizing my thoughts for game design!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Scaffolding_Ideas&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Scaffolding_Ideas&amp;quot; aria-label=&amp;quot;Anchor link for: Scaffolding_Ideas&amp;quot;&amp;gt;Scaffolding Ideas&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Obsidian uses a superset of Markdown, which is a pretty nifty language for formatting text. (I’m even using it for formatting this blog!)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Because of this, the text is pretty quick to format without needing to leave your keyboard.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;contact-range-notes.png&amp;quot; alt=&amp;quot;An example of a page in Obsidian&amp;quot; title=&amp;quot;An example of a page in Obsidian&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;An example of a page in Obsidian&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h2 id=&amp;quot;Callouts_in_Obsidian&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Callouts_in_Obsidian&amp;quot; aria-label=&amp;quot;Anchor link for: Callouts_in_Obsidian&amp;quot;&amp;gt;Callouts in Obsidian&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;You can see in the picture above that I’m using a “callout” to mark some useful resources for developing &amp;lt;em&amp;gt;Contact Range&amp;lt;&amp;#x2F;em&amp;gt;. I didn’t end up using all of them to be fair. But the callouts can be super helpful for specific ideas and there’s a few different kinds of them with associated colours and names.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This is the syntax I used above. Note that it acts as an extension of the ‘quote’ formatting that uses &amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;&amp;#x2F;code&amp;gt; prefix to each line. The heading is specified by square brackets (&amp;lt;code&amp;gt;[]&amp;lt;&amp;#x2F;code&amp;gt;), and an exclamation point (&amp;lt;code&amp;gt;!&amp;lt;&amp;#x2F;code&amp;gt;) prefixed key-word.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;markdown&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;&amp;amp;gt;[&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;!hint&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;]+ Useful Resources&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #7EE787;&amp;quot;&amp;gt;&amp;amp;gt; ... text ...&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;Also if you note that the square brackets are ended by &amp;lt;code&amp;gt;+&amp;lt;&amp;#x2F;code&amp;gt;, that’s a collapse notation. It tells Obsidian that we want to be able to collapse the callout down to the header, but by default we want it to display as full. For defaulting to collapsed, you would rather use &amp;lt;code&amp;gt;-&amp;lt;&amp;#x2F;code&amp;gt;. Following that is the title of the callout. If you omit it, the keyword default title will be used as a heading. For example &amp;lt;code&amp;gt;!help&amp;lt;&amp;#x2F;code&amp;gt; would become “Help”&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;My most used key-words are:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;hint&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;help&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;info&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;This is usually because my notes focus on expressing information. And so the callouts are extra information that would be used.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Headings&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Headings&amp;quot; aria-label=&amp;quot;Anchor link for: Headings&amp;quot;&amp;gt;Headings&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Headings in any text document are incredibly useful. In obsidian, they are automatically built into a table of contents on the right pane.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;contact-range-notes-toc.png&amp;quot; alt=&amp;quot;The table of contents for the Contact Range document&amp;quot; title=&amp;quot;The table of contents for the Contact Range document&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;The table of contents for the Contact Range document&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;This pane is collapseable for when you really want to focus, but is super helpful for larger documents.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Super-charged_Links&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Super-charged_Links&amp;quot; aria-label=&amp;quot;Anchor link for: Super-charged_Links&amp;quot;&amp;gt;Super-charged Links&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Remember what I said about Obsidian using a &amp;lt;em&amp;gt;superset&amp;lt;&amp;#x2F;em&amp;gt; of Markdown. Here’s where that matters. So links work just like regular markdown, even for images. To review, the format is:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;markdown&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;Link Text&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;](&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;www.your-link.net&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;)&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;![&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #A5D6FF;&amp;quot;&amp;gt;Image Alt-Text&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;](&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;&amp;#x2F;path&amp;#x2F;to&amp;#x2F;your&amp;#x2F;image.jpg&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;)&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;Obsidian introduces a new type of link called a “Note Link”. It allows you to reference other note pages you have written which helps to connect different elements that each have their own concise pages. I use this more for writing stories, so each character, faction, location, etc… will get their own page with links connecting everything where relevant.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;markdown&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Full Name Of The Note You Want To Link]]&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Important to note:&amp;lt;&amp;#x2F;strong&amp;gt; the page name will provide auto-complete suggestions, but it is most helpful when your pages uses unique names across the “vault” (obsidian’s currently scoped directory).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Let’s_Make_a_Game&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Let’s_Make_a_Game&amp;quot; aria-label=&amp;quot;Anchor link for: Let’s_Make_a_Game&amp;quot;&amp;gt;Let’s Make a Game&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Now that you’re equipped with a basic understanding of how to write effective notes in Obsidian, let’s look at how that relates to game development and design.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Putting_Down_Ideas&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Putting_Down_Ideas&amp;quot; aria-label=&amp;quot;Anchor link for: Putting_Down_Ideas&amp;quot;&amp;gt;Putting Down Ideas&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;You will probably want to start with a document where you just “brain dump” on the page. Text notes are good. All you are doing at this phase is getting ideas on ‘paper’, or page perhaps. Once it’s all written down you can start to review what you wrote and see if any ideas coalesce. If you are working as part of a team, sharing the document and reviewing it together could be better. But most of my experience is solo dev, so &amp;lt;em&amp;gt;it’s just me babyyyy&amp;lt;&amp;#x2F;em&amp;gt;!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;After getting the ideas organized and cleaned up, you can start working on the next few phases.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Organizing_Sequences&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Organizing_Sequences&amp;quot; aria-label=&amp;quot;Anchor link for: Organizing_Sequences&amp;quot;&amp;gt;Organizing Sequences&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;So you’ve got a game idea now and you want the player to do X, Y, Z, using items Alpha, Beta, Gamma, and talking to NPCs 1, 2, and 3. How do we organize that!?!?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;My solution is to use a “core plugin” called “canvas”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;To setup canvas you need to open the settings menu with the cog icon in the bottom left corner. Then go to “Core Plugins” and enable “Canvas”. Optionally, you can fiddle with the options for Canvas using the cog button on the same line, or in the left pane under the “Core Plugins” header. My preferred change is to set “Default location for new canvas files” to “Same folder as current file”. By default they drop to the vault’s root directory.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;A canvas is a generic node graphing tool that you can use to make &amp;lt;em&amp;gt;beautiful spaghetti&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;contact-range-canvas.png&amp;quot; alt=&amp;quot;The beautiful spaghetti of a node graph I made for Contact Range&amp;quot; title=&amp;quot;The beautiful spaghetti of a node graph I made for Contact Range&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;The beautiful spaghetti of a node graph I made for Contact Range&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;You might want to open that image in a separate tab if you want to be able to read the text. Otherwise, just trust that I’m being truthful.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;There are three main types of nodes allowed:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Generic Text&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Note&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Picture&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;Generic text is just a block that you can put text into and style it how you like. If you look closely I used headers in some nodes to mark the “quest lines”. Note Nodes allow you to link an existing notes into the canvas as a resizable node. You can even scroll through the entire document from the canvas if you like. Finally Image Nodes are as expected, an embedded image. Combined with the ability to create connections between nodes, assign directional arrows, colours for node blocks and connections, and a theoretically infinite canvas, organizing structures of information is definitely possible.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For my purposes I made every room, item, and ‘quest action’ into a node. Then I connected them to help me map the players progress through the ship. I wanted to ensure they spent time in all of the rooms since the aliens were going to spread throughout the ship and attack the player in any of the rooms.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;If you are reading through the canvas above and have played Contact Range, you might have noticed that not everything from the canvas was implemented. Sorry about that! That’s what happens during game jams, ruthless feature cutting&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h2 id=&amp;quot;Managing_the_Project&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Managing_the_Project&amp;quot; aria-label=&amp;quot;Anchor link for: Managing_the_Project&amp;quot;&amp;gt;Managing the Project&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;If you have experience with DevOps you’re probably good to skip this. Unless you wanna help me find any mistakes I made &amp;amp;lt;3&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;p&amp;gt;So with your ideas put together and some rough (or maybe not so rough) sequencing figured out, now you need to break it down into manageable and–most importantly–actionable tasks. This is where “Project Management” (PM) rears its ugly head. Most of PM work is not exceptionally difficult in theory, but almost always is difficult in practice. There are so many different methods for organizing tasks into small chunks that can be assigned to individual team members. My favourite is a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Kanban&amp;quot;&amp;gt;Kanban Board&amp;lt;&amp;#x2F;a&amp;gt;. It’s a fairly simple process. You organize tasks into “cards” that describe the task and maybe some additional meta-data like who’s assigned to it and&amp;#x2F;or what category of task it is (art, code, sfx, etc…). For me, I usually skip the assignment step since it’s usually all me.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;personal-todo-kanban.jpg&amp;quot; alt=&amp;quot;A Kanban Board of my personal life tasks&amp;quot; title=&amp;quot;A Kanban Board of my personal life tasks&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;A Kanban Board of my personal life tasks&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;Here’s an example of a kanban board. Specifically one I use to organize my personal life tasks. Once something makes it to the “Done” channel I like to archive it so it doesn’t clutter up the view. If you are perceptive, you probably noticed that I’m still using Obsidian. There is a “Community Plugin” (not maintained by the Obsidian Devs) called “Kanban” by “mgmeyers” that I use almost religiously. It adds a type of note that is a Kanban board which allows you to specify which lanes you want. There is also tools for things like due dates, tagging, and styles. You can even make styles react to the tags or date proximity on the card. For example, when I used this for school I made green, orange, and red colour styles based on how urgently the task needed to be done (based on 7+ days out, 3+ days out, or less than 3 days away, respectively)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;You can even add styling specific to a single Kanban board or have those settings globally. Which is super powerful.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Endless_Cards&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Endless_Cards&amp;quot; aria-label=&amp;quot;Anchor link for: Endless_Cards&amp;quot;&amp;gt;Endless Cards&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;A simple approach is to make a card for each “thing” you need to do. So for each asset to make, it gets a card. For every system that needs code, that’s a card. For every QA work done at a step in the process, that’s another card! And when the moon hits your eye like a big pizza pie, that’s &amp;lt;del&amp;gt;another card&amp;lt;&amp;#x2F;del&amp;gt; &amp;lt;em&amp;gt;amore!&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;There’s a ton of solutions for figuring out how to organize your cards. In my experience the solution that’s best is &amp;lt;em&amp;gt;the one that works for you and your needs&amp;lt;&amp;#x2F;em&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;One such solution that I use for projects larger than a game jam are &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;scrumandkanban.co.uk&amp;#x2F;theme-epic-story-task&amp;#x2F;&amp;quot;&amp;gt;“Epic Cards”&amp;lt;&amp;#x2F;a&amp;gt;. It’s a way to create a hierarchy of tasks and categorize them into a particular order. I’ve seen many people use Epics almost like versioning. So once that “Epic” is complete that’s 0.1 more version points. (For clarity, I mean a project at version 1.2 would go to 1.3 after the 1.3.X epic is compeleted. And subversions, 1.2.X, would increment as stable changes are made.)&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Of course that’s not the only way to organize your tasks. I highly recommend looking into modern technique of project management if you are more interested in this. Without being more familiar with what industry standards look like, I’m hesitant to make a particular recommendation.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Building_to_Completion&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Building_to_Completion&amp;quot; aria-label=&amp;quot;Anchor link for: Building_to_Completion&amp;quot;&amp;gt;Building to Completion&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Now you’ve got your idea, the sequences, and your tasks all organized. That was the easy part. Your next steps are to make it all happen. This is where you “get your hands dirty” and work on the code&amp;#x2F;art&amp;#x2F;model&amp;#x2F;shader&amp;#x2F;SFX&amp;#x2F;music&amp;#x2F;VFX&amp;#x2F;API&amp;#x2F;etc… necessary for your project!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;From here I can’t quite help you. Or rather, I can’t in this article. Obsidian is an excellent tool for organizing all of the game design components. But once you transition to the development, Obsidian is mostly useful as a refernce. Best of luck. I hope you have an enjoyable project! Or at least an &amp;lt;em&amp;gt;interesting&amp;lt;&amp;#x2F;em&amp;gt; one!&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Behaviour Trees versus State Machines</title>
                <link href="https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;fsm-vs-bt&#x2F;"/>
                <updated>2023-10-11T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;queenofsquiggles.codeberg.page&#x2F;guides&#x2F;fsm-vs-bt&#x2F;</id>
                <content type="html">&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;I’m trying out a different layout for this post so the text is easier to read. it looked super dense in the typical layout. Let me know what you think! If this style is ugly I might just change it back&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;I also activated full &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Weeb_(disambiguation)&amp;quot;&amp;gt;“weeb”&amp;lt;&amp;#x2F;a&amp;gt; mode for this post. I can remove it if it detracts from people’s enjoyment, but I’m hoping it makes reading this &amp;lt;em&amp;gt;even more enjoyable&amp;lt;&amp;#x2F;em&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;update: the GIF inclusion can break &amp;lt;em&amp;gt;some&amp;lt;&amp;#x2F;em&amp;gt; rss feeds. If you have the option to “load full text” that should fix it. Otherwise the actual website should work too.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;Wait…AI??&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Wait…AI??&amp;quot; aria-label=&amp;quot;Anchor link for: Wait…AI??&amp;quot;&amp;gt;Wait…AI??&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;First to dismiss anyone who came in here thinking I was going to talk about &amp;lt;em&amp;gt;ChatGPT&amp;lt;&amp;#x2F;em&amp;gt; or &amp;lt;em&amp;gt;Midjourney&amp;lt;&amp;#x2F;em&amp;gt;. While those are also referred generally as “AI”, the term itself is infinitely more general than “Large Language Model used for generating arbitrary content while also violating every license known to humanity.” This article is focusing on a different sector of artificial intelligence. Specifically one of the more “smoke and mirrors” type of intelligence, which is really where games development thrives!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;AI_and_Games_🤖&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#AI_and_Games_🤖&amp;quot; aria-label=&amp;quot;Anchor link for: AI_and_Games_🤖&amp;quot;&amp;gt;AI and Games 🤖&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Generally, it is easiest to think of AI in games to be primarily used for creating interesting hostile enemies such as the guards in &amp;lt;em&amp;gt;Metal Gear Solid&amp;lt;&amp;#x2F;em&amp;gt; games or the Alien (Xenomorph) in &amp;lt;em&amp;gt;Alien: Isolation&amp;lt;&amp;#x2F;em&amp;gt;. However they are also used for the cute characters in the &amp;lt;em&amp;gt;Animal Crossing&amp;lt;&amp;#x2F;em&amp;gt; games, or the slimes in &amp;lt;em&amp;gt;Slime Rancher&amp;lt;&amp;#x2F;em&amp;gt;. But then getting even past tangible characters, there is “The Director” in &amp;lt;em&amp;gt;Left For Dead 2&amp;lt;&amp;#x2F;em&amp;gt;, which is an AI solution that dynamically adjusts the game based on current conditions.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Hopefully I’m getting across the idea that AI in games is significantly more simple than the “AIs” that are sweeping public consciousness right now. In fact they can get so simple that there’s really only two kinds that I’ve ever used. That isn’t to say there &amp;lt;strong&amp;gt;aren’t&amp;lt;&amp;#x2F;strong&amp;gt; other kinds. But that I’ve never had a problem that needed a different solution than either one or the other.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Behaviour_Trees_my_beloved_💕&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Behaviour_Trees_my_beloved_💕&amp;quot; aria-label=&amp;quot;Anchor link for: Behaviour_Trees_my_beloved_💕&amp;quot;&amp;gt;Behaviour Trees my beloved 💕&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Behaviour Trees were my first love. They are absolutely incredible and I would argue that they are functional enough to do some basic scripting with them should the need arise. Now to actually talk about them 😅&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Behaviour Trees are closest to a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Flowchart&amp;quot;&amp;gt;“Flow Chart”&amp;lt;&amp;#x2F;a&amp;gt;, which is probably the best way to think about them if you’re just getting started.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;What_is_a_tree?_(In_programming_at_least)&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#What_is_a_tree?_(In_programming_at_least)&amp;quot; aria-label=&amp;quot;Anchor link for: What_is_a_tree?_(In_programming_at_least)&amp;quot;&amp;gt;What is a tree? (In programming at least)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;A tree is a generic data structure that is used to hold “nodes” (which generally have some kind of data associated with them), and their relationships between each other. Now technically that description would be called a “Graph”, which is a less restrictive type of data structure.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Trees have some particular rules that each node can have children , which is a one-way relationship where the parent knows its children but the children do not know their parent. Additionally each node can only have a single parent. If you are used to Godot, the “Scene Tree” is a type of tree.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Technically some extra flavour is added such that child nodes &amp;lt;em&amp;gt;can&amp;lt;&amp;#x2F;em&amp;gt; access their parent nodes, but this is distinctly against recommended workflow. You might have heard “Call down; Signal Up”. This is a method that preserves the Tree rules by ensuring that only parent nodes need to know about their child nodes. And never the other way around.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Back_to_Behaviour_Trees&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Back_to_Behaviour_Trees&amp;quot; aria-label=&amp;quot;Anchor link for: Back_to_Behaviour_Trees&amp;quot;&amp;gt;Back to Behaviour Trees&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;So knowing that it is a tree data structure used to model some kind of “behaviour”, you might already have some ideas. The nodes available come in a few key types that serve specific purposes:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;root (in some cases isn’t technically a node)&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;compositor&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;decorator&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;query&amp;#x2F;condition&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;action&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;The root is fairly boring because all it does is call down whatever child node it has (only one is usually allowed).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;All nodes in a behaviour tree use a “tick” (or otherwise named) method to perform their own logic, and then return a state value for that node. Usually “Success”, “Failure”, or “Running” (for when it takes multiple ticks to accomplish the task).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Queries&amp;#x2F;Conditions&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Queries&amp;amp;#x2F;Conditions&amp;quot; aria-label=&amp;quot;Anchor link for: Queries&amp;amp;#x2F;Conditions&amp;quot;&amp;gt;Queries&amp;#x2F;Conditions&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;A query node simply checks against some logical condition and returns “Success” if true and “Failure” if false. Specifically the positive affirmation leaning is helpful such that we don’t use “Is thing not true” conditions, since those can get messy.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Actions&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Actions&amp;quot; aria-label=&amp;quot;Anchor link for: Actions&amp;quot;&amp;gt;Actions&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;An action node tries to do something. Ideally some kind of transformation that creates an external effect. Like applying a force to the character or triggering a VFX. Returns “Success” when completed, “Running” while processing, and “Failure” if something goes wrong.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Compsitors&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Compsitors&amp;quot; aria-label=&amp;quot;Anchor link for: Compsitors&amp;quot;&amp;gt;Compsitors&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;A compositor is a node that can have one or more children. Based on the type of compositor (typically two core types), the way the children are iterated through is different.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;text-align: left&amp;quot;&amp;gt;Type&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th style=&amp;quot;text-align: center&amp;quot;&amp;gt;Result&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;&amp;lt;&amp;#x2F;thead&amp;gt;&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Sequence&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Children are iterated through until the first child that returns “Failure”&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Select&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Children are iterated through until the first child that returns “Success”&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;&amp;#x2F;tbody&amp;gt;&amp;lt;&amp;#x2F;table&amp;gt;
&amp;lt;p&amp;gt;Sequences are really useful for prefixing with conditions in order to have pre-requisites for a particular action. That way you can determine under what condition an action (or actions!) is&amp;#x2F;are taken.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Decorators&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Decorators&amp;quot; aria-label=&amp;quot;Anchor link for: Decorators&amp;quot;&amp;gt;Decorators&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Decorators are nodes that can only have a single child node. They “decorate” the result of their child node by transforming it in some way. There are a few key types that are generally useful:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;text-align: center&amp;quot;&amp;gt;Type&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th style=&amp;quot;text-align: left&amp;quot;&amp;gt;Result&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;&amp;lt;&amp;#x2F;thead&amp;gt;&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Succeeder&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Returns “Success” always (except for when child returns “Running”)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Failer&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Returns “Failure” always (except for when child returns “Running”)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Inverter&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Returns the opposite of the childs result (except for when child returns “Running”)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Limiter&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Returns the child’s result the first time (or a customizable number of times) and then always returns “Failure” without calling the child node&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;Timer&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Returns the child’s result at first, then uses a countdown timer to determine the next time to use the child node’s result. If not time yet, returns “Failure”&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;&amp;#x2F;tbody&amp;gt;&amp;lt;&amp;#x2F;table&amp;gt;
&amp;lt;p&amp;gt;Decorators are pretty fun to apply a logical transformation for results. Remember how conditions are supposed to be positive affirmations? Inverters are where you can check for negative affirmations. ( &amp;lt;em&amp;gt;Don’t tell your therapist about this!&amp;lt;&amp;#x2F;em&amp;gt; 😏 )&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Putting_it_all_together&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Putting_it_all_together&amp;quot; aria-label=&amp;quot;Anchor link for: Putting_it_all_together&amp;quot;&amp;gt;Putting it all together&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;behaviour_tree_example.jpg&amp;quot; alt=&amp;quot;An example of a behaviour tree&amp;quot; title=&amp;quot;An example of a behaviour tree&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;An example of a behaviour tree&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;Here’s a behaviour tree example I mocked up in Obsidian.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;You can see the “root” node connects to a “Sequence” which then has two children which are also “sequence” nodes. In certain contexts, it’s usually helpful to name different branches based on what they are supposed to accomplish in totality. So if we read through the tree, it goes through these steps:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;Jump_Branch&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Jump_Branch&amp;quot; aria-label=&amp;quot;Anchor link for: Jump_Branch&amp;quot;&amp;gt;Jump Branch&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Checking if it’s on the ground&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Checking if the “JUMP” input is pressed&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Passing both checks, applying a positive Y force.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
&amp;lt;h3 id=&amp;quot;Idle_Branch&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Idle_Branch&amp;quot; aria-label=&amp;quot;Anchor link for: Idle_Branch&amp;quot;&amp;gt;Idle Branch&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Invert result of
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Checking if the actors velocity vector length (speed technically) is greater than zero&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;Passing the check, requesting the animation “IDLE” to play&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
&amp;lt;h2 id=&amp;quot;More_complexity?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#More_complexity?&amp;quot; aria-label=&amp;quot;Anchor link for: More_complexity?&amp;quot;&amp;gt;More complexity?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The awesome thing about behaviuour trees is that the same core nodes apply no matter what scale your tree operates at. There are some more advanced solutions for incredibly massive behaviour trees like in for the enemies in recent &amp;lt;em&amp;gt;Far Cry&amp;lt;&amp;#x2F;em&amp;gt; games. But the same core logic is always being applied.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Also I didn’t even get into the concept of the “Blackboard”, which is basically a &amp;lt;code&amp;gt;Dictionary&amp;lt;&amp;#x2F;code&amp;gt; of values (&amp;lt;code&amp;gt;Variant&amp;lt;&amp;#x2F;code&amp;gt; would be a good choice for Godot) that is accessible to all nodes in the tree when they perform their tick process. The blackboard is used to communicate information across nodes. Such as caching a particular jump strength based on a condition, then using that jump strength in the “Jump Branch”.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Complex logic is pretty easy to do, once you get over the hurdle of the boiler plate. I promise I’m getting to the pros and cons, but first I gotta talk about State Machines!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h1 id=&amp;quot;Finally_talking_about_State_Machines&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Finally_talking_about_State_Machines&amp;quot; aria-label=&amp;quot;Anchor link for: Finally_talking_about_State_Machines&amp;quot;&amp;gt;Finally talking about State Machines&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;State Machines are so incredibly old compared to all of the kinds of AI available to use in games. They are originally a concept from Electrical Engineering. Specifically in the &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Moore_machine&amp;quot;&amp;gt;“Moore”&amp;lt;&amp;#x2F;a&amp;gt; and &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Mealy_machine&amp;quot;&amp;gt;“Mealy”&amp;lt;&amp;#x2F;a&amp;gt; machines. Those two types of state machines are pretty much the end of what was stolen from electrical engineering and robotics. From there, we added a bit of our own &amp;lt;em&amp;gt;spice&amp;lt;&amp;#x2F;em&amp;gt; to make things more fun.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;State machines are actually incredibly simple when we get down to it. Though there are some implementations that are more robust than others. We usually refer to them as “Finite State Machines” because there is a limited (finite) number of states the “machine” can be in. And specifically the machine can only ever be in one state at a single time.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Here an example image first might be more helpful:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;fsm_example.jpg&amp;quot; alt=&amp;quot;An example Finite State Machine&amp;quot; title=&amp;quot;An example Finite State Machine&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;An example Finite State Machine&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;Each state handles it’s own logic as if it was completely independant of the other states. Which should be super familiar for you if you have programming experience. Essentially, if you are using a long &amp;lt;code&amp;gt;if...elseif...elseif...elseif...else&amp;lt;&amp;#x2F;code&amp;gt; chain, or a super massive &amp;lt;code&amp;gt;switch&amp;lt;&amp;#x2F;code&amp;gt; statement, then you might benefit from extracting each clause into a state definition.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;In the above example we can see three core states, and the conditions by which they transition to the particular state. It is imporant to note those transitions are one-way directional. States themselves are actually incredibly simple. The complexity comes in when we need to orchestrate transitions based on conditions. A very Godot approach is to use signals, and then have a parent node connect those signals to state change calls. &amp;lt;em&amp;gt;Which is exactly what I did in Squiggles Core 4X (SC4X)&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre class=&amp;quot;giallo&amp;quot; style=&amp;quot;color: #E6EDF3; background-color: #0D1117;&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;csharp&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt;public override void&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #D2A8FF;&amp;quot;&amp;gt; _Ready&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;() {&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    _stateCutscene.OnStateFinished&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; +=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; ()&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; _fsm.&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #D2A8FF;&amp;quot;&amp;gt;ChangeState&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;(_stateMoving);&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;    _stateMoving.OnStateFinished&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; +=&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; ()&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF7B72;&amp;quot;&amp;gt; =&amp;amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt; _fsm.&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span style=&amp;quot;color: #D2A8FF;&amp;quot;&amp;gt;ChangeState&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;span&amp;gt;(_stateCutscene);&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;span&amp;gt;}&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;span class=&amp;quot;giallo-l&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;In case you aren’t super familiar with C# code, the above code is connecting the &amp;lt;code&amp;gt;OnStateFinished&amp;lt;&amp;#x2F;code&amp;gt; signal from the two types of states available to a lambda expression that calls the &amp;lt;code&amp;gt;_fsm&amp;lt;&amp;#x2F;code&amp;gt; (an instance of &amp;lt;code&amp;gt;FiniteStateMachine&amp;lt;&amp;#x2F;code&amp;gt;) to change the state to a new state. The signals are emitted from the state when they detect a condition where they need to exit and the orchestating node (in this case a “Player Controller”) defines how those are handled. Additionally, we can use external triggers to force a switch if we like. And subclasses of &amp;lt;code&amp;gt;State&amp;lt;&amp;#x2F;code&amp;gt; can even define their own signals to allow multiple types of transitions out.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;So we have it working great! A small number of states and the transtions handled by an orchestrating node. Now imagine we have 9 possible states with 16 total transitions! That sounds like a whole lot! How would we even begin to create a solution to that, let alone an &amp;lt;em&amp;gt;elegant&amp;lt;&amp;#x2F;em&amp;gt; one!?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Adding_completixity_to_FSMs&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Adding_completixity_to_FSMs&amp;quot; aria-label=&amp;quot;Anchor link for: Adding_completixity_to_FSMs&amp;quot;&amp;gt;Adding completixity to FSMs&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img src=&amp;quot;hfsm_example.jpg&amp;quot; alt=&amp;quot;An example of an HFSM&amp;quot; title=&amp;quot;An example of an HFSM&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;An example of an HFSM&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;p&amp;gt;So this is what would be called a “Hierarchical Finite State Machine” (HFSM). Bascially the solution to complexity is just layering more and more states on top. In the example the “top level states” would be:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;State Overworld&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;State Cutscene&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;State Fishing Minigame&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;Then “Overworld” and “Fishing Minigame” each have their own sub-FSMs for controlling logic within that state. An essential guide is that for any state implementation, if you are asking it to store more state information and changing behaviour based on that, you should extract that into multiple states. And if those multiple states are closely tied as a coherent group, group them in a sub-state machine (&amp;lt;em&amp;gt;kinky&amp;lt;&amp;#x2F;em&amp;gt; &amp;#x2F;j).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;That hierarchy of state machines embedded into state machines is why it is called “Hierarchical.” As far as my experience goes, HFSMs are best used for more complex AI problems. For example, the above example is for a player controller which allows the game to react to the current game state and handle the player’s actions based on that. So the mini-games are just another top-level state (with sub-space). In fact if the game requires &amp;lt;em&amp;gt;many&amp;lt;&amp;#x2F;em&amp;gt; mini-games each with their own needed controls, it may be prudent to make a new top-level state for all mini-games and then have a sub-level for each game state and then another sub-level for the individual action states for those mini-games.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Which, I would argue is rather &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;elegant&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;spy-x-family-elegant.gif&amp;quot; alt=&amp;quot;Spy X Family character shouting &amp;amp;amp;#x27;elegant!&amp;amp;amp;#x27;&amp;quot; title=&amp;quot;Spy X Family character shouting &amp;amp;#x27;elegant!&amp;amp;#x27;&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Spy X Family character shouting &amp;amp;#x27;elegant!&amp;amp;#x27;&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h1 id=&amp;quot;Pros_and_Cons&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Pros_and_Cons&amp;quot; aria-label=&amp;quot;Anchor link for: Pros_and_Cons&amp;quot;&amp;gt;Pros and Cons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Let’s look at the two now that we’ve gone over how they each work!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Behaviour_Tree_Pros&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Behaviour_Tree_Pros&amp;quot; aria-label=&amp;quot;Anchor link for: Behaviour_Tree_Pros&amp;quot;&amp;gt;Behaviour Tree Pros&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Behaviour trees are absolutely incredible at modelling more complex behaviours and interactions. A lot of enemy AIs in recent years that felt “alive” are because of super-charged behaviour trees. (As well as incredibly smart AI designers!!!) This structure is incredibly powerful for organizing behaviours and conditions in a way that can react to dynamic alterations to the structure. Yeah you can hot-swap branches at runtime and Behaviour Trees will shrug it off like a light rain (when done correctly).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;yor-forger-spy-x-family.gif&amp;quot; alt=&amp;quot;Yor from Spy X Family spinning a blade in a dark forest. It ends with her catching a falling flower at the very tip of the blade.&amp;quot; title=&amp;quot;Yor from Spy X Family spinning a blade in a dark forest. It ends with her catching a falling flower at the very tip of the blade.&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Yor from Spy X Family spinning a blade in a dark forest. It ends with her catching a falling flower at the very tip of the blade.&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h2 id=&amp;quot;State_Machine_(FSM&amp;#x2F;HFSM)_Pros&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#State_Machine_(FSM&amp;amp;#x2F;HFSM)_Pros&amp;quot; aria-label=&amp;quot;Anchor link for: State_Machine_(FSM&amp;amp;#x2F;HFSM)_Pros&amp;quot;&amp;gt;State Machine (FSM&amp;#x2F;HFSM) Pros&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;FSMs are incredibly simple to build from scratch, and can re-use existing code if you are going through a refactor. Additionally, you can extract them into HFSMs if the need arises. They are incredibly powerful at handling logic when you know a discrete number of states you want the AI to be in, and you have very specific transitions between them.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Behaviour_Tree_Cons&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Behaviour_Tree_Cons&amp;quot; aria-label=&amp;quot;Anchor link for: Behaviour_Tree_Cons&amp;quot;&amp;gt;Behaviour Tree Cons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;There is &amp;lt;strong&amp;gt;so much boilerplate&amp;lt;&amp;#x2F;strong&amp;gt; to get a behaviour tree system up and running. As well as needing to write custom nodes for each unique type of action that you want. If you have a lot of smaller actions that you want various different entities to be able to do slightly differently, that would be a use case, but it is still going to be a huge pain assuming you even are able to overcome the steep learning curve of thinking in trees!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;anya-anya-forger.gif&amp;quot; alt=&amp;quot;Anya from Spy X Family looking confused and burnt out&amp;quot; title=&amp;quot;Anya from Spy X Family looking confused and burnt out&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Anya from Spy X Family looking confused and burnt out&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;&amp;lt;h2 id=&amp;quot;State_Machine_(FSM&amp;#x2F;HFSM)_Cons&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#State_Machine_(FSM&amp;amp;#x2F;HFSM)_Cons&amp;quot; aria-label=&amp;quot;Anchor link for: State_Machine_(FSM&amp;amp;#x2F;HFSM)_Cons&amp;quot;&amp;gt;State Machine (FSM&amp;#x2F;HFSM) Cons&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;State Machines are much less resiliant to run-time changes because a run-time change would necessitate a re-orchestration of all of the transitions. And if that is something you are doing, you should &amp;lt;em&amp;gt;really&amp;lt;&amp;#x2F;em&amp;gt; make sure you wouldn’t rather use an HFSM for the same solution.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;Conclusion&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Conclusion&amp;quot; aria-label=&amp;quot;Anchor link for: Conclusion&amp;quot;&amp;gt;Conclusion&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I really wish I could just tell you, “X is better than Y and Z, so just use that for everything.” But that’s not how this works. &amp;lt;em&amp;gt;Nothing is ever easy&amp;lt;&amp;#x2F;em&amp;gt;. The lesson I hope you are taking from this article is that you need to find the right &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;tool&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt; for the &amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;job&amp;lt;&amp;#x2F;strong&amp;gt;&amp;lt;&amp;#x2F;em&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;figure&amp;gt;
    &amp;lt;img class=&amp;quot;gif&amp;quot; src=&amp;quot;tails-speech-bubble.gif&amp;quot; alt=&amp;quot;Tails from Sonic Boom trying to eat soup with a fork and laughing&amp;quot; title=&amp;quot;Tails from Sonic Boom trying to eat soup with a fork and laughing&amp;quot; &amp;#x2F;&amp;gt;
    &amp;lt;figcaption&amp;gt;Tails from Sonic Boom trying to eat soup with a fork and laughing&amp;lt;&amp;#x2F;figcaption&amp;gt;
&amp;lt;&amp;#x2F;figure&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;In case you haven’t noticed, I have emojis now! Thanks to a &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jekyll&amp;#x2F;jemoji&amp;quot;&amp;gt;jekyll plugin&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Note: this is actually a clever lie now that I’m no longer using Jekyll, or even the next SSG (Static Site Generator) that I used after. I’m onto Zola, which just has emoji shortcode support out of the box. Leaving the link though in case anyone in the future wants to add the feature to their jekyll based blog&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h1 id=&amp;quot;So_you_want_to_learn_more?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#So_you_want_to_learn_more?&amp;quot; aria-label=&amp;quot;Anchor link for: So_you_want_to_learn_more?&amp;quot;&amp;gt;So you want to learn more?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;Here’s some resources to learn more about particular AIs in games and how to use them in interesting ways. Lotta youtube links because gamedev youtube is my &amp;lt;em&amp;gt;addiction&amp;lt;&amp;#x2F;em&amp;gt; ❤️&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;text-align: center&amp;quot;&amp;gt;Link&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;th style=&amp;quot;text-align: left&amp;quot;&amp;gt;Description&amp;lt;&amp;#x2F;th&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;&amp;lt;&amp;#x2F;thead&amp;gt;&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;user&amp;#x2F;tthompso&amp;quot;&amp;gt;‘AI &amp;amp;amp; Games’ (Tommy Thompson) YouTube channel&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;Tommy is an excellent resource for learning about cutting edge AI techniques used in gaming, primarily focused on AAA solutions. But my entry to the subject was his channel which went into deep dives on different topics.&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;youtu.be&amp;#x2F;qwOM3v8T33Q&amp;quot;&amp;gt;Heartbeast’s Amazing FSM Tutorial (GDscript)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;A super straightforward approach to implementing a basic Finite State Machine in Godot 4 using GDScript. I used it as a guide for the State Machine implementation in &amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;QueenOfSquiggles&amp;#x2F;Squiggles-Core-4X&amp;quot;&amp;gt;Squiggles Core 4X&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align: center&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;noopener nofollow noreferrer external&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;bitbrain&amp;#x2F;beehave&amp;quot;&amp;gt;BitBrain’s Behaviour Tree Addon “Beehave” (GDscript)(MIT)&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;td style=&amp;quot;text-align: left&amp;quot;&amp;gt;A super amazing behaviour tree implementation that uses a few extra node types to make the trees more robust. Comes with debugging tools so you can inspect what the tree is doing at any given time (even in real-time!!!)&amp;lt;&amp;#x2F;td&amp;gt;&amp;lt;&amp;#x2F;tr&amp;gt;
&amp;lt;&amp;#x2F;tbody&amp;gt;&amp;lt;&amp;#x2F;table&amp;gt;
&amp;lt;h1 id=&amp;quot;Bonus!_You_like_memes?&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;zola-anchor&amp;quot; href=&amp;quot;#Bonus!_You_like_memes?&amp;quot; aria-label=&amp;quot;Anchor link for: Bonus!_You_like_memes?&amp;quot;&amp;gt;Bonus! You like memes?&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;h1&amp;gt;
&amp;lt;p&amp;gt;You might have noticed the GIFs I used in this post. I made a custom “include” type that I can use for my posts that specifically embeds any tenor GIF with a particular width and then centers it and adds a border. Optionally it can add a caption to the gif as well since I’m not sure how well tenor embedded gifs support captions. Plus that way if it fails to load, the meaning is still there. You can refer to my &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;queenofsquiggles.codeberg.page&amp;#x2F;guides&amp;#x2F;embedding-gifs&amp;#x2F;&amp;quot;&amp;gt;Embedding GIFs&amp;lt;&amp;#x2F;a&amp;gt; page for details.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
    
</feed>
