Monday, July 05, 2010

Protosal: Combat refactoring.

Replace Rule 2.7, “Monsters” with the following text:

A Monster is a type of game entity. When a monster is created by the RNG, they must specify all of that monsters stats that do not have a default value. They may specify any stats that do have a default value, if they do not, those stats are considered to have their default value.

The stats for monsters are:
* HP, an integer.
* damage, a dice formula or an integer.
* type of damage, either ranged, melee, magic, or a combination of those. Defaults to melee.
* AC, an integer, defaults to 0.
* XP, default value of initial HP times number of dice in damage times number of sides on each of those dice, plus any integers in damage, divided by three and rounded down, or 1 if the result is less than 1. XP may not be specified to have a value other than its default.
* drop, an item or items from one of the Basic Tables, or nothing. Defaults to nothing.
* drop rate, an integer between 0 and 100, inclusive, default value of 0.
* status that that monster may inflict, one of Stunned, Confused, Hallucinating, Blind, Slimed, or none, defaults to none.

An active Encounter exists while at least one Monster exists. The RNG can create a Monster at any time; this either creates a new active Encounter, or adds Monsters to any existing active Encounter. When creating an Encounter, the RNG must specify the stats of the Monsters in it in a Story Post with [Encounter] in its title; new Monsters added to an existing Encounter must have their stats specified in comments to its associated Story Post, and the comments to that post should also be used by @s to track which Monsters are still alive, along with the current stats for each. If all Monsters in an Encounter die, the Encounter stops being an Encounter. Each Encounter has a Dungeon Level, which is any integer, and is set by the RNG in the Story Post for the Encounter. All monsters have the same Dungeon Level as their Encounter.

When a monster’s HP drops below 1, that monster dies and ceases to exist.

An encounter starts out Ranged. A Ranged encounter becomes a Melee encounter when it has been continuously on the same floor as an @ for at least 24 hours, and has continuously been a Ranged encounter for at least 24 hours. If there are ever no @s on a Floor, all Melee encounters on that floor become Ranged.

When a monster dies the Attacker roles DICE100. If the result of the dice roll is less than the Drop Rate for that monster, then the item(s) that are specified in that monster’s drops are added to the section on the wiki page entitled “Loot” that corresponds to the Floor the monster was on.

When a Monster that can inflict a status other than ‘none’ Attacks, roll DICE4, if the result of DICE4 is a 1 the Attackee gains the status that the monster can inflict.

If rule 2.6 does not contain the text:

Whenever an @ successfully Finds the Stairs, they also Find Treasure.

add it to the end of that rule.

Replace Rule 2.8, “Combat” with the following text:

As a daily action, an @ may Attack a Monster or another @, provided no other rule, or part of this rule prevents them from doing so.

When any game entity Attacks, the entity Attacking is the Attacker and the entity being Attacked is the Attackee.

The Attacker (or the @ or RNG who makes any rolls for a non-@ Attacker) must announce the attack, result of any dice rolls, and how many HP the Attackee has remaining in a comment. If the Attackee is a Monster, the comment must be made on the Encounter that contains it. If the Attackee is an @, the comment must be made to an Attack Post for the level of the Attackee.

An Attack Post is a Story Post with [Attack Post] in its title, which specfies what its Dungeon Level is. If no Attack Post exists for a Dungeon Level, or if all Attack Posts for a Dungeon Level have gone inactive, then an @ which wishes to attack another @ on that Dungeon Level may post one.

An Attack Post is considered to have gone inactive when all @‘s who were Attacked, or who Attacked in its comments have either changed Dungeon Levels or Died since they Attacked or were Attacked in it.

When Attacking, the Attacker rolls the appropriate dice to determine their damage-dealt, and the appropriate dice for the Attackee’s AC. They then subtract the Attackee’s AC from their damage-dealt, round up to 0, and subtract the result from the Attackee’s HP.

To determine damage-dealt:
* If the Attacker is not wielding a weapon, roll its damage. All @‘s damage is 1d2 and Melee.
* If the Attacker is wielding a weapon, roll the damage of the weapon.

