<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Gamedev on David Amador</title>
    <link>https://www.david-amador.com/tags/gamedev/</link>
    <description>Recent content in Gamedev on David Amador</description>
    <image>
      <title>David Amador</title>
      <url>https://www.david-amador.com/david-amador-pixel.png</url>
      <link>https://www.david-amador.com/david-amador-pixel.png</link>
    </image>
    <generator>Hugo -- 0.139.0</generator>
    <language>en</language>
    <lastBuildDate>Sat, 26 Apr 2025 08:10:00 +0000</lastBuildDate>
    <atom:link href="https://www.david-amador.com/tags/gamedev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Switching from Unity to Godot My Experience So Far</title>
      <link>https://www.david-amador.com/2025/04/switching-unity-to-godot-my-experience-so-far/</link>
      <pubDate>Sat, 26 Apr 2025 08:10:00 +0000</pubDate>
      <guid>https://www.david-amador.com/2025/04/switching-unity-to-godot-my-experience-so-far/</guid>
      <description>After years with Unity, I spent time exploring Godot 4. Here&amp;#39;s some of the things I liked, the things that frustrated me, and how the switch compares overall.</description>
      <content:encoded><![CDATA[<h3 id="why">Why?</h3>
<p>After several years working with Unity, both for personal and contract projects, I decided to finally properly test and use Godot.</p>
<p>I had been keeping an eye on it for a few years, but <a href="/2023/09/the-unity-enshittification-proprietary-tech-dangers-and-mostly-not-talking-about-what-im-doing/">Unity&rsquo;s controversial policy changes</a> in late 2023 were the final push I needed to start experimenting seriously with an alternative engine, even if I could use my custom engine.</p>
<p>I guess the sort of exploding new wave of devs switching to Godot made me even more tempted, adoption is rapidly expanding.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center"><img alt="Godot game jam usage 2023" loading="lazy" src="/wp-content/uploads/2025/04/godot_jams_use_2023.jpg"></th>
          <th style="text-align: center"><img alt="Godot game jam usage 2024" loading="lazy" src="/wp-content/uploads/2025/04/godot_jams_use_2024.jpg"></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center"><em>Godot game jam usage – 2023</em></td>
          <td style="text-align: center"><em>Godot game jam usage – 2024</em></td>
      </tr>
  </tbody>
</table>
<p>While I’m still using Unity for some projects, Godot has become my engine of choice for prototyping, personal games, and game jam-sized projects.</p>
<p>I&rsquo;m not an expert but I&rsquo;ve been using it for some time so I&rsquo;ll share my first impressions, the things I loved, the things that could be better, and how the overall experience compares to Unity.</p>
<p><img alt="Godot Editor Overview" loading="lazy" src="/wp-content/uploads/2025/04/godot_editor_overview.jpg"><br>
<em>Godot editor with a 3D demo prototype project loaded.</em></p>
<hr>
<h3 id="the-good-parts">The Good Parts</h3>
<p><strong>Node System</strong><br>
Godot’s node system is incredibly flexible. Each scene is built by composing nodes, and nodes themselves can be entire scenes. Coming from Unity’s prefab and component system, I found Godot’s approach simpler, the &ldquo;prefabs&rdquo; system feels more robust in Godot, it always felt a bit more fragile in Unity, like things could fall apart quicky, especially nested prefabs.</p>
<p><img alt="Create a new Godot Node window" loading="lazy" src="/wp-content/uploads/2025/04/godot_create_node_system.jpg"></p>
<p>At first, having only one script per node felt restrictive, I remember this was my first &ldquo;oh no, but why?&rdquo; moment, but quickly I realized it makes sense and it actually enforces a cleaner project structure and easier readability.</p>
<p><img alt="Example of a Godot Node setup" loading="lazy" src="/wp-content/uploads/2025/04/godot_node_system_example.jpg"></p>
<p>Making shaders inside the editor itself by code is super easy to iterate and see the results, it highlights syntax errors and it&rsquo;s well rounded and perfect for quick tweaking.</p>
<p><img alt="Doing a shader for a duck " loading="lazy" src="/wp-content/uploads/2025/04/godot_shader_example.jpg"></p>
<p><strong>UI Themes</strong><br>
Godot&rsquo;s UI system is a pleasure to work with once you understand how <strong>themes</strong> work.<br>
Instead of tweaking every button manually, you can design a style once and apply it across your project — similar to using CSS on a website.<br>
Compared to Unity’s sometimes fragile UI system, Godot’s feels more modern and consistent.</p>
<p><img alt="Godot UI Theme Example" loading="lazy" src="/wp-content/uploads/2025/04/godot_ui_theme_example.jpg"><br>
<em>Styling the UI globally using Godot&rsquo;s Theme system, almost kind of a &ldquo;CSS&rdquo; for games.</em></p>
<p><strong>Editor Scripting and GDScript</strong><br>
Before starting I knew we could code in GDScript, C# and C++.
Honestly I&rsquo;m growing tired of C#, but going C++, which I already use for my custom engine, felt like I was leaving a learning opportunity on the table. So I decided to go full GDScript and learn it, also there are way more tutorials and examples online using GDScript.</p>
<p>It&rsquo;s a Python like indentation system, so I&rsquo;m used to it from my Python scripts, the language is quite easy to understand and has several nice functionalities. We still have classes, enums, inheritance, arrays etc, you&rsquo;ll feel at home right away.</p>
<p>The signals are surprisingly boilerplate code free, so I&rsquo;ve embraced them for several things.</p>
<p>The ability to script inside the editor with GDScript makes many workflows very fast. GDScript itself is fun, clean, and powerful enough for full games. It feels like a sandbox-friendly language without giving up robustness.</p>
<p><strong>Mobile Export</strong><br>
I decided to export a mobile build of a prototype, exporting to iOS was surprisingly straightforward. It needs Xcode and setting up the usual certificates, because Godot produced a working Xcode project that we can then use to compile and deploy easily to the phone.<br>
Aside from a small hiccup with orientation settings, everything just worked on first build. Didn&rsquo;t yet tried Android but I&rsquo;m assuming a similar process.</p>
<p><strong>Debugging Tools</strong><br>
I&rsquo;ve been using Rider for several years for C# and C++, so I decided to use it as well here, even if coding and debugging inside Godot is very solid.<br>
But using Rider externally allows me some familiarity, but we can still use the built-in editor debugger, you can set breakpoints, watch variables, and step through code easily. It works as expected so far, no complaints there.</p>
<p><img alt="Debugging a Godot project" loading="lazy" src="/wp-content/uploads/2025/04/godot_debugging_example.jpg"></p>
<p>An awesome bonus: if you hit a C++ level error, Godot shows you the exact file and line number in the engine source — and you can jump straight to GitHub to inspect it.</p>
<p><img alt="CPP code jump from Godot Editor" loading="lazy" src="/wp-content/uploads/2025/04/godot_open_cpp_source_code_in_editor.jpg"></p>
<p><strong>Open Community</strong><br>
Whenever I found documentation gaps or bugs, reporting them was easy, and fixes often came quickly.  The Godot community is active, helpful, and genuinely open to feedback. Many times the only way I could get something to work was by seeing someone with same issue because Docs were lacking something.</p>
<p><img alt="Debugging a Godot project " loading="lazy" src="/wp-content/uploads/2025/04/godot_community_1.jpg"></p>
<hr>
<h3 id="the-rougher-edges">The Rougher Edges</h3>
<p><strong>Editor UX Inconsistencies</strong><br>
While the editor is powerful, UX polish is still lacking compared to Unity or Unreal.  Some buttons don&rsquo;t look clickable, tabbing between elements can behave inconsistently across tools, and finding certain actions (like creating new animations) isn’t always intuitive.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center"><img alt="Godot Animation Editor Confusing Button" loading="lazy" src="/wp-content/uploads/2025/04/godot_animation_button_1.jpg"></th>
          <th style="text-align: center"><img alt="Godot Animation Editor Confusing Button" loading="lazy" src="/wp-content/uploads/2025/04/godot_animation_button_2.jpg"></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<p>*Some buttons in the editor can be hard to spot at first, like adding a new animation. &ldquo;Animation&rdquo; doesn&rsquo;t look like a button at first glance *</p>
<p><img alt="Godot size before position in UI " loading="lazy" src="/wp-content/uploads/2025/04/godot_size_before_position.jpg"><br>
<em>Control Nodes show the Size before position, contrary to the other nodes, which doesn&rsquo;t make much sense to me, <a href="https://github.com/godotengine/godot/pull/100169">I even opened a PR for this</a>, it&rsquo;s under consideration.</em></p>
<p><strong>TileMap Workflow</strong><br>
Working with TileMaps can be a bit frustrating. I found myself often jumping between multiple tabs just to tweak small things. It feels fragmented compared to Unity’s more consolidated tile setup.</p>
<p><strong>Atlas System</strong><br>
Managing sprite Atlases in Godot isn’t as flexible as Unity’s system. We can’t name regions (afaik), and the workflow feels a bit clunky compared to Unity’s Sprite Atlas features. All of this can be improved but at the moment it feels a bit more in the way, and I never felt this friction when using Unity.</p>
<p><strong>Version Mismatches and Learning Curve</strong><br>
Because Godot 4 changed many APIs from version 3, a lot of web tutorials and resources are slightly outdated.  The official documentation is good, but sometimes finding clear differences between versions required digging through forums or Reddit posts. The good news really is that if you take the time to make a PR on Github or ask for someone to fix odds are it will be done rather quickly.</p>
<p><strong>GDScript Indentation</strong><br>
While GDScript is fun, I’m personally not a fan of Python-style tab-based indentation.<br>
I would have preferred curly braces <code>{}</code> for clarity, but that’s more a personal preference than a true flaw.</p>
<hr>
<h3 id="iteration">Iteration</h3>
<p>Godot is rapidly evolving, last month Godot 4.4 was released with tons of new features,
from performance boost, a built-in game window for running the games inside the editor, typed dictionaries, physics improvements, and tons of more things.</p>
<p>This is great, but also means some things might evolve quickly or get deprecated as the engine improves. I think we&rsquo;re on the stage that Unity was around version 4-5-2017 transitions. Not saying this as a bad thing, just that some new features might mean something else we were relying has to go.
One thing I noticed is that they overhauled the tilemap system in favour of a layered one, so the older one is still around but not recommended; and it brought me memories of Unity getting rid of the old Particle System when they got a new one. Again, the right choices, but with some pains along the way.</p>
<p>You can read all the new features on Godot 4.4 here: <a href="https://godotengine.org/releases/4.4/">https://godotengine.org/releases/4.4/</a></p>
<h3 id="final-thoughts">Final Thoughts</h3>
<p>Despite the small rough edges, my overall experience with Godot so far has been <strong>very positive</strong>.  It’s an incredibly powerful, lightweight engine that has a nice balance between features and flexibility, encourages a clean structure, and is backed by a great community.</p>
<p>If you’re coming from Unity and considering Godot, expect a bit of a learning curve — especially with editor quirks and differences in workflow. But once you get past the initial bumps, it’s really nice.</p>
<p>I would HIGHLY recommend learning GDScript instead of &ldquo;oh but I know C# already&rdquo;.</p>
<p>I’m excited to keep building with Godot, and I’m looking forward to seeing how the engine grows even stronger in the next few years.</p>
<p>Bonus tip I read somewhere, if something isn&rsquo;t working, and you feel like it should, restart Godot or clean the autogenerated .godot folder, and odds are it will work properly now, especially GDScript stuff tends to be &ldquo;confused&rdquo; if you use external tools.</p>
<p>P.S.: If you also recently switched to Godot, I&rsquo;d love to hear your experience too. Feel free to comment or message me.</p>
<hr>
<p>See you in the next post!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Switching to a new Keyboard, the Glove80</title>
      <link>https://www.david-amador.com/2025/03/new-keyboard-glove80/</link>
      <pubDate>Sat, 29 Mar 2025 11:20:55 +0000</pubDate>
      <guid>https://www.david-amador.com/2025/03/new-keyboard-glove80/</guid>
      <description>&lt;h3 id=&#34;why&#34;&gt;Why?&lt;/h3&gt;
&lt;p&gt;My 8-9 year old Microsoft Sculpt Ergonomic keyboard died 🪦 (actually it&amp;rsquo;s been showing signs for a while), so I decided to search the market.&lt;/p&gt;
&lt;p&gt;At first I just wanted &amp;ldquo;the same one&amp;rdquo;, but they are discontinued, even used ones are expensive, and many didn&amp;rsquo;t had the dongle anymore (btw don&amp;rsquo;t buy this KB without the bundled dongle, comes locked from factory, you can&amp;rsquo;t use a different one, shame on you MS).
I found that some brands will eventually have similar models later this year (but no release date yet) but I needed to start changing now.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h3 id="why">Why?</h3>
<p>My 8-9 year old Microsoft Sculpt Ergonomic keyboard died 🪦 (actually it&rsquo;s been showing signs for a while), so I decided to search the market.</p>
<p>At first I just wanted &ldquo;the same one&rdquo;, but they are discontinued, even used ones are expensive, and many didn&rsquo;t had the dongle anymore (btw don&rsquo;t buy this KB without the bundled dongle, comes locked from factory, you can&rsquo;t use a different one, shame on you MS).
I found that some brands will eventually have similar models later this year (but no release date yet) but I needed to start changing now.</p>
<p>A friend recommended me a Kinesis or the ErgoDox, but for a variety of reasons I ended up going with a Glove80 which I found during my searches. From reviews I read online I saw a few saying it was one of the most comfortable KBs for smaller hands/fingers so I decided to give it a go. It&rsquo;s an expensive one, but it&rsquo;s split, concave, ortholinear and it has the F1-F10 keys which I think are a nice to have separate.</p>
<p>I anticipate a big learning curve, and there&rsquo;s a possibility I might not even get used to it. I found a bunch of posts of people who gave up and returned them (any of the KBs I mentioned really), so I anticipate friction. I&rsquo;m going to write a log on how things will progress and eventually post it. Regardless of failure or success.</p>
<h3 id="unboxing">Unboxing</h3>
<p>After much debating I decided to order it on February 6th, received it on February 14th, so overall pretty fast shipping + delivery.</p>
<p>I got the Rev2 with Cherry Blossom switches; and contrary to Rev1, it seems it always comes with a carrying case now, and this is how it was packed.</p>
<p><img alt="Glove80 Rev 2 unboxing" loading="lazy" src="/wp-content/uploads/2025/03/glove80_rev2_unboxing.jpg"></p>
<p>The box is indeed sturdy, and as the welcome note claims, good enough to travel, although it&rsquo;s on the big side so I don&rsquo;t see it as something to be carried around everyday, but for a trip or working elsewhere for a couple days it&rsquo;s very good.</p>
<p>It also came with some spare keycaps on a cloth bag, some tools and rubbers for tenting, and a USB-C (KB side) to USB-A (PC side) cable.</p>
<p><img alt="Glove80 extras in the case" loading="lazy" src="/wp-content/uploads/2025/03/glove80_unboxing_extras.jpg"></p>
<h3 id="setup">Setup</h3>
<p>You can setup the keyboard by bluetooth (no dongle) or via USB cable. You only need to connect the left part, and the right side always communicates with the left one wirelessly. However, to charge you need to connect a cable on both, not at the same time but if you want to never care about battery you&rsquo;ll need a USB split cable or 2 of them always plugged in. The left side runs out of battery faster than the right one so that&rsquo;s probably not an issue.</p>
<p><img alt="Glove80 tenting" loading="lazy" src="/wp-content/uploads/2025/03/glove80_tenting.jpg"></p>
<p>In terms of tenting there&rsquo;s several feet with some screws you can lower and put higher as needed, but I&rsquo;ve been using it flat. As I mentioned they ship it with some extra rubbers, for stability if needed to raise a lot, I have it on a deskmat and it&rsquo;s super stable, I guess on a desk directly, if you run into issues that could be useful.</p>
<p>Note for Mac users, the best way to just use it out of the box and having all keys work as they are on each key Label is U.S. International - PC as the keyboard layout.</p>
<p><img alt="Glove80 mac keyboard setting" loading="lazy" src="/wp-content/uploads/2025/03/glove80_mac_keyboard_setting.png"></p>
<h3 id="day-1">Day 1</h3>
<p>The first thing I noticed it how low profile it is, I love it, so close to the desk, here&rsquo;s the left side near a Nintendo Switch (left).</p>
<p><img alt="Glove80 low profile" loading="lazy" src="/wp-content/uploads/2025/03/glove80_side_profile_vs_nintendo_switch.jpg"></p>
<p>Ok just to be honest here, I just tried it but right now but I&rsquo;m still typing this on my temporary keyboard, I tried the Glove80 a bit and I&rsquo;m now on that &ldquo;OMG I regret this already!&rdquo; stage. The packing is very nice, the keyboard looks great and seems comfortable, but I&rsquo;m switching from ISO to ANSI, algo to split and ortholinear, everything is in a completely different place, I can barely find anything. Out of curiosity I did a <a href="https://monkeytype.com/">https://monkeytype.com/</a>  test and yeah this will take some getting use to, but I&rsquo;m excited for this.</p>
<p><img alt="Glove80 day one test typing" loading="lazy" src="/wp-content/uploads/2025/03/glove80_day_one_test_typing.jpg"></p>
<h3 id="day-2">Day 2</h3>
<p>I&rsquo;m typing this on the Glove80 now so it might take forever. I&rsquo;ve been practicing a little bit more and I started to average 20 words per minute (with a lot of errors and corrections). So it&rsquo;s still terrible but not as bad as yesterday, that&rsquo;s what I got to focus on.</p>
<p>Some observations already, most of my tests are still just words as I noticed that I need to get used to the ortholinear layout, I have a lot of fails that come from the muscle memory of fingers moving around, which is not as needed here. Also I&rsquo;m messing up all the time the usual shortcuts, CTRL, SHIFT, ALT, they are all now in different places so there&rsquo;s a lot to get used to.</p>
<p>I don&rsquo;t like much that the &ldquo;WIN&rdquo; key is on the right thumb cluster, so I&rsquo;m taking a note to maybe switch it with the layer key which I guess I&rsquo;ll use way less.</p>
<p><img alt="Glove80 left and right thumbcluster" loading="lazy" src="/wp-content/uploads/2025/03/glove80_change_thumbcluster.jpg"></p>
<h3 id="day-4">Day 4</h3>
<p>I&rsquo;m only using the keyboard at night but I&rsquo;ve been making progress, do a couple rounds of tests after work, I&rsquo;m more comfortable typing with it, doesn&rsquo;t feel as strange anymore, at least words.</p>
<p>The keyboard is indeed comfortable, not having to move my hands so much, really starting to grow on me. During the day I&rsquo;m using a regular KB and I can feel the wrists pressure. If I fully turn into this keyboard I can see myself not wanting to go back.</p>
<p>It&rsquo;s funny that I now know exactly which characters I have more trouble typing, it&rsquo;s especially right hand pinky row (OPL) and left hand CDFV &ldquo;square&rdquo;. But mentally that has helped as I pause a bit, remember myself and do a bit less errors even if I&rsquo;m slower. I&rsquo;ve been trying to force myself not to look to the keyboard but once in a while I&rsquo;ll do a couple tests looking to get my bearings.</p>
<h3 id="day-5">Day 5</h3>
<p>Today I&rsquo;ve reached a 50 WPM speed test with 100%, that was an outliner but I&rsquo;m happy about it.</p>
<p><img alt="Glove80 5th day speed test" loading="lazy" src="/wp-content/uploads/2025/03/glove80_type_speed_day_5.png"></p>
<h3 id="day-7">Day 7</h3>
<p>Slowly but steady I&rsquo;m getting better. I found out that I tend to have the right side with a worse angle then the left side, probably bad posture from older keyboards, I guess I probably had the 1-piece keyboard always slightly more to the left, due to the mouse, so I tend to have my left wrist not as relaxed. This might be because of mouse use as well.</p>
<p>Yikes coding just kills your body slowly.</p>
<p><img alt="Glove80 5th day speed test" loading="lazy" src="/wp-content/uploads/2025/03/glove80_type_speed_day_7.png"></p>
<h3 id="day-8">Day 8</h3>
<p>The start of a new week, I decided I&rsquo;ll now introduce numbers and special keys like ( ) ; , . etc to my typing practice, it&rsquo;s time to start dealing with that.</p>
<h3 id="day-17">Day 17</h3>
<p>Most of the biggest &ldquo;speed&rdquo; progress was made in the first 2 weeks, now it&rsquo;s mostly being a bit more confident with the fingers, not as many mistakes, not necessarily being faster.
I found out that I can have shortcuts to use the keyboard as a mouse, like having 4 keys to move mouse UP/DOWN/LEFT/RIGHT, this is a godsend, sometimes I just want to move the mouse a little bit and switch back to keyboard, this speeds up things by a lot. I mapped it to holding LAYER key and IJKL for movement.</p>
<h3 id="day-18-to-29">Day 18 to 29</h3>
<p>Slow but steady&hellip;</p>
<p><img alt="progress" loading="lazy" src="/wp-content/uploads/2025/03/glove80_typing_progress.jpg"></p>
<p>I keep bouncing between using the Glove80 and going back to my keyboard depending on what I need, if I need faster coding sessions or if something that I&rsquo;m more comfortable with going slower.</p>
<h3 id="day-30">Day 30</h3>
<p>I just realized I&rsquo;ve been using it as my main keyboard for the past week or so of work, I&rsquo;m still not as fast, and many of the shortcuts still ilude me a bit, but for the most part I can work ok, it&rsquo;s rare that I have to speed type this past week, so it was the perfect time. Most work has been evaluation, debug and searching/fixing stuff, so I think I&rsquo;ll get there as fast as my old KB eventually.</p>
<p>This change was mostly due to a friend asking me last week how the change was going (he has a Kinesis so was curious), and I said I was feeling bad on doing the full change while I was not as good, due to contract work. And his comment about my speed probably already being good enough and that I should switch made me do it. Thing is, that final stretch can&rsquo;t be done in small bursts.</p>
<h3 id="mapping-tool">Mapping tool</h3>
<p>Glove80 provides a web interface where we can remap every key and layer. It&rsquo;s very intuitive, and how I remapped some of the keys in a layer for using mouse. Once you wrap it up, it exports a file, you just plug in the keyboard left part via USB mode, just drag a file to a storage disk that shows up on the computer, once it&rsquo;s there it ejects automatically, then repeat it for the right side. It&rsquo;s fast and just works. I haven&rsquo;t used this much but I can see myself in the long run wanting to do tweaks as I even talked a bit before.</p>
<p>Most of the keyboard keys are in a good position, even if it feels odd at first, but you can remap everything.</p>
<h3 id="thoughts">Thoughts</h3>
<p>I&rsquo;ll admit that once in a while when I&rsquo;m in a rush I still go back to a regular keyboard, I&rsquo;ve made good progress and I can see the advantages but I have nearly 2 decades of muscle memory on regular keyboards, so it will take some extra time to never have the feeling of requiring to switch back when I need to code faster or in a rush. Shortcuts especially are harder.
But if I keep this up I&rsquo;ll eventually only need it rarely or not at all.</p>
<p>The good things is that when I use it my posture is better.</p>
<p><img alt="Glove80 on a desk" loading="lazy" src="/wp-content/uploads/2025/03/glove80_photo_desk_showing_halve_distanced_desk.jpg"></p>
<p>I can have my shoulder blades in a more comfortable position, I feel myself less hunched and curled, my shoulders and wrists appreciate it. It&rsquo;s definitely worth learning how to use one and the cost. Again, coding slowly kills your body, have to try and delay it as much as possible.</p>
<p>A special note for the support on Discord, before the purchase and after, whenever I had a question there was always someone there to help (staff and community).</p>
<p>In terms of comfort this is one, if not the best keyboard I&rsquo;ve ever typed on, your hands just rest there, very small travel distance for the fingers even for me with small hands.
However, and because of that, it&rsquo;s nearly perfect but the outer edges columns are a bit too far for me so I need to move my hand a bit for those. But considering on my older keyboards I had to move it mostly ALL the time, this is a big plus.</p>
<p>On a bad note, which is not necessarily the keyboard problem, but because it&rsquo;s not Bluetooth with a dongle, I found out Windows Bluetooth is so unreliable I had to force my device not to allow power management. Luckily that fixed disconnections with the Glove80 right away. It&rsquo;s possible I would have issues with other stuff (usually I have with Bluetooth headphones issues once in a while), but a keyboard failing wasn&rsquo;t something that I could have happening. While having a dongle seems cumbersome I feel like with all the connection/firmware is on the manufacturer side it&rsquo;s more reliable.</p>
<p>If you plan on using the RGB (I don&rsquo;t), prepare for the battery to die fast, just use it wired. And while I love the design, the rectangular edges seem a bit &ldquo;rough&rdquo;, I mean it&rsquo;s nitpicking but it&rsquo;s also not a cheap keyboard.</p>
<p><img alt="Glove80 Rev 2 unboxing" loading="lazy" src="/wp-content/uploads/2025/03/glove80_cherry_blossom.jpg"></p>
<p>I&rsquo;m still on the fence on the best place to keep my trackball mouse. Because the keyboard can be much farther apart, if you put the mouse on the right side, it becomes too uncomfortable, which defeats the purpose.
So sometime if I need to use it for longer sessions (like painting software etc) I just put the right part of the keyboard to the middle.</p>
<p>I don&rsquo;t regret buying this, even if it was the most expensive keyboard I ever got.</p>
<p><img alt="Most expensive keyboard so far" loading="lazy" src="/wp-content/uploads/2025/03/the_most_expensive_kb_so_far.jpg"></p>
<p>I would recommend this keyboard as a good one, for sure. However, having never tried any of the other popular ones (Kinesis, Ergodox, etc), I can&rsquo;t know for sure if this one is better or worse, all I can say is that I&rsquo;m happy with it so far.</p>
<p>Let me know if you have any particular questions, be glad to answer, I know this isn&rsquo;t exactly a &ldquo;good review post&rdquo;, it&rsquo;s just a dump of my process to get here.</p>
<hr>
<p>See you in the next post!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cozy Game Moments in Unexpected Places</title>
      <link>https://www.david-amador.com/2025/01/cozy-game-moments-in-unexpected-places/</link>
      <pubDate>Mon, 03 Feb 2025 20:20:55 +0000</pubDate>
      <guid>https://www.david-amador.com/2025/01/cozy-game-moments-in-unexpected-places/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s a rise in the popularity of cozy games, the ones that are not about just hard challenges, combat or adrenaline, but about comfort and attempt of well-being. Those are great, and it&amp;rsquo;s incredible to see the indie scene doing many interesting things in that department.&lt;/p&gt;
&lt;p&gt;But I always have this on the back on my mind as one of my favourite things, one thing I&amp;rsquo;m usually very interested in, cozy feelings/atmosphere that can be found in unexpected places.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>There&rsquo;s a rise in the popularity of cozy games, the ones that are not about just hard challenges, combat or adrenaline, but about comfort and attempt of well-being. Those are great, and it&rsquo;s incredible to see the indie scene doing many interesting things in that department.</p>
<p>But I always have this on the back on my mind as one of my favourite things, one thing I&rsquo;m usually very interested in, cozy feelings/atmosphere that can be found in unexpected places.</p>
<p>They can come in a variety of genres or situations, even if the overall game is not about that. What fascinates me about this is my own taste for &ldquo;comfort movies&rdquo;, when you ask someone what their comfort movie is, it&rsquo;s a wide range of action, horror, comedy, drama, sci-fi and more, it&rsquo;s not always obvious.</p>
<p>So in this post, I just to dump a bit of my thoughts on some of the games that I found interesting.</p>
<p>Let&rsquo;s start by an obvious to understand, and possibly one of my all time favourite ones &hellip;</p>
<h2 id="sanctuaries-of-survival">Sanctuaries of survival</h2>
<p>Resident Evil - Ok read it again but with the title voice, RESIDENT EVIL. Thanks :)</p>
<p>RE games, for those who never played, might seem like a weird pick for &ldquo;cozy&rdquo;, and it is, but let&rsquo;s focus on the first few games here, they are pure suspense and horror games, gore, scares, you die a lot, however, they pull off one of the most relaxing game rooms maps ever made, the Save Rooms. That&rsquo;s why I was mentioning the originals mostly, from Zero, 1, 2 and 3 the save rooms are so damn good.</p>
<p><img alt="Resident Evil 1 Remake Save Room" loading="lazy" src="/wp-content/uploads/2025/02/resident_evil_remake_gamecube_save_room.webp"></p>
<p>These locations as the name implies is where the player can save, but also, they allow you to breathe a little, small pockets of safety, where there are no dangers, you are locked from the monsters and you can manage your inventory.</p>
<p><img alt="Resident Evil 0 Save Room" loading="lazy" src="/wp-content/uploads/2025/02/resident_evil_0_save_room.webp"></p>
<p>On top of that, soothing music plays in the background, seriously, it&rsquo;s near perfect. The feeling is so strong, that the first few times, after you reach them, you don&rsquo;t want to leave, you are immediately attached to them. You can control when you leave, and leave you will, but at your pace, eagerly waiting for the next one. Unless you&rsquo;re out of Ink Ribbons!</p>
<p>Here, I&rsquo;ll save you the trouble of searching the <a href="https://www.youtube.com/watch?v=4pZV3UPmXI4">RE Save Room music</a> :)</p>
<h2 id="a-home-away-from-home">A Home Away From Home</h2>
<p>Final Fantasy VII, despite its epic scale and combats, dozens of hours of gameplay and storyline, joy and sadness, offers moments of quiet coziness during the difficult journey around the world.</p>
<p><img alt="Final Fantasy 7 PS1 Cozy Room" loading="lazy" src="/wp-content/uploads/2025/02/final_fantasy_7_cozy_room_3.jpg"></p>
<p>Whenever we are exploring a town, entering other people&rsquo;s houses (classic RPG!), everything has an inviting atmosphere. These spaces, though simple, feel familiar and offer a sense of relaxation.</p>
<table>
  <thead>
      <tr>
          <th><img alt="Final Fantasy 7 PS1 Cozy Room" loading="lazy" src="/wp-content/uploads/2025/02/final_fantasy_7_cozy_room_1.jpg"></th>
          <th><img alt="Final Fantasy 7 PS1 Cozy Room" loading="lazy" src="/wp-content/uploads/2025/02/final_fantasy_7_cozy_room_4.jpg"></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<p>It&rsquo;s the small details, like a carefully placed painting or a comfy-looking bed, that contributes to this feeling of comfort. These moments actually do a lot for the game&rsquo;s personality, especially because a lot of long dialogues take place in these environments, so you don&rsquo;t feel out of place, or with the urge to leave right away. Maybe it&rsquo;s it&rsquo;s painted nature, maybe it&rsquo;s the camera angle, but the Remake couldn&rsquo;t replicate this feeling.</p>
