<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<title>Pixelo789</title>
	<link rel="self" type="application/atom+xml" href="https://pixelo789.codeberg.page/atom.xml"/>
	<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page"/>
	<updated>2026-05-11T00:00:00+00:00</updated>
	<id>https://pixelo789.codeberg.page/atom.xml</id>
	<entry xml:lang="en">
		<title>Slop-free Wii library managing</title>
		<published>2026-05-11T00:00:00+00:00</published>
		<updated>2026-05-11T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-05-11-slop-free-wii-library-managing/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-05-11-slop-free-wii-library-managing/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-05-11-slop-free-wii-library-managing/">
			&lt;h1&gt;Slop-free Wii library managing&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I recently acquired some Wii games, and I wanted them on my USB hard drive to avoid damaging the discs.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since the last time I had to do something like this, I switched platforms, I went to wii.hacks.guide, only to discover that what they recommended was slopware:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wii.hacks.guide/backups&quot;&gt;wii.hacks.guide page for managing backups&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since all I really care about is making WBFS files so they fit on my FAT32-formatted drive, I don&amp;#39;t need a full-fledged GUI anyway, so I did some digging and here&amp;#39;s what I found.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: This is fairly GNU/Linux-centric. Windows or macOS users might be able to replicate this, but I provide no guarantees.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Prerequesites&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;&amp;quot;cat&amp;quot; and optionally &amp;quot;md5sum&amp;quot; and &amp;quot;sha1sum&amp;quot; for hash verification&lt;/li&gt;
				&lt;li&gt;Wiimms ISO Tools (WIT) (you can check Repology to see if your operating system packages it)&lt;/li&gt;
				&lt;li&gt;A file manager&lt;/li&gt;
				&lt;li&gt;A homebrewed Wii with a USB loader set up (you can use wii.hacks.guide as a reference)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wit.wiimm.de/&quot;&gt;Wiimms ISO Tools (WIT)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://repology.org/project/wit/versions&quot;&gt;WIT packaging on Repology&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wii.hacks.guide/&quot;&gt;wii.hacks.guide&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since I&amp;#39;m running Alpine, I made a Debian 13 distrobox, because I&amp;#39;m lazy.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Making an ISO&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;If your ISO is in parts, you can just follow wii.hacks.guide:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wii.hacks.guide/backups#joining-part-files-from-a-wii-disc-on-a-fat32-device&quot;&gt;Jointing PART files in wii.hacks.guide&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Alternatively, run the following command, with &amp;quot;&amp;lt;ID&amp;gt;&amp;quot; being replaced with the ID of the game you&amp;#39;re making a backup for:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;cat &amp;lt;ID&amp;gt;.part0.iso &amp;lt;ID&amp;gt;.part1.iso &amp;gt; &amp;lt;ID&amp;gt;.iso&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Then (optionally) run the following commands to verify the ISO hashes with the dump information in &amp;quot;&amp;lt;ID&amp;gt;-dumpinfo.txt&amp;quot;:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;md5sum &amp;lt;ID&amp;gt;.iso
