Skip to content

Combat

Every roll happens on the server. The client only sends “I want to attack this monster”; the server decides what happened.

Attacks roll a d20:

d20 + attack bonus > target Guard → hit
d20 + attack bonus ≤ target Guard → miss

Note it’s strictly greater. Rolling exactly the target’s Guard is a miss.

Attack bonus:

  • Base = floor(level / 2)
  • Player melee adds your STR modifier
  • Monsters use their data value if they have one, otherwise the level default

Columns are the target’s Guard, rows are your total attack bonus.

Attack bonusGuard 8Guard 9Guard 10Guard 11Guard 13Guard 15
+0 60% 55% 50% 45% 35% 25%
+1 65% 60% 55% 50% 40% 30%
+2 70% 65% 60% 55% 45% 35%
+3 75% 70% 65% 60% 50% 40%
+4 80% 75% 70% 65% 55% 45%
+5 85% 80% 75% 70% 60% 50%
+6 90% 85% 80% 75% 65% 55%
+7 95% 90% 85% 80% 70% 60%
+8 100% 95% 90% 85% 75% 65%
+9 100% 100% 95% 90% 80% 70%
+10 100% 100% 100% 95% 85% 75%

Look up your total attack bonus (half your level, plus your STR modifier):

MonsterGuard+0+2+4+6+8
Kobold 8 60% 70% 80% 90% 100%
Goblin 9 55% 65% 75% 85% 95%
Stalker 10 50% 60% 70% 80% 90%
Female Orc 10 50% 60% 70% 80% 90%
Orc 11 45% 55% 65% 75% 85%
Goblin Chief 11 45% 55% 65% 75% 85%
Orc Warlord 13 35% 45% 55% 65% 75%

The other direction, by your Guard (DEX base plus equipment):

MonsterTo-hitYour Guard 10Your Guard 14Your Guard 18Your Guard 22Damage on hit
Kobold +0 50% 30% 10% 0% 1d4
Goblin +1 55% 35% 15% 0% 1d4
Stalker +1 55% 35% 15% 0% 1d6
Orc +2 60% 40% 20% 0% 1d6
Female Orc +3 65% 45% 25% 5% 1d6
Goblin Chief +2 60% 40% 20% 0% 1d8
Orc Warlord +6 80% 60% 40% 20% 2d8

Stacking Guard pays off very directly — each +1 costs the attacker 5% hit chance. A full plate set (19 Guard total) makes you nearly unhittable by low-level monsters.

Damage is only rolled on a hit. Dice notation is {count}d{sides}:

2d6 → roll two six-sided dice and sum (2–12)

Player melee adds your STR modifier.

WeaponDamageMinAvgMaxWeight
Iron Sword 1d8 1 4.5 8 3 kg
Worn Iron Sword 1d6 1 3.5 6 3 kg
Spear 1d6 1 3.5 6 4 kg
Dagger 1d4 1 2.5 4 1 kg
Goblin Sword 1d4 1 2.5 4 2 kg
Small Sword 1d4 1 2.5 4 1.5 kg
Torch 1d4 1 2.5 4 1 kg
Worn Torch 1d4 1 2.5 4 1 kg

The STR modifier applies to every hit, so it lifts low-damage weapons proportionally more: STR 18 (+4) with a Dagger (1d4, average 2.5) actually averages 6.5 — 2.6× the base.

Guard is NetHack’s AC inverted — higher is better.

GuardMeaning
0–7Barely defended
8–9Light defence
10Ordinary
11–13Solid
14+Heavy armor and up

Against NetHack: Guard = 10 − AC.

XP = 1 + level² + max(Guard - 10, 0) × 2

Guard above 10 earns a bonus — harder monsters pay more.

MonsterLevelGuardXPHealthXP / health
Kobold 1 8 2 5 0.40
Goblin 2 9 5 9 0.56
Stalker 3 10 10 14 0.71
Female Orc 4 10 17 18 0.94
Orc 4 11 19 18 1.06
Goblin Chief 5 11 28 23 1.22
Orc Warlord 10 13 107 120 0.89

XP / health is the efficiency column — higher means more XP per point of health you have to chew through. The Orc Warlord gives the most XP but takes 120 health to get there, so it isn’t the most efficient.

XP(n) = 20 × 2^(n-2) (n ≥ 2)

Every level costs exactly twice the last — a pure exponential with no easing.

LevelCumulative XPThis level costsOrcs, roughly
1 0
2 20 20 2
3 40 20 2
4 80 40 3
5 160 80 5
6 320 160 9
7 640 320 17
8 1,280 640 34
9 2,560 1,280 68
10 5,120 2,560 135
11 10,240 5,120 270
12 20,480 10,240 539
13 40,960 20,480 1,078
14 81,920 40,960 2,156
15 163,840 81,920 4,312
16 327,680 163,840 8,624
17 655,360 327,680 17,247
18 1,310,720 655,360 34,493
19 2,621,440 1,310,720 68,986
20 5,242,880 2,621,440 137,971

The last column converts to Orcs (level 4, Guard 11, 19 XP each). Past the first ten levels, grinding on the current monster roster gets very slow — the game’s content today lines up with roughly the first ten levels.

Dying costs no equipment but does cost XP:

level band = XP(L+1) - XP(L)
penalty = max(1, floor(band × 0.15))

That’s 15% of your progress through the current level.

If the deduction drops you below the level’s starting XP you lose a level. Two protections:

  • At most one level per death.
  • Level 1 never drops.

After a drop your XP is floored at 30% through the lower band, so you don’t end up stuck just short of relevelling over and over.

LevelLevel bandLost on deathOrcs to recover
2 20 3 1
3 40 6 1
4 80 12 1
5 160 24 2
6 320 48 3
7 640 96 6
8 1,280 192 11
9 2,560 384 21
10 5,120 768 41
11 10,240 1,536 81
12 20,480 3,072 162
13 40,960 6,144 324

So that repeatedly levelling up and down can’t be farmed for health, the distribution of health lost on a level-down is identical to the health gained on a level-up:

roll the hit die, guarantee at least half, add the CON modifier

The long-run expectation is therefore zero — no statistical gain from cycling. Health also never drops below your level 1 value.

Hit dieClassesExpected gain / loss
d10 Barbarian, Caveman, Knight, Valkyrie 6.50
d8 Ranger, Samurai, Monk, Priest 5.25
d6 Archaeologist, Healer, Rogue, Wizard 4.00
d4 Tourist 2.75

If you didn’t lose a level, you don’t lose health.

Request a respawn and the server confirms your health is 0, refills it and returns you to the origin (0, 0, 0). Satiation resets to 300 — the bottom of the Well-Fed band — so you don’t respawn starving and immediately go Weak.

Monster AI runs on the client, but attack resolution always goes to the server.

StateMeaning
idleWaiting (30% chance to wander)
walkMoving
runChasing a player (within chase range)
attackAttacking (within attack range)
hitStagger from being hit (~800 ms)
deadDead

A dead monster is removed after 30 seconds. Per-monster chase ranges and attack intervals are in Monster index.