<p><img alt="Final Fantasy 7 PS1 Cozy Room" loading="lazy" src="/wp-content/uploads/2025/02/final_fantasy_7_cozy_room_2.jpg"></p>
<h2 id="journeys-into-the-unknown">Journeys into the Unknown</h2>
<p>I only recently played Syberia, all because of Nintendo Switch, I saw the game and felt like it was a good fit. The game has a somewhat slow pace which helps with giving us change to visually absorb the world. I couldn&rsquo;t quite put my finger in it but I was immediately drawn to it, the game can be defined mostly by it&rsquo;s sense of of melancholic beauty and isolation at first. The mechanical town, some of the most eerie scenarios. And yet, the total feeling of comfort really comes after we get to use the train.</p>
<p><img alt="Syberia 1 train" loading="lazy" src="/wp-content/uploads/2025/02/Syberia-train-winder.jpg"></p>
<p>By becoming Kate Walker primary mode of transport, after many many puzzles, it soon turns not only into a transport but also a home, becoming surprisingly cozy, and the only way to move forward.  The rhythmic melody of the engine, the passing landscapes, and the quiet solitude of the train compartment create a sense of journey and reflection.  These moments allow Kate and the player to process the events, adding warmth to the game&rsquo;s overall atmosphere.</p>
<p><img alt="Syberia 1 train pedestral" loading="lazy" src="/wp-content/uploads/2025/02/Syberia-train-pedestal.jpg"></p>
<h2 id="a-different-kind-of-cozy">A Different Kind of Cozy</h2>
<p><img alt="Little Nightmares" loading="lazy" src="/wp-content/uploads/2025/02/little_nightmares_01.jpg"></p>
<p>I&rsquo;m a big fan of Little Nightmares (I and II), to me very special games, it ranges from cute to horrific, majority of it&rsquo;s vibes are Ghibli-meets-Nightmare-Before-Christmas aesthetic esque scenarios, giving it a cartoony look that looks secure but it just happens to take place at &ldquo;Silent Hill levels of horror&rdquo;.</p>
<p><img alt="Little Nightmares" loading="lazy" src="/wp-content/uploads/2025/02/little_nightmares_02.jpg"></p>
<p>There are elements of coziness, just not in the traditional kind, not even the one that I might say there will be moments where you&rsquo;ll feel relaxed. You&rsquo;re never quite there, but feels like it could.</p>
<p><img alt="Little Nightmares" loading="lazy" src="/wp-content/uploads/2025/02/little_nightmares_03.jpg"></p>
<p>Instead, it&rsquo;s tied to the feeling of being small and vulnerable in a large and dangerous world, it&rsquo;s an odd one, the feeling of crawling through vents, hiding under furniture, and finding small pockets of safety create a sense of childlike vulnerability, which can be surprisingly comforting in its own way.</p>
<p><img alt="Little Nightmares" loading="lazy" src="/wp-content/uploads/2025/02/little_nightmares_04.webp"></p>
<p>It&rsquo;s a dangerous world that wants to kill you, but empty it has it&rsquo;s charm and calmness.</p>
<hr>
<p>Ok thanks for sticking around, I hope you enjoyed, let me know other games you felt they had cozy moments, atmosphere or other in unexpected places.</p>
<hr>
<p>See you in the next post!</p>
]]></content:encoded>
    </item>
    <item>
      <title>2024 wrap-up, 2025 the year of Godot</title>
      <link>https://www.david-amador.com/2025/01/2024-wrap-up-2025-the-year-of-godot/</link>
      <pubDate>Wed, 01 Jan 2025 08:32:55 +0000</pubDate>
      <guid>https://www.david-amador.com/2025/01/2024-wrap-up-2025-the-year-of-godot/</guid>
      <description>&lt;h1 id=&#34;-2024&#34;&gt;🕛 2024&lt;/h1&gt;
