htcpp hosts the website you are visiting right now. Initially, I started it in 2021 as a way to try out io_uring, which is a fairly new asynchronous Linux Kernel IO interface (C++ wrapper: liburingpp). In July 2021 I couldn’t even come up with more features to implement, except TLS, which I decided to tackle in April 2022. After that I thought that not much more was missing to actually host something with it and a couple of hundreds of hours later I am still working on it to make that happen.
This excludes about 5 years worth of stuff I did before university and before I knew how to use git. There are also many dozens of weekend-projects that I have omitted and some way-more-than-a-weekend projects that are simply too incomplete/broken to show off in any capacity.
⏺ Most Effort: The projects listed below have an HTML attribute ("data-sort-effort") containing roughly the equivalent of the number of 8h work days spent on it. I do not show these values, because they are just estimated.
I’ve been a huge fan of Super Smash Bros. Melee for a while now, but it is relatively hard to get your friends into it due to the high technical skill barrier, requiring many hours of training solo to start experiencing “the real game”. Therefore I decided to try my hand at making a game that captures the spirit of Melee as much as possible while also making it a little more accessible and adding the modern multiplayer features that are sorely missed nowadays. I spent multiple thousands of hours working on it, but ultimately there are just not enough people interested in something like this and some time in 2021 I turned off the servers. You can still play it locally though.
melee-framedata is a website with in-depth frame data for Super Smash Bros. Melee, inspired by the move pages on SmashWiki. It is split into subprojects, meleeDat2Json and meleeFrameDataExtractor. First the character files are extracted from the Super Smash Bros. Melee disk image using gciso. Then those character files are parsed and dumped to JSON files using meleeDat2Json. These character files include small scripts for each move, called “subactions”. The subactions are then processed to extract high-level information such as move-length in frames, hitbox creation, change and removal times, and so on. Finally this data is converted to tables and diagrams describing the move (example: Samus Neutral-Air). To record the clips on the move pages I patched a Super Smash Bros. Melee disk image to color the hitboxes in the game’s debug mode according to my choice. meleeframedata.com bases their data on my work (see their Info section under “Data Sources”). I consider this one of the coolest things I have made, though it is hard to understand for most people what it is or why it is cool.
There was a time at work when our graphical interface was not working properly and I had to use vim for a few weeks. A few years earlier I spent a good half year with a vim cheat sheet in front of me to learn vim and concluded that I would never be as fast at editing text with it than I already am with Sublime Text. Since there seems to be a dire lack of an editor of the TextMate family (to which Sublime Text belongs as well) for the terminal, I decided to try my hand at it. This editor is not intended to be used by anyone else but me, so it can be fully tailored to my needs without compromises. It has multiple buffers, a command palette, C++ highlighting using tree-sitter, find and various cursor movements and I already use it for small editing jobs here and there, but some major features are missing to switch to it, which I have not gotten around to yet.
I wanted to make a game and decided to make a clone of FÄRG with online multiplayer, which I have wanted to do for a very long time. This of course comes with more constraints and more possibilities and you end up with a very different game (which was expected). I worked on this very intensely for a few months, but then found myself being somewhat on the fence about whether it is worth it to invest a couple thousand hours into finishing it. The repository is private, since I considered selling it and I don’t want to pay for servers at the moment.
We made this as a 4 man team (programming by me and Markus Over, art by Lukas Schnitzler (see also Termination Shock, Falling Nukes and Running People and SudoHack), music/sound done by Philipp Koerver) for Indie Speed Run 2015 with the themes being “rebuilding” and “ants”. The game is about the player (playing the plant) trying to regain its former majesty by managing resources and defending itself from foes cohabiting the forest. We reached the finals of Indie Speed Run with this project, after being picked by Jason Rohrer!
7dfps always was a game jam I really wanted to participate in, but it took a long hiatus and I missed the first few ones after that, so I wanted to make something special. I am very happy with this game, though it never really turned into what we had envisioned. I think it would take a few months of work to get it there and I kind of plan to maybe do that some day.
Much like Per Torpedum Ad Astram this was a game, where I really didn’t even try to make something anyone would like and I ended up having the most fun I ever had making a game jam game. I love the resulting game immensely, even though it is objectively unfunny and bad game design.
Usually Lua programs are profiled by setting hooks using the built-in function debug.sethook, but sadly these hooks are not reliably called in LuaJIT, which makes most profiling libraries for Lua not usable in the current version of löve. jprof is a semi-makeshift solution for profiling löve applications with some extra work, but while also providing no significant slowdown while profiling. It is probably the piece of software of mine that is most used by other people.
LuaJIT bindings for the Discord Rich Presence library via FFI.
After writing wrapper classes for OpenGL primitives many, many, many times and not liking them a year later, I (again) started writing wrapper classes, but this time with a slightly new concept. Having a low-level wrapper that extremely closely wraps the OpenGL primitives with as little opinions of mine mixed into it as possible and a high-level wrapper on top that makes common tasks easier. This finally proved to be the right balance, which I never seemed able to strike before. I am very happy with this and have used it in Arbitrary Complexity, IRPS Arena, muwa, myl and the examples for the glTF Library.
I consider every common configuration file format objectively horrible. JSON does not have comments, TOML is too complicated and inhomogenous, YAML is just completely crazy and huge (see here for more notes on this). So I thought I should make some YAML/JSON-like small format that puts an emphasis on being human-written and machine-readable (easy to parse!). The specification is not finished because there are some open questions, but it is enough to write a parser, which I have done for C++ and Python (my most used languages these days). I have used JOML files for muwa, htcpp, IRPS Arena and stuff that is not on this page or GitHub. I should probably finish it up and share it with the world.
As an avid user of the löve framework, I have been looking for an alternative for 3D games that has a “löve-ly” feel to it for a long time, but never really found a framework/engine I found appealing. So I started to work on a framework of my own, based on an older project of mine, NGN. kaun is a Lua module provided as a shared library and merely a replacement of löve’s graphics module (therefore to be used alongside löve). The screenshot is of an example project that started as a game for Ludum Dare 42 (which I did not finish, since too much kaun related work kept getting in the way – which I expected). The strength of the water foam is determined by the depth value differences between the ground and the water. It also features soft shadows (Percentage-Closer Filtering) and procedural terrain.
SudoHack has been featured in a number of blog posts on this blog (1, 2, 3, 4). After the main development period listed in the title, university demanded a lot more attention from me and I had to hibernate development until December 2015. Then after working on it again I realized that I somehow lost track of the vision for this game and I had to stop and just think about it for a while. After finishing my Bachelor’s degree I wanted to continue, but somehow never recovered my initial intention for the game. I still like what the game was, so I’m sure there will be more iterations of SudoHack.
I have never really liked any game engine for 3D games, which turned out to be a problem in game jams many times. I have also tried to fix that problem many times and never succeeded. This is another iteration, where I wanted to use the LuaJIT FFI to access structs I built at runtime, specified in TOML files (e.g. components.toml). If you are a programmer, you might be thinking “what? oh no.” and you would be right. This relies heavily on undefined behaviour and it breaks in shocking ways across compilers and compiler versions. The core idea was that there was no distinction anywhere between a component defined in Lua, TOML or C++ and while does enable some cool features, you could have them without this extra complication. I consider it a research project more than anything, but it is something I really needed to have tried.
After having used a great many C++ command line argument parsing libraries, I always found it annoying and redundant to plumb their output into a struct which contains the CLI arguments in a well-typed way. I had been pondering whether there was a better way to do it and finally had the idea that I decided to implement in this library. I have used it for htcpp and I am pretty sure I like this much more than any other library I have used, so I will keep using it.
At work we started using Prometheus, a metrics and alerting system, and I decided to play with it in my home server setup, after which I kind of fell in love with it. I decided I had to add support for it to htcpp, but make it a self-contained reusable library, so I get to use it again in the future.
Made with Raphael Willerding, who created the artwork. At the time of making this I spent a lot of time thinking about skillful movement in video games (and that I observe it as slowly being less prevalent), so I decided to make a game about maneuvering a single room (theme: “one room”) with non-trivial movement options that can be used creatively. Though almost all of the options included seem to be very similar to some in popular Quake mods like Defrag, I have not played much Quake before making this game (and certainly was not able to pull of anything like this). During testing it was pointed out to me by a friend, that they were very similar which I was not aware of beforehand, so the game is named “Quark” (german for “curd”, often used as “junk”) to pay homage. I’m very happy with the result since we discovered how deep the mechanics actually were by constantly finding new tricks and combos and extending the level accordingly. Sadly it is not as accessible as game jam games usually ought to be, since the time needed to properly use these mechanics is more than a few minutes (close to an hour I’d say).
To supplement the awesome Tiled map editor, I decided to build an editor for non-tile based games. It is meant to be extended for each different game that one wants to build levels for. In the end it was not used for the game jam it was initially built for, but I used it in some other projects (such as Spectacular Shatter Buddies). I superseded it by a C++ version of it, muwa.
kraidGUI is a framework for creating GUI libraries, with a built-in löve backend. I only used it for Screwdriver.
Lost in the Stars is a “mini MMO” with everyone in the game jam venue participating during the presentation. Every player is placed somewhere in space, being able to move and transmit a signal into a direction. The goal is to find two other players with signals (sounds) different from their own and meet in one spot. The developers have the ability to overview the whole map. They guide the players towards each other by “pinging” them (which shows a special message on the client) and helping them find each other in real life, effectively mirroring what they do in-game. Such a game is obviously very hard to test, since a representative test scenario is difficult to set up. So we decided to make this a one-time event – A game that is only played (and gameplay-tested) once, ever.
A Python library to read and write Nintendo GameCube disk image files. Also has a command line interface that enables basic file operations. It is used by Melee Framedata.
I deliberately tried to make the worst game for TAG Jam, but won it in the end with this game. A game about flying a pirate ship in the sky and defending against laser shooting kittens inspired by one of my all time favourites, Starfox.
Tron Cruise is a 2-player Star Fox/Top Gun inspired TRON-like in which you either have to shoot each other out of the sky or avoid the other player’s trails longer than they can avoid yours. The general idea was to make a game with an unconventional control scheme utilizing our laptops’ webcams in particular. We used OpenFace to do face tracking and use your screen-relative real-world viewing direction to steer the ship. The setup is sadly not very simple, so the online version you can play for yourself only supports keyboard controls (WASD + V or Arrow Keys + L to steer + shoot), but the video linked above can give some idea of how the face controls looked like. If you try the online version, please consider using Chrome for reasonable performance.
The team that I was part of during this game jam was the largest team I have ever jammed with. So large in fact that I think there were some people in the team that I have not talked to for the whole duration of the jam. Seppi did full-time project management and game direction and I remember that he did a great job. For the longest time I thought that being a game developer in a large company is likely not something I am interested in at all, because I think that I mostly make games as self-expression and making someone else’s game is not something I’m interested in. This game jam made me reconsider, because it was actually quite nice not having to worry about everything, while still having room to mess around and put in things I think were cool.
Made for Spielmarmelade 2015 - dead, no archive, nothing, a game jam me and two fellow students organized at my university RWTH Aachen. A brief description of the setting and the gameplay as well as videos and screenshots can be found on the GitHub page. All in all I’m very proud of this project, even tough we didn’t manage to finish it. On the graphics programming and art side this is certainly one of the better game jam games I’ve seen.
welo is a command line weight and calorie tracker application that I used extensively to track the results of my weight loss efforts. In 2018 this tool helped me lose ~25kg.
fexp is a prototype of the file manager I wish I could replace Windows Explorer with. The general idea is to make “Sublime Text for file browsing” with a fuzzy matching command palette for all operations and also just for navigating directories. It also includes tabs and panes.
andross provides different backends, where a backend for löve is already provided. There is also the possibility to implement different importers, with the DragonBones format being supported out of the box. Originally it is written as a runtime for the Cutout Animation Tools plugin for Blender, so that there are still quite some compatibility issues with files exported by DragonBones itself. It is used in Spectacular Shatter Buddies.
This was a 2D multiplayer shooter (with basic networking) taking place on rock formations in space with very high gravity (watch the video!). My then roommate Jonas Lieb and I did this during a weekend and I still can’t quite let go of the idea, but have not found good solutions for some of the design problems that became apparent back when we made it.
A game about escaping impending doom in the form of a nuclear missile impact as a competitive local multiplayer platformer. Also highlighted as an “oustanding project” here.
I started a little “engine” with normal mapping, dynamic lighting and some cool pre-baked lighting for a potential Metroidvania I wanted to make. Most of the time was spent on technical aspects and I never got to include actual gameplay before the project fizzled away.
This is the oldest project on the list. I’ve worked on it for about 4 months while still going to school. It started out of the growing, but now faded trend of tower defense games. Starting university I got quickly distracted by other things, but it looks relatively nice and it’s 3D, so it is listed here.
This was my first project using Unity. The theme was “Waves”, so we made a game in which you play a bat, that is flying around at night and can only perceive its surroundings using the reflection of sonar waves in the environment. We also put significant attention towards proper support of Google’s Daydream VR — thankfully without much technical overhead, thanks to Unity. I didn’t really know much about Unity at that point but am now very much convinced of its power and ease of use. During the Jam I mostly worked on the controls and the sonar shader.
This was my first game jam game. The theme was “Evolution” and in this game a fungus (a cellular automaton) is spreading across randomly generated levels, taking over walkable space and turning it into breeding grounds for fungus zombies. The fungus has to be destroyed before it gets out of hand while dealing with said zombies that try to prevent you from doing so.
For most game jam games on here I remember quite well what features or game design aspects I had issues with or even how I ended up implementing some things, but for this game I mostly remember my team! I had a lot of fun with you all and this was probably one of my favorite Global Game Jams because of it. If anyone of you reads this, feel free to shoot me a message!
The theme was the sound of heartbeat (the actual sound). In this game you use your heartbeat to unveil hidden information and display the true feelings and thoughts of the characters around you. Rather pretentiously pointing to issues of our peers that often stay hidden to us, because of a lack of genuine attention.
Frontdown uses hardlinks for space efficient, versioned backups. I used this for regular backups for quite a while, but I have now replaced it with restic.
A two player local competitive multiplayer game on the theme “ritual”. In this game both players play serial killers that on their killing spree are hindered by their compulsive tendencies to perform certain rituals inbetween killing people. The lists of rituals to complete are randomized each time and both players race for their completion. The theme gave us some trouble, so the game sadly has a relatively generic and blunt setting, but in the end it turned out to be a solid 20 minutes of fun for two bored people sitting at the same computer.
A realtime strategy game made for “You are the enemy”-Ludum Dare where you have to coordinate a zombie invasion of randomly generated towns.
A very bad simulation, but a fairly fun game about being a flight coordinator. Made just for fun in a 48h marathon with my roommate Jonas Lieb.