these arent links

idk what to put here


Games

#

Kovarust is my attempt at a free Minecraft clone. I'm aiming for it to be a viable replacement for Java Edition eventually. It's written in Rust, and will hopefully be faster and more versatile than the original Minecraft, with as many features actually implemented as plugins as I could manage.

I've redesigned every aspect of this thing about 5 times before it's even compiling, so it'll taking me a while to get it right, but it is progressing.

# Linux : apk : exe : itch.io

Bounce-a-Meteor is a simple survival game where you need to protect Earth from meteors using giant trampolines mounted on either side of the planet. You need to strategize (or at least try, amid the chaos) and smash together meteors, combining them and making them definitely easier to manage with absolutely no downsides whatsoever. (Hint: They explode into fragments and make your life hell.)

If your Earth gets hit directly it gets damaged, and if it gets too damaged, it explodes. There's also a UFO floating around, if you can get it to land on Earth (good luck with that), you get a shield that can protect you from a couple hits.

The controls are pretty simple - A/D, J/L, โ†/โ†’, or left/right mouse buttons to spin the Earth, so the trampolines bounce incoming meteors away. On mobile, hold the left and right sides of your screen.

To play multiplayer, turn your mobile device portrait facing the other player, and hold the left and right sides on your half of the screen. On desktop, use the left side of the keyboard (A/D) for the left player, and keys on the right (J/L, โ†/โ†’) for the right player, or move the mouse to either half of the screen and use mouse buttons for that player.
Also, the timers in multiplayer become the pause buttons to save screen space. Just in case you accidentally pause and don't know how to get back.

I made BaM fully in Rust, directly using graphics & windowing libraries, and my own janky physics maths - game engines are cringe. All meteor and Earth sprites are generated on-the-fly using perlin/cell noise shaders.

History if anybody cares

BaM was my first ever (and probably last) game I uploaded to Google Gay Store when I was about 16, and man was that a painful process.
As Unity was all I knew about game dev at the time, that's what I made it in - the game was buggy and weird and the "animations" were a hack job, but it brought in 5ยข of ad revenue all-time, so it wasn't a complete waste of effort...

Anyway, because Google is Google, the game got taken down for not having a stoopid "pRivAcY PoLIcY" because GOOGLE'S OWN AD PLUGIN collected user data, and then a year later after I fixed that, it just disappeared again for no reason whatsoever. I swear, these "stores" have an endless amount of slop on them, it's literally impossible for a genuine game dev to get started, let alone make money. Anyway.

I eventually decided to ditch both Google and Unity and start remaking BaM on a more usable platform. I was really getting into Processing at the time, and what I came up was a fun game, but APDE's simplistic nature limited my app to a proof-of-concept.
Of course, the next step would be to (again) rewrite on a more robust platform. And what better platform than barebones Rust, with all its extensive Android support and mature gaming ecosystem? /s

It was definitely a challenge figuring out the workflows, but I managed to get an APK compiling, and even a WASM module, in the process developing my graphics "library" - I'm really happy with how everything turned out.

I'm still sometimes fine-tuning the physics and sprite generation, but the game itself is about finished. I'm hosing the web app, APK, & desktop binary here - you can get the sauce as a Rust crate either by clicking the link at the top of this section or through my Cargo repo.
The plan is to put it on F-Droid and collect some spare change from itch.io, once I can be bothered to work out the process.

#

Tetris

Back in the good 'ol days before I started learning Rust (and subsequently rendered my PinePhone useless by desoldering its SIM card reader using rustc), I just felt like playing Tetris.

So, in between pretending I was learning how to do loops in java for uni, I ended up making this in a day in C. It's under 400 lines long, so it could be used to dissect and learn programming in C, I guess.
Not that it's especially good code, but still.

#

2D Raycaster

Back when I was early into learning C, I figured I'd try making a 3D-esque game engine similar to DOOM. I knew nothing about graphics or GPUs, meshing, rasterization, or any of that advanced stuff (looong before I started learning Rust, let alone working on real graphics for Kovarust).

What I did know, however, was simple math - for each horizontal screen position, I raycast in the appropriate direction and drew a column inverse to the distance. While I was at it, I figured raycasting would make it easy to add non-Euclidean spaces (by way of portals), so I did that and ended up with a pretty neat terminal maze explorer.

(ok I cheated actually, I made something vaguely similar in a BASIC game-making app ages ago, but it was pretty janky)

#

3D Engine

After doing the above 2D raycaster, I figured it might not actually be that hard to make something similar to real GPU rasterization in the terminal with basic trig (matrices were still a foreign concept to me). Halfway through the project I quickly threw full triangle rasterization out the window, but I was left with a true 3D environment and wireframe props.

I didn't really know what to do with this - the original idea was to publicize it as some sort of rendering engine, but without rasterization it'd be a bit hard to look at for long periods of time. So instead, I turned it into a demo for rotating stuff using trig functions in 2, 3, and because why not, 4 dimensions.

good luck decrypting my old C code tho lol

#

Random scripts

A collection of games I wrote in zsh for one reason or another. I haven't tested them in bash because it's gay and you should be using zsh.

pong.sh is Pong in shell. W/S & J/K to move the paddles. Good luck with the collision system.

1248.sh is a minimal shell implementation of the classic 2048, but in a terminal and with Vim controls (also featuring saving/loading games). To save on space, tiles are incremented linearly instead of doubling (2048 = 2 ^ 11). If you have any other questions, consult the sauce.