&lt;p&gt;I initially intended to do a &amp;ldquo;end of year&amp;rdquo; post BEFORE the EOY talking about some stuff, but that never happened because work and other things kept getting in the way. 2024 was a weird year, from work, to personal, to world, to finances, to game dev, &lt;em&gt;&lt;strong&gt;to everything really&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I just feel tired honestly, that&amp;rsquo;s the best way I can describe 2024!&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Tired Computer Anime&#34; loading=&#34;lazy&#34; src=&#34;https://www.david-amador.com/wp-content/uploads/2025/01/tired_computer_anime.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ok that started in a weird way, but allow me some latitude here&amp;hellip;
The world is in a weird state, economy, layoffs everywhere, the game dev industry in a very fragile state; and suddenly every company is betting all their chips on &amp;ldquo;AAAAeee IIIIII&amp;rdquo;, politics seem wacko, climate change, social networks going bananas, overall everyone trying to find their feet.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="-2024">🕛 2024</h1>
<p>I initially intended to do a &ldquo;end of year&rdquo; post BEFORE the EOY talking about some stuff, but that never happened because work and other things kept getting in the way. 2024 was a weird year, from work, to personal, to world, to finances, to game dev, <em><strong>to everything really</strong></em>.</p>
<p>I just feel tired honestly, that&rsquo;s the best way I can describe 2024!</p>
<p><img alt="Tired Computer Anime" loading="lazy" src="/wp-content/uploads/2025/01/tired_computer_anime.gif"></p>
<p>Ok that started in a weird way, but allow me some latitude here&hellip;
The world is in a weird state, economy, layoffs everywhere, the game dev industry in a very fragile state; and suddenly every company is betting all their chips on &ldquo;AAAAeee IIIIII&rdquo;, politics seem wacko, climate change, social networks going bananas, overall everyone trying to find their feet.</p>
<p>I&rsquo;ve been trying to take the opportunity of Twitter going bananas to spend less time on social networks, it&rsquo;s just doom scrolling these days, but it propagated to every other place.</p>
<h2 id="games-and-such">Games and such</h2>
<p>I haven&rsquo;t played many video games this year, I&rsquo;m still trying to finish Metroid Prime Remaster, I&rsquo;m SOOO STUCK on Phazon mines, I really want to finish this one as I&rsquo;m enjoying the game a lot, and I understand why it was so highly rated back then.</p>
<p><img alt="Stuck on Phazon Mines" loading="lazy" src="/wp-content/uploads/2025/01/stuck_on_phazon_mines.png"></p>
<p>I got the new Legend of Zelda Echoes of Wisdom, and actually completed it, almost couldn&rsquo;t put it down until I did, it&rsquo;s such a nice game with tons of great ideas and mechanics, a merge of Breath of the Wild and Tears of Kingdom with Link Between Worlds. I really think this brings top-down Zeldas to a whole new level, can&rsquo;t wait for a new one.</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2025/01/zelda_echoes_1.jpeg"><img alt="Zelda Echoes of Wisdom" loading="lazy" src="/wp-content/uploads/2025/01/zelda_echoes_1.jpeg"></a></th>
          <th><a href="/wp-content/uploads/2025/01/zelda_echoes_4.jpeg"><img alt="Zelda Echoes of Wisdom" loading="lazy" src="/wp-content/uploads/2025/01/zelda_echoes_4.jpeg"></a></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/wp-content/uploads/2025/01/zelda_echoes_3.jpeg"><img alt="Zelda Echoes of Wisdom" loading="lazy" src="/wp-content/uploads/2025/01/zelda_echoes_3.jpeg"></a></td>
          <td><a href="/wp-content/uploads/2025/01/zelda_echoes_2.jpeg"><img alt="Zelda Echoes of Wisdom" loading="lazy" src="/wp-content/uploads/2025/01/zelda_echoes_2.jpeg"></a></td>
      </tr>
  </tbody>
