Antistatic has been in development since 2012 as an experimental homage
to Super Smash Bros. Melee. It is built in a custom engine,
written in TypeScript and C, with a 3D OpenGL graphics engine.
Technical Details
Antistatic runs on top of Node.js, with the bulk written in TypeScript.
Native portions are written in C, and run as a Node.js addon.
Antistatic's matchmaking server is built in Go and is open-source.
I run it as a service on a headless Ubuntu server that I maintain, hosted by a popular VPS.
Graphics engine
The graphics engine is also split, with lower-level code written in C and OpenGL and much of the model
manipulation, vertex rendering, and animation written in TypeScript. FreeType is used to render a dynamically-growing
font atlas. Other libraries used include: GLEW for OpenGL bindings, SDL2 for window management, and SDL2_image for image loading.
Audio engine
The audio engine uses OpenAL-soft to interface with hardware. Files are OGGs, and libvorbistools is used
to decode them.
Netcode
Netcode is peer-to-peer and delay-based, and some infrastructure work has been done to move toward adding rollback in the future.
It runs on UDP, with higher-level messages encoded in JSON along with a binary stream of controller snapshots.
The engine attempts to synchronize beginning times and input delay, poke through permissive firewalls, and gracefully handle dropped packets.
USB GCN Controller Adapter Support
To connect to the official Wii U/Switch GameCube controller adapter, I used LibUSB to directly communicate with
the adapter over USB.
Internationalization
Internationalization is handled using Fluent, with the language files available on GitHub.
Currently, only English and Spanish have had human review.
Build system
Antistatic's build system is mostly automated starting from a build-free git repo,
pulling in and installing dependencies as well as building a few binaries. The process is
a mix of PowerShell and Bash scripts.
History
Originally, Antistatic ran in a web browser. The limitations started adding up,
and I made the decision to move to Electron and add a native add-on. When I couldn't
squeeze the consistent performance and hardware support I felt I needed,
I re-implemented more pieces in C and moved onto Node.js directly.
Senior UI Engineer @ Zazzle.com
Jun 2019 - Sep 2023
TypeScript
React
SASS
C#
Redux/Sagas
slate
SQL
Responsive design
Accessibility
Internationalization
Storybook
Jira
Bitbucket
Built and maintained frontend UI infrastructure and for public and internal
pages. The primary technologies I used were TypeScript, React, Redux/Sagas, and C#.
Application Developer @ Dexter Solutions
Feb 2014 - Jun 2018
TypeScript
Go
SQL
PHP
JavaScript
HTML
CSS
OAUTH integration
Linux system administration
Developed bespoke pages and utilities using Go, SQL Server, and TypeScript.
Enhanced legacy PHP, JavaScript, and third-party software. Administered Linux servers.
Lead Programmer @ Air Dash Online
May - Oct 2013
Unity Game Engine
Custom physics
Custom 2D collision system
Technical animation
Rapid prototyping
git
Air Dash Online was a prototype of a fast-paced platform fighting game by JV5 Games.
As the lead programmer, I built its custom platform fighter gameplay engine
inside of Unity and performed non-graphics programming.
Custom Tech
2D capsule-based attack collision system based on 3D animations
2D stage collision and management system
In-game controller remapping tech
Automated detection of some controllers for specific remapping
Keyboard, controller, and fight stick support
YAML parser
Animation sequencing, timing, interpolation system
The open-source Food Guide
(on GitHub)
was created to simulate the in-game crock pot, which crafts different dishes
depending on what four ingredients are chosen. It expanded to include more tools,
and has been maintained since Don't Starve was in Early Access.