If you want up to date info on some of what I do on my off-time, check out my GitHub!
The work I’m most proud of at the moment is SWS Addons and Evolved Role Progression; the descriptions on these are joined and were last updated in January 2023.
SWS Addons and Evolved Role Progression
SWS Addons GitHub
Evolved Role Progression GitHub
Both of these are modded addons for the game Arma 3 by Bohemia Interactive. As some background—together with my girlfriend, we founded an LGBT+ Arma 3 unit that does Halo-themed group content together every weekend, usually pulling 15-20+ participants that we manage. As we ran things, we found certain areas that we wanted to make improvements in the game for our members, so I started working on it.
I created and lead the work on both of these addons, which leverage a subset of C++ for configuration files and Bohemia Interactive’s custom scripting language, SQF, for dynamic interactions. The documentation on this is sparing and often incorrect, so much of the design has been trial and error. I single-handedly set up the CI/CD pipelines for these projects and publish them on the Steam Workshop to share with the members of our unit, which add things to the game like custom armor sets, an interactive role tracking menu to determine who has training in particular skills, and massive amounts of patches for other mods that did not work together well in game.
- GitHub Actions Pipelines
- SQF scripting
- Bohemia C++ Configs
- Self taught/ownership over all stages of development; discovery to client release.
Projects below are older, kept here for posterity.
Gulp Your Mud
GitHub
Hackmud is a simulated hacking game using JavaScript to accept input from a command line and provide input back in-game. Each script must be in a certain format that is not technically valid JavaScript on their own, because they are implemented as anonymous functions in order to preserve a sandbox experience. Additionally, certain tokens that are valid in-game are not valid JavaScript tokens, as they are text-replaced at upload-time to preserve the sandbox.
Gulp Your Mud is a project that I created import existing Hackmud scripts into valid JavaScript code, which then allows you to write valid JavaScript that could be used outside of the game – such as in a personal JavaScript engine. Additionally, it contains Gulp tasks that can sync the project files back to valid game files, replacing the symbols with the game’s own version – what I’ve called SeanJS, after the creator of the game.
This project grew somewhat organically out of my own personal engine for working with Hackmud’s code. I originally required a system that would allow me to sync scripts between users, and I didn’t want them to be inside of the game’s AppData. I then ran into the problem of resources – Hackmud is not a very heavy game, but any game running on a system is going to slow it down. As such, I needed a way to test out scripts without having the client running at the same time. This prompted the Gulp token stream replacement to and from valid JavaScript. Finally, I wanted to be able to share this with other people in the community. That is where the template came in, allowing users to import the existing scripts and have them parse in and out of the system at-will.
- JavaScript/ECMAScript
- Node.js
- Gulp.js
- Yeoman
- NPM
Fleet Management
GitHub
For COM S 339: Software Architecture and Design taught by Professor Lofti ben Othmane, one of our ultimate tasks was to improve upon an existing system created by a previous Senior Design team. The first project was written primarily with PHP, and had some Angular features with a separate RESTful API server that needed to be launched at the same time as the project to run successfully. Likely as a part of my own shortcomings, I was unable to get the original system to run, full stop. As such, I found it easier to recreate the system from the ground up, removing PHP and the separate server to utilize a pure Angular application.
It polls data to and from a Google Firestore database, allowing realtime updates to track statistics about a vehicle. In the process, I learned quite a bit about the Angular framework, as well as TypeScript and the advantages of automatic testing. I also learned authentication and storage using Google Cloud.
- Angular
- TypeScript/JavaScript/ECMAScript
- Google Firestore
- Google Cloud Authentication
KeepVSafe (Fleet Management v2)
Proprietary
For my Senior Design project, I worked with my colleagues on the behalf of Andrew Guillemette to create a fleet management system that preemptively warns fleet owners of potential dangerous driving by their employees. Using an algorithm created by a team of graduate students at Iowa State for grading the drivers’ performance, my job – alongside my peers – is to create an interface for the fleet managers to view the performance of the drivers and assess potential risks to driving safety. The intention of this is to prevent accidents before they happen by getting undertrained or underperforming drivers the training they require to perform safely within their vehicles.
The intellectual property for this project will be owned by Andrew Guillemette, and it is designed with the Des Moines Area Regional Transit Authority in mind as clients. During the spring 2019 semester, we gathered requirements and created a project plan for the client. The final product was a proof-of-concept prototype written in TypeScript using the Angular framework with the Google Maps API and Google Firestore for storage.
This is an excellent learning experience for project management and planning, especially as it is a large team made up of multiple moving cogs.
- Angular
- TypeScript/JavaScript/ECMAScript
- Angular Material
- Google Firebase/Firestore
- Google Maps API
- Python (Minimal)
RLG 327 File Parser
GitHub
For COM S 327: Advanced Programming Techniques taught by Doctor Jeremy Sheaffer, our semester-long project was to create a roguelike game using nCurses in C/C++. During this, we were provided descriptions of monsters and items that would be found in the dungeon in a very specific file format. Rather than create a separate reader that was locked to just monsters and one that was locked to items, I determined that a generic solution would pull the problem away from the project and ensure that it never needed regression testing – as it would become a black box library in the project it was used in.
Assembling the generic structure of the files was the most difficult part of this project. From there, it was merely a matter of making the functions available to read this file to a separate project, and then importing it as a separately-tracked Git repository in the core project.
It was an excellent experience in the file I/O aspects of C++, as well as using Git to maintain a project within a separate Git project.
- C/C++
- nCurses
- Git/Git Submodules