</table>
<hr>
<p>I&rsquo;ve also played a bit of board games. For some reason I always assumed most board games were multiplayer, which would be harder for me, but there&rsquo;s actually tons of neat solo ones now, a booming market it seems, so I started playing some Arkham Horror, which I can play solo, and it&rsquo;s cool, even if I lose a lot.</p>
<p><img alt="Arkham Horror Card Game" loading="lazy" src="/wp-content/uploads/2025/01/arkham_horror_card_game_box.jpeg"></p>
<p>And just a couple days ago I decided to grab Carcassonne from my desk (been there a while unboxed) and take to play during the Xmas days break, it&rsquo;s a lot of fun to play with other people.</p>
<p><img alt="Carcassonne" loading="lazy" src="/wp-content/uploads/2025/01/carcassonne.jpg"></p>
<h1 id="travel">travel</h1>
<p>Every year I keep saying I should travel/rest more, and I haven&rsquo;t been taking a lot of free time/vacations, but I did manage to take a 6 days-vacation and a flight to Cabo Verde (they have low cost routes now). I visited Maio and Santiago islands, gorgeous landscapes and ocean views. To sum it up, within 2 hours of landing I got a rusty nail rip through my shoes (so lucky I hadn&rsquo;t changed into beach sandals yet), I also saw a dude accidentally fishing a baby Hammerhead shark, did some snorkeling and had a local convince me to try fishing, which I haven&rsquo;t done since my dad took me once as a kid, learned how to play an old board game with some locals, it was fun.</p>
<p>Here&rsquo;s some dumb photos/videos because my blog is like a personal journal :)</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2025/01/tarrafal_beach.jpg"><img alt="Tarrafal Beach" loading="lazy" src="/wp-content/uploads/2025/01/tarrafal_beach.jpg"></a></th>
          <th><a href="/wp-content/uploads/2025/01/cabo_verde.jpg"><img alt="Tarrafal Beach" loading="lazy" src="/wp-content/uploads/2025/01/cabo_verde.jpg"></a></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><video width="100%" controls>
    <source src="/wp-content/uploads/2025/01/david_attempt_fishing.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>
</td>
          <td><a href="/wp-content/uploads/2025/01/tarrafal_sign_david.jpg"><img alt="David near Tarrafal Sign" loading="lazy" src="/wp-content/uploads/2025/01/tarrafal_sign_david.jpg"></a> <video width="100%" controls>
    <source src="/wp-content/uploads/2025/01/dumb_stuff.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>
</td>
      </tr>
  </tbody>
