<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Blog Title</title>
  <subtitle>This is a longer description about your blog.</subtitle>
  <link href="https://toast.monster/feed/feed.xml" rel="self" />
  <link href="https://toast.monster/" />
  <updated>2026-03-09T00:00:00Z</updated>
  <id>https://toast.monster/</id>
  <author>
    <name>Your Name</name>
  </author>
  <entry>
    <title>Spells from a file</title>
    <link href="https://toast.monster/blog/gealdor/spell-files/" />
    <updated>2026-03-09T00:00:00Z</updated>
    <id>https://toast.monster/blog/gealdor/spell-files/</id>
    <content type="html">&lt;p&gt;I was initially a little shocked that as of 2026, &lt;span class=&quot;nowrap&quot;&gt;<span class="nowrap">C++</span>&lt;/span&gt;&#39;s standard library doesn&#39;t provide
a means to watch files for changes. But after thinking about it for a few seconds, it
seems to require a third party library in a lot of other languages/environments too.
Okay, so I guess that&#39;s something I needed to learn.&lt;/p&gt;
&lt;p&gt;I plan to support all the important operating systems—Arch, Debian, Ubuntu, er,
Linux Mint perhaps, and maybe some others—so I started learning the &lt;code&gt;inotify&lt;/code&gt; API.
It&#39;s actually very simple and I feel silly for not having used it before. Moreover the
man pages are informative, even including some example code. OK, so there&#39;s no excuse
left.&lt;/p&gt;
&lt;p&gt;I need to think about some of the game-specific details, but Gealdor now has the means
to watch filesystem changes. This will complement the
&lt;a href=&quot;https://toast.monster/blog/gealdor/spell-files/sdl-net-is-really-nice/&quot;&gt;socket server&lt;/a&gt;, but is also going to be much more useful in
development (I suspect).&lt;/p&gt;
&lt;p&gt;I get it, it&#39;s a bit dull, but sometimes progress is.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>SDL_net is really nice</title>
    <link href="https://toast.monster/blog/gealdor/sdl-net-is-really-nice/" />
    <updated>2026-02-23T00:00:00Z</updated>
    <id>https://toast.monster/blog/gealdor/sdl-net-is-really-nice/</id>
    <content type="html">&lt;p&gt;When tinkering on a long-term project, I accumulate a lot of &amp;quot;demo&amp;quot; programs: small,
simple applications that test out one thing in isolation—with the intention of
merging into the main project if it feels successful.&lt;/p&gt;
&lt;p&gt;I made one such demo using &lt;a href=&quot;https://wiki.libsdl.org/SDL3_net/CategorySDLNet&quot;&gt;SDL_net&lt;/a&gt;
recently. It&#39;s a very simple socket server that listens for connections and responds
with a message. To be honest, I&#39;m not used to networking when working with C/&lt;span class=&quot;nowrap&quot;&gt;<span class="nowrap">C++</span>&lt;/span&gt;, and so
was pleasantly surprised when it worked with ease.&lt;/p&gt;
&lt;p&gt;It took maybe an hour and a half to get working. And it only took this long because I
mistakenly followed an out-dated tutorial first, instead of going straight to
&lt;a href=&quot;https://wiki.libsdl.org/SDL3_net/CategorySDLNet&quot;&gt;the SDL_net documentation&lt;/a&gt; like a
sensible person. Once I&#39;d done The Right Thing, it was a breeze.&lt;/p&gt;
&lt;p&gt;I used various tools and languages like netcat, curl, Racket and Python to check a few
examples and convince myself it was working—and that I had numerous options for
interaction in the future. I think this could work well.&lt;/p&gt;
&lt;h2 id=&quot;uses-for-gealdor&quot;&gt;Uses for Gealdor&lt;/h2&gt;
&lt;p&gt;Why is this useful for Gealdor? Well, players need to compose their spells and submit
them to a &lt;s&gt;compiler&lt;/s&gt; spell synthesis incantation, which checks each spell&#39;s validity
and—for user convenience—should output plenty of useful notices about
invalid syntax or misnamed spells, etc.&lt;/p&gt;
&lt;p&gt;Spell writers are allowed to use computers too, though (things have moved on in the
magic world). So the game will want a &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/gealdor/sdl-net-is-really-nice/#text-editing-note&quot; id=&quot;text-editing-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;text editing interface&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some people might resent the (relatively limited) text editing interface I&#39;m capable of
making. So there&#39;s some sense in at least allowing them to compose spells in a program
of their choice. Allowing spells to be communicated like this also technically allows me
to write the UI part in a different language, without having to bother with bindings.&lt;/p&gt;
&lt;p&gt;For example, I could use (&lt;a href=&quot;https://docs.racket-lang.org/drracket/index.html&quot;&gt;Dr Racket&lt;/a&gt;,
a very extensible editor used in the Racket world, which—as you might
expect—supports custom languages with relative ease). I could even use HTML and JS
(probably not, though; I do enough of this already). Or I could use anything else.
Another, more compelling reason to communicate input like this in general is supporting
assistive technology: if the communication protocol is public, anybody can write their
own interface where required.&lt;/p&gt;
&lt;p&gt;Publishing a protocol sounds complicated, but the game already has &lt;a href=&quot;https://toast.monster/blog/gealdor/sdl-net-is-really-nice/the-language/&quot;&gt;a
language&lt;/a&gt; for communicating spells. Building a protocol on top of this
should be &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/gealdor/sdl-net-is-really-nice/#straighforward-note&quot; id=&quot;straighforward-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;fairly easy&lt;/a&gt;.&lt;/p&gt;
  &lt;footer role=&quot;doc-endnotes&quot; class=&quot;Footnotes&quot;&gt;
    &lt;h2 id=&quot;footnotes-label&quot; class=&quot;Footnotes__title&quot;&gt;Footnotes&lt;/h2&gt;
    &lt;ol class=&quot;Footnotes__list&quot;&gt;&lt;li id=&quot;text-editing-note&quot; class=&quot;Footnotes__list-item&quot;&gt;I&#39;m actually
