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줄.