13 지상 탈것 - kyhsa93/karda GitHub Wiki
13. 지상 탈것
전차·장갑차·경차량·수송 트럭·방공 차량을 플레이어가 직접 조종한다(D1). 다섯 종 모두 한 가지 지상 차량 조종 모델(sim/vehicles/ground.ts)을 수치만 바꿔 쓰고, 무장·좌석·카메라로 손맛을 가른다(P1′).
13.1 목표
- 탈것마다 플레이어 역할 2.4의 최소 손맛 목록을 만족한다.
- 봇 탈것과 같은 유닛이다: 플레이어가 타면 그 유닛의 두뇌(
brain)가 꺼지고 플레이어 조종기가 움직인다. 파괴·티켓·점령 세력 규칙이 봇과 같다.
13.2 공통 조종 모델 — ground.ts
sim 층, 120Hz 고정 스텝, 결정론.
- 상태: 위치, 차체 방위, 속도(전후), 포탑 방위(차체 기준), 포 부앙각, HP, 불 상태.
- 입력: 스로틀(−1
1, 음수 = 후진), 조향(−11), 브레이크, 포탑 목표 방향(시선).
- 궤도형(전차·장갑차·방공 차량): 조향 = 좌우 궤도 속도 차. 정지 상태에서 제자리 선회. 조향 중 최고 속도 ×0.7.
- 바퀴형(경차량·트럭): 자전거 모델(최소 선회 반지름), 속도가 높으면 조향 각이 줄어든다(
최대 조향 × clamp(8 / v, 0.3, 1)).
- 지형: 네 바퀴 자리 높이로 차체 피치·롤(기존 헬기
groundAttitude 방식). 오르막이면 최고 속도 × cos(경사). 궤도 30°·바퀴 25° 넘는 경사는 못 오른다. 도로 위면 도로 최고 속도, 아니면 야지 속도(도로 판정은 RoadGraph 근접, 기존).
- 물: 도하 깊이 궤도 1.2m·바퀴 0.8m, 더 깊으면 진입 불가. 교량 상판 위로 달린다(기존
bridge).
- 충돌: 민가·소품·다른 탈것과는 방향 있는 상자 충돌(멈추고 미끄러짐). 상대 속도 8m/s 넘으면 초당 속도 차 × 2 피해. 나무: 궤도형은 속도 ×0.5로 통과(나무는 그대로 — 렌더만 겹침, 비용 절감), 바퀴형은 막힘. 인형을 치면 12.3 규칙.
- 전복 없음(단순화). 경사 45° 넘는 곳에 걸리면 멈춤.
13.3 탈것별 수치 (플레이어 조종)
모두 (추정), B4 각 작업의 교전 표 측정으로 확정. HP·장갑은 진영·병과·탈것 4.2와 같다(봇과 같은 유닛).
| 탈것 |
최고 속도 도로 / 야지 |
가속 |
선회 |
포탑 회전 · 부앙각 |
주무장 |
보조 무장 |
좌석 |
| 전차 |
16 / 11 m/s |
2.0 m/s² |
제자리 30°/s |
30°/s · −8~+20° |
주포: 철갑탄 1,650m/s·피해 180·관통 5 / 고폭탄 800m/s·피해 90·관통 2·폭발 8m, 재장전 5초, 탄종 전환 = 재장전 |
동축 기관총 13/s, 연막 2 |
운전 겸 포수 1 |
| 장갑차 |
20 / 14 m/s |
2.5 m/s² |
제자리 40°/s |
60°/s · −10~+45° |
30mm(기존 gun30: 805m/s·피해 12·관통 2, 발사율 4/s로 제한) |
유선 대전차 미사일 2(250m/s·2,000m·피해 200·관통 5, 조준선 유지 유도, 재장전 20초), 연막 2 |
운전 겸 포수 1 + 분대 1(5) |
| 경차량 |
28 / 18 m/s |
4.0 m/s² |
반지름 7m |
사수석 360° · −10~+60° |
중기관총(사수석) 9/s·1,000m |
— |
운전 1 · 사수 1 · 승객 1 |
| 수송 트럭 |
22 / 13 m/s |
2.0 m/s² |
반지름 11m |
— |
— |
— |
운전 1 + 분대 1(5) |
| 방공 차량 |
16 / 11 m/s |
2.0 m/s² |
제자리 30°/s |
70°/s · −5~+85° |
쌍열 대공포 20/s·1,100m/s·2,500m, 레이더 잠금 시 선도 조준점 |
— |
운전 겸 포수 1 |
- 측·후면 피해: 발사체가 탈것 옆(±60°~±120°)으로 맞으면 ×1.2, 뒤 60° 안이면 ×1.5. 전차 정면은 대전차 로켓 3발, 후면 2발(보병 12.5).
- 유선 대전차 미사일: 기존 헬파이어의 LOBL 레이저 유도를 재사용한다 — 레이저 점 대신 "조준선이 가리키는 지형·유닛 지점"을 매 스텝 유도 목표로 준다. 조준선이 표적에서 벗어나면 빗나간다.
- 레이더 선도 조준점: 방공 차량 레이더(5km·공중만)가 잡은 표적의 예상 위치(속도 × 탄 비행 시간)를 원으로 표시. 기존
rocketSolution·predictGunImpact의 예측 방식을 공중 표적용으로 확장.
13.4 조준·탄도·카메라
- 기본 시점은 3인칭 추적(기존
chase 카메라를 포탑 뒤 8m·위 3m에 붙이고 포탑과 함께 돈다). V로 1인칭 조준경.
- 3인칭 조준: 조준선은 포신 연장선이 처음 닿는 지점. 탄착 예측점은 보여 주지 않는다(탄도 낙차를 익히는 재미 — 손맛).
- 1인칭 조준경: 배율 2단(전차 3×/8×, 장갑차 2×/6×, 방공 차량 1×/4×), 거리 눈금 200m 간격, 레이저 거리계(
L)로 거리 표시. 전차 주포 1,650m/s면 1.5km에서 비행 0.9초·낙차 약 4m(공기 저항 포함 추정) → 눈금을 읽고 쏘는 맛.
- 재장전 원(조준선 둘레)이 채워지는 동안 발사 불가. 포탑 방향 표시(HUD 차체 윤곽 위 포탑 화살표)로 차체와 포탑이 따로 논다는 것을 보인다.
13.5 좌석·탑승
E로 5m 안 탈것에 탄다(빈 좌석이 있을 때). 첫 빈 좌석은 운전석. F로 좌석 전환(경차량 운전 ↔ 사수).
- 운전자가 없으면 탈것은 멈춘다(경차량 사수석으로 옮기면 서서 쏘는 포대가 된다).
- 봇 분대의 탑승·하차는 자동 규칙(봇 AI 5.4). 플레이어 탈것의 승객석은 봇만 쓴다.
- 탈것에서 내리면 선택했던 병과 장비로 싸운다. 60초 동안 빈 탈것은 봇 소대가 가져간다(플레이어 역할 2.3).
13.6 피해·파괴·수리
- HP만 쓴다(부위 피해 없음 — 아파치의 계통 피해는 헬기에만).
- HP 20% 이하 = 기동 불능: 최고 속도 ×0.3, 불이 붙어 초당 HP 1 감소. 수리하거나 내리지 않으면 결국 파괴.
- 파괴: 폭발(기존 효과), 승무원 사망, 탑승 분대 규칙(진영·병과·탈것 4.4), 잔해 90초 뒤 은퇴.
- 수리: 공병 수리 도구 +20HP/s, 또는 아군 본진·FARP 딸린 거점 반경 30m에 정지하면 초당 +10(재보급 겸, 탄약도 5초마다 1탄창/1발).
- 연막 2발은 FARP·본진에서 다시 채워진다.
13.7 조작
| 동작 |
키보드·마우스 |
게임패드 |
터치 |
| 전진·후진 / 조향 |
W·S / A·D |
왼쪽 스틱 위아래 / 좌우 |
왼쪽 스틱 |
| 브레이크 |
Space |
A |
스틱을 놓으면 서서히, 뒤로 당기면 브레이크 후 후진 |
| 포탑·시선 |
마우스 |
오른쪽 스틱 |
오른쪽 절반 드래그 |
| 주무장 / 조준경 배율 |
좌클릭 / 우클릭 |
RT / LT |
발사(64px) / 조준 |
| 무장·탄종 전환 |
1·2·3 또는 휠 |
RB |
무장 |
| 연막 |
X |
B |
연막 |
| 레이저 거리계 |
L |
십자키 위 |
조준경 모드에서 자동 표시 |
| 좌석 전환 |
F |
X |
좌석(경차량만) |
| 시점 |
V |
오른쪽 스틱 누름 |
일시정지 메뉴 |
| 하차 |
E |
Y 누름 유지 |
하차 |
| 스폿 |
Q |
LB 두 번 |
조준 중 자동 |
- 터치 버튼: 발사·조준·무장·연막·하차(+좌석) = 5~6개.
13.8 교전 기준 (보통 난이도, 추정)
| 교전 |
계산 |
기대 |
| 플레이어 전차 vs 봇 전차 정면, 1km |
명중 가정 80% × 216(180 × 1.2), 5초 재장전 → 2발 |
약 6~10초 (봇끼리 48초보다 확연히 빠름 → 플레이어 개입이 보인다) |
| 봇 전차 vs 플레이어 전차, 1km |
0.45 × 0.84 = 0.38/발, 7초 간격, 2발 필요 |
약 37초 — 플레이어가 먼저 쏘고 숨으면 이긴다 |
| 봇 대전차 분대 vs 플레이어 전차, 800m |
0.45 × 0.72 = 0.32/발, 12초 간격, 피해 300 = 1발 |
약 37초 안에 격파 위험 → 보병을 먼저 치워야 한다 |
| 플레이어 장갑차 30mm vs 봇 소총 분대, 600m |
4/s × 명중 50% × 12 × 12.5 환산 → 분대원 1명 약 0.4초 |
분대 약 2~3초 |
| 플레이어 방공 차량 vs 봇 공격 헬기, 2km |
20/s × 명중 20%(선도 조준점) × 5 = 20 HP/s, HP 300 |
약 15초 |
13.9 재사용과 신규
| 필요 |
재사용 |
신규 |
| 지형 자세·도로 |
terrain.ts, groundAttitude 방식, RoadGraph |
sim/vehicles/ground.ts |
| 발사체·탄도 |
projectile.ts, ballistics.ts(예측), gun30 정의 |
전차 주포·HE 무기 정의 |
| 유도 |
헬파이어 LOBL(missile.ts) |
조준선 유도 목표 |
| 모델 |
채택 전차·장갑차·픽업·트럭 GLB, airDefenseModels.ts |
포탑 분리(모델 가공: 포탑 메시를 따로 회전) |
| 카메라 |
기존 chase 카메라 |
포탑 추적, 조준경 뷰 |
| 봇 |
movement.ts, brain.ts |
플레이어 탑승 시 두뇌 끄기, 빈 탈것 회수 |
- 모델 가공 주의: 채택 전차·장갑차 GLB는 한 덩어리일 수 있다. 포탑을 따로 돌리려면
scripts/process-glb에서 포탑 메시를 분리해야 한다 — 분리가 안 되는 모델은 포탑을 코드 도형으로 덧씌운다(B4-3 조사 항목).
- 예상 코드(추정): sim 약 900줄, render 약 400줄, ui 약 200줄.
13.10 VPA 대칭
- 수치 동일. 외형은 같은 GLB의 VPA 색 + 코드 부품(전차 포탑 위 탐조등 상자, 장갑차 측면 장갑판), 이름은 진영·병과·탈것 4.2.
- 엔진·포 소리는 진영별 피치만 다르게(새 녹음 없이).