considering alternative interfaces as well/instead. Text editing would be awful on a
touch screen, for example, but a button interface might also be possible. We can think
more about this later, though. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/gealdor/sdl-net-is-really-nice/#text-editing-ref&quot; aria-label=&quot;Back to reference 1&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;straighforward-note&quot; class=&quot;Footnotes__list-item&quot;&gt;This innocuous-seeming assumption may be my
undoing. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/gealdor/sdl-net-is-really-nice/#straighforward-ref&quot; aria-label=&quot;Back to reference 2&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
  &lt;/footer&gt;
</content>
  </entry>
  <entry>
    <title>The game language</title>
    <link href="https://toast.monster/blog/gealdor/the-language/" />
    <updated>2026-02-15T00:00:00Z</updated>
    <id>https://toast.monster/blog/gealdor/the-language/</id>
    <content type="html">&lt;p&gt;Gealdor, the magic game I&#39;m working on, involves a simple language for manipulating
characters within a plane. The grammar is quite simple: there are several types of
statements which do things, and statements can also be grouped together in a &lt;em&gt;spell&lt;/em&gt;.
&lt;small&gt;(The bores out there might call spells &lt;em&gt;0-ary functions&lt;/em&gt;, but I find &amp;quot;spell&amp;quot; much
more captivating.)&lt;/small&gt;&lt;/p&gt;
&lt;h2 id=&quot;movement&quot;&gt;Movement&lt;/h2&gt;
&lt;p&gt;With this language, you can move (or not) a character:&lt;/p&gt;
&lt;pre class=&quot;language-gealdor&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-gealdor&quot;&gt;stay
stay twice
step east thrice
step south five times&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;casting&quot;&gt;Casting&lt;/h2&gt;
&lt;p&gt;In English, the word &lt;a href=&quot;https://en.wiktionary.org/wiki/cast&quot;&gt;&lt;em&gt;cast&lt;/em&gt;&lt;/a&gt; most commonly means
to throw or sling something. But from that (I assume, anyway) came a number of
metaphorical meanings: you can &lt;em&gt;cast your eyes on&lt;/em&gt; (i.e. look at) something; &lt;em&gt;cast
metal&lt;/em&gt; (i.e. shape it while molten); etc. It apparently even meant to vomit at one
point. More relevantly, I hope, you can also &lt;em&gt;cast a spell&lt;/em&gt;, meaning to perform or
undertake it. This ambiguity makes &lt;code&gt;cast&lt;/code&gt; a nice keyword for a magical language, in my
opinion.&lt;/p&gt;
&lt;p&gt;Some or all characters will be able to &lt;code&gt;cast&lt;/code&gt; things:&lt;/p&gt;
&lt;pre class=&quot;language-gealdor&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-gealdor&quot;&gt;cast stone
cast fireball west
cast spell do_something_exciting&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A &lt;code&gt;stone&lt;/code&gt; is just an obstacle, in this game. The latter two should be self-explanatory.&lt;/p&gt;
&lt;h2 id=&quot;summoning&quot;&gt;Summoning&lt;/h2&gt;
&lt;p&gt;The word &lt;a href=&quot;https://en.wiktionary.org/wiki/summon&quot;&gt;&lt;em&gt;summon&lt;/em&gt;&lt;/a&gt; is a bit more
straightforward: you call for things to appear, sometimes by magic.&lt;/p&gt;
&lt;p&gt;The more magical characters in Gealdor can also &lt;code&gt;summon&lt;/code&gt; things:&lt;/p&gt;
&lt;pre class=&quot;language-gealdor&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-gealdor&quot;&gt;summon ghoul
summon demon heading north
summon familiar casting spell do_something_exciting&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I haven&#39;t worked out all the details of what &lt;code&gt;ghoul&lt;/code&gt;s and &lt;code&gt;demon&lt;/code&gt;s will do. Possibly
they will need to be summoned &lt;em&gt;from&lt;/em&gt; somewhere. It depends on what allows for the best
puzzles.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://en.wiktionary.org/wiki/familiar#Noun&quot;&gt;&lt;em&gt;familiar&lt;/em&gt;&lt;/a&gt; (the noun) tends to mean a
kind of spirit or creature that accompanies or watches over someone (normally magical).
In this game, a &lt;code&gt;familiar&lt;/code&gt; has a slightly different, but more concrete definition: it is
a magical clone of the current character, who casts a spell upon its creation. Since a
spell can invoke further spells, this will allow for &lt;s&gt;recursion&lt;/s&gt; joyful mess. Players
will have to use such recursive magic to solve the tougher problems in Gealdor.&lt;/p&gt;
&lt;h2 id=&quot;spells&quot;&gt;Spells&lt;/h2&gt;
&lt;p&gt;Spells are magic, but they often come written down. Therefore anybody can &lt;code&gt;observe&lt;/code&gt; a
spell, which is just a list of commands.&lt;/p&gt;
&lt;pre class=&quot;language-gealdor&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-gealdor&quot;&gt;observe spell do_something_exciting
  summon ghoul
  step north
  cast fireball west
  cast spell do_something_else