</table>
<p>Sorry for video quality, in an attempt of not having tons of MBs on this page, and I really don&rsquo;t want to embed this on YouTube, so let me know if you know a better alternative to have videos on a blog post that &ldquo;makes sense&rdquo;.</p>
<h1 id="age">age</h1>
<p>I turned 40 this past year, yeah that&rsquo;s right, time does fly. Now this is not something that I usually discuss but the turn of a new decade does make you pause for a second, life comes fast. What I notice so far is most of the same things at early 30&rsquo;s but more, your body gives you more signs that you really need to pay attention to your health, it&rsquo;s not a &ldquo;power it through&rdquo; anymore, it&rsquo;s a &ldquo;maintenance mode&rdquo; now, whatever bad decisions you made in the past might show up now, any good ones you&rsquo;ll start to appreciate. Honestly my major problem has always been overworking myself and maybe not that good eating habits, that&rsquo;s the bad. On the good side, ever since I got a health scare right before my 30th birthday, I&rsquo;ve tried to be a bit more active (thanks Fitbit!) so in the past 10 years I&rsquo;ve actually managed to get into better physical shape, I do feel I&rsquo;m probably more in shape now than in my 20s and 30s;  I just can&rsquo;t do as much as 10 years ago, there&rsquo;s limits, we just have to work with them and move forward.
<img alt="Indiana Jones It&rsquo;s not the Years, It&rsquo;s the Mileage" loading="lazy" src="/wp-content/uploads/2025/01/indiana_jones_its_not_the_years_its_the_mileage.jpg"></p>
<h1 id="gamedev">gamedev</h1>
<p>It&rsquo;s been forever since I launched a game of my own even if I&rsquo;ve helped with dozens of games (porting) in the last few years, but it is what it is. It&rsquo;s hard to mix all in, and I can&rsquo;t do the whole &ldquo;quitting a job, work on a game for a couple months, launch it and get a new job after&rdquo; anymore, so development just takes &raquo;forever&laquo;  It&rsquo;s one of the reasons I don&rsquo;t even talk about what I&rsquo;m attempting to work on, I have no idea of deadlines because I can&rsquo;t probably do both contract deadlines + my own, which is both a blessing and a curse. It&rsquo;s not bad, but I still have a few more dumb games I want to work on, and release, I just feel like a bit of a fraud I haven&rsquo;t been able to after wrapping up QoD development, but I think that project also left me some burnout, it was ~7years of dev, porting and updates after all.</p>
<p>But for things we can control  a bit better, and while I like to tinker with my own <a href="/tags/basalt/">game framework</a>, it would be a mistake not to look into what&rsquo;s available in terms of Game Engines. I&rsquo;ve done a lot of contract work in Unity and GameMaker 2, including some personal stuff, but after what <a href="/2023/09/unity-enshittification-round-2-moving-on-to-custom-tech/">Unity pulled</a> (over a year now), using Unity now leaves a sour taste, it&rsquo;s not the same anymore.</p>
<hr>
<h1 id="godot">Godot</h1>
<p><a href="https://godotengine.org/">Godot</a> has been around since 2014, and gained popularity over the years, and like what happened with Mastodon when Twitter died (yes it&rsquo;s dead, old twitter is gone, X is crap), Godot exploded once Unity did what they did.
People became aware there was an open-source alternative, stable and ready to use, not controlled by maniac shareholders just trying to profit even if they had to fire everyone in the company.</p>
<p>Over the years I had read some stuff and devs talking about it, but never found the time, until a couple weeks ago.</p>
<p>So I downloaded, unzip it, ran the executable, and &hellip; wait it booted the entire Editor within a couple seconds &hellip;</p>
<p><img alt="Godot Editor" loading="lazy" src="/wp-content/uploads/2025/01/godot_editor_new_scene.png"></p>
<p>My brain thought:</p>
<blockquote>
<p>wtf there&rsquo;s no installer :O</p>
</blockquote>
<p>Yes, it just boots, a whole engine in a 250mb executable.</p>
<p><strong>Choice of Language</strong></p>
<p>Godot allows a couple of languages, but there seems to be 2 main ones, and I was a bit on the fence if I should go with C# or GDScript, Godot&rsquo;s custom scripting language. So I decided to talk a bit with <a href="https://iohanna.itch.io/">Joana</a> about the pros and cons, she had also recently started using Godot herself. She went with C#, and seems like most of her Unity code worked fine, which is great.
But I decided to just dive into GDScript, a clean slate with &ldquo;no baggage&rdquo; is something that I enjoy from time to time, the idea of learning something new without trying to make existing things work sounded exciting; and I also remember the lessons from GameMaker 2 GML, at first there was friction, but there are some valid choices/ideals there that I sometimes think others could copy. Also if you want to use C#, for now, you need a dedicated Editor build and there&rsquo;s no support for Web Exports (this will change in the future).</p>
<p><a href="https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html">GDScript</a> is at first glance very Python like, but it&rsquo;s mostly due to it&rsquo;s indentation-based syntax</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">var</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">5</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">s</span> <span class="o">=</span> <span class="s2">&#34;Hello&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">arr</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="nb">dict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;key&#34;</span><span class="p">:</span> <span class="s2">&#34;value&#34;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">typed_var</span><span class="p">:</span> <span class="nb">int</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">enum</span> <span class="p">{</span><span class="n">UNIT_NEUTRAL</span><span class="p">,</span> <span class="n">UNIT_ENEMY</span><span class="p">,</span> <span class="n">UNIT_ALLY</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">enum</span> <span class="n">Named</span> <span class="p">{</span><span class="n">THING_1</span><span class="p">,</span> <span class="n">THING_2</span><span class="p">,</span> <span class="n">ANOTHER_THING</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">Vector2</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">func</span> <span class="n">something</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">	<span class="nb">super</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Something</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">	<span class="n">var</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">10</span>
</span></span></code></pre></div><p>I use Python often for scripts so it was easy to get used to it. So far, from what I&rsquo;ve read, one of the downsides is if you need really intensive computation algorithms, in which maybe doing them directly in C++ or C# might be better, but that&rsquo;s probably edge cases, and you can mix in both languages, so not a decision that can ruin things later on.</p>
<p>In terms of language I do like it, it&rsquo;s clean, feels modern, and my only complaint so far is exactly the same as Python, I wish we had { } to wrap up scopes instead of tabs, but that&rsquo;s a personal preference. I&rsquo;m sure as months progress I&rsquo;ll bump into caveats, but that can be said of all languages.</p>
<h2 id="the-nodes-and-more">The Nodes and more</h2>
<p>Godot uses Nodes for everything, and at first I thought &ldquo;oh it&rsquo;s like Unity GameObject&rdquo;, but it&rsquo;s not quite that, Nodes can only be used with 1 script, you can&rsquo;t just add a bunch of them to a node like Unity on a GameObject.</p>
<p><img alt="Godot Nodes" loading="lazy" src="/wp-content/uploads/2025/01/nodes_and_scenes_nodes.jpg"></p>
<p>Here if you want a new behaviour, add a child node and add that script.
It seems odd at first but this comes with a very powerful &ldquo;side-effect&rdquo;, anything can be a scene, and you can add nodes in anything, it&rsquo;s quite fascinating and powerful, seems truly abstract.</p>
<p>The rest is the standard 2DSprites, Meshes, Sounds, position components, UI etc.
To learn this I decided to make a small prototype game and so far most stuff has been very easy to create, from UI to animations and game logic.</p>
<p>The part that is creating more friction for me right now, is the Editor UI/UX inconsistency, there are tons of small quirks (I&rsquo;ve been live posting some) that are not necessarily bugs but tweaking would go a long way in terms of User Experience and making it more intuitive.</p>
<p>Took me forever to notice that &ldquo;Animation&rdquo; was actually a button hiding a ton of options, it looked like a pressed &ldquo;Tab&rdquo;, it has the same design as the 0 on the left, it doesn&rsquo;t look like a button. I&rsquo;m nitpicking here, because it does work functionally, but I care about this engine now and I want it to be even better.</p>
<table>
  <thead>
      <tr>
          <th><img loading="lazy" src="/wp-content/uploads/2025/01/godot_button_1.png"></th>
          <th><img loading="lazy" src="/wp-content/uploads/2025/01/godot_button_2.png"></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<p>Godot is being made for free by the community, on their spare time, the fact that it works as it does right now is magic.</p>
<p><img alt="IT Crowd Have you tried turning it off and on again" loading="lazy" src="/wp-content/uploads/2025/01/have_you_tried_turning_it_off_and_on_again.jpg"></p>
<p>Sometimes I had to restart the editor to make some things work again (I read this on Reddit) and whenever some code isn&rsquo;t working but I can&rsquo;t quite understand why, I would just restart it. At least once a day this would happen, but it might also be due to my use of Visual Code as external code editor and it getting confused some times (I need to do more testing on this).</p>
<p>Right now the engine has tons of potential and I feel it&rsquo;s already quite robust for 2D games, I can&rsquo;t say for 3D because I haven&rsquo;t had the chance yet.</p>
<h1 id="plans-for-godot">Plans for Godot</h1>
<p>As the title suggests, for me this will be the year I plan to migrate to Godot whenever possible.</p>
<p>I do have a &ldquo;game&rdquo; that I&rsquo;m working on SLOOOWLY whenever I find some time, and getting it out of Unity would be a big plus for me. I initially started it as part of learning Unity for contact work purposes and I kept working on it, felt like a nightmare to move it to my custom framework due to amount of work (but doable), but moving to Godot actually sounds FUN! But it&rsquo;s not for now, I have to wrap up the gameplay at least so that migrating would be easier once I have it all.</p>
<p>And that&rsquo;s what I wanted to say, Godot is a lot of fun to work with, you&rsquo;ll spot quirks very rapidly, but it&rsquo;s such a light and fast engine to work, perfect for prototyping.</p>
<p>Godot is in the same place as Blender a few year ago, with a promising future.</p>
<hr>
<p>See you in the next post!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Gamedev tricks used by developers</title>
      <link>https://www.david-amador.com/2024/11/gamedev-tricks-used-by-developers/</link>
      <pubDate>Fri, 15 Nov 2024 14:39:55 +0000</pubDate>
      <guid>https://www.david-amador.com/2024/11/gamedev-tricks-used-by-developers/</guid>
      <description>&lt;h2 id=&#34;-origin-thread&#34;&gt;🧵 origin thread&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;In 2018 I started a thread on Twitter (later renamed X 🙄) where &lt;a href=&#34;https://x.com/DJ_Link/status/964124424969637888&#34;&gt;I shared some game development tricks&lt;/a&gt; devs used to get around bugs, software, hardware and/or time constraints. Later I kept adding more posts to that thread, and there&amp;rsquo;s some cool information there. But because I now went through the process of replicating that thread on both &lt;a href=&#34;https://mastodon.gamedev.place/deck/@djlink/109313319839796759&#34;&gt;Mastodon&lt;/a&gt; and &lt;a href=&#34;https://bsky.app/profile/djlink.bsky.social/post/3l6ubkivh5o2t&#34;&gt;Bluesky&lt;/a&gt;; it got me thinking, I should probably put this on my own blog, a single post, which is easier to read, also in case those websites are ever gone. If I find more I&amp;rsquo;ll add them later. This page may take a bit to load due to images, gifs videos etc.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="-origin-thread">🧵 origin thread</h2>
<blockquote>
<p>In 2018 I started a thread on Twitter (later renamed X 🙄) where <a href="https://x.com/DJ_Link/status/964124424969637888">I shared some game development tricks</a> devs used to get around bugs, software, hardware and/or time constraints. Later I kept adding more posts to that thread, and there&rsquo;s some cool information there. But because I now went through the process of replicating that thread on both <a href="https://mastodon.gamedev.place/deck/@djlink/109313319839796759">Mastodon</a> and <a href="https://bsky.app/profile/djlink.bsky.social/post/3l6ubkivh5o2t">Bluesky</a>; it got me thinking, I should probably put this on my own blog, a single post, which is easier to read, also in case those websites are ever gone. If I find more I&rsquo;ll add them later. This page may take a bit to load due to images, gifs videos etc.</p>
</blockquote>
<hr>
<h3 id="-skyrim-shelves">👾 Skyrim shelves</h3>
<p>Skyrim small tables are actually shelves buried. If you can&rsquo;t see it &hellip;</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_1.jpg"><img alt="Skyrim buried shelves 1" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_1.jpg"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_2.jpg"><img alt="Skyrim buried shelves 2" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_2.jpg"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-jak-and-daxter-loading">👾 Jak and Daxter loading</h3>
<p>In Jak and Daxter if by any chance the Area/assets ahead aren&rsquo;t fully loaded the game will make you trip to give it more time to load in background.</p>
<p><img alt="Jak and Daxter tripping loading" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/jak_dexter_tripping_loading.gif"></p>
<hr>
<h3 id="-super-mario-64-infinite-stairs">👾 Super Mario 64 infinite stairs</h3>
<p>In Super Mario 64 this is how Nintendo got the infinite stairs effect working, teleport. Mario keeps getting teleported to a prior point on the stairs which makes it impossible to progress in a normal way. But this is also the reason why Speedrunners can glitch the effect and skip it using the backwards jump trick.</p>
<p><img alt="Super Mario 64 infinite stairs" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/super_mario_64_infinite_stairs.gif"></p>
<hr>
<h3 id="-wing-commander-memory-exception">👾 Wing Commander memory exception</h3>
<p>There was a memory exception in Wing Commander on exit, because of the deadline they left it but change the error message to &ldquo;Thank you for playing Wing Commander!&rdquo;</p>
<p><img alt="Wing Commander exit message" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/wing_commander_exit_message.jpg"></p>
<hr>
<h3 id="-undertale-npc-pathfinding">👾 Undertale NPC pathfinding</h3>
<p>This one is from Undertale, to prevent NPCs to walk on pits, developer added Magic glass so that way &ldquo;it works&rdquo;.</p>
<table>
  <thead>
      <tr>
          <th><img alt="Undertale magic glass 1" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/undertale_magic_glass_1.jpg"></th>
          <th><img alt="Undertale magic glass 2" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/undertale_magic_glass_2.jpg"></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-fallout-3-trains-are-hats">👾 Fallout 3 trains are hats</h3>
