# Skybound Skip Upgrade and Weapon Transform Reconfiguration

작성일: 2026-04-26 13:25 KST

## 요청 요약

- Tactical Level Up 화면에서 마음에 들지 않는 업그레이드만 나올 수 있다.
- 이 경우 사용자가 강제로 원하지 않는 업그레이드를 고르지 않도록 `업글 안하기` 선택지를 추가한다.
- 새로운 무기가 장착되었을 때 사용자의 기체 외형도 그에 맞춰 변화해야 한다.
- 연출적으로는 트랜스포머처럼 기체가 재구성되고 무장이 전개되는 느낌을 표현한다.

## 핵심 문제

기존 레벨업 화면은 반드시 하나의 스킬을 선택해야 했다.

이 구조의 문제:

1. 현재 빌드와 맞지 않는 선택지만 나와도 강제로 선택해야 한다.
2. 낮은 레벨 우선 후보 확률을 적용한 뒤에는 사용자가 원치 않는 저레벨/새 무기가 뜰 가능성도 생긴다.
3. 새 무기를 획득해도 기체가 실제로 바뀌는 느낌이 약하다.
4. 무기가 생긴 순간의 시각적 보상이 부족하다.

## 적용한 변경

### Skip Upgrade 선택지 추가

`LevelUpModal`에 `Skip Upgrade` 카드를 추가했다.

동작:

- STARTER 첫 무기 선택에서는 스킵이 나오지 않는다.
- 일반 Tactical Upgrade, Supply, Command Cache에서는 스킵 가능하다.
- 스킵을 선택하면 스킬/무기 레벨이 증가하지 않고 전투로 복귀한다.

표시 문구:

- `HOLD UPGRADE`
- `Skip Upgrade`
- `No change this time`

### Skip 안전 처리

`__skip__`이 실제 스킬처럼 저장되지 않도록 여러 지점에 방어를 추가했다.

적용 지점:

- `GameSceneRenderer`
- `ProgressionSystem`
- `useGameStore.addSkill`

`__skip__`이 선택되면:

- Zustand `skills`에 추가하지 않는다.
- 엔진 스킬 상태에도 추가하지 않는다.
- `TACTICAL UPGRADE HELD` 텍스트를 띄운다.
- 게임 pause를 해제하고 전투를 재개한다.

### 새 무기 장착 감지

`ProgressionSystem.applySkillSelection()`에서 선택 직전 스킬 레벨을 확인한다.

조건:

- 선택한 스킬이 `WEAPON` 타입
- 선택 직전 레벨이 0

이 조건을 만족할 때만 새 무기 장착 연출을 발동한다.

기존 무기 레벨업이나 패시브 선택은 변신 연출을 발동하지 않는다.

### Airframe Reconfiguration 상태 추가

`Game[[State]]`에 새 무기 장착 연출용 상태를 추가했다.

추가 필드:

- `weaponTransformStartFrame`
- `weaponTransformDuration`
- `weaponTransformSkillId`

이 값은 렌더러가 현재 프레임 기준으로 변신 진행도를 계산하는 데 사용한다.

### 기체 변신/무장 전개 연출 추가

`GameRenderer.renderPlayer()`에 새 무기 장착 연출을 추가했다.

연출 요소:

- 기체 중심에서 확장되는 아케인 스캔 링
- 무기 색상별 발광
- 좌우 장갑 패널이 바깥으로 접히듯 전개
- 전방 무장 레일이 앞으로 돌출
- 작은 locking spark
- `WEAPON LINK: 무기명`
- `AIRFRAME RECONFIGURING`
- 화면 흔들림과 파티클

무기별 액센트 컬러:

- Gatling Gun: 골드
- Missile Pod: 핑크/레드
- Nova Burst: 시안
- Energy Shield: 라임
- Sweep Laser: 화이트/시안
- Plasma Torpedo: 오렌지
- Ion Storm: 전기 시안
- Attack Drone: 라임
- Gravity Mine: 퍼플
- Plasma Fire: 오렌지/레드
- Plasma Blade: 시안

## 설계 의도

이번 변경은 업그레이드 UX에 “선택하지 않을 권리”를 추가하는 작업이다.

업그레이드는 항상 이득처럼 보여야 하지만, 빌드 방향과 맞지 않는 선택을 강제하면 사용자는 선택권을 잃었다고 느낄 수 있다.

스킵 선택지는 다음 의미를 가진다.

1. 원하지 않는 업그레이드를 강제로 먹지 않는다.
2. 빌드 순도를 유지할 수 있다.
3. 낮은 레벨 우선 후보 시스템의 부작용을 완화한다.
4. 선택 화면에서 사용자 판단 여지를 높인다.

새 무기 변신 연출은 “새 기능이 생겼다”를 UI 문구가 아니라 기체 자체 변화로 전달하기 위한 장치다.

## 수정 파일

- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/store/useGameStore.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/ProgressionSystem.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/GameRenderer.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/types.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/GameSceneRenderer.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/LevelUpModal.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/LevelUpModal.css`

## 검증

- `npm run build` 성공
- `/sprites/player.png` 경고 없음
- 출력 디렉터리: `dist/27`

## 후속 플레이테스트 체크 포인트

- 일반 레벨업 화면에서 `Skip Upgrade`가 명확하게 보이는지 확인한다.
- STARTER 첫 무기 선택에서는 스킵이 나오지 않는지 확인한다.
- 스킵 선택 시 게임이 정상 재개되는지 확인한다.
- 스킵 선택 후 `skills.__skip__` 같은 잘못된 값이 저장되지 않는지 확인한다.
- 새 무기를 처음 선택했을 때 기체 변신 연출이 충분히 눈에 띄는지 확인한다.
- 기존 무기 레벨업/패시브 선택 시 변신 연출이 과하게 반복되지 않는지 확인한다.
