Senior group capstone I did at KSU in 2024. It is a smart fish monitor+feeder and mobile app that uses a servo, camera, and temperature sensor.
This project was my chance to explore many tools I hadn't yet, including:
- (Reliable) network communication over UDP/enet
- Network traversal and holepunching
- Writing server-side code for use with multiple clients
- Theming and translation tools in Godot
- Threading
- (Simple) systemd services
An untitled proof of concept rhythm game engine built in C++ with Raylib. There's some basics, like a scene manager and a very, *very* simple UI system. But the core of this demo is the two minigames demonstrating two different system stacks.
Batter is a more traditional minigame that streams music from an audio file and uses a Beatmap file to trigger various events at specific times. It does this by using a StreamConductor to keep everything in sync with the file. Thanks to 7th Beat Games for his old writeup on how he used this idea in A Dance of Fire and Ice.
Metrohop is an infinite minigame with no audio stream, so any sounds that are heard are generated from smaller samples on the fly. Instead of a StreamConductor, this minigame uses a DigitalConductor that tracks its own elapsed time (probably elapsed beats soon, as I suspect that will help BPM changes to be smoother).
The web demo seems much more finicky than native Windows/Linux builds.
Music and visual assets from Rhythm Heaven.
WITAG is a visualization of all the twists and turns of the relations spanning from the classic manga Rose of Versailles to the cult-classic multi-media franchise Revue Starlight, along with a couple of perhaps tangentially related things.
Presently, it is a semi-statically generated page that begins with a YAML file describing all of the nodes and links, which then gets read by Python fiddled a bit with Python before being output as a Mermaid graph and rendered locally on the client's web browser.
In the future, I'd like to add a lot more information, pretty it up some, and make it reactive: allow the user to look at links that are inspirational, based on connected staff, thematic, or just outright jokes. To that end, I will probably drop Mermaid at some point, but the switch to a whole new dependency is too large an investment of energy on something so self-indulgent for this exact moment in my life.
An unfinished fighting game engine written in C with Raylib. As it stands, it's probably the largest-by-LOC codebase I've ever worked on. But, were I to continue it, I would probably scrap a lot of what's there.
It's data driven to a fault. The goal of this was to make sure that battle planners wouldn't have to touch the main engine code, but I think this was a clunky solution. Had I continued, the character editor would have had huge, huge lists of floats and vectors and booleans to tweak aspects of each attack.
An embedded scripting language is probably the way to go; after all, that's how Arcsys and French Bread both seem to do it. Then no matter how crazy the designer wanted to make something, they wouldn't have to touch the engine.
SFX from https://heltonyan.itch.io/retroanimesfx
Sprites and palettes from Melty Blood Actress Again Current Code.
In summer of 2022, I remade a few different arcade games in Godot (Pong, Space Invaders, Pacman). This was for a few different reasons:
1) To have some more-recent finished projects to show off, since prior to that the last "finished" project I had was from a 2018 game jam.
2) To have a curriculum for teaching game programming (I never went through with finding students for this).
3) To prove to myself that I could finish something.
4) To get some more practice with Godot, of course.
Pong is available here: https://maqo.itch.io/pong-demo
Space Invaders is available here: https://maqo.itch.io/portfolio-demo-space-invaders
Pacman was never quite polished up, as the task of finding students with the semester so close on the horizon seemed too daunting, but it was most of the way there. In addition to the basic game, it featured a custom level feature where the player could edit a text file that the maze would be loaded from.
A text adventure game that I wrote many years ago in Python. Originally intended to be part of an experiment with Discord bots, now it lives by itself.
Technologically, there's not that much there, but it was fun to write.
An unfinished, but I still think impressive enough to show off, strategy game engine in the vein of Fire Emblem written in Python with Curses.
I worked on this for approximately the second half of 2021.
Ultimately what got me to stop was getting bogged down with trying to write the story; I am not a writer.
I was fairly happy with most of the code at the time. In particular, I was especially happy with the dynamic menus. Now, I'm sure I would change a lot, especially with how the transitions between the main menu, map screen, and following dialogue and map screens are handled. It would probably benefit from having a true scene system, rather than having absolutely everything be included in the UI stack.
I recall also hitting a small bump toward the end with having dynamic maps. That is, maps where doors could be unlocked, aqueducts flooded, stuff of that nature. The way that maps, tiles, and neighbors were constructed did not lend them to being modified after initialization, nor did it lend them to be easily made interactable. The bump wasn't so large that it stopped me in my tracks, but I did make me pivot to focusing on the story.
TUI application written in Python with curses to help keep up with both current and old anime.
I eventually stopped using this often in favor of Kodi due to it having better support for hardware acceleration on Raspberry Pi than any standalone video player, but I did use it regularly for the year or two where I tended to watch stuff on my desktop.
This was my first experience with using a website's REST API (to sync progress with MyAnimeList) as well as saving persistent information.
The initial setup for a user is a bit of a hassle, requires making some blank json files and copying a token from the browser's url bar, but I suppose I didn't notice since I was the only one who ever used the program.
Using the gemini protocol (a tiny alternative to http), hosted with jetforce, I run a blog on this same domain. It's mostly writing from 2021, mostly nerdy ramblings about games or programming.
To help organize it a bit more, I wrote a small (~200LOC) Python program to collect all the files in subdirectories, read some data from the top of them, and use that to generate the front page, which is used as the screenshot here. In essence it's a very simple templating tool.
You can browse the capsule here, but note that you need a gemini browser such as Amfora. More info about Gemini can be found here.