<p>In Fallout 3 all the trains are actually a character wearing a train model as a hat. <a href="https://www.pcgamer.com/heres-whats-happening-inside-fallout-3s-metro-train/">Source</a>.</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/fallout3_train_1.jpg"><img alt="Fallout 3 Trains" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/fallout3_train_1.jpg"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/fallout3_train_2.jpg"><img alt="Fallout 3 Trains" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/fallout3_train_2.jpg"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-donkey-kong-64-memory-crash-myth">👾 Donkey Kong 64 memory crash (myth)</h3>
<p>This one was later proved as a myth by developers on my thread, but I&rsquo;m leaving it here since you can still find it in tons of places, so this way here it has a correction that it was in fact a myth.</p>
<p>Internet theories says that Donkey Kong 64 had a memory crash/limit bug on standard N64. Unable to identify the cause of the crash they decided to ship the game with the memory expansion bundled with game.</p>
<p><img alt="Donkey Kong 64" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/donkey_kong_64.jpg"></p>
<hr>
<h3 id="-super-mario-bros-reuse-of-grassclouds">👾 Super Mario Bros. reuse of grass/clouds</h3>
<p>In Super Mario Bros. because of memory limitations clouds and bushes are the same sprite but using a different color palette.</p>
<p><img alt="Super Mario Bros. reuse of grass and clouds" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/super_mario_bros_grass_clouds.jpg"></p>
<hr>
<h3 id="-kirby-dream-land-memory-saving">👾 Kirby Dream Land memory saving</h3>
<p>In Kirby Dream Land for Gameboy, to save memory some enemies have the same &ldquo;back&rdquo; part of the sprite and only change the face.</p>
<p><img alt="Kirby Dream Land memory saving" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/kirby_gameboy_reuse_assets.jpg"></p>
<hr>
<h3 id="-zelda-a-link-between-worlds-fake-perspective">👾 Zelda A Link Between Worlds fake perspective</h3>
<p>This is one of my fav, in Zelda: A Link Between Worlds because a true top down view in 3D had some issues, they purposely tilt the objects so the perspective looks good to the player.</p>
<p><img alt="Zelda A Link Between Worlds fake perspective" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/zelda_link_between_worlds_skewed_view.jpg"></p>
<hr>
<h3 id="-duke-nukem-mirrors">👾 Duke Nukem mirrors</h3>
<p>Duke Nukem 3D mirrors reflection were achieved by duplicating the room on the other side. If you deactivate clipping you can go to the other side. True reflections are computational intensive even today.</p>
<p><img alt="Duke Nukem mirrors" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/duke_nukem_mirrors.gif"></p>
<hr>
<h3 id="-nba-jam-te-cartridge-day-one-patch">👾 NBA Jam: T.E. cartridge day one &ldquo;patch&rdquo;</h3>
<p>In NBA Jam: T.E. for Genesis/Mega Drive devs only found out after making the 250k cartridges there was a save bug. Playing game in a certain order fixed it so it got a day one patch in the manual saying how to initialize memory.</p>
<p><a href="/wp-content/uploads/2024/11/gamedev-tricks/nba_jam_1.jpg"><img alt="NBA Jam T.E" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/nba_jam_1.jpg"></a></p>
<p><a href="/wp-content/uploads/2024/11/gamedev-tricks/nba_jam_2.png"><img alt="NBA Jam T.E" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/nba_jam_2.png"></a></p>
<hr>
<h3 id="-mario-galaxy-drown-animation">👾 Mario Galaxy drown animation</h3>
<p>In Super Mario Galaxy when Mario drowns in a swap his hand reaches out, because of the size of the head they have to shrink it so only the hand is visible to the player.</p>
<p><img alt="Mario Galaxy drown animation" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/mario_galaxy_drown_animation.gif"></p>
<hr>
<h3 id="-world-of-warcraft-rest-bonus">👾 World of Warcraft rest bonus</h3>
<p>World of Warcraft rest bonus was made to encourage breaks, half XP gained after a few hours. Players hated, so they made everything take 2x as much XP to achieve but you start at 200% XP and gradually back to 100%. Same thing &amp; players are happy. <a href="https://www.psychologyofgames.com/2010/03/framing-and-world-of-warcrafts-rest-system/">source</a></p>
<p><img alt="World of Warcraft rest bonus" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/world_of_warcraft_rest_bonus.jpg"></p>
<hr>
<h3 id="-resident-evil-4-radio-billboards">👾 Resident Evil 4 radio billboards</h3>
<p>This one is not as unknown or hard to imagine but in Resident Evil 4 during the radio chat cutscenes it&rsquo;s actually a 2D panel with the 3D models behind. Many other games do this too.</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/resident_evil_4_cutscene_behind_1.jpg"><img alt="Resident Evil 4" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/resident_evil_4_cutscene_behind_1.jpg"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/resident_evil_4_cutscene_behind_2.jpg"><img alt="Fallout 3 Trains" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/resident_evil_4_cutscene_behind_2.jpg"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-duck-hunt-zapper">👾 Duck Hunt Zapper</h3>
<p>In Duck Hunt the NES Zapper worked by blacking out screen &amp; drawing white blocks around targets when you fire, for a couple frames. The diode in the Zapper detects the change in light intensity and tells the computer if it’s pointed at a lit target.</p>
<p><img alt="Duck Hunt Zapper" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/duck_hunt_zapper.gif"></p>
<hr>
<h3 id="-metal-gear-solid-ps1-reflections">👾 Metal Gear Solid PS1 reflections</h3>
<p>In Metal Gear Solid 1, another reflection trick. Water puddle in 1st mission map is just a transparent texture with the geometry of ceiling and walls duplicated below the ground. That&rsquo;s why you can&rsquo;t see Snake reflection.</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/metal_gear_solid_reflections_1.jpg"><img alt="Metal Gear Solid" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/metal_gear_solid_reflections_1.jpg"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/metal_gear_solid_reflections_2.jpg"><img alt="Metal Gear Solid" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/metal_gear_solid_reflections_2.jpg"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-prince-of-persia-animations">👾 Prince of Persia animations</h3>
<p>In Prince of Persia (1989) animations looked fluid &amp; realistic because Jordan Mechner used Rotoscope, he filmed his brother doing the stunts, took pictures with camera, had them developed at Fotomat and then traced them, frame by frame.</p>
<p><img alt="Prince of Persia Rotoscope" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/prince_of_persia_rotoscope.gif"></p>
<hr>
<h3 id="-tomb-raider-sega-saturn">👾 Tomb Raider Sega Saturn</h3>
<p>Sega Saturn used Quads instead of triangles (the industry norm) for rendering, which is good for 2D but not as practical for 3D, devs had to work around that, so games like Tomb Raider had to be built to support quads on Saturn and triangles on PlayStation.</p>
<p><img alt="Tomb Raider Sega Saturn quads" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/tomb_raider_saturn_quads.gif"></p>
<hr>
<h3 id="-pong">👾 Pong</h3>
<p>Original Pong had 0 lines of code.</p>
<p><img alt="Pong" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/pong_0_lines_code.jpg"></p>
<hr>
<h3 id="-paper-mario-shadows">👾 Paper Mario shadows</h3>
<p>Paper Mario uses a transparent mesh to simulate door shadows.</p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/11/gamedev-tricks/paper_mario_shadows.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<hr>
<h3 id="-dead-space-ui">👾 Dead Space UI</h3>
<p>Dead Space UI is all made with particles so it can sort in render, glow and be more immersive. <a href="https://x.com/Worthless_Bums/status/1271139746551599112">source</a></p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/11/gamedev-tricks/dead_space_particles_ui.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<hr>
<h3 id="-katamari-damacy-spawns">👾 Katamari Damacy spawns</h3>
<p>Katamari Damacy only has support for closed, circular paths, so how they make boulders travel beneath the ground, back to the original place, so that it seems like they are spawning and despawning!</p>
<p><a href="https://x.com/JasperRLZ/status/1289960052250435584">source</a></p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/11/gamedev-tricks/katamari_spawns.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<hr>
<h3 id="-elders-scroll-morrowind-xbox-memory-management">👾 Elder&rsquo;s Scroll Morrowind Xbox memory management</h3>
<p>This is easily one of the best, on OG Xbox, Elder Scrolls III would occasionally reboot the Xbox if they ran out of memory. The user would just see a longer then usual loading screen.</p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/11/gamedev-tricks/xbox_elders_scroll_reboot_when_low_memory.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<hr>
<h3 id="-grand-theft-auto-tanks">👾 Grand Theft Auto tanks</h3>
<p>In GTA the tanks were made with pedestrians that were on top of a car to use the existing shooting mechanics and also the driving code.</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/gta_tanks_1.png"><img alt="Grand Theft Auto Tanks" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/gta_tanks_1.png"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/gta_tanks_2.png"><img alt="Grand Theft Auto Tanks" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/gta_tanks_2.png"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-kirby-and-the-forgotten-land-game-feel">👾 Kirby and the Forgotten Land game feel</h3>
<p>Kirby and the Forgotten Land is a 3D game, but will fake the hit collisions for better game feel depending where the camera is, in certain angles as long as in camera it &ldquo;looks&rdquo; like it hits it will consider it a collision even if it&rsquo;s not.</p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/11/gamedev-tricks/kirby_forgotten_land_game_feel.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<hr>
<h3 id="-skyrim-npcs-inventory-system">👾 Skyrim NPCs inventory system</h3>
<p>Skyrim handles each NPCs inventory by having it on a unique chest hidden under the map. Most are impossible to get unless clipping is used, but sometimes you can find them.</p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_npc_chests_1.jpg"><img alt="Skyrim NPC inventory" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_npc_chests_1.jpg"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_npc_chests_2.jpg"><img alt="Skyrim NPC inventory" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/skyrim_npc_chests_2.jpg"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-doom-3-volumetric-glow">👾 Doom 3 volumetric glow</h3>
<p>Doom 3 fakes volumetric glow by folding vertexes with camera movement. <a href="https://simonschreibt.de/gat/doom-3-volumetric-glow/">source</a></p>
<p><img alt="Doom 3 volumetric glow" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/doom3_volumetric_glow.gif"></p>
<hr>
<h3 id="-lord-of-the-rings-engine-reuse">👾 Lord of the Rings engine reuse</h3>
<p>Lord of the Rings game was made by reusing Tiger Woods golf game because they needed large areas with a goal/castle at the end, a golf game is just that. I think it’s quite funny how far apart they are but it works.</p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/11/gamedev-tricks/lord_of_the_rings_tiger_woods_engine.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<hr>
<h3 id="-metroid-prime-noise-texture">👾 Metroid Prime noise texture</h3>
<p>In order to save memory, Metroid Prime fullscreen static texture effect is generated using random live RAM data, which is just the game itself running, GameCube only had 24MB. <a href="https://x.com/ZoidCTF/status/1590012338421518337">source</a></p>
<p><img alt="Metroid Prime" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/metroid_prime_noise_texture.jpg"></p>
<hr>
<h3 id="-titan-quest-action-delays">👾 Titan Quest action delays</h3>
<p>On Titan Quest, because there was no way to script timed delays actions, developers created ambient creatures like Squirrels and used their animations as a way to count time to trigger the events.</p>
<p><img alt="Titan Quest action delays" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/titan_quest_timed_delays.png"></p>
<hr>
<h3 id="-journey-shadows">👾 Journey shadows</h3>
<p>Journey doesn&rsquo;t have a real-time shadow system so they are hand painted and baked later. The results are impressive but the amount of work involved wow. <a href="https://x.com/matt_nava/status/1503152810078052355">source</a></p>
<p><img alt="Journey Shadows" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/journey_shadows_1.png"></p>
<table>
  <thead>
      <tr>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/journey_shadows_2.png"><img alt="Journey Shadows" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/journey_shadows_2.png"></a></th>
          <th><a href="/wp-content/uploads/2024/11/gamedev-tricks/journey_shadows_3.png"><img alt="Journey Shadows" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/journey_shadows_3.png"></a></th>
      </tr>
  </thead>
  <tbody>
  </tbody>
