ScriptBuddy was a platform for executing scripts in a hugely popular online game. Used by thousands of users, it focused on human-assisted game AI that attempted to interpret the player's intended actions and enhance their abilities.
Overview
This application was developed to greatly speed up development time and improve the developer experience in the very limited Lua environment we were working in.
It allowed developers to simply work on their source files in their root git directory and everything else was handled for them on save. Sources were compiled multiple times, both with and without debug information, and distributed to their runtime directories so changes could instantly be seen, as well as to the obfuscated git directories so all of their changes were ready to be pushed to the shared repositories.
It offered greatly needed development functionality such as instant feedback for code errors, alerting the developer instantly via an audible beep and allowing them to view the error details directly in the UI.
Highlights
Devs only had access to source code for modules they worked on. Supports loading both obfuscated and source modules with automatic type detection.
Able to compile thousands of Lua files at speed via a multi-thread orchestrator that manages multiple LuaJIT processes and distributes compilation tasks between them efficiently.
Real-time source code monitoring allowing developer changes to be automatically recompiled on save and distributed to both local runtime directories and development git repositories.
Real-time compilation error detection instantly alerts developers to code errors via an audible beep and displays the errors from the LuaJIT process in the UI. This greatly sped up development, making up for the lack of default tooling in the environment we worked in.
Build individual modules or all modules. Developers could checkout the latest git changes to both source and obfuscated modules then run a rebuild of all modules to recompile the latest changes and update their run-time directories and shared git repositories.