14 헬기 - kyhsa93/karda GitHub Wiki
14. 헬기
아파치는 캠페인이 없어진 뒤에도(D13) 전장의 탈것 하나로 남는다 — 비행 모델·무장·TADS·FCR·ASE·조종석 코드를 그대로 쓴다. 이 장은 아파치를 전장에 끼우는 방법, 그 비행 모델을 재사용하는 수송 헬기, 그리고 VPA 쪽 대칭 헬기를 정한다.
14.1 아파치 — 무엇을 그대로 쓰나
| 계통 |
기존 모듈 |
전장에서 |
| 비행 모델 |
sim/heli/flight.ts(자세 명령형, 지면 효과, 상승 한계), systems.ts(회전수·연료·엔진) |
그대로. 스폰은 로터 회전 상태(farp_hot) — 시동 절차 없음 |
| 조종 보조 |
assists.ts, autohover.ts(Bob-up) |
기본 켬(첫 사용 안내, UI/UX 8.10) |
| 무장 |
weapons/arms.ts·gun·rockets.ts·hellfire.ts·stinger.ts·missile.ts |
그대로. 표적이 봇 유닛이면 기존 유닛 피해 경로 |
| 센서 |
sensors/tads.ts·fcr.ts·laser.ts·ase.ts |
그대로. TADS 식별 → 팀 스폿 20초(UI/UX 8.5) |
| 피해 |
heli/damage.ts(계통별 피해·로터·추락) |
그대로. 추락·승무원 사망 = 플레이어 사망 + 공격 헬기 티켓 5 |
| 무게·로드아웃 |
heli/loadout.ts(무게·추력 배율) |
그대로. UI는 새 배치 화면의 프리셋(캠페인 Loadout.tsx는 제거됨) |
| FARP 서비스 |
sim/farp.ts(급유·재무장·수리) |
본진 FARP와 거점 FARP 모두 |
| 조종석·계기 |
render/cockpit/*, ihadss.ts, tadsView.ts, tadsHud.ts |
그대로. TSD 페이지에 거점·티켓 추가(선택), 전장 HUD는 겹치지 않게 얹음 |
| 적 위협 |
awareness.ts, enemyMissile.ts(플레이어를 노리는 실제 미사일) |
그대로 — P2(저공·능선)가 전장에서도 헬기의 생존 규칙 |
전장에 맞추는 변경
| 변경 |
이유 |
로드아웃 프리셋 3종: 대전차(헬파이어 16) · 근접지원(로켓 2포드 + 헬파이어 8) · 대공(로켓 1포드 + 헬파이어 4 + 스팅어) — 무게 규칙은 loadout.ts 그대로 |
배치 화면에서 한 번에 고르게. 세부 편집은 B8 이후 선택 |
| FCR·헬파이어 L·스팅어·채프 모두 처음부터 사용 가능(A6: 장비 해금 없음) |
캠페인 해금 연동이 없어짐(D13) |
Tab(FCR 표적 순환) → Y |
전장 공통 Tab = 전황 |
E 짧게 = FCR 모드(기존), 길게(1초) = 하차(착지 상태에서만) |
공통 탑승·하차 키 |
G 무전 메뉴 = 전장 무전(지원 요청·집중 거점) |
윙맨 제거(D13) |
| 추락 연출 2.2초 뒤 사망 화면 |
기존 crashed 모드 재사용 |
| 봇 아파치(연합 공격 헬기 봇) |
c_apache 유닛 + air.ts 공격 헬기 행동(윙맨 AI는 제거됨) |
- 플레이어 아파치의 sim 표현: 기존처럼
world.player: HeliState 경로를 쓴다. 전장에서 플레이어가 헬기가 아닐 때는 이 경로가 비활성이다(기술 설계 9.2 아바타).
- 내리기: 착지(기존 착륙 판정) 상태에서
E 길게 → 기체 옆 3m에 보병으로 선다. 빈 아파치는 60초 뒤 봇이 가져간다.
14.2 수송 헬기
목표: 봇 분대 2개를 거점 가까이 강습 착륙시켜 점령을 뒤집는다. 무장 없이 대응책만 — 조종 실력이 곧 기여.
비행 모델 재사용
- 아파치와 **같은
stepFlight**를 쓰되 기체 상수를 바꾼다. 지금 airframe.ts는 content/aircraft.json을 모듈 상수로 읽는다(MAX_THRUST, EYE, GEAR, HULL …) → 기체 정의 객체(AirframeDef)를 HeliState에 붙이고 stepFlight·collide·착륙 판정이 그 객체를 읽게 바꾼다(B6-1의 선행 리팩터, 아파치 동작 불변을 해시 테스트로 증명).
| 상수 |
아파치 (aircraft.json) |
수송 헬기 airframes/transport.json (추정) |
의도 |
| 최대 추력 |
1.7g |
1.45g (빈 기체) → 분대 2개 태우면 약 1.3g(무게 +1,000kg, thrustScale 재사용) |
무겁다 |
| 최대 피치 / 롤 |
25° / 35° |
20° / 30° |
|
| 자세 강성 / 감쇠 |
8 / 5 |
5 / 4 |
느린 자세 반응 |
| 페달 속도 |
0.9 |
0.7 |
|
| 전방 항력 |
0.03 / 0.0009 |
0.04 / 0.0012 |
최고 속도 약 10% 낮음 |
| 로터 반지름 |
7.3m |
8.2m |
넓은 착륙 공간 필요 |
| HP / 장갑 |
계통 피해 |
150 / 1 상당(계통 피해를 수송 헬기 배율로) |
약하다 |
- 탑승·하차: 봇 분대 자동 규칙(봇 AI 5.4). 착지 판정은 기존 착륙 기준(하강 3m/s, 수평 4m/s, 자세 12°, 경사 10°) 그대로 — 거친 착지는 하차 불가.
- 조종석: 코드 모델 신규(단순 계기판 + 넓은 창틀). 계기는
instruments.ts의 속도·고도·수직 속도·연료만. HUD는 단순 비행 기호 + 착륙 안내 원(UI/UX 8.6).
- 대응책:
ase.ts의 플레어·채프·CMWS 경보 재사용.
- 외형: 연합 = 기존
c_heli_rescue 외형, VPA = air 코드 모델에서 로켓 포드를 뺀 긴 동체. 외부 모델 후보는 외부 에셋.
14.3 VPA 공격 헬기 — 대칭
수치는 아파치와 같다(진영·병과·탈것 4.1). 기체 상수도 아파치 aircraft.json을 그대로 쓴다. 다른 것은 이름·외형·조종석·소리.
| 아파치 |
VPA 공격 헬기 |
구현 |
| 30mm 기관포(헬멧 시선) |
기수 기관포(조준 유리 시선) |
gun30 그대로 |
| 하이드라 로켓 |
로켓 포드 |
hydra70 그대로, 이름만 |
| 헬파이어 K(레이저) |
유도 대전차 미사일(레이저 빔 추종) |
agm114k 그대로, 이름만 |
| 헬파이어 L + FCR |
레이더 유도 미사일 + 레이더 |
agm114l·fcr.ts 그대로 |
| 스팅어 |
공대공 미사일 |
stinger 그대로 |
| TADS |
조준 광학장치 |
tads.ts 그대로, 조준경 테두리 그림만 다름 |
| IHADSS(헬멧 투영) |
조준 유리 HUD(앞 유리 반사) |
ihadss.ts의 같은 기호를 초록 단색·앞 유리 위치로 |
| 탠덤 조종석(코드) |
계단식 탠덤 조종석(코드 신규): 굵은 창틀·평면 유리, 청록 계기판, 둥근 아날로그 계기(instruments.ts에 아날로그 스킨), MPD 대신 CRT 모양 화면 1개 |
cockpitModel.ts 변형 |
외형 heliModel.ts |
fallbackModel의 air |
기존 |
- 소리: 기존 로터 루프 피치 −12%(새 녹음 없이).
- 비용: 조종석·HUD 스킨이 핵심(약 400줄 추정). 무장·센서는 이름표만.
14.4 봇 헬기
| 봇 |
행동 |
재사용 |
| 공격 헬기(양 진영) |
지휘관 항공 임무 → 교전 심한 거점 1.5~3km 밖에서 선회·팝업 공격, 적 헬기가 발견되면 사냥, 정찰 레이저 지시(12.4)가 있으면 1순위 |
air.ts 선회 공격을 표적 일반화 |
| 수송 헬기(양 진영) |
이륙 → 지형 위 60m 순항 → 거점 400m 밖 평지 착륙 20초 → 귀환 |
air.ts 경로 비행 |
| 대리 조종사(하니스 전용) |
플레이어 슬롯의 아파치를 공격 헬기 행동 + 통계 사격으로 |
air.ts |
14.5 교전 기준 (추정)
| 교전 |
기대 |
근거 |
| 봇 방공 차량 vs 탁 트인 곳에 호버한 플레이어 아파치, 2km |
약 30초 노출에 격추 |
기존 M7-6 측정값 유지 |
| 봇 대공조 vs 플레이어 아파치 |
실제 적외선 미사일(플레어로 회피 가능) |
기존 enemyMissile.ts |
| 플레이어 아파치 헬파이어 vs 봇 전차 |
1발 격파(400 × 1.2 > 300) |
기존 수치 |
| 봇 전투기 vs 저공(지면 30m 이하) 아파치 |
공대공 미사일 잠금 불가, 기관포 강하 사격만 |
전투기 15.5 |
| 봇 공격 헬기 vs 플레이어 아파치 |
공대공 통계 + 로켓, 먼저 발견한 쪽이 유리 |
heli_aam 수치 |
14.6 조작
기존 아파치 조작(docs/design 07장 7.6, M7-2 터치 배치)을 그대로 쓰고 아래만 바꾼다.
| 동작 |
키보드 |
게임패드 |
터치 |
| FCR 표적 순환 |
Tab → Y |
LB(기존) |
표적(기존) |
| 하차(착지 중) |
E 길게 1초 |
Y 누름 유지 |
하차(착지하면 나타남) |
| 전황 |
Tab 누르는 동안 |
Back |
티켓 바 탭 |
| 전장 무전 |
G |
십자키 아래 길게 |
무전(항상) |
| 미니맵 확대 |
O |
— |
미니맵 탭 |
- 터치 배치에 미니맵(왼쪽 위
≡ 옆 110px)이 들어가므로 기존 왼쪽 위 요소를 옮긴다(기존 임무 표시 자리는 비어 있음 — 임무 제거).
- 수송 헬기: 비행 조작 동일, 무장 버튼 없음(플레어·채프만),
하차 대신 착지하면 봇이 자동으로 내린다.
- VPA 공격 헬기: 아파치와 같은 바인딩.
14.7 재사용과 신규 요약
- 재사용: 비행·계통·피해·무장·센서·ASE·FARP·조종석·IHADSS·TADS 전부.
- 신규:
AirframeDef 리팩터(기체 상수 주입), airframes/transport.json, 수송 헬기 조종석·HUD, VPA 조종석·조준 유리 HUD 스킨, 로드아웃 프리셋 UI, 봇 헬기 표적 일반화·수송 비행.
- 예상 코드(추정): sim 약 400줄(리팩터 포함), render 약 600줄, ui 약 200줄.