Combat handled as a conversation

In examining the needs of this game, a big burly Conan-meets-Gor style sword-and-sandal adventure, I’m taking a look at combat. You’re only ever going to be fighting one person at a time, and I want it to be more complicated than “attack Thog with sword / g / g / g / g” until Thog is dead, repeat. First, you should be able to BOAST before or after combat; you should be able to TAUNT, MOCK, SLANDER or INSULT an enemy before or during combat to enrage him; you should be able to DEFY an enemy, LAUGH AT him or SPIT ON him. After the combat is done you can choose to SUBDUE or SLAY your enemy, say SORRY, whatever. (Actual combat mechanics, like blocks and ripostes and feints, I don’t know yet.)

I’m therefore trying to think of structures that can be applied to a combat, and Eric Eve’s conversations came to mind. They have a current interlocutor; I could use a current combatant. They have an implicit greeting; I can use an implicit en garde. If you leave the room during a conversation, it has an implicit goodbye; I could have an implicit retreat.

Is there a better structure to handle combat? Scenes, perhaps?

I think the analogy is pretty strong. Matter of fact you could probably implement it with Eric’s extension, with a few tweaks.

I like this. D&D-derived systems (as in the Reliques of Tolti-Aph) without positional maneuvering or multi-party dynamics or something turn into the “g/g/g” problem you mentioned. A better stat-based system for IF would be something like the turn-based battle systems that most CRPGs seem to have (I’ve played it in flash games like Sonny, Monsters’ Den, and Kongai, which I guess is a trading card game), where you have a selection of moves that tend to have a certain power cost, may give status effects instead of just damage, interact with other attacks/defenses, and sometimes have a certain cool down. Which means the big thing is giving a transparent menu of choices, and conversation menus seem like just the thing.

Your taunt/insult/defy ideas sound like a good way of introducing status effects. Some other spitballed ideas: a successful PARRY leaves the opponent open to a big attack next round; or a successful TRIP could do that, but if the opponent chooses the right move against it you could be vulnerable yourself; DODGE avoids STAB while PARRY avoids SLASH, but not vice versa, and maybe an opponent who dodges against a feint is in trouble. Actually feints could work well with cooldowns; if PARRY and STAB both have a cooldown of one turn, but FEINT doesn’t, then when you play FEINT vs. PARRY the opponent is wide open the next turn (he can’t PARRY but you can SLASH).

Victor Gijsbers has written some interesting stuff about initiative in a combat system; basically one fighter or another could be taking the offense, and then there could be something that changes the initiative (a successful parry or shield block, perhaps?) This again could work well with the conversation menu idea, as you’d get a different menu depending on whether you have the initiative.

Anyway, I look forward to seeing more of this.

When I first envisioned the project I wondered if I should create a whole extension for codifying mechanics for an enemy’s response to maneuvers. For instance, if a person had a strong Ego, they would be easier to Slander, but harder to Intimidate. If a person had a strong Impulse, they’d be easier to Feint or lure out of position, but more likely to take advantage of openings in your defenses. Or something.

I came to realize … why bother? I’m not trying to set up a full-blown system whereby you can attack absolutely everyone and anyone in the game; I’m trying to set up a system that enables combat to happen at certain specified moments with chosen, named enemies that are part of the plot. Each enemy can be coded individually.

That is: Thog is easy to Feint against, but Zyznar isn’t. Thog and Zyznar can’t be Intimidated, but Grignr can be.

The advantage here is that combats aren’t random, they’re predictable, and they can be tested (eg, you can always defeat Grignr with BOAST, DRAW SWORD, INSULT GRIGNR, INTIMIDATE GRIGNR, ATTACK GRIGNR; the same tactics do not work on Thog, however). The disadvantage is that replay value suffers.

Well honestly I don’t know if the kind of system I envisioned would be worth replaying much even with randomized outcomes and more portability in the system. You’d probably need more procedural generation or customization of your character to make it worth replaying (in the games I was thinking of, Sonny might be replayable with different character builds, but honestly isn’t that much; Monster’s Den is replayable partly because of different character builds and partly because of different loot drops; Kongai has wildly varying opponents, and on random wildly varying party builds, and anyway is very short and the AI is really stupid so it’s pretty much a snack-sized thing).

