콘텐츠로 이동

전투 시스템

모든 판정은 서버에서 이루어집니다. 클라이언트는 「이 몬스터를 공격하겠다」만 보내고 결과는 서버가 정합니다.

20면체 주사위를 굴립니다:

d20 + 명중 보너스 > 대상 Guard → 명중
d20 + 명중 보너스 ≤ 대상 Guard → 빗나감

초과여야 합니다. 굴린 값이 Guard와 정확히 같으면 빗나갑니다.

명중 보너스:

  • 기본 = floor(레벨 / 2)
  • 플레이어 근접 공격은 여기에 STR 보정값이 더해집니다
  • 몬스터는 데이터에 지정값이 있으면 그것을, 없으면 레벨 기본값을 씁니다

가로가 대상 Guard, 세로가 당신의 총 명중 보너스입니다.

명중 보너스Guard 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%

당신의 총 명중 보너스(레벨의 절반 + STR 보정값)로 찾아보세요:

몬스터Guard+0+2+4+6+8
코볼트 8 60% 70% 80% 90% 100%
고블린 9 55% 65% 75% 85% 95%
스토커 10 50% 60% 70% 80% 90%
여성 오크 10 50% 60% 70% 80% 90%
오크 11 45% 55% 65% 75% 85%
고블린 족장 11 45% 55% 65% 75% 85%
오크 워로드 13 35% 45% 55% 65% 75%

반대로, 당신의 Guard(DEX 기본값 + 장비 합계)로 찾아보세요:

몬스터명중 보너스내 Guard 10내 Guard 14내 Guard 18내 Guard 22명중 시 피해
코볼트 +0 50% 30% 10% 0% 1d4
고블린 +1 55% 35% 15% 0% 1d4
스토커 +1 55% 35% 15% 0% 1d6
오크 +2 60% 40% 20% 0% 1d6
여성 오크 +3 65% 45% 25% 5% 1d6
고블린 족장 +2 60% 40% 20% 0% 1d8
오크 워로드 +6 80% 60% 40% 20% 2d8

Guard를 쌓는 효율은 아주 직접적입니다 — Guard가 1 오를 때마다 상대의 명중률이 5%씩 떨어집니다. 판금 세트를 완성하면(Guard 합계 19) 저레벨 몬스터는 거의 당신을 때리지 못합니다.

명중했을 때만 피해를 굴립니다. 주사위 표기는 {개수}d{면수}입니다:

2d6 → 6면체 두 개를 굴려 합산(2–12)

플레이어의 근접 피해에는 STR 보정값이 더해집니다.

무기피해 주사위최소평균최대무게
철검 1d8 1 4.5 8 3 kg
낡은 철검 1d6 1 3.5 6 3 kg
1d6 1 3.5 6 4 kg
단검 1d4 1 2.5 4 1 kg
고블린 검 1d4 1 2.5 4 2 kg
작은 검 1d4 1 2.5 4 1.5 kg
횃불 1d4 1 2.5 4 1 kg
타다 남은 횃불 1d4 1 2.5 4 1 kg

STR 보정값은 명중할 때마다 더해지므로, 피해가 낮은 무기일수록 상대적 상승폭이 큽니다: STR 18(+4)로 단검(1d4, 평균 2.5)을 쓰면 실제 평균은 6.5로 2.6배가 됩니다.

Guard는 NetHack의 AC를 뒤집은 값입니다 — 높을수록 좋습니다.

Guard의미
0–7거의 무방비
8–9방어가 약함
10보통
11–13단단함
14+중장갑 이상

NetHack과의 대응: Guard = 10 − AC.

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

Guard가 10을 넘는 만큼 보너스가 붙습니다 — 잡기 어려운 몬스터가 더 많이 줍니다.

몬스터레벨GuardXP체력XP / 체력
코볼트 1 8 2 5 0.40
고블린 2 9 5 9 0.56
스토커 3 10 10 14 0.71
여성 오크 4 10 17 18 0.94
오크 4 11 19 18 1.06
고블린 족장 5 11 28 23 1.22
오크 워로드 10 13 107 120 0.89

XP / 체력 열이 효율 지표입니다 — 클수록 체력 1점을 깎을 때 얻는 경험치가 많습니다. 오크 워로드는 XP가 가장 높지만 120이나 되는 체력을 깎아야 해서 효율은 최고가 아닙니다.

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

한 레벨마다 정확히 두 배인 순수 지수 곡선이며, 완화 구간이 전혀 없습니다.

레벨누적 XP이 레벨에 필요오크 몇 마리쯤
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

맨 오른쪽 열은 오크(레벨 4, Guard 11, 마리당 19 XP) 기준입니다. 두 자릿수 레벨에 들어서면 현재 몬스터로 레벨을 올리는 게 매우 느려집니다 — 지금 게임의 콘텐츠 분량은 대략 10레벨 언저리에 대응합니다.

죽어도 장비는 잃지 않지만 경험치가 깎입니다:

현재 레벨 구간 = XP(L+1) - XP(L)
차감량 = max(1, floor(구간 × 0.15))

즉 **현재 레벨 진행도의 15%**입니다.

깎은 뒤 XP가 현재 레벨의 시작치보다 낮아지면 한 레벨 떨어집니다. 다만 보호 장치가 둘 있습니다:

  • 한 번 죽어서 최대 한 레벨만 떨어집니다.
  • 레벨 1은 떨어지지 않습니다.

레벨이 떨어지면 XP가 아래 구간의 30% 진행도로 보정됩니다 — 승급 직전에서 계속 맴도는 상황을 막기 위해서입니다.

레벨레벨 구간사망 차감오크 몇 마리로 회복
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

레벨이 떨어지면 체력도 줄어듭니다

섹션 제목: “레벨이 떨어지면 체력도 줄어듭니다”

「레벨업/다운을 반복해 체력을 불리는」 짓을 막기 위해, 레벨이 떨어질 때 깎이는 체력의 분포가 레벨업 때 오르는 분포와 완전히 같습니다:

생명 주사위를 굴리고, 최소 절반을 보장한 뒤, CON 보정값을 더한다

그래서 장기 기댓값이 0입니다 — 오르내림을 반복해도 통계적 이득이 없습니다. 체력이 레벨 1의 초기값 아래로 내려가지도 않습니다.

생명 주사위클래스상승 / 하락 기댓값
d10 야만인, 혈거인, 기사, 발키리 6.50
d8 레인저, 사무라이, 몽크, 사제 5.25
d6 고고학자, 힐러, 로그, 위저드 4.00
d4 관광객 2.75

레벨이 떨어지지 않았다면 체력은 깎이지 않습니다.

죽은 뒤 부활을 요청하면 서버가 체력이 0인지 확인하고 가득 채운 뒤 원점 (0, 0, 0)으로 보냅니다. 포만도는 300(든든함 구간의 하한)으로 초기화되어, 굶은 채로 부활해 바로 쇠약해지는 일이 없습니다.

몬스터 AI는 클라이언트가 계산하지만 공격 판정은 반드시 서버가 정합니다.

상태설명
idle대기(30% 확률로 무작위 이동)
walk이동 중
run플레이어 추적(추적 거리 안)
attack공격 중(공격 거리 안)
hit피격 경직(약 800밀리초)
dead사망

몬스터는 죽은 뒤 30초가 지나야 사라집니다. 각 몬스터의 추적 거리와 공격 간격은 몬스터 도감에 있습니다.