03 게임 모드 - kyhsa93/karda GitHub Wiki

03. 게임 모드

게임은 전장 단일 모드다(D10 이름 "전장", D13). 전장 안에 규칙이 다른 세 가지 경기 방식을 둔다.

3.1 경기 방식 한눈에

경기 방식 판정 한 판 거점 티켓 편제 단계
빠른 점령전 채택 — 첫 배포(B1) · 모바일 권장 8~12분 (제한 15분) 3 각 300 대규모 × 0.5 B1
점령전 채택 — 기본 경기 18~28분 (제한 35분) 7 각 800 대규모(기본, D4) B5
돌파 채택 — 세 번째 25~35분 3구역 × 2 공격 600(+구역당 200) / 수비 없음 구역별 고정 B9
팀 데스매치 제외 — — — — 거점이 없으면 "싸움을 고른다"(P5)가 사라짐
헬기·전투기 공중전 전용 제외 — — — — 전장의 일부로 충분. 지상이 비면 봇 전투가 안 보인다

모든 수치의 (추정)은 헤드리스 하니스(기술 설계 9.10)로 확정한다.

3.2 경기 흐름

[타이틀: 전장 · 설정 · 크레딧]
  → [전장 설정: 경기 방식·맵·진영·병력 규모·난이도·시간대·시드]
  → [배치(첫 출격): 병과·스폰 지점 또는 탈것 슬롯]   ← 이때만 전장이 멈춰 있다
  → [전장] ⇄ (탑승·하차, 재보급: 거점 FARP·탄약 상자·재보급 회랑)
  → 사망 → (사망 화면 3초: 누가·무엇으로·거리) → [배치: 10초 대기, 전장은 계속]
  → … 반복 …
  → 경기 종료(티켓 0 / 시간 제한 / 돌파 완료·실패) → [경기 후 보고]
  • 첫 배치에서만 전장 시계가 멈춘다. 이후 배치 대기 동안 전장은 계속 돈다 — 죽음의 비용(티켓 + 10초 공백)이 실제로 느껴지게.
  • 일시정지(Esc)는 전장 전체를 멈춘다(1인 게임이므로 허용). 경기 포기는 패배 처리.
  • 처음 실행이면 전장 설정이 "첫 경기" 기본값으로 채워진다: 빠른 점령전(편제 대규모 × 0.5)·하레크 계곡·연합·쉬움·주간. 사용자가 바꿀 수 있다(UI/UX 8.10).

3.3 점령전 규칙

거점

  • 거점은 반경 R = 50m(마을 거점 80m)의 원. 보병이 걸어서 다투는 크기로 줄였다(이전 초안 150m는 아파치 시점 기준). 유닛이 아닌 전장 상태 객체(ControlPoint)라 동시 유닛 예산에 들어가지 않는다.
  • 가운데 깃발 기둥(코드 모델, 12m). 연합 = 사각 깃발, VPA = 삼각 깃발, 중립 = 깃발 없음. 점령 진행에 따라 깃발이 오르내린다. HUD 표식(UI/UX 8.4)도 같은 모양을 쓴다(색만으로 구분하지 않는다).
  • 점령 세력(거점 원 안, 살아 있고 탈것 안에 태워져 있지 않은 것):
대상 세력 근거
봇 분대 살아 있는 인원 ÷ 5 (5인 분대 가득 = 1.0, 3인 대공조 = 0.6, 2인 저격조 = 0.4) 인원 비례
플레이어 보병 0.6 (추정) 한 사람이 봇 3명 몫. 주인공이 혼자서도 거점을 흔들 수 있되(중립 42초) 분대보다는 느리게
지상 탈것 (봇·플레이어 조종 모두) 0.5 탑승 보병은 내려야 센다
헬기·전투기 0 떠 있는 기체는 점령하지 못한다(P2: 거점 위 호버는 자살)
  • 점령 값 v ∈ [−100, +100](+는 연합). 1Hz로 d = 연합 세력 − VPA 세력:
    • 양쪽 다 세력이 있고 |d| < 0.3이면 교전 중(값 고정).
    • 아니면 v += 4 × clamp(d, −3, 3) (초당).
    • v가 ±100에 닿으면 소유, 소유 중인 거점은 v가 0을 지나면 중립.
  • 결과 시간: 봇 5인 분대 하나로 중립→점령 25초, 적 소유→아군 50초. 플레이어 혼자 42초 / 84초. 세력 3 이상이면 8초 / 17초.