</table>
<hr>
<h3 id="-silent-hill-2-mirror">👾 Silent Hill 2 mirror</h3>
<p>Another duplicate room mirror trick, this time Silent Hill 2, in the beginning of the game, the mirror reflection is just the entire bathroom duplicated.</p>
<p><img alt="Silent Hill 2 mirror" loading="lazy" src="/wp-content/uploads/2024/11/gamedev-tricks/silent_hill_2_mirror_duplicate_room.jpg"></p>
<hr>
<p>(to be continued &hellip;. maybe)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Quest of Dungeons turns 10 years old!</title>
      <link>https://www.david-amador.com/2024/03/quest-of-dungeons-turns-10-years-old/</link>
      <pubDate>Mon, 25 Mar 2024 11:39:55 +0000</pubDate>
      <guid>https://www.david-amador.com/2024/03/quest-of-dungeons-turns-10-years-old/</guid>
      <description>&lt;h1 id=&#34;-its-been-10-years&#34;&gt;📝 It&amp;rsquo;s been 10 years&lt;/h1&gt;
&lt;p&gt;It&amp;rsquo;s around 11 a.m. as start to type this. 10 years ago at this hour, I was at my day job, trying to focus and not be distracted by the fact that later that day, at around 18h, &lt;a href=&#34;https://www.questofdungeons.com&#34;&gt;Quest of Dungeons&lt;/a&gt; was being released on Steam and iOS. For the first time, players around the world could try it. I was quite anxious about this; it had been a few years in the making, &lt;a href=&#34;https://www.david-amador.com/2014/10/indie-dev-day-job-making-it-work-building-quest-of-dungeons/&#34;&gt;mostly nights and weekends&lt;/a&gt;. I had little idea of what to expect, but being on Steam was simultaneously exciting and terrifying. What if people hated it?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="-its-been-10-years">📝 It&rsquo;s been 10 years</h1>
<p>It&rsquo;s around 11 a.m. as start to type this. 10 years ago at this hour, I was at my day job, trying to focus and not be distracted by the fact that later that day, at around 18h, <a href="https://www.questofdungeons.com">Quest of Dungeons</a> was being released on Steam and iOS. For the first time, players around the world could try it. I was quite anxious about this; it had been a few years in the making, <a href="/2014/10/indie-dev-day-job-making-it-work-building-quest-of-dungeons/">mostly nights and weekends</a>. I had little idea of what to expect, but being on Steam was simultaneously exciting and terrifying. What if people hated it?</p>
<p>What follows for the rest of the post, is a brain dump of the timeline of some of the most crucial events of this silly little project for anyone who is curious.</p>
<p><img alt="Quest of Dungeons characters" loading="lazy" src="/wp-content/uploads/2024/03/pixel_logo_v1_4x.png"></p>
<h1 id="-2011-2013">🤯 2011-2013</h1>
<p>✔️ Failing can help</p>
<p>Before the game launched, I had a few years of terrible prototypes, cancelled projects, and other unexpected life events. One day, though, all those mistakes fell into place, and QoD was born—a flow of ideas came to my mind, after seeing a bunch of stuff failed in front of me, but that maybe I could make them work. I knew what I wanted to avoid now and what I things I would like to experiment with. Within this time I also made a simple iOS game called <a href="/2012/09/puwang-a-5-day-work/">Puwang</a>, a gamejam compo, where most of the goal was to make a quick game and hopefully make $100 that year to cover the iOS developer account expenses. For QoD I wanted to make a small game that I could play on my phone during commute, and that&rsquo;s why it started as a mobile-only game.</p>
<p><img alt="Quest of Dungeons characters" loading="lazy" src="/wp-content/uploads/2024/03/qod_characters.png"></p>
<p>⌨️ Expanding</p>
<p>During the time I was the only person to ever played it, I found myself enjoying it on a bigger screen/tablet, and after giving it a 2-3 friends to test and having confirmation, I thought it would be good to launch a desktop version along the iPhone/iPad versions, Windows and Mac.
This added some development time, but also allowed me to expand the game a bit more, the mobile version was virtually identical to desktop/tabled, but they shared a bigger UI, more suited for Mouse and the higher resolutions.
This turned out to be one of the best decisions, as the desktop version is foundation for everything after. At this point I was already <a href="/tags/basalt/">rolling my own engine</a> for prior games on mobile and desktop, so most of the development was indeed for game stuff, and not engine. While I&rsquo;ve made the mistake often of &ldquo;build the engine instead of game&rdquo;, here the engine was built around the game, that&rsquo;s how it should be.</p>
<h1 id="20140325---steam-and-ios-launch">2014/03/25 - Steam and iOS launch</h1>
<p>I had tried to bring games to Steam before but with no success. The focus was on Mobile, with Desktop in mind, but where to sell it? Before Steam I was able to get confirmation for the new Humble Store, but Steam was still on my mind. In the past I had higher hopes for my first game <a href="/tags/vizati/">Vizati</a>, looked more polished, so QoD didn&rsquo;t seemed to have a chance.</p>
<p><img loading="lazy" src="/wp-content/uploads/2017/03/Screenshot-2022-11-01-at-19.38.50.png"></p>
<p>But I decided to make a trailer and launch a GL page, and imagine my surprise when QoD was approved on Steam Greenlight within a week or so. Just look at my dumb face here that I just digged from some old Tweets.</p>
<p><img alt="David celebrating QoD approval on Steam Greenlight" loading="lazy" src="/wp-content/uploads/2024/03/david_amador_celebrating_qod_greenlight_2014-01-24_22.38.07.jpg"></p>
<p>With the trailer out, people seemed to enjoyed what they saw, I also thought I was near completing the game, there&rsquo;s always something right? So I pretty much crunched the entire rest of time between my day job and finishing the game.</p>
<p>Finally on March 25th it was out, everyone could play it. Since the game was only releasing around 18h on Steam, I went to my day job that day, and only took the next day off for checking &amp; fixing bugs etc.</p>
<p>Initially all I was getting was a flow of emails with some bugs and suggestions, but overall people seemed to like it, which was a relief. There was still tons of stuff to fix, but slowly, and for the next few weeks went through issues and suggestions. On the mobile side of things things were smoother, that version was the older one, had more testing, also less hardware configurations. I recall before launch, a conversation with some coworkers, that making it paid on mobile was probably a mistake, but I don&rsquo;t know how to design games around F2P/Ads, so I made it paid.  But, thankfully, even being a paid game, at $1.99, people were happy with what they were getting.</p>
<p><img alt="Quest of Dungeons Android" loading="lazy" src="/wp-content/uploads/2024/03/quest_of_dungeons_tablet_iphone_desktop.jpg"></p>
<h1 id="20140530---linux">2014/05/30 - Linux</h1>
<p>This one was something that I had in the back on my mind for a while, theoretically my engine could be ported to Linux, but I was scared of having too many versions at launch, handing those 4 SKUs was already a handful, so this was left for later. This actually ended up being a factor in Humble Bundle contacting me to participate in one of their bundles, back then having a game on all 3 platforms was a must.
Technically speaking it wasn&rsquo;t extremely complicated, by this time the engine was already relatively split in ways that it was easy to integrate new OS, it was just a matter of implementation.
Also, now that Steam Deck is a thing, it just worked out of the box.</p>
<h1 id="20140826---android">2014/08/26 - Android</h1>
<p>With Desktops and iOS versions being well received I started getting requests for an Android version, I had never worked on this platform, but with most of the know bugs fixed, I bought a cheap Android phone and I moved into porting the game to this platform, you can read more about that <a href="/2014/08/native-game-on-android-porting-quest-of-dungeons/">here</a>.</p>
<p><img alt="Quest of Dungeons Android" loading="lazy" src="/wp-content/uploads/2024/03/quest_of_dungeons_android_2014-05-29_00.05.50.jpg"></p>
<h1 id="2014---ouya-cancelled">2014 - OUYA (cancelled)</h1>
<p>The hot thing around the time was OUYA, games like TowerFall were born there, so since I had an Android version I started to work on that, because it would be the closest to a traditional console that I thought I could put this game on. I started working on it, but once Microsoft accepted my pitch for the Xbox One (see below), I placed this in low priority. Between the time it took me to develop the Xbox One version, OUYA had it downfall, and by that time I just cancelled it.</p>
<h1 id="201509---xbox-one">2015/09 - Xbox One</h1>
<p>In the summer of 2014, after the launch of all those versions, relatively successfully, I started talking with ID@Xbox with the possibility of bringing QoD to Xbox One. There were a couple months of paperwork and mostly the conversation about &ldquo;this is a mouse game, how will it work on consoles?&rdquo;, which was when I started seeing that all the UI needed to be remade, and even some gameplay.</p>
<p>There are several posts, <a href="/2015/07/lets-talk-about-the-new-stuff-in-quest-of-dungeons-for-xbox-one/">here</a>, <a href="/2015/04/necrodancer-is-joining/">here</a>, <a href="/2014/11/qod-xo-devlog-1/">here</a>, <a href="/2015/01/qod-xo-devlog-2/">here</a> and <a href="/2015/02/qod-xo-devlog-3/">here</a>  detailing what went into to that process, but after around 1 year the game was finally released, and all the work put into reworking the game to controller friendly interface and gameplay paid off, it was <a href="/2015/10/quest-of-dungeons-reviews-roundup/">positively received</a>. I also took the opportunity to double the content available, and also add an <a href="/2015/04/necrodancer-is-joining/">extra character</a>. I&rsquo;m sure it was this combination of an almost remade version with increased content that led to it&rsquo;s positive feedback. I&rsquo;m really happy I decided to take all those months to remake it, it was daunting at first, I&rsquo;ll tell you that, but I&rsquo;m glad I did it.</p>
<p><img alt="Quest of Dungeons Xbox One launch" loading="lazy" src="/wp-content/uploads/2024/03/quest_of_dungeons_xbox_one_launch.jpg"></p>
<h1 id="20160929---wii-u-and-nintendo-3ds">2016/09/29 - Wii U and Nintendo 3DS</h1>
<p>Around 2015 summer, before Xbox One release, and if I recall correctly, during Gamescom in Germany, I started talking with Nintendo about bringing the game to Nintendo 3DS and Wii U.</p>
<p>This was when Nintendo was a bit more restrictive in terms of third party developers, and I was fully expecting, that me, a solo developer, would not make the cut, and it took a lot of months and patience to finally be able to show the game to someone and get accepted as an official Nintendo developer.</p>
<p>At first my goal was to make Wii U port first because it would be similar to Xbox One, with some additional features for the GamePad. Nintendo 3DS would come later, it would take more work due to it&rsquo;s specifics.</p>
<p>Unfortunately, or fortunately (depending how you see it), I bricked my Wii U devKit after a couple months of work, when the game was in a good state already but before 100% finished. During the time I waited for repairs I started the Nintendo 3DS version.</p>
<p>I knew would take a LOT more work, from performance, to completely different UI for dual screen, hybrid of touch + buttons. But when the Wii U devKit arrived, I decided to launch them side-by-side, I talked with Nintendo about a cross-buy possibility, and once they gave the ok that was the goal.</p>
<p><img alt="Quest of Dungeons StreetPass" loading="lazy" src="/wp-content/uploads/2016/05/3ds_new_inventory.png"></p>
<p>The Nintendo 3DS version was one of the most complicated ones to pull off. This was also the first time that working on my own engine was the only thing making it possible. A lot of people were suggesting me to use Unity, and I had would have saved time in porting, which can be true, but Unity didn&rsquo;t supported 3DS, so it would never have happened if not for my custom framework.</p>
<p>This is hands down my favourite version, there is no other like it, mostly because of the nature of the device.</p>
<p>It was so fun to work with that I found myself <a href="/2016/05/qod-3dswii-u-port-devlog-1/">adding features</a> just because I wanted to test them, like the StreetPass, where you can get ghosts from other players you pass on the street. Nintendo had a really neat device here.</p>
<p><img alt="Quest of Dungeons StreetPass" loading="lazy" src="/wp-content/uploads/2016/05/3ds_qod_streetpass.png"></p>
<p>There was some trouble having both versions on the same day, it&rsquo;s a lot of coordination required between me, Nintendo America and Europe teams, 4 different SKUs (3DS NA+EU, Wii U NA+EU), but in the end we made it.</p>
<p>Like I suspected during my own tests, on the 3DS it was the ideal portable version, it&rsquo;s a game that suits shorts sessions on the go.</p>
<p>This was also the first time I worked with a publisher for this game, for Japan, the game was published by Flyhigh Works, they took it to Tokyo Game Show, localized to JP, and were crucial in shaping up the 3DS version into what it is. I do recall many sessions where my stubbornness almost caused some bad decisions in the game, but they were really cool in guiding me to make the best of it.</p>
<p><img alt="Quest of Dungeons on Wii U and Nintendo 3DS" loading="lazy" src="/wp-content/uploads/2024/03/qod_wiiu_3ds.jpg"></p>
<h1 id="20170120---playstation-4-and-the-vita-version-that-never-was">2017/01/20 - PlayStation 4 and the Vita version that never was.</h1>
<p>I love my PlayStation 4, in fact it&rsquo;s the console I have more physical games for.</p>
<p>So it was with great excitement that after a Skype call with my PlayStation rep I had the greenlight to get the game there. This started around the time of Nintendo too, but sadly, and at first I wanted PS4 + Vita combo, like Wii U + 3DS, but for a variety of reasons the PlayStation Vita never happened.</p>
<p>This was one of the reasons the PS4 versions was one of the latter ones, I kept hoping I could launch both simultaneously but never happened. Fun fact, this version almost had a physical edition that got cancelled by the publisher at last moment, eventually I even got someone, another publisher, to take care of the PS Vita version, but that also got cancelled later on. So a combination of things that happened that were no one&rsquo;s fault, but also made it a bit hard for me to explain why it wasn&rsquo;t happening. In certain moments it was almost, but it never did happened. It was a bit frustrating that I didn&rsquo;t had clear answers for the players regarding this, but I couldn&rsquo;t, and I tried but failed in the end. Well, that&rsquo;s game development.</p>
<p><img alt="Quest of Dungeons on PlayStation 4" loading="lazy" src="/wp-content/uploads/2017/01/qod_ps4_no_name.png"></p>
<h1 id="20170810---nintendo-switch">2017/08/10 - Nintendo Switch</h1>
<p>Around 1 month after I released on Wii U and 3DS, Nintendo announced their new hybrid console, the Nintendo Switch. I immediately started getting questions from players about a port. This complicated promoting the new Nintendo versions while everyone was excited about the upcoming console, saving money for it and the games. By coincidence I had launched both versions right at the end.</p>
<p>I can&rsquo;t recall exactly when conversations started with Nintendo about this, since it was in hot demand, both for retail and developers, but eventually Nintendo shipped me a devKit and I started porting. It was released first in the Japanese regions, again by Flyhigh Works. But a few weeks later again by me in the rest of the world. This version had the portability of 3DS, and graphics/resolution and UI of the home consoles. This was also the first time I made a demo for the game, which still exists on the eShop.</p>
<p><img alt="Quest of Dungeons on Nintendo Switch" loading="lazy" src="/wp-content/uploads/2017/08/quest_of_dungeons_switch.jpg"></p>
<h1 id="2019---dreamcast-just-having-fun">2019 - Dreamcast (just having fun)</h1>
<p>In 2019 I got my hands on a Dreamcast I decided to &ldquo;wonder if I can port it there?&rdquo;, it was never really meant for a full release, that would take months of time that I don&rsquo;t have at the moment,
I just posting it here for the record, this was under a week of work, it was fun. Maybe if I reach retirement I&rsquo;ll take some time to finish it. There&rsquo;s a lot of work left in there.</p>
<p>After a while booting the game on an emulator,</p>
<p><img alt="Quest of Dungeons running on emulator 1" loading="lazy" src="/wp-content/uploads/2024/03/qod_dreamcast_2.png"></p>
<p>and then later when I got it booting on a real Dreamcast</p>
<video width="100%" controls>
    <source src="/wp-content/uploads/2024/03/qod_running_on_dreamcast.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