So I think your individual-coding idea is a good thing. It does seem to me that it’d be fairer to the player if the different outcomes tended to have similar effects, though; at least, if boasting makes Thog run away but turns Zyznar into an unstoppable rage machine, there should be clues.

Anyway, I was partly taking off from your idea to things that I might be interested in.

I should think that the outcome of a certain maneuver could be success, no effect, or counterattack — but not something completely unpredictable.

Thog laughs at your pitiful attempt and redoubles his attack.


Grignr recoils in fear! Now’s your chance!

but not

Zyznar immediately surrenders and hands you the key to the iron gate.

Regarding whether there should be clues to the enemy’s likely behavior, I rather feel there should be some — before the combat. Examining the opponent, for instance, or interacting with him. If the player is going to leap into every encounter with weapon drawn, that’s his own problem.

I would like to see this tried with the actual combat mechanics. It makes as much sense as the D&D-style dice race.

Hertz, that seems right to me.

zarf, do you mean trying it with the hacking and slashing as opposed to the talk before (or during) the combat? That’s more or less what I was thinking of:

[Initiative: Gringr]
Gringr presses forward with a flurry of blows!



Gringr feints as you dodge to the side! His sword remains ready for another attack

[DODGE: available in 1 turn]


Gringr’s stab passes by your attempt to parry and pierces your chest!
You have died


[Initiative: Gringr]
Gringr presses forward with a flurry of blows!



Both you and Gringr make a few inconclusive passes with your swords. Both your swords are still ready.



Gringr attempts to slash you, but you block his blade! He falters and steps back.

[Initiative: You]

You press forward, as Gringr waves his sword defensively.



Gringr brings his sword up to parry you, but at the last moment you pull your sword back. Gringr is left holding his sword at an awkward angle.

[Now PARRY is on cooldown for Gringr and DODGE is his best available maneuver, so we can SLASH him.]



Gringr tries to dodge to the side, but your sword cuts deeply into him. He falls to the ground and expires.

Obviously this rock-paper-scissors gameplay is way too simplistic, and Gringr’s pattern is unclued, but it seems more appealing than the dice race to me. You can add some randomization of outcomes – most of the games I mentioned have their attack do a standard amount of damage, with a chance to miss and/or a chance for a critical hit. And rock-paper-scissors isn’t such a bad basis for a system like this, if you vary the effects; maybe one of the attacks is a one-hit kill if it succeeds, but otherwise automatically loses initiative or stops your cooldown timer or something. It’d need playtesting. (If I still had my old En Garde sourcebook that might give me some ideas.)

A rock-paper-scissors style of combat — or, if you prefer, Karateka — could possibly be handled this way:

Aggressive Attacks (lunge, hack)
Regular Attacks (thrust, swing)
Defensive Attacks (stab, slice)
Deceptive Attacks (feint)

Aggressive Defenses (riposte, counter)
Regular Defenses (block, parry)
Defensive Defenses (guard, dodge)
Deceptive Defenses (lure)

POSITIONS (states assigned by the computer)
Helpless (cannot attack or defend; this is the point where the battle ends)
Undefended (cannot defend)
Unprepared (cannot attack)
Ready (centered position: regular and deceptive attacks, regular and deceptive defenses available)
Extended (forward position: aggressive and regular attacks, aggressive and regular defenses available)
Withdrawn (back position: regular and defensive attacks, regular and defensive defenses available)

Advance (move forward from withdrawn to ready; move forward from ready to extended)
Withdraw (move backward from extended to ready; move backward from ready to withdrawn)

Then we can set up your X beats Y beats Z beats X conditions, and the states they create. Aggressive attacks to a deceptive defense will always fail; defensive defenses to a deceptive attack always fail. Aggressive moves always leave you undefended the next round so you cannot defend; defensive moves always leave you unprepared the next round so you cannot attack. And so on.

