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)
}