전투의 목표
한 전투는 ‘정보 확인→위치 선택→공격 확정→다음 위험 판단’으로 이어진다. 공격 중 무조건 이동할 수 있으면 문과 방의 구조가 의미를 잃고, 행동 전체를 잠그면 조작이 답답해진다. 따라서 선딜의 초반과 후딜의 후반에는 취소를 허용하고 유효 타격 직전의 짧은 구간만 확정한다.

전투 콘셉트 — 명확한 바닥과 적 실루엣이 우선이다. 화면의 붉은 원은 위험 예고의 방향을 보여준다.
기본 입력과 우선순위
| 기능 | 마우스·키보드 | 게임패드 | 판정 |
|---|---|---|---|
| 이동 / 일반 공격 | 좌클릭 지면 / 적 | 좌스틱 / 기본 공격 버튼 | 적 클릭은 사거리까지 이동 후 공격 |
| 제자리 공격 | Shift+좌클릭 | 좌트리거+공격 | 이동 금지, 현재 방향 공격 |
| 기술 1~4 | Q/W/E/R | 범퍼·트리거 조합 | 키 재설정과 대체 조합 제공 |
| 회피 | Space | 회피 버튼 | 방향 입력 우선, 없으면 바라보는 방향 |
| 물약 벨트 | 1~4 | D패드 | 공용 1초 쿨다운 |
| 등불 초점 | F | 우스틱 클릭 | 즉시 사용, 쿨다운 12초 |
| 지도 / 가방 / 일지 | Tab / I / J | 메뉴 탭 | 단독 플레이에서 열면 일시정지 |
피격으로 인한 사망→강제 경직→회피→현재 기술→새 공격→이동 순으로 충돌 입력을 해결한다. 입력 버퍼는 150ms, 새 이동 명령은 이전 이동 목적지를 교체한다. 적·아이템·문이 겹치면 전투 중 적을 우선하고 Alt 키로 전리품 선택 모드를 켠다. 클릭한 적이 사라지면 마지막 보인 위치로 최대 1m만 이동하고 멈춘다. 원거리 기술은 벽 뒤 적에게 자원을 소모하지 않으며 ‘시야 차단’으로 알려준다.
| 행동 | 선딜 / 유효 / 후딜 | 이동 취소 |
|---|---|---|
| 한손 일반 공격 | 0.20 / 0.10 / 0.35초 | 첫 0.10초, 후딜 마지막 0.15초 |
| 석궁 일반 공격 | 0.25 / 0.05 / 0.50초 | 첫 0.10초, 후딜 마지막 0.20초 |
| 기본 주문 | 0.30 / 0.10 / 0.45초 | 첫 0.15초, 후딜 마지막 0.20초 |
| 회피 | 0.08 / 0.18 / 0.24초 | 시작 후 취소 불가, 거리 2m |
회피는 재사용 3초이며 유효 0.18초에 직접 타격을 회피한다. 바닥 지속 피해와 이미 걸린 출혈은 피하지 않는다. 회피가 이동 수단으로 반복 사용되지 않도록 전체 평균 이동량은 걷기보다 높지 않게 정한다. 연속 경직을 막기 위해 경직 후 1초 동안 경직 면역을 준다. 방패 수동 가드는 직업 기술로 구현해 공통 입력을 늘리지 않는다.
명중과 피해의 계산 순서
레벨 L, 적 레벨 E, 민첩 D, 적 회피값 V에서 일반 공격 명중률은 clamp(75 + 0.8D − 0.6V + 2(L−E), 50, 95)%다. V는 백분율이 아닌 회피 능력값이다. 레벨 차 보정은 ±15%p 이내로 제한한다. 바닥 장판·광역 기술은 위치 판정을 통과하면 명중하며 별도 명중 굴림은 없다. 빗나감은 짧은 회색 글자와 다른 충돌음으로 전달한다.
물리 원피해는 (무기 굴림값 + 0.8×힘[근접] 또는 0.7×민첩[원거리])×기술계수다. 주문 원피해는 (주문 도구 굴림값 + 1.0×지성)×기술계수다. 조건부 가산 피해는 같은 묶음에서 합하고, 최종 피해 증가는 별도의 제한된 묶음 한 번만 곱한다. 옵션을 서로 곱해 무한히 증폭시키지 않는다.
| 단계 | 규칙 |
|---|---|
| 1. 충돌 / 명중 | 사거리·시야·명중 통과 |
| 2. 원피해 | 무기 또는 도구 값 + 능력치 계수 |
| 3. 기술·증가 | 기술계수 × (1+같은 묶음 증가율 합), 합산 상한 +100% |
| 4. 치명 | 기본 5%, 장비 포함 최대 35%, 피해 1.5배 |
| 5. 물리 방어 | 물리 부분 ×100/(100+방어값) |
| 6. 속성 저항 | 해당 속성 부분 ×(1−저항), 저항 -25~60% |
| 7. 방어 기술 | 기술 피해감소 적용, 같은 종류 중 가장 큰 값 |
| 8. 확정 | 각 피해 성분 합산 후 반올림, 성공한 직접 타격 최소 1 |
물리와 화염을 함께 주는 무기는 피해 성분을 먼저 분리하고 각 방어를 적용한다. 물리 피해에 화염 저항까지 중복 적용하지 않는다. 출혈·독 같은 지속 피해는 치명타가 없고 처음 적용할 때 공격자의 피해 값을 고정한다.
예: 힘 10, 무기 굴림 20, 기술 1.2, 치명 없음, 적 방어 40이면 (20+8)×1.2×100/140=24 피해다. 같은 조건에서 치명타이면 36 피해다. 디버그 화면에 원피해·방어 후 피해·최종 값을 남겨 수식과 실제 판정을 비교한다.
상태 이상·회복·중첩
| 상태 | 기본 | 중첩 / 대응 |
|---|---|---|
| 둔화 | 이동 -25%, 2초 | 가장 강한 값만, 보스는 효율 0.5배 |
| 기절 | 행동 중지 0.8초 | 보스 지속 0.2초; 종료 후 3초 면역 |
| 출혈 | 3초, 원피해의 20% 총량 | 동일 시전자 1개, 강한 값 교체·시간 갱신 |
| 독 | 4초 고정 지속 피해 | 동일 독 1개, 해독제 제거 |
| 취약 | 받는 피해 +10%, 3초 | 한 종류만, 증가 묶음 상한 포함 |
| 공포 | 적 1.5초 후퇴 | 보스 면역; 길 없으면 짧은 움찔 |
회복약은 3초에 걸쳐 최대 체력 35%+20, 마나약은 최대 마나 30%+15를 회복한다. 같은 종류를 먼저 다시 먹으면 남은 회복 시간만 갱신하고 회복 속도는 중첩하지 않는다. 물약 공용 쿨은 1초다. 전투 중 기본 자연 회복은 없고 마을 휴식은 무료 완전 회복이다. 기술이나 장비의 회복은 별도 수치 상한을 둔다.
공간 전술과 대응
좁은 문은 근접 적 1~2기를 앞에 세워 받는 피해를 줄인다. 적 시전자와 긴 창은 뒤에서 공격할 수 있으므로 문에 고정되는 것만으로 모든 편성을 이기지 못한다. 기둥은 투사체를 막지만 바닥 장판은 기둥 뒤에도 생길 수 있다. 장판은 최소 0.8초 예고, 보스의 큰 공격은 최소 1.2초 예고를 제공한다.
원거리 적은 플레이어가 가까워지면 2m를 한 번 후퇴하고 4초 동안 다시 후퇴하지 않는다. 플레이어 이동 속도를 넘어 무한히 달아나지 않는다. 근접 적은 최대 6기의 추격 예산 안에서 접근하며 같은 문에 겹치지 않는다. AI는 회피 입력을 읽지 않고 실제 위치와 마지막 관측 상태만 사용한다.
검증과 튜닝
일반 적 한 마리 처치 3~6초, 일반 무리 15~30초, 정예 30~50초, 보스 180~300초를 기준으로 한다. 동급 일반 적의 직접 공격은 플레이어 최대 체력의 방어 후 8~12%, 정예 15~20%, 큰 보스 공격 25~35%를 목표로 한다. 예고 없는 단일 공격이 최대 체력 20%를 넘지 않게 한다.
첫 구현 검증은 벽 뒤 공격, 겹친 적 선택, 150ms 버퍼, 회피 무적 시작·끝 프레임, 혼합 속성 방어, 연속 기절, 물약 중첩, 동시 사망으로 좁힌다. 수치는 직업 기본 장비와 구역 권장 레벨로 측정한다. 전투가 길면 피해 수식·적 체력·이동 시간을 나누어 분석하고, 한꺼번에 배율을 올리지 않는다.