To determine AC:
Add the AC of all armors the Attackee is wearing to the AC of the Attackee and roll DICEZ, where Z is the result.

If an Attacker rolls damage that is magic against an Attackee who is wearing Armor that is magic resistant, then the result of that roll is always 0.

An @ may not Attack a Monster when in a Ranged Encounter, and a Monster may not Attack an @ when in a Ranged Encounter, unless the Attacker is wielding a Ranged weapon, or is wielding no weapon, and has damage that is specified to be Ranged. An @ may not Attack a Monster when in a Melee Encounter, and a Monster may not Attack an @ when in a Melee Encounter, unless the Attacker is wielding a Melee weapon, or is wielding no weapon, and has damage that is specified to be Melee.

An Attacker may not Attack an Attackee whose Dungeon Level is different than their own.

Whenever an @ Attacks a Monster, if the Monster does not die from the attack, the Monster Attacks that @. The @ should make the rolls for the Monster, if they do not, the RNG or another @ must do so.


Replace Rule 2.5, “Stats and Equipment” with the following text:

Each @ has a number called HP, and a number called Max HP. They are together tracked the GNDT column “HP”, which should display “X (Y)”, where X is the @ in question’s HP and Y is the @ in question’s Max HP. Each @ starts with an HP and Max HP of 10. When an @‘s HP drops below 1, they die.

Each @ has a number called Kills, which defaults to 0.

A dice formula is an expression “XdY” (or “XDY”), where X and Y are integers. It refers to rolling XDICEY on the GNDT. X may be refered to as the dice, or number of dice in the formula, and Y may be referred to as the sides, or sides of the dice in the formula.

There exist Weapons, which are a type of item. A Weapon has an amount of Damage, which is a dice forumula or an integer. A Weapon’s damage may be ranged, melee, magic, or a combination of such. If an @ carries a weapon, they may be wielding it.

There exist Armors, which are a type of item. An Armor has an integer amount of AC, which cannot be negative. An Armor is one of 7 Armor Types: Helm, Cloak, Body Armor, Shirt, Shield, Gloves, and Boots. If an @ carries an Armor, they may be wearing it. An armor may be magic resistant.

In rule 2.5.2:
* Change the header “Damage ((dice)D(sides))” to “Damage”.
* Remove the column with the header “Magic”.
* Change the type of any weapon with “spellbook” or “wand” in its name to “ranged/magic”.

This should not actually change the way anything works. It merely cleans up the combat system to make it more extensible and robust.

Comments

lilomar:

05-07-2010 17:54:41 UTC

I forgot: Set the Dungeon Level of all active Encounters to be equal to their currently specified floor.

lilomar:

05-07-2010 21:00:12 UTC

lilomar:

05-07-2010 21:10:05 UTC

I also forgot to repeal the magic rule. So pretend that is in there as well.

Josh: Observer he/they

06-07-2010 13:17:23 UTC

I’m gonna be honest. For me, it’s too long for something that doesn’t do anything. I start to read it and then I get a wave of “It’s not broke, why fix it?”

lilomar:

06-07-2010 13:33:50 UTC

Josh: I understand your position, but I argue that it does do something, what it does just doesn’t impact the meaning of the rules.

What it does is make it simpler to propose changes to the combat mechanics, without having to resort to kludges like my magic system.

The fact that so much editing is necessary just to (basically) unify the rules for attacking monsters and attacking @‘s is symptomatic of the issue I am attempting to fix.

Any proposal that introduces a change in how combat works (by allowing monsters to wear armor, say) will have to be at least this long, and they will continue getting longer as kludge after kludge is piled on top of the mess that is the core mechanic of combat.

By passing this one (given:huge) proposal, we can make future proposals much simpler and easier to understand, so that when we want to make changes, we don’t have to sift through a page of changes.

It strikes me that the rule entitled “combat” could be broken down into several rules, or possibly sub-rules? If anyone has any idea how to do that, I would be willing to perform a re-write (or someone else can go ahead, I won’t be offended).

tl;dr: (one long proposal that doesn’t change anything + short proposals that do) > (many long proposals that do change things)