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

4.5 KiB
Raw Blame History

작업 로그: 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_novaSKILL_REGISTRY에 PRIMARY 스킬로 등록 (기존에 없었음).
  • SKILL_MAX_LEVEL 테이블 추가: aoe_nova의 최대 레벨을 3으로 명시적 정의.
  • checkEvolutionPossible() 로직을 하드코딩 >= 5SKILL_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=trueupdateNovaBurst() 호출.
  • 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)