티켓

항목 점령전 빠른 점령전 근거
시작 티켓 800 300 아래 길이 추정
거점 열세 출혈 거점이 적은 쪽이 0.1 × (적 거점 수 − 내 거점 수) 티켓/초 같음 1개 열세 = 분당 6
시간 제한 35분 15분 한 판 목표 + 여유
손실 티켓 근거
봇 분대원 1명 / 플레이어 보병 사망 1 사람 한 명 = 1 (배틀필드 관례)
경차량·수송 트럭 2 전투 가치 비례
장갑차·방공 차량·본진 고정 대공 3
전차·수송 헬기 4
공격 헬기·전투기 5 전장 최강 단일 전력
  • 탈것 티켓에는 승무원이 포함된다(봇 탈것의 승무원은 따로 세지 않는다). 태워 가던 분대원은 따로 1명당 1(수송 헬기 격추 = 4 + 탑승 인원).
  • 티켓은 죽을 때 깎인다(리스폰할 때가 아님).
  • 승패: 한쪽 티켓이 0이면 즉시 상대 승리. 시간 제한이면 티켓 많은 쪽 → 거점 많은 쪽 → 무승부.
  • 1차 밸런스 (B1-15, 하니스 20시드): 빠른 점령전은 티켓 200·출혈 0.3/초·거점으로 바꿨다(표의 300·0.1은 점령전 값). 봇만으로 한 판 중앙값 약 12분, 대리 헬기가 있으면 약 11분. 결과표는 저장소 docs/battle/baseline.md.
  • 구현 메모 (B1-8, sim/battle/conquest.ts): 점령·출혈·손실·승패는 1Hz. 분대원 손실은 인원이 줄어드는 순간(1초 안) 1명당 1, 봇 탈것은 파괴 순간 분류별 비용. 플레이어 아파치 격추 = 1 + 공격 헬기 5 = 6. 티켓은 소수로 깎이고(출혈 0.1/초) 표시·시간 제한 비교는 내림. 양쪽이 같은 초에 0이 되면 무승부. 경기 방식 수치의 원본은 src/content/battle/modes.json(빠른 점령전은 extends: conquest).
  • 한 판 길이 추정(점령전): 봇끼리 소모 진영당 분당 1525(추정: 분대원 사망 1218 + 탈것 12대), 플레이어가 적에게 더하는 손실 분당 38, 거점 13개 열세 출혈 분당 618. 지는 쪽 분당 약 3045 → 800티켓이면 **1827분**. 빠른 점령전: 편제 절반·출혈 분당 6 → 지는 쪽 분당 약 2535 → 300티켓이면 **912분**.

봇 리스폰

  • 편제에서 빠진 유닛은 30초마다 한 번 파도로 되살린다(티켓이 남아 있을 때만). 봇 분대의 쓰러진 인원은 분대가 전멸하기 전에는 돌아오지 않는다(돌격병 구급 상자 예외, 보병 12.4).
  • 스폰 위치: 봇 분대는 교전 중이 아닌 아군 거점 또는 본진, 탈것은 플레이어 역할 2.3 표의 위치.

플레이어 리스폰

  • 사망 → 티켓 1 차감(탈것을 타고 있었으면 탈것 티켓도) → 사망 화면 3초 → 배치 화면. 대기 10초(추정, 첫 배치 0초).
  • 스폰 지점:
