07 진행과 보상 - kyhsa93/karda GitHub Wiki

07. 진행과 보상

캠페인이 없어졌으므로(D13) 진행·보상·해금은 전장 자체에서 나온다. 온라인 순위도 다른 사람도 없는 1인 게임에서 "한 판 더"의 이유를 만드는 것이 이 장의 질문이다.

원칙(기존 02장 2.5를 유지): 해금은 전술 선택지를 여는 것이고, 단순 수치 상승은 넣지 않는다. 처음 받는 기본 장비만으로도 모든 역할을 충분히 할 수 있어야 한다(D6 항상 열림과 같은 정신).

7.1 반복 동기

동기 무엇 왜 반복되나 단계
매 판이 다르다 봇 전투가 시드·플레이어 행동에 따라 다른 거점을 무너뜨린다. 경기 방식 × 맵 × 진영 × 시간대 × 규모 × 난이도 × 병과·탈것 "이번엔 전투기로 적 헬기만 잡아 보자" B1~
역할 숙련 병과 4 + 탈것 8계열마다 숙련 레벨 1~5, 레벨마다 옆 선택지 1개 안 해 본 역할을 해 볼 이유 B8
개인 평점 한 판마다 기여도 기반 S/A/B/C 맵별 최고 기록 B8
계급 누적 경험치로 오르는 칭호(성능 보상 없음) 긴 호흡의 표시 B8
오늘의 전장 날짜로 정한 시드·맵·경기 방식·진영, 그날 최고 기록·연속 참가 일수 매일 들어올 이유(서버 없이 날짜 → 시드) B8
작전 전장 3개 연속, 결과로 전선이 움직임 캠페인이 없는 게임의 "이야기" B9
리본 한 번 받는 기록 배지 20종 수집 B8

7.2 한 판의 개인 점수

계산은 src/sim/battle/score.ts(sim 층, 결정론). 배틀필드식으로 "팀에 도움 된 행동"마다 점수를 준다.

항목 점수 비고
적 분대원 처치 100 헤드샷 +25
적 탈것 파괴 경차량·트럭 150 / 장갑차·방공 차량 250 / 전차·수송 헬기 350 / 공격 헬기·전투기 400 탑승 분대원은 따로
처치 보조 처치 점수의 50% 10초 안에 피해를 준 쪽
거점 점령 참여 250 점령 순간 원 안 또는 원 100m 안에서 교전
거점 방어 50 / 처치 아군 거점 원 + 100m 안에서 적 처치
스폿·식별·레이저 지시 보조 30 / 건 내가 스폿·식별·지시한 적을 아군이 처치
수송 50 / 분대원 내가 태워 간 분대원이 목표 거점 300m 안에서 하차
수리 10 / 20HP 아군 탈것
재보급·치료 10 / 회 탄약 상자·구급 상자가 아군을 채움
지원 요청 해결 +300 3분 안, 표시된 적 차량 70%
승리 +1000 무승부 +300
사망 점수 감점 없음 티켓 1이 이미 비용(P4′). 사망 수는 평점 조건에만
아군 오사 분대원 −200 / 탈것 −500 실격 없음(D9). 피해는 실제로 들어간다

7.3 평점 — "기여도"

점수 절대값은 판마다 전투량이 달라 비교가 어렵다. 기여도 = 플레이어가 적에게 입힌 티켓 손실 + 플레이어 행동으로 생긴 아군 이득(점령·수송·지시 보조를 티켓 환산) ÷ 적 전체 티켓 손실(출혈 제외).

평점 기여도 조건
S ≥ 12% 승리
A ≥ 8% 승리
B ≥ 4% 승리, 또는 패배 시 상한
C 그 밖
  • 문턱은 (추정). 이전 초안(30%)보다 낮은 이유: 인형 180명 전장에서 한 사람의 몫이 작다. B8-3에서 하니스 대리 조종사 기여도 분포로 중앙값 B·상위 20% A·상위 5% S가 되게 맞춘다.

