Welcome to my portfolio. I am a software engineer, game developer, and aspiring musician based out of Minneapolis, Minnesota. Listed below are some of my personal projects that I have undertaken on my own initiative in the last few years.
I have created these projects, mostly video games, to advance my understanding of programming as a discipline and to learn new technologies. I choose to develop games because it requires many different skills and allows free expression of many novel ideas. As a programmer, one needs skills in algorithms, data structures, software architecture, networking, concurrency, optimization, clean code, and debugging, not to mention familiarity with many different technologies. As a game designer, one needs creativity, the ability to pick the good ideas from the bad, a strong vision, scope management, project planning, UI/UX design, and openness to feedback and criticism. One needs many artistic skills as well, but art is admittedly not my forte! Each project below has been designed and written entirely by myself except where otherwise noted.
TinyEMDR is a free and open-source tool for Eye Motion Desensitization and Reprocessing (EMDR), a psychotherapeutic technique involving revisiting traumatic memories while rapidly moving the eyes side to side, as one does when watching a moving target. Over time, this can provide relief from trauma and PTSD. This tool provides an easily configurable moving target with presets for common use cases. This provides psychiatrists with a free, simple tool to replace expensive proprietary alternatives like online EMDR services or physical light-bars, and allows patients who are familiar with EMDR therapy to self-administer therapy sessions.
I created this application because I noticed there was a gap in the market. There were no free, simple EMDR applications available to psychiatrists or patients. It was common in online discussions for EMDR patients, after becoming familiar with the process through a therapist, to wish to self-administer EMDR sessions between therapy visits but this was not possible as existing online services were geared solely to psychiatrists or required expensive online visits, and EMDR hardware is often prohibitively expensive. This is despite the fact that the software requirements are simple.
Written in JavaScript with jQuery and jQuery-UI for UI and PIXI.js for rendering.
Monument(working title) is an upcoming massively multiplayer online (MMO) browser game set in a wild, unknown land deep in the past. Discover the savage gods of the wilderness and build temples in their honor, or embark on a pilgrimage to the temples others have built before you. Survive off the land and avoid falling prey to the many terrible beasts that inhabit the world. The temples and wilderness encourage player cooperation to their mutual benefit.
MMO games are a notoriously complex genre of game, with stringent software architecture, real-time networking, performance, and parallel processing requirements, not to mention many game-design difficulties. With that in mind, I wanted to create a relatively small MMO as a challenge to myself and as a way to improve my skills. I am also taking the opportunity to learn Rust and Typescript for this project, two languages that were new to me before Monument, and to gain more experience with NoSQL databases.
Monument is playable in the browser. The server and bulk of the code is written in Rust using asynchronous architecture, which allows processing the infinite world in parallel. The server is backed by MongoDB (NoSQL). The client is written in Typescript with PIXI.js for rendering.
I am working with an artist for some of the art assets, but everything else is my work alone.
Strandships (on hold) is a story-driven single-player strategy game set five hundred years in the future, in a world where the Great Space War seems to be won and the people of the several colonized worlds settle again into peace under the flag of the Democratic Republic. Then, you awaken, the last hope and secret weapon of a dying empire. Reignite the war to change its outcome and uncover the Republic's dirty secrets. Explore and tame planets, build production lines, organize research, trade, design and build rockets to explore, ship cargo, and destroy your enemies.
My goals for this game are to create an immersive role-playing experience where players can strategize on many different levels. This includes deciding which planets to explore, how to fulfill quests, role-playing decisions, factory layouts, production goals, rocket designs, trade decisions, cargo shipping routes, and battle strategies. The game is also a test of an experimental game design where gameplay is split into two main loops that feed each other - the factory gameplay on each planet, and the overworld gameplay between planets. This is a UI-heavy game, perfect for gaining more in-depth experience with JavaScript, front-end web technologies, and UI design.
The game has been through many iterations, and while I plan to complete it at some future date, it is on hold in favor of working on Monument for the time being. This is because I have faced challenges related to controlling scope and meeting my own deadlines.
Strandships is playable in the browser. Written in JavaScript with jQuery and jQuery-UI, with PIXI.js plus GLSL for rendering.
A multiplayer first-person shooter game prototype, made with two of my friends. Our goal for this prototype was to learn the basics of Unreal Engine and also to test the gameplay implications of several unconventional gun designs.
Made in Unreal Engine 4, using C++ and blueprints (visual scripting).
A competitive multiplayer twin-stick shooter game prototype. The network architecture supports loading custom resources from the server, which allows for some level of seamless modding.
I created this game prototype to learn client-server architecture in the context of real-time game networking, and also as an opportunity to learn Lua. Written in Lua with Love2D.
A 2D platformer where the player dives into caves and attempts to reach the exit. The world has special liquid and sand physics that change the environment as you play, for example acid may slowly dissolve a bridge, lava may flow down from above, or sand may pile up and allow you to reach new areas.
Made over a weekend for a game jam. Written in C with SDL.