Files
2nd/00_Raw/2026-04-22_NovaGuardian_PermUpgrade_StatInjection.md
T

70 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 작업 로그: NOVA_GUARDIAN EVO + Permanent Upgrade Stat Injection
## 📋 작업 내용 (What)
1. **NOVA_GUARDIAN EVO 레시피**: `aoe_nova(Lv3 MAX) + energy_shield(Lv1+)` 조합으로 황금 충격파 수호자 진화 구현.
2. **Permanent Upgrade → EffectiveStats 실반영**: 영구 업그레이드 구매 시 실제 인게임 스탯(HP, ATK, SPD, MAGNET, GOLD)에 즉시 반영.
## 🎯 왜 했는지 (Why)
- **Nova Burst의 EVO 목적지 부재**: `aoe_nova` 스킬이 최대 레벨 달성 후 더 이상 성장이 없어 장기 동기부여 약화.
- **Permanent Upgrade 구조적 결함**: 골드를 소비해 영구 업그레이드를 구매해도 실제 인게임 세션에 아무런 영향이 없는 "빈 껍데기" 상태였음.
## 🔧 처리 과정 (How)
### 1. evolutions.ts — 레시피 등록 + 스킬 최대 레벨 테이블
- `aoe_nova``SKILL_REGISTRY`에 PRIMARY 스킬로 등록 (기존에 없었음).
- `SKILL_MAX_LEVEL` 테이블 추가: `aoe_nova`의 최대 레벨을 3으로 명시적 정의.
- `checkEvolutionPossible()` 로직을 하드코딩 `>= 5``SKILL_MAX_LEVEL[baseId]` 조회로 변경하여 **스킬별 상이한 최대 레벨 지원** 확보.
- NOVA_GUARDIAN 레시피 및 메타데이터 추가 (icon: ✨).
### 2. ProgressionSystem.ts — NOVA_GUARDIAN EVO 스탯
- `applyEvoStats()` switch에 `NOVA_GUARDIAN` 케이스 추가:
- 쿨다운: 5s → 2.5s (`novaBurstCooldown` = 150프레임)
- 반경: +50% (`novaBurstRadiusBonus` = 0.5)
- 데미지: 기존 대비 ×2.5
- 버스트 발동 시 1.5초(90프레임) 무적 플래그 (`novaGuardianShield: true`)
### 3. ModularWeaponSystem.ts — 분기 처리 + 황금 색상 연출
- `update()`: `evolved.has('NOVA_GUARDIAN')` 분기 추가 → `isGuardian=true``updateNovaBurst()` 호출.
- `updateNovaBurst(isGuardian)` 파라미터 추가:
- `eff.novaBurstCooldown` 오버라이드 (EVO 스탯 반영)
- `eff.novaBurstRadiusBonus`로 반경 확장
- Guardian 발동 시: 90프레임 무적, 황금 파티클 3중 링, "✨ SHIELD BURST ✨" 텍스트
- `novaBurstRingEffect.isGuardian` 플래그 → GameRenderer에 색상 전달
### 4. GameRenderer.ts — 황금/청록 이중 색상 분기
- `renderNovaBurstEffect()`: `ring.isGuardian` 기반 색상 팔레트 분기:
- Guardian: `#ffd700` 황금 외부 링, `#ffab40` 중간 링(75%), `#ff8f00` 글로우, 12방향 스파이크
- Nova: 기존 청록 팔레트 유지
- Guardian 전용 3번째 중간 링 레이어 추가 (확장감과 위용 강화).
### 5. combatUtils.ts — V12.0 Stat Injection Engine
- `calculateEffectiveStats()` 시그니처 변경:
- 3번째 인자: `PermanentUpgradeState | any[]` (하위 호환성 유지)
- 4번째 인자: `inventory?: any[]` (옵셔널)
- Permanent Upgrade 파이프라인:
- HP_MAX: `eff.maxHp += level` (레벨당 +1 HP)
- ATTACK: `eff.dmg *= (1 + level * 0.05)` (레벨당 +5%)
- SPEED: `eff.speed *= (1 + level * 0.04)` (레벨당 +4%)
- MAGNET: `magnetRadius = 180 + level * 30` (레벨당 +30px)
- GOLD_GAIN: `eff.goldGainBonus = level * 0.10` (경제 시스템용 계수)
### 6. 호출부 동기화
- `useGameEngine.ts` L110: `calculateEffectiveStats('FALCON', equipped, permanentUpgrades, inventory)`
- `HangarOverlay.tsx` L27: `useMemo` 의존성 배열에 `permanentUpgrades` 추가 → 구매 즉시 미리보기 갱신
## 🧠 사용한 지식 (Knowledge Used)
- **하위 호환성 패턴**: 3번째 인자 타입 분기(`Array.isArray`)로 기존 HangarOverlay 호출도 에러 없이 유지.
- **EVO 설계 원칙**: 기반 스킬(aoe_nova)의 최대 레벨 도달 + 보조 스킬(energy_shield) 보유를 EVO 조건으로 하여 조합 전략성 부여.
- **Signal Pattern**: `eff.novaGuardianShield`, `eff.novaBurstCooldown`, `eff.novaBurstRadiusBonus`를 EffectiveStats에 플래그로 전달하여 WeaponSystem이 렌더러/로직에 결합 없이 EVO 상태를 인식.
## ✅ 결과 (Result)
- TypeScript 에러 0개
- 수정 파일: 7개 (evolutions.ts, ProgressionSystem.ts, ModularWeaponSystem.ts, GameRenderer.ts, combatUtils.ts, useGameEngine.ts, HangarOverlay.tsx)
- Git Commit: `cefd1a2` (feat_nova_guardian_evo_permanent_upgrade_stat_injection)
- Push 완료: `origin/main`
## 🔗 연결 지식 (Relevant Knowledge)
- E:\Wiki\2nd\10_Wiki\Topics\Game-Design (EVO Design, Skill Max Level, Meta-Progression)
- E:\Wiki\2nd\10_Wiki\Topics\Software-Architecture (Signal Pattern, Backward Compatibility, Pipeline Design)
- E:\Wiki\2nd\10_Wiki\Topics\UI-UX (Canvas Ring Rendering, Color Palette Branching)