Fun vs. Balance: Defender's Quest 2 Progress for July 2020
In previous months we've talked about how we ensure that DQ2 is balanced.Today we're going to talk about how we ensure that DQ2 is fun.
Howdy Defender's Quest 2 fans!
Version 0.0.11 of DQ2 is up on Steam for our early backers.
Windows/Linux builds are both there. Mac is in limbo for now as previously discussed.
We're still chugging along on art, working on both creature design as well as some user interface stuff. Unfortunately we don't have anything to show yet, but rest assured progress is happening.
But on to the main event:
Fun vs. Balance
In previous months we've talked about how we ensure that DQ2 is balanced.
Today we're going to talk about how we ensure that DQ2 is fun.
It finally crystallized for me that one of the core loops of DQ2 is:
Beat level → Get rewards → Get new powers → Try out new powers
The most important part of the loop is the last step, the payoff:
Try out new powers
(Powers here meaning everything from a skill point investment to an item purchase or upgrade, a new "spell", anything that makes a difference in battle)
To get the payoff, the player needs clear feedback that the power they invested in is actually making a difference.
Clearer Effects, Better Feedback
This is what I'm talking about:
The Long Shot has a skill bonus called "zapped" which applies a brief electric-themed slowdown. Previously there was a tiny icon that would denote this effect, but during play-testing it just didn't feel very powerful and it'd be easy to miss that the status was being applied at all. But now we show a custom "x-ray" animation status that indicates the enemy has been electrified.
This does a few things:
- Draws the eye whenever the effect occurs
- Clearly denotes which effect is active
- Provides visual proof that the skill investment is doing something
It also makes the effect feel a lot more powerful.
It's easy as a programmer to think that making a skill really useful in terms of numbers is what's going to make it feel powerful, but you just can't pull it off without appropriate visual and audio feedback.
I'd always known this, but given we're still using placeholder art I was worried about "wasting time" working this stuff out until we had the real art in the game.
Now I realize that was holding me back.
Sure, I'll have to redo all these little skeleton animations when the real art comes around, but the visual design language is just as important to get right as the numerical balance, and it will serve as a good template when we start slotting real art in. And honestly, it was a few hours throwing together cheap two-frame stand-ins for each enemy types. Half a day well spent.
Here's a few other effects we punched up this week.
The Zerk's Life Drain ability – now little health balls get sucked out of the enemy and physically hit the defender:
The Bouncer's knockback ability – enemies now scale up in size as they get knocked backwards, which is meant to reinforce the fact that they're airborne.
The Bouncer's "flip" ability – which briefly stuns an enemy and negates any armor bonus while they're flipped. For now I'm using a "head stuck in the dirt" animation:
The placeholder art I'm using doesn't use the same perspective we actually want to use for our final art – we want a more 3/4's profile rather than a straight bird's-eye top-down view, which is why this one looks a bit awkward. The final art is going to very clearly represent that the enemy is in a vulnerable "upside down, belly-up" state.
That about covers it for effects.
Dividing the Parties
The other major change in this update is how we handle the two-party split. The big question I've gone back and forth on is – when you're playing as one party, should the other (inactive) party gain passive experience even though they're not "present?"
I've debated this over and over with all my gamedev friends and this community, eventually settling on "sure, they should get the same XP, why not."
However, I recently realized I had been evaluating this wrong. This isn't the first time surprising particulars that only arise during playtesting have overridden what felt like a rock-solid abstract theory.
Before, I was chiefly concerned with weighing "fairness" to the player against the "logic" of that party being absent in the story context. And on that scale, it seems you should really avoid inconveniencing the player out of some stringent desire to maintain the strict logic of the fiction.
What changed my thinking was something that came up in a recent playtest:
It's distracting and annoying when the inactive party gains skills that you can't immediately put to use in the next battle.
Going back to the core game loop at the start of this post:
Beat level → Get rewards → Get new powers → Try out new powers
Giving the inactive party XP interferes with this loop and the forward momentum of the game. Especially early on, when we're trying to introduce a whole bunch of different and varied characters one after another without overwhelming the player with too many choices at once. With XP-for-all, after every Black hat level you see all these little pings building up for the White hats, taking your attention away from the lessons you just learned in the battle you just fought, and while we're trying to get you to focus on the Black Hat skills and choices in front of you for the next battle, now you're being invited to worry about these other guys who you won't play with again until the next chapter.
The player is of course always free to go back and play previous White Hat levels at any time on higher difficulties, in pursuit of higher rewards. But that's an optional thing and we don't want our default design to push everybody towards that.
But, just withholding experience felt wrong, too. I found that as long as I could still see the inactive party it felt weird that they were there, but not gaining XP. So I made that party invisible when you're following the other team. But this caused a new problem -- now it felt like they'd been taken away from me! Where did they go? Are they still there?
I finally hit on a simple solution: hide the inactive party by dropping a big ol' banner with the livery of the active party, over the inactive party. So far it feels like it works.
This keeps the player's focus on the people you're currently playing with. In a future build I'll probably make it so that you can roll up the banner with a click if you still want to peek at the inactive team, because why not. In any case, it seems like a good default to help maintain focus and flow.
I imagine this will be a bit controversial, and like any change I'm always open to reversing it if I decide it wasn't the right move. But the game feels a bit tighter and more focused now, with the systems starting to pull together instead of against each other. We'll see if that holds up over the next few builds.
And that's the highlights. Thanks for all your support!
Here's the changelog dump for last month:
- Fix z-fighting in overlapping enemies
- Add special animation state effect for "zapped" status
- Add special animation state effect for "flipped" status
- Add special effect to knockbacked enemies
- Fix some bugs with shake effects when enemies are damaged
- Replace selection boxes with silhouette outlines
- Show life drain aka "vampire" effect by displaying little health balls
- Add tutorial to Black Hat Level 2 to assure the player the eliminator is tough enough to survive some hits
- When you're on an e.g. black hat level, hide the white hats in the party screen (and vice versa)
- Hide inactive party behind a banner with the livery of the active party
- Don't grant XP to the inactive party
- Modify shop stuff
- Fix shop upgrade message bugs
- Start tweaking the upgrade menu to make it clearer (sideways arrows, not vertical)
- Fix wrong messages in shops
- Fix wrong stats in shops
- Make talismans show a stat (defense)
- Change shop progression based on towns visited, not total # of blue stars earned
- Add tutorials to towns to highlight gear
- Nix cannon from shop 3
- Add white splash weapons to shop 3
- Add gear to shop 2
- First black hat town should have some protective equipment