Alpha Devlog 1: Combat System
Long time no see. It has been four weeks since my last ero witches devlog, and, coming from a weekly devlog schedule that does feel like a long time. I know that you are aware that starting a new game takes a while, but I still wanted to give a sign of life to the ~700 people now following me. I just(mostly) finished the combat system, and want to talk about it in some more depth. Particularly I'll be talking about the changes since my first conception of it one month ago. If you want to see coomer content, just consider this a sign of life and feel free to ignore the rest of the text.
Remind yourself that overconfidence is a slow and insidious killer.
After the heights of the relative success of ero witches, I ventured to create a new game that would rectify all shortcomings of the old one. As some might expect, I quickly became overambitious and spearheaded some ill advised combat changes. Polishing and cleaning them has seem to be a speedrun in seeing how well the combat system of Darkest Dungeon is designed, and why it's hard to move away from that. As a spoiler, I can say that the final combat system is very close to the one in Darkest Dungeon 2. I'll follow the following pattern, first I'll list the problems in ero witches, then my first solution, and then the final one. The general trend is that I was somewhat too ambitious and had to scope down many planned features to come to a workable combat system.
Or see it moving on Twitter: https://twitter.com/i/status/1662897587928588288.
Positioning, from 4x1 to 2x2 to
A first one was the "four dudes (female) in a row" combat system that is the default in most JRPGs. Such a combat system means that positioning is a non-factor. As a result the best tactic is usually to snipe the squishy targets on the enemy side to receive an advantage in the turn economy. Ero witches tried to remedy that by alternating turns between you and the enemy. That isn't a very elegant solution and has its own problems. Additionally it makes fights very RNG dependent, since all enemies can attack all allies and there's no way to defend your squishy targets. Certainly this system could be improved.
I decided to work with two lines of combat. Characters could attack in front - to the side - to the back - to the side of the back. Though most moves would just target the front of the enemy line. The idea was that you would have two independent columns, each defending their own backline, slugging it out with the enemy in the same columns. Additionally, I had the idea to make each move only have one target, so you would only have to click the move and no longer the target of the move. That would save some clicks and speed up combat. Unfortunately, the system was too convoluted and, more importantly, didn't give much tactical depth. It also quickly became a mess when characters died and their spots opened up. But the largest problem were the animations, getting combat animations to work in this 2x2 grid was a pain. It hurt to code it, and I already foresaw the plethora of bugs that it would cause. It wasn't workable.
I then decided to go for the "four dudes (female) in a column" approach of Darkest Dungeon, and it was a welcome relief. Calculating target positions was easy all of the sudden and the tactical depth of the system also became clear. It organically lends itself to different classes with different abilities and forces the player to think about the positioning of their party well. Animations were pretty simple as well, since everything happens in a single row. As a bonus it allows the combat puppets to be slightly larger. A final thing is that I got rid of the overview image to the left, it allows more focus on the characters but mostly it saves a ton of time (the combat puppets aren't final btw).
Stats, from self-contained to unrestrained to streamlined.
Ero witches keeps it's in dungeon stats clearly separated. It doesn't matter what the exhibitionism stat is in dungeon 1, it won't have any effect in the fifteen other ones. Of course that was necessary, since keeping track of all those stats is quite difficult to do. But for this new game I want to have those things carry over. Certainly this system could be improved.
I decided to make each stat it's own resource. Stats would no longer be simple values, they'd be modular. I started with the basic DnD stats, but didn't stop there. A stat could look up other stats and affect them, this made it simple to make a completely new stat even if the other stats aren't aware of it. Any move could also depend on any stat, either directly or indirectly. But soon this all became too complex. There was a wildgrow of stats, and it wasn't possible to keep track of them all. As I already noticed in ero witches, small incremental changes are a lot of work but aren't all that noticeable in the end. This new stat system also wouldn't help in the inevitable overlap between the different stats. It wasn't workable.
The solution wasn't more stats, but making it clear what parts I wanted to carry over between dungeons. These are classe changes - cursed equipment - crests - parasites - hypnosis. Each one can then have it's own progression, such as crests growing slowly depending on the personality of the adventurer. This makes the whole system more manageable. Of course it means that everything needs to exist within this system, which limits freedom quite a lot. But on the other side, it allows each of these to be more impactful. Those fluent in madoscript (only me I guess) can see the effects of some crests below.
The basic stats from DnD are of course also still there. STR increases physical damage, DEX reflex saves and speed, CON health and fortitude saves, WIS will saves, and INT magical damage. These happen mostly in the back and are a way to differentiate different adventurers from the same class. Reflex, Fortitude, and Will saves are also kept as a way to resist debuffs and damage over time effects.
Damage from Pokemon to DnD to DD.
Ero witches uses the Pokemon combat system for damage. Damage scales linearly with the ratio of attack and defence. It's a workable system, doubling your attack will double the damage, doubling the defence will halve it. However, damage size quickly becomes hard to grasp. Also, final damage is also multiplied by a random number between 0.85 and 1.0, because lacking randomness feels weird. Certainly this system could be improved.
I decided to take a page from DnD. Damage depended on a xdy dice with an extra bonus depending on the stats of the adventurer. If moves got stronger, such as when two handing a longsword, the die size would increase. I originally started with completely random dice, but then worked with a list of incrementally stronger dice from which all moves had to pick. That made it easier to strengthen any move by any item. The problem was the extreme randomness of dice rolls. Rolling a one on a 1d8 sucks, so you'd have to rely on the bonusses from your base stats. But it didn't feel right to let things like gear impact the basestats since those should be more personal. It wasn't workable.
I caved in and just gave all moves damage ranges. Attack bonusses are now multiplicative to these ranges, so something like having 13 STR increases all physical damage by 15% based on those ranges. It allows to differentiate moves based on damage volatility, and makes it feel like strong adventurers just do more damage. It's still not optimal since the value isn't always communicated to the player, but I'll come back to that later.
Types from two to many to two.
There are no types in ero witches. All attacks are either physical or special, but enemies have no resistances above their physical or special defence. This means that the only way of differentiating enemy defences was through those two stats. Additionally those stats were well hidden. Dealing slightly more special attack since the enemy has 60 defence but only 40 special defence doesn't have the impact of a flashing "Super Effective" message. Certainly this system could be improved.
I decided to keep it simple, I would just allow any move to be any type I defined. Any enemy could then have a list of resistances against those types. Seems simple, but I quickly found that it's hard to create enemies that have clearly visible types, and randomly assigning resistances is just confusing. But a larger problem was in the UI, since there were infinite types there also needed to be infinite space for those types. And since those types needed to be clearly shown to the player, it was pretty much impossible to create a UI for that. It's also important to note that the desire to have infinite types stems from that difficulty of assigning types to enemies. I needed that freedom since I couldn't predict what types I would need. It wasn't workable.
To keep it manageable, I did two rounds of streamlining. First I cut all types down to eight, slashing-blunt-pierce-holy-fire-ice and the healing and love types. By then I also decided to make the stat bonusses depend on the type for further streamlining. But even then I noticed that I'd make enemies resistant to either the physical attacks or the magical ones, so decided to go even further and just go with physical and magic resistance. So back at square one, not everything can be succesful. I went even further as I'll discuss later to actually fix the problems with the lack of type system.
Moves from levelup to gear to class.
In ero witches you'd gain moves as you levelled up. That's a tried and tested strategy, but I wanted to make the characters more versatile and the progression more flat. While you could only select four moves at a time, you could always select the four best moves together. Certainly this system could be improved.
A common idea is to let gear give moves. This gives you the possibility of mixing and matching movesets, while limiting which moves can be equipped at once. Tying it to gear also means it's tied to your progression through the game and not the progression of the character. I set out to do this, but quickly found that it came with it's own problems. Balancing becomes difficult, each item might be used by each class unless explicitly restricted. It also lead to an abundance of different moves, a sword could sword_slash and sword_pierce, a shortsword could shortsword_slash and shortsword_pierce, a longsword could... It wasn't workable.
I settled on letting classes give moves. There's only a couple levels in each class so the progression can be kept shallow and I can differentiate the moves sufficiently. It doesn't solve the problem with ero witches' moves, but the problem doesn't exist due to the few levels in each class.
Tokens are great.
The key to winning combats in ero witches is buffing yourself and debuffing enemies. The problem is that this isn't very clear to the player. An enemy with quartered defence looks the same as one with normal defence. The same holds through for the megucas, some values would destroy their offences, but it wouldn't be clear to the player that that's the case. Some time after the initial 0.5 version I did add indicators that show these stat changes, but it was a very crude fix to a fundamental problem in RPG combat. It's vital that stat changes are made abundantly clear to the player. Certainly this system could be improved.
The token system of darkest dungeon 2 fixes this very well. In short, many basic things such as dodge and resistance are replaced with tokens which are show on the player during combat. Instead of an enemy with high dodge chance, an enemy can have several dodge tokens each giving you a 50% chance to miss. Instead of an enemy with high resistance, the enemy spawns with multiple block tokens each halving damage dealt. It communicates very clearly to the player what makes the enemies special. So I just copied that system. Or expanded the system from ero witches with tooltips and more token variety if you want to look it that way. The tokens are a replacement for any in combat traits, while all out of combat traits are now replaced with quirks.
Conclusion.
In short, the darkest dungeon 2 combat system is extremely neat, and surprisingly simple to implement. That's going to be the combat system for the game.
So, that was it for now. I didn't cover everything, such as changes to the animation system, but the devlog has gone on long enough. The next few ones will be rather technical as well, but eventually a playable game will spring forth. Once I'm somewhat further in developing it, I'll let you guys be unpaid alpha testers have a playtest. I'll probably make a post about the workflow I use for adding content to the game next.
Ero Dungeons [Old Version]
Darkest Dungeon but Lewd
More posts
- Ero Dungeons has Released!27 days ago
- Progress Report: Breaking Mods and Updating ScriptsAug 08, 2024
- Technical Devlog: Evolution of ScriptingAug 03, 2024
- Progress Report: Gargoyles, Lamias, and a VineAug 01, 2024
- Progress Report: Obligatory Beach EpisodeJul 26, 2024
- Progress Report: ArachnidsJul 18, 2024
- Progress Report: A Livelier Guild and More RatkinJul 12, 2024
- Public Release: Beta 1.3: Mechanic, Dreamer, and HumansJul 05, 2024
- Progress Report: The Dreaming AdventurerJun 27, 2024
- Progress Report: Dreamer Boss DungeonJun 21, 2024
Comments
Log in with itch.io to leave a comment.
Looking forward to this a lot!
to summarize as terribly as possible, your newest game is a case study of what darkest dungeon 2 did right.
Otherwise Excited to see where this goes and glad you didn't fall into the trap of an SMT like affinity system.
Absolutely. Darkest dungeon has its flaws, but the combat system isn't one of them (especially in darkest dungeon 2). It pains me tremendously that Joseph Anderson once insulted it in his review as "turn based combat is boring", you just "take some turns healing so you don't die".
And yes, affinities/resistances are surprisingly hard to do well. Unfortunately, Pokemon made an entire generation think that having thirteen type interaction is fine in a game, while that's only accepted since people grew up with that. It takes some time bashing your head against the wall before that's obvious. Ero Witches originally also had a move type system (you can still see the remnants of it during move selection), but that also got scrapped.
YES YES YES. VERY EXITED CAN'T WAIT
Very cool! I like how you explained each one of your mechanics experiments and how you fine tuned them to the final iteration.
Amazing, very cool explanation. I'll be following your future post :)