Then each opponent can be given a primitive AI: How good are they at detecting a feint? How good are they at defending against aggressive attacks? That way, each opponent can respond uniquely.

Also then the TAUNT, INTIMIDATE, and so forth … they have purposes. If you make somebody angry you’re trying to lure them into an aggressive posture; if you make somebody fearful you’re trying to push them into a defensive posture.

I think one of Gregory Weir’s recent games has a similar system (without as many actions though):

That’s funny – I have that on my hard drive but had never got around to playing it. It’s basically a rock-paper-scissors system, with I think some variations on who wins a tie. Probably wouldn’t sustain a lot of individual fights without more options, though

the point is at least partly to sneak around without fighting anyone.

I believe I’ll simplify it a little; the positions (extended, withdrawn, centered) aren’t necessary. You always have four attacks and four non-attacks available to you: aggressive, regular, defensive, and deceptive.

The first three of each would print one of two standard scripts; the deceptive version could look like any of them. Deceptive maneuvers work best when they cause the enemy to be heedlessly aggressive, but can be turned inside out if the enemy’s maneuver is defensive. In fact, you never know if your enemy’s attack was deceptive.

Every turn: you see what your enemy’s move looks like, and you ask yourself “is that real or deceptive?” You choose your move. Immediately you find out the result of your move, which damages him, damages you, hits both of you, or hits neither.

Then your enemy moves, and he’s got the same problem: was your move regular or deceptive? He makes his move and again damage is assigned.

Here’s how it would look:

Thog circles warily with his sword low. [we can’t tell if this is a defensive defense or a deceptive defense]

STAB THOG WITH SWORD [we choose a defensive attack]

You make a cautious move to stab Thog, keeping your defenses up.
As you move in, Thog springs his trap and tries to slice at you, but you were ready for it. Thog grimaces and backs away with a new scar. [it turns out Thog’s move had been deceptive; had we used a different attack, we’d have taken damage]

Thog charges you, his sword flashing. [Now Thog’s AI can’t tell if our attack was defensive or deceptive; assuming it was a defensive attack, he chooses aggression; nevertheless, we’re still in a defensive attack maneuver from last turn]
His sudden charge manages to pierce your defensive posture and you have a new cut for your troubles. [Thog’s aggressive attack beats our defensive attack]

I feel like the real win of a conversation-style engine is to not have an underlying regularized mechanics. You want to keep track of some states, but any given exchange should be contextual, not the same as the previous exchange.

I’m particularly thinking of Alabaster rather than dialogue trees. The game should be suggesting obvious replies (ripostes!) but still allow you to jump conversational tracks, and either surprise the opponent or leave yourself flatfooted – depending on how the combat has gone so far.

That is where we bring in the other elements, though.

First, the conversational model: combat can be divided into nodes. In the “opening gambits” node, the attacker can say different things and behave differently than in the “desperate and losing” node.

Second, the conversational effects: if you use TAUNT or MOCK, you’re hoping to lure the enemy into an aggressive attack posture, so you know how to respond. You’re basically prodding them into making a move you can predict.

How would you model it instead?

I like the idea of “extended, withdrawn, centered” and “aggressive, defensive”; I just wouldn’t assume that any combination always has the same result. Imagine the classic cinema pirate-swordfight. The combatants are constantly moving up stairs, across tables, along balconies, etc. Every position offers some special options (SWING ON CHANDELIER!), and you could even set up some multi-action chains – that’s what conversation libraries are good at.

I certainly don’t want the same combination of moves to have the same result every time, against every opponent — that’s one thing I’m trying to actively avoid. I want each opponent to fight in unique ways, and respond differently to social commands (TAUNT, MOCK, PRAISE, INSULT, DEFY, FLIRT, et al). In order to be replayable, it has to fall out differently each time; but in order to be testable you have to know what you’re expecting to have happen.

