I have been doing software development for over 15 years, and I thought that I could apply some of my skills in another dev domain for fun. This time I wanted to try something different, and I started working on a tiny 1-bit retro game.
I heard many horror stories that gamedev is hard, and I wanted to get the heartfelt first-hand experience. While it is certainly true that prior experience helps, but gamedev requires a multidisciplinary approach. One has to compose music, create sound effects, draw tiles and sprites, think carefully about game mechanics and many many other things.
On top of that, I am a solo-developer, and I have to prioritize ruthlessly, i.e. whether a new idea adds something meaningful to a game, or it is nice to have but will drain my energy, and I will abandon a game quickly. I am lucky to meet great people in gamedev groups. Also, I find gamedev community very friendly and supportive. I am still miles away from the first playable build, but it is a rewarding experience.
Ironically, it surprisingly well aligns with my startup journey.
If anyone is curious, here is what it looks like:
It is a Pico-8 game. I will publish source code and assets when it is done to this repository: https://github.com/oneearedrabbit/maze/. Until that, a source code could be provided upon a request.
1-bit lighting is based on a marching square algorithm where a 2D field is “stretched over” a list with 17 dithering patterns with transparency. I use a custom polygon fill function to clip sprites based on the case from the algo.
A clip function renders a partially rendered tile and paints black the
remaining part. Something like
fillp(dither[bright]) rectfill(box, 0x70) fillp() customfill(15 - case, 0) where
customfill handles 16
cases based on a contour lines lookup table, and
15 - case mirrors
If case is 15 then you can draw the whole sprite and render a rectangle with a pattern fill based on the brightness. Case 0 is a black rectangle.
← Run Python in a sandbox with nsjail
Diggy: a zero-setup development environment →