7.4 경험치·계급

  • 경험치 = 경기 점수 전부(승패 보너스 포함). 누적만 한다.
  • 계급 14단계(칭호만): 이병 · 일병 · 상병 · 병장 · 하사 · 중사 · 상사 · 원사 · 소위 · 중위 · 대위 · 소령 · 중령 · 대령. 필요 누적 경험치는 계급 n에 4,000 × n^1.5(추정: 한 판 평균 약 4,000점 가정 → 대령까지 약 120판). 경기 후 보고·타이틀에 표시.

7.5 숙련과 해금 (옆 선택지만)

A6 결정(2026-09-30): 모든 장비는 처음부터 열려 있다. 아래 해금표는 장비 해금으로 쓰지 않는다. 숙련 레벨은 복무 기록과 도색(외형) 보상에만 쓰고, 표의 장비 구성은 처음부터 고를 수 있는 선택지 목록으로 읽는다.

역할마다 숙련 경험치(그 역할로 얻은 점수)를 따로 쌓는다. 레벨 25에서 같은 슬롯의 다른 선택지가 하나씩 열린다. 기본 장비(레벨 1)는 모든 상황에 쓸 만해야 하고, 해금 장비는 "다른 상황에 더 맞는 것"이지 "더 센 것"이 아니다. 레벨당 필요 숙련 경험치 3,000·6,000·10,000·15,000(추정, 그 역할로 약 12판씩).

역할 L1 기본 L2 L3 L4 L5
돌격 돌격소총, 유탄 6, 구급 상자, 연막 2 산탄 부착(유탄 대신: 근거리 강함, 폭발 없음) 연사 속도 느리고 정확한 전투소총 구급 상자 → 제세동 주사(쓰러진 봇 분대원 1명 즉시 복귀, 45초 재사용) 도색
공병 카빈, 대전차 로켓(무유도) 3, 수리 도구, 대전차 지뢰 2 유선 대전차 미사일 2(조준 유지 필요, 사거리 1km, 대신 로켓 3발 → 2발) 지뢰 대신 폭약 2(원격 기폭) 기관단총 도색
지원 경기관총, 탄약 상자, 휴대용 대공 미사일 2 대공 미사일 대신 박격포 3발(간접 사격, 거점 제압) 확장 탄창 대신 양각대 거치 사격(엎드리면 반동 감소) 탄약 상자 → 탄약 가방(던지는 1회용, 빠름) 도색
정찰 저격소총, 쌍안경, 레이저 지시기, 스폰 비콘 반자동 지정사수 소총(연사, 낮은 피해) 쌍안경 대신 동작 감지기(투척, 20m 안 적을 미니맵에 10초) 지시기 대신 원격 무인 정찰기(10초 상공 스폿, 60초 재사용) 도색
전차 APFSDS + HE, 동축 기관총, 연막 연막 대신 적외선 방해(유선·레이저 대전차 유도 끊기 1회) HE 대신 캐니스터(근거리 대보병) 조준경 열상 모드 도색
장갑차 30mm, 대전차 미사일 2 대전차 미사일 대신 연막 30mm 철갑/고폭 탄종 전환 열상 조준경 도색
경차량·트럭 중기관총 / 없음 경차량 유탄 기관총 트럭 탑승석 +1분대(느림) — 도색
방공 차량 대공포 대공포 + 단거리 대공 미사일 2(대공포 탄약 −40%) 레이더 수동 모드(적 레이더 경보에 안 잡힘, 선도 조준점 없음) — 도색
공격 헬기 기관포, 로켓 2포드, 레이저 대전차 미사일 8(아파치: 헬파이어 K), 플레어 레이더 표적 탐지 + 레이더 유도 미사일(아파치: FCR + 헬파이어 L, 대신 레이저 미사일 8 → 4 + L 4) 로켓 1포드 → 공대공 미사일 2(아파치: 스팅어) 채프 도색
수송 헬기 플레어 문 기관총(수송 헬기가 착지 중이면 자동 사격하는 봇 사수) 좌석 +1분대 대신 연료·탄약 보급(착지 중 주변 아군 재보급) 채프 도색
전투기 기관포, 공대공 2, 무유도 폭탄 4, 플레어 공대지 미사일 2(폭탄 대신) 공대공 4 제공 구성 레이저 유도 폭탄 2(아군 레이저 지시 필요) 도색
  • 진영 대칭: VPA의 같은 역할도 같은 해금표(이름만 다름, 예: 아파치 헬파이어 ↔ VPA 대전차 미사일).
  • 해금이 소유자 원칙("수치 상승 없음")에 맞는지 애매한 항목(예: 공격 헬기 L2 레이더)은 해금 방식 자체를 추가 결정 A6으로 올렸다(숙련 해금 vs 모두 열림). 결정 전까지(B1~B7)는 모든 장비가 열린 상태로 구현한다.

