Projects #
I've worked on lots of different projects over the years, from commercial videogames, contracted software development, little fun explainers, videogame mods and web frameworks. If you're interested in any of these, let me know! This is a rough order of projects I've worked on. There is a table of contents too so you can jump around if you'd like. The order roughly relates to how proud I am of these projects.
Table of contents #
Games #
Highlighted games #
Mirrormind (2025)
Mirrormind is a 3D Puzzle Platformer in a lo-fi dithered style, where you can shift perspective into any person you can see. Journey through a series of worlds to explore different points of view. See the landing page here.
This game was my first commercially released videogame. While I think the ideas presente din it are interesting from a design perspective, commercially it was a flop. The two main takeaways I learned from it, is that there is very low demand for puzzle games, let alone lofi style puzzle games, and that the player character and the setting being fairly unrelatable and abstract is part of what made it flop. Unfortunately, I was cornered in the design space as the player character had to be a cube for design reasons...
Quiver(2020)
A game that is effectively a clone of Teleglitch. I also rolled networked deathmatching with it, though it is a trust-based server-client architecture. This was effectively the first Godot game I made at a notable scale.
Other games #
Games Development #
func_godot_scene_import
A utility to go alongside the func_godot plugin for Godot. It provides an alternative importer for .map files that imports them as scenes which for procedural generation is essential. It is also generally useful for all sorts of usecases. You can find the source code for this here.
func_godot_conditional_point_class
A utility to go alongside func_godot plugin for Godot. It made it easier to make point classes with conditional models that displayed inside of Trenchbroom. This has been archived and is no longer maintained as this approach was adapted and used upstream inside of func_godot. The source code can be found here.
RT-Texture2DArrayCreator
A small utility to make it easier to make Texture2DArrays within Godot. This kind of resource is needed if you wish to use Sampler2DArray within shaders if you need an array of sampler2Ds for any reason in shaders(i.e. for different clothes on an entity that are swapped between). The source code for this can be found here.
Websites #
risingthumb.xyz
The site you're looking at right now! It uses a fairly modified werc setup, which uses cgi, rc and plan9 tools as well as a lot of plain classic shell scripting tools like grep and awk to work. I'm fairly proud of all the tweaks and apps I've made for it that make this site run.
blackwindbooks.com
An online book store I made with next.js. The idea is there, however there is not much available on it currently. You can view the site here. It has delivered books to various international customers.
blackwindsoftware.com
A fairly blank site so far. You can see it here. It is intended for hosting the landing pages for my games. As an example, Mirrormind's landing page.
explainers.risingthumb.xyz
A small little website for me to put little web toys that explain concepts in an interactive or useful way. For now, there is only an explainer for the monty hall problem. You can see this here.
agora-zine.risingthumb.xyz
A site for listing past issues of the Agora zine. This is a zine that is published occasionally for folks on the Agora Road Macintosh Cafe, a forum focused on vaporwave. You can find this site here.
achtung.risingthumb.xyz
A site for lots of galleries. So far it is mostly memes and amusing(potentially offensive and dark!) images. There are some pages on it which serve much more as reference material, such as the page on Cathedrals. You can explore this gallery here.
Travelers of Agora Road webring
I set up and now currently manage new additions to the Travelers of Agora Road Webring. This is mostly consisting of users and ex-users of the Agora Road Macintosh Cafe Forum. This is set up as an open source project available on github so that it can handle the bus factor, as this is technically V2 of the webring. The person who hosted V1 of the webring disappeared off the face of the internet and his version of the webring required some javascript that opened up a lot of sites to a very obscure sort of attack(if someone acquired that domain name), so the approach was changed to a static HTML page that is unlikely to be taken down and easily forked.
Misc website tools #
Neocities blog uploader
A little helper script for uploading your site to Neocities without using the UI. Made hosting a blog on neocities much easier. This is no longer maintained, however it can be found here.
Werc #
Werc is a minimalist web anti-framework built following the Unix and Plan 9 tool philosophy of software design.From the werc homepage.Werc avoids the pain of managing collections of websites and developing web applications.
- Database free, uses files and directories instead.
- Written using the rc shell, leveraging the standard Unix/Plan 9 command toolkit.
- Minimize tedious work: eg., no need to ever write HTML, use markdown (or any other format) instead.
- Very minimalist yet extensible codebase: highly functional core is 150 lines, with extra functionality in modular apps.
Below is a list of utilities and apps I have written for werc.
werc-bootstrapping-scripts
This is two scripts to simplify the setup for werc using my slightly modified werc build. This makes getting werc installed on a Debian machine, having all dependencies installed and in the right place a breeze(as plan9 utilities on Linux can be a bit painful to set up), and provides a working apache2 configuration for whenever you need to add a new werc site.
The bootstrapping scripts can be found here. It ends up deploying a werc setup that looks like this. This werc setup is modified from the default werc setup as it provides a testbed site to try out the different apps, as well as changing the sitemap template as well as providing support for multipart-form-data encoding types(allowing for file uploads and large text uploads making site modifications a breeze).
Gallery
A little utility that overrides the default directory listing of werc with one that provides a nice gallery of images as 3 column masonry. This can be found here. My achtung provides a good visual demonstration of the Gallery app.
Better Navbar
A little utility that overrides the default navbar for werc with one that uses summary and details tags in order to make one that lets you explore the full structure of a site without having to navigate to a page to go deeper to a particular page on the site. This makes the overall site experience a lot nicer. This can be found here.
Bridge
A tweak of the default bridge app that allows you to delete comments people have made. This is responsible for my Guestbook. The source code can be found here.
Search
A little utility that provides a search bar on the sidebar for searching the entire website for any mention of a word. This makes searching for something much easier. This uses ripgrep behind the scenes so is remarkably fast. You can see the source code for this here.
Metadata
One of the most important apps I made for werc, but useless on its own. It provides functions that make it possible to tag pages with metadata and add them to a GNU Recutils database. This strays away from one of werc's goals of not using databases, however this database is not SQL and is a plain text file so is a lot easier to manage.
dirdir
The most important app for werc. This handles creation of files, folders, deletion of files and folders and editing pages all within werc so you don't have to use a complex ssh or file syncing setup to make changes. As a result, it provides a seamless editing experience. The source code for this can be found here.
Goralog
A high importance app for werc, at least for my usecase. Depends on Metadata. This makes it possible to create blog posts in any folder, and then list all the blog posts and also provide RSS feeds for them. The source code for this can be found here.
Graphics #
Doom Fire
A graphical implementation of the PS1 Style DOOM fire. I had previously implemented this on the CPU for a game I made called Quiver for the main menu, however this didn't run well on low end hardware. As an interesting forray into shaders and graphics programming, I wrote a shader that does this style or fire for the Godot 3.X engine.
The engine-specific trick used here, is to use a viewport texture as a texture buffer to retain the previous frame's state, and then to pass that in as a texture for the next frame. If I were to recreate this in Godot 4.X I believe computer shaders would be the way to go.
As a guide on implementing this, I followed Fabien Sanglard's blog post on the subject. Additionally, this implementation is featured in the doom-fire-algorithm repository listing this algorithm in a number of different programming languages.
Videogame mods #
Video game modifications. Covers anything from custom maps to custom weapons.
Garry's Mod mods #
[TTT] Monster Energy Drink
A small mod that adds a drinkable Monster Energy Drink, complete with animations, function as healing and physics for a dropped can once consumed. This was designed for the TTT(Trouble in Terrorist Town) Gamemode for Garry's Mod.
This mod has 10,323 subscribers and 130 favourites as of the time of writing, and can be found on the Steam Workshop.
[TTT] Doom Weapons
This is a weapon pack mod that adds all of the weapons from the original 1993 game DOOM to Gmod for the TTT(Trouble in Terrorist Town) gamemode.
As of the time of noting this, this mod has 2372 subscribers, 123 favourites and is a part of 573 Gmod modpack collections. It can be found on the Steam Workshop.
ttt_abandoned_warehouse
A map for Garry's mod, mainly designed for the TTT(Trouble in Terrorist Town) Gamemode.
As of the time of noting this, this mode has 4440 subscribers, 39 favourites and is a part of 396 Gmod modpack collections. It can be found on the Steam Workshop
[TTT] Wand of Universal Wishing
This is a custom traitor and detective tool that makes it so the next purchased item by either role is given to all players. This is one of my favourite mods from a game design perspective as it gives every other tool in a traitor or detectives arsenal orthogonal use cases by making everyone get them. It also leads to some very chaotic rounds that I quite enjoy.
As of the time of noting this, this mod has 545 subscribers, 6 favourites and is a part of 82 Gmod modpack collections. It can be found on the Steam Workshop.
Other
I have helped provide Lua debugging, testing, pre-release test games for the following mods for a friend. The majority of my involvement was in mentoring and guidance.
There are some further mods I have helped with pre-release testing.
Minecraft mods #
Discord Bots #
EzSpyCord
EzSpyCord was an early forray into some Python software development. At the time(2018) I was quite interested in Cybersecurity, and I made EzSpyCord as a functional little tool to poke around the more nitty gritty cybersecurity aspects of Discord. The central idea was that a person could make a Discord bot, distribute it as a sort of "trojan horse" where it has some neat features, and then use EzSpyCord to either collect messages in these discord servers or also to interact on servers using these bot accounts. I do not believe this kind of stuff is possible with Discord bots nowadays.
It is no longer maintained, and relied on a package called Discord.py. You can find the code for EzSpyCord here.
MZBot
MZBot was a utility and helper Discord bot for MineZ. It allowed you to access wiki information from within Discord, providing ASCII tables for a lot of the data as well as loot information. It would also allow you to configure and listen to any RSS updates from the Shotbow Reddit, Twitter and Forums.
It is no longer maintained, though you can find the source code here.
OpenSourceRealmsBot
This was a discord bot for the Dungeon Realms server which provided a few utilities such as NameMC searching and getting RSS updates from the Dungeon Realms Forums.
It is no longer maintained, though you can find the source code here.
Languages #
TWOONENINE-Lang
TWOONENINE-Lang was an experiment in "multi-stack", "multi-environment" programming where the environment and their variables would persist from node to node. This could have also allowed me to extend the nodes with custom behaviours. I got as far as implementing the core language, but never implemented the node behaviours beyond Node 0.
Personally nowadays, I think a mixture of this, and Forth/Uxntal style languages could be possible, and maybe even beneficial. These languages are stack based languages, that operate on a single(two?) stacks. If expanded to several stacks, routines could be written developing upon this, easing longer term stacking of data in memory. Perhaps even nodes operating on nodes... or stacks operating on stacks? Perhaps even stacks used as framebuffers or audio channels.
See the source code for an interpreter of this here alongside a sample program. It was never finished however it is a turing complete programming language.
UnknownFuck
UnknownFuck is an interpreter of a slightly modified version of BrainFuck with its characters substituted for other characters. As a result it is Turing complete. An interpreter for this language can be found here alongside some sample programs.
RecipeMarkdownLanguage
A very simple markdown language supporting headings, sub headings and bullet points written in shell script. It was intended to be used as a markdown language for cooking recipes. The format is remarkably similar to how both gemtext and roff markdown languages are with their tokens at the start of lines only.
md2html3.awk
While not strictly a standalone project, I feel like this is noteworthy. This is an awk script that can convert markdown into HTML. It has a few extra inclusions, such as easy summary/details tags, support for footnotes, support for gemtext style links as well as my own custom gemtext style images(these latter two are for backwards compatibility as for a time I used exclusively gemtext on my site.).
This awk script can be found here. As the name might suggest, it is version 3.
Other programming #
Advent of Code 2025
I have participated in Advent of Code 2025, writing my solutions in C-style C++. The repository for this can be found here. Raylib is included as a dependency as there is a UI frontend to pass in a text file and solve the puzzle for that file.
Advent of Code 2021 18/25
I participated in Advent of Code 2021, writing my solutions in Go. The repository for this can be found here
Advent of code 2019 13/25
I participated in Advent of Code 2021, writing my solutions in Go. The repository for this can be found here
Contributions to other repositories
Neofetch: Ueberzug image support.
Func_godot: Runtime map building documentation, Interior face removal, various cleanup and bug reporting.
xmenu: Number key support
mineflayer: Water slowdown physics