Software
I’ve been coding my whole life. Here’s some different software projects I’ve released:
gvsong
I created a music engine for the Game Boy Advance, called gvsong. It is a chiptune synthesizer that uses sink to write music patterns.
Watch a demo video of it running in a GBA emulator.
gvasm
In my quest to make Game Boy Advance homebrew games, I created an assembler specifically for coding in ARM/Thumb assembly.
It’s called gvasm. It supports pool literals, compile-time scripting, register renaming, and a bunch of other features!
whisky
I spent a couple months searching through hundreds of thousands of functions to find the best hash functions with fewest operators.
The result is the whisky library.
These functions are useful for random number generation, hash tables, checksums, or procedural game development.
sink
Sink is a scripting language I’ve been working on for a while now. It’s a minimalistic garbage-collected language designed for embedding into larger programs, with support for a REPL ideal for debug consoles.
It is currently in beta, and I am working hard to reach version 1.0. I’m really happy with it and think it’s a great little language.
There is also an online demo that you can play with.
polybooljs
The polybooljs library is the result of my research into polygon clipping algorithms. It can clip polygons against each other using boolean operations (union, intersection, xor, difference), and can handle coincident edges.
I updated and ported the library to TypeScript – it’s faster and uses ES modules:
- polybool on GitHub (2024)
- @velipso/polybool on npm (2024)
sndfilter
I’ve been reimplementing sound effects in clean C99 code. It’s actually pretty hard to find easy to use libraries that do things like reverb, dynamic range compression, or equalization filters. Well, not anymore!
midimap
The midimap program will intercept MIDI messages on Mac OSX, and manipulate them according to a script.
Some example use cases include: playing a chord when hitting a single key, mapping a sustain pedal to a key, stopping devices from sending reset commands, and printing out intercepted messages.
simple-js-synth
I built a basic three oscillator synthesizer using WebAudio, intended to be used as a simple drop-in synth for music experiments.
spline
Implementation of Catmull-Rom splines in C and JavaScript.
The library takes a list of points (2D, 3D, or 4D) and returns a smooth curve that passes through the points.
nvqm
I put together a library for numeric, vector, quaternion, and matrix operations, with implementations in C99, JavaScript, TypeScript, and Sink:
Tools
I make random tools for my own use. You can check them out if you want, though they aren’t really intended for others to use.
For example, Time Sink is a simple web app that uses my scripting language sink to create one second looping GIFs.