obverse&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;m not sure about the &lt;code&gt;observe&lt;/code&gt; keyword, and even less sure about &lt;code&gt;obverse&lt;/code&gt;. I&#39;m trying
to be clever and I think it&#39;s failing. These could well change in future.&lt;/p&gt;
&lt;h2 id=&quot;natural-language&quot;&gt;Natural language&lt;/h2&gt;
&lt;p&gt;I like that this syntax feels less rigidly computational and more like natural language
than most programming languages. Probably it doesn&#39;t go far enough, and I would quite
like to make it flow even more like a spoken language.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>A naive tilemap renderer</title>
    <link href="https://toast.monster/blog/gealdor/naive-tilemap-renderer/" />
    <updated>2026-02-07T00:00:00Z</updated>
    <id>https://toast.monster/blog/gealdor/naive-tilemap-renderer/</id>
    <content type="html">&lt;p&gt;One of the biggest mistakes I&#39;ve made so far is writing code. Lots of people have told
me over the years that I should Just Use This Engine, for some definition of This. I&#39;ve
tried using some engines, and some of them were even very good
(&lt;a href=&quot;https://www.love2d.org/&quot;&gt;LÖVE&lt;/a&gt; and &lt;a href=&quot;https://godotengine.org/&quot;&gt;Godot&lt;/a&gt; spring to mind).
But I don&#39;t often find that &lt;em&gt;entertaining&lt;/em&gt;. And this project is not about me making a
game for the players to enjoy. It&#39;s about me having fun tinkering. If the end result is
playable, great. If it&#39;s &lt;em&gt;fun&lt;/em&gt;, that would be remarkable.&lt;/p&gt;
&lt;h2 id=&quot;the-renderer&quot;&gt;The renderer&lt;/h2&gt;
&lt;p&gt;My tilemap renderer sucks. I &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/#forget-details-note&quot; id=&quot;forget-details-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;forget&lt;/a&gt; the details,
but I &lt;em&gt;do&lt;/em&gt; recall that it does some smart things, and a lot of daft things.&lt;/p&gt;
&lt;p&gt;For the sake of entertainment, here&#39;s one silly thing it did while I was working on it.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/77UfhFSAV_-638.avif 638w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/77UfhFSAV_-638.webp 638w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/77UfhFSAV_-638.png&quot; alt=&quot;A failed attempt at rendering a dungeon using tiled 2D pixel art sprites. The image should depict a square dungeon containing a box; some posts or wands (it&#39;s not clear, to tell you the truth); and a couple of fountains. Due to an offset error, however, the walls become staggered and form a jagged diagonal line across the image, with a sandy floor and scattered items on both sides.&quot; width=&quot;638&quot; height=&quot;478&quot;&gt;&lt;/picture&gt;
&lt;figcaption&gt;
The woes of off-by-one errors.
Uses &lt;a href=&quot;https://kenney.nl/assets/tiny-dungeon&quot;&gt;Kenney&#39;s Tiny Dungeon sprites&lt;/a&gt;.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;This particular issue is fixed now, but hopefully now you understand the level of
quality we&#39;re dealing with.&lt;/p&gt;
&lt;h2 id=&quot;this-is-okay-probably&quot;&gt;This is okay, probably&lt;/h2&gt;
&lt;p&gt;The appearance of the game will definitely change in future:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the art is an asset pack from &lt;a href=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/kenney.nl&quot;&gt;kenney.nl&lt;/a&gt;, which I dropped in for the
sake of just getting something—&lt;em&gt;anything&lt;/em&gt;—running;&lt;/li&gt;
&lt;li&gt;I haven&#39;t yet decided between 2D or &lt;a href=&quot;https://en.wikipedia.org/wiki/2.5D&quot;&gt;2.5D&lt;/a&gt;,
pixel art or not, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Right now, fully functional gameplay is the priority, so I can experiment more with the
puzzles. Appearance is important, but the game will only be &lt;em&gt;fun&lt;/em&gt; if the puzzles and
gameplay are solid.&lt;/p&gt;
&lt;h2 id=&quot;mistakes&quot;&gt;Mistakes&lt;/h2&gt;
&lt;p&gt;I wrote the renderer using OpenGL. Two mistakes I made:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;writing a renderer at all;&lt;/li&gt;
&lt;li&gt;doing it naively, without accounting for pixel art being, well, pixelly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I didn&#39;t need to write a renderer. I could have used an engine, a library, or just done
the obvious thing, given that I&#39;m using SDL3, of using &lt;code&gt;SDL_Renderer&lt;/code&gt;, &lt;code&gt;SDL_Texture&lt;/code&gt; et
al. Probably the output would have &lt;em&gt;looked better&lt;/em&gt; with the latter. But I felt that this
custom renderer would give me more flexibility later on (questionable), and also, I just
wanted to.&lt;/p&gt;
&lt;h2 id=&quot;embracing-bugs&quot;&gt;Embracing bugs&lt;/h2&gt;
&lt;p&gt;The worst remaining problem with this naive implementation is that it represents pixel
locations using floats. This introduces inaccuracies in the location of rendered
sprites, and so we get tears in the image (the thin lines appearing between tiles).&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/TRwcdrAecF-638.avif 638w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/TRwcdrAecF-638.webp 638w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/TRwcdrAecF-638.png&quot; alt=&quot;An image of a pixellated square dungeon containing a couple of fountains, some stones and a box. Clearly the dungeon is composed of tiles, because you can see tearing between some of the tiles: thin lines where the dark turquoise background cuts through the dungeon image. Some of the flooring is also renderered using un-rotated tiles, causing some odd, dark lines of shadow in the top-left corner.&quot; width=&quot;638&quot; height=&quot;478&quot;&gt;&lt;/picture&gt;
&lt;figcaption&gt;
Tearing (and a few un-rotated tiles).
Uses &lt;a href=&quot;https://kenney.nl/assets/tiny-dungeon&quot;&gt;Kenney&#39;s Tiny Dungeon sprites&lt;/a&gt;.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;aside&gt;
You may notice that some of the floor tiles are also un-rotated. This is fixed, now, but
I haven&#39;t bothered to take a more up-to-date screenshot.
&lt;/aside&gt;
&lt;p&gt;I haven&#39;t fixed the tearing yet. Possibly the easiest fix would be to just render pixels
to a texture and then perform scaling. Again, this could have been done easily with e.g.
&lt;code&gt;SDL_Renderer&lt;/code&gt; et al., but also again, I like making my life hard and gameplay is more
important. So, let me apologise now for all the terrible screenshots you poor readers
will be subjected to in future.&lt;/p&gt;
  &lt;footer role=&quot;doc-endnotes&quot; class=&quot;Footnotes&quot;&gt;
    &lt;h2 id=&quot;footnotes-label&quot; class=&quot;Footnotes__title&quot;&gt;Footnotes&lt;/h2&gt;
    &lt;ol class=&quot;Footnotes__list&quot;&gt;&lt;li id=&quot;forget-details-note&quot; class=&quot;Footnotes__list-item&quot;&gt;I don&#39;t have a lot of
spare time, so my projects move very slowly. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer/#forget-details-ref&quot; aria-label=&quot;Back to reference 1&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
  &lt;/footer&gt;
</content>
  </entry>
  <entry>
    <title>A grave error</title>
    <link href="https://toast.monster/blog/grave-error/" />
    <updated>2026-02-03T00:00:00Z</updated>
    <id>https://toast.monster/blog/grave-error/</id>
    <content type="html">&lt;p&gt;I&#39;ve been informed that I&#39;m using The Wrong Software to create my website. I&#39;d like to
take this opportunity to formally apologise to the internet and announce my retirement
from blogging.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Gealdor, a game I&#39;m making</title>
    <link href="https://toast.monster/blog/gealdor/" />
    <updated>2026-02-02T00:00:00Z</updated>
    <id>https://toast.monster/blog/gealdor/</id>
    <content type="html">&lt;p&gt;I&#39;m making a &lt;s&gt;programming&lt;/s&gt; magic game called &lt;em&gt;Gealdor&lt;/em&gt;. The word is from Old English,
cognate with the Germanic word &lt;a href=&quot;https://en.wikipedia.org/wiki/Galdr&quot;&gt;&lt;em&gt;galdr&lt;/em&gt;&lt;/a&gt;, and
roughly means a spell or incantation.&lt;/p&gt;
&lt;!-- TODO(publish): link to the language post --&gt;
&lt;p&gt;Gealdor is/will be a 2D (or possibly 2.5D) puzzle game that involves writing spells to
solve puzzles. The spells use a language grammar I&#39;ve already determined. I need more
puzzles, but I think the language is reasonably expressive and allows for some fun.&lt;/p&gt;
&lt;p&gt;I&#39;ll waffle about this project a lot, so it has its own &lt;a href=&quot;https://toast.monster/tags/gealdor/&quot;&gt;Gealdor&lt;/a&gt; tag.&lt;/p&gt;
&lt;h2 id=&quot;boring-programming-details&quot;&gt;Boring programming details&lt;/h2&gt;
&lt;p&gt;I&#39;m writing the game in &lt;span class=&quot;nowrap&quot;&gt;<span class="nowrap">C++</span>&lt;/span&gt;, using &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/gealdor/#libraries-note&quot; id=&quot;libraries-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;SDL3&lt;/a&gt; for
basics like window and input handling, and CMake manages the build and packaging.&lt;/p&gt;
&lt;p&gt;The game has a
&lt;a href=&quot;https://en.wikipedia.org/wiki/Domain-specific_language&quot;&gt;Domain-Specific Language&lt;/a&gt; (DSL)
implemented in &lt;span class=&quot;nowrap&quot;&gt;<span class="nowrap">C++</span>&lt;/span&gt; using &lt;a href=&quot;https://github.com/taocpp/PEGTL&quot;&gt;PEGTL&lt;/a&gt; (I can&#39;t recommend
PEGTL enough; it seems very solid and has lovely documentation). Developing the DSL is
going remarkably smoothly, so far; perhaps actual gameplay will follow soon.&lt;/p&gt;
&lt;p&gt;I wrote a &lt;a href=&quot;https://toast.monster/blog/gealdor/naive-tilemap-renderer&quot;&gt;janky renderer&lt;/a&gt; in OpenGL, too. This will probably
change drastically if the game is ever published, but puzzles are the priority right
now. I can get reasonably far with counters, paper and pen, but the puzzles can be quite
complex, limiting what can be achieved before the gameplay works properly. Also,
ultimately only the gameplay can make it &lt;em&gt;fun&lt;/em&gt;—anything else is a (relative) waste
of time.&lt;/p&gt;
&lt;p&gt;Originally the game was a dual-language project with &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/gealdor/#why-racket-note&quot; id=&quot;why-racket-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;https://docs.racket-lang.org/&quot;&gt;Racket&lt;/a&gt;&lt;/a&gt; as well, but I&#39;ve since
removed that part of the codebase. Maintaining a C API for language bindings was a pain,
and also Racket has a couple of &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/gealdor/#racket-peculiarities-note&quot; id=&quot;racket-peculiarities-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;peculiarities&lt;/a&gt; that slowed the project down. I say this with love, though: I relish
coding with Racket, and will keep trying to use it in my projects (it may even reappear
in this one at a later date). I strongly recommend it if you want to learn a Lisp.&lt;/p&gt;
  &lt;footer role=&quot;doc-endnotes&quot; class=&quot;Footnotes&quot;&gt;
    &lt;h2 id=&quot;footnotes-label&quot; class=&quot;Footnotes__title&quot;&gt;Footnotes&lt;/h2&gt;
    &lt;ol class=&quot;Footnotes__list&quot;&gt;&lt;li id=&quot;libraries-note&quot; class=&quot;Footnotes__list-item&quot;&gt;The game also uses GLM,
