Floating point math: the gift that keeps on giving
Floating point math: the gift that keeps on giving

Most of the time, floating point numbers are great. They’re fast, they work like what you generally expect math to work, the sun is shining, the birds are singing, everything is right with the world. And yet, do not be misled: if you’re thinking this, you’re in a precarious position. It is a bit like looking at a cow and saying “look at this perfectly spherical object!”. At some high enough level you may be close enough with that presumption. But every now and then you work on something and irrational things start to happen and then you remember just oh how wrong you were before.  

Reversing game cheat codes lost to time
Reversing game cheat codes lost to time

A while back, when I was looking through my archives of old documents, files, and game CDs, one particular item caught my attention. It was an original CD for the Polish version of Colin McRae Rally 3 by Codemasters. When I played this game as a kid, I was terrible at it. Now the time has come to get revenge.  

When double.Epsilon can equal 0
When double.Epsilon can equal 0

Most of the time debugging isn’t really much to write about, especially in C# land. In a language executing on a VM, with a managed memory model, most bugs are relatively shallow and easy to fix, except for the occasional race if you’re doing multi-threading - so when suddenly it appears that comparison of doubles has stopped working correctly, all bets are off.  

Reflections on the first year of open source
Reflections on the first year of open source

On August 31, 2019, I submitted my first pull request to the osu!lazer project. It was supposed to be a trivial change, but I stupidly over-thought it - not sure if it was nerves, or just plain lack of experience. After a couple of rounds of review feedback and fixing the issues pointed out, on September 3, I was overjoyed to see the change merged upstream.  

Recreating Classic Video Games: Crate Pusher, Part 3
Recreating Classic Video Games: Crate Pusher, Part 3

After a lengthy hiatus, caused in part by the exam period and job searching, CratePusher is back in full force! In this installment I outline my efforts in polishing up the gameplay with some moderately flashy animations and transitions, using techniques such as input buffering, sprite cycling and animation curves.  

Recreating Classic Video Games: Crate Pusher, Part 2
Recreating Classic Video Games: Crate Pusher, Part 2

Continuing from where the first part left off, I describe the process of adding proper keyboard input support and implementing the game logic, while touching on some topics that might seem wholly unrelated, such as finite state automata and transactional data models. By the end of this post I will be able to present a “minimal viable product” of sorts!  

Recreating Classic Video Games: Crate Pusher, Part 1
Recreating Classic Video Games: Crate Pusher, Part 1

Playing computer games has been one of my favourite pastimes for far too many years now. The idea of being able to make a game has been one of the forces that drove me to pick up programming. Unfortunately, with time I’ve learned that there’s a tremendous level of complexity involved in every non-trivial software project. As I’ve never actually completed a proper game with proper graphics before, I shall start small — with a clone of the classic game Sokoban.