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 game balance. On top of this, there are many adjustments made to the original system - for instance, battles in early D&D generally many-on-one or many-on-many instead of one-on-thousands, and bonuses are 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 tweak 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 a new system
- 2 New skills
- 3 To-hit
- 4 Damage formula
- 5 Weapon rebalancing and fighting styles
- 6 Changes to other mechanics
- 7 Other unsorted ideas
Primary goals of a 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.
- Wearing armor should still identify its enchantment.
- 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 for the most part, though the player might get a few extra bonuses which will serve to compensate for the fact that there is one player fighting a horde of monsters.
- The effect of Luck should be severely reduced. It's an advantage 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 like NetHack currently uses in many places are unintuitive.
- 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.
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.
Things I might want to try: Skilled and Expert might also slightly reduce metal armor spellcasting penalty, and the scale of weight reduction might be better off as 5/4 : 4/4 : 3/4 : 2/4.
|Skill level||Penalty reduction||Weight multiplier (when worn)||Starting skill||Maximum skill|
|Unskilled||0||4/3||Archeologist, Caveman, Healer, Monk, Priest, Ranger, Rogue, Tourist, Valkyrie, Wizard|
|Basic||1||1||Barbarian, Knight, Samurai||Healer, Monk, Tourist, Wizard|
|Skilled||2||2/3||Archeologist, Priest, Ranger, Rogue, Valkyrie|
|Expert||3||1/3||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. Wearing a shield has a direct effect on enemies' chance of hitting you proportional to your skill with the shield. Replacing AC, shields now have a base defense value (1 for "small" shields: small, elven, reflection, Mordor; and 2 for "large" shields: large, dwarvish, Uruk-hai) that adds to their overall bonus. Expert shield users enjoy a reduced spellcasting penalty from wearing a shield.
Skilled 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.
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 stave 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.
|Skill level||Defense bonus||Starting skill||Maximum skill|
|Restricted||0||Monk, Wizard||Monk, Wizard|
|Unskilled||0||Archeologist, Barbarian, Caveman, Healer, Ranger, Rogue, Samurai, Tourist|
|Basic||2||Priest, Valkyrie, Knight||Archeologist, Ranger, Tourist|
|Skilled||4||Caveman, Healer, Barbarian, Samurai|
|Expert||6||Knight, Priest, Rogue, Valkyrie|
Valkyries' starting shield enchantment should probably be reduced to compensate for the fact that they start with a shield and Basic shield skill. Probably +0 or +1. 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 (Unskilled), dwarves, elves, and most humans (Basic), angels(Skilled), and priests (Expert).
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 of course, 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).
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 amount of radially adjacent directions 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 player can move there without consequence (water or lava are accessible if the player is levitating, for example.)
Specifically, flanking advantage is calculated as the following, and given as a bonus to the attacker:
- Compute the largest number of radially adjacent directions 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.
There are 7 radially adjacent directions with no threat (northeast clockwise to northwest). Flanking bonus = (7 - 7) + 0 + 0/2 = 0.
There are 6 radially adjacent directions with no threat (east clockwise to northwest). Flanking bonus = (7 - 6) + 0 + 0/2 = 1.
There are 4 radially adjacent directions with no threat (south clockwise to northwest). Flanking bonus = (7 - 4) + 0 + 0/2 = 3.
There are 3 radially adjacent directions with no threat (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.
There are 0 radially adjacent directions with no threat (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 - 0) + 0 + 0/2 = 7.
There are 7 radially adjacent directions with no threat (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.
There are 7 radially adjacent directions with no threat (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.
There are 3 radially adjacent directions with no threat (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.
There are 3 radially adjacent directions with no threat (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.
There are 4 radially adjacent directions with no threat (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.
There are 7 radially adjacent directions with no threat (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.
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
gaussian_rnd(mean=0, stdev=who knows) > (total defender bonus) - (total attacker bonus).
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 / 8). 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 using a melee or thrown weapon, add the value of the enchantment on the weapon. (Note that most weapons can only be enchanted safely to +5 now.)
- If the attacker is firing ammo from a launcher instead, take the average of the above enchantment calculations for both ammo and launcher (so add and then divide by 2).
- If the attacker is wielding an eroded weapon, subtract 1/3 per level of erosion. (Also counts for launchers, and stacks with erosion of launched projectiles.)
- 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/3) for the attacker's Luck.
- Add 0.5 if the attacker is invisible and the defender cannot see invisible.
- If the attacker is a Monk wearing body armor, subtract 10.
- If the attacker is mounted, subtract a riding penalty (TODO needs adjustment).
- If the attacker is engulfed, add 15.
- If the attack is ranged and the projectile is not actually a projectile, subtract 2, unless it is a boulder, in which case add 2. Despite what your TV tells you, throwing your sword does not work.
- If the attack is ranged and the projectile is kicked, subtract 1.5.
- If the attack is ranged, subtract distance/2.
- 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 3.
- If the attack is melee and the attacker is wielding a non-melee weapon (ammo, launcher, boomerang), subtract 1.
- Subtract 2 if the attacker is fumbling.
- Subtract 1 if the attacker is not fumbling but has slippery fingers.
- Subtract 1 if the attacker is currently stunned.
- Subtract 0.5 if the attacker is currently blinded.
- Subtract 0.5 if the attacker is currently confused.
- Subtract 0.5 if the attacker is currently trapped.
- Subtract 0.5 if the attacker is burdened, 1.5 if stressed, and 2.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.)
- Start at the defender's monster form evasiveness.
- If the defender has protection (the sum of divine protection and spell protection), add 1d(protection).
- Add ((defender speed - 12) / 6). This penalizes slow monsters and gives a small bonus to fast monsters.
- Add (2 - defender size) / 2. (This is the same penalty in vanilla, but halved).
- If the defender is wearing a shield and is not helpless, add half of (shield base defense + defender's shield skill + enchantment). The largest possible value for this is 6.5 (expert +5 large shield = 4 + 5 + 2 = 11).
- 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/3) for the defender's Luck.
- Add 1 if the defender is invisible and the attacker cannot see invisible.
- Sum up the defender's penalties from armor, making armor skill reductions as appropriate, then subtract it.
- Subtract 0.5 if the defender is currently confused.
- Subtract 1 if the defender is a monster and is fleeing.
- Subtract 1 if the defender is currently stunned.
- Subtract 1 if the defender is currently blinded.
- Subtract 2 if the defender is currently trapped.
- Subtract 2 if the defender is currently sleeping.
- Subtract 2 if the defender is currently paralyzed.
- Subtract 0.5 if the defender is burdened, 1.5 if stressed, and 2.5 if strained.
- 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.
This formula is a bit similar to the existing system. Monsters and armor have a fixed defense stat which serves only to reduce damage (which is a distinct factor from evasiveness and armor penalties). For tradition's sake, let's even call it armor class.
The amount of damage (from weapon, bonuses, strength, and skills) is not changed, except that weapon enchantment, like the other enchantments, is a 1d(enchantment) roll instead of a flat bonus. Any successful hit must deal at least 1 hit point of damage, so damage reduction applies only to the remaining portion of the damage. Additionally, if the reduction formula results in a fractional amount of damage, it will always round up to the next hit point.
There are a few possible scenarios regarding where the to-hit random number lies in relation to the target (call this difference the "to-hit discrepancy"):
- If the to-hit target is almost met, it is considered a near miss, though this has no special gameplay significance as of yet. Damage is 0.
- If the to-hit target is met exactly, the target is just barely hit. All successful hits can do no less than one hit point of damage, so in this case, damage is 1.
- If the to-hit target is exceeded by only a little bit, the hit is not a clean hit, and the defender will not take full damage, even if their armor class is 0.
- If the to-hit target is exceeded by a good amount, the hit is clean, and the defender takes full damage.
The interesting one is the third scenario. How much should damage be reduced by? I suggest a linear progression from 1 hit point when the difference between the to-hit target and random number is 0, to full damage when the difference is 1. In mathematical terms,
% of actual damage dealt = to-hit discrepancy * 100 (naturally capped at 100%).
The role of AC serves to stretch out this linear progression, so damage reduction happens over a wider range of positive to-hit discrepancies. The formula I suggest is
% of actual damage dealt = (to-hit discrepancy * 100) / (log(AC+1) + 1) (again capped at 100%). The idea of using a logarithm is that piling on more and more armor and better armor and enchantments diminishes its returns and becomes less effective. However, the base and offset of the logarithm definitely need to be adjusted so that AC gains are well-balanced both at low and high levels.
A simpler formula that scales AC linearly, not logarithmically, would be something like
% of actual damage dealt = (to-hit discrepancy * 100) / (1 + (AC/N)), where N is whatever coefficient is determined to be best balanced. Maybe this method works better, I'm not sure yet.
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 monsters, consider how much its body naturally absorbs or negates damage.
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.
- 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:
- In order to throw weapons effectively, you must have an empty hand (preferably your main hand; using your off hand has a small penalty). You can still throw things with your hands full, but you get no multishot and a large to-hit penalty. Maybe this should affect wands too - how are you going to zap a wand effectively without a free hand?
- 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.
- 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.
- Heavier weapons impair spellcasting more than lighter ones.
- 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 both hands' items cursed doesn't completely block spellcasting, though it applies an additional penalty.
- You cannot twoweapon if one of the weapons is a launcher.
- 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.
- Multishot does not work at melee range; you will only shoot one projectile.
- Two-handed weapons apply your melee strength bonus to damage twice.
- Twoweapon does not apply a strength bonus to its second weapon attack.
- The second twoweapon attack makes an independent to-hit roll, but the first attack need not hit; it always tries to make the second attack. 3.6 does this.
- 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: As stated above, two-handed weapons will provide good accuracy and high damage (comparable to a dwarvish mattock), at the expense of blocking the player from the benefits of wearing a shield and making it more difficult to switch to empty hands to cast spells or throw missiles in the heat of battle.
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 there are few good 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.) It gets progressively more expensive to buy more and more points, to the point where looting Ludios might be enough for your last couple of points.
- 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.
- 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.
- Flint stones count as slashing damage, and slings will be buffed in general (there are a number of ways this could be accomplished).
- 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.
- In the course of weapon rebalancing, "unnecessary" weapons will be removed; currently this list only contains all polearms except the halberd, bardiche, ranseur, and glaive.
- 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.
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.