reflect, and some homemade libraries of varying quality. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/gealdor/#libraries-ref&quot; aria-label=&quot;Back to reference 1&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;why-racket-note&quot; class=&quot;Footnotes__list-item&quot;&gt;Racket seemed like a great choice, in particular because it&#39;s aimed at
language-oriented programming, and the game relies very heavily on a DSL. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/gealdor/#why-racket-ref&quot; aria-label=&quot;Back to reference 2&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;racket-peculiarities-note&quot; class=&quot;Footnotes__list-item&quot;&gt;It was a while
ago, but from memory, dependency management and packaging was a particular headache. You
can work around this using some environment variables to ensure locality of installed
packages (which by default live somewhere global for the user). But it made setting up
reliable builds in the context of a CMake project difficult. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/gealdor/#racket-peculiarities-ref&quot; aria-label=&quot;Back to reference 3&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
  &lt;/footer&gt;
</content>
  </entry>
  <entry>
    <title>Welcome to a totally useful and not at all time-wasting blog by chronic procrastinator toasty</title>
    <link href="https://toast.monster/blog/hello-world/" />
    <updated>2026-01-31T00:00:00Z</updated>
    <id>https://toast.monster/blog/hello-world/</id>
    <content type="html">&lt;p&gt;Hello, I&#39;m starting a blog. Hooray!&lt;/p&gt;
