← Back to Home
Bastion
Custom C++ tower defense with data-driven waves and merge states.
What is this game?
A top-down defense game on a custom C++/OpenGL engine. As tech lead, I rebooted the architecture mid-project, implemented monster and boss state machines plus a data-driven merge system, and built a file-parsing pipeline that made wave balancing roughly 4× faster.
Team Info
- Role: Tech Lead
- Team: 5 members
- Engine/Tools: C++17, OpenGL, ImGui, CMake
Contributions
- Implemented monster and boss state machines (Idle, Walk, Attack, Hit, Death; boss-only Summon/Stun) with clear feedback via floating damage-text effects.
- Built a unit and merge system defining melee, ranged, area, and buff units as data, formalizing merge rules, costs, and probabilities and live-testing them with ImGui tools.
- Moved wave configuration into external text files parsed at load, cutting the “save, build, and reload the level” loop from 62 seconds to 15–17 seconds (~4× faster) and making it much easier to retune wave timing and composition without touching C++ code.
- Rebooted the project’s architecture into a more modular, layer-based layout, preserving stable core logic while cleaning up dependencies so new features were safer to add.
Challenges & Solutions
- Unstable or unclear state transitions made combat feel random; explicit triggers, cooldowns, and modular state logic made behavior understandable and debuggable.
- Hard-coded balance values made tuning slow and error-prone; moving tunables into external files let us iterate by editing tables instead of rebuilding code.
- Parameter testing was slow without tooling; ImGui-based live tuning provided immediate in-game feedback for designers and programmers.
Gallery
Contact
Feel free to reach out.