Posted March 19, 2025 by swordandquill
#devlog
Hello, wonderful humans!
It's been a while since my last devlog... I'll try to be more consistent with this! A lot has been added and changed since the last entry. I want to write a bit about the design process I had when finding some problems and how I chose to tackle them.
The biggest change was the reworking of the enemy turn and scrapping the retaliation move idea completely. That was a difficult choice as I really loved the "actio = reactio" concept in which an enemy action only occurs as a response to a player action, putting a lot of agency and control into the players hands. Want to do a lot of moves this turn? Better prepare for retaliation in return! The twist, however, was that the enemy's trick exhausts after a use and cannot be used again until next turn. That meant there was a sweet spot that the player could reach after which the enemy is completely exhausted and cannot retaliate anymore, giving the player free attacks (if they had dice left). I loved the idea of rewarding both ends, being cautious with your tricks and therefore receive less retaliation, or being so good with your dice and spending that you can overwhelm the opponent.
The system was inspired by Powered by the Apocalypse TTRPG rule set in which the enemies actually have no turns but depending on the player actions and their rolls, the GM gets to make a move in return. Unfortunately, I ran into design issues with this system that became problematic and I wasn't able to solve them within this design framework. So what happened?
I couldn't solve the answer with how to deal with the round end. Once the player had spend all their dice, they had to get new ones and that happened when ending the round and starting a new one, getting all dice back and rolling them fresh. So where's the problem?
Since the enemy only acts when you acted, starting a new turn did nothing, letting you happily roll until you have what you want. So I needed either a restriction or a punishment for spamming the end turn button. I tried:
First, it breaks the "when you move, the enemy moves" idea because you didn't do anything, your animon did not attack or do anything. The opponent got a random freebee and you didn't. I had to add something to the nice, short, crisp sentence and it became this mutation: "when you move, the enemy moves... unless you end your turn, then the enemy also moves". That right there is a bad sign. If the sentence gets longer to describe a mechanic, it's probably the wrong direction.
Second, it was unfair. You spend all your dice, used all your tricks, and then you have nothing left but to press the end turn button, seeing that the enemy is about to hit you hard with no option to defend against it except for switching animons or using an item. It did not feel good to be exposed to that extra attack.
Third, it was confusing. Often players did not understand why the enemy "suddenly attacked" which is basically related to the first point. And even if you did understand it, you often forgot about it, being in the groove of your rolling and planning and aligning your tricks for nice damage and then, oh, ups, I forgot there's this extra thing.
So that, together with the fact that I couldn't apply any dice mechanics to the opponent, led me to the decision to scrap that turn system entirely. Cutting a design darling is among the hardest things in game design (or at least from my experience working in teams for the last 13 years prior to this) but it's also one of the most crucial methods. If keeping a mechanic, even a pretty cool one, means I have to add several obscure restrictions to it to make it work, it's not something I want to use.
So off to the chopping block. Boop. Gone.
Phew, that felt actually good. Scrapping things can be very liberating, except when you then realize that you have to write an enemy AI now (careful, not the bad gen AI beep beeeeeeeep beep beeeeeeeep beeeeeep slop but the classic "enemy picks the left path because it's a shorter way to punch you"-sorta thing. Enemy AI is a thing. We've done it for decades! Some people might now point out that it's not AI but a behavior tree which is different and they are probably right but the thing is, I'm terrified of both equally, so tomato tomato)
So yes, the only reasonable choice was to apply the same rules to the enemy as I do with the player which means: rolling dice, spending dice, benefiting from double effects, suffering from dice conditions... the whole show. And I actually accomplished it to my utter surprise. As you might now, I'm not a very good programmer. Many years, all I could do is code super simple gameplay prototypes and then maybe, slowly, a game but... like dynamic shit? Logic? I'm just a lil' design guy.
But I powered through and went at it step by step. I came up with a point system to evaluate which tricks made more sense than others in each given turn. I awarded points based on damage or buff amount in comparison to the cost and deduced points for the amount of dice needed to pay for it so the enemy would decide that a stronger technique that needed more dice was not necessarily better than a weaker one that just needed one die, for example. Additionally, I awarded points for when the die color matched the trick's.
I refined it then further by adding specific cases to the evaluation. For example, if there was a trick with the precise tag (paying exact gives a potency boost) would be prioritized as it is usually very costs efficient or shield tricks would lose points if the animon already has shields (or set the points to 0 if there are no shield slots left).
There were lots of bugs to fix and cases I forgot to consider, like the opponent paying for a trick that was already free from the double effect or actually not execute a readied trick because it was growing (from the new patience dice effect). There's still probably lots of edge cases I have to fix but at the moment, it works pretty reasonably!
This was definitely a good decision and it opened up the possibilities for many fun effects now, on top of being more clear to the player. Having our newest animon, Najmagi, hex the opponent's dice so they all roll 1s is pretty neat!
Soulblaze was always about customizing your builds and team. The fusion screen lets you upgrade and alter your tricks, adding flavours (formerly "battle tags") to them and creating new synergies. You could slap a "double" flavor on a healing trick and boom, free healing any time you roll a double. Nice!
This mix and match was cool but it also meant that the unique flavors of the aspects (e.g. Fury has "Hungry", Wisdom has "Overflow", etc.) became diluted. The identity of the specific types less important and the tricks just mostly containers for you to fill with stuff. The fusion system was working great so I definitely wanted to keep that but I was thinking about adding mechanics somehow that made the different aspects (types) unique.
This led me to the idea of "outsourcing" some of the flavors and turn them into unique dice effect. This actually solved another problem of mine, namely the bad game feel of mismatching dice colors. So, initially, if you wanted to pay a Fury trick, you better had a Fury die to pay with or otherwise the payment was just 1 if the colors didn't match, no matter what you rolled. The idea was that you had to think about which aspects were in your team and how to pick your dice loadouts but led to a feel of unnecessary punishment, especially when you wanted to have four animons of different types. One of my design philosophies is:
reward smart player choices over punishing bad ones
Like with children. Yes, give them a lollypop when they shared their favorite toy with the annoying kid next door instead of playing Rebecca Black to them when they didn't. Okay, granted, bribing children with candy which probably also belongs to fucking Ne**lé might not be a great parenting idea but you know what I mean?
I want to reward players for picking their dice colors and matching them with their animons' tricks instead of punishing them when they end up having the wrong trick for their current loadout. And the new dice effects did just that. From that point on, you could pay any trick with any dice, throw a blue water dice on a fire trick, no problem but... you only trigger the specific dice effect when you pay correctly (so a Wisdom die for a Wisdom trick). The dice effects I picked to start with are:
You can read all the effects on the dice loadout screen.
Phew, that was long, wasn't it? We're almost done! I want to end with a brief summary of what the next update will bring. It's called the Mystery March update and the theme is, well, the Mystery aspect. It was added last and was lacking animons and tricks so this update adds more content to it.
there will be 3 new Mystery animons, 4 more animancer, several new Mystery tricks, and... a Twitch mode!
I'm working on the integration right now so if you plan to stream the game, you'll be able to let your viewers participate. As of now, viewers can vote for which path to take on the map and occasionally, a treasure chest gives the option to let Chat create a custom trick from scratch. I'm brainstorming more ideas constantly and will add more as I work on this mode so stay tuned!
Thanks for reading!