Feedback on a "Qualitative" Combat Extension

This is the first pass at an extension I’m working on for a small Inform project with combat. I had a look around at other combat extension and found a lot of them felt too “RPG” for me (lots of stats, turn based/blocking combat, hit points, etc.). I wanted something quicker (if you have a gun, you shouldn’t need to shoot someone ten times to kill them) and more narrativistic (less numbers, more adjectives). Think Apocalypse Word instead of Dungeons and Dragons. This would be less appropriate for a combat heavy game and more for a game where shooting or punching someone might be viable (albeit dangerous) option.

I wouldn’t say it’s quite ready for use in the wild yet (I’m still missing a lot of conveniences like robust understandings some nounless helper actions), but I wanted to get feedback from anyone who might be interested on the mechanics of it.

Qualitative Combat.i7x (24.3 KB)

Documentation is below, if you don’t want to download the extension file.


Qualitative Combat is an Inform extension that seeks to be less D&D, more Apocolypse World in its approach to weapons and combat. You should use this extension if you’d like to include weapons, damage, and combat in your game but don’t want to have to deal with numeric stats. Hence the name “qualitative” combat, as opposed to “quantitative”.

Chapter 1 - Injuries

Instead of recording “hit points”, characters can be bruised to various degrees, bleeding, unconscious or dead. These states are independant of each other: a character can be bleeding without being heavily bruised, or just lightly bruised but also dead or unconscious.

There are three kinds of bruising: unbruised, bruised, and heavily bruised. In and of themselves, they don’t pose any consequence to the inflicted character.

A character is either bleeding or they are not. If a character bleeds for 10 consecutive turns, they die. This limit can be changed by adjusting the character’s endurance value (which is usually 10).

When a character in unconscious, they can’t act. They awake in 10 turns (TODO: Make this variable).

When a character is dead, their possessions are dropped along with a corpse and the actor is moved to an inaccessible container called the “spirit-world”. This implementation is taken from Puff of Orange in the Inform 7 Example Book.

Chapter 2 - Lethality and Weapons

How do characters come upon injuries such as bruising, bleeding or death? Injuries are accrued whenever a certain amount of lethality is visited upon them. Normally, this comes from weapons, but you can also impose a lethality value using the phrase “visit L upon P” where L is a lethality and P is a person.

The lethalities are smashing and piercing.

Smashing increases the amount of bruising on a character. It’ll take them from unbruised to bruised to heavily bruised. Smashing a heavily bruised character knocks them unconscious.

Piercing immediately imposes bleeding on the target, regardless of other damage. The target will now bleed out unless they get healing as described in the previous chapter.

Visiting ANY lethality on a bleeding character immediately kills them. The idea here is that a character bleeding out from a gunshot is already weak and vulnerable.

Similarly, visiting ANY lethality upon an unconscious character also kills them. This is a coup de grâce.

Weapons like guns and knives are piercing. Weapons like batons or your fists are smashing. There are no degrees or damages involved, just the basic rules above.

Three default weapon kinds are defined in this extension:
* Gun: Medium range, shootable, piercing
* Knife: Close range, slashing, piercing
* Baton: Close range, slashing, smashing
* Rifle: Long range, shootable, piercing

Chapter 3 - Range and Engagement

There are three ranges: long range, medium range, and close range.

Long range weapons can fire at anyone you can see.

Medium range weapons fire at anyone you can “touch” (as defined by Inform: basically meaning anyone in the room with you).

Close range weapons also require you to be in the same room, but also that they’re right up in your targets face. This extension defines a relation called engagement that relates people in groups. You can only attack with a close range weapon like a knife if you are engaged with your target.

There’s no special action to become engaged. If you perform an attack against an unengaged target, you’ll spend the action moving into engagement range instead. The next attack will hit.

These engagement rules are the only distinction between a knife and a gun. Both inflict piercing, meaning you can theoretically dispatch with someone in just two attacks with either. The knife wielder, however, will have to waste one turn moving to engage, meaning the holder of the gun gets a free shot.

Chapter 4 - Attacking Actions

