Loren Crain

Senior software engineer, indie game developer. Founder of bluehexagons, solo developer of Antistatic. Open for work.

Roles
  • Software Engineering
  • Game Development
  • Full-Stack
Core skills
  •  TypeScript
  • React
  •  C#
  •  Go
  •  C/C++
  • SQL
  • Node.js
Frontend web development
  •  TypeScript
  • React
  • Redux/Sagas
  •  JavaScript
  • HTML
  • CSS
  • Jest
  • webpack
  • npm
  • slate
Software engineering
  •  C#
  •  Python
  •  Rust
  •  PHP
  • git
Game development
  • Godot
  • Unreal Engine
  • Unity
  • HTML5 Canvas
  • WebGL
  • OpenGL
  • Game design
  • Esports
Systems
  • Bash
  • vim
  • Linux administration
  • Networking
  • Hardware
  • VMs/VPS
  • TrueNAS
  • OPNsense
  • Proxmox
  • PowerShell
Tools and software
  • Linux
  • Windows
  • Mac
  • Visual Studio
  • VSCode
  • ffmpeg
  • RDP
  • Trello
  • Bitbucket
  • GitHub
  • Jira
  • Jenkins
Other engineering
  • 3D printing
  • Soldering
  • Reverse engineering
  • Electrical engineering
  • Backyard engineering
  • Embedded devices
Major hobbies
  • Photography
  • Automation games
  • 2D animation
  • Music creation
  • Super Smash Bros.
  • Competitive gaming

Antistatic

2012 - Present

An uncompromising fighting game using a bespoke engine, built solo.

All Dependencies

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

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

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

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
  • Platform fighter mechanics: air dodging, wave dashing, light/heavy attacks, blocking, recovery, etc

Don't Starve Food Guide

Jan 2013 - Present

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.

bluehexagons.com

This website is hosted on a headless Linux server running nginx, written using modern HTML, CSS, and TypeScript. It's still under construction.