HN
← 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.