# Skybound Skill Slot Limit Weapon 5 Passive 5

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

## 요청 요약

- 사용자가 획득할 수 있는 스킬 수량에 제한을 둔다.
- 총 10개 스킬을 보유할 수 있게 한다.
- 10개 중 5개는 무기, 5개는 패시브로 분리한다.
- 슬롯이 부족한 상태에서 새 스킬을 선택하려 하면 `슬롯이 부족합니다`에 해당하는 노티가 필요하다.
- 슬롯 제한 때문에 사용하지 못하는 스킬이 목록에 나올 수 있으므로 `Skip Upgrade` 선택지도 계속 필요하다.
- 5/5 구조가 적절한지 검토한다.

## 판단

현재 Skybound에는 무기와 패시브 풀이 이미 넓고, 8스테이지까지 성장해야 한다.

따라서 지금 시점에서는 `무기 5개 + 패시브 5개`가 적절하다.

더 줄이는 선택지도 가능하지만, 아직은 권장하지 않는다.

- 4/4는 빌드 정체성이 더 강해지는 대신 초반 선택 운 영향이 커진다.
- 5/5는 Survivor.io/Vampire Survivors류의 성장 폭과 전략성을 적당히 유지한다.
- 6/6 이상은 사용자가 거의 모든 것을 들고 가는 느낌이 강해져 빌드 선택 의미가 약해진다.

그래서 이번 패스에서는 5/5를 기본값으로 적용했다.

## 적용한 변경

### Skill Slot Limit 추가

`skills.ts`에 슬롯 제한 상수를 추가했다.

```ts
export const SKILL_SLOT_LIMITS = {
  WEAPON: 5,
  PASSIVE: 5,
}
```

이제 시스템 전반에서 동일한 기준을 사용한다.

### 후보 생성 필터링

`ProgressionSystem.generateSkillCards()`와 `generateMiniBossRewardCards()`에서 슬롯 제한을 반영했다.

규칙:

- 이미 보유한 스킬은 계속 레벨업 가능하다.
- 새 무기 획득은 무기 슬롯이 5개 미만일 때만 가능하다.
- 새 패시브 획득은 패시브 슬롯이 5개 미만일 때만 가능하다.
- 슬롯이 꽉 찬 타입의 새 스킬은 정상 후보 생성에서 제외한다.

### 선택 시 슬롯 부족 방어

혹시 예외 경로로 선택 불가 카드가 들어오거나, UI/엔진 동기화 타이밍 문제로 새 스킬 선택이 들어올 수 있다.

그래서 `ProgressionSystem.applySkillSelection()`에도 최종 방어를 추가했다.

슬롯이 부족하면:

- 스킬을 추가하지 않는다.
- 게임을 재개한다.
- 전투 화면에 `WEAPON SLOTS FULL` 또는 `PASSIVE SLOTS FULL` 텍스트를 띄운다.
- 보조 텍스트로 `Choose another module or skip`을 띄운다.

### Store 레벨 방어

`useGameStore.addSkill()`에도 동일한 슬롯 제한 방어를 추가했다.

이유:

- UI나 엔진 외부에서 `addSkill()`이 호출되더라도 잘못된 스킬이 저장되지 않게 하기 위함이다.
- `__skip__`도 기존처럼 저장되지 않는다.

### Level Up UI 슬롯 상태 표시

`LevelUpModal` 상단에 현재 슬롯 상태를 표시한다.

표시:

- `Weapons 0/5`
- `Passives 0/5`

슬롯이 가득 차면 해당 배지가 붉은 톤으로 바뀐다.

### SLOT FULL 카드 표시

정상 후보 생성에서는 사용 불가 카드가 거의 나오지 않지만, 예외적으로 pre-generated cards나 fallback 상태에서 들어올 수 있다.

이 경우 카드에 다음 표시를 추가했다.

- `SLOT FULL` 태그
- `No empty weapon/passive slot` 설명
- `WEAPON slots are full` 또는 `PASSIVE slots are full`

사용자는 이때 새로 추가된 `Skip Upgrade`를 선택해 넘길 수 있다.

## 설계 의도

슬롯 제한의 핵심은 빌드 선택을 더 전략적으로 만드는 것이다.

제한이 없으면 사용자는 결국 대부분의 무기와 패시브를 다 들고 가게 되고, 선택의 의미가 약해진다.

5/5 구조에서는 다음 판단이 생긴다.

1. 무기 슬롯 하나를 새 무기에 쓸 것인가?
2. 기존 무기 레벨업을 기다릴 것인가?
3. 패시브 슬롯을 EVO 재료에 쓸 것인가?
4. 생존 패시브를 포기하고 공격 패시브를 가져갈 것인가?
5. 지금 후보가 별로면 스킵할 것인가?

이번 변경은 `Skip Upgrade`의 존재 이유도 더 명확하게 만든다.

## 수정 파일

- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/config/skills.ts`
- `/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/ui/LevelUpModal.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/LevelUpModal.css`

## 검증

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

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

- 무기 5개를 보유한 상태에서 새 무기 후보가 정상 레벨업 목록에서 제외되는지 확인한다.
- 패시브 5개를 보유한 상태에서 새 패시브 후보가 정상 레벨업 목록에서 제외되는지 확인한다.
- 이미 보유한 무기/패시브는 슬롯이 가득 차도 레벨업 가능한지 확인한다.
- 예외적으로 `SLOT FULL` 카드가 보일 때 선택하면 슬롯 부족 노티가 뜨는지 확인한다.
- `Skip Upgrade`가 슬롯 제한 상황에서 자연스러운 탈출구로 작동하는지 확인한다.
- 5/5가 너무 넉넉하거나 너무 답답하지 않은지 확인한다.
