Hello, I been working on a major combat system overhaul, (like, almost replacing the old thing kind of big) since November is probably the best time for it ;). I had to wait for the new combat system to in a more playable state because when I posted tidbits on how it works on discord, there were a lot of confusion. After many long programming hours, it is now finally presentable.
Here is an short overview of the major combat changes and explanation on each section to follow:
- Align objects to a hex grid
- Removal of accuracy rolls
- Perfect information on enemy decisions ahead of time
- Randomized available actions each turn
And if you want to see it in action, here is the link: https://twitter.com/Enlit3D/status/1327859383695331328
Rationale for the changes: (Wall of Text warning)
Hex Grid
Previously, the game allows you to (almost) move anywhere on the battlefield. That was chosen because I thought using “distances and radius” would be more familiar to players that don't play much turn-based games.
However, this “freeform” system also introduces its share of problems. Because the game ultimately has to use a hidden grid system underneath to handle AI and pathfinding, this causes inaccuracies in movement cost calculations and makes it hard to be precise. This inaccuracy manifests itself in multiple ways. For example, it is difficult to judge whether or not a unit can move in through the gap in between two obstacles; similarly, it is hard to say whether a unit can reach its target if it needs to path around obstacles.
Due to this inaccuracy, this “freeform” movement system probably works better in games with larger and more open battlefields. This is the case in both Divinity and the new Baldur's Gate, where units can move far larger distances each turn than what CATC has. CATC has smaller and more confined battlefields. This is both a design choice and an implementation reality due to higher development costs to make those larger and beautiful environments.
So instead, now the game will use a hex grid system and everything will be aligned to grid. Instead of distances in meters, movement cost and ability range will now use grid distance. This makes everything precise. As a result, it is now possible to calculate exactly where the units can move to, and which hexes it threatens, as shown here:
Another change I made, is that now it is possible to select your target via the hexes. A common issue that players have is that it can be difficult to select the target via character models if there are multiple models bunched together. I find it to be much easier to use the hexes instead since it imposes a certain amount of separation in between units and that hexes never overlap (unless you position the camera parallel to the floor).
Accuracy Rolls (and Status Effect Chance) Removal
Accuracy rolls (hit and misses), status effect rolls, and grab success rolls are now removed. Which means all attacks will hit 100% of the time, and status infliction and grabs are resolved deterministically.
The first motivation behind this change is that it is frustrating to miss on a high chance to hit ability. I remedied this gradually and the average hit chance has steadily increased across different builds. For example, the basic melee attack started with a 80% chance to hit on the initial versions, to 100% chance to hit on the last version.
The second reason is that the percentage based status effect chance leaves too much thing to the dice for my taste. What I mean by this is for the hard disable effects like stun and hypothesis These effects are super powerful and the outcome of an entire encounter could pivot based on whether or not those abilities landed or not.
I am definitely not the first one that encountered this design problem. For example, in Divinity I, the game had a dice roll system to resolve the status effects, but they removed it in favor of the armor/magic armor system in Divinity II.
My original idea is to balance these power status effects by limiting their availability, via cooldowns so they can be used only once out of N turns. But otherwise they have ~100% chance to land on most enemies. This would be fine, except that now I have to deal with the issue of character progression. The original plan is that each character learns new abilities via leveling up, and they can freely put those new abilities on their hotbar to use. The issue is that eventually players may fill their hotbar with abilities just as powerful as the stuns and sleeps, and availability no longer becomes the limiting factor when the player has multiple strong disable abilities to pick from. Instead of only disabling once per 4 turns, it became disables once every turn.
Suffice to say, that puts a huge restraint on the design space and I wasn't sure what would be a good solution. Super powerful enemies? (since it’s likely they’ll get disabled every turn) Disable resistance on enemies to force more 50/50 dice rolls? (Don’t really want that either)
Perfect Information On Enemy Decisions
There is this cool mechanic that some turn-based strategy games have which I think is a good fit for CATC - Enemy Action Preview. Essentially, what this means is that the enemy unit will “announce” to the player what they are going to do for their turn. They may be attacking, or initiating a grab, or attempting to use a stun. Then the player can see what every enemy unit wants to do, and react accordingly.
I think this gives a lot of tactical options. Let’s start with an example by an enemy unit wanting to initiate a grab. The player sees this and has a couple of options. For example, the player can move all the units out of range so the enemy unit will waste their turn. Or perhaps it is better to use one of the disables the player has to make the enemy unit skip its turn. Or perhaps it would be better to not run away, but send one of your units closer to take one for the team. I hope this mechanic will lead to many interesting turns, and since I billed CATC as a strategic game, that is a positive effect.
Randomized available actions each turn
I have removed many sources of randomness, from “randomness” in pathing, hit/miss rolls, effects rolls, andAI uncertainty with the new Enemy Action Preview mechanic. I need to reintroduce randomness elsewhere. And I chose to do it with a semi-randomized ability bar each turn, with cards.
Essentially, what happens now is that each unit gets a deck, and every turn, they draw X cards from the deck and they pick 2 cards from their “hand” to use for that turn. Each card has different effects and characters can only do what the card says. For example, a character must play a Move card to move, an Attack card to attack, and a Grab card to initiate a grab.
A video is worth more than 1000 words and here is a preview of how the new combat system plays out:
Video Link.
Here are a more detailed summary of various card mechanics: (not everything working yet)
- Every character gets their own deck, it is not shared across your team.
- The deck is consisted of cards that the character innately possesses, plus their weapon (4-6 cards, unarmed is a weapon too), plus accessories (0-3 cards each)
- You can find new weapons and accessories as loot in dungeons and equip them in base as you wish.
- Each turn, a character gets a top action and a bottom action. Split cards ( cards with 2 halves) require top action to play the top half and bottom action to play the bottom half.
- The majority of player use-able cards are Split cards.
- Top half is generally associated with attack or an action, bottom half is generally associated with movement or utility.
- It takes both top action and bottom action to play a Combined card.
- The majority of enemy cards are Combined cards for brevity.
- Cards you don’t play on each turn goes to the bottom of the deck, cards you play goes to the discarded pile. When you try to draw from the deck when the deck is empty, the cards from the discarded pile are shuffled back into the deck.
- Attack effect allows the character to deal damage to enemies.
- Movement effect allows the character to move X tiles.
- Block effect gives X damage reduction from attacks until the end of next turn. (stackable)
- Exhaust is a keyword meaning that once the card is used, it wouldn’t be available to use again until next rest. They are generally more powerful effects, but only single use per use.
- A card may contain multiple effects, such as Move X, Attack Y, which means you first get to move X, then do an attack. The order must be applied as shown in the card. Move X, Attack Y is different from Move Y, Attack X.
- AI draws a single card for the turn and then plays it to the best of its ability. It does not choose cards.
- When a unit is in a grab, certain effects become grab specific effects. For example Move->Escape, Grab -> Reversal/Switch.
- When grabbed, there will be an escape threshold, and you must play enough Move/Escape cards to beat that escape threshold to escape.