지점 조건 무엇으로
본진 항상 보병, 모든 탈것 슬롯
아군 거점 아군 소유 + 교전 중 아님 + 적 보병·탈것이 거점 150m 안에 없음 보병, 경차량, (FARP 딸린 거점이면) 장갑차 1·헬기
아군 분대 플레이어가 보병일 때, 봇 분대가 교전 중(최근 10초 사격)이 아니고 적이 100m 안에 없음 보병(분대 옆 5m)
전방 집결지 (#192, 결정 O9) 맵에 진영·모드별로 정한 고정 좌표(modes.<mode>.rally), 적이 100m 안에 없음(분대 옆과 같은 열림 조건). 거점이 아니다 — 점령·티켓·지휘관 효용과 무관 보병. 보병 첫 배치의 기본 선택. 맵 검사(rally.test.ts): 가장 가까운 비소유 거점 원 ≤ 600m, 주변이 걸을 수 있는 땅, 보병 규칙으로 걸어 닿는 길 ≤ 780m
스폰 비콘 정찰병이 설치한 비콘(1개), 적이 30m 안에 없음 보병
전투기 본진 상공 공중 출격 전투기
  • 스폰 무적은 없다(소유자 결정). 대신 본진 반경 800m에는 적 지상 봇이 들어오지 않고, 적 본진 방공은 내 본진 이륙 구역에 닿지 않도록 맵을 배치한다(전장 맵 6.2).

전투 구역 경계

  • 지상(보병·지상 탈것)과 헬기: 맵의 전투 구역(맵마다 다각형) 밖으로 나가면 경고 + 10초 카운트다운, 넘기면 사망/파괴(티켓 차감). 전투기: 외곽 공역 경계에 같은 규칙. 이 규칙은 추가 결정 A3의 권장안이며 B1에서 헬기부터 적용한다.

3.4 빠른 점령전

  • 표준 맵의 일부(하레크 계곡이면 거점 A·D·G와 두 본진이 들어가는 5 × 10km 띠)를 전투 구역으로 쓴다.
  • 편제는 대규모의 절반(진영당 분대 10·지상 탈것 7·공격 헬기 1·전투기 1·본진 고정 대공 2), 수송 헬기 없음.
  • B1 첫 배포의 경기 방식. B1에서는 플레이어 탈것이 아파치뿐이고 봇은 지상군만 있다(로드맵).

3.5 돌파 (B9)

  • 공격 쪽과 수비 쪽을 경기 설정에서 고른다(진영과 별개: 연합 공격/VPA 공격 모두 가능, D8 대칭).
  • 맵을 남→북 3구역으로 나누고 구역마다 거점 2개. 공격 쪽이 현재 구역의 두 거점을 동시에 소유하면 구역이 무너진다 → 수비 봇 퇴각, 공격 티켓 +200, 그 구역 거점 잠김, 공격 본진·FARP 전진.
  • 공격 티켓 600 시작, 0이면 수비 승리. 마지막 구역 붕괴면 공격 승리. 수비는 티켓 대신 구역마다 편제 고정 + 재보충 파도 3회.
  • 뒤 구역일수록 대공망이 두꺼워진다(1구역 방공 차량 1 → 3구역 SAM 2 + 레이더). 전장 안에서 가장 "이야기가 있는" 방식(P4′).

3.6 수치의 원본

경기 방식 수치는 src/content/battle/modes.json에 둔다(문서 표 → JSON, 이후 밸런스는 JSON에서).

{
  "conquest": { "tickets": 800, "bleedPerPointPerSec": 0.1, "timeLimitSec": 2100,
                "captureRatePerSec": 4, "captureCap": 3, "contestedBelow": 0.3,
                "strength": { "squadPerMember": 0.2, "player": 0.6, "groundVehicle": 0.5, "air": 0 },
                "ticketCost": { "person": 1, "light": 2, "apc": 3, "airDefense": 3, "tank": 4, "transportHeli": 4, "attackHeli": 5, "jet": 5 },
                "botWaveSec": 30, "playerRespawnSec": 10, "boundaryGraceSec": 10 },
  "quickConquest": { "extends": "conquest", "tickets": 300, "timeLimitSec": 900, "rosterScale": 0.5 },
  "breakthrough": { "attackerTickets": 600, "sectorBonus": 200, "defenderWavesPerSector": 3 }
}
⚠️ **GitHub.com Fallback** ⚠️