From Flat Stats to Passive Trees

Posted by Jozef on: 2026-06-29

Our plan for this week was supposed to be the Tiered Units system: the White, Blue, and Yellow groups with custom modifiers and traits like Frenzied or Vampiric.

But, as it goes with indie dev, we felt a stronger pull to rework the core unit progression first. Up until now, leveling up was just a flat +2 Attack Damage and +10 HP. It worked, but it wasn't interesting. We decided to pause on the tiered groups and dedicate the week to implementing a proper unit passive tree instead.

The Passive Tree

Now, instead of just getting automatic stat bumps, you can actually choose how your units evolve. We've started with the basics: Attack Damage, Health Points, Attack Speed, and Movement. We'll be expanding this soon to include crit chance, multipliers, armor, and much more, the framework is built to scale.

Unit Passive Tree
First look at the unit passive tree.

Why the change?

We realized that if we want this game to feel rewarding, we need to give the player actual decisions, rather than just watching numbers tick upward.

Under the Hood: Fixes & Polish

It wasn't just the passive tree this week. We spent a lot of time cleaning up some "silly" bugs that were causing crashes:

  • Crash Fixes: Cleaned up some stupid mistakes in checkVictoryPlayer where we were accessing IDs without verifying if the player/enemy objects actually existed. Also fixed a crash where destroyed buildings were staying in control groups.

  • Visual Clarity: Spent way too long fixing the "jagged" UI selections on Windows. We ditched the procedurally drawn ellipses and moved to custom assets, which looks way cleaner.

  • The Blurry Map: Finally figured out why the minimap was blurry. It turns out SDL_HINT_RENDER_SCALE_QUALITY applies at the exact moment a texture is loaded. We were setting it to "1" (linear) for the main menu background(because it looked jagged when scaled down) and carrying that over to everything else. So the fix was switch the hint to "0" right after the main menu background has loaded its texture to memory, to maintain pixel-perfect textures.

  • Gameplay Polish: Refined auto-attack priorities, units no longer prioritize workers or buildings when they should be targeting combat units. We also introduced "Attack Persistence", if you issue a direct attack command, the unit will stick to that target and ignore auto-attack distractions. However, if no direct order is given, they'll still smart-target the nearest enemy. Also rebalanced resource costs and construction times to make the early game flow better.

  • Melee Pathfinding Overhaul: Finally killed the bug where melee units would get stuck attacking clustered targets. Added a new reservation branch: if a path is blocked, the unit now actively searches for a free sub-tile around the target (or re-evaluates until it finds a clear spot). No more units running in circles while they should be attacking.

  • General Tweaks: Fixed projectile rendering on high ground so they don't look disconnected from the terrain, restricted Cryopod drops strictly to enemy units, and officially renamed them "Cryo Orbs", it just makes more sense for the DNA/cloning lore.

What's Next?

We're already brainstorming how to take unit progression further, maybe actual unit "ascension" (e.g., promoting a marine to a sniper) or specialized equipment drops. But for now, next week, we are officially back on track to implement those Tiered Units.

Let's get back to work!