&lt;p&gt;I&#39;ve wanted to do so for a while, but every time I try I get distracted with pointless
things like styling or the &lt;a class=&quot;Footnotes__ref&quot; href=&quot;https://toast.monster/blog/hello-world/#tech-note&quot; id=&quot;tech-ref&quot; aria-describedby=&quot;footnotes-label&quot; role=&quot;doc-noteref&quot;&gt;&amp;quot;tech&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;ve also been very hesitant to put anything online, ever since the internet became an
enclosed commons, weaponised against its inhabitants and drowning in the slop it was
used to train.&lt;/p&gt;
&lt;p&gt;But here we are. A simple Eleventy template is working well with some minor tweaks. If
we can just keep readers to a minimum, maybe it won&#39;t get detected by the text
extruders&#39; crawlers either. Truly, the best of both worlds.&lt;/p&gt;
&lt;h2 id=&quot;why-now-then&quot;&gt;Why now, then?&lt;/h2&gt;
&lt;p&gt;What&#39;s the point? Well, &lt;s&gt;there is none&lt;/s&gt; I&#39;m working on a couple of projects and
writing about them might help with motivation. Writing helps me form ideas and channel
my regrets. There might even be some useful feedback. Or it might just stop me actually
doing the thing. Let&#39;s find out I guess.&lt;/p&gt;
  &lt;footer role=&quot;doc-endnotes&quot; class=&quot;Footnotes&quot;&gt;
    &lt;h2 id=&quot;footnotes-label&quot; class=&quot;Footnotes__title&quot;&gt;Footnotes&lt;/h2&gt;
    &lt;ol class=&quot;Footnotes__list&quot;&gt;&lt;li id=&quot;tech-note&quot; class=&quot;Footnotes__list-item&quot;&gt;It&#39;s just HTML, grow up. &lt;a class=&quot;Footnotes__back-link&quot; href=&quot;https://toast.monster/blog/hello-world/#tech-ref&quot; aria-label=&quot;Back to reference 1&quot; role=&quot;doc-backlink&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
  &lt;/footer&gt;
</content>
  </entry>
</feed>