Music. Coding. Gaming. Life.


Programming has been a hobby of mine since I was a child. I am entirely self-taught, and have managed to carve out a career in the field that spans over fifteen years.

Initially, I worked with BASIC on the TI 99/4A, Atari 130XE, and the Commodore 64 and 128. This transitioned easily to Mac OS 7's QBasic. Then I learned Microsoft Visual Basic 4 through 6 and starting making small programs and games. My first two programming jobs involved me learning Microsoft Access, with all kinds of back-end VBScript.

In 1998, I got heavily interested in web technology, and took a dive into HTML and JavaScript. Soon, I'd pick up Visual Basic.NET, C#, and ASP.NET. I was then able to transition my HTML knowledge to the modern HTML5 browser. My JavaScript experience also readied me for learning Node.js. Along the way I've picked up a bunch of PHP and C/C++ as well somehow.

In many ways, I consider the core concept of coding to come quite naturally to me. You simply break a task down into smaller and smaller tasks. What really fascinates me about coding, however, is how you can put all these simple tasks together to do something phenomenal.

I am involved in many projects outside of my professional career that involve programming in some way. This page is dedicated to showcasing those projects.

Current Projects

Commits and Releases

Fix FPS locking and FPS display implementations.
Add missing glDisableClientState call.
Update SDLMain.m:
10.9 changed how applications were launched, making the old method of detecting a Finder launch fail.
(5 total commits)
Fix FPS.
Fix license link.
Fix duplicate scroll input on windows 10 (from opentk/opentk@9ef456b)
Implement methods for PCM 8-bit and 16-bit output.
Fix bug with linking objects to a segment when the segment thinks they are already linked to that object.
Capitalize globals.
These don't need to be in the for loop.
Be certain with shields if shields are below 0.
- Send network token with UPID_GAME_INFO, so that the client already has it when we join.
- Initialize player stats for new ships at the beginning of a multi game BEFORE the level is loaded, so that the stats are initialized before receiving packets from the master.
- Implement a shields_certain flag on players to indicate to observers whether we are confident that the shield counts are accurate. Inaccurate shield counts can happen from out of order or dropped packets. Uncertain shield counts are denoted with a question mark after the shield counts.
- Fix clients setting Netgame.max_numobservers after receiving Netgame.numobservers
Fix run display and shield display on ships.
Seriously, how did this ever work??? Fixed observatory view.
Honor no cockpit mode if set.
Fix various bugs with the observatory interface. Still needs a bit of testing.
Typo fix.
Restore GOG notice.
Allow players to observe a game that hasn't started yet. They will wait at the menu just like a new player would until the host begins the game.
Since we're calculating FrameTime when paused, we no longer need to worry about resetting the last_timer_value when unpausing.
"Draw" energy gauge with a rect instead of a line, and fix coordinates.
Missed a version update.
Typo fix in scons
Windows 10 2017 Fall Creator's Update performance warning.
Released DXX-Retro 1.4X3
Fix Mac compile bug.
(17 total commits)
Reset obs when obs'd player dies in mine.
Use correct bool for determining if they died in mine.
Set player to died in mine if they died in mine.
Don't draw invuln if time ran out... this fixes a symptom, but I'm not sure why the flags aren't sending.
Only keep shield change alive when the shields actually change.
End level packet sent by observer is unnecessary.
Whoops, left bad code in.
Trying again, allow only certain packets from observer.
Allow observer packets through, but only accept packets if you're the master and it's a ping packet.
Temporary 1.4X7 multiplayer protocol.
Whoops, bug fix.
Various fixes with ship status.
The Observatory Season 8.
Fix mouse issues on automap. This fixes CDarrow/DXX-Retro#99.
Fix various bugs.
Remove streamers who have left the Discord server.
(2 total commits)
Restore check to ensure packets can only be received by the proper sources.
Upgrade to Discord.js 11.3.
Remove unnecessary code.
Calculate frame time independent of game time, and always calculate frame time so that functions that use FrameTime outside of when time is paused, such as the automap, can process time properly. Also, small optimization to debug printing.
Fix Mac compile bug.
Implement The Observatory interface as an F3 option while observing.
Implement The Observatory interface as an F3 option while observing.
Initial ship status code.
(33 total commits)
Nope, previous fix is a good safeguard but won't fix the bug. THIS will.
Nope, previous fix is a good safeguard but won't fix the bug. THIS will.
Fix bug with alternate colors.
(3 total commits)
Attempt to fix for Birdseye's bug regarding priority switch to a weapon you don't have after death.
Fix bug with alternate colors.
(2 total commits)
Re-enable powerups dropping from robots in co-op.
Re-enable powerups dropping from robots in co-op.
Testing potential fix to observing multi-level missions.
(12 total commits)
Testing potential fix to observing multi-level missions.
(12 total commits)
Add invuln packet for observers.
Release observers right before level transition, they will reconnect.
Observers better handle end of level.
Turns out that change wasn't necessary.
Various fixes to multi-level observing.
Forward end of level host packet to observers.
Let's try this one...
Don't check if the observer is out of the mine.
Typo fix.
Add appropriate readme for 1.4X6.
(9 total commits)
Attempt to always have 8 player starting locations. Fixes observer mode on some levels, and as a side effect this allows levels that don't have enough starting spots to work properly.
Increase MAX_RENDER_SEGS so that observers can see the entire level. Media Player