7.6 복무 기록과 리본

  • 복무 기록: 경기 수·승률, 맵별 최고 점수·평점, 역할별 플레이 시간·처치, 탈것별 파괴 수, 사망 수, 수송 인원, 지원 요청 해결 수. 타이틀 전장 버튼 아래 N전 M승 · 상병 · 최고 A 한 줄.
  • 리본 20종(한 번 받으면 끝, 성능 보상 없음). 예:
리본 조건
거점 수호자 한 판에 거점 방어 처치 10
하늘의 사냥꾼 헬기·전투기 누적 격추 10
무사 귀환 한 번도 죽지 않고 승리
기갑 파괴자 한 판에 전차 3대(어떤 수단이든)
운전병 한 판에 봇 분대원 20명 수송
전장의 눈 한 판에 스폿·식별·지시 보조 15
역전 티켓이 150 이상 뒤진 상태에서 승리
만능 한 판에 보병·지상 탈것·헬기·전투기 모두로 처치
두 깃발 연합과 VPA로 각각 승리

7.7 오늘의 전장

  • 날짜(사용자 기기 시간대 기준 YYYY-MM-DD) → 해시 → 시드·맵·경기 방식·진영·시간대. 변환은 UI 층에서 하고 sim에는 시드만 넘긴다(sim에 Date 금지).
  • 그날 최고 점수·평점, 연속 참가 일수를 저장.

7.8 작전 (B9)

  • 카르다 반격 작전(진영 선택 가능: 연합이면 반격, VPA면 방어): ① 하레크 계곡 점령전 → ② 베로스 저수지 점령전 → ③ 카르다 고개 돌파.
  • 캠페인 지도 화면은 제거됐으므로 새 작전 지도(3칸 전선 막대 + 맵 썸네일, 인라인 SVG)를 만든다. 승리하면 다음 전장, 패배하면 같은 전장 다시(재시도 횟수만 기록, 벌칙 없음).
  • 완수하면 작전 리본 + 도색 1종 + 작전 평점(세 판 평균).

7.9 저장

  • 새 키 heli-battle-v1. 읽기·쓰기는 제거 작업이 만든 src/save/save.ts(설정 저장)와 같은 try/catch 방식. 설정(품질·감도·조종 보조 등)은 설정 저장을 같이 쓴다.
  • 옛 캠페인 저장 키는 읽지 않는다(D13). 정리 여부는 제거 작업의 몫.
interface BattleSave {
  version: 1;
  xp: number;
  mastery: Record<RoleId, number>;        // 역할별 숙련 경험치
  loadouts: Record<RoleId, string[]>;     // 역할별 마지막으로 고른 선택지
  matches: number; wins: number;
  byMap: Record<string, { played: number; wins: number; bestScore: number; bestGrade: 'S' | 'A' | 'B' | 'C' | null }>;
  totals: { kills: Record<string, number>; deaths: number; transported: number; casDone: number; timeByRole: Record<RoleId, number> };
  ribbons: string[];
  operation: { id: string; side: 'coalition' | 'veros'; stage: number; attempts: number[] } | null;
  daily: { date: string; bestScore: number; streak: number } | null;
  tips: string[];                          // 본 첫 사용 안내(8.10)
}