User:Phol ende wodan/Combat system overhaul
This is a proposal for an overhaul to NetHack's entire to-hit, armor, and damage reduction system. The current system originates from early versions of D&D; this is great for D&D players but not great for NetHack game balance. On top of this, there are many adjustments made to the original system - for instance, battles in early D&D are generally several-on-one or several-on-several instead of one-on-thousands, and enchanted gear is rare and hard to come by - but the net effect is to create a crufty system of mechanics that does not work well in the modern game. I believe that the best way to restore balance is by removing the existing system and building up a new one from scratch, instead of trying to change lots of values and algorithms to try and get it right.
This is a work in progress and it should be considered a first draft. All of the primary mechanics are present, though, and I don't expect to edit this much more apart from tweaking numbers and minor rules. Balances are likely off. Please post on the talk page to tell me how something here is wrong.
- 1 Primary goals of the new system
- 2 Overview
- 3 New skills
- 4 Important to-hit factors
- 5 To-hit formula
- 6 Damage reduction
- 7 Weapon rebalancing and fighting styles
- 8 Changes to other mechanics
- 9 Other unsorted ideas
Primary goals of the new system
- There should be multiple defensive stats: at least one for evasiveness, which influences to-hit, and at least one for damage reduction, which influences only damage. Currently, to-hit and damage are wrapped up in a single character stat: armor class. Bundling both of these mechanics together makes armor less strategic for players (since one should simply get AC as low as possible). It also doesn't reflect real-world combat; it should be easier to whack an enemy wearing heavy plate than one wearing light leather, but it isn't.
- Evasiveness, armor index, and armor enchantment should naturally be zero, and improve as they increase. Stats that improve at smaller values, like AC currently does, are counterintuitive. Negative values are valid, but only expected in edge cases such as negative armor enchantment.
- A good, if not complete, appraisal of the player's defense ability should be shown at all times on the status bar.
- Persistent flat bonuses should either be small or eliminated. Though at the same time, there should not be a bunch of random dice rolls, because high variance isn't good.
- Armor and shield skills should be introduced. Roles should have different amounts of competency in using armor and shields.
- Player-monster symmetry should be preserved.. The fact that there is one player fighting a horde of monsters should not affect the actual combat system, and there should be no advantages or disadvantages given exclusively to the player. The proper way to balance one player versus a horde of monsters is to balance monsters and their difficulty appropriately.
- The effect of Luck should be severely reduced. It's an bonus awarded only to the player, for one, and it hurts player-monster symmetry if the player has lots of advantages unavailable to monsters. Even doing what some variants implement and using 1d(Luck) seems too powerful - it can be assumed that a midgame character will have maximized their Luck and it will stay high for the rest of the game; 1d(Luck) has a high average of +7 and a high variance which makes it harder to balance. Other uses of Luck should not be influenced by this.
- There should be variety in fighting styles for all roles. Most fighting styles currently tend towards twoweaponing, or single-weaponing with an artifact if that is unavailable. The player should always be given different, but good, strategic options for fighting.
- Bonuses and penalties should mostly be continuous functions of their independent variables. Weird step functions are unintuitive, and are found all over the vanilla code (e.g. the amount of HP regenerated is 1 point at Con <= 12 and d(Con) for Con >= 13).
- Role variety should be preserved, but role difficulty need not be. There's no particular reason why this system will favor Valkyries as the all-around easiest role when it's complete. As long as roles play differently enough, and no role becomes hugely over- or underpowered, preserving vanilla's role difficulty is not particularly important.
The to-hit formula is in the center of everything. The vanilla version is being thrown out completely, and replaced with a version that uses a normally (bell curve) distributed random variable instead of a d20. In order to hit, the random number must initially beat a 0, but various to-hit bonuses and penalties on the attacker's and defender's side push this target into negative numbers (representing an attacker advantage) or positive numbers (representing a defender advantage).
Monsters' AC is split into two stats which serve independent purposes: evasiveness, which counts as a to-hit bonus to their defense, and AC, which reduces damage done to them.
Shields now behave very differently from other pieces of armor. Instead of adding to AC, they now contribute directly to to-hit as a bonus in the defender's favor.
AC still exists as an attribute on all non-shield pieces of armor, but it no longer has a positive impact on to-hit. (It may negatively impact to-hit against a defender due to being heavy and unwieldy.) Its only purpose now is damage reduction.
Shields and armor now have their own skills, which are designed to help characters that specialize in them.
Monsters can flank hostile monsters, and back them into walls and corners, for a to-hit bonus.
Many adjustments to fighting mechanics and weapons are being made. In particular, twoweaponing is being nerfed, two-handed weapons are being buffed greatly, and throwing missiles requires a free hand.
Armor skill is basically a measurement of how well you can move and fight while wearing armor. Having armor skill reduces the effective weight of worn armor and reduces its to-hit penalties (to a minimum of zero). All roles can train to at least Basic, and some fighter roles start out with Basic.
Armor skill is trained by the sum of all penalties of worn armor, (except shields, and before reductions are applied) each time you make a weapon attack, and each time an enemy's attack misses.
The cutoffs for Basic, Skilled and Expert are not defined at this time. It shouldn't take too long to train to Basic.
|Skill level||Penalty reduction||Weight multiplier (when worn)||Starting skill||Maximum skill|
|Unskilled||0||1||Archeologist, Caveman, Healer, Monk, Priest, Ranger, Rogue, Tourist, Valkyrie, Wizard|
|Basic||1||7/8||Barbarian, Knight, Samurai||Healer, Monk, Tourist, Wizard|
|Skilled||2||6/8||Archeologist, Priest, Ranger, Rogue, Valkyrie|
|Expert||3||5/8||Barbarian, Caveman, Knight, Samurai|
As far as monsters go, most monsters are effectively unskilled; most humanoids and elves are basic; most humans, all orcs, and all dwarves are skilled; lieutenants, captains, and watch captains are expert. Possibly, a monster takes no penalty from appropriate racial armor.
Shield skill represents how good you are at using a shield to block and prevent attacks.
Skilled and Expert shield users can perform a shield bash by applying their shield in a direction. This does d2 damage (plus silver damage from the shield of reflection, of course) and has a chance of knocking back the enemy one space depending on its size (always for tiny and small monsters, 90% of the time for medium monsters, 40% of the time for large monsters, and 10% of the time for huge monsters). If the enemy is knocked back, it has a 1/3 chance to be stunned (1/2 if at Expert skill). I feel like this should involve strength too, but I also think it's complicated enough as is.
Expert shield users additionally enjoy a reduced spellcasting penalty from wearing a shield.
When an enemy attacks the player and makes a to-hit check, a bonus for the shield will be computed. If the to-hit check fails by less than this number, it can be assumed that the player used their shield to fend off the attack. Shield skill is trained every time this happens. (Possibly don't factor in the bonus from the shield's enchantment to this cutoff; otherwise it'd be fairly easy to train shield skill with a highly enchanted shield. Maybe that's a valid fringe strategy, though.)
The cutoffs for Basic, Skilled, and Expert are not defined at this time. Under current mechanics, it is quite hard to train while Unskilled, so the Basic cutoff should probably be quite low.
|Skill level||Starting skill||Maximum skill|
|Restricted||Monk, Wizard||Monk, Wizard|
|Unskilled||Archeologist, Barbarian, Caveman, Healer, Ranger, Rogue, Samurai, Tourist|
|Basic||Priest, Valkyrie, Knight||Archeologist, Ranger, Tourist|
|Skilled||Caveman, Healer, Barbarian, Samurai|
|Expert||Knight, Priest, Rogue, Valkyrie|
Valkyries' starting shield enchantment might get reduced to compensate for the fact that they start with a shield and Basic shield skill, probably to +1 or +2. Priests' starting shield is already +0. Additionally, I think Barbarians' and Valkyries' skill maximums (on both tables) might need to be moved around a bit.
Monsters that receive a bonus from "shield skill" include orcs, dwarves, elves, and most humans (Basic), trained soldiers, watchmen, and angels (Skilled), and priests (Expert).
Important to-hit factors
Evasiveness is an inherent value of a monster form that determines how easy it is to score a hit. It partially replaces monster base AC as a stat. Its natural value is zero, corresponding to AC 10 in vanilla (a naked human with no special skills or bonuses), but unlike AC, it increases as it improves. It should generally correlate with monster difficulty, though outliers might apply in special cases: a gelatinous cube would be less able to evade and so should have a lower evasiveness than a standard monster of its level, while killer bees are very good at evading and so should have higher evasiveness. (Perhaps the speed and size to-hit penalties can be appropriately balanced so that this stat isn't needed, but I don't really think so; I think the ability to tweak and fine-tune these values on a per-monster basis is a good thing.) All examples of evasiveness here will be integers, but as described below, there's no particular reason why it has to be except maybe simplicity.
Most types of armor, especially body armor, confer a penalty which makes the wearer easier to hit. This penalty increases for heavier armor. Shields, however, are a tool used to ward off and block blows; wearing a shield will directly increase your evasiveness.
Rules of thumb for creating armor penalties (assume the wearer is unskilled/unfamiliar with armor):
- Zero: The armor does not impede movement during combat, and does not hinder the wearer moving the covered body part.
- One: The armor might impede movement during combat, and the wearer might not feel comfortable moving the covered body part.
- Two: The armor does impede movement during combat, and the wearer has difficulty moving the covered body part.
- Three: The armor hampers movement during combat.
- Four: The armor makes movement during combat very difficult. Not many armors should have this penalty.
Proposed armor penalties:
|Armor penalty||Items with this level penalty|
Dragon armor is not included in this list because it will probably be modified drastically. I would also like to add one or two additional armors like a crystal scale mail (penalty 2).
Your shield skill, your shield's enchantment, and the shield itself all contribute to your overall shield bonus. Every shield has a base defense value which represents how good of a shield it is regardless of the other factors:
|shield of reflection||7||It's a domed smooth shield. It doesn't catch weapon edges or points; they're more likely to slide off and hit the player.|
|elven shield||9||Is supposed to be a pretty light shield. It can be enchanted to +7, though, unlike all the other shields.|
|Mordor orc shield||9||This is basically an orcish small shield, so should be slightly worse than the human counterpart.|
|small shield||10||This is the standard small shield, and is sort of a baseline against which other shields are measured.|
|Uruk-hai shield||14||This is basically an orcish large shield, so should be slightly worse than the human counterpart.|
|large shield||15||Standard large shield: heavier than the small one, and metallic, but gives better defense. Note that it will be fairly lighter than it is in vanilla, but still heavier than the Uruk-hai shield.|
|dwarvish roundshield||17||The best crafted and most durable shield, but metallic, and the heaviest.|
Shield bonus is then calculated by the following: (Skill is the actual value used in the code, except that Restricted counts as 1 instead of 0.)
Some analyses of bonuses:
- Starting Priest: basic +0 small shield = (10 * 2/2 * (4+0)/4) / 20 = 0.5
- Starting Valkyrie, assuming enchantment isn't changed from vanilla: basic +3 small shield = (10 * 2/2 * (4+3)/4) / 20 = 0.875
- Midgame character, skilled +3 small shield = (10 * 3/2 * (4+3)/4) / 20 = 1.3125
- Midgame character, skilled +3 large shield = (15 * 3/2 * (4+3)/4) / 20 = 1.96875
- Endgame character, expert +7 elven shield = (9 * 4/2 * (4+7)/4) / 20 = 2.475
- Endgame character, expert +5 small shield = (10 * 4/2 * (4+5)/4) / 20 = 2.25
- Endgame character, expert +5 shield of reflection = (7 * 4/2 * (4+5)/4) / 20 = 1.575
- Endgame character, expert +5 dwarvish roundshield = (17 * 4/2 * (4+5)/4) / 20 = 3.825
A defender being flanked by multiple attackers will be easier to hit. This applies primarily to the player, but also to monsters that may be flanked by pets. When a defending creature is under attack, every monster is eligible to contribute to flanking if:
- it is hostile to the defending creature, and
- if it is a pet, it is willing (subject to the normal HP and level checks) to attack the defending creature on its turn, and
- it is currently attacking, or
- it is not currently helpless, not caught in a trap, not fleeing, has at least one attack that is not AT_NONE, is not a long worm tail segment, and is adjacent to the target. (I'd like to have ranged flanking threats and polearm-range flanking threats as well, but it seems hard to define - a monster wielding a launcher or carrying several daggers or something, and in line with the player?)
There are only eight primary directions of attack in NetHack. The amount by which a defender is flanked can be quantified by the maximum arc in which the defender is not threatened by anything.
Balancing out the flanking bonus slightly are walls or other spaces adjacent to the defender that the defender cannot move to; a defender in the open can dodge more easily than if they are cornered or backed up against a wall. The accessibility of terrain is determined by whether the defender can move there without consequence (water or lava are accessible if the defender is levitating, for example.)
Specifically, flanking advantage is calculated as the following, and given as a bonus to the attacker:
- Compute the largest arc in which no monsters are threatening the defender, and subtract it from 7 (there is always an attack coming from one direction, so 7 is the maximum possible angle).
- If the space behind the defender - in the opposite direction of the attack - is blocked by a trap or terrain, add 1. (This has the odd edge case that a player surrounded by xorns or ghosts embedded in walls may give the attacker a larger bonus than 7, which is normally not possible).
- If the above case happens and the defender's movement to either of the space radially adjacent to the one "behind" the defender is blocked (by monsters as well as traps and terrain), add 1/2 for each square.
The strategy implications of flanking mean that players will be incentivized to fight in doorways, corridors, and other choke points where they can't get flanked very easily. Open levels like the Big Room and the Gnomish Mines and things like magic traps and werecreatures become more dangerous. In vanilla, experienced players already use this strategy because it means fewer things can attack you at the same time. This might exacerbate its dominance as a melee combat strategy, but it's also tactically the right thing to do in real life, so I'm ambivalent on the issue. It also means that if you plan to run through hordes of enemies, like the standard strategy for the ascension run, you will likely suffer many large flanking penalties, which is probably good.
Monster AI might also benefit from a change where intelligent enemies may hang back and let their compatriots catch up so they can all attack you at once and flank you.
The attacking monster in all of these examples is the dingo.
The largest arc with no threat is 7 (northeast clockwise to northwest). Flanking bonus = (7 - 7) + 0 + 0/2 = 0.
The largest arc with no threat is 6 (east clockwise to northwest). Flanking bonus = (7 - 6) + 0 + 0/2 = 1.
The largest arc with no threat is 4 (south clockwise to northwest). Flanking bonus = (7 - 4) + 0 + 0/2 = 3.
The largest arc with no threat is 3 (southwest clockwise to northwest). The space behind the defender is not a trap or terrain, so it does not get any extra bonus. Flanking bonus = (7 - 3) + 0 + 0/2 = 4.
The largest arc with no threat is 0 (there is no direction with no threat). The space behind the defender is not a trap or terrain, so it does not get any extra bonus. Flanking bonus = (7 - 0) + 0 + 0/2 = 7.
The largest arc with no threat is 1 (an "arc" consisting only of southwest). The space behind the defender is not a trap or terrain, so it does not get any extra bonus. Flanking bonus = (7 - 1) + 0 + 0/2 = 6.
The largest arc with no threat is 7 (northeast clockwise to northwest), and the space behind the defender is blocked, and both spaces on either side of it are also blocked. Flanking bonus = (7 - 7) + 1 + 2/2 = 2.
The largest arc with no threat is 7 (northeast clockwise to northwest), and the space behind the defender is blocked, and one of the spaces on either side of it is also blocked. Flanking bonus = (7 - 7) + 1 + 1/2 = 1.5.
The largest arc with no threat is 3 (southeast clockwise to southwest), and the space behind the defender is blocked, and both of the spaces on either side of it are also blocked. Flanking bonus = (7 - 3) + 1 + 2/2 = 6.
The largest arc with no threat is 3 (southeast clockwise to southwest). The space behind the defender is not a trap or terrain, so it does not get any extra bonus. Flanking bonus = (7 - 3) + 0 + 0/2 = 4.
The largest arc with no threat is 4 (east clockwise to southwest). The space behind the defender is not a trap or terrain, so it does not get any extra bonus. Flanking bonus = (7 - 4) + 0 + 0/2 = 3. The flanking bonus seems kind of low for a player so hemmed in, but it's worthwhile to point out that both of the jackals will get the full +2 when they attack for a flanking bonus of 5.
The largest arc with no threat is 7 (southeast clockwise to northeast). The space behind the defender is not a trap or terrain, so it does not get any extra bonus. Flanking bonus = (7 - 7) + 0 + 0/2 = 0.
Getting a higher number in this calculation is good for the attacker.
The balance I'm aiming for here requires three things:
- A final value of zero (all bonuses and penalties canceling out) should result in an average 50% chance to hit.
- An attack should always have a non-zero chance to hit and a non-zero chance to miss.
- A small advantage to the attacker means that the attacks will miss a little less than half the time. A large advantage to the attacker means that the attacks will usually hit. A large advantage to the defender means that the attacks will usually miss.
To do this, rather than using a uniform distribution like the 1d20 roll to-hit currently uses, generate a Gaussian random number with mean 0 (standard deviation will depend on what ends up being a reasonable range of bonuses). A distribution of this shape satisfies the above constraints, and it does so smoothly and continuously. It also enables the various bonuses and penalties to meaningfully be non-integer values (divisions below are only integer division if it's being used for a die roll or something).
The loose balance goal I'm aiming for is that the player should start off not able to hit quite reliably, and should still not be fully reliable at hitting everything at any point in the game except maybe the very late game. Bosses in particular should offer more challenge. Note that changing from vanilla balance to this to-hit system could be a pretty hard sell - overall, it's a nerf, and players might be loath to play a game where you can't be sure of hitting consistently after dungeon level 20 or so, after years of playing a game where you can.
Another loose balance goal is that in general a good player should be doing better for defense than having all bonuses add up to 0.
Physical to-hit is calculated by subtracting the total attacker bonus from the total defender bonus, and comparing that to a normally distributed random value. Note that these aggregate "bonuses" might be negative, though not usually. In mathematical terms, a hit is scored if .
Most of these terms are probably unbalanced. If you care to, please point out exactly how it's unbalanced so I can try to fix it.
- Start at 0.
- If the attacker is a monster, add (monster level / 4). This proportion is subject to change; ideally, it should be proportional to the defense bonus of players whose roles permit the lowest amount of defense overall.
- If the attacker is the player, add a dexterity bonus equal to (Dex-10)/4. (The player is the only one with a Dex stat).
- If the attacker is the player, add skill bonuses, including twoweapon penalties if applicable. (The player is the only one with skills.)
- If the attacker is using a weapon, add that weapon's natural to-hit bonus.
- If the weapon is an artifact and has a specific bonus versus the defender, add that bonus. (Also counts with artifact launchers firing ammo).
- If the attacker is firing ammo from a launcher, add the launcher's enchantment.
- If the attacker is wearing a ring or rings of increase accuracy, add their enchantment. Unlike most other things, this is a flat bonus.
- Add 1d(Luck/2) for the attacker's Luck.
- If the attacker is a Monk wearing body armor, subtract 20.
- If the attacker is mounted, subtract a riding penalty, which is 4 at Unskilled, 2 at Basic, and 0 at Skilled and Expert.
- If the attacker is engulfed, add 30.
- If the attack is ranged and the projectile is not actually a projectile, subtract 4, unless it is a boulder, in which case add 4. Despite what your TV tells you, throwing your sword does not work.
- If the attack is ranged and the projectile is kicked, subtract 3.
- If the attack is ranged, subtract the distance. (Grid distance, not Euclidean; a monster two squares away diagonally is at a distance of 2.) This applies to spells and wands as well.
- If the attack is ranged and the attacker is a Ranger, add 1. (Technically not player-specific, applies to Ranger player monsters too).
- If the attacker is a Samurai firing ya from a yumi, add 1.
- If the attack is ranged and consists of ammo being thrown or fired from the wrong type of launcher, or with no launcher at all (e.g. arrows from a crossbow), subtract 6.
- If the attack is melee and the attacker is wielding a non-melee weapon (ammo, launcher, boomerang), subtract 2.
- Add 1 if the attacker is invisible and the defender cannot see invisible.
- Subtract 4 if the attacker is fumbling.
- Subtract 2 if the attacker is not fumbling but has slippery fingers.
- Subtract 2 if the attacker is currently stunned.
- Subtract 1 if the attacker is currently blinded.
- Subtract 1 if the attacker is currently confused.
- Subtract 1 if the attacker is currently trapped.
- Subtract 1 if the attacker is burdened, 3 if stressed, and 5 if strained. (Only applies to the player; monsters don't get encumbered.)
- Add the flanking bonus. (Using the raw bonus may be too powerful, but maybe not.)
A notable omission from this list is weapon enchantment. Enchantment no longer applies as a to-hit bonus, and is primarily used now for damage (though other calculations involving it like the chance of a projectile breaking are still in use too).
- Start at the defender's monster form evasiveness.
- If the defender has protection (the greater of divine protection and spell protection), add that amount. Note that divine protection is harder to obtain and has a maximum of 6, as described below.
- Add (2 - defender size). (This is exactly the same as vanilla.)
- If the defender is wearing a shield and is not helpless, add the shield bonus, as described above.
- If the defender is a Monk not wearing body armor or a shield and not wielding a weapon, add the defender's martial arts skill minus 2 (for Monks, this is always zero at Basic up to 4 at Grand Master).
- Add 1d(Luck/2) for the defender's Luck.
- Sum up the defender's penalties from armor, making armor skill reductions as appropriate, then subtract it.
- Add 2 if the defender is invisible and the attacker cannot see invisible.
- Subtract 1 if the defender is currently confused.
- Subtract 2 if the defender is a monster and is fleeing.
- Subtract 2 if the defender is currently stunned.
- Subtract 2 if the defender is currently blinded.
- Subtract 4 if the defender is currently trapped.
- Subtract 4 if the defender is currently sleeping.
- Subtract 4 if the defender is currently paralyzed.
- Subtract 1 if the defender is burdened, 3 if stressed, and 5 if strained. (Only applies to the player; monsters don't get encumbered.)
- Add 1 if the attacker's weapon is blessed and the defender is a demon or undead.
- Add 1 if the attacker's weapon is a spear and the defender is kebabable.
- Add 1 if the attacker's weapon is a trident and the defender is in water.
- Add 1 if the attacker's weapon is a pick-axe or mattock and the defender is a xorn or earth elemental.
Overriding special cases
- Gem class objects thrown at a unicorn always "hit" by getting caught.
- Your quest artifact thrown at your quest leader is always caught, unless they are hostile, sleeping, or paralyzed.
The Dexterity attack bonus has separate values for each point of Dexterity, so this table doesn't show all of them, but it increases by 0.25 for each additional point of Dexterity.
Applies to whatever skill the attack is being made with, whether that is melee, ranged, or a spell. Does not apply to shields, see the Shield bonus section for the calculation.
|Skilled or Expert||0|
Monk martial arts defense bonus
Evasiveness only helps you avoid getting hit. If you do get hit, it is your AC that determines how much the incoming damage will be reduced. Monsters and armor, as before, have a predefined AC, but now it serves only to reduce damage. This is a distinct factor from evasiveness and armor penalties.
Any successful hit must deal at least 1 hit point of damage. If reduction happens to take it below 1, it will always be set to 1.
Previously, this proposal involved damage reduction also being based on how much the attacker hit by: a "clean" hit would score more damage than a hit that just barely landed. However, this entwined evasiveness with damage reduction in a way that greatly favored evasiveness, so that mechanic has been removed.
The mechanic I propose for damage reduction is that you will always reduce
AC / 8 points of damage, and you have a
(AC mod 8) * 12.5% chance to reduce one more point. This way, every point of AC is a real contribution towards damage reduction. (The choice of 8 is arbitrary, but it should work well enough.) This will have the effect that damage reduction becomes overall less useful than vanilla in the endgame, since a player won't be getting an average of 20 reduction from their -40 AC. I consider this to be a good thing. The damage reduction also won't vary very much, which could be a good or a bad thing depending on your view.
AC, of course, starts at zero for a naked human, and monsters have various positive amounts of it to compensate for the fact that their body reduces damage naturally without needing armor. However, since AC no longer plays a role in evasiveness, it will generally be less than it is in vanilla; instead of the +3 a jackal would get by transferring it over from vanilla, a jackal has no natural damage reduction. When assigning AC to a monster, consider how much its body naturally absorbs or negates damage. In general, AC should probably not be very high for monsters that have non-negative ACs in vanilla, since they would not have reduced any damage from a successful hit.
Erosion of a weapon used, instead of making a to-hit penalty, also contributes to damage reduction. Damage will be reduced by 1d(max erosion) - 1 points on each hit. The damage formula in which erosion counts as a penalty to enchantment no longer considers erosion.
Weapon rebalancing and fighting styles
Fighting styles need an improvement. There's too much of an incentive to get a high-damage +7 single-handed artifact and twoweapon it with a +7 silver saber or other high-damage weapon, maybe with a stack of +7 darts on the side, because that gives the highest damage at the best accuracy.
Weapons, in general, should be rebalanced so that there is a general sliding scale from high-accuracy, mediocre-damage weapons to low-accuracy, high-damage weapons, as far as one-handed weapons go. Two-handed weapons alone get the benefit of having both decent accuracy and high damage. Monsters might also be coded as having a vulnerability to certain types of damage (bludgeoning, piercing, or slashing). Ranged weapons, particularly ones that can be multishot, should have mediocre accuracy and mediocre damage, or possibly can be made better at the expense of multishot (possible example: crossbow bolts fired from a crossbow deal a lot of damage, but cannot be multishot.)
The principles I'm keeping in mind while revamping fighting styles are:
- You have two hands, and many things you can do with them.
- However, there are limitations to what each hand can do at any given time.
- A role should not have a single optimal fighting style.
- High-reward strategies come with high risk.
- You should not have to carry around a "golf bag" of weapons and gear to gain an advantage in every fight.
- Interface annoyances should be minimized; switching between two slightly different styles should not be any more work than hitting x to switch weapons. However, switching between two very different fighting styles should at least cost the character a couple of turns.
To make alternative fighting styles more attractive, some mechanics have to change.
- Whether you have a "free hand" or not is an important consideration. If you do not, your ability to throw things or zap wands accurately will be hampered.
- You have a free hand if one hand is empty, or if you are wielding a non-cursed two-handed weapon (it's assumed that you can hold the weapon in one hand while doing something with your other hand; unlike other weapon/shield combinations this would not require dropping anything, sheathing anything, or holding multiple things in the other hand).
- Without a free hand, you can still throw things or zap wands, but you get no multishot and a substantial to-hit penalty.
- No free hand generally means that your spellcasting penalty will be higher.
- In order to improve your spellcasting success rate, your hands have to be relatively free. In vanilla, certain mechanics imply that spellcasting involves what Dungeons and Dragons terms a "somatic component", i.e. you need to be able to wave your hands around in specific arcane gestures. In vanilla, the character seems to be able to remove their hands from their weapon and cast the spell without taking any extra time, which is a bit odd. Also, vanilla mechanics imply that having both hands free is the optimal way to cast; one hand will still work, but poorly.
- The formula from the spellcasting penalty itself is stolen from the Class Overhaul Proposal, with modifications. Specifically, the percentage chance of success is .
- A robe functions as +5 Int, as before.
- Unskilled penalty is 1, unless the spell school is Restricted or Unskilled, in which case it is 2, as before.
- Skill bonus is 15 if Basic, 30 if Skilled, 45 if Expert, and 0 otherwise, as before.
- Gear penalty is the sum of: 1 for metallic body armor, 0.2 for metal boots, 0.2 for metal on each hand (wearing a metallic shield, wearing gauntlets of power, or wielding something metallic; these don't stack, but each hand incurs a separate penalty), 0.5 for a metal helmet, and (0.1 * weight/20) for each item or shield held in a hand.
- Thus, the optimal way to cast spells is to have both hands unoccupied, though one should only need to do this to cast particularly difficult spells.
- The weight penalty makes heavier weapons impair spellcasting more than lighter ones. A non-metallic weapon of less than 20 weight will not impair spellcasting; anything else will.
- A wielded non-cursed two-handed weapon counts as a metal/weight penalty in only one hand, since the player is momentarily holding it in one hand as described above. A cursed two-handed weapon will apply its penalty to both hands.
- Wielding a metal weapon applies the same penalty for wearing metal gloves, but does not stack with it. Two-handed weapons are slightly less bad than shields.
- Unlike in vanilla, having cursed items welded to both hands doesn't completely block spellcasting - the player merely cannot get rid of the cursed items to remove their penalties.
- The formula from the spellcasting penalty itself is stolen from the Class Overhaul Proposal, with modifications. Specifically, the percentage chance of success is .
- Twoweaponing gets several changes, most of which are nerfs.
- You cannot fire from a launcher while twoweaponing.
- Starting or stopping twoweaponing always costs a turn (vanilla only makes it cost a turn if a Dex/20 check fails).
- Twoweapon takes more than 4 skill points to level to expert.
- No strength bonus is applied to the second twoweapon attack.
- The second twoweapon attack makes an independent to-hit roll. The first attack need not hit; it always tries to make the second attack. 3.6 does this.
- Multishot does not work at melee range; you will only shoot one projectile. It doesn't matter if there is a monster at melee range that you can't see - you still only shoot one.
- Two-handed weapons get a couple buffs:
- Two-handed weapons apply your melee strength bonus to damage twice.
- You can critical hit occasionally with a two-handed weapon. When you hit by enough such that damage would not be reduced at all and you are Skilled or better with your weapon, score a critical hit with 5% chance to deal double damage.
Shield-based fighting styles: Under this combat system overhaul, shields are good. Very good. They are the single most effective part of your defensive kit, particularly if you can gain good skill in them. They occupy one hand, though, so your other options are more limited. You can have a decent one-handed weapon, keep your hand free for throwing weapons or casting spells, or have two one-handed weapons to switch between.
Two-handed-weapon-based fighting styles: Two-handed weapons provide good accuracy and high damage at the expense of blocking the player from the benefits of wearing a shield and making spellcasting slightly more difficult.
Dual-wielding fighting styles: Twoweaponing will remain the most versatile style in terms of which weapons the player chooses to wield, and probably will retain its spot as the style with the highest damage output. However, it will be hampered by large to-hit and damage penalties, requiring a large investment of skill points, and having no real ranged options.
Spellcasting fighting styles: Spellcasting success rate is optimized by having two free hands, but the system is lenient enough to tolerate one light weapon without any consequences. A character fighting in this style will be able to use such a weapon or a thrown weapon with relative ease. But you lack any sort of good defense or damage output.
Ranged fighting styles: They overlap with shield-based and spellcasting fighting styles. As long as both of your hands aren't occupied with a melee weapon, you can wield a launcher and possibly switch it out for an offhanded melee weapon.
Changes to other mechanics
- Divine protection will probably have a smaller cap of about 6, it will be the most expensive thing one can buy from a priest, and it can only be bought one point at a time.
- (Possible exception: you get 1d2 points of protection if it's your first point and you are buying it from a coaligned priest.)
- The price of protection depends on how many points you already have: a well-off character (2000-3000 gold pieces) should be able to buy protection once, but it might take as much as looting Ludios to get the last couple of points.
- It will perhaps be not dependent on experience level, which will destroy the entire idea of the protection racket; this is not intentional but I don't consider it to be a problem.
- If you lose protection from changing alignment, it should not be too hard to build a few points back up.
- A possible formula is
2000 * (2 ^ (current protection)).
- Certain monsters like aligned priests and angelic beings may have divine protection.
- Intelligent monsters will pick up non-cursed luckstones; any monster carrying one will effectively have 3 + 1d3 Luck, and their to-hit will recieve a corresponding bonus. Player monsters will usually generate with a luckstone, and (assuming that they've maxed their Luck) they have 3 + 7 + 1d3 Luck.
- Monsters will not make a "weapon" attack against you by swinging a launcher or other non-melee weapon at you, preferring to unwield it and hit you normally.
- Half physical damage and half spell damage now reduce damage only by 1d(half damage) instead of flat half damage. Their non-damage effects are not changed.
- Weapons can't be enchanted past +5, except elven ones, which can be enchanted to +7, the same as armor. In addition, scrolls of enchant weapon are slightly more rare.
- Wizards, as spellcasters, won't get a quarterstaff anymore; they will get a short staff (walking stick), which is very inferior to the quarterstaff damage-wise, but is one-handed and light enough not to interfere with spellcasting.
- Racial to-hit bonuses are replaced with racial damage bonuses. The proper way to do this is to add a race as a property of all objects, which will be zero unless it's either an obvious racial weapon (crossbow, anything with "orcish" or "elvish" in the name) or a "mundane" variant of a racial weapon that is the "human" version. The damage bonus is small, only d2 or maybe d2-1 hit points.
- Barbarians start with +1 scale mail instead of ring mail; this is for more defense without giving a larger to-hit penalty.
- A ring of evasiveness or ring of defense, directly increasing to-hit defense bonus, should be added to complement increase accuracy.
- Beam spells have the possibility of missing, unlike currently where they always hit. However, shield bonus does not apply to a defender being hit by a beam spell. Force bolt does not use its own arbitrary to-hit roll.
- Rangers can only reach Skilled in dagger, not Expert.2
- Add the short staff as an item so wizards can get it. (Wood golems will now drop them in addition to quarterstaffs.)
- Flint stones count as slashing damage, and slings will be buffed in general (there are a number of ways this could be accomplished).
- "Unnecessary" weapons will be removed; currently this list only contains all polearms except the halberd, bardiche, ranseur, and glaive.
- Unicorn horns should not be as powerful as they are and their damage should be reduced from 1d12, nor can I see any reason they should be two-handed. Possibly, unicorn horn skill should be removed completely.
- Broadswords are raised to 2d4/2d5 damage, making them strictly better than long swords versus large monsters but worse versus small monsters. Broadsword skill is merged into short sword skill.
- War hammers are a two-handed weapon, and their damage is substantially increased from the 1d4/1d4 it is now. This is a bit problematic with Mjollnir, which is a short-handled hammer in the lore, but this could be flavored as no mortal hero, even wearing gauntlets of power, being strong enough to wield Mjollnir single-handed.
Other unsorted ideas
In the late game, the player should still not be hitting completely reliably in all cases, but it's very annoying to see misses like that, especially if you are used to vanilla and hitting everything by this point. One way to make (near) misses more palatable to late game players is to flavor them as something that would have hit, but the defender did something directly or passively that prevented you from actually scoring a hit. Examples:
- Monster wielding a weapon: "The <foo> parries your blow with its <weapon>!"
- Thick-skinned monster: "Your blow glances off the <foo>'s <hide/claw/horn/other body part>!"
- Monster wearing a shield: "The <foo> blocks your blow with its shield!"
- Monster with divine protection: "A mysterious aura around <foo> turns your <weapon> aside!"
- Other: "The <foo> dodges your attack!"
- Other: "You just miss the <foo>!"
- The bland "You miss the <foo>." should be reserved for when you missed by a lot and should feel bad about yourself for your incompetence.
Come to think of it, I don't see much reason why these shouldn't be used for monster attacks against the player as well.
Multiple armor stats
More realistic than a single damage reduction stat would be to have three armor stats on top of evasiveness, which describe the armor's effectiveness at blocking piercing, slashing, and bludgeoning damage. Discussed in IRC; this seems like too much complication for too little gameplay benefit. Even if it were only implemented on the monster side of things, it would encourage players to carry around one slashing, one bludgeoning, and one piercing weapon and switch to whichever one is most useful for the next monster; I don't want optimal gameplay to be annoying.
Penalties for weapon misuse
- Throwing ammo or using a launcher, ammo, or missile in melee does only d2 damage and does not train skill. This is already in vanilla, with the possible exception of throwing ammo.
Complicated damage formula
A successful hit randomly targets one of the armor slots within the attacker's reach. The armor slots are hands, feet, head, and torso (as always, all heroes wear indestructible unremovable magic pants, and the monsters are smart enough not to target that part of the body). The following factors determine what a monster can hit:
- Tiny monsters can only hit feet.
- Small monsters can hit feet, hands and torso.
- Medium and large monsters can hit anything.
- Huge and gigantic monsters can hit hands, head and torso.
- Flying monsters can hit anything.
Cosmetically, messages do not change; a message is still "The goblin hits!" instead of "The goblin hits your hands!" because this is not Dwarf Fortress.
For monsters that don't have an armor slot, damage reduction is as if it's not wearing any armor in that slot. This indicates that monsters need to have some base damage reduction stat on top of their natural evasiveness.
Tiny monsters are most common in the early game, and include some dangerous ones like rabid rats and all of the ants. Having them only able to attack feet is problematic because characters in the early game can go a while without finding shoes. Perhaps greaves-slot armor should be added, or more roles could start with walking shoes.
The idea of some weapons being very good but carrying a speed penalty was bandied about on IRC, but this probably shouldn't tamper with NetHack's speed system unless we can be really sure it won't break other mechanics horribly.