I’d like to talk about encounters and AI, which are currently the second most important thing I need to fix in Chains of Fury.
When it comes to encounters, I’m relatively satisfied with the first map—even with the wonky AI. But the further you progress, the worse it gets. Personally, I think the last four maps are downright unsalvageable in terms of encounter design. I simply ran out of time. Those last 25 sleepless hours before launch on Friday? That’s what they went into.
It’s a miracle there’s anything functional there at all, let alone that the game can actually be finished. Seriously. I knew it on launch day, but there was nothing I could do. So many bugs, so little time.
But what’s done is done. No use crying over spilled milk. Right now, aside from fixing colliders, I’m reworking encounters and tweaking the AI to make it good enough.
I built the AI using behavior trees, but that’s a whole story in itself—I rewrote the AI three times during development. Only on the third attempt could I honestly say I finally understood what I was doing. Keep in mind, we worked on this game for five years.
While Adrian built far more levels than I did, I still leveled up my coding skills along the way. I haven’t mastered dependency injection yet, but that’ll change soon.
Originally, the AI was just a basic state machine—idle, patrol, and chase—built using Unity’s Animator and a few scripts. But I wanted smarter AI, and during my research, I learned that games like Halo use behavior trees. The idea intrigued me.
When I saw a sale on a behavior tree plugin in the Unity Asset Store, I quickly integrated it. The problem? While it sort of worked (maybe even better than my current solution), I had no clue what I was doing. I’d click around in the editor, adding sequences and inverters, but it was all guesswork—no real understanding.
About a year ago, I decided this wasn’t sustainable and that I needed to learn the fundamentals. I bought a Udemy course from an instructor who’d previously taught me ShaderLab basics. It was a great decision.
The course walked me through coding a behavior tree system from scratch. It lacked the flashy editor features of the Asset Store plugin, but it was lightweight and readable. I planned to expand and refine it… but, again, time ran out.
Patrol bots were supposed to flee and call reinforcements. Enemies were meant to panic, seek cover, flank, or operate in squads with leaders. Instead, we got dice‐roll randomness.
At least I now have a system I fully understand—one I can improve for this game and future projects.
And that’s the silver lining of this overly ambitious project, which we somehow finished with just three people.