Dominic Szablewski
-
Why this Obscure Audio Codec is a Perfect Fit for the N64
Sorry for the clickbait title. I promise this post delivers: 44100 Hz stereo with near-Opus bitrates using about 4% of the N64’s CPU time. But first, some history: The options for playing and storing audio data on the N64 were dire. The PlayStation could just stream uncompressed redbook audio straight…
Published
-
How to Make a Nintendo 64 Game in 2026
Two years ago, I was Porting my JavaScript Game Engine to C for No Reason. I have since found a reason: making a new N64 game! The result is Xibalba 64 – a Wolfenstein 3D-like FPS. Modretro agreed to publish the game as a physical launch title for their M64 (a modern N64 clone), complete with cartridge…
Published
-
Additive Blending on the Nintendo 64
Did you ever wonder why explosions and other effects looked so much cooler on the original PlayStation than they did on the Nintendo 64? “Silent Bomber“ for the PSX “Star Fox 64“ for the N64 The reason is additive blending! Or rather, in the N64 case, the lack thereof. While the N64 actually did support…
Published
-
A Nintendo 64 Rumble Pak so Bad that it's Good
I'm currently working on a game for the Nintendo 64. Naturally, I wanted to support the N64 Rumble Pak. You know, this controller accesorry that gave you “force feedback” in a time where game controllers didn't have a vibration motor built in. What looked like a straight forward endeavor lead me stumbling…
Published
-
Synthesizing Music from JSON
tl;dr: pl_synth is a tiny music synthesizer for C & JS and an editor (“tracker”) to create instruments and arrangements. You can try it out at phoboslab.org/synth/ The song Microscope by Ferris / Youth Uprising playing in pl_synth Sonant is a brilliant piece of software. It gives you 8 tracks, where…
Published
-
A Simple Archive Format for Self-Contained Executables
The build/run instructions for the example games for high_impact were subtly wrong: make sokol ./build/game_sokol make sokol compiles the Sokol version, converts all assets and puts the results (executable and converted assets) into the build/ directory. So far so good. Where it falls apart is in the…
Published
-
Porting my JavaScript Game Engine to C for No Reason
high_impact tl;dr: high_impact is small game engine for 2D action games. It's written in C, compiles to Windows, Mac and Linux as well as to WASM for the Web. It's “inspired by” my original Impact JavaScript game engine from 2010. The name high_impact is a nod to a time when C was considered a high level…
Published
-
Rewriting wipEout
The source code for the classic PSX launch title wipEout was leaked in 2022. A few month ago I finally sat down to take a look at it. The result is a (nearly) complete rewrite that compiles to Windows, Linux, macOS and WASM. Thanks to WASM and WebGL you can play wipEout right in your browser! I'm not…
Published
-
QOA Benchmark Results and File Format Specification
The specification for the Quite OK Audio Format, announced in a previous blog post, is now finalized. QOA is a lossy audio compression format. Typical audio signals (44100hz, stereo) are encoded into 278 kbits/s, or more precisely 3.2 bits per sample – exactly 1/5 of the bits needed for an uncompressed…
Published
-
Time Domain Audio Compression at 3.2 bits per Sample
Audio formats typically fall into one of three categories: “lossless”, “complicated” or “bad”. After developing a simple image format last year, I tried to come up with an audio format that fits neither of these categories. In other words: a format that is lossy, simple and quite ok. Naturally, it's…
Published