I’d love to include the environment in various fight sequences — a fight that takes place in a public plaza with a crowd of enchanted onlookers, for instance, or a fight on a cliff, or a fight in the lair of a sleeping beast — where every location has something different to play with. I can see KICK OVER TABLE or GET ON TABLE, LEAP OVER RAILING, HIDE BEHIND STATUE, or even CLOSE DOOR having unique effects in certain situations; there will be certain fixed-in-place objects that are basically playground props for the fight. It’s very easy to do this, since each fight is going to be specifically placed based upon the needs of plot, rather than random encounters of faceless mooks to be mowed down before an interchangeable backdrop. It’s more Errol Flynn than Arnold Schwarzenegger. Of course, this means those unique moves won’t be universally applicable, so they’re not part of a “combat mechanics” in general terms, just “special effects” as it were.

What it gets down to, for me, is that the commands should have a predictable range of possible effects or the player is just button-mashing (picking random command words). An extended posture and an aggressive maneuver should, in the player’s mind, be more likely to cause his opponent damage, but at the risk of taking some damage. A defensive posture should be likely to protect him — if it doesn’t reliably do so the player will be baffled and angry, and rightly so.

The original “Dragon’s Lair” videodisc game by Don Bluth is an example of unpredictable contextual maneuvers. You pick what you’re going to do at each junction. Move up, move left — sometimes you die, sometimes you live — and you just have to memorize the pattern and start again. This is not good game design. The player has to know that certain actions will probably lead to a certain range of results.

I agree, but this is generally true in conversations as well.

One difference is that conversations aren’t, well, life-and-death at every stage – you usually feel free to try a question without having any idea how the NPC will react. To achieve the same thing in a combat, the player has to either feel confident that death is excluded (so that experimentation is acceptable), or be comfortable with a lot of “undo”.

One potential pitfall of any complex conversation-based combat system is that one must give the player a very detailed status update on each turn regarding all revelant aspects of the situation; the positions of the combatants, their relative positions to each other, a reminder on the state of the battle-site or room description, an update on the haleness of the combatants, and so forth. I believe it may be unfair to expect the player to simply formulate and maintain a vivid mental image of all those factors and keep them constantly in mind while also attempting formulate and carry out a tactical plan. This isn’t to say that such a system can’t be fun; I’m merely saying you’ll have to take great care to ensure that it remains fun, and doesn’t seem unfair to the player in the sense that the opponent will be much more able than the player simply by virtue of the fact that the opponent is coded to have a detailed constant awareness of all relevant factors, while the player must attempt to remember them from turn to turn while also “distracted” by the activity of carrying out the gameplay mechanics.

For example:

slash bluebeard

From his vantage point atop the table, Bluebeard leaps to avoid your slashing attack and drives his cutlass into your neck.

You have died

[Player: Oh man, he was on a table? I guess that was mentioned five turns ago, but how am I supposed to remember all this? I’m going to find some other game to play.]

Zarf, it seems that you’re suggesting something like a node-based combat system, where you never face immediate death unless you make choices that place you in an untenable strategic position:

Node 1: Opening Moves. After you manage to damage the enemy, close Node 1 and move to Node 2. Special moves available: CLOSE DOOR (to prevent reinforcements).

Node 2: The Enemy Gets Angry. If you get the enemy below 50% health, move to Node 3. If you get below 50% health, move to Node 4. Special moves available: TAUNT, MOCK, PRAISE, KICK OVER TABLE (with candeabra on it). If you kicked over the table, the room catches fire.

Node 3: The Advantage is Yours. If you kicked over the table, you may HIDE BEHIND TABLE. You may now HIDE BEHIND TABLE. From here the enemy must come around to get you, and you move to Node 5. If you get the enemy below 10% health, move to Node 5. Special moves: LAUGH, MOCK, SWING ON CHANDELIER.

Node 4: The Advantage is His. If you didn’t close the door, now the reinforcements arrive. However, you are in a poor position, so the only move you have that doesn’t lead to death is HIDE BEHIND TABLE (which lets you recover into Node 5). Special moves: DEFY, SPIT ON, INSULT, SURRENDER.

Node 5: Close of Battle. Among the special moves, you finally get the option to SLAY or SUBDUE, once you reduce the enemy to 0 health.