<h1 id="20210413---switch-physical-edition">2021/04/13 - Switch Physical Edition</h1>
<p>Like I mentioned before, I tried to get the game in physical format before, and I kept trying for years but it simply wasn&rsquo;t happening. Until 2021, when by random chance, someone recommended me Leoful, and they accepted right away, in fact, from initial contact to production, it was just a couple months, I&rsquo;m really happy I was able to finally get the game on an actual box, it hits differently, as I <a href="/2010/08/games-and-systems-from-childhood/">grew playing Nintendo games</a>,  and also feels like a closure to a project that started on a smaller device and made it&rsquo;s way to a real physical game.</p>
<p><img alt="Quest of Dungeons Physical Edition for Nintendo Switch" loading="lazy" src="/wp-content/uploads/2021/03/Quest-of-Dungeons-Nintendo-Switch-Physical-edition.png"></p>
<h1 id="2022---">2022 - ??</h1>
<p>Right now the game still exists in several stores (R.I.P. Nintendo 3DS and Wii U), and it&rsquo;s in maintenance mode only. The platforms patched more regularly are the mobile ones, whenever Apple or Android come up with new rules or it breaks on new devices. Windows gives nearly no problems, MacOS breaks things more often, but overall it doesn&rsquo;t give a lot of work, the last time I had to mess with it, was the Linux version to patch stuff for Steam Deck, but it was relatively easy.</p>
<p><img alt="Quest of Dungeons on Steam Deck" loading="lazy" src="/wp-content/uploads/2024/03/quest_of_dungeons_steam_deck.jpg"></p>
<p>So in the end things worked out, and I want to say a big thank you to everyone who supported this project, I read all the emails, DMs, messages everyone sent over the years, even fanart, you rock.</p>
<p><img loading="lazy" src="/wp-content/uploads/2017/03/gKx4R.gif"></p>
<h1 id="some-trivia">Some trivia</h1>
<ul>
<li>The game has 79k of code (all platforms)</li>
<li>The game engine has 130k of code (all platforms)</li>
<li>Over 63800 years of total play time on Steam alone</li>
<li>The game allowing the player to drop items anywhere and being persistent was a side effect of saving the whole world to save instead of recreating it by seed. I just turned it into a feature.</li>
<li>I was only able to finish the game in Hell mode AFTER releasing it, the math seemed to check out, but I wasn&rsquo;t good enough.</li>
<li>The game was called Quest of Dungeons from day 1 of development, as a generic codename, I just grew too attached to it.</li>
<li>There was a pet system that got dropped, taming enemies, but it was dropped in favour of Shaman unique skill of summons.</li>
<li>There was a way for enemies to travel between floors, like Resident Evil added that later on, going between rooms, but it was too aggressive and made the game frustratingly hard.</li>
<li>All the level and combat damage math falls apart around character level 40 or above, but the game was designed below that.</li>
<li>The initial skull sign, which only exists at the very start, was a way to teach the player that death meant restarting, in 2013-14 roguelikes weren&rsquo;t as popular and it was seen as a shock for that to happen (play-testers would email me &ldquo;my save is lost&rdquo;). My goal was that by potentially learning that early on, the player would not get surprised.</li>
</ul>
<p>Thank you for reading all of this.</p>
<p><img loading="lazy" src="/wp-content/uploads/2024/03/qod_characters_anniversary.png"></p>
<p>Here&rsquo;s a cool image made by <a href="https://twitter.com/LeonorParra08">Leonor</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Let&#39;s take a look at SDL Game Development book</title>
      <link>https://www.david-amador.com/2013/07/lets-take-a-look-at-sdl-game-development-book/</link>
      <pubDate>Wed, 17 Jul 2013 12:47:13 +0000</pubDate>
      <guid>https://www.david-amador.com/2013/07/lets-take-a-look-at-sdl-game-development-book/</guid>
      <description>&lt;p&gt;I use SDL 1.2 on my engine, but just for the window creation and input handling. That prevents me for writing boring window handling code for each platform, it just works.&lt;/p&gt;
&lt;p&gt;These days SDL can be use on almost every platform, Windows, Mac, Linux, iOS, Android. They recently launched the a new version, SDL 2.0 and I was lucky to receive a copy of &lt;a href=&#34;http://www.packtpub.com/simple-directmedia-layer-game-development/book&#34;&gt;SDL Game Development&lt;/a&gt; written by Shaun Mitchell that covers that new version.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I use SDL 1.2 on my engine, but just for the window creation and input handling. That prevents me for writing boring window handling code for each platform, it just works.</p>
<p>These days SDL can be use on almost every platform, Windows, Mac, Linux, iOS, Android. They recently launched the a new version, SDL 2.0 and I was lucky to receive a copy of <a href="http://www.packtpub.com/simple-directmedia-layer-game-development/book">SDL Game Development</a> written by Shaun Mitchell that covers that new version.</p>
<p><a href="http://www.packtpub.com/simple-directmedia-layer-game-development/book"><img alt="6821OT_cov" loading="lazy" src="/wp-content/uploads/2013/07/6821OT_cov-243x300.jpg"></a></p>
<p>For anyone who is starting on game development and wants to use SDL this is a good book, it has simple code and everything is very well explained. But make no mistake, I don’t recommend this for someone who doesn’t know code at all, you need to know some C++ to use it, or at least some object oriented language, but chances are, if you are reading my blog you know a OOP language already.</p>
<p>Everything in the book is explained in a simple way and I don’t see anyone having any problems, I really liked the code examples, usually some books have a very “non real” code, stuff that while it works no-one usually does it like that, but this one has stuff that I would do that exact same way. It guides you from making the first hello project to loading an image, a game state machine, getting input from Keyboard, Mouse and Joysticks, a manager to handle textures, and creating a tilemap using <a href="http://www.mapeditor.org/">Tiled</a>. The Tiled chapter was a positive surprise since not many beginner/intermediate books go much into a data-driven design, and this is very important to make modern games, while it might seem hard to implement for a beginner, trust me it is well worth it.</p>
<p>Now for things that you might be expecting but are not covered, the book doesn’t cover any OpenGL/DirectX specifics, so if you are looking for that you won’t find it here. It is possible to directly call GL/DX instead of using SDL draw calls, this is something I do, but you might lose platform independence if not done properly. Shaders are something also not covered, but then again SDL has no native support for that, you have to do it yourself.</p>
<p>I also would have liked if the book covered more on configuring SDL on Mac, Linux too, since most people who choose SDL usually do want to build on those platforms.</p>
<p>To end this short review, I would say that for everyone that are starting in gamedev, or never used SDL this is a good book, for someone who has already used SDL 2.0 or even 1.2 in the past you probably won’t find much here that you don’t already know.</p>
<blockquote>
<p>I was not payed in any form to take a look at this book, nor was this post redacted/altered in any way. I reviewed the book by reading the digital format. You can find both the digital and physical book on the link above.</p>
</blockquote>
]]></content:encoded>
    </item>
  </channel>
</rss>