The main attacking action is “attacking it with” which takes a target and a weapon.

To make life easier for the player, there are also “shoot” and “slash” actions which operate on weapons marked as shooting or slashing respectively. Besides enabling these alternative verbs, the shooting and slashing adjectives on weapons do nothing.

For unarmed combatants, you can also use the “hitting” action which attacks with your fists. It’s considered close range and smashing, so it requires engagement and inflicts bruises.

The default “attack” action is also overriden. It will attack the target with the most lethal weapon held by the actor. If the actor holds no weapons, it’ll fall back on the hitting action.

Chapter 5 - Healing

This extension defines a type of object called an “aid”. Aid items can heal the player or NPCs. An aid is either suturing or soothing. Soothing aids remove all bruises. suturing aids stop bleeding.

There are two kinds of objects already defined for you: bandages and cream, which are suturing and soothing respectively.

The “healing it with” action is used to use healing items.


This is an interesting combat system. It makes sense according to your design principles, and looks solidly implemented.

What I’m curious about is why you decided to make it into an extension. It seems to me that different games will naturally have different requirements in a combat system, and the author will naturally want to fiddle with numbers, add new kinds of damage types, change how death works, etc.

Do you see yourself, or any other IF author, using this extension in a significant way?

Never ask yourself that question or you’ll never make an extension :wink:



Looks interesting! It seems World of Darkness-y to me, though I suppose that WoD rather than Apocalypse World being my touchstone is me showing my age.

I think the points below about how useful it’ll be to others are well-taken, but seems like it’d be easy to modify, and though I can’t see combat featuring in anything I’m working on anytime soon, I’d certainly rather start with something like this than the more RPG-y stuff that’s out there.

The system seems pretty reasonable to me in terms of offering interesting space to explore in play (I can see “engagement” opening up some interesting decision-making). I will say that the lack of ability to incapacitate someone with piercing damage seems like it’s a hole – there are lots of kinds of stories where it’s helpful for someone with a knife or gunshot wound to be effectively out of the fight in addition to being on a countdown to death. Allowing for dying monologues or post-fight interrogation seems like it would support a good number of scenes.

Of course it would be pretty easy for an author to just hard-code this in, cueing off off the bleeding adjective. But it might be nice to bake something like that in – especially since my other thought is that this seems like a fairly high-lethality system and having another intermediate step before a character dies might be nice (though again, sometimes that’s what you want!)

You just summed up my entire game engine. :grinning_face_with_smiling_eyes:

Honestly, it reminds me of these gamebooks I’ve been reading (the Etram series, starting with The Altimer. I highly recommend) where combat is really brutal. Like two hits and you’re done because the damage both ways is really high. The goal is to try to avoid combat. And if you can’t avoid, then hope you knock them out in one shot.

I just tried the extension demo. I definitely like this system. The extension itself needs some fine-tuning, though.

  • There are a good number of blank “(First breaking engagement with )” (no-name) messages

  • There are mismatched tenses and such that need adaptive text work:

e.g. “You lands a heavy blow on John…”

  • You can break engagement by walking into a wall



I kid. There’s a few other Inform combat extensions out there and I had already structured it as an extension to organize my code better so, here we are.

(Speaking of which, why is Inform designed around everything being contained around a single file… it seems so baffling to me).

Yeah I’m kind of rethinking some of the countdown stuff in the system. The bleeding countdown for the player seems good in terms of creating a exigent need for a medkit after a fight so you don’t bleed out (which feels like the right amount of drama) but I’m not sure it’s that interesting for NPCs and it’s just another piece of state to manage. Also I’m thinking unconsciousness should just be permanent state instead of a timer. Is it really interesting to have NPCs pop back up like wack-a-moles?

Yeah as I said I’m new to Inform and I haven’t figured out all the particulars of adaptive text. There’s a bunch of places where it keeps printing “yourself” where I want to print “you” that I haven’t sorted out yet.

I’m also a bit lost on how to properly manage engagement. The “relates X in groups” is under documented in the Inform book and I’ve gotten some weird results when I try to “unengage” a character from a group of three and somehow everyone gets separated.