sha1sum &amp;lt;ID&amp;gt;.iso&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;You can also use a GUI, such as Collision, to verify the hashes:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/GeopJr/Collision/&quot;&gt;Collision&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Making a WBFS file from an ISO&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Make sure WIT is installed, then run the following:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;wit copy --wbfs &amp;lt;ID&amp;gt;.iso &amp;lt;ID&amp;gt;.wbfs&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In most cases, the resulting WBFS file will be suitable for use. If not, you can look at the documentation for help:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wit.wiimm.de/wit/cmd-copy.html&quot;&gt;WIT copy command documentation&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Moving the WBFS file to a hard drive&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Look at the required directory structure, and just copy that:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wii.hacks.guide/wii-loaders#game-folder-structure&quot;&gt;Game Folder Structure&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s about it!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>April 2026 Summary</title>
		<published>2026-04-30T00:00:00+00:00</published>
		<updated>2026-04-30T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-04-30-april-2026-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-04-30-april-2026-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-04-30-april-2026-summary/">
			&lt;h1&gt;April 2026 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2026-04-01-mineclonia-world-tour/index.html&quot;&gt;Mineclonia World Tour&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I mainly contributed to the Open Slopware list. I also created an application to make it easier for me to contribute.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/small-hack/open-slopware&quot;&gt;Open Slopware&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/OpenSlopwareEditor&quot;&gt;Open Slopware Editor&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I rewrote this blog from Zola to my own custom system based on a gemtext-parsing library I wrote myself called geez. I was in a rush the last few days rewriting every post from Markdown into Gemtext, and I unfortunately have to backdate this, but I got it done. There will be a write-up about this later, and there will be more clean-up, polishing, and modifications as time goes on.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s it for now. See you in the next one!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Personal Mineclonia World Tour</title>
		<published>2026-04-01T00:00:00+00:00</published>
		<updated>2026-04-01T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-04-01-mineclonia-world-tour/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-04-01-mineclonia-world-tour/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-04-01-mineclonia-world-tour/">
			&lt;h1&gt;Personal Mineclonia World Tour&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Today is April Cools, where instead of posting cringe &amp;quot;funny&amp;quot; things, you post genuine things that are different then what you typically post. Here, I decided to give a small-ish tour of my personal 1100-day Mineclonia world I&amp;#39;ve been playing on for upwards of a year.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.aprilcools.club/&quot;&gt;April Cools&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/mineclonia/mineclonia&quot;&gt;Mineclonia&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Seed: &amp;quot;18146463847707817635&amp;quot;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: I&amp;#39;m going to do alt-text for images differently in this post. The image will have a very brief description of the image as the alt-text, and then further description/backstory after it. I also do use emoticons (as in, smiley is &amp;quot;:)&amp;quot;).&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: The coordinates (that I took the screenshot at) that I show for one region may not match up with what you would get on the same seed now, as a lot of these areas are from older versions of Mineclonia.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overworld&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Current base&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;1.jpg&quot; alt = &quot;A screenshot of my base. It has a sort of compass-rose design, with a big circle in the center and &amp;quot;leaves&amp;quot; at the ends in each of the cardinal directions.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (-260, -140)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is a fairly recent addition. Some things you might notice:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;I built this in the ocean to avoid having to clear out a large area, to speed up construction.&lt;/li&gt;
				&lt;li&gt;The colour scheme is fairly monochrome (stone bricks as the primary block, with deepslate brick and blackstone brick as accents and glowstone as lighting)&lt;/li&gt;
				&lt;li&gt;Each &amp;quot;leaf&amp;quot; has a letter on top, to get the cardinal directions at a glance. I have not used it :).&lt;/li&gt;
				&lt;li&gt;The north leaf is the nether portal, the east leaf is the furnace array and enchanting setup, the south leaf is assorted doodads (egg farm, composting setup, micro crop-farm, trash), and the west leaf is storage (it has too levels because I need the storage :) ).&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Old base&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;2.jpg&quot; alt = &quot;A screenshot of my old base.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (-140, -90)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have an old base, made primarily out of oak planks with spruce log and dark oak accents. It&amp;#39;s square. I didn&amp;#39;t really use it.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also have two square buildings (stone brick primary, spruce log accents) to one side. One of the buildings is for storage (primary storage when I was using this as my base, now warehouse storage), and the other is for animal farming.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Further away from the &amp;quot;base&amp;quot; is a farming setup, because I get bored, so I just farm and fill chests with things I&amp;#39;ll never use.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This area is primarily now for larger doodads (I have an oozing effect slime killing setup in this area).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;3.jpg&quot; alt = &quot;A screenshot of my farming setup.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (-140, -100)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have an extensive secondary farm setup. It is mostly set-and-forget things.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In order is:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Pumpkin&lt;/li&gt;
				&lt;li&gt;Melon&lt;/li&gt;
				&lt;li&gt;Sugar Cane&lt;/li&gt;
				&lt;li&gt;Bamboo&lt;/li&gt;
				&lt;li&gt;Cocoa Beans&lt;/li&gt;
				&lt;li&gt;An empty plot (it was going to be for kelp; I may get around to it at some point)&lt;/li&gt;
				&lt;li&gt;Sweet Berries&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;4.jpg&quot; alt = &quot;A screenshot of my tree farming setup&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (-80, -310)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Finally, I have a tree growing setup. This area was originally a mountain, but through immense boredom, I tore it all down. I mainly use this for when I need emeralds for beacons and trading.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Flat area&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;5.jpg&quot; alt = &quot;A screenshot of a flat area. There are patches of crimson nylium and warped nylium in the area.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (250, -320)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Another product of immense boredom. I leveled a 70x70 hilly area to y=4. It&amp;#39;s supposed to be for large farms, but I haven&amp;#39;t thought of anything to put here.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;6.jpg&quot; alt = &quot;A screenshot of a skeleton spawner setup.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (230, -320)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There is a skeleton spawner incredibly close-by to the flat area, so I made it an experience farm, and it is now the primary reason I come here. I also have setups for furnaces because I get too many bows.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Villages&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;11.jpg&quot; alt = &quot;A screenshot of my primary village.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (380, 1100)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is the village that I primarily trade with. I have a ton of librarians. I have a Mending librarian, and an Unbreaking librarian, along with librarians for other enchantments I wanted spur-of-the-moment.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;10.jpg&quot; alt = &quot;A screenshot of my &amp;quot;fallback village&amp;quot;.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (630, 780)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also have a second &amp;quot;fallback village&amp;quot; that I use for raids. It was originally a lot more woody, but I deforested a lot to make incoming raids easier to see.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;End&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;12.jpg&quot; alt = &quot;A screenshot of the &amp;quot;wither arena&amp;quot; area. It is heavily destroyed.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (1060, -110)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I haven&amp;#39;t really set up a lot of things in the end, but I do have a somewhat remote area that I kill withers at. I&amp;#39;ve done a lot of withers, and it shows. The area is quite destroyed, to the point that I&amp;#39;ve filled more than three double-chests with end stone broken during wither fights.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Nether&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;7.jpg&quot; alt = &quot;A screenshot of the nether main portal area.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (-20, 20)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;On to the nether, I have a main portal area. It&amp;#39;s fairly small, but it differentiates it enough from my assorted other portals. It has nether brick for the primary, and red nether brick for the accent, with glowstone for lighting and red glass for some of the floor to show some of the lava.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;8.jpg&quot; alt = &quot;A screenshot of an area that used to be a nether fortress but is a lot more level now.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (-30, -300)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have put a lot of effort into the nether fortress that I first found. It is unfortunately in a crimson forest, so I have to deal with hoglins, but I have spent a lot of time on this, and it works incredibly well.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;9.jpg&quot; alt = &quot;A screenshot of the nether fortress, showing a work-in-progress second layer.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coordinates: (0, -250)&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have also recently started a second layer. I am about two-thirds of the way there.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Conclusion&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Hope you enjoyed this tangent into something that isn&amp;#39;t being poisoned by tech grifters, and I&amp;#39;ll see you in the-&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/luanti-org/luanti/commit/62896756eb0a4ee21932e0421c00d810aa08f875&quot;&gt;https://github.com/luanti-org/luanti/commit/62896756eb0a4ee21932e0421c00d810aa08f875&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Co-authored-by: Claude...&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: That commit is only fairly recent. To my knowledge, Luanti 5.15.1 does not have slop (and will most likely be the last version to not have slop). I condemn the other Luanti maintainers from accepting this, and wish them a swift banishment to hell (which means something because I&amp;#39;m an atheist). EDIT: The slop goes deeper, and they don&amp;#39;t seem like they want to ban it.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/small-hack/open-slopware#game-engines&quot;&gt;Open Slopware list; section &amp;quot;Game Engines&amp;quot;&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>March 2026 Summary</title>
		<published>2026-03-31T00:00:00+00:00</published>
		<updated>2026-03-31T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-03-31-march-2026-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-03-31-march-2026-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-03-31-march-2026-summary/">
			&lt;h1&gt;March 2026 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;2026-03-28-punch-me-llms.md&quot;&gt;Punch me if I use LLMs&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I got angry and made Slop Finder. It checks Git repositories for &amp;quot;contributions&amp;quot; made by LLMs. Currently it only supports GitHub via the API, but if I get angry enough, I&amp;#39;ll add local checking.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/SlopFinder&quot;&gt;Slop Finder&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The tech industry is burning me out. I&amp;#39;ll talk about it more in a future blog post.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m going to try sticking to a schedule for a while, mainly because I actually want to succeed in 100 Days to Offload.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;See you in the next one!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Punch me if I use LLMs</title>
		<published>2026-03-28T00:00:00+00:00</published>
		<updated>2026-03-28T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-03-28-punch-me-llms/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-03-28-punch-me-llms/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-03-28-punch-me-llms/">
			&lt;h1&gt;Punch me if I use LLMs&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;The great thing about this douchebag deadman switch is that I will never dare trigger it. — Randal Munroe, 2012, which I am invoking now.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In the vein of xkcd 1057, &amp;quot;Klout&amp;quot;, I&amp;#39;d like to propose the following.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;If someday, in the future, we meet in person, and if I have interacted with an LLM in any way except either on accident or to opt out between when I write this post and when we meet, I&amp;#39;d like you to punch me in the face without warning.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is not a joke. I am dead serious. Ignore anything I say retracting this. Thank you.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For further clarification, I have ethics in place (unlike seemingly 99% of the people in the tech industry), but it remains tempting to throw it all away and take the easy path. Among all the myriad reasons I should avoid LLMs like the plague, I&amp;#39;ll add this now, as further deterrence.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://xkcd.com/1057/&quot;&gt;xkcd 1057, &amp;quot;Klout&amp;quot;&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>February 2026 Summary</title>
		<published>2026-02-28T00:00:00+00:00</published>
		<updated>2026-02-28T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-02-28-february-2026-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-02-28-february-2026-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-02-28-february-2026-summary/">
			&lt;h1&gt;February 2026 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;None :(&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve mainly been working on Random Color (now Prismatic) and Stacker. Random Color/Prismatic has gained more features, and Stacker i now using MPFR, among other things.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Prismatic&quot;&gt;Random Color/Prismatic&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Stacker&quot;&gt;Stacker&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m doing fine. Still chugging along.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I want to write here but I have a sort of writers block. I&amp;#39;m not sure what I should write. I&amp;#39;ll try coming up with a few things.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s it. See you next time!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>January 2026 Summary</title>
		<published>2026-01-31T00:00:00+00:00</published>
		<updated>2026-01-31T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-01-31-january-2026-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-01-31-january-2026-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-01-31-january-2026-summary/">
			&lt;h1&gt;January 2026 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2026-01-01-happy-inexorable-passage-of-time-day/index.html&quot;&gt;Happy inexorable-passage-of-time-by-an-arbitrarily-defined-unit day!&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2026-01-07-collections-week-1-summary/index.html&quot;&gt;Collections Week 1 Summary&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2026-01-14-collections-week-2-summary/index.html&quot;&gt;Collections Week 2 Summary&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2026-01-28-collections-week-3-4-summary/index.html&quot;&gt;Collections Week 3/4 Summary&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have published two (real) programs this month:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Collections (&amp;quot;Organize your collections&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/ProjectAthena/WebviewWrapper&quot;&gt;Webview Wrapper (&amp;quot;Show a web page as an installed application&amp;quot;).&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Note that the last one is under a new organisation, &amp;quot;Project Athena&amp;quot;. I will make a formal announcement of this when ready.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Everything&amp;#39;s good. I&amp;#39;ve kind of settled into a better state.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I should probably post more. I&amp;#39;ll try to think of stuff, but that&amp;#39;s hard.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s it. See you next time!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Collections Week 3/4 Summary</title>
		<published>2026-01-28T00:00:00+00:00</published>
		<updated>2026-01-28T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-01-28-collections-week-3-4-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-01-28-collections-week-3-4-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-01-28-collections-week-3-4-summary/">
			&lt;h1&gt;Collections Week 3/4 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Collections is a collection application for the GNOME desktop. The source code is on Codeberg, as always:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I ended up getting sidetracked and did other stuff, so I didn&amp;#39;t work on Collections as much as I wanted to. This is why I&amp;#39;ve bundled it into two weeks.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overviews&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 19&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I decided to ask for help with the custom list views, and managed to implement those.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 20&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I pinged Sophie, the maintainer of the app.drey namespace, about the app.drey.Collections request that I filed at the start of the year, and got that approved, so I changed the app ID.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://drey.app&quot;&gt;app.drey&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 27&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Coming back to the app, I worked on the onboarding dialog. It is basically a copy of the &amp;quot;add collection&amp;quot; dialog, but with the app icon above it.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 28&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made the onboarding dialog save an initial file.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Goals for next week&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I still want to make it usable, but I might not be fully focused on Collections. I&amp;#39;ll try to aim for making it functional within the next two weeks.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The source code is on Codeberg if you want to go check it out:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Collections Week 2 Summary</title>
		<published>2026-01-14T00:00:00+00:00</published>
		<updated>2026-01-14T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-01-14-collections-week-2-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-01-14-collections-week-2-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-01-14-collections-week-2-summary/">
			&lt;h1&gt;Collections Week 2 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m developing a collection application, under the highly creative name of &amp;quot;Collections&amp;quot;. The source code is on Codeberg, as always:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is a recap of the past week of Collections development.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overviews&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 8&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I tried working on the grid view, as described in last week&amp;#39;s summary. However, it was quite difficult, so I put it off and did something else instead.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;@/blog/2026_01_07-collections_week_1_summary.md#day-7&quot;&gt;Last week&amp;#39;s summary&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 9&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In lieu of getting the list stuff from data fully working, I instead added a list view and made the view switcher switch between the grid and list views.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 10&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I created an issue for working on the GNOME Circle criteria, and improved metainfo.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 11&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I worked on the dialog for adding a collection. The dialog let you choose a name and the default template when creating items.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 12&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added the ability to choose colours and icons for the collection.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 13&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made an app icon. It looks nice.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;collections-icon.png&quot; alt = &quot;The app icon I made for Collections. It is a glass cabinet in the GNOME style. There is a shelf in the middle. The cabinet stores four items, all related to things people collect. In the top-left there is a blue car. In the top-right there is a vinyl-looking brown square with a yellow music note on the cover. In the bottom-left there is a red book. In the bottom-right there is a green video game console and a controller.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;collections-icon-aip.png&quot; alt = &quot;The same icon, but shown in the application &amp;quot;App Icon Preview&amp;quot;.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 14&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I didn&amp;#39;t do anything with Collections, as I was focused on something else.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Goals for next week&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I want to actually get around to getting it into a somewhat usable state next week. I might not prioritise it that much, though.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The source code is on Codeberg if you want to go check it out:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Collections Week 1 Summary</title>
		<published>2026-01-07T00:00:00+00:00</published>
		<updated>2026-01-07T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-01-07-collections-week-1-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-01-07-collections-week-1-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-01-07-collections-week-1-summary/">
			&lt;h1&gt;Collections Week 1 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m developing a collection application, under the highly creative name of &amp;quot;Collections&amp;quot;. The source code is on Codeberg, as always:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;https://codeberg.org/Pixelo789/Collections/media/branch/main/data/screenshots/devel-ui-dark.png&quot; alt = &quot;A screenshot of an application I&amp;#39;ve developed, called &amp;quot;Collections&amp;quot;. The UI has three panels. The left panel has a header bar with a menu button, and one button called &amp;quot;Empty Panel&amp;quot; in the middle (this is where the list of collections would go). The middle has a header bar at the top and a grid view at the bottom. Its header bar contains a button to toggle the left panel, a view switcher, a label that would describe the title of the collection, a button to add an item, and a search button. The middle grid view has many elements; each has a grey box with a label in the form &amp;quot;String NUMBER&amp;quot; under it. The right panel has a header bar with a label (the name of the item), a favourite button, an edit button, and the window controls at the top, and a text view describing the selected item in the middle. It is currently showing an example; most of the text is lorem-ipsum style.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is a recap of the past week of development.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This week, I focused on UI, getting a little more than enough done to show off UI.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overviews&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 1&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I created the repository and started working on the UI. I previously had done the work to get Blueprint working in Lua, so starting the repo was as simple as a copy-paste. I also went ahead and made a request to get the &amp;quot;app.drey.Collections&amp;quot; app ID. Currently, it hasn&amp;#39;t gone through; hopefully, it will go through soon.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gnome.pages.gitlab.gnome.org/blueprint-compiler/&quot;&gt;Blueprint&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gitlab.gnome.org/sophie-h/app.drey/-/merge_requests/18&quot;&gt;App ID request&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 2&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I committed an initial UI for the app. Other than that, it was polish and adding some shortcuts.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 3&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added a dialog for adding and editing items. I messed with/iterated on the dialog for that day.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 4&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I did more work on the add/edit dialog. I also did some work on the favourites button and info panel, making it be created from a Lua table instead of being hard-coded. I finally added lua-cjson as a dependency, as I decided to use JSON to store data.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 5&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Along with some cleanup and minor improvements to the add/edit dialog and the info panel, I documented how the collections JSON file will be organised. I&amp;#39;m waiting until week 2 to fully implement it, but I wanted it documented to make it easier and get it out of my head.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 6&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I worked on the main view. It is currently only a grid, with toggling between list and grid being for week 2, but it&amp;#39;s still progress.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Day 7&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I changed the app ID because the app.drey request was taking too long. I also worked on researching how to implement the grid view.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I started with trying to find an application that would require a remotely complicated data system for its view, and decided on Dosage. Enough digging led me to how it creates a class for its list, and that led me to the GJS function &amp;quot;GObject.ParamSpec.jsobject&amp;quot;. It is, in principle, what I want, and it thankfully is a (seemingly) trivial call to the function &amp;quot;GObject.param_spec_boxed&amp;quot;, so it should (hopefully) be fairly simple to replicate in Lua.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://flathub.org/en/apps/io.github.diegopvlk.Dosage&quot;&gt;Dosage&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/diegopvlk/Dosage/blob/main/src/medication.js&quot;&gt;How Dosage creates classes for its list&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gitlab.gnome.org/GNOME/gjs/-/blob/f9f66f55dfb069cc0f10b2c89fa49b4a56b4bec9/modules/core/overrides/GObject.js#L495&quot;&gt;&amp;quot;GObject.ParamSpec.jsobject&amp;quot; in GJS&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://docs.gtk.org/gobject/func.param_spec_boxed.html&quot;&gt;&amp;quot;GObject.param_spec_boxed&amp;quot; C function documentation&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Goals for next week&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I want to get it into a somewhat usable state next week. This means parsing and saving a &amp;quot;collections.json&amp;quot; file and loading and displaying it properly.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The source code is on Codeberg if you want to go check it out:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Collections&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Happy inexorable-passage-of-time-by-an-arbitrarily-defined-unit day!</title>
		<published>2026-01-01T00:00:00+00:00</published>
		<updated>2026-01-01T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2026-01-01-happy-inexorable-passage-of-time-day/"/>
		<id>https://pixelo789.codeberg.page/blog/2026-01-01-happy-inexorable-passage-of-time-day/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2026-01-01-happy-inexorable-passage-of-time-day/">
			&lt;h1&gt;Happy inexorable-passage-of-time-by-an-arbitrarily-defined-unit day!&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It&amp;#39;s so weird that we celebrate the passage of an ultimately arbitrarily defined unit of time every single time it passes. We&amp;#39;re constantly surprised by it despite it being the most predictable thing in the universe. &amp;quot;Yay! We&amp;#39;re all older now and all closer to our ultimate fate: death!&amp;quot;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://xkcd.com/1477&quot;&gt;xkcd 1477 is pertinent here&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;If that&amp;#39;s not weird enough, we also celebrate it by exploding a bunch of loud, bright, obnoxious things in the sky, disrupting everyone&amp;#39;s sleep schedule. And all for some okay-looking light displays.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Last night, someone fairly close to my house set off fireworks at night while I was trying to sleep. The noise was disruptive and the light bled through the curtain in my otherwise dark-enough room. I just want to sleep, thank you very much.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In a slightly more serious note, let&amp;#39;s hope 2026 is better than 2025, for society at large.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Happy inexorable-passage-of-time-by-an-arbitrarily-defined-unit day, I guess!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>December 2025 Summary</title>
		<published>2025-12-31T00:00:00+00:00</published>
		<updated>2025-12-31T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-12-31-december-2025-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-12-31-december-2025-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-12-31-december-2025-summary/">
			&lt;h1&gt;December 2025 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-12-21-running-boinc-on-an-old-phone/index.html&quot;&gt;Running BOINC on an old phone&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve published the source code to three programs I&amp;#39;m working on:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/xkcdClient)&quot;&gt;xkcd Client (&amp;quot;Read xkcd comics&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Piccolo&quot;&gt;Piccolo (&amp;quot;A lightweight music player&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Stacker&quot;&gt;Stacker (&amp;quot;A stack-based calculator&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;None of them are at a &amp;quot;fully usable&amp;quot; state, but the current version of xkcd Client is close; however, it&amp;#39;s currently undergoing a rewrite from Python to Lua, which is not complete. Please wait until that is complete before using xkcd Client.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The start of this month was the review period for Luanti Game Jam 2025. To be on the safe side, I decided to not work on my entry, Thinking With Arrows, until the review period was over.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Thinking With Arrows&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Playing through all of the entries was fun, and it was a nice break from the chaos of development.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Once the rating period was over, I started fixing a lot of the bugs that were discovered during rating, while also waiting for the results. I wasn&amp;#39;t expecting much, but playing all the other entries, I thought I could have a decent shot at top three.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Imagine by surprise when I check the results and see this:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;luanti-game-jam-2025-results.png&quot; alt = &quot;A screenshot of the below forum post, showing the results of the Luanti Game Jam 2025.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://forum.luanti.org/viewtopic.php?p=448097#p448097&quot;&gt;Results post&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I somehow got third.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Getting third was incredibly validating for me. Despite everything, I still managed to make something myself that got a podium position in a competition.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I continued working on the game, but ultimately paused to work on other things. I still want to work on it, I just want to work on other things too.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Among slightly less triumphant news, I updated my Alpine configuration. I&amp;#39;m using Waybar now because Yambar is depreciated. Waybar is incredibly bloated, but it&amp;#39;s not old, so there&amp;#39;s that. This configuration is centred around the &amp;quot;Turquoise&amp;quot; wallpaper from dikasp. The nice part is I have the Niri focus ring as a gradient that matches the wallpaper, so where the wallpaper is one colour, the focus ring is too.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/config&quot;&gt;Config&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;https://gitlab.postmarketos.org/postmarketOS/artwork/-/blob/master/wallpapers/2024/turqoise/contents/images_dark/2277x2277.png&quot; alt = &quot;Wallpaper&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gitlab.postmarketos.org/dikasetyaprayogi&quot;&gt;https://gitlab.postmarketos.org/dikasetyaprayogi&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I finally upgraded my laptop to Fedora 43 using the DNF System Upgrade Plugin. It went great; I&amp;#39;m typing out this summary on that laptop.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I ended up getting a bit burned out with Advent of Code, and stopped on day 5. For some reason, it just stopped being fun. Maybe it&amp;#39;s because me doing Advent of Code isn&amp;#39;t helping anyone out. Before, I was using it to improve my Python skills, but not that I am quite experienced with both Python and Lua, it feels a bit pointless.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Lastly, I&amp;#39;m going to start another project. It&amp;#39;s my most ambitious one yet. It will be a collection manager application. I&amp;#39;ve been doing some starting research, but I will truly start next year (i.e. tomorrow). Let&amp;#39;s hope it goes well.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;See you next time!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Running BOINC on an old phone</title>
		<published>2025-12-21T00:00:00+00:00</published>
		<updated>2025-12-21T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-12-21-running-boinc-on-an-old-phone/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-12-21-running-boinc-on-an-old-phone/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-12-21-running-boinc-on-an-old-phone/">
			&lt;h1&gt;Running BOINC on an old phone&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have this fairly old phone: a Samsung Galaxy Note 9 in &amp;quot;Lavender Purple&amp;quot;. I got it at a thrift store for $20 untested, and it ended up working fairly well for my needs (communicate with people when needed).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://en.wikipedia.org/wiki/Note_9&quot;&gt;Samsung Galaxy Note 9 on Wikipedia&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;phone-back.jpg&quot; alt = &quot;The back of my Samsung Galaxy Note 9, in Lavender Purple. The top-left corner of the back glass is cracked. There is a replacement S-Pen sticking out from the bottom-left of the phone.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;While the Note 9 was a great device, I ultimately left it when the screen started acting up. When I got it, the screen had a fairly small dead pixel blob on the side, and touch was a bit finicky, but acceptable, and the parts of the screen that didn&amp;#39;t accept touch I could interact with using a fairly cheap replacement S-Pen I had gotten previously. However, over time, the dead pixel blob grew (mostly from me messing with it :) ) and the lack of touch got to an unacceptable point, so I had to ditch it for something else.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;phone-settings.jpg&quot; alt = &quot;The Samsung Galaxy Note 9 showing the Settings app. There is a fairly large (about 5% of the screen) dead pixel blob on the right side of the screen, about two-thirds of the way down.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For the most part, it&amp;#39;s been sitting there unused, since it&amp;#39;s carrier-locked and therefore bootloader-locked. That&amp;#39;s when I thought of using it for BOINC, a project that lets you donate unused computing resources to scientific projects.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://boinc.berkeley.edu&quot;&gt;BOINC&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I started with wiping the device from what I had before and setting it up from scratch. After going through the fairly tedious factory reset process, I was dropped into the default home screen.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Of course, being a free software activist, I immediately copied some APKs and installed them (not necessarily in this order):&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Material Files (so I can install apps through there instead of the crappy, proprietary official file manager),&lt;/li&gt;
				&lt;li&gt;F-Droid (of course),&lt;/li&gt;
				&lt;li&gt;Batch Uninstaller (just in case I would be allowed to uninstall any apps; I couldn&amp;#39;t :( ),&lt;/li&gt;
				&lt;li&gt;KISS Launcher (to replace the crappy, proprietary official launcher),&lt;/li&gt;
				&lt;li&gt;Unexpected Keyboard[1] (to replace the crappy, proprietary official keyboard),&lt;/li&gt;
				&lt;li&gt;Karma Firewall (my typical firewall app, because there&amp;#39;s no way I&amp;#39;m letting all the preinstalled crapware phone home), and&lt;/li&gt;
				&lt;li&gt;Athena Firewall (I wanted to try it out after hearing about it on a This Week in F-Droid).&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/me.zhanghai.android.files&quot;&gt;Material Files&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org&quot;&gt;F-Droid&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/com.saha.batchuninstaller&quot;&gt;Batch Uninstaller&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/fr.neamar.kiss&quot;&gt;KISS Launcher&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/juloo.keyboard2&quot;&gt;Unexpected Keyboard&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/net.stargw.fok&quot;&gt;Karma Firewall&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/com.kin.athena&quot;&gt;Athena Firewall&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/2025/11/20/twif.html&quot;&gt;This Week in F-Droid page mentioning Athena Firewall&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;phone-launcher.jpg&quot; alt = &quot;The Samsung Galaxy Note 9 showing the KISS launcher. F-Droid, Athena Firewall, Material Files, and BOINC are shown at the bottom as favourites, in that order.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I normally use Karma (and before that, Rethink) as a firewall. I just wanted Athena to try it out. However, I ended up using it here because Karma was inconsistent (not working on boot, sometimes not blocking apps, etc.).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/com.celzero.bravedns&quot;&gt;Rethink&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Setting up BOINC was pretty simple:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Install the BOINC app (available on F-Droid)&lt;/li&gt;
				&lt;li&gt;Sign up with whatever project you want (as a free software activist, I went with Einstein@Home, as that was the only one I could find whose application was free software).&lt;/li&gt;
				&lt;li&gt;Log in to the project in the app, then you should be good to go!&lt;/li&gt;
				&lt;li&gt;(Optional) Configure settings. Since this device will be used purely for BOINC, I allowed it when the screen is on/when on battery, I set the minimum battery percentage to 40%, and the maximum battery temperature to 55°C. I also turned off &amp;quot;Transfer tasks on WiFi only&amp;quot;, as otherwise it wouldn&amp;#39;t download the tasks through the firewall, despite being on Wi-Fi.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/edu.berkeley.boinc/&quot;&gt;BOINC on F-Droid&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://einsteinathome.org&quot;&gt;Einstein@Home&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;phone-boinc.jpg&quot; alt = &quot;The Samsung Galaxy Note 9 running BOINC, showing running tasks, all for the Einsten@Home project.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Ideally, I would like some sort of cooling setup so the phone isn&amp;#39;t so hot (I got a notification from the phone&amp;#39;s stupid &amp;quot;Device Care&amp;quot; app that said BOINC was using too much CPU), but it&amp;#39;s fine for now. I would also like it running 24/7, but that&amp;#39;ll take a bit more work.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m pixelo789 on Einstein@Home if anyone&amp;#39;s interested:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://einsteinathome.org/content/pixelo789&quot;&gt;https://einsteinathome.org/content/pixelo789&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[1]: My normal keyboard when I have to use Android is FlorisBoard, but I wanted something smaller and lighter.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/packages/dev.patrickgold.florisboard&quot;&gt;FlorisBoard&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>November 2025 Summary</title>
		<published>2025-11-30T00:00:00+00:00</published>
		<updated>2025-11-30T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-30-november-2025-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-30-november-2025-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-30-november-2025-summary/">
			&lt;h1&gt;November 2025 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-02-rust/index.html&quot;&gt;I don&amp;#39;t like Rust&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-03-web-sharing/index.html&quot;&gt;Web Sharing&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-04-random-color/index.html&quot;&gt;Random Color&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-05-looking-at-gemini/index.html&quot;&gt;Looking at Gemini (the protocol)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-06-i-like-cds/index.html&quot;&gt;I like CDs, but I never use them&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-07-luanti-game-jam-2025/index.html&quot;&gt;I&amp;#39;m participating in Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-08-luanti-game-jam-2025-day-1/index.html&quot;&gt;Luanti Game Jam: Day 1&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-09-luanti-game-jam-2025-day-2/index.html&quot;&gt;Luanti Game Jam: Day 2&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-10-luanti-game-jam-2025-day-3/index.html&quot;&gt;Luanti Game Jam: Day 3&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-11-luanti-game-jam-2025-day-4/index.html&quot;&gt;Luanti Game Jam: Day 4&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-12-luanti-game-jam-2025-day-5/index.html&quot;&gt;Luanti Game Jam: Day 5&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-13-luanti-game-jam-2025-day-6/index.html&quot;&gt;Luanti Game Jam: Day 6&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-14-luanti-game-jam-2025-day-7/index.html&quot;&gt;Luanti Game Jam: Day 7&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-15-luanti-game-jam-2025-day-8/index.html&quot;&gt;Luanti Game Jam: Day 8&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-16-luanti-game-jam-2025-day-9/index.html&quot;&gt;Luanti Game Jam: Day 9&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-17-luanti-game-jam-2025-day-10/index.html&quot;&gt;Luanti Game Jam: Day 10&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-18-luanti-game-jam-2025-day-11/index.html&quot;&gt;Luanti Game Jam: Day 11&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-19-luanti-game-jam-2025-day-12/index.html&quot;&gt;Luanti Game Jam: Day 12&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-20-luanti-game-jam-2025-day-13/index.html&quot;&gt;Luanti Game Jam: Day 13&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-21-luanti-game-jam-2025-day-14/index.html&quot;&gt;Luanti Game Jam: Day 14&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-22-luanti-game-jam-2025-day-15/index.html&quot;&gt;Luanti Game Jam: Day 15&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-23-luanti-game-jam-2025-day-16/index.html&quot;&gt;Luanti Game Jam: Day 16&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-24-luanti-game-jam-2025-day-17/index.html&quot;&gt;Luanti Game Jam: Day 17&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-25-luanti-game-jam-2025-day-18/index.html&quot;&gt;Luanti Game Jam: Day 18&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-26-luanti-game-jam-2025-day-19/index.html&quot;&gt;Luanti Game Jam: Day 19&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-27-luanti-game-jam-2025-day-20/index.html&quot;&gt;Luanti Game Jam: Day 20&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-28-luanti-game-jam-2025-day-21/index.html&quot;&gt;Luanti Game Jam: Day 21&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-29-luanti-game-jam-2025-reflection/index.html&quot;&gt;Luanti Game Jam: Reflection&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have published three programs this month:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/WebSharing&quot;&gt;Web Sharing (&amp;quot;Share a folder to the web&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/RandomColor&quot;&gt;Random Color (&amp;quot;Get a random color&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Thinking With Arrows (&amp;quot;A puzzle game with a bow and arrow&amp;quot;)&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The first two apps are Gtk/Adwaita apps, and the last is a game for Luanti.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have also finally rewritten Score Keeper (&amp;quot;A score tracking application&amp;quot;) in Lua.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/score-keeper&quot;&gt;Score Keeper&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;November was quite a lot better for me. I&amp;#39;m happier now, and I&amp;#39;m programming more/better.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I still haven&amp;#39;t upgraded my laptop to Fedora 43, but I&amp;#39;ve updated my desktop, primary because Niri v25.11 came out and somehow hit Alpine Edge very quickly (compared to other releases).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m doing Advent of Code this year. I did it last year too. I might publish my solutions (they&amp;#39;re in Lua, of course), but I&amp;#39;m not sure. The fact that it&amp;#39;s only 12 days instead of 25 is disappointing, but at least the removal of the global leaderboard now makes it much easier for me to focus on writing good, clean code instead of rushing to finish.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://adventofcode.com&quot;&gt;Advent of Code&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since the Luanti Game Jam is finished, I&amp;#39;ll probably end up working on my other programs during December. I&amp;#39;ve already played through and gave mostly final ratings for all the entries, so at this point I&amp;#39;m waiting until the rating period is over before updating the game.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m not sure if I want to continue posting daily. I&amp;#39;ll still try to post at least a few times, though.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s about it; see you next time!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Reflection</title>
		<published>2025-11-29T00:00:00+00:00</published>
		<updated>2025-11-29T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-29-luanti-game-jam-2025-reflection/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-29-luanti-game-jam-2025-reflection/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-29-luanti-game-jam-2025-reflection/">
			&lt;h1&gt;Luanti Game Jam: Reflection&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;These last three weeks have been a great experience for me. Among other things, I also tried multiple new things during this:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;This is my first big game, my first published game, and my first real Luanti game. I had previously made some mods, but nothing on this scale.&lt;/li&gt;
				&lt;li&gt;This is my first project fully made with an editor in proportional type (my experience with that will come later).&lt;/li&gt;
				&lt;li&gt;This is one of my first Lua projects. I have made other projects in Lua, but they were all smaller utility projects for the GNOME desktop (Gtk/Adwaita). This is my first game written in Lua.&lt;/li&gt;
				&lt;li&gt;This is my first time using Libresprite.&lt;/li&gt;
				&lt;li&gt;This is my first game jam. In a more general sense, it is also the first time I&amp;#39;ve done a project from start-to-finish in a set time period in a competition setting.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This was a great time for me to improve my Lua. I think my Lua improved during this jam.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Overall, the experience was quite enjoyable. If I can make the time for it, I&amp;#39;ll probably do it next year.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 21</title>
		<published>2025-11-28T00:00:00+00:00</published>
		<updated>2025-11-28T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-28-luanti-game-jam-2025-day-21/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-28-luanti-game-jam-2025-day-21/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-28-luanti-game-jam-2025-day-21/">
			&lt;h1&gt;Luanti Game Jam: Day 21&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 21&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Finally. It&amp;#39;s over.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I did some dialogue changes, moved the hand registering out of &amp;quot;void_hand&amp;quot; and into my init module, and some other cleanup.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Then, with an hour left, I decided &amp;quot;screw it; I&amp;#39;m adding achievements&amp;quot;. I managed to add the awards mod in and add a few achievements right as the time ended. I unfortunately wasn&amp;#39;t able to add a &amp;quot;win&amp;quot; achievement in time, and one of the achievement progressions is slightly messed up, but they&amp;#39;re in there.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gitlab.com/rubenwardy/awards&quot;&gt;Awards mod&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since I&amp;#39;m not sure what the policy is for the Game Jam, I&amp;#39;ve decided to only modify what I need to modify in order to get the game submitted to ContentDB[1].&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Time to review other people&amp;#39;s games! I have downloaded and played through the few games that are currently available and they&amp;#39;re all interesting. Let&amp;#39;s see what happens.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I think I&amp;#39;ll post a reflection tomorrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;EDIT: It&amp;#39;s been approved!&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://content.luanti.org/packages/Pixelo789/thinkingwitharrows&quot;&gt;ContentDB page&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] (infeasible; when I tried it, the field kept resetting, and the command works fine) Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[x] Code cleanup&lt;/li&gt;
				&lt;li&gt;[x] Add a new player/hand texture&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do in the future&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Combine the buttons into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[x] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
				&lt;li&gt;[ ] Combine levels 11 and 12&lt;/li&gt;
				&lt;li&gt;[ ] Minify XBows&lt;/li&gt;
				&lt;li&gt;[x] Potentially one or two more screenshots (I did some screenshot work)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[1]: During that process, I made three releases: a 0.2 with my final code changes, a 0.2.1 to rename the license file, and a 0.2.2 to move the license information from the README to the license file. The releases are just to be safe.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 20</title>
		<published>2025-11-27T00:00:00+00:00</published>
		<updated>2025-11-27T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-27-luanti-game-jam-2025-day-20/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-27-luanti-game-jam-2025-day-20/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-27-luanti-game-jam-2025-day-20/">
			&lt;h1&gt;Luanti Game Jam: Day 20&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 20&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This was a big day. To be fair, Day 19 was also a big day, but today was big in a different way.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-26-luanti-game-jam-2025-day-19/index.html&quot;&gt;Day 19&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have finalised enough of the game that I&amp;#39;ve decided to tag an initial release:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows/releases/tag/0.1&quot;&gt;Release 0.1&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;With it, the big changes are:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Optional callbacks for when the target is activated, dialogue ends, etc.,&lt;/li&gt;
				&lt;li&gt;Coloured dialogue, and&lt;/li&gt;
				&lt;li&gt;A timed &amp;quot;boss fight&amp;quot;.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This took quite a bit of work, but I got it done in the end.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There is also now main menu backgrounds, a header, and an icon! The backgrounds are just screenshots of levels, the header is just &amp;quot;Thinking With Arrows&amp;quot; in the main font for the game ([Press Start 2P by codeman38](http://zone38.net/font/#pressstart)), and the icon was made by me in Libresprite; you can tell :).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;The arrow HUD is now updated when an arrow block is successfully interacted with.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Level tweaks:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Levels 13 and 14 have more random-looking reflector placements.&lt;/li&gt;
				&lt;li&gt;The target is now more visible from the hallway in level 13.&lt;/li&gt;
				&lt;li&gt;In the final level in the right section of the first floor, the &amp;quot;pipe&amp;quot; is more visible.&lt;/li&gt;
				&lt;li&gt;Assorted dialogue updates (adding game hints, etc.)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[x] Work on endgame (boss fight)&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make the &amp;quot;boss fight&amp;quot; (level 21, section 2) timed&lt;/li&gt;
				&lt;li&gt;[x] Add optional callbacks when the target is clicked and when dialogue ends (for boss fight)&lt;/li&gt;
				&lt;li&gt;[x] Add the option for custom coloured dialogue (for AI[^1] text)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] (CHANGED MY MIND) Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level tweaks:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Have a more &amp;quot;random&amp;quot; initial reflector placement in levels 13 and 14&lt;/li&gt;
				&lt;li&gt;[ ] (CHANGED MY MIND) Extend level 18&lt;/li&gt;
				&lt;li&gt;[ ] (CHANGED MY MIND) Add dialogue to level 8&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Code cleanup&lt;/li&gt;
				&lt;li&gt;[ ] Add a new player/hand texture&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[x] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
				&lt;li&gt;[ ] Add a new player/hand texture&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Combine the buttons into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
				&lt;li&gt;[ ] Combine levels 11 and 12&lt;/li&gt;
				&lt;li&gt;[ ] Minify XBows&lt;/li&gt;
				&lt;li&gt;[ ] Potentially one or two more screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 19</title>
		<published>2025-11-26T00:00:00+00:00</published>
		<updated>2025-11-26T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-26-luanti-game-jam-2025-day-19/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-26-luanti-game-jam-2025-day-19/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-26-luanti-game-jam-2025-day-19/">
			&lt;h1&gt;Luanti Game Jam: Day 19&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 19&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have, for the most part, finalised level 21. This took quite a bit of work, but I&amp;#39;m in the final stretch.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;At this point, it&amp;#39;s just adding a GUI for changing the level, a credits screen, and some target callbacks, and I should be about done.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on endgame (boss fight)&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Boss fight:&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add optional callbacks when the target is clicked and when dialogue ends (for boss fight)&lt;/li&gt;
				&lt;li&gt;[ ] Add the option for custom coloured dialogue (for AI character text)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level tweaks:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Have a more &amp;quot;random&amp;quot; initial reflector placement in levels 13 and 14&lt;/li&gt;
				&lt;li&gt;[ ] Extend level 18&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] Explain some of the decisions I made that may not be obvious at first&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on endgame (boss fight)&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make the &amp;quot;boss fight&amp;quot; (level 21, section 2) timed&lt;/li&gt;
				&lt;li&gt;[ ] Add optional callbacks when the target is clicked and when dialogue ends (for boss fight)&lt;/li&gt;
				&lt;li&gt;[ ] Add the option for custom coloured dialogue (for AI character text)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level tweaks:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Have a more &amp;quot;random&amp;quot; initial reflector placement in levels 13 and 14&lt;/li&gt;
				&lt;li&gt;[ ] Extend level 18&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue to level 8&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
				&lt;li&gt;[ ] Add a new player/hand texture&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Combine the buttons into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
				&lt;li&gt;[ ] Combine levels 11 and 12&lt;/li&gt;
				&lt;li&gt;[ ] Minify XBows&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 18</title>
		<published>2025-11-25T00:00:00+00:00</published>
		<updated>2025-11-25T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-25-luanti-game-jam-2025-day-18/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-25-luanti-game-jam-2025-day-18/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-25-luanti-game-jam-2025-day-18/">
			&lt;h1&gt;Luanti Game Jam: Day 18&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 18&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I created Level 20. It&amp;#39;s sort of a gauntlet, so it&amp;#39;s fairly hard. I might tone it down, but likely not.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I (fully) started work on Level 21, the final level, or so-called &amp;quot;boss fight&amp;quot;[1]. I worked on it a bit before, but now I can focus on it for the full time.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I modified the XBows arrow HUD and made it stay permanently on screen once you obtained the bow. Now, the arrow HUD is next to the hotbar.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;I tweaked levels 5, 8, and 13. The tweaks are listed below in the &amp;quot;Checklist from yesterday&amp;quot;.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m starting to feel a little fatigue from all this Luanti game development. I&amp;#39;m pretty glad this is ending in about three days.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make one or two more levels&lt;/li&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[x] Level tweaks:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Move the arrow block one block higher in level 5&lt;/li&gt;
				&lt;li&gt;[x] Move the button to somewhere less accessible in level 8&lt;/li&gt;
				&lt;li&gt;[x] Start with orange showing and improve button placement in level 13&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Always show how many arrows are left&lt;/li&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on endgame (boss fight)&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Boss fight:&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add optional callbacks when the target is clicked and when dialogue ends (for boss fight)&lt;/li&gt;
				&lt;li&gt;[ ] Add the option for custom coloured dialogue (for AI character text)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level tweaks:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Have a more &amp;quot;random&amp;quot; initial reflector placement in levels 13 and 14&lt;/li&gt;
				&lt;li&gt;[ ] Extend level 18&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Combine the buttons into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
				&lt;li&gt;[ ] Combine levels 11 and 12&lt;/li&gt;
				&lt;li&gt;[ ] Minify XBows&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[1]: It&amp;#39;s not really a boss fight, but I&amp;#39;ll continue calling it a &amp;quot;boss fight&amp;quot;.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 17</title>
		<published>2025-11-24T00:00:00+00:00</published>
		<updated>2025-11-24T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-24-luanti-game-jam-2025-day-17/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-24-luanti-game-jam-2025-day-17/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-24-luanti-game-jam-2025-day-17/">
			&lt;h1&gt;Luanti Game Jam: Day 17&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 17&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;3 new levels this time:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Level 17 is a button level. In the first section (the ascent), you have to jump, shoot a button to alternate the platforms, and then land on the next platform. In the second section (the descent), you just fall while pressing buttons to remove the floor from under you. This might seem trivial, but it&amp;#39;s interesting from a speedrunning perspective.&lt;/li&gt;
				&lt;li&gt;Level 18 is an ascent with two mineable blocks, followed by a small alternating button sequence. I might tweak it a bit later.&lt;/li&gt;
				&lt;li&gt;Level 19 is an alternating six-block-high jump ascent, followed by something similar to a &amp;quot;neo&amp;quot; (a parkour move where you jump around a wall, landing on the same &amp;quot;line&amp;quot; that you started; see the intro of level 11 for an example). The last part is a weird block section (just play it and you&amp;#39;ll understand) with a hidden button that you have to activate to reach the target.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;I renamed the texture for the &amp;quot;black box&amp;quot; node (the node that the chamber you&amp;#39;re put into during level transitions is made of) from &amp;quot;thinkingwitharrows_nodes_black_box.png&amp;quot; to &amp;quot;thinkingwitharrows_init_black_box.png&amp;quot;, since that texture is used for more than the node.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make more levels (no level ideas right now)!!&lt;/li&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[x] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make one or two more levels&lt;/li&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level tweaks:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Move the arrow block one block higher in level 5&lt;/li&gt;
				&lt;li&gt;[ ] Move the button to somewhere less accessible in level 8&lt;/li&gt;
				&lt;li&gt;[ ] Start with orange showing and improve button placement in level 13&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Always show how many arrows are left&lt;/li&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Combine the buttons into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
				&lt;li&gt;[ ] Combine levels 11 and 12&lt;/li&gt;
				&lt;li&gt;[ ] Minify XBows&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 16</title>
		<published>2025-11-23T00:00:00+00:00</published>
		<updated>2025-11-23T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-23-luanti-game-jam-2025-day-16/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-23-luanti-game-jam-2025-day-16/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-23-luanti-game-jam-2025-day-16/">
			&lt;h1&gt;Luanti Game Jam: Day 16&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 16&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made 4 levels:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Level 13 is the introduction to mineable reflectors. It is an empty room where you have to place the mineable reflectors yourself. It also hints at story.&lt;/li&gt;
				&lt;li&gt;Level 14 is a similar empty room with mineable reflectors.&lt;/li&gt;
				&lt;li&gt;Level 15 is the anti-gravity introduction. This required adding the option to set moon-like gravity on a per-level basis, which was fairly simple since I already implemented anti-gravity.&lt;/li&gt;
				&lt;li&gt;Level 16 is the &amp;quot;deja-vu&amp;quot; level. You repeat the same sequence three separate times.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;With the amount of levels I added, I also worked on quite a bit of story, updating/adding dialogue. See the day 14 log for some plot details:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-11-21-luanti-game-jam-2025-day-14/index.html&quot;&gt;/blog/2025-11-21-luanti-game-jam-2025-day-14/index.html&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added an anti-gravity toggle node, which will go into the boss fight.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;The hand can now break otherwise &amp;quot;unmineable&amp;quot; blocks in creative.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Make more levels!! Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Mineable reflector introduction level&lt;/li&gt;
				&lt;li&gt;[x] Deja-vu: The same section gets repeated multiple times (maybe in anti-gravity)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[x] Add a node that toggles anti-gravity&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[x] Add dialogue when needed&lt;/li&gt;
				&lt;li&gt;[x] Rotate level 10&lt;/li&gt;
				&lt;li&gt;[x] Start regenerating when joining if the player isn&amp;#39;t at full health&lt;/li&gt;
				&lt;li&gt;[x] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make more levels (no level ideas right now)!!&lt;/li&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Combine the buttons into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
				&lt;li&gt;[ ] Combine levels 11 and 12&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 15</title>
		<published>2025-11-22T00:00:00+00:00</published>
		<updated>2025-11-22T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-22-luanti-game-jam-2025-day-15/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-22-luanti-game-jam-2025-day-15/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-22-luanti-game-jam-2025-day-15/">
			&lt;h1&gt;Luanti Game Jam: Day 15&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 15&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I improved levels 7 and 11. The pit in level 7 is smaller because it was a slog to climb, and level 11 is arranged differently.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve got an anti-gravity &amp;quot;toggle&amp;quot; working. Adding a node for it would probably be easy now.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve add a &amp;quot;health overlay&amp;quot;. Now, when you take damage, a red health&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;I&amp;#39;ve replaced the purple concrete with pink concrete. The textures are the same colour scheme, but whereas the purple texture had pink on the outside and purple on the inside, the new texture has purple on the outside and pink on the inside. I think it looks better now.&lt;/li&gt;
				&lt;li&gt;I removed the &amp;quot;set_arrows&amp;quot; command. I don&amp;#39;t need it nearly as much as I thought I did, and I can always use &amp;quot;add_arrows&amp;quot;.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;As the deadline starts approaching, it&amp;#39;s starting to get a little overwhelming, but I think I can push through.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Make more levels!! Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Mineable reflector introduction level&lt;/li&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times (maybe in anti-gravity)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;Credits screen&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
				&lt;li&gt;[x] Changing arrow gravity on the fly&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[x] Add a red vignette when health is lower than a certain amount (e.g. 15/20 HP)&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue when needed&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[x] Code cleanup&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] &amp;quot;last_arrows&amp;quot; remnants from reflectors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Make more levels!! Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Mineable reflector introduction level&lt;/li&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times (maybe in anti-gravity)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add a credits screen&lt;/li&gt;
				&lt;li&gt;[ ] Add a node that toggles anti-gravity&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue when needed&lt;/li&gt;
				&lt;li&gt;[ ] Rotate level 10&lt;/li&gt;
				&lt;li&gt;[ ] Start regenerating when joining if the player isn&amp;#39;t at full health&lt;/li&gt;
				&lt;li&gt;[ ] Code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Work on stuff for submitting to ContentDB:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Update README to further explain what the game/story is about&lt;/li&gt;
				&lt;li&gt;[ ] More/better screenshots&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Improve the hearts/health texture&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
				&lt;li&gt;[ ] Figure out and implement emerging&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 14</title>
		<published>2025-11-21T00:00:00+00:00</published>
		<updated>2025-11-21T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-21-luanti-game-jam-2025-day-14/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-21-luanti-game-jam-2025-day-14/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-21-luanti-game-jam-2025-day-14/">
			&lt;h1&gt;Luanti Game Jam: Day 14&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 14&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made two new levels, 11 and 12. Both of them involve shooting through a small horizontal opening, with the second being a more complicated version. I might change level 11 tomorrow, who knows.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I cleaned up the reflector code, and added a mineable reflector for future levels. I ultimately decided that the speed of the arrow that shot the reflector shouldn&amp;#39;t affect the speed of the reflected arrow. It was ultimately too complicated and frustrating, so I set it to a fixed speed.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I improved health regeneration. Now, when you take damage, there is a half-second delay before healing at a rate of one health point per 1/4 second. This new regeneration system feels much better.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I tried making a heart texture within my personal constraints of &amp;quot;only the Libresprite default palette&amp;quot;, but it looked ugly, even when attempting 12×12 as well as my normal 8x8. Instead, I decided to hide the health bar entirely, which I will eventually replace with a red vignette when your health is below a certain amount.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I worked on the arena for the boss fight. I&amp;#39;m having my doubts about it, but I think I can pull it off. I could probably make the boss fight with one or two uninterrupted days, all gameplay mechanics within two or three, and crank out levels the rest of the time.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I think I&amp;#39;ve got a plot in my head:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Normal testing&lt;/li&gt;
				&lt;li&gt;Testers try to have a robot design a level, but then it escapes and starts taking over the lab in the background (mineable reflector level)&lt;/li&gt;
				&lt;li&gt;In all the chaos, you accidentally get redirected to an anti-gravity testing sequence (anti-gravity levels)&lt;/li&gt;
				&lt;li&gt;Finish those and get back to the normal tracks, and in the final few levels reach and defeat the robot&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;More inventory improvements!&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Potentially work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;[ ] Anti-gravity preparation&lt;/li&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
				&lt;li&gt;[x] Add mineable reflectors and clean up reflector code&lt;/li&gt;
				&lt;li&gt;[x] Remove other mineable blocks during transitions/resets&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] (CHANGED MY MIND) Improve the hearts/health texture&lt;/li&gt;
				&lt;li&gt;[ ] Small code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Overall plans&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For this last week, the &amp;quot;Plans for tomorrow&amp;quot; and &amp;quot;Overall plans&amp;quot; checklist will be merged.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Make more levels!! Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Mineable reflector introduction level&lt;/li&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times (maybe in anti-gravity)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;Credits screen&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
				&lt;li&gt;[ ] Changing arrow gravity on the fly&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] Add a red vignette when health is lower than a certain amount (e.g. 15/20 HP)&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue when needed&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Code cleanup&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] &amp;quot;last_arrows&amp;quot; remnants from reflectors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
				&lt;li&gt;[ ] Improve the hearts/health texture&lt;/li&gt;
				&lt;li&gt;[ ] Optional mod to add music&lt;/li&gt;
				&lt;li&gt;Boss: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 13</title>
		<published>2025-11-20T00:00:00+00:00</published>
		<updated>2025-11-20T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-20-luanti-game-jam-2025-day-13/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-20-luanti-game-jam-2025-day-13/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-20-luanti-game-jam-2025-day-13/">
			&lt;h1&gt;Luanti Game Jam: Day 13&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 13&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added two reflector nodes; one that reflects up, and one that reflects down. Currently, they&amp;#39;re all separate nodes from the (sideways) reflectors, and I might try to combine them in the future, but for now, it&amp;#39;s good enough.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added two settings; one that disables dialogue (for speedruns) and one for making the glass framed. In my experience, the frames in the glass rendered weirdly, so I decided to have an option to turn that off/on.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Health is now automatically regenerated, because it seems unfair to only be able to lose 10 hearts of health throughout the whole game. Currently the health rate is 1 health point (1/2 a heart) every 0.2 seconds; I might lower the regeneration speed later.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The &amp;quot;change_level&amp;quot; command can now be used with default permissions to return to previous levels. Ideally, I would like to add a GUI for that, but at least the command is something.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m almost ready to add mineable reflectors (self-explanatory) for future levels. This will also let me tie in story, adding a reason for the boss fight.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Other bug fixes/cleanup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Mineable blocks are harder to preserve.&lt;/li&gt;
				&lt;li&gt;Dialogue and transition HUD elements are no longer repeatedly destroyed and recreated; they are now reused, with their properties changing.&lt;/li&gt;
				&lt;li&gt;The inventory formspec looks nicer.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m actually going to start work on the boss fight tomorrow. Most of the stuff I wanted to do today got done, so I have more time for boss fight work tomorrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Potentially work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Music: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[x] Add option to disable dialogue&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] A reflector node that shoots straight up&lt;/li&gt;
				&lt;li&gt;[x] Automatic health regeneration&lt;/li&gt;
				&lt;li&gt;[x] Make dialogue and (potentially) transitions not repeatedly create new HUD elements&lt;/li&gt;
				&lt;li&gt;[x] Fix mineable blocks not being removed from inventory when resetting the section&lt;/li&gt;
				&lt;li&gt;[x] Allow going back to previous levels&lt;/li&gt;
				&lt;li&gt;[x] Small code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Potentially work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Music: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;Credits screen&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add mineable reflectors and clean up reflector code&lt;/li&gt;
				&lt;li&gt;[ ] Remove other mineable blocks during transitions/resets&lt;/li&gt;
				&lt;li&gt;[ ] Add a GUI for going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] Improve the hearts/health texture&lt;/li&gt;
				&lt;li&gt;[ ] Small code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Might do (non-breaking)&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Combine the reflector nodes into one node&lt;/li&gt;
				&lt;li&gt;[ ] Reuse the same reflector textures for both regular and mineable reflectors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 12</title>
		<published>2025-11-19T00:00:00+00:00</published>
		<updated>2025-11-19T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-19-luanti-game-jam-2025-day-12/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-19-luanti-game-jam-2025-day-12/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-19-luanti-game-jam-2025-day-12/">
			&lt;h1&gt;Luanti Game Jam: Day 12&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 12&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I finished levels 8 and 9. Level 8 is the introduction to the reflector node, with two sections. Section 1 is the introduction, and section 2 is a simple one where you have to press a button to remove a wall so a reflected arrow can pass through. Level 9 also requires you to press a button, but you have to do so with a reflected arrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I tweaked the reflector node for (hopefully) the final time. Reflected arrows now has less vertical velocity, which feels more gentle and intuitive.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I modified the sprint mod I&amp;#39;m using (the one from Mineclonia) so it doesn&amp;#39;t need any monkey-patching for expected Mineclonia mod dependencies (hunger, which is not in this game, and CSM-related things, which currently requires a modified client anyway).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/mineclonia/mineclonia&quot;&gt;Mineclonia&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Finally, there is a speedrun timer now. If you go to the settings and enable &amp;quot;Speedrun mode&amp;quot;, it will show a timer in the bottom-left corner of the screen.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I might start boss fight work tomorrow; I didn&amp;#39;t get around to it today.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Potentially work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Music: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[x] Speedrun timer/mode&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Small code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Potentially work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Music: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Add option to disable dialogue&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] A reflector node that shoots straight up&lt;/li&gt;
				&lt;li&gt;[ ] Automatic health regeneration&lt;/li&gt;
				&lt;li&gt;[ ] Make dialogue and (potentially) transitions not repeatedly create new HUD elements&lt;/li&gt;
				&lt;li&gt;[ ] Fix mineable blocks not being removed from inventory when resetting the section&lt;/li&gt;
				&lt;li&gt;[ ] Allow going back to previous levels&lt;/li&gt;
				&lt;li&gt;[ ] Small code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 11</title>
		<published>2025-11-18T00:00:00+00:00</published>
		<updated>2025-11-18T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-18-luanti-game-jam-2025-day-11/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-18-luanti-game-jam-2025-day-11/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-18-luanti-game-jam-2025-day-11/">
			&lt;h1&gt;Luanti Game Jam: Day 11&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 11&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve polished the reflector and glass nodes, and built Level 8, focusing on them.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also finally made a ContentDB account:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://content.luanti.org/users/Pixelo789&quot;&gt;Pixelo789&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It&amp;#39;s empty right now, but I might work on it a bit in the coming days.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Boss fight plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m thinking about the later portions of the Jam, and I want to try to add a boss fight (in some form).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The obvious boss fight is &amp;quot;shoot this mob a lot until it dies&amp;quot;, but that seems boring, and I want to do better than that. I&amp;#39;m thinking about &amp;quot;do some puzzle, and completing it lets you take a shot/deals damage to the boss&amp;quot;. I&amp;#39;ll start work tomorrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Flesh out the reflector node&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[x] Make an account on ContentDB&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Potentially work on endgame (boss fight)&lt;/li&gt;
				&lt;li&gt;Music: potentially Mendelssohn&amp;#39;s Symphony No. 4 &amp;quot;Italian&amp;quot;, movement IV. Saltarello presto, in some retro/chiptune form if possible&lt;/li&gt;
				&lt;li&gt;Timed&lt;/li&gt;
				&lt;li&gt;[ ] Speedrun timer/mode&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Anti-gravity preparation&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Node that toggles anti-gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Small code cleanup&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 10</title>
		<published>2025-11-17T00:00:00+00:00</published>
		<updated>2025-11-17T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-17-luanti-game-jam-2025-day-10/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-17-luanti-game-jam-2025-day-10/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-17-luanti-game-jam-2025-day-10/">
			&lt;h1&gt;Luanti Game Jam: Day 10&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 10&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I managed to get the reflecting node to a (somewhat) functional state. It took a while and quite a bit of math, but I have a lot of time on my hands and I&amp;#39;m very good at math. I&amp;#39;m going to work on it a bit more tomorrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Add a node that, when shot by an arrow, reflects the arrow&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Make an account on ContentDB (yes, I haven&amp;#39;t made an account yet)&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Flesh out the reflector node&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Make an account on ContentDB (yes, I haven&amp;#39;t made an account yet)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 9</title>
		<published>2025-11-16T00:00:00+00:00</published>
		<updated>2025-11-16T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-16-luanti-game-jam-2025-day-9/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-16-luanti-game-jam-2025-day-9/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-16-luanti-game-jam-2025-day-9/">
			&lt;h1&gt;Luanti Game Jam: Day 9&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 9&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I started work on the fundamentals of level 8. I added glass, and tried to work on the reflector node, but couldn&amp;#39;t figure it out and moved on.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also (finally) got dialogue added! This took quite a bit of work, but there is a somewhat functional dialogue system in place! Now there is some amount of story.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels&lt;/li&gt;
				&lt;li&gt;[ ] Add a node that, when shot by an arrow, reflects the arrow&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] Make an account on ContentDB (yes, I haven&amp;#39;t made an account yet)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add a node that, when shot by an arrow, reflects the arrow&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Make an account on ContentDB (yes, I haven&amp;#39;t made an account yet)&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 8</title>
		<published>2025-11-15T00:00:00+00:00</published>
		<updated>2025-11-15T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-15-luanti-game-jam-2025-day-8/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-15-luanti-game-jam-2025-day-8/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-15-luanti-game-jam-2025-day-8/">
			&lt;h1&gt;Luanti Game Jam: Day 8&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 8&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I did more cleanup today.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also figured out how to allow bloom/volumetric lighting in the game, and have taken a few screenshots with those enabled. I&amp;#39;ll add them later.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made level 7. This is going to be the final level for &amp;quot;chapter&amp;quot; 1. I&amp;#39;ve realised that the puzzles have gotten a bit too repetitive, and adding features that actually interact with arrows will significantly improve that.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[x] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels&lt;/li&gt;
				&lt;li&gt;[ ] Add a node that, when shot by an arrow, reflects the arrow&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] Make an account on ContentDB (yes, I haven&amp;#39;t made an account yet)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 7</title>
		<published>2025-11-14T00:00:00+00:00</published>
		<updated>2025-11-14T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-14-luanti-game-jam-2025-day-7/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-14-luanti-game-jam-2025-day-7/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-14-luanti-game-jam-2025-day-7/">
			&lt;h1&gt;Luanti Game Jam: Day 7&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 7&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Today was mainly cleanup. I tried fixing the focused slot issues with a bunch of hacks/workarounds, but I couldn&amp;#39;t figure it out.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I think I&amp;#39;m going to try adding dialogue tomorrow. It&amp;#39;ll add to the game immensely, and will allow me to actually have a story.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot (maybe; I have no idea how to fix this!!)&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 6</title>
		<published>2025-11-13T00:00:00+00:00</published>
		<updated>2025-11-13T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-13-luanti-game-jam-2025-day-6/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-13-luanti-game-jam-2025-day-6/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-13-luanti-game-jam-2025-day-6/">
			&lt;h1&gt;Luanti Game Jam: Day 6&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 6&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I finally added level transitions! I referenced the implementation that Glitch uses on death (linked below) so I can make mine. It&amp;#39;s simple visually; when the target is activated, the screen fades to black, then fades back in with the next level.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Wuzzy/Glitch/src/branch/master/mods/glitch_screen/init.lua&quot;&gt;https://codeberg.org/Wuzzy/Glitch/src/branch/master/mods/glitch_screen/init.lua&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also made level 6. It introduces mineable blocks. It has a fairly linear section before going to a vertical climb. This does, however, resurface an issue I&amp;#39;ve been working around: currently, adding and removing items is weird. For whatever reason, if I add or remove an item in the slot currently being focused, it doesn&amp;#39;t actually add/remove the item. This causes game-breaking issues. I&amp;#39;ll try fixing them tomorrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also finally removed the large amount of &amp;quot;mcl_*&amp;quot; dependencies. Turns out it was from a &amp;quot;playerphysics/elytra.lua&amp;quot; file that Mineclonia adds. Since elytras that let you fly are obviously not needed in a puzzle game with only walking and sprinting[citation needed], I removed it. Since that file was the source of all the &amp;quot;mcl_*&amp;quot; dependencies, I was also able to remove all of those.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[x] Add fade-ins and fade-outs to the level transition&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Fix item adding/removing to focused slot&lt;/li&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 5</title>
		<published>2025-11-12T00:00:00+00:00</published>
		<updated>2025-11-12T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-12-luanti-game-jam-2025-day-5/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-12-luanti-game-jam-2025-day-5/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-12-luanti-game-jam-2025-day-5/">
			&lt;h1&gt;Luanti Game Jam: Day 5&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 5&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I finished levels 3, 4, and 5. I decided that the original level 3 section 2 was too big, so I split it off into a one-section level 4. I added a smaller section to level 3 as a replacement. I then made a (fully new) level 5.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Level 3 introduces buttons that interact with the environment. The first section is the introduction, while the second section is an ascent area, going back and forth between alternating layers.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Level 4 is a large parkour section with alternating platforms, swapped by buttons. At the top is a simple alternating section with walls. I might rework it, but probably not.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Level 5 has alternating walls, and you swap the walls to get to the next &amp;quot;room&amp;quot; in the level.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m thinking I&amp;#39;m going to stop prioritising dialogue, as it&amp;#39;s not needed for the game experience; it&amp;#39;s only frivolous. I&amp;#39;ll keep it on the &amp;quot;Overall Plans&amp;quot; checklist, but don&amp;#39;t expect to get it added during the jam.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Finish level 3&lt;/li&gt;
				&lt;li&gt;[ ] Add fade-ins and fade-outs to the level transition&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Make one, if not two, more levels&lt;/li&gt;
				&lt;li&gt;[ ] Add fade-ins and fade-outs to the level transition&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
				&lt;li&gt;[x] Buttons that can open doors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 4</title>
		<published>2025-11-11T00:00:00+00:00</published>
		<updated>2025-11-11T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-11-luanti-game-jam-2025-day-4/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-11-luanti-game-jam-2025-day-4/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-11-luanti-game-jam-2025-day-4/">
			&lt;h1&gt;Luanti Game Jam: Day 4&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 4&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I finally came up with a name for this game: &amp;quot;Thinking With Arrows&amp;quot;! It&amp;#39;s kind of a placeholder name, but it&amp;#39;ll probably be the permanent name for this game :). Migrating the codebase over to use the new name was a bit of a pain, but nothing broke for me, so that&amp;#39;s a plus.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The arrow block can now also be activated by shooting an arrow at it. If/when I add achievements, doing so will be an achievement, but that&amp;#39;s for the future.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There is now a font:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://zone38.net/font/#pressstart&quot;&gt;Press Start 2P by codeman38&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It fits the overall vibe well.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Respawning now works; if the player somehow dies, then they&amp;#39;ll be respawned at the beginning of the section.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The inventory now has a nice bar graph of shot statistics (bullsyes, arrows that landed in the red ring, clicks, etc.). It took a bit but, overall, I enjoy it.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I started work on level 3. This level introduces the button block; when activated, it changes the environment (removes blocks, adds blocks, etc.). It&amp;#39;s fairly big, and implementing it will be a pain, but I&amp;#39;ll push through.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Checklist from yesterday&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[x] Think of a name&lt;/li&gt;
				&lt;li&gt;[ ] Add fade-ins and fade-outs to the level transition&lt;/li&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[x] Potentially add a font&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
				&lt;li&gt;[ ] Buttons that can open doors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Finish level 3&lt;/li&gt;
				&lt;li&gt;[ ] Add fade-ins and fade-outs to the level transition&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Overall plans&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] An achievement system&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
				&lt;li&gt;[ ] Buttons that can open doors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Level ideas:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Deja-vu: The same section gets repeated multiple times&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/ThinkingWithArrows&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 3</title>
		<published>2025-11-10T00:00:00+00:00</published>
		<updated>2025-11-10T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-10-luanti-game-jam-2025-day-3/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-10-luanti-game-jam-2025-day-3/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-10-luanti-game-jam-2025-day-3/">
			&lt;h1&gt;Luanti Game Jam: Day 3&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 3&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve added some more textures for the nodes, to use in the future.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made level transitions work! Now, when the target block is interacted with, the game correctly teleports the player to the next section/level. All I need is a fade in a fade out.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also added an arrow block. If the player doesn&amp;#39;t have any arrows, they can click the block and get more arrows. There will be one of these blocks at every section.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Overall, fairly uneventful, but I got the big thing I wanted done.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Let&amp;#39;s make these items check-boxes, for simplicity, and so I can check them off tomorrow:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Think of a name&lt;/li&gt;
				&lt;li&gt;[ ] Add fade-ins and fade-outs to the level transition&lt;/li&gt;
				&lt;li&gt;[ ] More levels!!&lt;/li&gt;
				&lt;li&gt;[ ] Potentially add a font&lt;/li&gt;
				&lt;li&gt;[ ] Add dialogue (a narrator) that shows up and &amp;quot;speaks&amp;quot; (displays text) at the start of levels.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[ ] Add more environments and interactions:&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;[ ] Anti-gravity/less gravity&lt;/li&gt;
				&lt;li&gt;[ ] Buttons that can open doors&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/luanti_game_jam_2025&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 2</title>
		<published>2025-11-09T00:00:00+00:00</published>
		<updated>2025-11-09T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-09-luanti-game-jam-2025-day-2/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-09-luanti-game-jam-2025-day-2/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-09-luanti-game-jam-2025-day-2/">
			&lt;h1&gt;Luanti Game Jam: Day 2&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 2&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve added more nodes. I started by adding nodes with the textures of the concrete from Mineclonia, but I eventually made a few more nodes.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve moved the target code out of X Bows and into another mod, and added a chime sound when the target gets shot or right-clicked on. The chime will eventually be accompanied by a level transition.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve done some texture work. I intentionally made it minimalistic (8x8, only the palette from LibreSprite, no dithering). I hope that the textures create a sort of Portal test-chamber vibe. I made textures for:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;white concrete,&lt;/li&gt;
				&lt;li&gt;light (a block that gives light; it&amp;#39;s orange, so it&amp;#39;s noticeable),&lt;/li&gt;
				&lt;li&gt;the target block (so far, the only 16x16 texture in this game),&lt;/li&gt;
				&lt;li&gt;the blocks that make up the box the player gets put in during level transitions, and&lt;/li&gt;
				&lt;li&gt;a block that gives you a bow and some arrows when right clicked.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I also made a really cute 8x8 diamond pickaxe texture. I temporarily added a modified diamond pickaxe that instantly breaks everything for convenience, and I wanted it to fit.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve added a UI that replaces the inventory. It currently shows the time, but I intend to make it show an overview.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve made levels 1 and 2. Level 1 is an introductory level, and level 2 is the first level with a bow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Work on the level transition system. I have the transition room set up, I just need to orchestrate it between sections and levels.&lt;/li&gt;
				&lt;li&gt;More levels!!&lt;/li&gt;
				&lt;li&gt;Maybe more block textures?&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The code is on Codeberg:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/luanti_game_jam_2025&quot;&gt;Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Luanti Game Jam: Day 1</title>
		<published>2025-11-08T00:00:00+00:00</published>
		<updated>2025-11-08T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-08-luanti-game-jam-2025-day-1/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-08-luanti-game-jam-2025-day-1/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-08-luanti-game-jam-2025-day-1/">
			&lt;h1&gt;Luanti Game Jam: Day 1&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: because of time zones, I actually started at 15:00 the day before, but for the sake of this devlog, I&amp;#39;m bundling that time into Day 1 as well.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 0? (the 9-hour block)&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I brainstormed and came up with what I want do. I&amp;#39;m going to build a puzzle game where you shoot a target with a bow, using only a certain amount of arrows. I want certain puzzles to have interesting properties, such as different gravity and reflective surfaces.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I then went to work.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I made a copy of the Void game as a starting point. The nice thing about Void is that it provides the bare minimum to get a usable experience: blocks for the primary mapgen aliases, and a hand.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added a bunch of mods from Mineclonia to get their fancy sprint working. I intend on simplifying the sprint mod so it can be more standalone.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For the bow, I went with X Bows, as it was the nicest bow mod I could find. I tried stripping it down so all the unnecessary code for this game isn&amp;#39;t needed, but ultimately gave up.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://git.0x7be.net/dirk/void&quot;&gt;Void&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/mineclonia/mineclonia&quot;&gt;Mineclonia&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://content.luanti.org/packages/SaKeL/x_bows/&quot;&gt;X Bows&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Day 1&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I ultimately made a few modification to X Bows, so that:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;arrows are destroyed once they land,&lt;/li&gt;
				&lt;li&gt;the &amp;quot;sfinv&amp;quot; implicit dependency is no longer needed, and&lt;/li&gt;
				&lt;li&gt;the target block has a black ring when shot at the edges.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I added a few functions that let me set or change the amount of arrows are in the X Bows provided arrow slot, since I want to refuse access to the inventory in the complete game, and give the player more arrows when entering a new level.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I fixed a few things from the Mineclonia mods that weren&amp;#39;t fixed by chucking an &amp;quot;mcl_fixer&amp;quot; mod I had made previously in.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I finally added a few nodes, to eventually build levels from.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Plans for tomorrow&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I intend to work more on nodes, and start work on the level design. I&amp;#39;m not sure how many levels I should have, so I&amp;#39;ll come back to it later.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ll set up a repo tomorrow.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>I&#39;m participating in Luanti Game Jam 2025</title>
		<published>2025-11-07T00:00:00+00:00</published>
		<updated>2025-11-07T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-07-luanti-game-jam-2025/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-07-luanti-game-jam-2025/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-07-luanti-game-jam-2025/">
			&lt;h1&gt;I&amp;#39;m participating in Luanti Game Jam 2025&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More information about the jam can be found here:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jam.luanti.org/&quot;&gt;Luanti Game Jam 2025&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I love Luanti, and I&amp;#39;&amp;#39;ve wanted to participate in the Luanti Game Jam as soon as I discovered the jam. Let&amp;#39;s hope this goes well!&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Stuff about the jam:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The theme is &amp;quot;Line of Sight&amp;quot;.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I have no idea what I&amp;#39;m going to do.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ll post more about my progress at the jam progresses.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>I like CDs, but I never use them</title>
		<published>2025-11-06T00:00:00+00:00</published>
		<updated>2025-11-06T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-06-i-like-cds/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-06-i-like-cds/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-06-i-like-cds/">
			&lt;h1&gt;I like CDs, but I never use them&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;CDs are great.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;CDs are a cheap way to store high-quality audio.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;CDs are an established technology. Other similar technologies are either older and inferior (such as cassette tapes), or more complex and cumbersome (such as BD-A, which bakes in DRM). Because of this, and do to its age, equipment that supports CDs is inexpensive, both new and used.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Because CDs have largely been supplanted by newer technologies (primarily digital media distribution), obtaining them (both empty and with music) on the used market is cheap. Typically I go to thrift stores and browse the CD section looking for new (to me) music that intrigues me and that I want to listen to.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;However, I don&amp;#39;t use CDs.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s technically wrong. I do use CDs. I sometimes burn disk images onto CDs to use on computers that can&amp;#39;t boot from flash drives. I rip CDs that I get to add them to my (legally obtained) music collection. I just don&amp;#39;t use CDs to play music.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;CDs are an inferior way to play audio in our current society. They require specialised hardware (that isn&amp;#39;t a general-purpose computer). There are only three CD players I have access to: a car player and two stereos. The car player is obviously inconvenient, and both stereos are inconsistent. In comparison, I have ~15 computers/phones that support playing music. This is admittedly biased, but for a more average perspective, many cars no longer ship with a CD drive, while an extremely significant portion of general-purpose computing devices (computers, phones, tables, televisions) are able to play music from files, all while being much more accessible than even a portable CD player.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Playing CDs damages them. Handling CDs damages them. In comparison, digital storage (especially well backed-up storage) can last longer, without losing quality while it degrades&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Dedicated music playing hardware is much more integrated. I can carry my entire music collection on a dedicated music player, or even a flash drive, with room to spare. This is much more convenient than lugging around ~100 CD cases, or even raw CDs in a book (please don&amp;#39;t), and taking them out whenever I want to play them.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;These downsides make it incredibly inconvenient to play CDs. However, I still appreciate their price and high-quality audio. Since high-quality audio storage formats (namely FLAC) exist, I deal with this by ripping my CDs into FLAC files. I can then play these FLACs wherever I want without the hassle of a physical CD. This seems to be what a lot of music people do: rip CDs they obtain, then listen to the resulting files and not the CD.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I like CDs, but I never use them.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;---&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Some details about my setup:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I use the fre:ac program to rip my CDs. How I typically do this is obtain a lot of CDs over a period of time, then I bulk-rip all of them in a single sitting.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;My current music player is mpv. I use it through the terminal, passing the folder (each folder is the result of one CD) as an argument. Every other music player was too complicated for me; they all had unnecessary features, were too bulky, and were slow to launch. All I want in a music player is a way to select an album (i.e. CD), ideally at random, and play it, while showing me how far I&amp;#39;ve played a track.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.freac.org/&quot;&gt;fre:ac&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://mpv.io&quot;&gt;mpv&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Looking at Gemini (the protocol)</title>
		<published>2025-11-05T00:00:00+00:00</published>
		<updated>2025-11-05T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-05-looking-at-gemini/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-05-looking-at-gemini/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-05-looking-at-gemini/">
			&lt;h1&gt;Looking at Gemini (the protocol)&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Recently, I&amp;#39;ve been looking at Project Gemini. I very much like the overall concept of Gemini: being as lightweight and simple to implement as possible, while still being powerful and capable, all without being privacy-invasive or having anything that could be (easily) abused to track people.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://geminiprotocol.net/&quot;&gt;Project Gemini&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Gemini has a certain affinity that I really enjoy; this affinity makes me want to tinker with it. I&amp;#39;ve already come up with ideas for what I want to do with it, such as:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;A Gemini server that parses an RSS/Atom feed and returns the result as a gemtext document (UPDATE: I just found out CAPCOM exists, which is a Gemini client that is a feed aggregator. However, it&amp;#39;s in Python, so I&amp;#39;m still interested in making something like this.)&lt;/li&gt;
				&lt;li&gt;A GitHub front-end/proxy, similar to GotHub for the web&lt;/li&gt;
				&lt;li&gt;Proxies for other web services&lt;/li&gt;
				&lt;li&gt;A Fediverse/ActivityPub client for Gemini&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://git.sr.ht/~solderpunk/capcom&quot;&gt;CAPCOM&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/gothub/gothub&quot;&gt;GotHub&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Because Gemini is so lightweight, I want to try pushing it. All of the above is much more trivial for you to do on the web than Gemini; because it&amp;#39;s so much more challenging to make Gemini versions, it&amp;#39;s much more rewarding if I were to.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m currently using the Geopard client, but there are some issues with it, and I&amp;#39;m thinking about making my own client in Lua because it&amp;#39;s so easy to make one. I think focusing efforts on improving Geopard would be better though.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/ranfdev/Geopard&quot;&gt;Geopard&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I think I want to bihost on both the web and Gemini at some point. but I&amp;#39;d like to try Gemini more before getting more into it. I&amp;#39;m currently using some Zola-specific things (namely shortcodes), so I would like to deal with that before moving. I could potentially even write my own Markdown to Gemini &amp;quot;static site generator&amp;quot; to make it easier.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;More Gemini posts might come later, while I explore and tinker with it. I&amp;#39;m quite enthusiastic about it and hope it does well.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Random Color</title>
		<published>2025-11-04T00:00:00+00:00</published>
		<updated>2025-11-04T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-04-random-color/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-04-random-color/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-04-random-color/">
			&lt;h1&gt;Random Color&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Yet another application I&amp;#39;ve developed (this time, in just one day): Random Color.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: I have developed Random Color a lot, and it has evolved into Prismatic. Go check it out.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;https://codeberg.org/Pixelo789/Prismatic/raw/commit/cf8102f6662b49044d52f74ede3fbd930266ba22/data/screenshots/ui-light.png&quot; alt = &quot;A screenshot of an application I&amp;#39;ve developed, called &amp;quot;Random Color&amp;quot;. Within the UI, there are two labels (&amp;quot;Hex: #BD4639&amp;quot; and &amp;quot;RGB: (189, 70, 57)&amp;quot;), and the background is the color as described by the label.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I was writing the metainfo for Web Sharing and got to the brand color step. Not knowing a color, I thought about going through random colors, and realised that would be a good app. I finished it within a few hours.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There&amp;#39;s still a few things before I&amp;#39;ll call it &amp;quot;complete&amp;quot;.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;A few neat things about it:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;F10 is typically bound to the main menu by default when creating the UI, but since there isn&amp;#39;t a menu here, I&amp;#39;ve manually rebinded it to open the About menu.&lt;/li&gt;
				&lt;li&gt;Ctrl+R gets a new color.&lt;/li&gt;
				&lt;li&gt;The UI widgets change color (white/black) if the default color won&amp;#39;t meet Web Content Accessibility Guidelines (WCAG) contrast guidelines (3:1 for large text). Worse-case scenario, the tooltip text is the value as displayed (without the &amp;quot;Hex&amp;quot; or &amp;quot;RGB&amp;quot; prefix).&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html&quot;&gt;WCAG Contrast Guidelines&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The source code is on Codeberg if you want to go check it out.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/Prismatic&quot;&gt;Random Color/Prismatic Codeberg repository&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/WebSharing&quot;&gt;Web Sharing Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Web Sharing</title>
		<published>2025-11-03T00:00:00+00:00</published>
		<updated>2025-11-03T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-03-web-sharing/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-03-web-sharing/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-03-web-sharing/">
			&lt;h1&gt;Web Sharing&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Yesterday, I published the source code to an application I&amp;#39;ve been working on for the last month and a half: Web Sharing:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;https://codeberg.org/Pixelo789/WebSharing/media/branch/main/data/screenshots/ui-light-start.png&quot; alt = &quot;A screenshot of the start page of an application I&amp;#39;ve developed, called &amp;quot;Web Sharing&amp;quot;. Within the UI, the primary object is an &amp;quot;Open a folder...&amp;quot; button, which opens a folder select dialog when clicked.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;https://codeberg.org/Pixelo789/WebSharing/media/branch/main/data/screenshots/ui-light-sharing.png&quot; alt = &quot;A screenshot of the &amp;quot;sharing&amp;quot; page of an application I&amp;#39;ve developed, called &amp;quot;Web Sharing&amp;quot;. Within the UI there is a QR code, a label with the URL &amp;quot;http://127.0.0.1:8000&amp;quot;, a &amp;quot;Copy to Clipboard&amp;quot; button, and a label explaining that a folder is being broadcast at the URL shown above.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;You select a folder, and the app uses Python&amp;#39;s built-in &amp;quot;http.server&amp;quot; module to start an HTTP server with that folder.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://docs.python.org/3/library/http.server.html&quot;&gt;Python &amp;quot;http.server&amp;quot; documentation&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This app was inspired by an app idea, since I was bored and wanted something to do. The app UI was also heavily inspired by Audio Sharing.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gitlab.gnome.org/bertob/app-ideas/-/issues/285&quot;&gt;App Idea&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://apps.gnome.org/AudioSharing/&quot;&gt;Audio Sharing&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It probably would have taken a week to get the internal app logic complete, but I&amp;#39;ve also used the remaining month to polish the app and add some nice-to-haves, such as the QR Code widget. Besides, scc estimates a completion time of 1.99 months for the Python scripts alone, so I&amp;#39;m doing great!&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There&amp;#39;s only a few more things to work on, and then I might try getting it into Flathub!&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The source code is on Codeberg if you want to go check it out.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/WebSharing&quot;&gt;Web Sharing Codeberg repository&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>I don&#39;t like Rust</title>
		<published>2025-11-02T00:00:00+00:00</published>
		<updated>2025-11-02T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-02-rust/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-02-rust/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-02-rust/">
			&lt;h1&gt;I don&amp;#39;t like Rust&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;TL;DR: preference.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Note: I come from an interpreted language background (the first programming language I learned was Python).&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Rust is a popular compiled programming language. I&amp;#39;ve heard about it in other places, and have tried programming in it, but couldn&amp;#39;t really understand it well.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Issues/complaints I have with Rust&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Syntax&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This might not be so much an issue with Rust itself, but with compiled languages in general.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Because of the way Rust is designed, I need to add many annotations and otherwise unnecessary details.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;As an example, let&amp;#39;s imagine a function that requires the input values to be immutable, but you want to be able to change those values. An implementation in, say, Lua, wouldn&amp;#39;t have to do anything weird because immutable variables don&amp;#39;t exist in Lua. I also don&amp;#39;t need any reference annotations; the Lua virtual machine handles all of that with garbage collection. An implementation in Rust, however, requires random &amp;quot;Cell&amp;quot; objects and reference annotations.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;A real-life use case of this is on of the example applications in the GUI development with Rust and GTK 4 book. The &amp;quot;GObject Subclassing&amp;quot; example has 68 source lines of code (SLoC), while the following Lua implementation[1] has 34:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;-- SPDX-License-Identifer: Unlicense

local LuaGObject = require &amp;quot;LuaGObject&amp;quot;
local Gtk = LuaGObject.require(&amp;quot;Gtk&amp;quot;)

local function new_application_window(window)
	local button_counter = 0

	local button = Gtk.Button {
		margin_top = 12,
		margin_bottom = 12,
		margin_start = 12,
		margin_end = 12,
		label = &amp;quot;0&amp;quot;
	}
	function button:on_clicked()
		button_counter = button_counter + 1
		button:set_label(button_counter)
	end
	window:set_child(button)
end

local app = Gtk.Application {
	application_id = &amp;quot;org.gtk_rs.GObjectSubclassing2&amp;quot;
}

function app:on_activate()
	if app.active_window then
		app.active_window:present()
	end
end

function app:on_startup()
	local window = Gtk.ApplicationWindow {
		application = app,
		title = &amp;quot;My GTK App&amp;quot;
	}
	new_application_window(window)
	window:present()
end

app:run()&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gtk-rs.org/gtk4-rs/git/book/introduction.html&quot;&gt;Gtk Rust Book&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;gtk-rs/gtk4-rs/tree/main/book/listings/g_object_subclassing/2&quot;&gt;GObject Subclassing example&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since the Lua implementation uses less lines than the Rust implementation, the Lua implementation is also clearer. Since there is no need to worry about technically superfluous details, both me, the programmer, and you, the person reading the program, are able to understand it better. Yes, there&amp;#39;s some syntactical sugar such as the &amp;quot;end&amp;quot; when defining functions and the lack of a &amp;quot;+=&amp;quot; operator, but it&amp;#39;s better than:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;&amp;quot;unwrap()&amp;quot; spam,&lt;/li&gt;
				&lt;li&gt;&amp;quot;Cell&amp;quot; spam,&lt;/li&gt;
				&lt;li&gt;ending every single statement with a semicolon, even when it&amp;#39;s implied (except not all statements require semicolons, for some reason),&lt;/li&gt;
				&lt;li&gt;manually adding type annotations to every variable&lt;/li&gt;
				&lt;li&gt;pleasing a borrow checker,&lt;/li&gt;
				&lt;li&gt;and probably more that I&amp;#39;m not thinking of.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I prefer learning by doing; I learned Python and Lua by writing Python and Lua code, respectively. Rust&amp;#39;s syntax and design, however, makes it difficult for me to learn through doing; it&amp;#39;s off-putting.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Implementation&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There is only one real implementation of Rust: the official one, leading to a monoculture. This implementation is also incredibly large; Lua&amp;#39;s implementation(s) is(/are) definitely much smaller.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This implementation (the only one) is written in Rust (i.e. self-hosting). While self-hosted implementations of programming languages have some benefits, it also introduces a pain for bootstrapping (compiling the compiler from scratch). Since the compiler isn&amp;#39;t easily compiled with a C compiler, for example, you typically have to use precompiled versions of the compiler with origins that aren&amp;#39;t easily reproducible.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/rust-lang/rust&quot;&gt;Official Rust implementation&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://en.wikipedia.org/wiki/Self-hosting_(compilers)&quot;&gt;Wikipedia page on self-hosting compilers&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Community&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It seems like, according to the Rust community, everything written in a language that doesn&amp;#39;t have built-in memory-safety is inherently unsafe and therefore should be ported to or have a &amp;quot;safe&amp;quot; wrapper for Rust.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In case it isn&amp;#39;t clear: it is possible to write fully safe code in C (or another language without memory-safety), and it is possible to write unsafe code in Rust. Just because a program is written in C doesn&amp;#39;t mean it has been infected with a virus and will be plagued by stack overflows, and just because a program is written in Rust doesn&amp;#39;t mean it is perfectly fine and will never have a memory error ever.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The proper way to reduce memory errors (and bugs in general) is to write smaller programs, not slapping a borrow checker on the problem and calling it a day. A smaller program means more intimate understanding with how it works, and less errors.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I don&amp;#39;t fully understand Rust (because it&amp;#39;s too much of a behemoth for me to learn), but it seems like that from an outsider&amp;#39;s perspective.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Conclusion&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I apologise if this post came off as more of a rant; I&amp;#39;m trying to post more and this was written in about 3 hours total.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Overall, Rust is too complex for me to learn, and it makes some choices which I very much don&amp;#39;t like. I&amp;#39;m sticking to Lua.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[1]: While this Lua implementation doesn&amp;#39;t use subclasses (classes don&amp;#39;t exist in Lua), my point is that the same thing in Rust takes more SLOC than in other languages.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>October 2025 Summary</title>
		<published>2025-11-01T00:00:00+00:00</published>
		<updated>2025-11-01T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-11-01-october-2025-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-11-01-october-2025-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-11-01-october-2025-summary/">
			&lt;h1&gt;October 2025 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;None :(&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I am nearing completion with one program. I&amp;#39;ll upload the source and make a post about it in a few days. There&amp;#39;s still a few more programs that I&amp;#39;m working on, and my attention will return to those. Seriously expect a couple of releases in November.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The start of October was incredibly bad for me. Most of that month was spent recovering from that event, but I&amp;#39;ve finished and can (hopefully) spend more time programming.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Fedora 43 came out, but I still haven&amp;#39;t gotten the popup in Discover to upgrade. I also haven&amp;#39;t had good experience upgrading distros from the terminal, so I&amp;#39;m weary to upgrade via the DNF System Upgrade Plugin. Maybe I&amp;#39;ll try upgrading at some point; who knows.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://docs.fedoraproject.org/en-US/quick-docs/upgrading-fedora-offline/&quot;&gt;Page about upgrading Fedora via the DNF System Upgrade Plugin&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m also going to try posting once every day this month. I haven&amp;#39;t been posting a lot, and I want to write more.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s all for now. See you next time (hopefully)!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>September 2025 Summary</title>
		<published>2025-09-30T00:00:00+00:00</published>
		<updated>2025-09-30T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-09-30-september-2025-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-09-30-september-2025-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-09-30-september-2025-summary/">
			&lt;h1&gt;September 2025 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-09-01-android-verifed-developers/index.html&quot;&gt;That&amp;#39;s it, I guess (free software) Android&amp;#39;s dead now&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-09-06-switching-to-alpine/index/index.html&quot;&gt;Switching to Alpine&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ve been going back and forth between creating around five different programs in private and trying not to go crazy, so nothing new yet. However, I am close to done on a few things, so expect a couple of releases next month.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;For now, here&amp;#39;s a preview of what I&amp;#39;m working on:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;webthingy.png&quot; alt = &quot;A screenshot of a work-in-progress GNOME application. At the top is a grey square where a image of a QR code will eventually go, the URL &amp;quot;http://localhost:8000&amp;quot;, a &amp;quot;Copy to Clipboard&amp;quot; button, and text at the bottom explaining that a web server is being run by the program.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;flatpak-menu.png&quot; alt = &quot;A screenshot of a work-in-progress application. This uses a menu program called &amp;quot;fuzzel&amp;quot; to display a list of 21 search results from Flathub for the query &amp;quot;rss&amp;quot; (not depicted).&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I am not doing well. I went through a lot of rough days during this month, but especially today. I would prefer not to say what I&amp;#39;m going through publicly, so suffice it to say that I&amp;#39;m trying my best to get through this. Let&amp;#39;s hope it ends soon.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m trying to convince myself to switch from Fedora to Alpine on my laptop, ideally before Fedora 43 comes out (Fedora&amp;#39;s already released the 43 beta, so I only have a few weeks).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://fedoramagazine.org/announcing-fedora-linux-43-beta/&quot;&gt;Fedora 43 Beta release post&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;On a related topic, I&amp;#39;ll try switching bars from yambar to something that isn&amp;#39;t way too bloated for my needs, and once I either do that, or give up on other bars entirely, I&amp;#39;ll publish my config.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/dnkl/yambar&quot;&gt;https://codeberg.org/dnkl/yambar&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Overall, this month wasn&amp;#39;t that eventful, but let&amp;#39;s hope that next month is more interesting. See you next time!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Switching to Alpine</title>
		<published>2025-09-06T00:00:00+00:00</published>
		<updated>2025-09-06T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-09-06-switching-to-alpine/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-09-06-switching-to-alpine/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-09-06-switching-to-alpine/">
			&lt;h1&gt;Switching to Alpine&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;screenshot_1.png&quot; alt = &quot;A screenshot of the Niri Wayland compositor. On the left is the vim editor in a terminal, with the Niri configuration open. In the middle is a floating terminal (which currently has focus) with fastfetch run in it, showing an ASCII version of the Alpine logo and some information about the system.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;As I mentioned in my August 2025 summary, I switched to Alpine (Edge) after I messed up my Debian install trying to upgrade to Debian 13. This switch has been a long time coming, and the failed upgrade was an opportunity to finally move on.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-08-31-august-2025-summary/index.html&quot;&gt;August 2025 Summary&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://alpinelinux.org&quot;&gt;Alpine&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://debian.org&quot;&gt;Debian&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;While Debian is nice if you want an absolutely stable experience, that comes with the trade-off of packages in stable versions becoming heavily outdated, and while this means the available packages are battle-tested and have few bugs, I don&amp;#39;t need my computer to be *that* stable. For the minor trade-off of a slightly less stable experience, using Alpine gives me access to much newer applications.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Setup&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since the setup section is quite long, it is in a separate page:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-09-06-switching-to-alpine/alpine-install/index.html&quot;&gt;/blog/2025-09-06-switching-to-alpine/alpine-install/index.html&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Wayland compositor: Niri&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is the major reason why I wanted to switch operating systems.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I don&amp;#39;t remember exactly how I found out about Niri, but I think it was when I checked out the repo for PaperWM (a GNOME Shell Extension) and they suggested both Niri and Karousel (a KDE Plasma KWin script). I liked the idea, but since it was too inconvenient for me to switch at that moment, I stuck with using karousel on my laptop. I didn&amp;#39;t use karousel on my desktop since I use multiple monitors, and karousel wasn&amp;#39;t compatible.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/Niri-wm/Niri&quot;&gt;Niri&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/Niri-wm/Niri&quot;&gt;PaperWM&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/peterfajdiga/karousel&quot;&gt;Karousel&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This incident gave me the opportunity to finally use Niri seriously as my primary compositor, and it&amp;#39;s been great. The config is around 95% done; I&amp;#39;ve worked on the config on my laptop before (by running Niri in a window), and I tweaked it a bit for my desktop (monitor configuration, adding some Alpine/OpenRC-specific things). I might change a few things at some point, but they&amp;#39;ll be minor.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I don&amp;#39;t think I could go back to a floating window manager now; the scrolling metaphor (and Niri in particular) is just that good.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Bar: yambar&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;m sticking with yambar, despite it no longer being maintained. I&amp;#39;m considering chocobar, but that seems to be equally unmaintained.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Waybar (recommended by Niri) is too bloated to me, and I couldn&amp;#39;t figure out ironbar enough to switch (it also seems bloated).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/dnkl/yambar&quot;&gt;yambar&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/notchoc/chocobar&quot;&gt;chocobar&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/Alexays/Waybar&quot;&gt;Waybar&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/JakeStanger/ironbar&quot;&gt;ironbar&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;awesome-wayland (particularly the widgets section in this case) is very helpful for deciding what to do next:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/rcalixte/awesome-wayland&quot;&gt;awesome-wayland&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/rcalixte/awesome-wayland#widgets-bars-panels-etc&quot;&gt;awesome-wayland widgets section&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Application launcher: fuzzel&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;fuzzel came recommended by Niri, and it&amp;#39;s good enough for my usage as &amp;quot;an app launcher and window switcher&amp;quot;. I&amp;#39;ll try more stuff with it, like making some sort of GUI for Flatpak[1].&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/dnkl/fuzzel&quot;&gt;Fuzzel&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Terminal: foot&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I wanted to use kitty, but it crashes on Alpine for some reason. However, foot does the job just fine, at a much faster speed. I am considering switching to foot on the devices I use that support kitty, but it&amp;#39;s not a definite thing yet.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/kovidgoyal/kitty&quot;&gt;kitty&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/dnkl/foot&quot;&gt;foot&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;fish is used as the shell[2]:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://fishshell.com/&quot;&gt;fish&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Wallpaper program: swaybg&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;swaybg got installed when I (out of laziness) ran &amp;quot;setup-desktop sway&amp;quot; despite me not using sway, so I decided to use it. There&amp;#39;s not much to say; it sets a pretty image as the background.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/swaywm/swaybg&quot;&gt;swaybg&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The wallpaper is from Wikimedia Commons:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;https://commons.wikimedia.org/wiki/File:039_Northern_lights_over_M%C3%BDvatn_(Iceland)_Photo_by_Giles_Laurent.jpg&quot; alt = &quot;&amp;quot;039 Northern lights over Mývatn (Iceland) Photo by Giles Laurent.jpg&amp;quot; ((C) Giles Laurent CC-BY-SA-4.0)&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Notification daemon: mako&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;mako, like a lot of the other programs, came recommended by Niri, so I&amp;#39;m using that. It works well for its job.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/emersion/mako&quot;&gt;mako&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Conclusion&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Alpine is nice (even for desktops); go try it.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Always do major upgrades in a TTY console, never in something that can log/lock you out.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;My config is linked below:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/config&quot;&gt;https://codeberg.org/Pixelo789/config&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Here&amp;#39;s some more screenshots:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;screenshot_2.png&quot; alt = &quot;A screenshot of the Niri Wayland compositor. On the left is a terminal (with background focus), having run a test notification script, creating notifications of various priorities, shown in the top right corner. In the middle is fuzzel in the default app picker mode, showing available applications to launch.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;img src = &quot;screenshot_3.png&quot; alt = &quot;A screenshot of the Niri Wayland compositor. On the left is a terminal (with background focus) with fastfetch run in it, showing an ASCII version of the Alpine logo and some information about the system. In the middle is fuzzel in dmenu mode, showing three (3) currently available windows to switch to, created using a script.&quot;/&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[1]: Firstly, I can&amp;#39;t browse the Flathub site without JavaScript. Secondly, KDE Discover and GNOME Software are heavily bloated for the job of &amp;quot;search through Flathub&amp;quot;. Finally, using the &amp;quot;flatpak&amp;quot; command from the terminal is weirdly not terminal-friendly (i.e. output assumes long row, and it cuts off text with ellipsis instead of wrapping or having something competent).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[2]: I&amp;#39;ve set fish as the shell in foot, not globally. I think my current *global* shell is Busybox sh, but I&amp;#39;m not sure.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>That&#39;s it, I guess (free software) Android&#39;s dead now</title>
		<published>2025-09-01T00:00:00+00:00</published>
		<updated>2025-09-01T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-09-01-android-verifed-developers/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-09-01-android-verifed-developers/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-09-01-android-verifed-developers/">
			&lt;h1&gt;That&amp;#39;s it, I guess (free software) Android&amp;#39;s dead now&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Edit (2025-11-01): add a few pages for further reading, and changed instances of the word &amp;quot;sideloading&amp;quot;, as F-Droid has pointed out that it is a loaded word.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I used to daily-drive an Android phone (I have since moved on, but not because of this incident). When I started caring more about privacy and free software, I was daily-driving Android:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Without logging in to a Google account,&lt;/li&gt;
				&lt;li&gt;Putting a majority of the installed apps that are either unused or don&amp;#39;t need networking behind a firewall[1], and&lt;/li&gt;
				&lt;li&gt;Only installing apps from F-Droid and certain other apps using Obtainium.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org&quot;&gt;F-Droid&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://obtainium.imranr.dev/&quot;&gt;Obtainium&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;As you can see, a lot of my (and presumably others&amp;#39;) Android-based workflow involves what people would consider &amp;quot;sideloading&amp;quot;, installing apps that are not distributed within Google&amp;#39;s walled garden.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Unfortunately, that seems to be over now.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Android Developer Verification | Android Developers:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;Starting in September 2026, Android will require all apps to be registered by verified developers in order to be installed on certified Android devices.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://developer.android.com/developer-verification&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://web.archive.org/web/20250831105101if_/https://developer.android.com/developer-verification&quot;&gt;Archived source&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Basically, starting in September 2026 if you live in Brazil, Indonesia, Singapore, or Thailand, and at an unspecified time in 2027 &amp;quot;and beyond&amp;quot; everywhere else, you will no longer be able to install your own applications on phones with Google &amp;quot;Play&amp;quot; Services unless Google &amp;quot;verified&amp;quot; those developers.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In their announcement blog post, they make statements like &amp;quot;Android has proven that you can [be both open and secure]&amp;quot;, and that ID verification is somehow &amp;quot;a new layer of security for certified Android devices&amp;quot;.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://android-developers.googleblog.com/2025/08/elevating-android-security.html&quot;&gt;Anouncement&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://web.archive.org/web/20250830230057if_/https://android-developers.googleblog.com/2025/08/elevating-android-security.html&quot;&gt;Archived announcement&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is not for security. If Google wanted to make Android more secure, they would implement strong app sandboxing with a strong permission system and strong anti-malware system. They would then require all new apps to be highly restricted by default, with the *option of opting the app out*. Instead of doing that, Google has decided to gag developers for their ID if they want people to be able to install apps on their new phone.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Debunking their blog post&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In the post, they mention (in bold) that their &amp;quot;recent analysis&amp;quot; (which they do not link to and is likely not public) claims to have found &amp;quot;over 50 times more malware&amp;quot; from non-vendor approved sources than distributed through them. Google doesn&amp;#39;t mention how many other apps are out there. This statistic wouldn&amp;#39;t mean anything if there were 50 times as many apps from &amp;quot;internet-sideloaded sources&amp;quot; out there. Google is probably looking for a statistic to impress and convince people that handing them your ID will actually do something. As far as I know, this statistic isn&amp;#39;t even accurate, since there isn&amp;#39;t a source for it.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Later in that blog post, they claim that gagging-for-ID will create &amp;quot;crucial accountability&amp;quot;, liking it to an ID check at an airport; &amp;quot;[Google] will be confirming who the developer is, not reviewing the content of their app or where it came from&amp;quot;. This is a fairly bad analogy; ID checks (and airport security in general), at least in the US, can be easily avoided. Even besides that, Google admits that they&amp;#39;re not reviewing the app itself, just the person.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.theatlantic.com/magazine/archive/2008/11/the-things-he-carried/307057/&quot;&gt;Post about airport &amp;quot;security&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Throughout, they claim that ID-gagging will allow Android to &amp;quot;be open and secure&amp;quot;, and that this will somehow still allow Android developers to &amp;quot;have the same freedom to distribute apps directly to users through sideloading or to use any app store they prefer&amp;quot;. That may be true, but in a hollow sense. Sure, they have the freedom to distribute their app however they want, but only if they bow down to Google.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This situation has startling similarities to the parody piece &amp;quot;Right-to-Repair Wins!&amp;quot; by Jason Self, especially at the end: &amp;quot;The people have been empowered to choose, and their choice doesn&amp;#39;t matter&amp;quot;. Developers have the power to choose how they distribute their apps, as long as Google approves and (therefore) gatekeeps. That is, inherently, a restriction on freedom-to-distribute.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jxself.org/right-to-repair-wins.shtml&quot;&gt;&amp;quot;Right-to-Repair Wins!&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The &amp;quot;security&amp;quot; argument would be a lot better if Google wasn&amp;#39;t letting in malware onto their own platform (this post came just four days before Google&amp;#39;s announcement of their ID-gagging system):&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.zscaler.com/blogs/security-research/android-document-readers-and-deception-tracking-latest-updates-anatsa&quot;&gt;&amp;quot;Android Document Readers and Deception: Tracking the Latest Updates to Anatsa&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Workarounds and alternatives&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In both the dedicated page, the announcement post, and their slide deck, Google does not mention a way for an end user to get around this. Worse-case, real app installing (that Google doesn&amp;#39;t mediate) is de-facto banned. Even if Google will add an option for a user to turn the &amp;quot;developer verification&amp;quot; off, I do not trust Google enough for them to keep that option.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://developer.android.com/developer-verification/assets/pdfs/introducing-the-android-developer-console.pdf&quot;&gt;Slide deck&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This new restriction only applies to phones with Google &amp;quot;Play&amp;quot; Services, so users of custom Android ROMs, such as LineageOS, GrapheneOS, or Replicant, are fine. Unfortunately, this still affects everyone who, for one reason or another (permanently locked bootloader, requiring GMS for some reason, etc.), is stuck with the stock operating systems on their devices.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://lineageos.org/&quot;&gt;LineageOS&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://grapheneos.org/&quot;&gt;GrapheneOS&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://replicant.us/&quot;&gt;Replicant&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Because of this, and other attacks by Google, I can no longer recommend any distribution of Android as a safe and reliable platform for a free software activist or an ethicist. I can&amp;#39;t recommend iOS for the exact same reasons, just more exaggerated.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.androidauthority.com/android-15-restricted-settings-sideloading-3481098/&quot;&gt;&amp;quot;Android 15 cracks down on sideloaded [sic] apps even harder to protect users&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That leaves the remaining options at phones that run GNU/Linux, and they aren&amp;#39;t that good. Here are all the GNU/Linux-first options that I know of:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;The Pine64 PinePhone is not a good option, since versions of GTK past 4.18 are no longer hardware-accelerated on the PinePhone, breaking arguably the best camera app, Megapixels, among other things.&lt;/li&gt;
				&lt;li&gt;The Pine64 PinePhone Pro has recently been discontinued.&lt;/li&gt;
				&lt;li&gt;The Purism Librem5 is expensive and dated, and their Liberty Phone is pretty much the same but made in the USA and 150% more expensive.&lt;/li&gt;
				&lt;li&gt;Anything from Jolla leaves you at the mercy of the proprietary Sailfish OS and, therefore, Jolla.&lt;/li&gt;
				&lt;li&gt;Anything from Volla (unrelated; just a similar-sounding name) similarly leaves you stuck with Ubuntu Touch (which uses things from Android), although at least it&amp;#39;s freer.&lt;/li&gt;
				&lt;li&gt;The FuriLabs FuriPhone FLX1/FLX1s is probably the best out there right now in terms of usability; however, like the devices from Jolla and Volla, you&amp;#39;re (as of writing) stuck with their &amp;quot;FuriOS&amp;quot; (Debian), which uses Halium (an Android-related thing).&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wiki.pine64.org/wiki/PinePhone&quot;&gt;Pine64 PinePhone&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://linmob.net/gtk-418-the-pinephone-and-megapixels/&quot;&gt;&amp;quot;GTK 4.18, the PinePhone and Megapixels&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gitlab.com/megapixels-org/Megapixels&quot;&gt;Megapixels&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://wiki.pine64.org/wiki/PinePhone_Pro&quot;&gt;Pine64 PinePhone Pro&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://pine64.org/2025/08/14/august_2025_short_update/&quot;&gt;Post announcing the discontinuation of the PinePhone Pro&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://puri.sm/products/librem-5&quot;&gt;Purism Librem 5&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://commerce.jolla.com/&quot;&gt;Jolla&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://volla.online/en/devices/&quot;&gt;Volla&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://furilabs.com/shop/flx1/&quot;&gt;FuriLabs FuriPhone FLX1&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://furilabs.com/shop/flx1s/&quot;&gt;FuriLabs FuriPhone FLX1s&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;You also have the option to get an Android-based device and run, for example, Ubuntu Touch or postmarketOS. You would still have to deal with Android stuff, but it could be another option, depending on the device you get.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.ubuntu-touch.io&quot;&gt;Ubuntu Touch&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://postmarketos.org&quot;&gt;postmarketOS&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;If you&amp;#39;re fine with Android, despite all this, I&amp;#39;d suggest getting a modern Pixel (7, preferably 8 series or newer), flashing GrapheneOS until they drop support, then going to LineageOS and hoping for the best, assuming your device will last that long. The problem with being on Android, even derivatives, is that you&amp;#39;re at the mercy of Google, and Google can&amp;#39;t be trusted.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://lineageos.org/&quot;&gt;LineageOS&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://grapheneos.org/&quot;&gt;GrapheneOS&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;One of the best alternatives might be getting a mobile hotspot and a laptop, tablet, or cyberdeck. You can run GNU/Linux on the device, and connect to the hotspot when you need network access on the go. If you need to communicate via SMS or traditional phone-number based calls, you could get a VoIP number or a burner phone, potentially even, e.g. redirecting those messages to an XMPP or IRC account.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Another great alternative is to forego another device entirely. If you need internet access, public Wi-Fi while using Tor is probably suitable. If you desperately need to, for example, make a phone call, and VoIP isn&amp;#39;t suitable, you can always borrow someone else&amp;#39;s device.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Just remember that, whatever option you choose, those communities are very nice and can help guide you, regardless of your skill level. We&amp;#39;ll help you gain more control of your device. We&amp;#39;re ready to bring you in.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;See also&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/2025/09/29/google-developer-registration-decree.html&quot;&gt;&amp;quot;F-Droid and Google&amp;#39;s Developer Registration Decree&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://f-droid.org/en/2025/10/28/sideloading.html&quot;&gt;&amp;quot;What We Talk About When We Talk About Sideloading&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://keepandroidopen.org/&quot;&gt;Keep Android Open&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://lemmy.world/post/35441022&quot;&gt;This post on linux@lemmy.ml [sic]&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;[1]: Note that this was before I heard of the internet permission that can be revoked via ADB, although that seems like more work than a firewall. As far as I can tell, you do &amp;quot;pm revoke &amp;lt;app_id&amp;gt; android.permission.INTERNET&amp;quot; in &amp;quot;adb shell&amp;quot;. GrapheneOS exposes the permission directly in Settings as a normal permission, which Android doesn&amp;#39;t do, for some reason (we all know the reason; so it&amp;#39;s very difficult to make apps not surveil and phone home).&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>August 2025 Summary</title>
		<published>2025-08-31T00:00:00+00:00</published>
		<updated>2025-08-31T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-08-31-august-2025-summary/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-08-31-august-2025-summary/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-08-31-august-2025-summary/">
			&lt;h1&gt;August 2025 Summary&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Since I need something to start writing more, here is a summary of things I&amp;#39;ve done in August of 2025:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;New posts&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-08-05-i-made-an-ai-usage-policy/index.html&quot;&gt;I made an &amp;quot;AI&amp;quot; Usage Policy&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/blog/2025-08-08-low-standards/index.html&quot;&gt;Low Standards&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h3&gt;Notes&lt;/h3&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/ai/index.html&quot;&gt;&amp;quot;AI&amp;quot; Usage Policy&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I should probably rewrite/clarify &amp;quot;Low Standards&amp;quot; at some point.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Programs&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I haven&amp;#39;t worked on any public programs, mine or otherwise. However, I still programmed. My workflow when writing/creating a program is to create a program (e.g. through GNOME Builder or as a random folder in my &amp;quot;programmin&amp;quot; folder), work on it a lot until I decide it&amp;#39;s good enough for the public, and then I upload to my Codeberg account. When the software is ready, it&amp;#39;ll be made public.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789&quot;&gt;My Codeberg account&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Other&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;School&amp;#39;s started back up again, and these first few weeks have been a bit stressful. I have a weird situation for school, and I was originally not enrolled for my electives, leading to me getting frustrated. However, that issue seems to have been as much resolved as possible.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;School is a source of stress for me, and I frequently use programming to escape that stress. Hopefully, this means I&amp;#39;ll release something new Real Soon Now.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I used to daily-drive Debian on my desktop computer. A few days ago, I decided to attempt to upgrade from Debian 12 (my current version) to Debian Testing. However, in the preliminary upgrade to Debian 13, my system got messed up, and broke audio (a priority), among other things. Even though I had made a full disk backup prior, I decided this would be a good opportunity to switch to Alpine, and to use Niri instead of KDE (not to discredit KDE; I just prefer the scrolling tiling workflow, and Karousel doesn&amp;#39;t support multiple monitors, like my setup). I&amp;#39;ll post something about that once it&amp;#39;s in a state I&amp;#39;m comfortable with.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://debian.org&quot;&gt;Debian&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://alpinelinux.org&quot;&gt;Alpine&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/niri-wm/niri&quot;&gt;Niri&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://kde.org&quot;&gt;KDE&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://github.com/peterfajdiga/karousel&quot;&gt;Karousel&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;That&amp;#39;s about it. See you in the next one!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Low Standards</title>
		<published>2025-08-08T00:00:00+00:00</published>
		<updated>2025-08-08T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-08-08-low-standards/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-08-08-low-standards/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-08-08-low-standards/">
			&lt;h1&gt;Low Standards&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;There is this series of television advertisements for a (proprietary) mobile video game, which I will not name for obvious reasons. The advertisements are pretty much &amp;quot;this is a game; get it because it has no advertisements and you can play it without the internet&amp;quot;.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This advertisement is stupid for quite a few reasons.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Firstly, the game is not only proprietary software, but also includes (likely predatory) in-app purchases. These will make people lose money, all for a few fake things in a game. Of course, the existence of these in-app purchases is only mentioned in fine print at the end of the advertisements. While these are important issues, I&amp;#39;m not going to focus on them here.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Secondly, the advertisements barely talk about the gameplay of the app (a generic match-3) at all. It only mentions that the game is ad-free and can be played without the internet. Some of the ads mention that the game is &amp;quot;fun&amp;quot;, but that&amp;#39;s it. This is the problem I want to focus on here.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Constant, targeted advertising and computers tethered to other people&amp;#39;s servers (what Big Tech calls the &amp;quot;cloud&amp;quot;) has become so widespread that &amp;quot;no ads&amp;quot; and &amp;quot;no internet required&amp;quot; are enough of a selling point to get users to your program, even if it is a bad program otherwise.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The crazy thing is that there&amp;#39;s an entire world of software, free software, that not only respects your freedoms, but is objectively better functionality-wise. Yet all of this superior software is less commonplace than their proprietary counterparts. These programs have the same feature-set of &amp;quot;no ads&amp;quot; and &amp;quot;no internet required&amp;quot;, but nobody&amp;#39;s flocking over to install those programs.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;This is likely because people don&amp;#39;t know about these superior alternatives. Free software (as the name implies) doesn&amp;#39;t make that much money that could be used for advertising. To prove my point, I haven&amp;#39;t seen a single ad for the following:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;Any GNU/Linux distribution,&lt;/li&gt;
				&lt;li&gt;GNOME, KDE, or another desktop environment,&lt;/li&gt;
				&lt;li&gt;The GNU Project or the Free Software Foundation,&lt;/li&gt;
				&lt;li&gt;Any computer that openly has the option to ship with GNU/Linux,&lt;/li&gt;
				&lt;li&gt;The End of 10 campaign,&lt;/li&gt;
				&lt;li&gt;Alternative social media sites, such as Mastodon/the Fediverse, or&lt;/li&gt;
				&lt;li&gt;Any free software code hosting site, such as Codeberg or Sourcehut.&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;However, I have seen ads for Windows 11 computers, Macbooks, iPhones, Android phones, companies pushing the destructive technology that is &amp;quot;AI&amp;quot;, proprietary VPNs, and proprietary software in general. This is probably because, since proprietary software companies make more money, they have more money to advertise to new users.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I guess the moral of the story is that if we want to get more people to use and be aware of free software, then we have to advertise for free software. People won&amp;#39;t switch to something superior if they don&amp;#39;t know something superior exists.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Sites mentioned&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gnome.org&quot;&gt;GNOME&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://kde.org&quot;&gt;KDE&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.gnu.org/&quot;&gt;The GNU Project&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.fsf.org/)&quot;&gt;The Free Software Foundation&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://endof10.org/&quot;&gt;End of 10&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://fedi.tips/what-is-mastodon-what-is-the-fediverse/&quot;&gt;Page describing Mastodon/the Fediverse&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/&quot;&gt;Codeberg&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://sourcehut.org/&quot;&gt;Sourcehut&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>I made an &quot;AI&quot; Usage Policy</title>
		<published>2025-08-05T00:00:00+00:00</published>
		<updated>2025-08-05T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-08-05-i-made-an-ai-usage-policy/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-08-05-i-made-an-ai-usage-policy/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-08-05-i-made-an-ai-usage-policy/">
			&lt;h1&gt;I made an &amp;quot;AI&amp;quot; Usage Policy&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I went on vacation a few weeks ago and didn&amp;#39;t bother posting anything. To get back in the groove, I started with something &amp;quot;simple&amp;quot; and made an &amp;quot;AI&amp;quot; Usage Policy. It both states my policy (i.e. none at all, ever, for any reason) and reasons why &amp;quot;AI&amp;quot; is incredibly damaging to society.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;/ai/index.html&quot;&gt;&amp;quot;AI&amp;quot; Usage Policy&lt;/a&gt;&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Floor, ceiling, and truncate in Python</title>
		<published>2025-07-18T00:00:00+00:00</published>
		<updated>2025-07-18T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-07-18-floor-ceiling-and-truncate-in-python/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-07-18-floor-ceiling-and-truncate-in-python/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-07-18-floor-ceiling-and-truncate-in-python/">
			&lt;h1&gt;Floor, ceiling, and truncate in Python&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I am working on a music player which has a strict Source Lines of Code (SLoC) count. When looking for ways to lower that count, I discovered that I was importing the math module, just to floor a variable. In an attempt to remove the import statement, I looked at the official documentation for math.floor, and I saw this:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;...If x is not a float, delegates to x.__floor__, which should return an Integral value.&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://docs.python.org/3/library/math.html#math.floor&quot;&gt;math.floor&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://docs.python.org/3/reference/datamodel.html#object.__floor__&quot;&gt;x.__floor__&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://docs.python.org/3/library/numbers.html#numbers.Integral&quot;&gt;Integral&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;When I went to the x.__floor__ link, I found this:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;object.__round__(self[, ndigits])&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;object.__trunc__(self)&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;object.__floor__(self)&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;object.__ceil__(self)&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
			&lt;blockquote&gt;&lt;p&gt;Called to implement the built-in function round() and math functions trunc(), floor() and ceil()....&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Basically, instead of running the following:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;import math

float_value = 4.72
print(math.trunc(float_value)) # 4
print(math.floor(float_value)) # 4
print(math.ceil(float_value))  # 5&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;you can instead run the following:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;float_value = 4.72
print(float_value.__trunc__()) # 4
print(float_value.__floor__()) # 4
print(float_value.__ceil__())  # 5&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;getting rid of the math dependency, and importantly in this case, one line.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Switching from Eleventy to Zola</title>
		<published>2025-07-15T00:00:00+00:00</published>
		<updated>2025-07-15T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-07-15-switching-from-eleventy-to-zola/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-07-15-switching-from-eleventy-to-zola/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-07-15-switching-from-eleventy-to-zola/">
			&lt;h1&gt;Switching from Eleventy to Zola&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Remember when I created this blog, and in my first post, I said:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;blockquote&gt;&lt;p&gt;expect some small to medium-sized changes to this site in the near future&lt;/p&gt;&lt;/blockquote&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Small to medium-sized my-&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Why I switched from Eleventy to Zola&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;When I created this blog, I didn&amp;#39;t know much about static site generators. I hadn&amp;#39;t heard of the Jamstack static site generator list. I only knew about Eleventy. Coupled with some tutorials, I was able to figure out the process in a day or two (I&amp;#39;m fuzzy on the details).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://11ty.dev&quot;&gt;Eleventy&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://jamstack.org/generators&quot;&gt;Jamstack static site generator list&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;But then I left my blog to rot. I, for the most part, forgot about it. I just left it there.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;How I found out about Zola&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;A few months ago, I was on the previously mentioned Jamstack static site generator list, when I discovered Zola. The premise seemed great: one single, fast binary with everything, written in Rust instead of JavaScript (in the time since I put up the blog, I acquired negative views for JavaScript, especially on desktops). I thought that switching to Zola would help me ditch both a JavaScript program and npm, which was installed exclusively for Eleventy.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.getzola.org/&quot;&gt;Zola&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Then, about a few days ago, I remembered about this blog again. I realised that I&amp;#39;ll likely never post on here if I stay on my current setup, so I decided to switch to Zola.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It was simpler to switch static site generators since I didn&amp;#39;t have to transfer over a large amount of posts over; I ended up creating a new site from scratch and transferring some of the information over.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;My experience with Zola&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;My experience with Zola was better than my experience with Eleventy. When I was creating this site in Eleventy, I ran into many roadblocks, like trying to make newer blog posts appear higher up on the blog index. The tutorial I followed to create the site was outdated, so even though it worked, I still had to figure things out myself, which led to a poorly made site which wasn&amp;#39;t as featureful as I wanted it to be.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://flamedfury.com/guides/11ty-homepage-neocities/&quot;&gt;flaMEd fury&amp;#39;s Eleventy tutorial&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;When I was creating this site in Zola, I felt much more comfortable. Configuration felt better, and I knew about more extensive (official) documentation. My experiences may have been affected by my overall increase in technical knowledge, but I partially did feel better with Zola.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;While this isn&amp;#39;t meant to be a tutorial, my general process was to follow their [overview](https://www.getzola.org/documentation/getting-started/overview) and other documentation, diverging when necessary to use themes and other things, such as using YAML front matter instead of TOML. Looking at the example Zola Bearblog site was also helpful.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.getzola.org/documentation/getting-started/overview&quot;&gt;Zola Overview&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://zola-bearblog.netlify.app/&quot;&gt;Example Zola Bearblog site&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/alinnow/zola-bearblog/src/branch/main/content&quot;&gt;Examle Zola Bearblog site source&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In command form, my process was about the following:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;pre&gt;zola init blog # initialise the blog; answer the prompts
cd blog

git submodule add https://codeberg.org/alinnow/zola-bearblog themes/zola-bearblog

vim config.toml # work on config.toml

# then copied my one blog post to the new site&lt;/pre&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;You can also look at the source of this blog at the below URL for a reference.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789/pages-src&quot;&gt;https://codeberg.org/Pixelo789/pages-src&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Overall, my experience with Zola was satisfactory, and I&amp;#39;d likely use it again for future sites. In addition, let&amp;#39;s hope there aren&amp;#39;t any unforseen major changes to this site in the future!&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>100 Days to Offload (or, let&#39;s actually write on this site)</title>
		<published>2025-07-14T00:00:00+00:00</published>
		<updated>2025-07-14T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2025-07-14-100-days-to-offload/"/>
		<id>https://pixelo789.codeberg.page/blog/2025-07-14-100-days-to-offload/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2025-07-14-100-days-to-offload/">
			&lt;h1&gt;100 Days to Offload (or, let&amp;#39;s actually write on this site)&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Wow, it&amp;#39;s been a while. Let&amp;#39;s fix that.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I decided to do 100 Days to Offload.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://100daystooffload.com/&quot;&gt;100 Days to Offload&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;Context&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Over the last few days, I was thinking back on this site and how I should probably do something. It&amp;#39;s been over eight months since my first post (which was pretty much &amp;quot;hey I made a blog&amp;quot;), and it&amp;#39;s been stagnant since. After thinking about it, I decided that I should start writing (again). I had also discovered Zola somewhat recently, and I liked it. I thought it would be a good idea to switch, abandoning my previous static site generator (Eleventy).&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://www.getzola.org/&quot;&gt;Zola&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;h2&gt;100 Days to Offload&lt;/h2&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The challenge is to write 100 blog posts, whatever they are, in 365 days.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;My thinking with doing this challenge is that, even if I fail (which is likely), at least I can put effort into this and actually *use* the blog. I am somewhat optimistic, as when I found out I only need to post twice a week, it seemed a lot more doable. I also have some plans for future blog posts.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;I&amp;#39;ll have a separate blog post for my experience with Zola tomorrow.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;Note that, since I both don&amp;#39;t have nor use &amp;quot;social media&amp;quot;, I&amp;#39;m not also promoting them on &amp;quot;social media&amp;quot;. I hope that&amp;#39;s still okay for the challenge.&lt;/p&gt;
		</content>
	</entry>
	<entry xml:lang="en">
		<title>Eleventy</title>
		<published>2024-11-04T00:00:00+00:00</published>
		<updated>2024-11-04T00:00:00+00:00</updated>
		<author><name>Pixelo789</name></author>
		<link rel="alternate" type="text/html" href="https://pixelo789.codeberg.page/blog/2024-11-04-eleventy/"/>
		<id>https://pixelo789.codeberg.page/blog/2024-11-04-eleventy/</id>
		<content type="html" xml:base="https://pixelo789.codeberg.page/blog/2024-11-04-eleventy/">
			&lt;h1&gt;Eleventy&lt;/h1&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;It was about two weeks ago. I was reading (at the time) the latest Tedium article about migrating from WordPress:&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://tedium.co/2024/10/20/wordpress-cms-alternatives-content-strategy-advice&quot;&gt;The article in question&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;In the alternatives section, the last of the five, Eleventy, intrigued me. I&amp;#39;ve never built a website myself (as in with HTML and stuff), sans a one-off private thing a few years ago, but I thought it would be cool to do everything myself. I could get a site to show off random crap in, and I already have a Codeberg account, so I could just use Codeberg Pages, which is free/libre *and* gratis.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://11ty.dev&quot;&gt;Eleventy&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.page&quot;&gt;Codeberg Pages&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://codeberg.org/Pixelo789&quot;&gt;My Codeberg account&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;About a week later (don&amp;#39;t remember exactly when), I took the plunge and started setting up Eleventy. Following the suggestion of someone else, I decided to follow flaMEd fury&amp;#39;s tutorial to create it. It was fairly simple; I just copy-pasted most of the code from the tutorial while figuring some of the other things out. As an example, it took *way* too long to figure out how to reverse a collection so I can display posts by newest-first; turns out I was using the wrong syntax.&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://gkeenan.co/avgb/an-alarmingly-concise-and-very-hinged-summary-of-what-it-was-like-to-build-this-site-from-scratch/&quot;&gt;&amp;quot;An alarmingly concise and very hinged summary of what it was like to build this site from scratch&amp;quot;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href = &quot;https://flamedfury.com/guides/11ty-homepage-neocities/&quot;&gt;flaMEd fury&amp;#39;s tutorial&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;/p&gt;
			&lt;p&gt;The site looks fairly decent. I&amp;#39;ll probably use this for showing off cool projects I&amp;#39;ve done (and will do), like programs and some real life stuff I&amp;#39;m working on. However, as of right now this site is still a work-in-progress, so expect some small to medium-sized changes to this site in the near future.&lt;/p&gt;
		</content>
	</entry>

</feed>