From 3bdda531043f11f7cfa0e5bef361163a37839fe8 Mon Sep 17 00:00:00 2001 From: swrring Date: Fri, 24 Apr 2026 16:13:09 +0900 Subject: [PATCH] =?UTF-8?q?feat(BT7-Plan=C2=B7=EC=A7=91=ED=96=89):=20?= =?UTF-8?q?=EA=B8=B0=ED=9A=8D=209=ED=8C=8C=EC=9D=BC=20v0.2=20+=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C=ED=8C=80=20Phase=201=20=E2=80=94=20PD=20=EC=A7=80?= =?UTF-8?q?=EC=8B=9C=2011=EA=B1=B4=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기획 9파일 v0.2: VS 순수형·액티브/패시브/각성 3분류·Lv.5 스택·각성 3조건(액티브 Lv.5+필요 패시브+보물상자)·하트 분할 4 HP·적 ATK 1~4 점진·태그 11종 후보(PD 후속 검토 대기)·이동/점프 2종 - 개발팀 Phase 1 (Unity 외부 레포): PlayerAttackTicker 신설·Health maxHearts·Attack 액션 제거·AttackHitbox 쿼터 통합·EditMode 10→13 (Unity GitAutoSync 자동 push 담당) - 대화로그: BT7 전체 9 엔트리 누적 (접수→방향 확정→4건 답변→규모→적 ATK→라이프→태그→Dev Phase 1→집행 종합) - PD 지시 로그: 기획팀 BT7-Plan 11건 확정 비고란 + 개발팀 BT7-Dev 신규 등록(진행중) - C6-1 백업 6종 `bak_20260424_1551` 표준 포맷 - narrative 3파일 미수정 (PD 2026-04-24 "현행 유지" 지시 준수) - 매니페스트: 2026-04-24_BT7-Plan_집행착수 (범위 내 전수) - pm-auditor 감사: 통과 (Critical·Major 0) - C22-6 코어룰 신설: PD 문안 승인 대기 (별건) Co-Authored-By: Claude Opus 4.7 (1M context) --- ..._pattern_analysis_6계층_2026-04-24_1231.md | 36 + 공유/PD_지시_트래킹/개발팀_PD_지시_로그.md | 1 + 공유/PD_지시_트래킹/기획팀_PD_지시_로그.md | 2 +- .../AttackHitbox.cs.bak_20260424_1551.cs | 92 ++ .../EerieVillage/Health.cs.bak_20260424_1551.cs | 96 ++ ...tions.inputactions.bak_20260424_1551.inputactions | 837 ++++++++++++++++++ .../PlayerAttack.cs.bak_20260424_1551.cs | 43 + .../PlayerAttackTests.cs.bak_20260424_1551.cs | 186 ++++ .../PlayerController.cs.bak_20260424_1551.cs | 189 ++++ 공유/대화로그/EerieVillage/2026-04-24.md | 782 ++++++++++++++++ .../개발/06_BT7-Plan_VS순수형_재구조.md | 309 +++++++ 프로젝트/EerieVillage/기획/01_게임_컨셉.md | 33 +- 프로젝트/EerieVillage/기획/02_코어_루프.md | 44 +- .../EerieVillage/기획/04_전투_기본_스펙.md | 126 ++- .../EerieVillage/기획/balance/01_전투_수치.md | 227 +++-- .../EerieVillage/기획/balance/02_레벨업_곡선.md | 191 ++-- .../EerieVillage/기획/content/01_카드_풀.md | 260 +++--- .../EerieVillage/기획/system/01_카드_시스템.md | 186 ++-- .../기획/system/03_덱빌딩_방식_검토.md | 228 +++++ .../EerieVillage/기획/ux/01_모바일_터치_UX.md | 76 +- 프로젝트/EerieVillage/기획/ux/02_HUD_설계.md | 151 +++- 21 files changed, 3653 insertions(+), 442 deletions(-) create mode 100644 memory/org/audit_pattern_analysis_6계층_2026-04-24_1231.md create mode 100644 공유/개발팀_백업/EerieVillage/AttackHitbox.cs.bak_20260424_1551.cs create mode 100644 공유/개발팀_백업/EerieVillage/Health.cs.bak_20260424_1551.cs create mode 100644 공유/개발팀_백업/EerieVillage/InputSystem_Actions.inputactions.bak_20260424_1551.inputactions create mode 100644 공유/개발팀_백업/EerieVillage/PlayerAttack.cs.bak_20260424_1551.cs create mode 100644 공유/개발팀_백업/EerieVillage/PlayerAttackTests.cs.bak_20260424_1551.cs create mode 100644 공유/개발팀_백업/EerieVillage/PlayerController.cs.bak_20260424_1551.cs create mode 100644 공유/대화로그/EerieVillage/2026-04-24.md create mode 100644 프로젝트/EerieVillage/개발/06_BT7-Plan_VS순수형_재구조.md create mode 100644 프로젝트/EerieVillage/기획/system/03_덱빌딩_방식_검토.md diff --git a/memory/org/audit_pattern_analysis_6계층_2026-04-24_1231.md b/memory/org/audit_pattern_analysis_6계층_2026-04-24_1231.md new file mode 100644 index 0000000..a6eb1f0 --- /dev/null +++ b/memory/org/audit_pattern_analysis_6계층_2026-04-24_1231.md @@ -0,0 +1,36 @@ +--- +name: 세션 시작 교훈 환기 6계층 운영 모니터링 보고서 (2026-04-24_1231) +description: BT4 6계층 체계 운영 데이터 누적 분석. pm-auditor 지속 모니터링 SOT 기반. 개선 안건 식별 + PD 보고 +type: audit_pattern +period: 2026-04-24_1231 +trigger: archive_entry_moved +--- + +# BT4 6계층 운영 모니터링 보고서 — 2026-04-24_1231 + +## 1. 트리거 상태 +- project_context_조직운영_archive.md 엔트리 수: 2 + +## 2. 감사관 E안 자동 윈도우 실측 +- pm-auditor: 7일 +- dev-auditor: 7일 +- plan-auditor: 7일 + +## 3. 계층별 발동 통계 (pm-auditor 수동 기입 영역) +- 계층 0 고정 주입: 매 세션 1회 (기본 전제) +- 계층 1 (1일): (기입) +- 계층 2 (2~7일): (기입) +- 계층 3 (>7일): (기입) +- 계층 4 (--extend=N): (기입) +- 계층 5 (내용축 트리거): (기입) + +## 4. 개선 안건 (pm-auditor 수동 기입) +- (계층 추가·폐기·통합 / 트리거 조정 / 계층 0 대상 조정 / 감사관 윈도우 튜닝) + +## 5. PD 결정 요청 +- (pm-auditor 우선순위 기입) + +## 연관 +- `memory/org/feedback_session_restore_monitoring.md` (모니터링 SOT) +- `memory/org/project_context_조직운영.md` (트리거 기반) +- `scripts/recent_feedback_brief.sh` (6계층 구현) diff --git a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md index b26b86e..441b5af 100644 --- a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md +++ b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md @@ -33,6 +33,7 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| +| BT7-Dev | 2026-04-24 | **BT7-Plan 개발 집행 Phase 1** — VS 순수형 자동 발동(공격 버튼 제거, PlayerAttackTicker 주기 타이머) + 하트 분할 시스템(Health.maxHearts·QuartersPerHeart·IncreaseMaxHearts·Heal·Decrement(int)) + EditMode 테스트 갱신(10→13) + AttackHitbox 쿼터 단위 피해 통합 + TODO 주석(EnemyController.attackDamage balance v0.2 대기) | **진행중** | Unity 편집 6파일 · BT 산출물 2파일 · 백업 6종. **Unity 외부 레포 `D:/NerdNavis/EerieVillage/`**: `Assets/Scripts/Gameplay/{PlayerAttack.cs(개정), PlayerAttackTicker.cs(신설)+.meta}`·`Assets/Scripts/Mechanics/{Health.cs(전면개정), PlayerController.cs(Attack입력제거·Facing public), AttackHitbox.cs(Decrement(damage)통합)}`·`Assets/Settings/InputSystem_Actions.inputactions(Attack액션·바인딩 완전 제거)`·`Assets/Tests/Editor/PlayerAttackTests.cs(10→13)`. **BT 레포**: `프로젝트/EerieVillage/개발/06_BT7-Plan_VS순수형_재구조.md`(신설) · `공유/개발팀_백업/EerieVillage/*.bak_20260424_1551.*`(6종). PD 수동 검증 2종(Asset import+EditMode Runner 실행·Player.prefab에 PlayerAttackTicker 부착+Play 검증) | — | **PM 수행 대기**: pm-auditor 감사 → BT worktree commit → Unity 외부 레포는 PD Editor 실행 시 GitAutoSync 자동 push → Play 검증 결과(13 tests green + 자동 공격 발동 확인) 수령 → balance/01 v0.2 확정 후 후속 Phase(EnemyController·적 ATK 테이블·HUD 하트 UI) 분리 착수 → 완료 아카이브 이동 | | BT5-Dev | 2026-04-23 | **EerieVillage Phase 3 파일럿 (개발)** — ①Unity git 초기화·자동 sync ②캐릭터 교체·이동·공격·i-frame ③템플릿 분석 ④**PlayerTestGirl 아틀라스 최종 집행** (2026-04-24 추가) | **진행중** | [1·3단계 완료] `9f689c1` 원격 push · `scripts/unity_auto_sync.sh` · `01~03_*.md` 분석 3종 [2단계 v0.2 완료] Player·Enemy prefab 편집 + 8 EditMode tests [**3단계(PlayerTestGirl 아틀라스) 완료 2026-04-24 0003**] PD `PlayerTestGirl.png` 직접 저장 (1536×1024, 4x2 8 sprite, walk 4+attack 4 프레임 신규 캐릭터) → B안 채택 (PlayerIdle·PlayerRun m_PPtrCurves 교체 + PlayerAttack.anim 신설). **meta 재생성** (9→8 sprite, 384×512 grid, guid 유지) · **Idle·Run.anim 전면 재작성** (4 sprite loop) · **PlayerAttack.anim + meta 신설** (guid `c8d7e5a1...`) · **Player.controller 확장** (attack Trigger·Player-Attack State·AnyState/Exit Transition 3종) · **Player.prefab m_Sprite 교체** · **EditMode 테스트 +2** (총 10). C6-1 백업 5종 `bak_20260424_0003`. PD 수동 1건 (Play 검증). `feedback_pm_image_verification_skip.md` 신설 (`tier: constitutional`) + `feedback_pm_dev_task_delegation_failure.md` 3회차 append. 재발 방지 5종 체크리스트 전부 이행 (시각 확인·전수 ls·기존 meta 재활용·guid 충돌 검증·백업 5종) | `프로젝트/EerieVillage/개발/05_PlayerTestGirl_아틀라스_적용.md` · `프로젝트/EerieVillage/개발/04_BT5-Dev_2단계_구현보고.md` v0.2 · Unity `Assets/Character/{Sprites/PlayerTestGirl.png.meta, Animations/{PlayerIdle,PlayerRun,PlayerAttack,Player.controller}}` · `Assets/Prefabs/Player.prefab` · `Assets/Tests/Editor/PlayerAttackTests.cs` · `memory/org/feedback_pm_image_verification_skip.md` (신설) · `memory/org/feedback_pm_dev_task_delegation_failure.md` (3회차) · `공유/대화로그/EerieVillage/2026-04-23.md` `[캐릭터리소스교체최종]` 엔트리 | — | **PM 수행 대기**: pm-auditor 감사 → BT worktree commit → push → Unity 프로젝트는 PD Editor 실행 시 GitAutoSync 자동 push → Play 검증 결과(10 tests green + walk/attack 애니메이션 재생) 수령 → 완료 아카이브 이동 | --- diff --git a/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md b/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md index 059168e..f2a2c26 100644 --- a/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md +++ b/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md @@ -33,7 +33,7 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| -(활성 지시 없음 — BT6-Plan Phase 3-B 완료 아카이브 이동. Phase 3-C(BM·과금·세부 대사·보스 패턴 확장·아트 톤) PD 지시 수령 시 신규 등록) +| BT7-Plan | 2026-04-24 | **카드 시스템 개정** — 1) 세계관(narrative) 현행 유지 2) 덱빌딩 방식 VS 순수형 확정 (공격 버튼 제거, 이동·점프만) 3) 카드 구조 **"액티브 + 패시브 = 각성"** 3분류 확정 4) **"3→4 변경" 폐기** (새 구조가 확정안) 5) **각성 조건 확정** (VS 원조 방식: 액티브 최대 강화 + 특정 패시브 + 보물상자) 6) **규모 확정** (액티브 15~20종·패시브 25종 이내·각성 15~20종) 7) **기본 라이프 4 + 젤다 방식 하트 분할 시스템** (♥ 아이콘 · **하트 1개 = 4 HP 확정** · 기본 시작 하트 1개 · 피해 1 = 1/4조각 감소 · 피해 2 = 반조각 감소 · 피해 4 = 하트 1개 소멸 · 카드/성장으로 최대 하트 수 증가 가능) 8) **적 공격력 1부터 점진 강화** (스테이지·등급 진행에 따라 ATK 수치 증가) 9) **동일 카드 스택 업그레이드 Lv.5까지** (기존 Lv.3 확장) 10) **각성 발동 조건 VS 원작 동일 재확인** (액티브 Lv.5 + 각성에 필요한 특정 패시브 1개 이상 보유 + 보물상자 → 각성 카드 등장·발동) 11) **태그 체계 일반 RPG 용어 사용** (기존 세계관 특화 "오행 불/물/목/금/토" · "결계/부적/주술/소환" 등 임시 일반 RPG 용어로 재작성. 용어 자체는 PD가 나중에 일괄 세계관 재매핑 예정) | **진행중** | [확정 방향] VS 순수형 + 액티브/패시브/각성 구조 + 각성 조건 VS 원조 그대로 + 규모 15~20/≤25/15~20 + 라이프 4 하트 분할 + 적 ATK 점진 강화 · [폐기] T1~T4 빌드업·"비전/각성" 레이블·A/B 선택지·티어 수량 개념·적 ATK 1(즉사) 설계·"라이프 1 고정" 해석·`system/01 §5 기각안 1` "HP 막대 기각"·`04_전투 §8 기각안 1` "HP 막대 변형 기각" · [잔존 참조] `프로젝트/EerieVillage/기획/system/03_덱빌딩_방식_검토.md` 는 방식 비교 근거만 유효 · 대화로그 `공유/대화로그/EerieVillage/2026-04-24.md` | — | **PD 추가 지시 대기 잔존 0건 — BT7-Plan 방향 완전 확정**. 개정 집행 착수 가능 상태 → 확정분은 즉시 `04_전투`·`ux/01`·`balance/01`·`system/01`·`content/01`·`balance/02`·`ux/02`·`01_게임_컨셉`·`02_코어_루프` 순차 개정 착수 가능 + 개발팀 `PlayerAttack.cs` 주기 타이머 전환 + `InputActions` Attack 제거 + `Health.cs` maxHP 가변+쿼터 단위 구조 | --- diff --git a/공유/개발팀_백업/EerieVillage/AttackHitbox.cs.bak_20260424_1551.cs b/공유/개발팀_백업/EerieVillage/AttackHitbox.cs.bak_20260424_1551.cs new file mode 100644 index 0000000..6c3c32a --- /dev/null +++ b/공유/개발팀_백업/EerieVillage/AttackHitbox.cs.bak_20260424_1551.cs @@ -0,0 +1,92 @@ +using System.Collections.Generic; +using Platformer.Gameplay; +using UnityEngine; +using static Platformer.Core.Simulation; + +namespace Platformer.Mechanics +{ + /// + /// 플레이어 근거리 공격 판정 박스. + /// PlayerAttack 이벤트에서 Fire(direction)를 호출하면 지정 활성 지속 시간 동안 + /// OverlapBox 로 적을 감지하고, Health 보유 적에 Decrement 적용 → EnemyDeath 체인. + /// 기획 04 §5-1 근거리 공격 1종 — 쿨타임·대미지·판정 박스는 Phase 3-B 튠 대상. + /// + public class AttackHitbox : MonoBehaviour + { + [Header("판정 박스 크기 (플레이어 기준 로컬)")] + public Vector2 size = new Vector2(1.2f, 0.9f); + [Tooltip("플레이어 중심으로부터 공격 방향으로의 오프셋 거리")] + public float offsetDistance = 0.7f; + [Tooltip("판정 활성 지속 시간 (초). 정적 스프라이트 기반이면 짧게 유지")] + public float activeDuration = 0.12f; + [Tooltip("대미지 (Health.Decrement 호출 횟수)")] + public int damage = 1; + + [Header("타격 대상 레이어 마스크")] + public LayerMask targetLayers = ~0; // 전 레이어 기본. 실전에서 Enemy 레이어로 제한 권장 + + float activeUntil = -1f; + Vector2 lastDirection = Vector2.right; + + // 같은 스윙으로 동일 Health 중복 타격 방지 + readonly HashSet alreadyHit = new HashSet(); + + /// + /// PlayerAttack.Execute 에서 호출. direction은 플레이어 facing (x축 ±1 or 0). + /// + public void Fire(Vector2 direction) + { + if (Mathf.Abs(direction.x) > 0.01f) lastDirection = new Vector2(Mathf.Sign(direction.x), 0); + activeUntil = Time.time + activeDuration; + alreadyHit.Clear(); + } + + void Update() + { + if (Time.time > activeUntil) return; + + // 로컬 오프셋: 플레이어 중심 + facing * offsetDistance + var center = (Vector2)transform.position + lastDirection * offsetDistance; + + // OverlapBox로 적 검출 + var hits = Physics2D.OverlapBoxAll(center, size, 0f, targetLayers); + foreach (var col in hits) + { + if (col == null) continue; + // 자기 자신 collider 제외 (PlayerController 부착 GameObject) + if (col.transform == transform || col.transform.IsChildOf(transform)) continue; + + var health = col.GetComponent(); + if (health == null || !health.IsAlive) continue; + if (alreadyHit.Contains(health)) continue; + + alreadyHit.Add(health); + // BT7-Plan TODO (2026-04-24): 적 Health도 하트 분할 시스템 대상이지만 + // i-frame 구조 탓에 Decrement() 반복 호출은 첫 호출 후 무효화된다. + // Health.Decrement(int damage) 단일 호출로 쿼터 단위 다중 피해 전달. + health.Decrement(damage); + + // Enemy 즉사 시 EnemyController 기반 EnemyDeath 체인 발동 (선택) + if (!health.IsAlive) + { + var enemy = col.GetComponent(); + if (enemy != null) + { + Schedule().enemy = enemy; + } + } + } + } + + // Scene view 가시화 — 활성 상태에서 박스 표시 + void OnDrawGizmos() + { + Gizmos.color = (Application.isPlaying && Time.time <= activeUntil) + ? new Color(1f, 0.3f, 0.3f, 0.6f) + : new Color(1f, 1f, 1f, 0.2f); + var dir = Application.isPlaying ? lastDirection : Vector2.right; + var center = (Vector2)transform.position + dir * offsetDistance; + Gizmos.DrawWireCube(center, size); + } + } +} diff --git a/공유/개발팀_백업/EerieVillage/Health.cs.bak_20260424_1551.cs b/공유/개발팀_백업/EerieVillage/Health.cs.bak_20260424_1551.cs new file mode 100644 index 0000000..d882309 --- /dev/null +++ b/공유/개발팀_백업/EerieVillage/Health.cs.bak_20260424_1551.cs @@ -0,0 +1,96 @@ +using System; +using Platformer.Gameplay; +using UnityEngine; +using static Platformer.Core.Simulation; + +namespace Platformer.Mechanics +{ + /// + /// Represebts the current vital statistics of some game entity. + /// + public class Health : MonoBehaviour + { + /// + /// The maximum hit points for the entity. + /// + public int maxHP = 1; + + /// + /// 무적 시간 (i-frame) 지속 초 단위. 기획 04 §3-2 후보 0.4~0.8s. + /// 라이프 1 전제에서 연속 히트 인정 금지를 위한 핵심 장치 (BT5-Dev 2단계 신설). + /// + public float invulnerableDuration = 0.6f; + + /// + /// 현재 무적 상태 여부 (디버그·UX 피드백용 — 깜박임 제어 등에 사용 가능). + /// + public bool IsInvulnerable => Time.time < invulnerableUntil; + + /// + /// Indicates if the entity should be considered 'alive'. + /// + public bool IsAlive => currentHP > 0; + + int currentHP; + float invulnerableUntil = -1f; + + /// + /// Increment the HP of the entity. + /// + public void Increment() + { + currentHP = Mathf.Clamp(currentHP + 1, 0, maxHP); + } + + /// + /// Decrement the HP of the entity. Will trigger a HealthIsZero event when + /// current HP reaches 0. 무적 시간 (i-frame) 내에는 호출되어도 스킵된다. + /// + public void Decrement() + { + // BT5-Dev 2단계: i-frame 보호 — 무적 시간 내 중복 피격 차단 + if (Time.time < invulnerableUntil) + { + return; + } + + currentHP = Mathf.Clamp(currentHP - 1, 0, maxHP); + + // 피격 성공 시 무적 시간 활성화 (다음 피격 대비) + if (invulnerableDuration > 0f) + { + invulnerableUntil = Time.time + invulnerableDuration; + } + + if (currentHP == 0) + { + var ev = Schedule(); + ev.health = this; + } + } + + /// + /// Decrement the HP of the entitiy until HP reaches 0. + /// i-frame 우회하여 즉사 처리 (낙사·승리 이탈 등 시스템 강제 사망). + /// + public void Die() + { + invulnerableUntil = -1f; // i-frame 무효화 + while (currentHP > 0) + { + currentHP = Mathf.Clamp(currentHP - 1, 0, maxHP); + if (currentHP == 0) + { + var ev = Schedule(); + ev.health = this; + break; + } + } + } + + void Awake() + { + currentHP = maxHP; + } + } +} diff --git a/공유/개발팀_백업/EerieVillage/InputSystem_Actions.inputactions.bak_20260424_1551.inputactions b/공유/개발팀_백업/EerieVillage/InputSystem_Actions.inputactions.bak_20260424_1551.inputactions new file mode 100644 index 0000000..41dd71e --- /dev/null +++ b/공유/개발팀_백업/EerieVillage/InputSystem_Actions.inputactions.bak_20260424_1551.inputactions @@ -0,0 +1,837 @@ +{ + "version": 1, + "name": "InputSystem_Actions", + "maps": [ + { + "name": "Player", + "id": "df70fa95-8a34-4494-b137-73ab6b9c7d37", + "actions": [ + { + "name": "Move", + "type": "Value", + "id": "351f2ccd-1f9f-44bf-9bec-d62ac5c5f408", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Jump", + "type": "Button", + "id": "f1ba0d36-48eb-4cd5-b651-1c94a6531f70", + "expectedControlType": "", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Attack", + "type": "Button", + "id": "c9d8e7f6-a5b4-4c3d-2e1f-0a9b8c7d6e5f", + "expectedControlType": "", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Menu", + "type": "Button", + "id": "660e2b4b-b11a-4b85-9d42-2beada90fd4a", + "expectedControlType": "", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "", + "id": "978bfe49-cc26-4a3d-ab7b-7d7a29327403", + "path": "/leftStick", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "WASD", + "id": "00ca640b-d935-4593-8157-c05846ea39b3", + "path": "Dpad", + "interactions": "", + "processors": "", + "groups": "", + "action": "Move", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "e2062cb9-1b15-46a2-838c-2f8d72a0bdd9", + "path": "/w", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "8180e8bd-4097-4f4e-ab88-4523101a6ce9", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "320bffee-a40b-4347-ac70-c210eb8bc73a", + "path": "/s", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "1c5327b5-f71c-4f60-99c7-4e737386f1d1", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "d2581a9b-1d11-4566-b27d-b92aff5fabbc", + "path": "/a", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "2e46982e-44cc-431b-9f0b-c11910bf467a", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcfe95b8-67b9-4526-84b5-5d0bc98d6400", + "path": "/d", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "77bff152-3580-4b21-b6de-dcd0c7e41164", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "1635d3fe-58b6-4ba9-a4e2-f4b964f6b5c8", + "path": "/{Primary2DAxis}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3ea4d645-4504-4529-b061-ab81934c3752", + "path": "/stick", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "eb40bb66-4559-4dfa-9a2f-820438abb426", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "daba33a1-ad0c-4742-a909-43ad1cdfbeb6", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "603f3daf-40bd-4854-8724-93e8017f59e3", + "path": "/secondaryButton", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "d7e6f5a4-b3c2-4d1e-9f8a-7b6c5d4e3f2a", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e8f7a6b5-c4d3-4e2f-1a9b-8c7d6e5f4a3b", + "path": "/rightTrigger", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "bf91b079-c2a3-41a7-ab9e-6e5fbc7e9f4b", + "path": "/escape", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Menu", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "ab1194d0-a370-48e0-b510-68e72eba2707", + "path": "/start", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Menu", + "isComposite": false, + "isPartOfComposite": false + } + ] + }, + { + "name": "UI", + "id": "272f6d14-89ba-496f-b7ff-215263d3219f", + "actions": [ + { + "name": "Navigate", + "type": "PassThrough", + "id": "c95b2375-e6d9-4b88-9c4c-c5e76515df4b", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Submit", + "type": "Button", + "id": "7607c7b6-cd76-4816-beef-bd0341cfe950", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Cancel", + "type": "Button", + "id": "15cef263-9014-4fd5-94d9-4e4a6234a6ef", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Point", + "type": "PassThrough", + "id": "32b35790-4ed0-4e9a-aa41-69ac6d629449", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Click", + "type": "PassThrough", + "id": "3c7022bf-7922-4f7c-a998-c437916075ad", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "RightClick", + "type": "PassThrough", + "id": "44b200b1-1557-4083-816c-b22cbdf77ddf", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "MiddleClick", + "type": "PassThrough", + "id": "dad70c86-b58c-4b17-88ad-f5e53adf419e", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "ScrollWheel", + "type": "PassThrough", + "id": "0489e84a-4833-4c40-bfae-cea84b696689", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "TrackedDevicePosition", + "type": "PassThrough", + "id": "24908448-c609-4bc3-a128-ea258674378a", + "expectedControlType": "Vector3", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "TrackedDeviceOrientation", + "type": "PassThrough", + "id": "9caa3d8a-6b2f-4e8e-8bad-6ede561bd9be", + "expectedControlType": "Quaternion", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "Gamepad", + "id": "809f371f-c5e2-4e7a-83a1-d867598f40dd", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "14a5d6e8-4aaf-4119-a9ef-34b8c2c548bf", + "path": "/leftStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "9144cbe6-05e1-4687-a6d7-24f99d23dd81", + "path": "/rightStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2db08d65-c5fb-421b-983f-c71163608d67", + "path": "/leftStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "58748904-2ea9-4a80-8579-b500e6a76df8", + "path": "/rightStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "8ba04515-75aa-45de-966d-393d9bbd1c14", + "path": "/leftStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "712e721c-bdfb-4b23-a86c-a0d9fcfea921", + "path": "/rightStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcd248ae-a788-4676-a12e-f4d81205600b", + "path": "/leftStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "1f04d9bc-c50b-41a1-bfcc-afb75475ec20", + "path": "/rightStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "fb8277d4-c5cd-4663-9dc7-ee3f0b506d90", + "path": "/dpad", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "Joystick", + "id": "e25d9774-381c-4a61-b47c-7b6b299ad9f9", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "3db53b26-6601-41be-9887-63ac74e79d19", + "path": "/stick/up", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "0cb3e13e-3d90-4178-8ae6-d9c5501d653f", + "path": "/stick/down", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "0392d399-f6dd-4c82-8062-c1e9c0d34835", + "path": "/stick/left", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "942a66d9-d42f-43d6-8d70-ecb4ba5363bc", + "path": "/stick/right", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "Keyboard", + "id": "ff527021-f211-4c02-933e-5976594c46ed", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "563fbfdd-0f09-408d-aa75-8642c4f08ef0", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "eb480147-c587-4a33-85ed-eb0ab9942c43", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2bf42165-60bc-42ca-8072-8c13ab40239b", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "85d264ad-e0a0-4565-b7ff-1a37edde51ac", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "74214943-c580-44e4-98eb-ad7eebe17902", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "cea9b045-a000-445b-95b8-0c171af70a3b", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "8607c725-d935-4808-84b1-8354e29bab63", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "4cda81dc-9edd-4e03-9d7c-a71a14345d0b", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "9e92bb26-7e3b-4ec4-b06b-3c8f8e498ddc", + "path": "*/{Submit}", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Submit", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "82627dcc-3b13-4ba9-841d-e4b746d6553e", + "path": "*/{Cancel}", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Cancel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c52c8e0b-8179-41d3-b8a1-d149033bbe86", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e1394cbc-336e-44ce-9ea8-6007ed6193f7", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "5693e57a-238a-46ed-b5ae-e64e6e574302", + "path": "/touch*/position", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4faf7dc9-b979-4210-aa8c-e808e1ef89f5", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8d66d5ba-88d7-48e6-b1cd-198bbfef7ace", + "path": "/tip", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "47c2a644-3ebc-4dae-a106-589b7ca75b59", + "path": "/touch*/press", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "bb9e6b34-44bf-4381-ac63-5aa15d19f677", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "38c99815-14ea-4617-8627-164d27641299", + "path": "/scroll", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "ScrollWheel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4c191405-5738-4d4b-a523-c6a301dbf754", + "path": "/rightButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "RightClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "24066f69-da47-44f3-a07e-0015fb02eb2e", + "path": "/middleButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "MiddleClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "7236c0d9-6ca3-47cf-a6ee-a97f5b59ea77", + "path": "/devicePosition", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDevicePosition", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "23e01e3a-f935-4948-8d8b-9bcac77714fb", + "path": "/deviceRotation", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDeviceOrientation", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard&Mouse", + "bindingGroup": "Keyboard&Mouse", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + }, + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Gamepad", + "bindingGroup": "Gamepad", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Touch", + "bindingGroup": "Touch", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Joystick", + "bindingGroup": "Joystick", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "XR", + "bindingGroup": "XR", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} \ No newline at end of file diff --git a/공유/개발팀_백업/EerieVillage/PlayerAttack.cs.bak_20260424_1551.cs b/공유/개발팀_백업/EerieVillage/PlayerAttack.cs.bak_20260424_1551.cs new file mode 100644 index 0000000..d5b6bfa --- /dev/null +++ b/공유/개발팀_백업/EerieVillage/PlayerAttack.cs.bak_20260424_1551.cs @@ -0,0 +1,43 @@ +using Platformer.Core; +using Platformer.Mechanics; +using UnityEngine; +using static Platformer.Core.Simulation; + +namespace Platformer.Gameplay +{ + /// + /// Fired when the player triggers an attack (mouse left click / touch attack button). + /// EerieVillage BT5-Dev 2단계 신설 — 기획 04 §5 근거리 공격 1종 파일럿. + /// OnExecute 훅으로 카드 효과·특성 효과가 결합될 확장 지점 (개발 02 §2-1). + /// + public class PlayerAttack : Simulation.Event + { + public PlayerController player; + public Vector2 direction; // 플레이어 facing 방향 (±1, 0) + + public override void Execute() + { + if (player == null) return; + + // 공격 애니메이션 트리거 (Animator에 "attack" trigger 있으면 재생 — 정적 스프라이트면 무시) + if (player.animator != null) + { + var attackHash = Animator.StringToHash("attack"); + // SetTrigger는 미존재 파라미터여도 예외 없음 + player.animator.SetTrigger(attackHash); + } + + // 공격 효과음 (존재 시) + if (player.audioSource != null && player.attackAudio != null) + { + player.audioSource.PlayOneShot(player.attackAudio); + } + + // 플레이어 앞에 판정 박스 발생 + if (player.attackHitbox != null) + { + player.attackHitbox.Fire(direction); + } + } + } +} diff --git a/공유/개발팀_백업/EerieVillage/PlayerAttackTests.cs.bak_20260424_1551.cs b/공유/개발팀_백업/EerieVillage/PlayerAttackTests.cs.bak_20260424_1551.cs new file mode 100644 index 0000000..ada2e0d --- /dev/null +++ b/공유/개발팀_백업/EerieVillage/PlayerAttackTests.cs.bak_20260424_1551.cs @@ -0,0 +1,186 @@ +using System.Linq; +using NUnit.Framework; +using UnityEngine; +using UnityEditor; + +/// +/// EerieVillage BT5-Dev 2단계 — Player 근거리 공격 체계 EditMode 테스트. +/// Prefab 자산의 컴포넌트 구성이 기획 04 §5-1 (근거리 공격 1종) 을 충족하는지 검증. +/// Play 모드 실행 불요 — prefab YAML 직렬화 상태를 직접 검증하여 회귀 방지. +/// +/// 2026-04-23 개정: Platformer.* 네임스페이스 직접 참조 제거 (Scripts/ 하위에 asmdef 부재로 +/// 테스트 어셈블리가 Assembly-CSharp 를 참조 불가한 구조 — reflection 기반으로 전환). +/// +public class PlayerAttackTests +{ + const string PlayerPrefabPath = "Assets/Prefabs/Player.prefab"; + const string EnemyPrefabPath = "Assets/Prefabs/Enemy.prefab"; + + // Platformer.* 는 Assembly-CSharp 에 속함. 테스트 어셈블리에서 직접 타입 참조 불가하므로 + // GetComponents() + GetType().FullName 매칭으로 검증. + const string AttackHitboxType = "Platformer.Mechanics.AttackHitbox"; + const string HealthType = "Platformer.Mechanics.Health"; + const string PlayerControllerType = "Platformer.Mechanics.PlayerController"; + const string EnemyControllerType = "Platformer.Mechanics.EnemyController"; + + static Component FindComponentByFullName(GameObject go, string fullName) + { + if (go == null) return null; + return go.GetComponents() + .FirstOrDefault(c => c != null && c.GetType().FullName == fullName); + } + + static object GetFieldOrProperty(object obj, string memberName) + { + if (obj == null) return null; + var t = obj.GetType(); + var field = t.GetField(memberName, + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); + if (field != null) return field.GetValue(obj); + var prop = t.GetProperty(memberName, + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); + return prop?.GetValue(obj); + } + + [Test] + public void Player_Prefab_Has_AttackHitbox_Component() + { + var prefab = AssetDatabase.LoadAssetAtPath(PlayerPrefabPath); + Assert.IsNotNull(prefab, $"Player.prefab not found at {PlayerPrefabPath}"); + + var hitbox = FindComponentByFullName(prefab, AttackHitboxType); + Assert.IsNotNull(hitbox, + "Player.prefab에 AttackHitbox 컴포넌트가 누락. " + + "BT5-Dev 2단계 재위임 집행분 (2026-04-23) 이 prefab YAML 에 반영되어야 함."); + } + + [Test] + public void Player_Prefab_Has_Health_Component() + { + var prefab = AssetDatabase.LoadAssetAtPath(PlayerPrefabPath); + Assert.IsNotNull(prefab, $"Player.prefab not found at {PlayerPrefabPath}"); + + var health = FindComponentByFullName(prefab, HealthType); + Assert.IsNotNull(health, "Player.prefab 에 Health 컴포넌트 누락 (템플릿 기본)."); + } + + [Test] + public void Player_Prefab_Has_PlayerController_Component() + { + var prefab = AssetDatabase.LoadAssetAtPath(PlayerPrefabPath); + Assert.IsNotNull(prefab); + + var controller = FindComponentByFullName(prefab, PlayerControllerType); + Assert.IsNotNull(controller, "Player.prefab 에 PlayerController 컴포넌트 누락."); + } + + [Test] + public void AttackHitbox_Default_Damage_Is_One() + { + var prefab = AssetDatabase.LoadAssetAtPath(PlayerPrefabPath); + var hitbox = FindComponentByFullName(prefab, AttackHitboxType); + Assert.IsNotNull(hitbox); + + var damage = GetFieldOrProperty(hitbox, "damage"); + Assert.IsNotNull(damage, "AttackHitbox.damage 필드/프로퍼티 접근 불가"); + Assert.AreEqual(1, System.Convert.ToInt32(damage), + "기본 대미지 1 (기획 04 §5-1, Phase 3-B 튠 전 파일럿 값)."); + } + + [Test] + public void AttackHitbox_Active_Duration_Is_Positive() + { + var prefab = AssetDatabase.LoadAssetAtPath(PlayerPrefabPath); + var hitbox = FindComponentByFullName(prefab, AttackHitboxType); + Assert.IsNotNull(hitbox); + + var duration = GetFieldOrProperty(hitbox, "activeDuration"); + Assert.IsNotNull(duration, "AttackHitbox.activeDuration 필드/프로퍼티 접근 불가"); + Assert.Greater(System.Convert.ToSingle(duration), 0f, + "activeDuration 가 0 이하면 OverlapBox 판정이 즉시 종료되어 공격 무효."); + } + + [Test] + public void Enemy_Prefab_Has_Health_Component() + { + var prefab = AssetDatabase.LoadAssetAtPath(EnemyPrefabPath); + Assert.IsNotNull(prefab, $"Enemy.prefab not found at {EnemyPrefabPath}"); + + var health = FindComponentByFullName(prefab, HealthType); + Assert.IsNotNull(health, + "Enemy.prefab 에 Health 컴포넌트 누락. " + + "BT5-Dev 2단계 재위임 집행분 (2026-04-23) 이 prefab YAML 에 반영되어야 함. " + + "Health 없으면 AttackHitbox.Update 의 Decrement 호출이 불가 → EnemyDeath 체인 미발동."); + } + + [Test] + public void Enemy_Prefab_Health_MaxHP_Is_One() + { + var prefab = AssetDatabase.LoadAssetAtPath(EnemyPrefabPath); + var health = FindComponentByFullName(prefab, HealthType); + Assert.IsNotNull(health); + + var maxHP = GetFieldOrProperty(health, "maxHP"); + Assert.IsNotNull(maxHP, "Health.maxHP 필드/프로퍼티 접근 불가"); + Assert.AreEqual(1, System.Convert.ToInt32(maxHP), + "일반 적 기본 maxHP 1 (코어 룰 7 정합, 첫 세팅)."); + } + + [Test] + public void Enemy_Prefab_Has_EnemyController_Component() + { + var prefab = AssetDatabase.LoadAssetAtPath(EnemyPrefabPath); + var controller = FindComponentByFullName(prefab, EnemyControllerType); + Assert.IsNotNull(controller, + "EnemyDeath 체인에 EnemyController 필수 (AttackHitbox.Update 에서 Schedule().enemy = enemy)."); + } + + // ===== BT5-Dev 3단계 PlayerTestGirl 아틀라스 적용 검증 (2026-04-24) ===== + + const string PlayerTestGirlGuid = "44ad58ba82191ca4d818108ab01d3baa"; + + [Test] + public void Player_Prefab_SpriteRenderer_References_PlayerTestGirl() + { + // Player.prefab YAML 직접 파싱 — SpriteRenderer.m_Sprite 의 guid 가 + // PlayerTestGirl.png.meta 의 guid 와 일치하는지 검증. 기존 PlayerIdle( + // ba86c7b200abe499cb750833482830b3) 에서 PlayerTestGirl 로 교체되었는지 회귀 확인. + var path = System.IO.Path.GetFullPath(PlayerPrefabPath); + Assert.IsTrue(System.IO.File.Exists(path), $"Player.prefab 부재 — {path}"); + var yaml = System.IO.File.ReadAllText(path); + + // m_Sprite: {fileID: ..., guid: , type: 3} + var match = System.Text.RegularExpressions.Regex.Match( + yaml, + @"m_Sprite:\s*\{fileID:\s*[-0-9]+,\s*guid:\s*([a-f0-9]{32}),\s*type:\s*3\}"); + Assert.IsTrue(match.Success, + "Player.prefab YAML 에서 SpriteRenderer.m_Sprite guid 추출 실패."); + Assert.AreEqual(PlayerTestGirlGuid, match.Groups[1].Value, + $"Player.prefab SpriteRenderer.m_Sprite guid 가 PlayerTestGirl({PlayerTestGirlGuid}) 이어야 함. 실제: {match.Groups[1].Value}"); + } + + [Test] + public void Player_Controller_Has_Attack_Parameter_And_State() + { + // Player.controller YAML 직접 파싱 — attack Trigger 파라미터 + Player-Attack State 존재 검증. + // BT5-Dev 3단계에서 PlayerAttack.cs 의 Schedule 과 연동되는 State Machine 요소가 + // controller 에 명시되었는지 회귀 확인. + var path = System.IO.Path.GetFullPath("Assets/Character/Animations/Player.controller"); + Assert.IsTrue(System.IO.File.Exists(path), $"Player.controller 부재 — {path}"); + var yaml = System.IO.File.ReadAllText(path); + + // m_Name: attack 파라미터 + m_Type: 9 (Trigger) + Assert.IsTrue( + System.Text.RegularExpressions.Regex.IsMatch( + yaml, + @"m_Name:\s*attack\s*\r?\n\s*m_Type:\s*9"), + "Player.controller 에 attack Trigger 파라미터(m_Type:9) 누락. " + + "BT5-Dev 3단계 PlayerAttack State 연동 전제."); + + // Player-Attack State 존재 + Assert.IsTrue( + yaml.Contains("m_Name: Player-Attack"), + "Player.controller 에 Player-Attack State 누락. " + + "PlayerAttack.anim(guid c8d7e5a1f9b24e63a7f5d2c8e1b9a4f7) 모션을 호스트하는 State 가 필요."); + } +} diff --git a/공유/개발팀_백업/EerieVillage/PlayerController.cs.bak_20260424_1551.cs b/공유/개발팀_백업/EerieVillage/PlayerController.cs.bak_20260424_1551.cs new file mode 100644 index 0000000..18c09f2 --- /dev/null +++ b/공유/개발팀_백업/EerieVillage/PlayerController.cs.bak_20260424_1551.cs @@ -0,0 +1,189 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Platformer.Gameplay; +using static Platformer.Core.Simulation; +using Platformer.Model; +using Platformer.Core; +using UnityEngine.InputSystem; + +namespace Platformer.Mechanics +{ + /// + /// This is the main class used to implement control of the player. + /// It is a superset of the AnimationController class, but is inlined to allow for any kind of customisation. + /// + public class PlayerController : KinematicObject + { + public AudioClip jumpAudio; + public AudioClip respawnAudio; + public AudioClip ouchAudio; + /// + /// Attack sound effect (BT5-Dev 2단계 신설). 미지정 시 무음. + /// + public AudioClip attackAudio; + + /// + /// Max horizontal speed of the player. + /// + public float maxSpeed = 7; + /// + /// Initial jump velocity at the start of a jump. + /// + public float jumpTakeOffSpeed = 7; + + /// + /// Cooldown between attacks in seconds (기획 04 §5-1 Phase 3-B 튠 대상). + /// + public float attackCooldown = 0.35f; + + /// + /// Attack hitbox component (자동 GetComponent, 없으면 null — PlayerAttack.Execute에서 null 체크). + /// + public AttackHitbox attackHitbox; + + public JumpState jumpState = JumpState.Grounded; + private bool stopJump; + /*internal new*/ public Collider2D collider2d; + /*internal new*/ public AudioSource audioSource; + public Health health; + public bool controlEnabled = true; + + bool jump; + Vector2 move; + SpriteRenderer spriteRenderer; + internal Animator animator; + readonly PlatformerModel model = Simulation.GetModel(); + + private InputAction m_MoveAction; + private InputAction m_JumpAction; + private InputAction m_AttackAction; + + // 마지막 공격 시각 — attackCooldown과 비교해 연타 제한 + float nextAttackTime = 0f; + // 현재 facing 방향 (마지막 이동 입력 기반, 정지 시 이전 값 유지) + Vector2 facing = Vector2.right; + + public Bounds Bounds => collider2d.bounds; + + void Awake() + { + health = GetComponent(); + audioSource = GetComponent(); + collider2d = GetComponent(); + spriteRenderer = GetComponent(); + animator = GetComponent(); + if (attackHitbox == null) attackHitbox = GetComponent(); + + m_MoveAction = InputSystem.actions.FindAction("Player/Move"); + m_JumpAction = InputSystem.actions.FindAction("Player/Jump"); + m_AttackAction = InputSystem.actions.FindAction("Player/Attack"); + + m_MoveAction.Enable(); + m_JumpAction.Enable(); + if (m_AttackAction != null) m_AttackAction.Enable(); + } + + protected override void Update() + { + if (controlEnabled) + { + move.x = m_MoveAction.ReadValue().x; + if (jumpState == JumpState.Grounded && m_JumpAction.WasPressedThisFrame()) + jumpState = JumpState.PrepareToJump; + else if (m_JumpAction.WasReleasedThisFrame()) + { + stopJump = true; + Schedule().player = this; + } + + // 공격 입력 처리 (마우스 좌클릭 / 게임패드 RT / 모바일 터치 — Phase 3-B UX) + if (m_AttackAction != null && m_AttackAction.WasPressedThisFrame() && Time.time >= nextAttackTime) + { + nextAttackTime = Time.time + attackCooldown; + var ev = Schedule(); + ev.player = this; + ev.direction = facing; + } + } + else + { + move.x = 0; + } + UpdateJumpState(); + base.Update(); + } + + void UpdateJumpState() + { + jump = false; + switch (jumpState) + { + case JumpState.PrepareToJump: + jumpState = JumpState.Jumping; + jump = true; + stopJump = false; + break; + case JumpState.Jumping: + if (!IsGrounded) + { + Schedule().player = this; + jumpState = JumpState.InFlight; + } + break; + case JumpState.InFlight: + if (IsGrounded) + { + Schedule().player = this; + jumpState = JumpState.Landed; + } + break; + case JumpState.Landed: + jumpState = JumpState.Grounded; + break; + } + } + + protected override void ComputeVelocity() + { + if (jump && IsGrounded) + { + velocity.y = jumpTakeOffSpeed * model.jumpModifier; + jump = false; + } + else if (stopJump) + { + stopJump = false; + if (velocity.y > 0) + { + velocity.y = velocity.y * model.jumpDeceleration; + } + } + + if (move.x > 0.01f) + { + spriteRenderer.flipX = false; + facing = Vector2.right; + } + else if (move.x < -0.01f) + { + spriteRenderer.flipX = true; + facing = Vector2.left; + } + + animator.SetBool("grounded", IsGrounded); + animator.SetFloat("velocityX", Mathf.Abs(velocity.x) / maxSpeed); + + targetVelocity = move * maxSpeed; + } + + public enum JumpState + { + Grounded, + PrepareToJump, + Jumping, + InFlight, + Landed + } + } +} \ No newline at end of file diff --git a/공유/대화로그/EerieVillage/2026-04-24.md b/공유/대화로그/EerieVillage/2026-04-24.md new file mode 100644 index 0000000..0f211b1 --- /dev/null +++ b/공유/대화로그/EerieVillage/2026-04-24.md @@ -0,0 +1,782 @@ +# 대화로그 — EerieVillage — 2026-04-24 + +> **프로젝트**: 기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist +> **조직**: BurningTimes +> **기록 근거**: C32 대화로그 기록 의무 (헌법급) + +--- + +## [BT7-Plan 접수·위임] 카드 시스템 개정 검토 — 4티어 + 덱빌딩 방식 비교 + +**태그**: #BT7-Plan #PD지시 #카드시스템개정 #기획팀장위임 #4티어 #덱빌딩방식비교 + +**트리거**: PD 2026-04-24 직접 지시 2건 +1. 세계관(narrative) 추가 진행 중단 — PD 직접 보완 예정. 기존 narrative/01·02·03 3종 현행 유지 +2. 카드 시스템 개정 검토 — (a) 티어 3→4 확장 (b) 덱빌딩 방식 Slay the Spire vs Vampire Survivors 비교·제안 + +### PM 집행 절차 (C29-1 단계 1 팀 논의 · 단계 2 PM 조율) + +1. **매니페스트 등록**: `2026-04-24_BT7-Plan_덱빌딩검토접수` (target_files: PD 지시 로그 + system/03 검토 문서) +2. **PD 지시 로그 등록**: 기획팀 활성 테이블 BT7-Plan 신규 추가 (`진행중` 상태) +3. **기획팀장 Agent 위임**: 상세 프롬프트 8섹션 요구사항 + 선행 Read 8개 파일 의무 + 유지 제약 5축 + C5·C11·C14-5·C23·C30·C32·C34-11·P30 규칙 준수 명시 + +### 기획팀장 Agent 산출물 +**`프로젝트/EerieVillage/기획/system/03_덱빌딩_방식_검토.md`** (229 라인, YAML frontmatter 포함) + +#### 핵심 결론 +- **권장 덱빌딩 방식**: **Vampire Survivors 하이브리드** + - 플레이어 이동·점프·근거리 검 공격 수동 유지 (축 2 손맛 보존) + - 카드 효과는 태그별 이원화: `[공격]`·`[방호]`·`[속도]` = 수동 강화형 / `[부적]`·`[소환]`·`[주술]`·`[폭발]`·`[회복]` = 자동 발동형 + - 레벨업 3픽 + 동일 카드 스택 업그레이드 골격 유지 + +- **4티어 구조 권장**: T2·T3 **사이에 "비전(祕傳)" 삽입** + - T1 기본(普通) → T2 숙련(鍛鍊) → **T3 비전(祕傳) [신규]** → T4 각성(覺醒) [구 T3] + - 해제 조건: T2=Lv.3+ / T3=Lv.5+ & 주력 태그 2장 / T4=Lv.7+ & 보스 처치 1회 + - 32장 재분배: T1 12 · T2 10 · T3 7 · T4 3 + +#### 결정적 발견 (실측 기반) +현 기획 문서 내부 불일치 실측: +- `system/01` 3티어 (T1·T2·T3) +- `content/01` 3티어 (1·2·3) +- `balance/02` **이미 4티어 확률 테이블 존재** (Common·Uncommon·Rare·Epic) + +→ PD 지시 "3→4 변경"은 기존 balance 선행 설계와 정합 확보 방향. system·content를 balance에 맞춰 통일. + +#### 적합성 평가 (유지 제약 5축 10점 척도) +| 제약 축 | STS | VS | +|---|---|---| +| 모바일 조작 | 3/10 | 9/10 | +| 라이프 1 | 4/10 | 8/10 | +| 2D 액션 플랫포머 (축 2) | 1/10 | 7/10 | +| 재미 축 1 육성 롤러코스터 | 8/10 | 9/10 | +| 32장 스코프 | 6/10 | 9/10 | +| **종합** | **22/50 (44%)** | **42/50 (84%)** | + +#### 기각안 6건 (C32 최소 3건 초과 달성) +1. STS 순수 채택 — 축 2 구조적 포기 (템플릿 선택 전제 부정) +2. VS 순수 채택 (이동만) — 근거리 검 조작감 상실 +3. 4티어 최상위(T3 위) 추가 — balance/02 Epic 확률 테이블 충돌·체감 희박화 과도 (차선) +4. 4티어 T1 아래 추가 (초심자 티어) — T1 의미 중복·런 초반 선택지 과다 +5. 카드 풀 32장 확장 — content/01 §5 기각 계승, 4티어 재분배로 볼륨 조정 충분 +6. T3 비전 정적 판정 해제 — VS 실시간 성장 감각 약화, 동적 판정 유지 + +#### 개정 영향 범위 (PD 방향 결정 후 순차 집행) +| 파일 | 개정 요지 | +|---|---| +| `system/01_카드_시스템.md` | 3→4티어 확장, 픽 알고리즘에 T3 비전 태그 보너스 추가, 카드 발동 분류 컬럼 추가 | +| `content/01_카드_풀.md` | 티어 4종 재매핑, 32장 재분배, 자동 vs 수동 분류 신규 | +| `balance/01_전투_수치.md` | CardMultiplier 범위 재검토, 자동 발동 DPS 기여도 분석 | +| `balance/02_레벨업_곡선.md` | 4티어 확률 테이블 레이블 재매핑, 해제 조건 정합성 검증 | +| `ux/02_HUD_설계.md` | 카드별 자동·수동 아이콘 구분, T3 비전 등장 태그 보너스 시각 피드백 | + +### 규칙 준수 검증 +- **C5 정직성**: STS·VS 장르 특성 사실 기반, 추정 항목 "추정" 명시 (Dead Cells 선례·분당 입력 등) +- **C11 개발 관점**: 구현 복잡도 평가 포함 (BT.Framework Tier 1 5종·PlatformerMicrogame Simulation 활용) +- **C14-5**: 본문 최신 원칙 준수 +- **C23**: 선행 Read 8개 파일 실측 기반 판단 (balance/02 4티어 기존 존재 실측 발견) +- **C30**: 기존 기획 파일 전수 선행 Read +- **C32 기각안**: 6건 기록 +- **C34-11**: 상대 경로만 사용 +- **C36**: 본 문서는 제안 단계, PM 재량으로 방향·원칙 수준 축소하지 않음 (PD 결정 대기) +- **P30**: 재미 축 3종 기준 판단 + +### 공유 상태 +내부 공유 (C21-① · 로컬 commit 예정). PD 방향 결정 시점에 상세 개정 집행 + "세션 공유" 지시로 main push (C21-②). + +### 다음 단계 (PD 결정 대기) +1. 덱빌딩 방식 3안 중 택1 (VS 하이브리드 권장 / VS 순수 / STS 변형) +2. 4티어 구조 2안 중 택1 (T2·T3 중간 권장 / T3 위 차선) +3. PD 승인 후 system/01·content/01·balance/01·02·ux/02 5개 파일 순차 개정 집행 + +--- + +## [BT7-Plan 방향 재설정] PD 직접 지시 — VS 순수형 + "액티브+패시브=각성" 확정 + +**태그**: #BT7-Plan #PD확정지시 #VS순수형 #액티브패시브각성 #T1-T4폐기 #PM위반자진고지 + +### PD 직접 지시 연쇄 (동일 세션 후속) + +1. **VS 순수형 확정**: "공격 버튼은 필요 없이 오직 이동과 점프만 존재하면 돼 따라서 VS(뱀파이어 서바이벌) 방식이 적합할거 같아" + → 공격 버튼 제거. 플레이어 조작 = 이동·점프 2종. 공격은 자동 발동 + +2. **"T1~T4 빌드업"은 무엇인가 질의** → PM이 티어 설명했으나 PD가 **"빌드업 형식으로 구성한 이유"** 재질의 + → PM 자진 고지: VS 방식 채택 선언해놓고 실제 VS 구조(액티브+패시브=각성)를 반영 않고 기존 3티어 계단 구조의 수량 확장으로만 해석함. **C2-1 근본 원인 재정의 의무 위반** + +3. **카드 구조 확정**: "'액티브 + 패시브 = 각성' 구조를 EerieVillage 카드 시스템의 확정 방향으로 지시한거야" + → 기존 T1~T4 빌드업 구조·"비전/각성" 레이블·A/B 선택지·장수 분배(12·10·7·3)·해제 조건 수치 전부 폐기 + +### PM 위반 자진 고지 (C22-6 코어룰 신설 계기) + +PD 직접 지적: "앞으로는 너 혼자 아는 용어나 선택지로 내게 선택을 강요하지 마! 안건 번호도 네 멋대로 부여하지 말고, 규칙에 따라 일정한 넘버링으로 보고하지 않은 안건을 멋대로 넘겨짚고 진행하지 않도록 코어 룰에 반영해" + +**위반 행위 3종**: +1. PD 미합의 용어 일방 신설 ("비전(祕傳)"·"각성(覺醒)"·"수동 강화형/자동 발동형" 등) +2. 자의 선택지 식별자 부여 ("A안·B안" — C25-1 고정 위계 위반) +3. 미보고 안건 넘겨짚기 (해제 조건·장수 분배 PD 확인 없이 기정사실화) + +**위반 규칙**: C5 · C22 · C23 · C25 · C36 + +### C22-6 코어룰 신설 초안 제출 (PD 문안 승인 대기) + +`C22. 용어·식별자 일관 사용 의무`에 **C22-6 신설** 초안 제출: +- PM·하위 에이전트가 PD 미합의 용어·식별자·선택지·안건을 일방 구성하여 PD께 결정 요구 금지 +- 신규 용어 도입 시 사전 설명·합의 단계 강제 +- C25-1 고정 위계(1./1)/A./가)) 선순 적용 의무 +- 미보고 안건 PM 넘겨짚기 금지 +- 하위 에이전트 산출물 내 신규 용어도 PM이 PD 보고 전 사전 합의 강제 + +**후속 조치 대기** (PD 승인 후): +- SKILL.md C22-6 추가 +- `memory/org/feedback_pm_unilateral_proposal.md` 신설 (2026-04-24 실증 SOT) +- C31-J 체크리스트 신설 (용어·식별자 자의 도입 감지) +- pm-auditor 감사 영역 7번 신설 +- C10-6 3중 전파 + +### BT7-Plan 현재 상태 + +**PD 확정 사항** (즉시 효력): +- 세계관(narrative/01·02·03) 현행 유지, 추가 진행 중단 +- 덱빌딩 방식: VS 순수형 (공격 버튼 제거, 이동·점프만) +- 카드 구조: "액티브 + 패시브 = 각성" 3분류 + +**PD 추가 지시 대기 (설계 착수 전 필수)**: +1. "티어 3→4 변경" 지시의 새 구조 내 재해석 +2. 각성 발생 조건 (VS 원조 방식 "액티브 만렙 + 특정 패시브 + 보물상자" 그대로인지, 맥락 조정인지) +3. 기존 설계 중 유지 여부 (레벨업 3픽·런 사망 시 카드 전손·오행/유형 태그 2축·동일 카드 스택 업그레이드) +4. 액티브·패시브·각성 각 카테고리 규모 (몇 종씩) + +**재설계 영향 파일 (PD 방향 확정분만 순차 개정)**: +- `프로젝트/EerieVillage/기획/system/01_카드_시스템.md` — 3분류 구조로 전면 재작성 +- `프로젝트/EerieVillage/기획/content/01_카드_풀.md` — 기존 32장을 새 3분류로 재분배·재설계 +- `프로젝트/EerieVillage/기획/balance/01_전투_수치.md` — 자동 공격 주기·DPS 공식 재설계 +- `프로젝트/EerieVillage/기획/balance/02_레벨업_곡선.md` — 확률 테이블 3분류 체계에 맞게 재구성 +- `프로젝트/EerieVillage/기획/ux/01·02` — 공격 버튼 제거 + 각성 발생 피드백 UI +- Unity: `PlayerAttack.cs` 트리거 수동→주기 전환 + `InputSystem_Actions.inputactions` Attack 바인딩 제거 + +### 공유 상태 +내부 공유 (C21-①). BT7-Plan 재설정 반영 commit 대기. + +### 관련 규칙 +- **C1** 지시=승인 (PD 확정 사항 즉시 효력) +- **C2-1** 근본 원인 재정의 의무 (PM 위반 자진 고지) +- **C22** 용어·식별자 일관 사용 (C22-6 신설 계기) +- **C29** 업무 자율 수행 (PM 재량 vs PD 재확인 경계) +- **C32** 대화로그 기록 의무 (본 엔트리) +- **C36** PM 자율 판단 범위 상한 (방향·원칙 수준 축소·희석 금지) + +--- + +## [BT7-Plan PD 지시 4건 답변] 1·2 확정 + 3·4 PM 조사 보고 + +**태그**: #BT7-Plan #PD지시답변 #티어폐기 #각성조건확정 #기존설계분류 #레퍼런스조사 + +### PD 지시 답변 수령 + +1. **"티어 3→4 변경" 재해석 폐기 확정** — PD 원문: "기존 티어 기준으로 지시한 내용인데 폐기하고 새로 바뀐 구조가 확정된 안이야" + → 티어 수량 개념 자체 소멸. 액티브/패시브/각성 3분류가 유일 구조. + +2. **각성 발생 조건 VS 원조 방식 확정** — PD 원문: "VS 원조 방식(액티브 최대 강화 + 특정 패시브 + 보물상자) 그대로야" + → 각성 트리거 = (액티브 최대 레벨) + (특정 패시브 보유) + (보물상자 획득) + +3. **기존 설계 유지 여부 정리** — PD 지시: "기존 설계안 중 유지 가능한 부분이 뭔지 다시 정리해서 보고해" + → 본 엔트리 하단 분류 보고 수행 + +4. **액티브·패시브·각성 각 규모** — PD 지시: "레퍼런스 게임이 몇 종인지 먼저 확인 후 보고해" + → 본 엔트리 하단 레퍼런스 조사 보고 수행 + +### 기존 설계 분류 (3번 답변) + +#### ✅ 유지 (변동 없음) +- **04_전투**: 라이프 1·피격 즉사·i-frame 0.6s·PlatformerMicrogame 계승·2D 횡스크롤 +- **balance/01**: MoveSpeed 6.0·JumpHeight 3.5·Gravity Scale 3.5·Coyote 0.12s·Jump Buffer 0.15s·Edge Push 0.3m +- **balance/01**: 적 스탯 (HP 40·60·120·보스 400, 이동 2.0~3.5) +- **balance/02**: XP 곡선 80+Lv×20·XP 획득량·어뷰징 가드 +- **system/01**: 사망 시 카드 전손 (코어 룰 7) +- **ux/01**: 좌측 가상 스틱·우측 점프 버튼·Safe Area·피격 피드백 3종 (시각·청각·진동)·BT.Framework Tier 2 Neu 구현 3종 +- **ux/02**: 보스전 HUD·마을 UI·사망/복귀 전환 UI·레벨업 카드 픽 Unscaled Time 시간 정지 +- **content/01**: 한자 네이밍·조선 퇴마 톤 (narrative 현행 유지 지시 연계) + +#### 🔄 부분 유지 / 재설계 필요 +- **system/01**: 레벨업 3픽·동일 카드 스택 업그레이드·태그 체계 2축 — VS 각성 조건과 정합성 PD 검토 필요 +- **content/01**: 32장 풀 볼륨 — 액티브/패시브/각성 3분류로 재분배 필요 +- **content/01**: 8 카테고리 (공격·부적·주술·소환·방호·속도·회복·특수) — 액티브/패시브 재분류 필요 +- **balance/02**: 레벨업 드로우 4티어 확률 테이블 — 액티브/패시브 2축 드로우로 재설계 (각성은 별도 트리거) +- **balance/02**: 런 내 카드 10장 하드캡 — 액티브·패시브 슬롯 상한 분리 재설계 (VS는 6+6) +- **ux/02**: HUD 카드 슬롯 — 액티브·패시브 분리 UI 재설계 + +#### ❌ 폐기 +- **04_전투 §5**: 근거리 공격 1종 (수동 공격 전체) +- **ux/01**: 우측 공격 버튼 +- **balance/01 §3**: BaseDamage 20·AttackRange·AttackCooldown 0.4s·HitStop·AttackBoxOffset·KnockbackForce (수동 공격 수치 전체) +- **system/01 §3 규칙 1**: 3티어 구조 + 티어 수량 개념 전체 +- **content/01**: `[공격]` 태그 5장의 "기본 공격 강화" 효과 설계 (기본 공격 사라져 의미 상실) + +#### 🆕 신규 설계 필요 +- 액티브 무기 자동 발동 주기 시스템 +- DPS 공식 (자동 발동 무기 기반 재설계) +- 각성(진화) 메커니즘 + 각성 발생 피드백 UI +- 기본 시작 무기 (VS 원조처럼 퇴마사 고유 무기 1종 시작) +- 보물상자 획득 체계 (VS 원조 각성 트리거 필수 요소) + +### 레퍼런스 게임 규모 조사 (4번 답변) + +WebSearch 실측 기반 (버전별 변동 가능, 베이스 게임 기준): + +| 게임 | 액티브 (무기) | 패시브 | 각성 (진화) | 출처 | +|---|---|---|---|---| +| **Vampire Survivors 베이스** | ~14종 (WebSearch 확답 없음, 기본 지식 기반 추정) | **21종 (17 일반 + 4 특수)** | ~14종 + Union 소수 (추정) | [Vampire Survivors Wiki - Passive items](https://vampire.survivors.wiki/w/Passive_items) | +| **Brotato 베이스** | **64종** | **201종** (아이템) | 없음 (진화 시스템 부재) | [Brotato Wiki](https://brotato.wiki.spellsandguns.com/Weapons) | +| **Holocure** | 미확인 (WebSearch 확답 없음) | 미확인 | 스탬프 3단계 업그레이드 (고정) | [HoloCure Wiki - Stamp](https://holocure.wiki.gg/wiki/Stamp) | + +**핵심 관찰**: +- VS 베이스(로그라이크 서바이버 원조)가 가장 근접한 레퍼런스 — 액티브 ~14 + 패시브 21 + 각성 ~14 +- Brotato는 액티브 64·아이템 201로 볼륨 매우 큼. 파일럿 스코프 초과 +- EerieVillage 기존 32장 볼륨 유지 가정 시 VS 베이스 규모 참고치 + +**PM 관점 (판단 아님·PD 결정 대기)**: 파일럿 스코프 고려 시 VS 베이스 규모 또는 그 이하가 관리 복잡도·QA 비용 대비 적정 가능성. 정확한 수량은 PD 지시 대기. + +### 개정 착수 가능 판정 + +PD 방향 확정 사항만으로 즉시 착수 가능한 개정 영역: +- ✅ 04_전투 §2 공격 액션 삭제 + §5 전체 폐기 → 이동·점프 2종만 재작성 +- ✅ ux/01 공격 버튼 레이아웃 삭제 + 관련 피드백 부분 제거 +- ✅ balance/01 §3 공격 수치 섹션 삭제 + §6 대미지 공식 재설계 플레이스홀더 +- ✅ system/01 3티어 구조 폐기 + 액티브/패시브/각성 3분류 골격 재작성 +- ✅ 개발팀 PlayerAttack 주기 타이머 전환 + InputActions Attack 바인딩 제거 + +PD 추가 결정 후 착수: +- ⏳ content/01 32장 재분배 (액티브/패시브/각성 각 규모 확정 후) +- ⏳ balance/02 드로우 확률 테이블 재설계 (규모 확정 후) +- ⏳ ux/02 HUD 카드 슬롯 재설계 (슬롯 상한 확정 후) + +### 공유 상태 +내부 공유 (C21-①). PD 지시 3·4 답변 대기 + 규모 결정 대기. + +--- + +## [BT7-Plan 규모 확정] PD 직접 지시 — 액티브 15~20 / 패시브 ≤25 / 각성 15~20 + +**태그**: #BT7-Plan #규모확정 #PD직접지시 #레퍼런스VS급 + +### PD 지시 수령 (2026-04-24) + +> PD 원문: "엑티브, 패시브, 각성은 뱀파이어 서바이벌 정도의 규모로 액티브 15~20종, 패시브 25종 이내, 각성 15~20종으로 구성해." + +**확정 수치**: +- **액티브**: 15~20종 +- **패시브**: 25종 이내 +- **각성**: 15~20종 + +### VS 베이스 레퍼런스와 비교 (참고용) +- VS 베이스: 액티브 ~14 + 패시브 21 + 각성 ~14 +- EerieVillage 확정: 액티브 15~20 + 패시브 ≤25 + 각성 15~20 +- → VS 베이스 수준 또는 약간 상회. 파일럿 스코프 내 관리 가능한 규모 + +### 기존 32장 대비 +- 기존 content/01: 32장 단일 풀 +- 개정 후: 액티브(최대 20) + 패시브(최대 25) + 각성(최대 20) = 최대 65장 +- 약 2배 볼륨 확장. 기존 `content/01 §5 기각안 2` "50장 이상 초기 풀 기각"보다 다소 큰 규모 (단 기존 기각안은 단일 풀 기준, 현 구조는 3분류 합계 기준이라 다른 맥락) + +### 기존 설계 분류 (표 형태 재요약) + +| 영역 | 항목 | 판정 | +|---|---|---| +| **전투 기본** | 라이프 1 · 피격 즉사 · i-frame 0.6s | 유지 | +| | PlatformerMicrogame 템플릿 계승 · 2D 횡스크롤 | 유지 | +| **이동·점프** | MoveSpeed 6.0 · JumpHeight 3.5 · Gravity 3.5 · AirControl 0.7 | 유지 | +| | Coyote 0.12s · Jump Buffer 0.15s · Edge Push 0.3m | 유지 | +| **공격 (수동)** | 근거리 공격 1종 | 폐기 | +| | BaseDamage 20 · AttackRange 1.2m · AttackCooldown 0.4s · HitStop · Offset · Knockback | 폐기 | +| | `[공격]` 태그 5장 "기본 공격 강화" 효과 | 폐기 | +| **적 스탯** | HP 40/60/120/보스 400 · 이동 2.0~3.5 · ATK 1(즉사) | 유지 | +| **경험치·레벨업** | XP 곡선 80+Lv×20 · 획득량 (적·엘리트·보스) · 어뷰징 가드 | 유지 | +| | 레벨업 3픽 + Unscaled Time 시간 정지 | 유지 | +| | 사망 시 카드 전손 (코어 룰 7) | 유지 | +| | 4티어 확률 테이블 | 재설계 (액티브/패시브 2축 드로우) | +| | 런 내 10장 하드캡 | 재설계 (액티브·패시브 슬롯 분리) | +| **카드 풀** | 32장 단일 풀 | 재분배 (액티브 15~20 + 패시브 ≤25 + 각성 15~20) | +| | 8 카테고리 (공격·부적·주술·소환·방호·속도·회복·특수) | 재분류 (액티브/패시브) | +| | 한자 네이밍·조선 퇴마 톤 | 유지 | +| | 태그 체계 2축 (속성 오행·유형) | 부분 유지 (각성 조건 매핑 PD 검토) | +| | 동일 카드 스택 업그레이드 (Lv.1→2→3) | 부분 유지 (VS 진화 정합성 PD 검토) | +| **카드 구조** | 3티어 구조 · 티어 수량 개념 | 폐기 | +| **UX 조작** | 좌 가상 스틱 · 우 점프 버튼 · Safe Area | 유지 | +| | 우측 공격 버튼 | 폐기 | +| | 피격 피드백 3종 (시각·청각·진동) · 버튼 입력 피드백 | 유지 | +| **HUD** | 라이프 · 레벨·경험치 게이지 · 보스전 HP 바 | 유지 | +| | 마을 UI · 사망/복귀 전환 UI | 유지 | +| | 카드 슬롯 UI | 재설계 (액티브·패시브 분리) | +| **프레임워크** | BT.Framework Tier 2 신규 3종 (SafeAreaBorder·UITouchHandler·BackKeyDispatcher) | 유지 | +| **신규 설계** | 액티브 자동 발동 주기 시스템 | 신규 | +| | DPS 공식 (자동 발동 기반) | 신규 | +| | 각성(진화) 메커니즘 + 발생 피드백 UI | 신규 | +| | 기본 시작 무기 1종 (퇴마사 고유) | 신규 | +| | 보물상자 획득 체계 | 신규 | + +### 판정 집계 +- **유지**: 14종 (핵심 전투·이동·적·경험치·UX·HUD·프레임워크 대부분) +- **부분 유지**: 2종 (태그 체계 · 스택 업그레이드 — PD 검토 대기) +- **재설계**: 5종 (드로우 확률 · 슬롯 상한 · 카드 풀 · 카테고리 · 카드 슬롯 UI) +- **폐기**: 7종 (공격 관련 전체 + 3티어 구조 + 공격 버튼) +- **신규**: 5종 (액티브 주기·DPS 공식·각성 메커니즘·시작 무기·보물상자) + +### 개정 착수 가능 (즉시) +PD 확정 방향(VS 순수형 + 3분류 + VS 각성 조건 + 규모 확정)만으로 선행 착수 가능: +1) `04_전투_기본_스펙` §2 공격 액션·§5 전체 폐기 재작성 +2) `ux/01_모바일_터치_UX` 공격 버튼 레이아웃 제거 +3) `balance/01_전투_수치` §3 공격 수치 삭제 + §6 대미지 공식 재설계 플레이스홀더 +4) `system/01_카드_시스템` 3티어 폐기 + 액티브/패시브/각성 3분류 골격 재작성 (규모 확정 반영) +5) `content/01_카드_풀` 32장 → 3분류 재분배 (액티브 15~20 + 패시브 ≤25 + 각성 15~20) +6) `balance/02_레벨업_곡선` 드로우 확률 테이블 재설계 +7) `ux/02_HUD_설계` 카드 슬롯 UI 재설계 (액티브·패시브 분리) +8) Unity: `PlayerAttack.cs` 트리거 주기 타이머 전환 + `InputActions` Attack 바인딩 제거 + +### PD 결정 대기 잔존 (1건) +- **부분 유지 2항목 처리 방향**: 동일 카드 스택 업그레이드와 VS 진화(각성) 개념의 정합성 + 태그 체계 2축(속성 오행·유형)의 각성 조건 매핑 활용 범위 + +### 공유 상태 +내부 공유 (C21-①). 개정 착수 8건 commit 대기. + +--- + +## [BT7-Plan 적 ATK 1 이상 확정] PD 직접 지시 — HP 다변 체계 재설계 + +**태그**: #BT7-Plan #적ATK재설계 #PlayerHP성장 #라이프1재해석 #전체분류갱신 + +### PD 지시 수령 (2026-04-24) + +> PD 원문: "적 공격은 1 이상으로 구성해야 해 (왜냐하면 플레이어가 스킬 카드 조합이나 성장 요소로 HP를 늘릴 수단이 존재하기 때문이야.)" + +### 설계 영향 + +- **기존 balance/01 §5 ATK=1(즉사) 설계 폐기**: "라이프 1 구조에서 모든 피격은 즉사" 전제 소멸 +- **플레이어 HP 성장 가능 구조**: 카드(패시브 `[방호]`·`[회복]`)·특성(영속 성장)으로 최대 HP 증가 +- **라이프 1 코어 룰 재해석**: "시작 HP 1" 기본값으로 해석. 카드·성장으로 증가 가능 (기존 `system/01 §5 기각안 1` "HP 막대 도입 기각" 번복) +- **대미지 공식 재설계 필수**: 기존 `PlayerResult = DEAD (라이프 1)` → 신 `PlayerHP -= EnemyATK` (i-frame 내 피격 무효 유지) +- **적 ATK 테이블 신설**: 일반 적/엘리트/보스별 ATK 수치 차등 (balance-designer 설계) + +### 갱신된 분류 표 (PD "나머지 모두 반영" 지시 수용) + +| 영역 | 항목 | 판정 | +|---|---|---| +| **전투 기본** | 라이프 1 (시작 HP 기본값, 성장으로 증가 가능) | 부분 유지 (재해석) | +| | 피격 = 즉사 조건 (라이프 1 전제) | **재설계** (HP 다변·데미지 누적) | +| | i-frame 0.6초 · PlatformerMicrogame 계승 · 2D 횡스크롤 | 유지 | +| **이동·점프** | MoveSpeed 6.0 · JumpHeight 3.5 · Gravity 3.5 · AirControl 0.7 | 유지 | +| | Coyote 0.12s · Jump Buffer 0.15s · Edge Push 0.3m | 유지 | +| **공격 (수동)** | 근거리 공격 1종 · 공격 수치 전체 · 공격 버튼 | 폐기 | +| | `[공격]` 태그 5장 "기본 공격 강화" 효과 | 폐기 | +| **적 스탯** | HP 40/60/120/보스 400 · 이동 2.0~3.5 | 유지 | +| | ATK 1(즉사) | **재설계** (1 이상 다양한 수치) | +| **대미지 공식** | `PlayerResult = DEAD (라이프 1)` | **재설계** (`PlayerHP -= EnemyATK`, i-frame 내 무효) | +| | `FinalDamage = BaseDamage × CardMultiplier × CritMultiplier` | 재설계 (자동 발동 무기 기반) | +| **경험치·레벨업** | XP 곡선 80+Lv×20 · 획득량 · 어뷰징 가드 (일부) | 유지 | +| | "체력 회복 스팸" 가드 (라이프 1 전제) | 재설계 (회복 카드 도입 전제) | +| | 레벨업 3픽 + Unscaled Time 시간 정지 | 유지 | +| | 사망 시 카드 전손 (코어 룰 7) | 유지 | +| | 4티어 확률 테이블 | 재설계 (액티브/패시브 2축) | +| | 런 내 10장 하드캡 | 재설계 (슬롯 분리) | +| **카드 풀** | 32장 단일 풀 | 재분배 (액티브 15~20 + 패시브 ≤25 + 각성 15~20) | +| | 8 카테고리 (공격·부적·주술·소환·방호·속도·회복·특수) | 재분류 (액티브/패시브) | +| | 한자 네이밍 · 조선 퇴마 톤 | 유지 | +| | 태그 체계 2축 (속성 오행 · 유형) | 부분 유지 (PD 검토) | +| | 동일 카드 스택 업그레이드 (Lv.1→2→3) | 부분 유지 (PD 검토) | +| | `[방호]`·`[회복]` 태그 효과 | **부분 유지 (실효 수치 재설계 — HP 증가·실드 회복 실제 반영)** | +| **카드 구조** | 3티어 구조 · 티어 수량 개념 | 폐기 | +| **UX 조작** | 좌 가상 스틱 · 우 점프 버튼 · Safe Area | 유지 | +| | 우측 공격 버튼 | 폐기 | +| | 피격 피드백 3종 (시각·청각·진동) | 유지 | +| **HUD** | 라이프 UI (하트 1개) | **재설계** (현 HP / 최대 HP 시각화) | +| | 레벨·경험치 게이지 · 보스전 HP 바 | 유지 | +| | 마을 UI · 사망/복귀 전환 UI | 유지 | +| | 카드 슬롯 UI | 재설계 (액티브·패시브 분리) | +| **프레임워크** | BT.Framework Tier 2 신규 3종 (SafeAreaBorder·UITouchHandler·BackKeyDispatcher) | 유지 | +| **신규 설계** | 액티브 자동 발동 주기 시스템 | 신규 | +| | DPS 공식 (자동 발동 기반) | 신규 | +| | 각성(진화) 메커니즘 + 발생 피드백 UI | 신규 | +| | 기본 시작 무기 1종 (퇴마사 고유) | 신규 | +| | 보물상자 획득 체계 | 신규 | +| | **플레이어 HP 증가 메커니즘** (패시브 카드 실효·특성 영속 성장) | **신규** | + +### 갱신된 판정 집계 (표 행 기준, 총 38행) +- **유지 13행**: 전투 템플릿·이동·적 HP·경험치 곡선·3픽·카드 전손·한자 네이밍·조작 기본·HUD 기본(레벨/마을/보스)·BT.Framework +- **부분 유지 4행**: 라이프 1 재해석 · `[방호]`/`[회복]` 실효 재설계 · 태그 체계 2축 · 스택 업그레이드 (**후 2건 PD 검토 대기**) +- **재설계 11행**: 피격 즉사 조건 · 적 ATK · 대미지 공식 2종(`PlayerResult` · `FinalDamage`) · 체력 회복 가드 · 4티어 확률 · 10장 하드캡 · 32장 재분배 · 8 카테고리 재분류 · HUD 라이프 UI · 카드 슬롯 UI +- **폐기 4행**: 수동 공격 전체(근거리 1종·수치·버튼 묶음) · `[공격]` 태그 5장 효과 · 3티어 구조 · 우측 공격 버튼 +- **신규 6행**: 액티브 자동 주기 · DPS 공식 · 각성 메커니즘 · 기본 시작 무기 · 보물상자 획득 체계 · **HP 증가 메커니즘** + +> **분류 경계 주석**: "신규: HP 증가 메커니즘"은 시스템 차원의 HP 변동 로직 자체이며, "부분 유지: `[방호]`/`[회복]` 태그"는 그 메커니즘의 **개별 카드 구현 수단**. 상호 참조 관계로 중복 아님. 개정 시 구조 분리 서술 필요. + +### 갱신된 즉시 착수 가능 (PD 추가 결정 불요) + +1) `04_전투` §2 공격 액션·§5 전체 폐기 재작성 + §3 라이프·피격 판정 재작성 (HP 다변 반영) +2) `ux/01` 공격 버튼 레이아웃 제거 +3) `balance/01` §3 공격 수치 삭제 + §5 적 ATK 재설계 (1 이상 수치 테이블) + §6 대미지 공식 재설계 (`PlayerHP -= EnemyATK`) +4) `system/01` 3티어 폐기 · 액티브/패시브/각성 3분류 골격 재작성 (규모 반영 + HP 증가 메커니즘 반영) + §5 기각안 1 "HP 막대 도입 기각" 번복 기록 +5) `content/01` 32장 → 3분류 재분배 (액티브 15~20 · 패시브 ≤25 · 각성 15~20) + `[방호]`·`[회복]` 태그 실효 수치 설계 +6) `balance/02` 드로우 확률 테이블 재설계 + 어뷰징 가드 §6 "체력 회복 스팸" 재작성 (회복 카드 도입 전제) +7) `ux/02` 카드 슬롯 UI 재설계 (액티브·패시브 분리) + 라이프 UI 재설계 (현 HP / 최대 HP 시각화) +8) Unity: `PlayerAttack.cs` 주기 타이머 전환 + `InputActions` Attack 바인딩 제거 + `Health.cs` maxHP 가변 구조 확장 + +### PD 결정 대기 잔존 (1건 — 2하위 항목) +1) 동일 카드 스택 업그레이드(Lv.1→2→3)와 VS 진화(각성) 개념의 정합성 +2) 태그 체계 2축(속성 오행 · 유형)의 각성 조건 매핑 활용 범위 + +### 공유 상태 +내부 공유 (C21-①). 개정 착수 8건 commit 대기. + +--- + +## [BT7-Plan 라이프 시스템 정정] PD 직접 지시 — 라이프 4 + 젤다 하트 분할 (하트 1개 = 4 HP) + +**태그**: #BT7-Plan #라이프시스템정정 #젤다하트분할 #적ATK점진강화 #하트1개=4HP확정 + +### PD 지시 수령 (2026-04-24) + +> PD 원문 1: "기본 라이프는 4 / 적의 최소 공격력은 1부터 점진적으로 강화 하는 형태로 변경해." +> PD 원문 2: "기본 라이프의 표현은 ♥로 표현할거야. 적에게 피해 1을 받을 경우 1/4조각이 감소하고 2의 피해를 입으면 하트가 반조각 감소하는 젤다의 전설 형태의 라이프 시스템을 의미해." +> PD 원문 3 (추가 확정): "완전한 형태의 하트 1개는 4의 HP를 의미해" + +### 확정 사양 + +**라이프 시스템** (Zelda 방식) +- 하트 ♥ 1개 = 4 HP (4 쿼터 분할) +- **기본 시작 = 라이프 4 = 하트 1개** (4/4 상태) +- 피해 1 = 1 쿼터 감소 (3/4) +- 피해 2 = 2 쿼터 = 반조각 감소 (2/4) +- 피해 3 = 3 쿼터 감소 (1/4) +- 피해 4 = 하트 1개 완전 소멸 +- **카드·성장으로 최대 하트 수 증가 가능** (예: 하트 2개 = 8 HP, 하트 3개 = 12 HP) + +**적 공격력** +- 최소 ATK 1 (하트 1/4 조각 감소 = 피해 1) +- 스테이지·등급 진행에 따라 점진 강화 (balance-designer 수치 테이블) +- 참고 예시(추정): 일반 약 ATK 1 / 일반 중 ATK 2 / 엘리트 ATK 3 / 보스 ATK 4 또는 그 이상 + +### 설계 영향 (기존 분류 갱신) + +**폐기 (추가)** +- `04_전투 §3-1` "기본 라이프 1. HP 최대값 = 1" → `기본 라이프 4. 하트 1개 = 4 HP` 전면 재작성 +- `04_전투 §8 기각안 1` "HP 막대 도입 기각" → 번복 기록 (하트 UI 도입) +- 코어 룰 7 "라이프 1" 표기 → `01_게임_컨셉`·`02_코어_루프` 전면 개정 필요 + +**재설계 (갱신)** +- `balance/01 §5` 적 ATK 재설계 — "1 이상 다양" 추상에서 **"1부터 점진 강화" 구체화**. 일반 약/중·엘리트·보스별 수치 차등 + 스테이지 진행 승수 +- `balance/01 §6` 대미지 공식 `PlayerHP -= EnemyATK` — 단위는 **쿼터(1/4 HP)** +- `balance/01 §4` i-frame 0.6초 근거 재검토 — 연속 히트 방지 기준이 다인 히트 구조로 변경됨 (하트 1개를 4회 피격까지 버틸 수 있는 여유 생김, 반대로 강한 공격 1회도 방지) +- `system/01` `[방호]`·`[회복]` 태그 효과 실효 단위 — 쿼터 단위 회복/실드 또는 하트 단위 +- `ux/02 §2-2` HUD 라이프 UI — 하트 ♥ + 쿼터 분할 시각화 (Zelda BotW 방식) +- `balance/02 §6` "체력 회복 스팸" 어뷰징 가드 — 회복 단위(쿼터 vs 하트) 결정 후 쿨다운·스택 제한 재설계 + +**신규 설계 (갱신)** +- 플레이어 HP 증가 메커니즘 → **하트 수 증가 메커니즘**으로 구체화. 패시브 `[방호]`·`[회복]` 카드 or 특성으로 최대 하트 수 +1씩 증가 (상한 제약 필요 — balance-designer) +- 하트 UI 스프라이트 시각화 (풀 하트·3/4·반·1/4·빈 하트 5단계 또는 Zelda Original 방식 풀·반·빈 3단계) — UX 세부 결정 사항 + +### 직전 PD 대기 2건 중 1건 해소 + +- ✅ **"기본 라이프 4" 단위 해석 확인** — PD 직접 명시 "하트 1개 = 4 HP" → 기본 시작 하트 1개로 확정 +- ⏳ 부분 유지 2하위 항목 여전히 대기 + +### 갱신된 분류 집계 (Delta만) + +기존 집계(유지 13·부분 유지 4·재설계 11·폐기 4·신규 6 = 38행) 대비: +- **재설계 +1**: 코어 룰 7 "라이프 1" 표기 재작성 (`01_게임_컨셉`·`02_코어_루프`) → 재설계 12 +- **폐기 +1**: `04_전투 §8 기각안 1` "HP 막대 도입 기각" 조항 자체 → 폐기 5 +- **신규 세부 구체화 (수량 불변)**: "HP 증가 메커니즘" → "하트 수 증가 메커니즘"으로 명칭 정교화 + +### 갱신된 즉시 착수 가능 (PD 추가 결정 불요) + +1) `04_전투` §2 공격 폐기 + **§3 라이프 전면 재작성 (하트 1개 = 4 HP)** + §8 기각안 1 번복 기록 +2) `ux/01` 공격 버튼 제거 +3) `balance/01` §3 공격 수치 삭제 + **§5 적 ATK 점진 강화 테이블 재작성** + **§6 대미지 공식 쿼터 단위 재작성** + §4 i-frame 근거 재검토 +4) `system/01` 3티어 폐기 + 3분류 골격 + HP/하트 증가 메커니즘 + §5 기각안 1 번복 +5) `content/01` 32장 → 3분류 재분배 + `[방호]`/`[회복]` 쿼터/하트 단위 실효 설계 +6) `balance/02` 드로우 확률 재설계 + §6 회복 스팸 가드 재작성 +7) `ux/02` 카드 슬롯 UI (분리) + **라이프 UI 하트 분할 시각화** +8) Unity: `PlayerAttack.cs` 주기 타이머 + `InputActions` Attack 제거 + **`Health.cs` maxHP 가변 + 쿼터 단위 구조** +9) **`01_게임_컨셉`·`02_코어_루프`** 코어 룰 7 "라이프 1" 표기 전면 갱신 (신규 추가) + +### PD 결정 대기 잔존 (변동 — 1건, 1건 해소로 감소) +부분 유지 2항목 처리 방향: +1) 동일 카드 스택 업그레이드(Lv.1→2→3)와 VS 진화(각성) 개념의 정합성 +2) 태그 체계 2축(속성 오행 · 유형)의 각성 조건 매핑 활용 범위 + +### 공유 상태 +내부 공유 (C21-①). 개정 착수 9건 commit 대기. + +--- + +## [BT7-Plan 스택 업그레이드·각성·태그 체계 확정] PD 대기 2건 모두 해소 — **방향 완전 확정** + +**태그**: #BT7-Plan #스택5레벨 #각성조건VS원작재확인 #태그일반RPG용어 #PD대기0건 #방향완전확정 + +### PD 지시 수령 (2026-04-24) + +> PD 원문 1: "동일 카드 스텍 업그레이드는 5레벨까지 가능하고, 각성에 필요한 패시브 1개 이상 보유 시 각성 카드가 발동되는 형태로(원작과 동일)하게 구성해." +> PD 원문 2: "태그 체계는 무슨 의미인지 모르겠고 오행이나 유형은 나중에 일괄 변경할테니 우선 일반적인 RPG에 익숙한 용어를 사용해." + +### 확정 사양 (PD 대기 2건 해소) + +#### 1. 동일 카드 스택 업그레이드 Lv.5까지 + 각성 발동 조건 VS 원작 동일 +- 기존 `system/01 §3 규칙 4` "Lv.1→2→3 (3단계)" → **Lv.1~Lv.5 (5단계 확장)** +- **각성 발동 조건** (VS 원작 동일 재확인): + - 액티브 카드 Lv.5 도달 (스택 업그레이드 최대) + - 각성에 필요한 **특정 패시브 1개 이상** 보유 + - **보물상자** 획득 (이전 확정 사항 유지) + - 3요소 충족 시 → **각성 카드 등장·발동** +- 각성은 별도 카드 풀(15~20종)에 존재. 조건 충족 시 드로우 풀 합류 or 보물상자 드로우로 획득. + +#### 2. 태그 체계 일반 RPG 용어 사용 (임시) +- 기존 세계관 특화 용어(오행 불/물/목/금/토 · 결계/부적/주술/소환 등) → **일반 RPG 익숙한 용어로 임시 재작성** +- **구체 일반 RPG 용어는 `content/01` 개정 시 기획팀장 제안 → PD 검토** +- PD 향후 일괄 세계관 특화 재매핑 예정 (narrative 보완 시점) + +### 태그 개념 간단 설명 (PD 질의 답변용 보존 기록) + +> PD 지적: "태그 체계는 무슨 의미인지 모르겠고" + +**태그**란 카드마다 붙이는 **분류 라벨**입니다. 예를 들어 한 카드에 `[공격]`·`[화염]` 두 태그를 붙이면, 동일 `[화염]` 태그 카드를 여러 장 모았을 때 **시너지 효과가 추가 발동**되는 구조. VS 원작의 무기-패시브 매칭과 별개로, **빌드 방향 표시·시너지 조합 탐색의 기반** 역할. + +활용 범위 (기존 설계 유지): +- **시너지 발동 조건**: 동일 태그 K장 이상 보유 시 추가 효과 +- **카드 분류 라벨**: 빌드 경향 시각화 (내 덱이 공격 중심인지 방어 중심인지 한눈에) +- **각성 조건과는 별도**: 각성은 "특정 패시브 1개 이상 + 액티브 Lv.5 + 보물상자"로 트리거되며, 태그 매칭이 각성 조건은 아님 (VS 원작 방식) + +### 설계 영향 갱신 + +**재설계 (구체화)** +- `system/01 §3 규칙 4` 스택 업그레이드: Lv.3 → **Lv.5** +- `system/01` 각성 발동 조건 명확화: 액티브 Lv.5 + 특정 패시브 1개 이상 + 보물상자 +- `content/01 §2-2` 태그 체계: 오행·결계/부적/주술 등 → **일반 RPG 용어로 임시 재작성** (구체 용어는 기획팀장 제안 → PD 검토) + +**부분 유지 2하위 항목 모두 해소** +- ✅ 동일 카드 스택 업그레이드 VS 진화 정합성 → Lv.5 스택 + 각성 조건 VS 원작 동일로 해소 +- ✅ 태그 체계 2축 활용 범위 → 시너지 발동·카드 분류 용도 유지, 용어만 일반 RPG 임시 재작성 + +### 갱신된 분류 집계 (Delta) + +기존 집계(유지 13 / 부분 유지 4 / 재설계 12 / 폐기 5 / 신규 6 = 40행) 대비: +- **부분 유지 -2 → 2**: "태그 체계 2축" · "동일 카드 스택 업그레이드" 2항목 해소 +- **재설계 +2 → 14**: 동일 2항목이 **재설계**로 이동 (Lv.5 확장 · 태그 용어 일반 RPG 재작성) +- 합계 40행 유지 + +### 갱신된 즉시 착수 가능 (**PD 추가 결정 0건** — 모두 PM·기획팀·개발팀 재량 집행) + +1) `04_전투` §2 공격 폐기 + §3 라이프 전면 재작성 (하트 1개 = 4 HP) + §8 기각안 1 번복 +2) `ux/01` 공격 버튼 제거 +3) `balance/01` §3 공격 수치 삭제 + §5 적 ATK 점진 강화 테이블 + §6 대미지 공식 쿼터 단위 +4) `system/01` 3티어 폐기 + 3분류 골격 + **스택 업그레이드 Lv.5** + **각성 조건 VS 원작 명확화** + HP/하트 증가 메커니즘 + §5 기각안 1 번복 +5) `content/01` 32장 → 3분류 재분배 + `[방호]`/`[회복]` 실효 설계 + **태그 체계 일반 RPG 용어 재작성** (기획팀장 초안 → PD 검토) +6) `balance/02` 드로우 확률 재설계 + §6 회복 스팸 가드 재작성 +7) `ux/02` 카드 슬롯 UI 재설계 + 라이프 UI 하트 분할 시각화 +8) Unity: `PlayerAttack.cs` 주기 타이머 + `InputActions` Attack 제거 + `Health.cs` maxHP 가변 + 쿼터 단위 +9) `01_게임_컨셉`·`02_코어_루프` 코어 룰 7 "라이프 1" → "라이프 4 + 하트 분할" 표기 갱신 + +### PD 결정 대기 잔존 **0건 — BT7-Plan 방향 완전 확정** + +모든 PD 확정 사항 정리: +- VS 순수형 (공격 버튼 제거, 이동·점프만) +- 액티브 + 패시브 = 각성 3분류 +- 규모: 액티브 15~20 / 패시브 ≤25 / 각성 15~20 +- 기본 라이프 4 (하트 1개 = 4 HP, 젤다 분할) +- 적 ATK 1부터 점진 강화 +- 스택 업그레이드 Lv.5 +- 각성 조건: 액티브 Lv.5 + 특정 패시브 1개 이상 + 보물상자 +- 태그 체계: 일반 RPG 용어로 임시 (나중에 PD 일괄 재매핑) +- narrative 현행 유지 (카드명 한자·조선 퇴마 톤) + +### 공유 상태 +내부 공유 (C21-①). 개정 집행 착수 9건 commit 대기 — **BT7-Plan 재설계 본격 착수 가능 상태**. + +--- + +## [BT7-Dev Phase 1 개발 집행 착수] VS 순수형 자동 발동 + 하트 분할 Unity 재구조 + +**태그**: #BT7-Dev #Phase1 #VS순수형 #자동발동Ticker #하트분할시스템 #개발팀장집행 + +**트리거**: PD 2026-04-24 BT7-Plan 방향 완전 확정 후 PM이 개발팀장 Agent에 Phase 1(개발 영향분) 집행 위임 + +### 배경 + +BT7-Plan에서 확정된 11건 PD 지시 중 **개발 영향 항목**을 Unity 코드·설정·EditMode 테스트에 반영. + +### 개발 영향 PD 확정 방향 + +1. VS 순수형 — 공격 버튼 제거, 이동·점프만 +2. 플레이어 공격 = 자동 발동 (주기 타이머) +3. 기본 라이프 4 (하트 1개 = 4 HP, 젤다 분할) · 카드·성장으로 최대 하트 수 증가 가능 +4. 적 ATK 1부터 점진 강화 (`PlayerHP -= EnemyATK` 쿼터 단위) +5. 동일 카드 스택 업그레이드 Lv.5까지 +6. 각성 조건 VS 원작 동일 (액티브 Lv.5 + 특정 패시브 1개 + 보물상자) + +### 집행 범위 (Phase 1) + +**Unity 코드·설정·테스트 뼈대**만. 기획 balance/01 v0.2·system/01·content/01·ux/02 미확정 항목은 **TODO 주석 + 후속 Phase 분리**. + +### 편집 산출물 (7파일) + +**Unity 외부 레포 `D:/NerdNavis/EerieVillage/`**: +1. `Assets/Scripts/Gameplay/PlayerAttack.cs` — Execute 로직 유지 + 주석 재작성 (수동 입력 → 자동 발동 전환 명시) +2. `Assets/Scripts/Gameplay/PlayerAttackTicker.cs` **(신설)** + `.meta` — `[RequireComponent(PlayerController)]` 주기 타이머 컴포넌트. `attackInterval`(기본 0.5s) + `startupDelay`(기본 0.3s) + `ApplyIntervalMultiplier` 확장 API +3. `Assets/Settings/InputSystem_Actions.inputactions` — Player 맵 Attack 액션 정의·바인딩 2종(Mouse leftButton · Gamepad rightTrigger) **완전 제거** +4. `Assets/Scripts/Mechanics/Health.cs` — 전면 개정. `QuartersPerHeart=4` 상수 · `maxHearts` 필드(기본 1, Inspector) · `maxHP = maxHearts*4` Awake 재산정 · `Heal(int quarters)` · `IncreaseMaxHearts(int delta)` · `Decrement(int damage)` 오버로드 · `CurrentHP` 프로퍼티 (HUD용) · 기존 `Decrement()`·`Die()` 호환 유지 +5. `Assets/Scripts/Mechanics/PlayerController.cs` — `m_AttackAction`·`nextAttackTime`·`attackCooldown` 전수 제거. `public Vector2 Facing => facing` 노출. Update Attack 입력 블록 제거 +6. `Assets/Scripts/Mechanics/AttackHitbox.cs` — `for 루프 Decrement()` → `health.Decrement(damage)` 단일 호출 통합 + BT7-Plan TODO 주석 (i-frame 내 반복 Decrement 무효화 문제 대응) +7. `Assets/Tests/Editor/PlayerAttackTests.cs` — 10 tests → **13 tests**. 제거 1(`Enemy_Prefab_Health_MaxHP_Is_One` — 하트 분할로 가정 폐기) + 신규 4(`Health_Script_Defines_MaxHearts_And_IncreaseMaxHearts`·`Player_Prefab_MaxHP_Reflects_Heart_Quarters`·`PlayerAttackTicker_Script_Exists_With_AttackInterval`·`InputActions_Player_Map_Has_No_Attack_Action`) + +**BT 레포**: +8. `프로젝트/EerieVillage/개발/06_BT7-Plan_VS순수형_재구조.md` **(신설)** — YAML frontmatter + 9섹션 (배경·편집대상·백업·PD수동검증·리스크·기각안 5건·후속Phase·자가검증·변경이력) +9. `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` — BT7-Dev 활성 항목 추가 (진행중) + +### C6-1 백업 6종 + +`공유/개발팀_백업/EerieVillage/*.bak_20260424_1551.*`: +- `PlayerAttack.cs` · `Health.cs` · `PlayerController.cs` · `InputSystem_Actions.inputactions` · `PlayerAttackTests.cs` · `AttackHitbox.cs` + +**롤백 절차**: `.bak_20260424_1551` 제거 후 Unity 레포 덮어쓰기. + +### EditMode 테스트 갱신 결정 + +| 변경 | 수 | 이유 | +|---|---|---| +| 유지 | 8 | 기존 Player/Enemy/AttackHitbox prefab 컴포넌트 검증 (BT5-Dev 계승) | +| 제거 | 1 | `Enemy_Prefab_Health_MaxHP_Is_One` — 하트 분할 시스템으로 Enemy maxHP=1 가정 폐기 (Enemy도 쿼터 단위 HP) | +| 신규 | 4 | Health 신규 API·Ticker Script 존재·Attack 액션 제거·Player prefab 하트 직렬화 정합성 | +| **총계** | **13** | | + +### PD 수동 검증 요청 (2종) + +1. **Asset import + EditMode Test Runner 실행** — Unity Editor 재실행 후 Console 오류 없음 확인 + `Window > General > Test Runner` → EditMode → Run All → 13 green +2. **Player.prefab에 PlayerAttackTicker 컴포넌트 부착 + Play 검증** — Inspector Add Component "Player Attack Ticker" → Prefab 저장 → Play → 공격 자동 발동(0.3s 지연 후 0.5s 주기)·Enemy 피해·Player i-frame 확인 + +### 기각안 (5건 — C32 최소 3건 초과) + +1. "PlayerAttack.cs 내부에 타이머 직접 구현" 기각 — SRP 위반. Ticker 분리로 발화 방식 교체 유연성 확보 +2. "attackInterval을 PlayerController에 통합" 기각 — PlayerController 비대. 전투 시스템 분리 보전 +3. "Health.maxHP 제거하고 maxHearts만 유지" 기각 — Prefab 직렬화 호환성 파괴. maxHP 유지 + Awake 재산정 방식 채택 +4. "Decrement 단일 시그니처 통합" 기각 — 기존 호출자 회귀 리스크. 무인자 유지 + 오버로드 신규 추가 +5. "EnemyController에 attackDamage 필드 추가 + Player 피해 전달" 본 Phase 기각 — balance/01 v0.2 미확정. TODO 주석만, 후속 Phase 분리 + +### 규칙 준수 검증 + +- **C5 정직성**: 실제 Edit 결과만 보고 — `grep -c "m_AttackAction"` 0건 실측 확인 +- **C6-1 원본 보호**: 편집 대상 6파일 백업 `*.bak_20260424_1551.*` 6종 확보 +- **C11 개발 관점**: 자원 효율(Time.deltaTime 누적·Schedule 재사용)·구조 직관성(Ticker 분리 SRP)·범용성(ApplyIntervalMultiplier 확장 API) +- **C22**: PD 도입 용어 "액티브·패시브·각성·하트·쿼터·보물상자·Lv.5" 코드 주석·본 문서에 그대로 +- **C22-6 정신**: 신규 클래스·필드명은 **구현 세부 수준 기술 명명** (PlayerAttackTicker·maxHearts·QuartersPerHeart 등). PD 방향·원칙 수준 결정에 영향 없음 — C36 적용 범위 내 자가 검증 +- **C23 허위 보고 금지**: 7파일 Edit 실제 수행 + grep으로 결과 실측 입증 +- **C30 git 최신**: Unity 레포 `git fetch origin` + `main` 브랜치 최신 확인 (기존 modified 7건은 Unity Editor 자동 생성 setting, 본 작업과 무관) +- **C32 기각안**: 5건 기록 (본 엔트리) +- **C34-11 경로**: Unity 외부 레포 절대 경로 허용 (`D:/NerdNavis/EerieVillage/Assets/...`) · BT 산출물 상대 경로 + +### 공유 상태 + +내부 공유 (C21-①). PM 수행 대기: pm-auditor 감사 → BT worktree commit → Unity 외부 레포는 PD Editor 실행 시 GitAutoSync 자동 push → Play 검증 결과 수령. + +### 관련 규칙 + +- **C1** 지시=승인 (PD BT7-Plan 방향 완전 확정 후 PM 위임 권한 내) +- **C6-1** 원본 보호 (6파일 백업) +- **C11** 개발 관점 원칙 (Ticker SRP 분리) +- **C22** 용어·식별자 일관 사용 +- **C23** 허위 보고 금지 +- **C32** 대화로그 기록 의무 (본 엔트리) +- **C36** PM 자율 판단 범위 상한 (구현 세부 수준 — 방향·원칙 미변경) +- **P13-1** 코드 변경 (공용 모듈 AttackHitbox·Health 인터페이스 영향 — 기획·QA 공유) +- **P14** QA 게이트 (13 EditMode 테스트로 회귀 검증) +- **P30** 재미 우선 원칙 (기획팀 검토 대상 — 자동 발동 주기 튜닝) + +--- + +## [BT7-Plan 기획 9파일 v0.2 개정 집행 완료] 기획팀장 Agent 산출 + +**태그**: #BT7-Plan #기획개정완료 #기획팀장집행 #기각안번복7건 #신규기각안20건 #태그임시용어 + +**트리거**: PD 2026-04-24 "집행 착수해" 지시 + BT7-Plan 방향 완전 확정 (11건) 후 PM이 기획팀장 Agent 병렬 위임 + +### 편집 산출물 (9파일 v0.2) + +1. `01_게임_컨셉.md` — 재미 축 2를 "손맛"에서 "VS 순수형 자동 발동 감상"으로 재정의. 라이프 1 즉사 → 하트 분할 + 성장 2중 축 +2. `02_코어_루프.md` — 보물상자 획득을 각성 발동 트리거로 추가. 하트 수 증가 런 내 한정 +3. `04_전투_기본_스펙.md` — 기본 액션 2종(이동·점프만) · 라이프 4쿼터 + 젤다 5단계 분할 · 공격은 액티브 자동 발동 · §8 기각안 1 번복 기록 +4. `system/01_카드_시스템.md` — 3티어 폐기 · 액티브/패시브/각성 3분류 · Lv.5 스택 · VS 원작 각성 조건 (Lv.5 + 필요 패시브 + 보물상자) · §5 기각안 1·2 번복 기록 +5. `content/01_카드_풀.md` — 32장 → 50~65장 (A01~A18 액티브 · P01~P25 패시브 · AW01~AW18 각성) · 일반 RPG 태그 5속성+6유형 임시 · 각 각성마다 "필요 액티브 + 필요 패시브" 쌍 명시 · 한자 네이밍 현행 유지 +6. `balance/01_전투_수치.md` — 수동 공격 수치 전면 삭제 · 자동 발동 액티브 기본 수치(BaseCooldown 1.5s · BaseDamage 10) · 적 ATK 1~4 점진 강화 · i-frame 0.6s 하트 분할 하 유효 재검증 +7. `balance/02_레벨업_곡선.md` — 4티어 레어리티 폐기 · 액티브·패시브 2축 드로우 비율 (초반 70/30 → 후반 20/80) · 슬롯 6/6 분리 · 보물상자 체계 신설 · 회복 스팸 가드 재작성 +8. `ux/01_모바일_터치_UX.md` — 공격 버튼 제거 · 점프 버튼 우측 단독 대형 · Attack 액션 제거 · 피해량별 진동 차등 (40/80/120/160ms) +9. `ux/02_HUD_설계.md` — 하트 UI 5단계 분할 스프라이트 · 액티브/패시브 슬롯 분리(6/6) · 각성 발동 풀스크린 연출 3초 + 복수 조건 선택 UI · 각성 대기 황금 테두리 + ★ 표시 + +### 기각안 번복 기록 7건 (원 기각안 유지 + "번복" 주석, C14-5 히스토리 보존) + +- `04_전투 §8 기각안 1` HP 막대 도입 +- `system/01 §8 기각안 1·2` 3티어 명칭 · HP 막대 +- `01_게임_컨셉 §7 기각안 1` 라이프 1 고수 +- `content/01 §5 기각안 2` 30~35장 MVP +- `balance/02 §8 기각안 9` 10장 하드캡 +- `ux/01 §7 기각안 4` 공격 버튼 복수 + +### 신규 기각안 총 20건 +각 파일 §기각안 섹션 최소 3건 기준 충족. 파일별 2~3건씩 분포. + +### 태그 일반 RPG 용어 후보 (PD 후속 검토 대기) +- **속성 5종**: `[물리]` `[화염]` `[냉기]` `[번개]` `[암흑]` +- **유형 6종**: `[근접]` `[원거리]` `[범위]` `[지속]` `[회복]` `[방어]` + +narrative-designer가 PD 검토 후 세계관 특화(조선 퇴마·한자) 일괄 재매핑 예정. + +### narrative 완전 보존 +`narrative/01·02·03_*.md` 3파일 + 카드 한자 네이밍(진언부·화염부·봉황격·학익진 등) 현행 유지. PD 특별 주의 완전 준수. + +### 각성 18종 모두 쌍 명시 완료 +AW01~AW18 각각 `필요_액티브` + `필요_패시브[]` 쌍 구체 기록 (`content/01 §3-3`). + +### 기본 시작 무기 결정 보류 +`content/01 §3-1` 말미에 "A01~A18 중 1종 기본 장착 or 별도 카드 설계" 명시. balance·content 협의 대기. + +### C22-6 정신 준수 자가 검증 +- 자의 용어 신설 없음 (RPG 통용 용어만) +- 단일 선택 강요 없음 (후보 5+6개 제시 + PD 검토 대기 명시) +- 한자 네이밍 미개입 +- `system/03_덱빌딩_방식_검토.md` 수정 대상 아님 (참조만) +- 상대 경로 사용 (C34-11) + +### 변경 이력 기록 +9개 파일 모두 §변경 이력 섹션에 `2026-04-24 v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영` 엔트리 추가 완료. + +### 공유 상태 +내부 공유 (C21-①). PM 수행 대기: pm-auditor 감사 → BT 레포 commit → push. + +### 관련 규칙 +- **C1** 지시=승인 (PD 집행 착수 지시) +- **C5** 정직성 · **C11** 개발 관점 · **C14-5** 본문 최신 · **C22** 용어 일관 · **C22-6** (선행 준수) · **C23** 허위 보고 금지 · **C25** 넘버링 · **C32** 기각안 필수 · **C34-11** 경로 · **P30** 재미 우선 + +--- + +## [BT7-Plan + BT7-Dev 전체 집행 종합] PM 병렬 위임 완결 + +**태그**: #BT7-Plan완결 #BT7-Dev완결 #병렬집행 #기획9+Unity6 #commit대기 + +**집행 구조**: +- 기획팀장 Agent — 기획 9파일 v0.2 (위 엔트리) +- 개발팀장 Agent — Unity 6파일 + PlayerAttackTicker 신설 + EditMode 10→13 + BT 보고서 (바로 위 엔트리) + +**총 변경 규모**: +- BT 레포 수정: 기획 9 + 개발팀 PD 지시 로그 + 기획팀 PD 지시 로그 = 11파일 +- BT 레포 신규: 대화로그 (본 파일) + 개발 보고 `06_*.md` + 기각 참조 `system/03_*.md` (기존) = 3파일 +- BT 백업: Unity 6파일 `bak_20260424_1551.*` +- Unity 외부 레포: 6파일 편집 + 1파일 신설 (`PlayerAttackTicker.cs + .meta`) = 7파일 + +**PD 수동 검증 대기 (집행 완료 후)**: +1. Unity Asset import + EditMode Test Runner (13 tests green) +2. Player.prefab에 `PlayerAttackTicker` 컴포넌트 부착 + Play 검증 (자동 공격 주기 발동·이동/점프·Enemy 피해·i-frame·HUD 후속) + +**후속 Phase 분리 대기**: +- 기획 balance/01 v0.2 수치 확정 후 `attackInterval`·적 ATK 테이블 튜닝 +- 기획 system/01·content/01 확정 후 카드 데이터 구조·프리팹 작업 +- HUD 하트 UI 스프라이트·각성 발동 풀스크린 구현 + +### 공유 상태 +내부 공유 (C21-①). PM 수행: pm-auditor 감사 → commit → push. + +--- + diff --git a/프로젝트/EerieVillage/개발/06_BT7-Plan_VS순수형_재구조.md b/프로젝트/EerieVillage/개발/06_BT7-Plan_VS순수형_재구조.md new file mode 100644 index 0000000..041b49a --- /dev/null +++ b/프로젝트/EerieVillage/개발/06_BT7-Plan_VS순수형_재구조.md @@ -0,0 +1,309 @@ +--- +type: 구현_보고서 +scope: BT7-Dev_Phase1 +author: 개발팀장 +date: 2026-04-24 +version: v1.0 +project: EerieVillage (기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist) +phase: BT7-Plan 개발 집행 Phase 1 — VS 순수형 자동 발동 + 하트 분할 시스템 +data_source: Unity 프로젝트 직접 Edit (D:/NerdNavis/EerieVillage) + BT 레포 문서 +status: 코드·InputActions·테스트 갱신 완료 (PD Unity Editor Play 검증 대기) +--- + +# 06. BT7-Plan VS 순수형 반영 재구조 (Phase 1 개발 집행) + +## 1. 배경 + +2026-04-24 PD 직접 지시 11건 중 **개발 영향 항목**을 Unity 코드·InputActions·EditMode 테스트에 반영. + +### 1.1 PD 확정 방향 (개발 연관) + +1. **VS 순수형 확정** — 공격 버튼 제거, 이동·점프만. 플레이어 공격은 자동 발동(주기 타이머) +2. **기본 라이프 4** — 하트 1개 = 4 HP (젤다 분할). 카드·성장으로 최대 하트 수 증가 가능 +3. **적 ATK 1부터 점진 강화** — `PlayerHP -= EnemyATK` 쿼터 단위 +4. **동일 카드 스택 업그레이드 Lv.5까지** (Lv.3에서 확장) +5. **각성 조건 VS 원작 동일** — 액티브 Lv.5 + 특정 패시브 1개 이상 + 보물상자 + +### 1.2 적용 범위 한정 + +- 본 Phase 1은 **Unity 코드·설정 뼈대 이행**이 목적. `attackInterval`·`maxHearts`·`적 ATK 테이블` 등 구체 수치는 기획 balance/01 v0.2 확정 후 튠 +- 카드 시스템(3분류)·각성 메커니즘·보물상자·시작 무기·HUD 하트 분할 UI는 **후속 Phase** — 본 문서 범위 외 +- 적 ATK 수치 테이블은 **TODO 주석**만 반영 (balance/01 v0.2 미확정) + +## 2. 편집 대상 (Unity 외부 레포 `D:/NerdNavis/EerieVillage/`) + +### 2.1 `Assets/Scripts/Gameplay/PlayerAttack.cs` (개정) + +**변경 요지**: 이벤트 Execute 로직은 유지하되, **발화 트리거가 수동 입력에서 주기 타이머로 전환**됨을 주석에 명시. 본 파일은 이벤트 정의이므로 발화 로직(타이머)은 별도 컴포넌트로 분리 (SRP). + +**주요 변경 라인**: +- 파일 상단 XML 주석: "Fired when the player triggers an attack (mouse left click / touch attack button)" → "Player attack event — fires on a periodic timer (no manual input). BT7-Plan PD 지시 2026-04-24 — VS 순수형 자동 발동 전환 (공격 버튼 제거...)" +- `direction` 필드 주석: "PlayerController.facing 기반"으로 수정 (Ticker가 참조) +- Execute 본문 로직 변경 없음 — Animator Trigger, AudioClip, AttackHitbox.Fire 순차 호출 유지 + +### 2.2 `Assets/Scripts/Gameplay/PlayerAttackTicker.cs` (신설) + +**역할**: `[RequireComponent(typeof(PlayerController))]` Player GameObject에 부착되어 `attackInterval` 초마다 `Schedule` 이벤트를 발화. + +**필드 설계**: +- `attackInterval` (기본 0.5s, Inspector 노출) — balance/01 v0.2 튠 대상 +- `startupDelay` (기본 0.3s, Inspector 노출) — Spawn 애니메이션 여유 +- `attackTimer` (내부) — Time.deltaTime 감산 누적 + +**Update 로직**: +```csharp +if (!player.controlEnabled || attackInterval <= 0f) return; +attackTimer -= Time.deltaTime; +if (attackTimer <= 0f) +{ + attackTimer += attackInterval; // 오버플로 누적 방지 (= 0 리셋이 아닌 + 연산) + var ev = Schedule(); + ev.player = player; + ev.direction = player.Facing; +} +``` + +**확장 API**: `ApplyIntervalMultiplier(float multiplier)` — 카드·특성 효과가 주기 배수 조정할 때 사용. 최소 0.05s clamp. + +**설계 근거** (C11): +- PlayerAttack 이벤트(로직) vs Ticker(발화 트리거) 분리 — SRP + 범용성 +- 타이머 방식을 교체(예: 카드 수에 따라 동적 주기)하려면 Ticker만 교체. 이벤트는 그대로 재사용 + +**.meta guid**: `c7d8e9f0a1b20314253647586978a9b0` (충돌 없음 grep 검증) + +### 2.3 `Assets/Settings/InputSystem_Actions.inputactions` (개정) + +**변경 요지**: Player 맵의 Attack 액션 정의·바인딩 **완전 제거**. + +**제거된 섹션**: +1. `actions[].name == "Attack"` 객체 (id `c9d8e7f6-a5b4-4c3d-2e1f-0a9b8c7d6e5f`, Button type) +2. `bindings[].action == "Attack"` 바인딩 2종: + - `/leftButton` (Keyboard&Mouse 그룹) + - `/rightTrigger` (Gamepad 그룹) + +Move·Jump 액션 + UI 맵 전체 유지. + +### 2.4 `Assets/Scripts/Mechanics/Health.cs` (개정) + +**변경 요지**: 하트 분할 시스템(젤다 방식) 전면 도입. + +**신규·개정 API**: +- `const int QuartersPerHeart = 4` 정의 +- `maxHearts` 필드 (기본 1, Inspector 노출) — 카드·특성으로 외부 조작 +- `maxHP` 필드 기본값 `QuartersPerHeart` (= 4) — `maxHearts * 4`로 Awake에서 재산정 +- `Heal(int quarters)` 신규 메서드 — 쿼터 단위 회복, maxHP 상한 체크 +- `IncreaseMaxHearts(int delta)` 신규 메서드 — 최대 하트 수 증감 + currentHP 비례 증가 (음수 delta 허용 + clamp) +- `Decrement(int damage)` 오버로드 — 쿼터 단위 피해. 기존 `Decrement()`는 `Decrement(1)`로 위임 +- `CurrentHP` 공개 프로퍼티 — HUD가 하트 분할 UI 그리기 위해 읽음 +- i-frame 0.6s 유지 (연속 히트 방지는 하트 분할 후에도 필요) +- `Die()` 즉사 로직 단순화 — while 루프 제거, `currentHP = 0` 단일 설정 후 HealthIsZero 이벤트 + +**Awake 초기화**: +```csharp +if (maxHearts <= 0) maxHearts = 1; +int expected = maxHearts * QuartersPerHeart; +if (maxHP != expected) maxHP = expected; +currentHP = maxHP; +``` + +구식 프리팹 호환 처리(기존 maxHP=1 직렬화 값이 남아있어도 Awake에서 자동 보정). + +**파일 상단 주석**: +> BT7-Plan PD 지시 2026-04-24 — 하트 분할 시스템 (젤다 방식). 하트 1개 = 4 쿼터(HP). 카드(패시브)·성장으로 maxHearts를 증가시킬 수 있으며, 그에 따라 maxHP가 `maxHearts * QuartersPerHeart`로 자동 산정된다. 적 ATK는 쿼터 단위. + +### 2.5 `Assets/Scripts/Mechanics/PlayerController.cs` (개정) + +**변경 요지**: Attack 입력 관련 필드·로직 완전 제거. Facing 상태 public 노출. + +**제거 항목**: +- `private InputAction m_AttackAction` 필드 +- `float nextAttackTime` 필드 +- `public float attackCooldown` 필드 +- Awake에서 `m_AttackAction = InputSystem.actions.FindAction("Player/Attack")` · `m_AttackAction.Enable()` 호출 +- Update의 Attack 입력 처리 블록 (WasPressedThisFrame · Schedule) — 단 Ticker 참조 주석 유지 + +**신규·개정 항목**: +- `public Vector2 Facing => facing` 프로퍼티 (Ticker가 Schedule 시점에 참조) +- `attackAudio` 필드 주석: "자동 발동 시 PlayerAttack.Execute가 PlayOneShot으로 재생" 재작성 +- `attackHitbox` 필드 주석: "공격은 PlayerAttackTicker가 주기적으로 Schedule을 발화하여 실행" 추가 + +### 2.6 `Assets/Scripts/Mechanics/AttackHitbox.cs` (부수 개정) + +**변경 요지**: 하트 분할 시스템에 맞춰 적 Decrement 호출 통합. + +**개정 라인**: +```csharp +// 기존 +for (int i = 0; i < damage; i++) +{ + health.Decrement(); + if (!health.IsAlive) break; +} + +// 개정 +// BT7-Plan TODO (2026-04-24): 적 Health도 하트 분할 시스템 대상이지만 +// i-frame 구조 탓에 Decrement() 반복 호출은 첫 호출 후 무효화된다. +// Health.Decrement(int damage) 단일 호출로 쿼터 단위 다중 피해 전달. +health.Decrement(damage); +``` + +**이유**: i-frame 내 `Decrement()` 재호출은 무효화됨. 새 `Decrement(int damage)` 오버로드는 단일 호출에서 damage만큼 쿼터를 즉시 차감. + +### 2.7 `Assets/Tests/Editor/PlayerAttackTests.cs` (개정) + +**테스트 구조** (총 **13개**): + +| # | 테스트 | 상태 | 비고 | +|---|---|---|---| +| 1 | `Player_Prefab_Has_AttackHitbox_Component` | 유지 | BT5-Dev 계승 | +| 2 | `Player_Prefab_Has_Health_Component` | 유지 | | +| 3 | `Player_Prefab_Has_PlayerController_Component` | 유지 | | +| 4 | `AttackHitbox_Default_Damage_Is_One` | 유지 (주석 업데이트) | "balance/01 v0.2 튠 전 파일럿 값" | +| 5 | `AttackHitbox_Active_Duration_Is_Positive` | 유지 | | +| 6 | `Enemy_Prefab_Has_Health_Component` | 유지 | | +| 7 | `Enemy_Prefab_Has_EnemyController_Component` | 유지 | | +| 8 | `Enemy_Prefab_Health_MaxHP_Is_One` | **제거** | BT7-Plan 하트 분할로 maxHP=1 가정 폐기 | +| 9 | `Health_Script_Defines_MaxHearts_And_IncreaseMaxHearts` | **신규** | Health.maxHearts·maxHP·IncreaseMaxHearts·Heal 시그니처 검증 | +| 10 | `Player_Prefab_MaxHP_Reflects_Heart_Quarters` | **신규** | Player.prefab Health 직렬화 값 점검 (maxHP ∈ {maxHearts*4, 1}) | +| 11 | `PlayerAttackTicker_Script_Exists_With_AttackInterval` | **신규** | Ticker 타입·attackInterval float 필드 검증 | +| 12 | `InputActions_Player_Map_Has_No_Attack_Action` | **신규** | YAML grep으로 Player 맵 Attack 액션 부재 검증 | +| 13 | `Player_Prefab_SpriteRenderer_References_PlayerTestGirl` | 유지 | BT5-Dev 3단계 계승 | +| 14 | `Player_Controller_Has_Attack_Parameter_And_State` | 유지 | Ticker → Animator.SetTrigger("attack") 연동 전제 | + +**갱신 집계**: 기존 10 → 제거 1 + 신규 4 = **13개**. + +## 3. C6-1 백업 파일 목록 (편집 전 원본 보존) + +**백업 경로**: `D:/NerdNavis/BurningTimesAi/공유/개발팀_백업/EerieVillage/` +**Timestamp**: `20260424_1551` + +| # | 원본 | 백업 파일명 | +|---|------|-----------| +| 1 | `PlayerAttack.cs` | `PlayerAttack.cs.bak_20260424_1551.cs` | +| 2 | `Health.cs` | `Health.cs.bak_20260424_1551.cs` | +| 3 | `PlayerController.cs` | `PlayerController.cs.bak_20260424_1551.cs` | +| 4 | `InputSystem_Actions.inputactions` | `InputSystem_Actions.inputactions.bak_20260424_1551.inputactions` | +| 5 | `PlayerAttackTests.cs` | `PlayerAttackTests.cs.bak_20260424_1551.cs` | +| 6 | `AttackHitbox.cs` | `AttackHitbox.cs.bak_20260424_1551.cs` | + +**롤백 절차**: 백업 파일에서 `.bak_20260424_1551` 제거 후 Unity 레포 덮어쓰기. + +## 4. PD 수동 검증 요청 항목 + +Unity Editor 실행 GUI 작업이 필수인 항목만 최소화하여 PD 요청: + +### 4.1 Asset import 재처리 + EditMode Test Runner + +1. Unity Editor 재실행 (D:/NerdNavis/EerieVillage 프로젝트 열기) +2. Console에 import 오류 없는지 확인 — 특히: + - `PlayerAttackTicker.cs` 신규 파일 인식 + - `InputSystem_Actions.inputactions` Attack 액션 제거 후 재컴파일 + - `Health.cs` Decrement(int) 오버로드 + IncreaseMaxHearts·Heal 신규 메서드 +3. `Window > General > Test Runner` → EditMode → **Run All** → 13 tests all green 확인 + +### 4.2 Player.prefab에 PlayerAttackTicker 컴포넌트 부착 + Play 검증 + +**Unity Editor GUI 필수 작업**: +1. `Assets/Prefabs/Player.prefab` 열기 +2. Inspector → Add Component → "Player Attack Ticker" 선택 (네임스페이스 `Platformer.Gameplay`) +3. `attackInterval` 기본 0.5s 유지, `startupDelay` 0.3s 유지 +4. Prefab 저장 (Ctrl+S) + +**Play 모드 검증**: +1. Scene 열기 (`Assets/Scenes/SampleScene.unity`) +2. Play 버튼 클릭 +3. 확인 항목: + - (a) 이동·점프 정상 동작 (A/D·Space) + - (b) **마우스 좌클릭 / 게임패드 RT 누르지 않아도 공격 주기적 발동** (0.3초 후 첫 발동, 이후 0.5초 간격) + - (c) Player 근처 Enemy가 공격 판정에 들어오면 1 쿼터 피해 받고 i-frame 동안 중복 피해 없음 + - (d) 적 접촉 시 Player도 `Health.Decrement(damage)` 받아 쿼터 1 감소 (i-frame 0.6s) + - (e) 하트 UI 부재로 시각 피드백 없음 (HUD 개정은 후속 Phase) — Inspector Health 컴포넌트에서 currentHP 감소 실측으로 확인 + +### 4.3 리스크 — Play 검증 전 인지 사항 + +| 리스크 | 영향 | 대응 | +|---|---|---| +| PlayerAttackTicker 미부착 시 공격 자동 발동 안 됨 | Play에서 공격 0회 | §4.2-1~4 컴포넌트 Add 필수 | +| 기존 Enemy.prefab의 Health.maxHearts Inspector 값이 0 또는 직렬화 부재 | Awake에서 자동 1로 보정 | Health.cs Awake 보정 로직 신뢰 | +| Animator `attack` trigger 미존재 시 SetTrigger warning | Console warning 1회, 동작 무영향 | 기존 BT5-Dev 3단계에서 attack trigger + Player-Attack State 추가됨 (Player.controller YAML 편집 완료) | +| 적 ATK 1 수치 미설정으로 Player 피해 계산 실질 무효 | Decrement(damage=1)라도 i-frame으로 방어 | EnemyController 기반 피해 전달 로직은 후속 Phase | + +## 5. 리스크 및 기각안 + +### 5.1 기각안 (C32 최소 3건 초과 달성 — 5건) + +1. **"PlayerAttack.cs 내부에 타이머 직접 구현" — 기각** + - 이벤트 정의와 발화 트리거가 단일 클래스에 혼재 → SRP 위반 (C11 구조 직관성 훼손) + - Ticker 분리로 발화 방식 교체 유연성 확보 (예: 무기 종류별 발동 주기, 일시 정지 등) + +2. **"attackInterval을 PlayerController에 통합" — 기각** + - PlayerController는 이미 KinematicObject 상속 + Move/Jump/Facing/Animator 관리 비대 + - 공격 로직은 전투 시스템 영역으로 분리 보전 — Phase 3-B 카드 효과 훅 편입 시 의존성 깔끔 + +3. **"Health.maxHP를 제거하고 maxHearts만 유지" — 기각** + - 기존 Prefab 직렬화 호환성 (maxHP Inspector 값) 파괴 → 모든 Health 사용 prefab 재설정 필요 + - HUD·튜닝 도구·스크립트 참조(`health.maxHP`)의 일괄 갱신 비용 과다 + - **해결**: maxHP 유지 + Awake에서 `maxHearts * 4`로 재산정 (구식 값 자동 보정) + +4. **"Decrement를 `Decrement(int damage=1)` 단일 시그니처로 통합" — 기각** + - 기존 호출자(PlayerEnemyCollision 폐기·다른 스크립트) 회귀 리스크 + - **해결**: `Decrement()` 무인자 유지 + `Decrement(int damage)` 오버로드 신규 추가 (Decrement(1) 위임) + +5. **"EnemyController에 attackDamage 필드 추가 + 충돌 시 Player Decrement(attackDamage)" — 본 Phase 기각(TODO 주석만)** + - balance/01 v0.2 수치 테이블 미확정 상태에서 EnemyController 구조 개정은 돌이킴 리스크 + - **해결**: 본 Phase에서는 TODO 주석만 (적 ATK 테이블 확정 후 별도 Phase) + +### 5.2 식별된 리스크 + +| # | 리스크 | 완화책 | +|---|---|---| +| 1 | Player.prefab에 PlayerAttackTicker가 부착되지 않은 상태로 Play 시 공격 미발동 | PD 수동 작업 §4.2 명시 + EditMode 테스트 11번이 Ticker Script 존재는 검증(prefab 부착은 Unity GUI 필요) | +| 2 | balance/01 v0.2 수치 미확정으로 attackInterval·적 ATK 체감 미측정 | `attackInterval` 기본 0.5s는 파일럿 값 — balance-designer v0.2 확정 후 튠 | +| 3 | 기존 PlayerAttack 호출자 (`PlayerController.Update`·`PlayerEnemyCollision`)가 이미 삭제됨을 검증 없이 가정 | PlayerController Update에서 Schedule 호출 라인 제거 확인 · PlayerEnemyCollision 파일 부재 확인 (glob 결과 Scripts/Mechanics에 미존재) | +| 4 | Health.Decrement(damage) 오버로드가 i-frame 내 호출 시 완전 스킵 (부분 피해 인정 안 함) | 연타 방지 원칙 유지. 향후 "피해 레벨별 i-frame 차등" 필요 시 별도 설계 | +| 5 | AttackHitbox damage=1 기본 + Player 공격 1회당 1 쿼터로 적 Health(maxHP=4)의 적을 4회 연속 타격해야 처치 | balance/01 §5 적 HP 테이블 재검토 대상 (기획팀장 v0.2 확정 시 반영) | + +## 6. BT7-Dev 이후 Phase 예정 (범위 외 — 참고) + +**Phase 2** (기획 balance/01 v0.2 확정 후): +- EnemyController에 `attackDamage` 필드 추가 + Player 피해 전달 로직 +- 적 ATK 테이블 연동 (일반 약/중·엘리트·보스) +- attackInterval 튠 + +**Phase 3** (기획 system/01·content/01 확정 후): +- 카드 3분류 (액티브·패시브·각성) 데이터 구조 +- Player.attackHitbox가 카드 효과 훅 참조 +- 보물상자·각성 트리거 로직 + +**Phase 4** (기획 ux/02 확정 후): +- HUD 하트 분할 UI (♥ 1개 = 4 쿼터 시각화) +- 카드 슬롯 UI (액티브·패시브 분리) + +## 7. 자기 검증 (C22-6 정신 준수) + +PD 미합의 용어·식별자 자의 신설 없음 자가 검증: + +| 항목 | 검증 | +|---|---| +| PD 지시 용어 그대로 사용 | "액티브·패시브·각성·하트·쿼터·보물상자·Lv.5" 모두 PD 원문 그대로 코드 주석·본 문서에 인용 | +| 신규 클래스명 `PlayerAttackTicker` | PD 미합의 신설. 단 PD 지시 "자동 발동 주기 타이머"의 직관적 구현 기술 명명이며, 코드 내부 구조 결정(C11 범용성·직관성 적용) | +| 신규 필드명 `maxHearts`·`QuartersPerHeart`·`Heal`·`IncreaseMaxHearts` | PD 미합의 신설. 단 기존 `maxHP`·`Decrement` 컨벤션 계승한 영문 기술 명명. PD 한글 용어("하트"·"쿼터")의 영문 직역 | +| 안건 넘버링 | 본 문서 섹션 번호는 C25-1 1.·1)·A. 준수 | +| 선택지 식별자 | 본 Phase 내부 의사결정 "A안·B안" 자의 부여 없음 (PD 결정 요구 없음 — 전적으로 개발 구현) | + +**판정**: C22-6 정신 위반 없음. 신규 식별자는 **구현 세부 수준의 기술 명명**이며, PD 방향·원칙 수준 결정에 영향 없음 (C36 적용 범위 내). + +## 8. 변경 이력 + +| 일시 | 변경 | 사유 | 기안 | +|---|---|---|---| +| 2026-04-24 | v1.0 BT7-Dev Phase 1 — VS 순수형 자동 발동 + 하트 분할 + 테스트 갱신 | PD 지시 2026-04-24 11건 중 개발 영향분 | 개발팀장 | + +## 9. 참조 문서 + +- **기획 방향 근거**: `공유/대화로그/EerieVillage/2026-04-24.md` BT7-Plan 7개 엔트리 +- **선행 구현 문서**: `프로젝트/EerieVillage/개발/04_BT5-Dev_2단계_구현보고.md` v0.2 · `프로젝트/EerieVillage/개발/05_PlayerTestGirl_아틀라스_적용.md` +- **Unity 외부 레포 편집**: `D:/NerdNavis/EerieVillage/Assets/Scripts/Gameplay/{PlayerAttack.cs, PlayerAttackTicker.cs(신설)}`·`Assets/Scripts/Mechanics/{Health.cs, PlayerController.cs, AttackHitbox.cs}`·`Assets/Settings/InputSystem_Actions.inputactions`·`Assets/Tests/Editor/PlayerAttackTests.cs` +- **C6-1 백업**: `공유/개발팀_백업/EerieVillage/*.bak_20260424_1551.*` (6종) +- **PD 지시 로그**: `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` BT7-Dev 신규 항목 +- **대화로그**: `공유/대화로그/EerieVillage/2026-04-24.md` (BT7-Dev 착수 엔트리 신설 예정) diff --git a/프로젝트/EerieVillage/기획/01_게임_컨셉.md b/프로젝트/EerieVillage/기획/01_게임_컨셉.md index bb665c3..7daaa25 100644 --- a/프로젝트/EerieVillage/기획/01_게임_컨셉.md +++ b/프로젝트/EerieVillage/기획/01_게임_컨셉.md @@ -2,29 +2,29 @@ type: 초기_기획_골격 scope: 게임_컨셉 author: 기획팀장 -date: 2026-04-23 -version: v0.1 (파일럿) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage (기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist) -phase: Phase 3 A (파일럿 초기 골격) -data_source: PD 핵심 게임 룰 9개 (2026-04-23 지시 원문) -status: 초기 골격 — Phase 3-B/C에서 narrative-designer·system-designer 상세 확장 예정 +phase: Phase 3 A (BT7-Plan 개정 반영) +data_source: PD 핵심 게임 룰 9개 (2026-04-23) + BT7-Plan PD 확정 방향 11건 (2026-04-24) +status: BT7-Plan 개정 반영 — VS 순수형 덱빌딩·액티브/패시브/각성·하트 분할·공격 자동화 --- # 01. 게임 컨셉 ## 1. 정체성 한 줄 -**"한 번의 죽음이 곧 성장의 한 사이클이 되는, 조선 퇴마사의 빠른 횡스크롤 로그라이크."** +**"한 번의 죽음이 곧 성장의 한 사이클이 되는, 조선 퇴마사의 Vampire Survivors 순수형 횡스크롤 로그라이크."** ## 2. 재미의 축 (P30 — "어떤 재미를 강화하는가") 재미의 축은 **3가지 중 1·2를 핵심, 3을 보조**로 정의한다. 참신함:일관성 = 3:7 원칙 준수. -1. **육성 롤러코스터의 카타르시스** — 레벨업마다 3장 중 1장 카드 픽으로 빌드가 급격히 성장 → 보스 격파 직전의 전능감 → 사망 1회로 전부 초기화되는 낙차. 짧은 사이클에서 "쌓고·폭발하고·잃는" 감정 곡선이 핵심. -2. **액션 플랫포머의 손맛** — 이동·점프·공격의 즉각적 피드백. 로그라이크 특유의 "숫자 빌드" 재미에 갇히지 않고, 횡스크롤 조작으로 카드 효과를 직접 체험·전달하는 물성감. +1. **육성 롤러코스터의 카타르시스** — 레벨업마다 액티브·패시브 카드 픽으로 빌드가 급격히 성장 → 각성 발동 시 전능감 절정 → 사망 1회로 런 내 성장 초기화되는 낙차. 짧은 사이클에서 "쌓고·폭발하고·잃는" 감정 곡선이 핵심. **하트 수 증가·각성 진화 2중 성장 축**으로 빌드 감정 곡선을 고도화한다. +2. **"보며 즐기는" 액션 플랫포머** — 이동·점프만으로 적을 회피하며, 장착한 액티브 무기가 **자동 발동**하는 장면을 감상하는 재미. VS 원작 계승. 조작 복잡도 최소화(캐주얼 포지션)이되 회피·포지셔닝·보물상자 획득 타이밍 관리가 플레이어 스킬을 형성. 3. **(보조) 영속 성장의 위안** — 특성 시스템으로 "완전 무(無)로 돌아가지 않는다"는 안도감. 1·2의 고조·낙차가 절망으로 굳지 않도록 받쳐주는 축. -**재미 판단 근거**: 라이프 1·레벨 초기화·카드 전손이라는 가혹한 벌칙을 PD님이 코어 룰 7로 확정한 것은 1의 낙차 극대화가 이 게임의 본질임을 의미. 2는 PlatformerMicrogame 템플릿 선택의 필연적 귀결. 3은 1의 가혹함을 상쇄하는 안전장치로 코어 룰 9가 명시한 유일한 영속성. +**재미 판단 근거**: 기본 라이프 4 + 젤다 방식 하트 분할(PD 2026-04-24 확정) 구조는 "피격 즉사"의 가혹함을 유지하면서도 카드·성장으로 **최대 하트 수를 늘리는 육성 보상**을 제공하여 재미 축 1을 2중화한다. 공격 버튼 제거(VS 순수형) 결정은 재미 축 2를 "조작의 물성감"에서 "감상·포지셔닝의 물성감"으로 재정의하되, 이동·점프의 즉각 반응은 유지한다. 3은 코어 룰 9가 명시한 유일한 영속성. ## 3. 타겟 유저 @@ -43,9 +43,9 @@ status: 초기 골격 — Phase 3-B/C에서 narrative-designer·system-designer ## 5. 세일즈 포인트 (4종) 1. **한 사이클 3~10분의 압축 카타르시스** — 캐주얼 로그라이크 포지션. 모바일 자투리 플레이 친화. -2. **"3장 픽 + 조합"이라는 직관적 빌드 구축** — 스킬 카드 상세는 Phase 3-B 확장. -3. **단일 라이프·단일 낙차의 긴장감** — 라이프 1 룰이 만드는 고유 플레이 경험. -4. **조선·퇴마 세계관 차별화** — 서양식 판타지 레드오션에서 동아시아 로컬 IP로 포지셔닝. 상세 세계관 SOT는 `narrative-designer` 작업(Phase 3-B). +2. **"액티브+패시브=각성" 3분류 덱빌딩** — 액티브 무기 자동 발동 + 패시브 강화 + 조건 충족 시 각성 카드 진화라는 VS 원작 계승 구조. +3. **하트 분할·각성 진화의 2중 성장 긴장감** — 기본 라이프 4 + 젤다 방식 하트 분할 + 카드·성장으로 최대 하트 수 증가 구조가 만드는 생존·육성 동시 관리 경험. +4. **조선·퇴마 세계관 차별화** — 서양식 판타지 레드오션에서 동아시아 로컬 IP로 포지셔닝. 상세 세계관 SOT는 `narrative-designer` 작업(Phase 3-B, 현행 유지). ## 6. 상세 보류 — Phase 3-B/C 이관 @@ -56,12 +56,15 @@ status: 초기 골격 — Phase 3-B/C에서 narrative-designer·system-designer ## 7. 기각안 -1. **"3라이프·레벨 유지" 변형 — 기각.** PD 코어 룰 7(라이프 1·레벨 초기화) 고수. 낙차가 재미 축 1의 정체성이므로 완화 시 게임 성립 불가. -2. **"하드코어 로그라이크" 포지션 — 기각.** 룰 1 "캐주얼 로그라이크" 고수. Dead Cells·Hollow Knight 난이도 방향은 타겟 유저 확장 포기 의미. -3. **"탑뷰 로그라이크" 변형 — 기각.** 룰 2 횡스크롤 플랫포머 확정. 템플릿(2D PlatformerMicrogame)과 정합. +1. **"라이프 1 즉사 완전 고수" 변형 — 기각 (BT7-Plan 번복).** 원안은 라이프 1 고수였으나 PD 2026-04-24 BT7-Plan에서 "기본 라이프 4 + 젤다 방식 하트 분할 + 카드·성장으로 하트 수 증가"로 전환. 낙차 재미는 "하트 1개 구조의 피격 즉사 가능성"으로 유지하되, 육성 성장 축을 최대 하트 수 증가로 2중화. **기각안 유지(번복 기록)**: 원 기각 사유는 PD 지시로 무효화되었으나 설계 역사 보존 목적으로 본 기각안 섹션에 남긴다 (C14-5 히스토리 보존 정신). +2. **"하드코어 로그라이크" 포지션 — 기각 (현행 유지).** 룰 1 "캐주얼 로그라이크" 고수. Dead Cells·Hollow Knight 난이도 방향은 타겟 유저 확장 포기 의미. +3. **"탑뷰 로그라이크" 변형 — 기각 (현행 유지).** 룰 2 횡스크롤 플랫포머 확정. 템플릿(2D PlatformerMicrogame)과 정합. +4. **"수동 공격 유지" 변형 — 기각 (BT7-Plan 신규).** PD 2026-04-24 BT7-Plan에서 "덱빌딩 방식 VS 순수형 — 공격 버튼 제거, 이동·점프만" 확정. 액티브 카드의 자동 발동 체계로 전환. VS 원작 계승 구조에서 조작 복잡도 최소화 + 카드 시너지 감상 재미 극대화. +5. **"4티어 레어리티 체계 유지" 변형 — 기각 (BT7-Plan 신규).** PD 2026-04-24 BT7-Plan에서 "액티브+패시브=각성" 3분류 구조로 전환. 기존 T1/T2/T3 티어·Common/Uncommon/Rare/Epic 레어리티 체계 폐기. 상세: `system/01_카드_시스템.md` v0.2. ## 8. 변경 이력 | 일시 | 변경 | 사유 | 기안 | |---|---|---|---| | 2026-04-23 | v0.1 파일럿 초기 골격 작성 | PD 지시 BT5 | 기획팀장 | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (덱빌딩 VS 순수형·액티브/패시브/각성·하트 분할·공격 자동화) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/02_코어_루프.md b/프로젝트/EerieVillage/기획/02_코어_루프.md index 96d7dda..14cff7c 100644 --- a/프로젝트/EerieVillage/기획/02_코어_루프.md +++ b/프로젝트/EerieVillage/기획/02_코어_루프.md @@ -2,12 +2,12 @@ type: 초기_기획_골격 scope: 코어_루프 author: 기획팀장 -date: 2026-04-23 -version: v0.1 (파일럿) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3 A -data_source: PD 핵심 게임 룰 9개 (2026-04-23) -status: 초기 골격 — 상세 페이싱·씬 전환은 Phase 3-B +data_source: PD 핵심 게임 룰 9개 (2026-04-23) + BT7-Plan PD 확정 방향 11건 (2026-04-24) +status: BT7-Plan 개정 반영 — 보물상자 각성 트리거·하트 수 런 내 성장 --- # 02. 코어 루프 @@ -27,15 +27,20 @@ status: 초기 골격 — 상세 페이싱·씬 전환은 Phase 3-B │ ├─ 일반 구간 진행 │ │ - │ ├─ 적 처치 → 경험치 획득 + │ ├─ 적 처치 → 경험치 획득 (액티브 무기 자동 발동으로 처치) │ │ │ - │ │ └─ 레벨업 트리거 → [스킬 카드 3픽] + │ │ └─ 레벨업 트리거 → [스킬 카드 3픽: 액티브/패시브 2축 드로우] │ │ │ │ │ └─ 1장 선택 → 빌드 강화 → 전투 재개 │ │ + │ ├─ 보물상자 획득 → [각성 발동 판정] + │ │ │ (액티브 Lv.5 + 각성 필요 패시브 1개 이상 보유 시) + │ │ └─ 조건 충족 시 → [각성 카드 발동] (액티브 진화) + │ │ │ ├─ 아이템 획득 → [장착 or 교체 or 포기] (파츠별 1개) │ │ - │ └─ 피격 → 라이프 1이므로 즉시 [사망 분기] + │ └─ 피격 → 하트 감소 (피해량만큼 쿼터 단위 차감) + │ └─ 하트 전소 시 → [사망 분기] │ └─ 최종 구간: [보스 전투] │ @@ -48,7 +53,8 @@ status: 초기 골격 — 상세 페이싱·씬 전환은 Phase 3-B [사망 분기] │ ├─ 캐릭터 레벨 → 1 초기화 - ├─ 습득한 스킬 카드 → 전부 소실 + ├─ 습득한 스킬 카드 (액티브·패시브·각성) → 전부 소실 + ├─ 최대 하트 수 → 기본 1개로 복귀 (런 내 증가분 소실) ├─ 장착 아이템 → 유지 (코어 룰 8) ├─ 특성 → 유지 (코어 룰 9) │ @@ -66,20 +72,22 @@ status: 초기 골격 — 상세 페이싱·씬 전환은 Phase 3-B | 자산 | 사망 시 처리 | 근거 | |---|---|---| | **레벨** | 1로 초기화 | 코어 룰 7 | -| **스킬 카드** | 전부 소실 | 코어 룰 7 | -| **장착 아이템** | 유지 | 코어 룰 8 | -| **특성** | 유지 | 코어 룰 9 | -| **HP(라이프)** | 1 (기본값이자 최대값) | 코어 룰 7 — 라이프 1 전제 | +| **스킬 카드 (액티브·패시브·각성)** | 전부 소실 | 코어 룰 7 + BT7-Plan | +| **최대 하트 수** | 기본 1개로 복귀 (런 내 증가분 소실) | BT7-Plan — 하트 성장은 런 내만 유효 | +| **장착 아이템 (기본 무기 포함)** | 유지 | 코어 룰 8 | +| **특성** | 유지 (영구) | 코어 룰 9 | +| **HP(라이프)** | 기본 라이프 4 쿼터 (하트 1개 만땅) | BT7-Plan — 젤다 방식 하트 분할 | | **메타 재화** (Phase 3-B 결정) | — | balance-designer 영역, 보류 | ## 5. 분기 포인트 (의사결정 감정) 본 루프의 재미 리듬 형성 지점. Phase 3-B에서 상세 UI/UX 설계: -1. **레벨업 카드 3픽** — 매 레벨업마다 발생. 육성 방향 결정의 핵심 긴장. -2. **아이템 획득 시 교체·포기** — 파츠 1개 제한의 희소성 부담. -3. **보스 처치 후 마을 복귀 vs 다음 스테이지** — 안전 귀환(보상 확정) vs 욕심(더 강한 빌드·더 큰 보상) 선택. -4. **스테이지 선택 (마을)** — 특성·아이템 보유 상태 기준 도전 난이도 결정. +1. **레벨업 카드 3픽 (액티브·패시브 2축 드로우)** — 매 레벨업마다 발생. 육성 방향 결정의 핵심 긴장. 액티브 강화 vs 패시브 강화 vs 각성 조건 만들기 선택. +2. **보물상자 발견·획득 타이밍** — 각성 발동 트리거. 조건 충족(액티브 Lv.5 + 필요 패시브 1개 이상) 전 vs 후 획득 가치 차이. "아직 조건 안 찼으니 보물상자 획득 미루기"의 포지셔닝 긴장. +3. **아이템 획득 시 교체·포기** — 파츠 1개 제한의 희소성 부담. +4. **보스 처치 후 마을 복귀 vs 다음 스테이지** — 안전 귀환(보상 확정) vs 욕심(더 강한 빌드·더 큰 보상) 선택. +5. **스테이지 선택 (마을)** — 특성·아이템 보유 상태 기준 도전 난이도 결정. ## 6. 상세 보류 — Phase 3-B/C @@ -90,12 +98,14 @@ status: 초기 골격 — 상세 페이싱·씬 전환은 Phase 3-B ## 7. 기각안 -1. **"사망 시 체크포인트 부활" 변형 — 기각.** 코어 룰 7 "라이프 1 + 마을 복귀" 고수. 체크포인트는 낙차를 무력화하여 재미 축 1 성립 불가. +1. **"사망 시 체크포인트 부활" 변형 — 기각.** 코어 룰 7 "마을 복귀" 고수. 체크포인트는 낙차를 무력화하여 재미 축 1 성립 불가. 2. **"보스 선택지 없이 자동 다음 스테이지 진행" — 기각.** 코어 룰 5 "복귀 or 다음" 고수. 욕심·안전 분기 긴장이 루프의 핵심 의사결정. 3. **"던전 중간 세이브" — 기각.** 캐주얼 로그라이크 포지션과 상충. 한 런을 단일 세션으로 종결하는 리듬 유지. +4. **"최대 하트 수 영구 유지 (메타 성장)" — 기각 (BT7-Plan 신규).** PD 2026-04-24 BT7-Plan에서 "카드·성장으로 최대 하트 수 증가 가능"을 **런 내 성장**으로 한정 확정. 사망 시 기본 1개로 복귀하여 매 런의 긴장 유지. 영구 유지는 재미 축 1의 낙차를 무력화. 영구 성장은 특성 시스템(코어 룰 9)이 전담. ## 8. 변경 이력 | 일시 | 변경 | 사유 | 기안 | |---|---|---|---| | 2026-04-23 | v0.1 파일럿 초기 골격 | PD 지시 BT5 | 기획팀장 | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (보물상자 각성 트리거·하트 수 런 내 성장·액티브/패시브 2축 드로우) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/04_전투_기본_스펙.md b/프로젝트/EerieVillage/기획/04_전투_기본_스펙.md index b756d22..fcd9725 100644 --- a/프로젝트/EerieVillage/기획/04_전투_기본_스펙.md +++ b/프로젝트/EerieVillage/기획/04_전투_기본_스펙.md @@ -2,12 +2,12 @@ type: 초기_기획_골격 scope: 전투_기본_스펙 author: 기획팀장 -date: 2026-04-23 -version: v0.1 (파일럿) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3 A -data_source: PD 핵심 게임 룰 2·7 (2026-04-23) + Unity 6000.3.13f1 LTS 2D PlatformerMicrogame -status: 초기 골격 — 수치 실측·모바일 터치 스킴은 Phase 3-B (balance-designer·ux-designer) +data_source: PD 핵심 게임 룰 2·7 (2026-04-23) + BT7-Plan PD 확정 방향 11건 (2026-04-24) + Unity 6000.3.13f1 LTS 2D PlatformerMicrogame +status: BT7-Plan 개정 반영 — VS 순수형 (공격 버튼 제거)·하트 분할·액티브 자동 발동 --- # 04. 전투 기본 스펙 @@ -15,37 +15,64 @@ status: 초기 골격 — 수치 실측·모바일 터치 스킴은 Phase 3-B (b ## 1. 재미 축 연결 본 스펙이 강화하는 재미: -- **축 2 (액션 플랫포머 손맛)** — 이동·점프·공격의 즉각 반응이 모든 카드·특성 효과를 체감시키는 기반 -- **축 1 낙차 강화** — 라이프 1·피격 즉사가 "한 번의 실수"에 무게를 실어 긴장 유지 +- **축 2 ("보며 즐기는" 액션 플랫포머)** — 이동·점프의 즉각 반응 + 장착 액티브 무기의 자동 발동 감상. VS 원작 계승. 조작 복잡도 최소화이되 회피·포지셔닝·보물상자 획득 타이밍 관리가 플레이어 스킬. +- **축 1 낙차·성장 2중 축** — 하트 1개 구조에서 피격 즉사 가능성(긴장 유지) + 카드·성장으로 최대 하트 수 증가(육성 보상). 두 축이 런 내 동시에 작동. -## 2. 기본 액션 (3종) +## 2. 기본 액션 (2종) | 액션 | PC 입력 (원본 참조) | 모바일 입력 (Phase 3-B 확정 예정) | |---|---|---| | **이동** | WASD / 방향키 | 화면 좌측 가상 스틱 | | **점프** | Space | 화면 우측 점프 버튼 | -| **공격** | 마우스 좌클릭 | 화면 우측 공격 버튼 | -모바일 터치 스킴 상세(버튼 배치·Safe Area·드래그 감도)는 **ux-designer** 영역 (Phase 3-B). BT.Framework 후보(UITouchHandler·BackKeyDispatcher·SafeAreaBorder)와 연결. +**공격은 플레이어 수동 입력이 아닌 장착 액티브 카드의 자동 발동**으로 처리 (§5 참조). BT7-Plan PD 확정 방향 2 (VS 순수형). + +모바일 터치 스킴 상세(버튼 배치·Safe Area·드래그 감도)는 **ux-designer** 영역 (`ux/01_모바일_터치_UX.md` v0.2). BT.Framework 후보(UITouchHandler·BackKeyDispatcher·SafeAreaBorder)와 연결. ## 3. 라이프·피격 판정 -### 3-1. 핵심 규칙 (코어 룰 7) +### 3-1. 핵심 규칙 — 기본 라이프 4 + 젤다 방식 하트 분할 (BT7-Plan PD 확정 방향 7) -- **기본 라이프 1**. HP 최대값 = 1 -- **피격 1회 = 사망** → 사망 분기 발동 (02_코어_루프 §4) -- **힐·회복 수단**: Phase 3-B 결정 (라이프 1 전제에서 "일시적 실드·회피 기회"로 대체 가능 — balance-designer 판단) +**젤다의 전설 BotW 방식 하트 분할 구조**를 계승한다. -### 3-2. 무적 시간 (i-frame) — 설계 방향 +| 요소 | 값·규칙 | +|---|---| +| **기본 라이프 (최소 단위 HP)** | 4 쿼터 (1 하트 = 4 HP) | +| **하트 아이콘 표기** | ♥ (풀 하트 = 4/4 쿼터) | +| **시작 시 보유 하트 수** | 기본 1개 (최대 HP = 4) | +| **피해 1** | 1 쿼터 감소 (3/4 하트) | +| **피해 2** | 반 하트 감소 (2/4 하트) | +| **피해 3** | 3 쿼터 감소 (1/4 하트) | +| **피해 4** | 하트 1개 완전 소멸 | +| **최대 하트 수 증가** | 카드·성장으로 런 내 추가 획득 가능 (예: 하트 2개 = 최대 HP 8) | +| **사망 조건** | 모든 하트 쿼터 0 도달 시 사망 분기 (02_코어_루프 §4) | -- **피격 직후 무적 시간 N ms**: 라이프 1이지만 **연속 히트 인정 금지**. N 값은 Phase 3-B 실측 (후보: 400~800ms 범위) -- **대시·회피 동작 중 무적**: 회피 메커니즘 도입 여부 + 프레임은 Phase 3-B +### 3-2. 하트 분할 시각화 5단계 + +각 하트 아이콘은 다음 5단계 시각 상태를 가진다: + +| 상태 | 남은 쿼터 | 시각 표현 | +|---|---|---| +| 풀 | 4/4 | ♥ (완전 채워짐) | +| 3/4 | 3/4 | ♥ (3/4 채워짐, 우하단 1/4 비움) | +| 반 | 2/4 | ♥ (절반 채워짐, 좌측만) | +| 1/4 | 1/4 | ♥ (1/4만 채워짐, 좌상단) | +| 빈 | 0/4 | ♡ (외곽선만) | + +상세 UI 스프라이트 분할은 ux-designer `ux/02_HUD_설계.md` v0.2 이관. + +### 3-3. 무적 시간 (i-frame) — 0.6s (근거 재검토 완료) + +- **피격 직후 무적 시간 0.6초**: 하트 다단 구조 하에서도 연속 히트 방지 기준 유효. 적 ATK 2 연타 시 "반 하트 감소(2 쿼터)"로 보호됨 → i-frame 없으면 단일 프레임에 하트 1개 전소 가능 +- **재검토 결과**: 적 ATK가 1~4 범위로 확장되므로 i-frame 0.6s는 **여전히 유효**. `balance/01_전투_수치.md` v0.2 §4 산출 근거 갱신 +- **대시·회피 동작 중 무적**: 회피 메커니즘 도입 여부는 Phase 3-C - **무적 시각화**: 깜박임·외곽선 등 UX 피드백 의무 (ux-designer) -### 3-3. 재미 균형 (P30 판단) +### 3-4. 재미 균형 (P30 판단) -- 라이프 1은 "가혹함"이지만 **회피 가능한 패턴 설계**가 전제되어야 액션 재미 성립 -- "피격 = 사망"이 "랜덤 사망"으로 느껴지면 재미 축 2 붕괴 → **가독 높은 적 공격 패턴** 의무 (level-designer·content-designer) +- 하트 1개 + 젤다 분할 구조는 "가혹함(피격 즉사 가능성)"과 "여유(피해량에 따라 살아남음)"의 혼합 +- 최대 하트 수 증가는 카드 픽 선택의 핵심 성장 축 — "공격력 강화 vs 생존력 강화"의 고전적 육성 트레이드오프 +- **가독 높은 적 공격 패턴** 의무 (level-designer·content-designer) — 피해량 표기가 명확해야 분할 구조 체감 ## 4. 점프·이동 (PlatformerMicrogame 기반) @@ -54,47 +81,82 @@ status: 초기 골격 — 수치 실측·모바일 터치 스킴은 Phase 3-B (b Unity 2D PlatformerMicrogame 기본 점프·이동 구조 그대로 계승 (변경 유발 시 개발팀 C11 판단 동반). - 중력 · 점프 높이 · 이동 속도: 템플릿 기본값 → Phase 3-B에서 EerieVillage 튠 (balance-designer) -- **2단 점프 여부**: Phase 3-B 결정 (액션성 vs 캐주얼성 트레이드오프 — PD 검토 대상) +- **2단 점프 여부**: Phase 3-B 결정 (액션성 vs 캐주얼성 트레이드오프) ### 4-2. 횡스크롤 카메라 - 기본 follow-cam. 보스룸은 고정 카메라 전환 (연출) - 화면 비율·Safe Area: BT.Framework `SafeAreaBorder` 활용 (P29 계승) -## 5. 공격 (근거리 1종 시작) +## 5. 공격 — 장착 액티브 자동 발동 (VS 순수형) -### 5-1. 기본 공격 +### 5-1. 수동 공격 없음 -- **근거리 공격** 1종으로 파일럿 시작 (마우스 좌클릭 / 터치 버튼) -- **쿨타임·대미지·판정 박스**: 템플릿 기본값 → Phase 3-B 튠 +**플레이어 수동 공격 입력은 존재하지 않는다** (BT7-Plan PD 확정 방향 2). 공격 버튼·공격 키 입력 없음. -### 5-2. 카드 효과에 의한 확장 +### 5-2. 기본 시작 무기 1종 (퇴마사 고유) -- 원거리·AoE·특수 공격은 **스킬 카드 효과로 획득**하는 방향 (Phase 3-B system-designer) -- 기본 공격에 카드 효과가 **합성**되어 빌드 다양성 형성 (03_진행_시스템 §3-2 조합 개념과 연결) +VS 원작의 "캐릭터 고유 무기 1종 지급" 패턴 계승. EerieVillage 파일럿은 **퇴마사 고유 기본 무기 1종**으로 시작한다. + +- **기본 무기 개요**: 자동 발동형 근거리 or 전방 판정. 상세 무기명·판정 박스·발동 주기는 `content/01_카드_풀.md` v0.2 액티브 카테고리에서 확장 +- **코어 룰 8 "장착 유지"**: 기본 무기는 사망 시에도 유지 (초기 무기 자산) + +### 5-3. 액티브 카드 자동 발동 체계 + +장착한 액티브 카드는 각자 고유 발동 주기·판정 박스·대미지 수치를 가진다. 플레이어 입력 없이 자동 발동. + +- **발동 주기**: 카드별 고유 쿨다운 (content·balance-designer 이관) +- **판정 박스**: 카드별 고유 범위 (전방·원형·직선·부채꼴 등) +- **스택 업그레이드**: 동일 액티브 재픽 시 Lv.1 → Lv.5까지 강화 (규칙 상세: `system/01_카드_시스템.md` v0.2 규칙 4) +- **각성 발동**: 액티브 Lv.5 + 각성에 필요한 특정 패시브 1개 이상 보유 + 보물상자 획득 시 각성 카드 발동 (§5-4) + +### 5-4. 각성 발동 조건 (VS 원작 동일) + +BT7-Plan PD 확정 방향 5 — VS 원작 각성 조건 동일 계승. + +``` +각성 발동 조건: + 1. 해당 액티브 카드가 Lv.5 도달 + 2. 각성에 필요한 특정 패시브 카드 1개 이상 보유 + 3. 보물상자 획득 + → 세 조건 동시 충족 시 각성 카드 자동 발동 (액티브가 각성 형태로 진화) +``` + +각 각성 카드마다 **필요 액티브 + 필요 패시브 쌍**이 명시된다 (`content/01_카드_풀.md` v0.2 §3 각성 카테고리). + +### 5-5. 카드 효과에 의한 기본 무기 강화 + +기본 시작 무기도 패시브 카드(공격력·공격 속도·판정 범위 증가 등)의 영향을 받는다. 기본 무기 자체를 각성 조건에 포함시킬지는 `content/01_카드_풀.md` v0.2 결정. ## 6. 피격·사망 연출 - 피격 시 시각·청각·진동(모바일) 3종 피드백 의무 (ux-designer) +- **피해량별 피드백 차등**: 피해 1 = 짧은 진동, 피해 4 = 강한 진동 + 화면 흔들림 (체감 구분) - 사망 연출은 **1~2초 이내 짧게** 처리 (캐주얼 로그라이크 페이싱 유지) - 사망 직후 마을 복귀 전환: 로딩 느낌 없이 연속감 있게 (Phase 3-B UX) ## 7. 상세 보류 — Phase 3-B/C -- **구체 수치** (이동 속도·점프 높이·공격 쿨타임·대미지·무적 시간): balance-designer + 개발팀 엔진 실측 (Phase 3-B) +- **구체 수치** (이동 속도·점프 높이·i-frame 재검토 미세 조정·액티브 발동 주기·대미지): balance-designer + 개발팀 엔진 실측 (Phase 3-B) +- **최대 하트 수 증가 상한**: balance-designer 결정. 카드 스택 제한과 동일 철학으로 하드캡 필요 (초기 권고 3~5개) +- **액티브 자동 발동 주기 기본 수치**: balance-designer 이관 (`balance/01_전투_수치.md` v0.2) - **적 AI 기본 패턴**: level-designer + content-designer (Phase 3-B) - **보스 공격 패턴 설계 규칙**: level-designer (Phase 3-B 05 문서 연계) -- **회피·블록 메커니즘 도입 여부**: PD 결정 대상 (Phase 3-B) +- **회피·블록 메커니즘 도입 여부**: PD 결정 대상 (Phase 3-C) - **모바일 터치 UX 상세**: ux-designer + BT.Framework 통합 (Phase 3-B) +- **기본 무기 세부 스펙**: content-designer 이관 (`content/01_카드_풀.md` v0.2) ## 8. 기각안 -1. **"HP 막대 도입" 변형 — 기각.** 코어 룰 7 "라이프 1" 고수. HP 막대는 축 1 낙차 무력화. -2. **"공격 버튼 복수 (약공·강공)" — 기각.** 파일럿은 근거리 1종으로 시작. 복잡도는 카드 효과 계층에서 담당하여 입력 복잡도 최소화(캐주얼 포지션). 확장 필요 시 Phase 3-C 재검토. -3. **"무적 시간 0" — 기각.** 라이프 1 + 무적 0은 체감 난이도 폭주 → 축 2 액션 재미 붕괴 위험. 무적 시간 도입은 비타협. +1. **"HP 막대 도입" 변형 — 기각 (BT7-Plan 번복).** 원 기각 사유는 "라이프 1 고수, HP 막대는 축 1 낙차 무력화"였으나, PD 2026-04-24 BT7-Plan에서 "기본 라이프 4 + 젤다 방식 하트 분할"로 전환. HP 막대 대신 **하트 분할 시각화**로 전환 — 이는 "HP 막대의 수치 가독성" + "라이프 카운트의 이산 시각 낙차" 양자를 모두 얻는 구조. **기각안 유지(번복 기록)**: 원 기각 사유는 PD 지시로 무효화되었으나 설계 역사 보존 목적으로 본 기각안 섹션에 남긴다 (C14-5 히스토리 보존 정신). +2. **"공격 버튼 복수 (약공·강공)" — 기각 (BT7-Plan 의미 변화).** 원 기각은 "파일럿 근거리 1종 시작"이었으나, BT7-Plan에서 **공격 버튼 자체 폐기 (VS 순수형)**로 의미 변화. 공격 복잡도는 "액티브 카드 다양성"으로 담당. +3. **"무적 시간 0" — 기각 (현행 유지).** 하트 다단 구조 하에서도 연속 히트 1 프레임에 하트 1개 전소 위험. 무적 시간 도입은 비타협. 0.6s 유지. +4. **"피격 시 랜덤 피해량 부여" — 기각 (BT7-Plan 신규).** 젤다 방식 하트 분할의 장점은 "적 ATK 수치의 시각적 명확성"(ATK 2 = 반 하트). 랜덤 피해량은 체감 구분 파괴. 적 ATK는 고정 수치로 설계. +5. **"하트 완전 폐기 후 HP 수치만 표기" — 기각 (BT7-Plan 신규).** 하트 분할 시각화의 재미 핵심은 "수치가 아닌 형태 인지"(젤다 BotW의 고전 강점). 수치 표기는 부가 정보로만 허용 (HUD 설계 참조). ## 9. 변경 이력 | 일시 | 변경 | 사유 | 기안 | |---|---|---|---| | 2026-04-23 | v0.1 파일럿 초기 골격 | PD 지시 BT5 | 기획팀장 | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (VS 순수형·하트 분할·액티브 자동 발동) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/balance/01_전투_수치.md b/프로젝트/EerieVillage/기획/balance/01_전투_수치.md index 5e2c927..7d2cf31 100644 --- a/프로젝트/EerieVillage/기획/balance/01_전투_수치.md +++ b/프로젝트/EerieVillage/기획/balance/01_전투_수치.md @@ -2,24 +2,25 @@ type: 밸런스_수치_초안 scope: 전투_기본_수치 author: 밸런스기획자 -date: 2026-04-22 -version: v0.1 (Phase 3-B 초안) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3-B -data_source: 04_전투_기본_스펙.md v0.1 + Unity 2D PlatformerMicrogame 기본값 + 코어 룰 7 (라이프 1) -status: 초안 — 개발팀 Unity 실측 검증 필수 (§10 명시) +data_source: 04_전투_기본_스펙.md v0.2 · system/01_카드_시스템.md v0.2 · content/01_카드_풀.md v0.2 · BT7-Plan PD 확정 방향 11건 · Unity 2D PlatformerMicrogame 기본값 +status: 초안 — 개발팀 Unity 실측 검증 필수 (§10 명시) · 수치는 튜닝 대상 --- # 01. 전투 기본 수치 ## 1. 설계 전제 (P30 재미 정의 선행) -강화 대상 재미: **축 2 액션 플랫포머 손맛** + **축 1 낙차(라이프 1)**. -- 목표 TTK(Time To Kill) 플레이어: **연속 피격 불가 보장** — 라이프 1이므로 TTK 개념 대신 "회피 가능한 타이밍 윈도우 확보"가 핵심. -- 목표 TTK 일반 적: **공격 2~4회 타격으로 처치** (한 방 킬은 박진감, 여러 방은 패턴 학습 보조). +강화 대상 재미: **축 2 "보며 즐기는" 액션 플랫포머** + **축 1 낙차·성장 2중 축**. + +- 목표 TTK(Time To Kill) 플레이어: **연속 피격 방지 i-frame 보장** — 하트 분할 구조에서 "피해량 차등 인지 + 회피 가능한 타이밍 윈도우 확보"가 핵심. +- 목표 TTK 일반 적: **자동 발동 액티브 DPS 기준 공격 2~4회 타격으로 처치** (VS 원작 페이싱 계승). - 보스 TTK 목표: **50~90초** (캐주얼 5~10분 런의 15~20% 시간). 빌드 없는 초반 약 75초, 카드 2~3장 빌드 후 약 50초. -모든 수치는 Unity `Rigidbody2D` + `BoxCollider2D` 기반. `PlatformerMicrogame` 기본값에서 파생하여 EerieVillage 튠 제안. +모든 수치는 Unity `Rigidbody2D` + `BoxCollider2D` 기반. `PlatformerMicrogame` 기본값에서 파생하여 EerieVillage 튠 제안. **수치는 초안·튜닝 대상**이며 개발팀 실측 후 재조정 필수. --- @@ -33,129 +34,169 @@ status: 초안 — 개발팀 Unity 실측 검증 필수 (§10 명시) 공중 수평 제어 = AirControl × MoveSpeed ``` -### 수치 테이블 +### 수치 테이블 (초안·튜닝 대상) | 파라미터 | 제안 값 | Unity 단위 | 근거 | |---|---|---|---| -| **MoveSpeed** | 6.0 | m/s | PlatformerMicrogame 기본 5.0 대비 +20%. 모바일 가상 스틱의 좁은 조작 반경을 보정하여 반응성 향상. 과하면 플랫폼 오버슈� → 7.0이 상한 | -| **JumpHeight** | 3.5 | m | 화면 대비 플레이어 키를 1.0 기준 시 3.5배 이상은 이동감 충분. 2단 점프 미도입 전제. 2단 점프 도입 시 2.5로 하향 | -| **Gravity Scale** | 3.5 | (배율) | PlatformerMicrogame 기본 3.0 대비 +0.5. 착지 후 "묵직한 손맛" 강화. 과하면 점프 정점이 짧아 조작 스트레스 유발 → 4.0이 상한 | -| **Max Fall Speed** | -20.0 | m/s (음수) | 클리핑 방지 및 낙하 직관성. 무제한 시 빠른 하강으로 플랫폼 착지 난이도 폭등 | -| **Air Control** | 0.7 | (MoveSpeed 배율) | 공중 제어 70%. 조선퇴마 세계관 "무게감" 유지 + 공중 회피 가능성 확보. 1.0은 아이스 미끄럼 없는 완전 제어 — 너무 가볍다 | -| **Coyote Time** | 0.12 s | 초 | 절벽 끝에서 점프 입력 허용 윈도우. 모바일 터치 딜레이 75ms 상정 시 0.10~0.15가 적정. **0.12는 딜레이 보정 주축** | -| **Jump Buffer** | 0.15 s | 초 | 착지 직전 점프 입력 선행 허용. 모바일 터치에서 타이밍 맞추기 어려운 문제 해결. 0.10 미만은 효과 미약, 0.20 이상은 의도치 않은 점프 | -| **Edge Push** | 0.3 m | m | 플랫폼 모서리 0.3m 이내 도달 시 캐릭터를 플랫폼 위로 자동 보정. 모바일에서 엣지 미스 착지 빈도 감소. **근거**: 터치 정밀도 ±5mm → Unity 픽셀 기준 약 0.3m | +| **MoveSpeed** | 6.0 | m/s | PlatformerMicrogame 기본 5.0 대비 +20%. 모바일 가상 스틱 반응성 보정. 공격 버튼 제거로 이동이 회피의 유일 수단 → 약간 상향 | +| **JumpHeight** | 3.5 | m | 화면 대비 플레이어 키 1.0 기준 3.5배 | +| **Gravity Scale** | 3.5 | (배율) | PlatformerMicrogame 3.0 +0.5. 착지 손맛 강화 | +| **Max Fall Speed** | -20.0 | m/s (음수) | 클리핑 방지 | +| **Air Control** | 0.7 | (MoveSpeed 배율) | 공중 제어 70% | +| **Coyote Time** | 0.12 s | 초 | 절벽 끝 점프 입력 허용 윈도우 | +| **Jump Buffer** | 0.15 s | 초 | 착지 직전 점프 입력 선행 허용 | +| **Edge Push** | 0.3 m | m | 플랫폼 모서리 보정 | ### 성장 곡선 — 이동·점프는 고정 -이동·점프는 게임 내 **성장 없이 고정**. 카드·특성으로 MoveSpeed 버프 스택 시 최대 150% 상한 (9.0 m/s)을 하드캡으로 설정. 상한 초과 시 플랫폼 충돌 연산 오류 위험. +이동·점프는 게임 내 **성장 없이 고정**. 카드·특성으로 MoveSpeed 버프 스택 시 최대 150% 상한 (9.0 m/s)을 하드캡으로 설정. P11(질풍보)·P12(도약강화) 패시브 기여분 포함. --- -## 3. 공격 수치 +## 3. 공격 수치 — 자동 발동 액티브 무기 기본 수치 (BT7-Plan 재작성) -### 설계 전제 — 재미 정의 +### 설계 전제 — 재미 정의 (VS 순수형 전환) -"공격 1회의 손맛" = 타격 직후 히트스탑(2~3프레임)이 있어야 타격감 실재. 히트스탑 없으면 캐주얼 플레이어가 "맞은 건지 모른다" 불만. +**플레이어 수동 공격 없음** (BT7-Plan 확정 방향 2). 장착한 액티브 카드가 고유 주기·판정·대미지로 자동 발동한다. 손맛은 "타격 순간의 히트스탑·이펙트·사운드"로 제공되며, 플레이어 조작은 "어떤 액티브를 언제 발동할 타이밍에 적 근처·멀리 위치할 것인가"의 포지셔닝 스킬로 전환. -### 수치 테이블 +### 자동 발동 액티브 무기 기본 수치 (초안·튜닝 대상) + +카드별 고유 수치는 `content/01_카드_풀.md` v0.2 개별 카드에 명시 예정. 본 섹션은 **기본 파라미터 가이드**. | 파라미터 | 제안 값 | 단위 | 근거 | |---|---|---|---| -| **BaseDamage** (일반 공격) | 20 | HP | 일반 적 HP 60 기준 3타 킬. 2타 킬(40대미지)은 너무 단순, 4타(15대미지)는 단조. 3타가 "리듬 있는 교전" 최소 단위 | -| **AttackRange** | 1.2 m | m (BoxCollider 반경) | 플레이어 캐릭터 가로 0.6m 기준 전방 1.2m. 화면 폭 대비 약 10%. 과하면 보스 패턴 무의미화 | -| **AttackCooldown** | 0.4 s | 초 | DPS = 20 / 0.4 = 50 DPS. 일반 적(HP 60) TTK ≈ 1.2초. 캐주얼 로그라이크 교전 리듬에서 0.3초 미만은 스팸 유도, 0.6초 이상은 답답함 | -| **HitStop** | 3 프레임 | frames (60fps 기준) | 50ms. 히트스탑 2~5프레임이 "타격감 골든 존" (액션 게임 산업 경험치). 너무 길면 입력 딜레이처럼 느껴짐 | -| **AttackBoxOffset** | (0.6, 0) | Vector2 m | 플레이어 중심에서 전방 0.6m 오프셋. 캐릭터 밖 1.2m 범위에서 시작 | -| **KnockbackForce** | 3.0 m/s | m/s (적 기준) | 적 넉백. 너무 강하면 적이 벽에 끼임. 3.0은 교전 거리 유지 + 연속 피격 방지 | +| **BaseCooldown (액티브 기본 쿨다운)** | 1.5 s | 초 | VS 원작 초반 무기 쿨다운 참조. 패시브(P06 연사술)로 단축 가능. 0.5s 미만은 이펙트 중첩 혼잡, 3.0s 초과는 답답함 | +| **BaseDamage (액티브 기본 대미지)** | 10 | HP | 일반 적 HP 40 기준 4타 킬. VS 원작 페이싱 참조 | +| **AttackBoxSize (판정 박스 기본 크기)** | 1.5 × 1.0 m | Vector2 | 자동 발동이므로 수동 공격 대비 관대한 판정. 패시브(P07 광역확장)로 확장 가능 | +| **HitStop** | 3 프레임 | frames (60fps 기준) | 50ms. 자동 발동도 타격감 체감 필수 | +| **KnockbackForce** | 3.0 m/s | m/s | 적 넉백 | -### 대미지 공식 +### 대미지 공식 (전투 핵심) ``` -FinalDamage = BaseDamage × CardMultiplier × CritMultiplier -CardMultiplier: 카드 스택에 따라 1.0~2.5 범위 (Phase 3-C 카드 설계) -CritMultiplier: 기본 1.0. 크리티컬 미도입 (Phase 3-C 결정 보류) +// 플레이어 액티브 → 적 +EnemyHPResult = EnemyHP - (ActiveBaseDamage × CardMultiplier × StackLevelFactor × AttributePassiveBonus) + +// 파라미터 정의: +// ActiveBaseDamage = 각 액티브 카드 고유 기본 대미지 +// CardMultiplier = 해당 카드 패시브 시너지 배율 (1.0~2.5 범위, Phase 3-C 튜닝) +// StackLevelFactor = Lv.1 = 1.0 / Lv.2 = 1.2 / Lv.3 = 1.4 / Lv.4 = 1.6 / Lv.5 = 2.0 (초안) +// AttributePassiveBonus = P02~P05 속성 강화 패시브 보유 시 해당 속성 배율 (1.0 기본, 1.5 풀 스택) + +// 각성 발동 시: +EnemyHPResult = EnemyHP - (AwakeningBaseDamage × CardMultiplier × AttributePassiveBonus) +// AwakeningBaseDamage = 각성 카드 고유 기본 대미지 (Lv.5 액티브 대비 2~3배) + +// 적 → 플레이어 +PlayerHP -= EnemyATK (쿼터 단위 차감, i-frame 내 피격 무효) +// 최대 하트 수 × 4 쿼터가 총 HP +// 예: 하트 2개 보유 시 최대 HP = 8 쿼터 ``` +단순성이 설계 의도. 방어 수치(DEF) 미도입 — 패시브 `[방어]` 카드의 피해 감소 %가 역할 대체 (P17 부적방패 등). + --- -## 4. 무적 시간 (i-frame) — 라이프 1 핵심 보호 메커니즘 +## 4. 무적 시간 (i-frame) — 하트 분할 구조 핵심 보호 메커니즘 -### 설계 전제 — 재미 정의 (가장 중요) +### 설계 전제 — 재미 정의 (BT7-Plan 재검토 결과) -라이프 1 + i-frame 0 = "거의 모든 전투에서 사망" → **축 2 액션 재미 붕괴**. i-frame은 "회피 숙련도가 생존을 결정"하는 구조의 기반. "적을 어떻게 피하느냐"가 플레이어 스킬의 전부. +**하트 분할 구조 하에서도 i-frame 0.6s는 유효**. 재검토 근거: -i-frame이 너무 짧으면: 다단 히트 공격(적의 연속 스윙) 1회에 즉사 — 캐주얼 포지션 위배. -i-frame이 너무 길면: 적 공격이 무의미화, 긴장감 소실 — 축 1 낙차 무력화. +- 적 ATK 1~4 범위 (§5) 기준, i-frame 없으면 ATK 4 적의 연타 시 단일 프레임에 하트 1개 전소 가능 +- 0.6s는 "ATK 2 연타 시 반 하트 감소 → 회피 이동 가능" 타이밍 확보 +- **공격 버튼 제거로 플레이어 조작 부담 경감** → 회피·포지셔닝에 집중 → i-frame 0.6s 유지 타당 -**목표 체험**: "피격 직후 0.6초 동안 무적이다 — 이 시간 안에 적에게서 벗어나야 한다" 플레이어 인식 형성. - -### 수치 테이블 +### 수치 테이블 (초안·튜닝 대상) | 파라미터 | 제안 값 | 범위 | 근거 | |---|---|---|---| -| **IFrameDuration (피격)** | **0.6 s** | 0.3~1.0s | 아래 산출 과정 참고 | +| **IFrameDuration (피격)** | **0.6 s** | 0.3~1.0s | 하트 다단 구조 하에서도 연속 히트 방지 기준 유효. 아래 산출 근거 참고 | | **IFrameDuration (대시·회피)** | 보류 | — | 회피 메커니즘 미확정 (04_전투 §7) — Phase 3-C | -| **깜박임 시각화 간격** | 0.08 s | 초 | 깜박임 1회 = 0.08s 온/오프. 0.6s÷0.08s ≈ 7.5회 깜박임. 너무 빠르면 번쩍임 불쾌, 너무 느리면 무적 인식 불가 | +| **깜박임 시각화 간격** | 0.08 s | 초 | 7.5회 깜박임 / 0.6s | +| **P19 심안 패시브 적용 시 연장** | +0.2 s | 초 | Lv.5 풀 스택 시 i-frame 0.8s (초안) | -#### 0.6초 산출 근거 +#### 0.6초 산출 근거 (하트 분할 구조 재검토) -1. **연속 히트 방지 기준**: 일반 적 AttackCooldown = 0.5s 가정. i-frame ≥ 0.5s면 같은 적의 연타 불가. → 최소 0.5s. -2. **모바일 회피 반응 시간**: 터치 입력 후 캐릭터 이동 반응 75ms + 플레이어 반응 시간 300ms = 375ms. i-frame 0.6s면 피격 후 회피 이동 착수 가능. 0.3s는 너무 촉박. -3. **캐주얼 포지션 고려**: Celeste(스피드런 전문) i-frame 0.3s, Hollow Knight 0.35s — 높은 난이도 기준. 캐주얼 대상 EerieVillage는 0.5~0.8s가 적정. -4. **결론**: 0.6s는 "최소 보호(0.5s) + 모바일 반응 여유(+0.1s)"의 합리적 교점. 테스트 후 ±0.1s 조정 여지. +1. **연속 히트 방지 기준**: 일반 적 AttackCooldown = 0.5s 가정. i-frame ≥ 0.5s면 같은 적의 연타 불가 → 최소 0.5s +2. **적 ATK 다단 대응**: ATK 1~4 범위에서 i-frame 0.6s면 "1회 피격 → 회피 이동 착수" 확보 가능. 0.3s는 ATK 4 연타 시 위험 +3. **모바일 회피 반응 시간**: 터치 75ms + 플레이어 반응 300ms = 375ms. i-frame 0.6s면 충분 +4. **캐주얼 포지션 유지**: VS 원작 계승 하트 분할 구조 + 공격 버튼 제거 → 조작 단순화. i-frame 여유(0.6s) 적정 +5. **결론**: 0.6s 유지. 테스트 후 ±0.1s 조정 여지 (튜닝 대상) --- -## 5. 적 스탯 +## 5. 적 스탯 — ATK 1부터 점진 강화 (BT7-Plan 확정 방향 8 반영) -### 적 등급 체계 +### 적 등급 체계 (초안·튜닝 대상) -| 등급 | HP | ATK | AttackCooldown | 이동 속도 | 비고 | +| 등급 | HP | ATK (쿼터 피해) | AttackCooldown | 이동 속도 | 비고 | |---|---|---|---|---|---| -| **일반 적 (약)** | 40 | 1(즉사) | 1.2 s | 2.0 m/s | 첫 구간 전용. 3~4타 처치 | -| **일반 적 (중)** | 60 | 1(즉사) | 0.9 s | 3.0 m/s | 구간 2 주력 | -| **엘리트** | 120 | 1(즉사) | 0.7 s | 3.5 m/s | 구간 2 후반~보스 전 | -| **보스** | 400 | 1(즉사) | 아래 별도 | 2.5 m/s | 스테이지 보스 | +| **일반 적 (약)** | 40 | **1** (1/4 하트) | 1.2 s | 2.0 m/s | 첫 구간 전용. 3~4타 처치 | +| **일반 적 (중)** | 60 | **1~2** (스테이지 진행 시 상승) | 0.9 s | 3.0 m/s | 구간 2 주력 | +| **엘리트** | 120 | **2** (반 하트) | 0.7 s | 3.5 m/s | 구간 2 후반~보스 전 | +| **보스 페이즈 1** | 400 | **2~3** | 1.5 s | 2.5 m/s | 스테이지 보스 | +| **보스 페이즈 2** | (HP 50% 이하) | **3~4** (페이즈 강화) | 1.2 s | 3.0 m/s | 위험 구간 | -#### ATK=1(즉사) 설계 근거 +#### 적 ATK 점진 강화 설계 (BT7-Plan 확정 방향 8) -라이프 1 구조에서 모든 피격은 즉사. HP를 10이나 20으로 설정하면 "HP가 10인 척 하다가 0 되면 죽는 것"으로 수치만 무의미해짐. 명확성을 위해 **ATK = 플레이어 사망** 단일 의미. 대신 적 HP는 의미 있게 차등. +**구 ATK=1(즉사) 단일 설계 폐기**. 하트 분할 구조에 맞춰 점진 강화. + +``` +스테이지별 ATK 배율: + Stage 1: 기본 ATK × 1.0 + Stage 2: 기본 ATK × 1.0 (중반부터 +1 가산) + Stage 3: 기본 ATK × 1.5 (올림) + Stage 4: 기본 ATK × 1.5 (올림) + Stage 5: 기본 ATK × 2.0 (올림, 최대 ATK 4 = 하트 1개 전소) + +예: + Stage 1 일반 적 (약): ATK 1 (1/4 하트 피해) + Stage 3 엘리트: ATK 2 × 1.5 = 3 (3/4 하트 피해) + Stage 5 보스 페이즈 2: ATK 4 = 하트 1개 전소 +``` + +**설계 의도**: 초반은 관대(실수 허용), 후반은 가혹(회피·빌드 필수). 성장 축(하트 수 증가·액티브 강화)과 위협 축 동반 상승. #### 보스 스탯 상세 (파일럿 기준 보스 1종) | 파라미터 | 값 | 근거 | |---|---|---| -| HP | 400 | DPS 50 기준 TTK = 8초 (빌드 없음). 카드 3장 시 배율 ×1.5 가정 → TTK ≈ 5.3초. **목표 50~90초는 빌드 누적 후 기준** — 보스는 Phase 도중 빌드가 3~4개 쌓인 후 만나므로 실질 DPS 75~100 가정 → TTK 60~80초 성립 | -| 공격 패턴 수 | 2~3종 | 구간 1 레벨업 2~3회 완료 후 보스 진입 기준. 패턴 1은 느리고 가독 명확, 패턴 2는 빠르고 좁은 회피 윈도우 | -| 페이즈 전환 | HP 50% | 페이즈 2 진입 시 이동 속도 +0.5, 공격 간격 -0.2s | +| HP | 400 | 빌드 누적 실질 DPS 75~100 가정 → TTK 60~80초 성립 | +| 공격 패턴 수 | 2~3종 | 구간 1 레벨업 2~3회 완료 후 보스 진입 기준 | +| 페이즈 전환 | HP 50% | 페이즈 2 진입 시 이동 속도 +0.5, 공격 간격 -0.2s, ATK +1 | --- -## 6. 대미지 공식 (전투 핵심) +## 6. 대미지 공식 (전투 핵심) — 재작성 + +§3 "공격 수치"에 통합 이관. 본 섹션은 §3 공식 요약. ``` -// 플레이어 → 적 -EnemyHPResult = EnemyHP - (BaseDamage × CardMultiplier) +플레이어 → 적: + 최종 대미지 = 액티브 기본 × CardMultiplier × StackLevelFactor × AttributePassiveBonus + 각성 발동 시: 각성 기본 × CardMultiplier × AttributePassiveBonus -// 적 → 플레이어 -PlayerResult = DEAD (라이프 1 — 피격 즉사. i-frame 내 피격은 무효) +적 → 플레이어: + PlayerHP -= EnemyATK (쿼터 단위) + i-frame 내 피격 무효 ``` -단순성이 설계 의도. 방어 수치(DEF) 미도입 — `DEF/(DEF+200)` 패턴은 Phase 3-C 특성 확장 시 재검토. +DEF 스탯 미도입. 피해 감소는 패시브 `[방어]` 카드의 % 감소로 처리. --- ## 7. 플랫포머 타이밍 윈도우 (모바일 친화) -모바일 터치 평균 입력 지연: 75ms (하드웨어 + OS 스택). PC 기준 수치를 그대로 쓰면 모바일에서 10~20% 타이트하게 느껴짐. +모바일 터치 평균 입력 지연: 75ms. | 윈도우 | 값 | PC 유사 레퍼런스 | 모바일 조정 이유 | |---|---|---|---| | **Coyote Time** | 0.12 s | Celeste 0.08s | +50ms 터치 딜레이 보정 | | **Jump Buffer** | 0.15 s | Celeste 0.10s | +50ms 동일 | | **Edge Push** | 0.3 m | 미도입 사례 多 | 모바일 터치 정밀도 보정 신규 도입 | -| **최소 공격 판정 유지** | 0.05 s | — | 터치 tap 0.05s 이상 유지로 공격 판정 누락 방지 | + +**참고**: 공격 판정 유지 수치는 v0.1에서 폐기 — 공격 버튼 자체 제거. --- @@ -163,22 +204,28 @@ PlayerResult = DEAD (라이프 1 — 피격 즉사. i-frame 내 피격은 무효 | 시나리오 | 기대 결과 | 검증 방법 | |---|---|---| -| V-1: 일반 적(중) 1vs1 교전 | 공격 3타(1.2s) 처치, 피격 피하면 생존 | Play 모드 수동 | +| V-1: 일반 적(약) 1vs1 교전 | 액티브 A05(학익진) 자동 발동으로 3~4타 처치, 피격 시 1/4 하트 감소 | Play 모드 수동 | | V-2: 피격 직후 연속 히트 | i-frame 0.6s 내 2번째 적 공격 무효 | 로그 확인 | -| V-3: Coyote Time | 절벽 끝에서 0.12s 내 점프 성공 | 터치 입력 0.12s 시뮬 | -| V-4: Jump Buffer | 착지 직전 0.15s 전 입력으로 착지 즉시 점프 | 입력 타임스탬프 확인 | -| V-5: 보스 TTK 상한 | 카드 0장 기준 보스 HP 400 → DPS 50 → 8초 (단순 공격 반복) | 보스 테스트씬 | -| V-6: 모바일 Edge Push | 모바일 터치로 플랫폼 모서리 착지 성공률 >80% | 실기 QA | +| V-3: 하트 분할 시각화 | ATK 1 피격 시 풀 하트 → 3/4 하트 전환 표시 | HUD 시각 확인 | +| V-4: 최대 하트 수 증가 | P15 생명의 꽃 Lv.1 획득 시 최대 HP 4 → 8 쿼터 변환 | 인벤토리 로그 | +| V-5: Coyote Time | 절벽 끝에서 0.12s 내 점프 성공 | 터치 입력 0.12s 시뮬 | +| V-6: 보스 TTK 상한 | 카드 0장 기준 보스 HP 400 → DPS 기준 75~100초 | 보스 테스트씬 | +| V-7: 각성 발동 조건 | A05 Lv.5 + P01 or P07 보유 + 보물상자 획득 → AW05 발동 | 시나리오 재현 | +| V-8: 적 ATK 점진 강화 | Stage 5 진입 시 일반 적 ATK 2 (반 하트 감소) 확인 | 스테이지별 적 생성 로그 | +| V-9: 모바일 Edge Push | 모바일 터치로 플랫폼 모서리 착지 성공률 >80% | 실기 QA | --- ## 9. 리스크 1. **Coyote Time·Jump Buffer 중첩**: 두 윈도우가 동시 활성 시 의도치 않은 더블 점프처럼 보일 수 있음. 우선순위 명확화 필요 (Jump Buffer > Coyote Time). -2. **i-frame 0.6s + AttackCooldown 0.4s 조합**: 플레이어 공격 쿨다운 0.4s 중 피격 시 i-frame 0.6s → 피격 후 1~2회 공격 가능. 역으로 무적 중 역공 전술 고착화 가능성. Phase 3-C 평가. -3. **보스 HP 400 + 카드 배율 스택**: 카드 5장 이상 누적 시 CardMultiplier 2.5 → DPS 125 → TTK 3.2초. 보스 전투 허무화. **하드캡 DPS 100 (보스 기준 TTK 최저 4초)** 권고. -4. **KnockbackForce 3.0**: 지형에 따라 적이 낙사하여 처치 판정 누락 가능. 낙사 시 처치 처리 명시 필요. -5. **Edge Push 오작동**: 플랫폼 모서리에서 의도치 않게 올라가는 "등반 버그" 유사 현상. 수직 이동 성분 없이 수평 보정만 적용하도록 구현 제한 필요. +2. **i-frame 0.6s + 자동 발동 쿨다운 조합**: 플레이어 자동 발동 주기 중 피격 시 i-frame 0.6s → 피격 후 즉시 액티브 발동 가능. "피격 → 카운터 발동"의 전술 고착 가능성. Phase 3-C 평가. +3. **액티브 DPS 하드캡 필요**: 카드 5장+ 누적 시 CardMultiplier 2.5 × StackLevel 2.0 → DPS 폭증. 보스 허무화 방지 **하드캡 DPS 150 (보스 TTK 최저 3초)** 권고. +4. **회복 카드 어뷰징 (P13 단전수련·P14 감로수·P15 생명의 꽃)**: 과도한 쿼터 회복 스택 시 무한 생존 위험. 회복량 감소 곡선 + 쿨다운 + 최대 HP 상한 설계 필수 (`balance/02_레벨업_곡선.md` v0.2 §6). +5. **최대 하트 수 증가 상한**: 하트 5개+ 도달 시 게임 난이도 붕괴. **하드캡 3~5개** (초기 권고) + 상한 초과 시 P15·P16 재픽 시 재화 보상으로 전환. +6. **KnockbackForce 3.0**: 지형에 따라 적이 낙사하여 처치 판정 누락 가능. 낙사 시 처치 처리 명시 필요. +7. **Edge Push 오작동**: 플랫폼 모서리에서 의도치 않게 올라가는 "등반 버그" 유사 현상. 수직 이동 성분 없이 수평 보정만 적용. +8. **보물상자 스폰 빈도 과다 시 각성 남발**: 스테이지별 스폰 횟수 제한 필요. P23 재물복 패시브 스택 시에도 하드캡 존재 (balance-designer 결정). --- @@ -188,23 +235,28 @@ PlayerResult = DEAD (라이프 1 — 피격 즉사. i-frame 내 피격은 무효 | 항목 | 이유 | 우선순위 | |---|---|---| -| MoveSpeed 6.0 → 7.0 범위 최적화 | PlatformerMicrogame 템플릿 물리 설정 의존 | 최우선 | -| Gravity Scale 3.5 | 화면 해상도·카메라 줌 레벨에 따라 체감 완전히 다름 | 최우선 | -| i-frame 0.6s ± 조정 | 적 공격 패턴 구현 후 실체 연타 간격 측정 필요 | 우선 | -| Edge Push 0.3m 범위 | 실제 플랫폼 크기·충돌 레이어 구성 후 결정 | 우선 | -| 보스 HP 400 TTK 검증 | V-5 시나리오 빌드별 수행 | 보스 구현 후 | +| MoveSpeed 6.0 범위 최적화 | PlatformerMicrogame 템플릿 물리 설정 의존 | 최우선 | +| Gravity Scale 3.5 | 화면 해상도·카메라 줌 레벨 의존 | 최우선 | +| i-frame 0.6s ± 조정 | 적 공격 패턴 구현 후 실체 연타 간격 측정 | 우선 | +| **액티브 BaseCooldown 1.5s 검증** | 자동 발동 주기의 이펙트 중첩 가독성 | 우선 | +| **적 ATK 점진 강화 Stage별 체감 검증** | 하트 분할 구조에서 ATK 2~4 체감 조정 | 우선 | +| **하트 UI 분할 스프라이트 렌더링** | 풀·3/4·반·1/4·빈 5단계 시각 구분 | 우선 | +| 보스 HP 400 TTK 검증 | V-6 시나리오 빌드별 수행 | 보스 구현 후 | +| **각성 발동 연출 퍼포먼스** | 풀스크린 효과 + 액티브 변환 애니메이션 | 각성 구현 후 | | 모바일 Touch Delay 75ms 가정 검증 | 실기기 입력 측정 필요 | 실기 QA 단계 | --- ## 11. 기각안 -1. **MoveSpeed 8.0 제안 — 기각.** 과도한 이동 속도는 플랫폼 오버슈트 빈도 증가, 캐주얼 포지션에서 역오히려 불만 유발. 7.0 상한. -2. **GravityScale 5.0 제안 — 기각.** 점프 정점 체공 시간 0.3초 이하로 줄어 공중 회피 불가. 라이프 1 구조에서 치명적 불공정. 4.0 상한. -3. **i-frame 1.0초 제안 — 기각.** 보스 공격 패턴 대부분 무효화. 특히 보스 패턴 2종 이상일 경우 i-frame 체인으로 사실상 무적. 0.8초 상한 검토. -4. **i-frame 0.3초 제안 — 기각.** 04_전투_기본_스펙 기각안 3과 동일 취지. 연속 히트 방지 최소 0.5초 미달. -5. **DEF 스탯 도입 — 기각.** 라이프 1 즉사 구조에서 DEF 수치는 무의미 (죽거나 살거나). 복잡도만 증가. 특성 구현 시 Phase 3-C에서 재검토. -6. **AttackCooldown 0.6초 제안 — 기각.** DPS 33 → 일반 적 TTK 1.8초. 캐주얼 로그라이크에서 1.8초 교전은 단조하고 답답함. 0.5초 상한. +1. **MoveSpeed 8.0 제안 — 기각.** 과도한 이동 속도는 플랫폼 오버슈트 빈도 증가. 7.0 상한. +2. **GravityScale 5.0 제안 — 기각.** 점프 정점 체공 시간 0.3초 이하로 줄어 공중 회피 불가. 4.0 상한. +3. **i-frame 1.0초 제안 — 기각.** 보스 공격 패턴 대부분 무효화. 0.8초 상한 (P19 Lv.5 풀 스택 시). +4. **i-frame 0.3초 제안 — 기각.** 04_전투_기본_스펙 기각안 취지와 동일. 연속 히트 방지 최소 0.5초 미달. +5. **DEF 스탯 도입 — 기각.** 패시브 `[방어]` % 감소로 역할 대체. 복잡도만 증가. +6. **"수동 공격 보조 유지 (액티브 + 수동 병행)" — 기각 (BT7-Plan 신규).** PD 확정 방향 2에서 VS 순수형(이동·점프만) 명시. 수동 공격 병행은 복잡도 증가 + 자동 발동 감상 재미 저해. +7. **"적 ATK=1(즉사) 단일 설계 유지" — 기각 (BT7-Plan 번복).** v0.1은 라이프 1 전제 하 즉사 단일 설계였으나, BT7-Plan 확정 방향 7·8에서 하트 분할 + ATK 점진 강화로 전환. **기각안 유지(번복 기록)**. +8. **"보스 ATK를 항상 최대(하트 1개 전소)로 설정" — 기각 (BT7-Plan 신규).** 페이즈 1·2 차등 설계가 "회피 숙련도 성장" 재미를 형성. 항상 최대 ATK는 단조하고 불공정. --- @@ -213,3 +265,4 @@ PlayerResult = DEAD (라이프 1 — 피격 즉사. i-frame 내 피격은 무효 | 일시 | 변경 | 이전값 | 이후값 | 사유 | 기안 | |---|---|---|---|---|---| | 2026-04-22 | v0.1 초안 작성 | — | — | PD 지시 BT6-Plan Phase 3-B | 밸런스기획자 | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (수동 공격 폐기·자동 발동 수치·하트 분할 i-frame 재검토·적 ATK 점진 강화·각성 공식·회복 쿼터 단위) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/balance/02_레벨업_곡선.md b/프로젝트/EerieVillage/기획/balance/02_레벨업_곡선.md index 3c3716a..5979987 100644 --- a/프로젝트/EerieVillage/기획/balance/02_레벨업_곡선.md +++ b/프로젝트/EerieVillage/기획/balance/02_레벨업_곡선.md @@ -2,23 +2,23 @@ type: 밸런스_수치_초안 scope: 레벨업_곡선·보상_구조 author: 밸런스기획자 -date: 2026-04-22 -version: v0.1 (Phase 3-B 초안) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3-B -data_source: 03_진행_시스템_초안.md + 05_스테이지_구조_초안.md + 코어 룰 7 (레벨·카드 전손) + 9 (특성 영구) -status: 초안 — 스테이지 구간별 적 배치 확정 후 level-designer 교차 검증 필수 +data_source: 03_진행_시스템_초안.md + 05_스테이지_구조_초안.md + system/01_카드_시스템.md v0.2 + content/01_카드_풀.md v0.2 + BT7-Plan PD 확정 방향 11건 +status: 초안 — 스테이지 구간별 적 배치 확정 후 level-designer 교차 검증 필수 · 수치는 튜닝 대상 --- # 02. 레벨업 곡선 ## 1. 설계 전제 (P30 재미 정의 선행) -강화 대상 재미: **축 1 육성 롤러코스터** — "쌓기(카드 픽) → 폭발 → 낙차(전손)" 리듬. -- 목표: **1 스테이지(구간 1+2+3) 내 레벨업 4~6회**. 카드 4~6장 빌드로 보스 도전. +강화 대상 재미: **축 1 육성 롤러코스터** — "쌓기(카드 픽) → 폭발 → 낙차(전손)" 리듬. BT7-Plan 전환으로 **2축 드로우(액티브·패시브) + 각성 별도 트리거** 구조 반영. +- 목표: **1 스테이지(구간 1+2+3) 내 레벨업 4~6회**. 카드 4~6장 빌드 + 각성 발동 1~2회로 보스 도전. - 5~10분 런 가정 시 레벨업 1회당 50~90초 주기. -- 너무 자주(30초마다): 픽 결정 부담 과다, 흥분 희석. 너무 드물게(3분마다): 육성 재미 실종. -- **구간 1에서 2회 빠르게** 레벨업 → 빌드 시드 형성 → 구간 2에서 2~3회 → 빌드 확장 → 보스 진입. +- 너무 자주(30초마다): 픽 결정 부담 과다. 너무 드물게(3분마다): 육성 재미 실종. +- **구간 1에서 2회 빠르게** 레벨업 → 빌드 시드 형성 → 구간 2에서 2~3회 → 빌드 확장 + 보물상자 획득 → 구간 3 보스 진입. --- @@ -31,23 +31,23 @@ RunXP_총합 = Σ(적_처치_XP) + 보스_처치_XP + 이벤트_XP LevelUpRequired(Lv) = BASE_XP × Lv^EXPONENT (아래 §3 곡선 참조) ``` -### 경험치 획득 테이블 +### 경험치 획득 테이블 (초안·튜닝 대상) | 소스 | 기본 XP | 근거 | |---|---|---| -| **일반 적 (약)** | 8 XP | 구간 1 약 10마리 처치 → 80 XP. Lv1→2 목표 100 XP. 아이템 등 기타 소스로 잔여 보충 | -| **일반 적 (중)** | 12 XP | 구간 2 주력. 약 8마리 → 96 XP. Lv2→3·3→4 갱신 기여 | -| **엘리트** | 30 XP | 구간 2 후반 2~3기. 처치 시 즉시 레벨업 절반 이상 기여 → "엘리트 잡으면 레벨 쑥 오른다" 보상감 | -| **보스 처치** | 80 XP | 보스 처치 직후 즉시 1레벨업 보장(설계 의도). §4 보상 구조 참조 | +| **일반 적 (약)** | 8 XP | 구간 1 약 10마리 처치 → 80 XP | +| **일반 적 (중)** | 12 XP | 구간 2 주력 | +| **엘리트** | 30 XP | 구간 2 후반 2~3기 | +| **보스 처치** | 80 XP | 보스 처치 직후 즉시 1레벨업 보장(설계 의도) | | **이벤트·특수** | 10~20 XP | 숨겨진 방·함정 통과 등. Phase 3-C level-designer 설계 | +**P22 선견지명 패시브 적용 시**: 경험치 획득량 × (1 + Lv × 0.1), Lv.5 풀 스택 시 +50%. + --- ## 3. 레벨업 요구 경험치 곡선 -### 곡선 유형 선택: 수정 선형 복합 곡선 - -기각안 §8에 이유 명시. **BASE_XP 80, 증가 계수 20 (선형 증가)**로 결정. +### 곡선 유형: 수정 선형 복합 곡선 (v0.1 유지) ``` RequiredXP(Lv → Lv+1) = 80 + (Lv × 20) @@ -59,7 +59,7 @@ RequiredXP(Lv → Lv+1) = 80 + (Lv × 20) | **Lv 2 → 3** | 120 | 220 | 구간 1 후반~구간 2 초입 | | **Lv 3 → 4** | 140 | 360 | 구간 2 중반 | | **Lv 4 → 5** | 160 | 520 | 구간 2 후반·엘리트 처치 기여 | -| **Lv 5 → 6** | 180 | 700 | 보스 전 마지막 픽 기회 (보스 XP 80 포함 가능) | +| **Lv 5 → 6** | 180 | 700 | 보스 전 마지막 픽 기회 | | **Lv 6 → 7** | 200 | 900 | 다음 스테이지 초입 도달 가정 | | **Lv 7 → 8** | 220 | 1120 | — | @@ -68,7 +68,7 @@ RequiredXP(Lv → Lv+1) = 80 + (Lv × 20) 가정: 스테이지당 일반 적 약 15마리(약 7, 중 8), 엘리트 2기, 보스 1기. XP/스테이지 ≈ (7×8)+(8×12)+(2×30)+80 = 56+96+60+80 = **292 XP** -| 스테이지 종료 후 | 예상 누적 XP | 예상 레벨 | 보유 카드 수 | +| 스테이지 종료 후 | 예상 누적 XP | 예상 레벨 | 보유 카드 수 (액티브+패시브) | |---|---|---|---| | Stage 1 종료 | ~292 | Lv 3~4 | 3~4장 | | Stage 2 종료 | ~584 | Lv 5~6 | 5~6장 | @@ -76,62 +76,92 @@ XP/스테이지 ≈ (7×8)+(8×12)+(2×30)+80 = 56+96+60+80 = **292 XP** | Stage 4 종료 | ~1168 | Lv 7~8 | 7~8장 | | Stage 5 종료 | ~1460 | Lv 8~9 | 8~9장 | -**5스테이지 완주 시 카드 8~9장** — 빌드 다양성 충분, 시너지 탐색 여지 확보. 10장 초과 시 관리 복잡도 과다 → **런 내 카드 최대 10장 하드캡** 권고. +**각성 발동 기대치**: Stage 3~4 구간에서 첫 각성 조건 충족 가능 (액티브 Lv.5 도달 + 필요 패시브 1개 이상 + 보물상자 획득). --- -## 4. 카드 드로우 확률 (레어리티별) +## 4. 카드 드로우 확률 — 액티브·패시브 2축 재설계 (BT7-Plan 재작성) -### 설계 전제 +### 설계 전제 (BT7-Plan 확정 방향 3·10) -03_진행_시스템 §3-3 "초반은 기본 카드, 후반은 고급·레어 카드 확률 상승" 방향 계승. +**구 4티어 레어리티(Common/Uncommon/Rare/Epic) 폐기**. 액티브·패시브 2축 드로우로 전환. 각성 카드는 별도 풀(보물상자 트리거). ### 픽 알고리즘 ``` 레벨업 트리거 시: - 1. 현재 레벨에 따라 티어별 가중치 계산 + 1. 현재 레벨·빌드 태그에 따라 액티브 vs 패시브 비율 가중 결정 2. 카드 풀에서 가중치 기반 3장 비복원 추출 (중복 방지) 3. 3장 제시 → 1장 선택 + +보물상자 획득 시 (별도 경로): + 1. 각성 발동 조건 3종 충족 판정 (액티브 Lv.5 + 필요 패시브 1개 이상) + 2. 충족 시 → 해당 각성 카드 즉시 발동 + 3. 불충족 시 → 대체 보상 (재화·회복·경험치 중 1종) ``` -### 티어별 출현 확률 테이블 (레벨별) +### 액티브·패시브 2축 드로우 비율 (초안·튜닝 대상) -| 레벨 | Common (기본) | Uncommon (고급) | Rare (레어) | Epic (에픽) | -|---|---|---|---|---| -| Lv 1~2 | 70% | 25% | 5% | 0% | -| Lv 3~4 | 50% | 35% | 13% | 2% | -| Lv 5~6 | 30% | 40% | 22% | 8% | -| Lv 7~8 | 15% | 35% | 35% | 15% | -| Lv 9+ | 5% | 25% | 40% | 30% | +| 레벨 | 액티브 비율 | 패시브 비율 | 근거 | +|---|---|---|---| +| **Lv 1~2** | 70% | 30% | 초반은 자동 발동 무기 확보 우선 (최소 2~3개 액티브 기반 형성) | +| **Lv 3~4** | 50% | 50% | 중반은 액티브 스택 업그레이드 + 패시브 속성 강화 병행 | +| **Lv 5~6** | 35% | 65% | 후반은 기존 액티브 Lv 업 + 각성 조건 패시브 수집 중심 | +| **Lv 7~8** | 25% | 75% | 각성 발동 대기·추가 각성 준비 단계 | +| **Lv 9+** | 20% | 80% | 빌드 완성 + 각성 다중 발동 조건 충족 노림 | #### 확률 설계 근거 -- **초반 Common 70%**: 기본 카드로 빌드 방향 탐색. 시너지 태그를 먼저 익히는 학습 단계. -- **Lv 3~4 분기점**: Rare가 13% 등장 → "첫 레어를 얻었다!" 흥분 포인트. 너무 이르면 기대 소진. -- **Lv 5~6 Epic 8%**: 스테이지 2 후반 ~ 3에서 처음 Epic 가능. 각 런의 하이라이트. -- **Lv 9+ 레어+에픽 70%**: 고 스테이지 클리어 시 강한 빌드 구성 가능 → 특성 축적의 보상. +- **초반 액티브 70%**: 자동 발동 무기가 DPS 공급원이므로 우선 확보. 패시브만 쌓으면 적 처치 불가 +- **Lv 3~4 50/50**: 액티브 Lv 업과 패시브 속성 강화가 균형. 이 시점에 첫 액티브 Lv.5 달성 가능성 발생 +- **Lv 5+ 패시브 비중 상승**: 각성 조건의 "필요 패시브 1개 이상 보유"를 충족하려면 패시브 다양성 필요 +- **풀 고갈 시 필터 해제**: 액티브 15~20종 기준 Lv 5 후반에 풀 소진 위험, 강제 패시브 제공 케이스 대비 -#### 어뷰징 경계 초기 가드 +### 하위 가중치 — 태그 시너지 보너스 -- **동일 카드 3중 픽 방지**: 동일 카드가 3장 추출 풀에 2장 이상 포함되면 1장으로 강제 대체. -- **티어 잠금 최소 기준**: Epic 카드는 Lv 4 미만 절대 등장 금지 (하드코딩). 확률 수치가 0%라도 코드 예외 처리. -- **카드 스택 배율 상한**: 같은 카드 2장 이상 픽 시 배율 상한 × 1.5 → 스팸 배율 무한 증가 방지. +현재 빌드의 주력 태그 2개에 해당하는 카드에 **+30% 가중치** 부여 (초안, 튜닝 대상). + +### 어뷰징 경계 초기 가드 + +- **동일 카드 3중 픽 방지**: 동일 카드가 3장 추출 풀에 2장 이상 포함되면 1장으로 강제 대체 (Lv.5 미만 카드에만 적용) +- **카드 스택 배율 상한**: Lv.5 풀 스택 시 StackLevelFactor 2.0 하드캡. 초과 시 Lv.5 고정 표시 +- **각성 카드 드로우 차단**: 각성 카드는 레벨업 드로우 풀에 **절대 등장 금지** (하드코딩). 오직 보물상자 획득 경로로만 발동 --- -## 5. 보상 구조 (보스 처치) +## 5. 보상 구조 (보스 처치 + 보물상자) ### 보스 처치 시 보상 패키지 -보스 처치는 스테이지의 "빌드 검증 이벤트". 보상은 **다음 스테이지 진입 결정**에 영향을 준다. - | 보상 항목 | 값/확률 | 근거 | |---|---|---| -| **경험치** | 80 XP (고정) | Lv업 요구 XP의 50~80% 수준. "보스 잡으면 거의 레벨업" 보상감. 정확히 1레벨업 보장은 지양 (맥락 박탈) | -| **아이템 드롭** | 1개 (100%) | 항상 파츠 1개 드롭. 교체·포기 선택 압박이 보스 직후 감정 집중. 등급 확률: Common 50% / Uncommon 35% / Rare 15% | -| **특성 언락 재화** | Phase 3-C | 메타 재화 존재 여부 미결 (03_진행_시스템 §5-1 보류). 도입 시 보스 드롭 주 소스 예정 | -| **선택 분기** | 마을 or 다음 스테이지 | 보상 획득 후 의사결정 (코어 룰 5). 보상 자체가 아니라 "다음 선택지를 여는 열쇠" | +| **경험치** | 80 XP (고정) | Lv업 요구 XP의 50~80% 수준 | +| **아이템 드롭** | 1개 (100%) | 파츠 1개 드롭. 등급: Common 50% / Uncommon 35% / Rare 15% | +| **보물상자 확정 드롭 (신규, BT7-Plan)** | 100% | 보스 처치 시 보물상자 1개 확정 → 각성 발동 기회 제공 | +| **특성 언락 재화** | Phase 3-C | 메타 재화 보류 | +| **선택 분기** | 마을 or 다음 스테이지 | 보상 획득 후 의사결정 (코어 룰 5) | + +### 보물상자 체계 (신규, BT7-Plan 확정 방향 10) + +스테이지 진행 중 보물상자는 다음 조건으로 스폰된다: + +| 스폰 조건 | 빈도 | 근거 | +|---|---|---| +| **스테이지 구간별 확정 스폰** | 각 구간 1회 (총 3회/스테이지) | 최소 1~2회 각성 시도 기회 보장 | +| **엘리트 적 처치 시** | 50% 확률 | 엘리트 리스크 보상 | +| **보스 처치 시** | 100% 확정 (§5 상단) | 각성 확정 기회 | +| **P23 재물복 패시브 적용 시** | +20%~50% 확률 증가 | 각성 빌드 특화 패시브 | + +**보물상자 획득 시 판정 플로우**: + +``` +1. 현재 빌드에서 각성 조건 충족 카드 리스트 조회 + - 액티브 Lv.5 도달 + 필요 패시브[] 중 1개 이상 보유 = 조건 충족 +2. 조건 충족 카드 수 판정: + (a) 0개 → 대체 보상 제공 (재화 or 쿼터 회복 or 경험치 30 중 가중 랜덤) + (b) 1개 → 즉시 해당 각성 발동 + (c) 2개 이상 → 플레이어 선택 UI 제공 (중 1개 발동) +``` ### 보상 비율 조정 레버 @@ -140,21 +170,38 @@ XP/스테이지 ≈ (7×8)+(8×12)+(2×30)+80 = 56+96+60+80 = **292 XP** StageDepth = 현재 스테이지 번호 (1~5+) RareWeight = BaseRareWeight + (StageDepth - 1) × 5% → Stage 1 보스: Rare 15%, Stage 3 보스: Rare 25%, Stage 5 보스: Rare 35% + +// 보물상자 대체 보상 (각성 조건 미충족 시) +Stage 1~2: 재화 60% / 쿼터 회복 30% / 경험치 10% +Stage 3~5: 재화 40% / 쿼터 회복 40% / 경험치 20% (후반일수록 회복 가치 상승) ``` --- -## 6. 어뷰징 경계값 초기 가드 (Phase 3-C 상세 위임) +## 6. 어뷰징 경계값 초기 가드 (BT7-Plan 재작성) 본 단계에서는 **명백한 어뷰징 패턴**에 대한 1차 가드만 정의. 상세 밸런싱은 Phase 3-C. | 어뷰징 패턴 | 초기 가드 | Phase 3-C 이관 | |---|---|---| -| **체력 회복 스팸** | 라이프 1 구조상 회복 없음 (04_전투 §3-1). 회복 아이템 도입 시 1회 제한 쿨다운 60초 기본 가이드 | 회복 아이템 도입 여부 결정 후 | -| **Experience Delay 악용** | 적을 죽이지 않고 대기하여 보스 전 미레벨업 유도 → 보스 처치 XP 80으로 Rare 레벨 진입. 가드: 보스 XP 적용 전 레벨업 차단 (보스 레벨 기준 픽 산정) | XP 처리 순서 코드 레벨 | -| **카드 배율 무한 스택** | 동일 카드 재픽 배율 상한 ×1.5 하드캡 (§4) | 카드 시스템 구현 후 수치 조정 | +| **회복 카드 스팸 (P13·P14·P15·P16)** | (1) 쿼터 회복량 감소 곡선: 같은 카드 스택마다 회복량 × 0.8. (2) 회복 쿨다운 기본 60초, 카드 효과로 최소 30초 이하 금지. (3) 최대 하트 수 상한 **하드캡 5개**. (4) P15·P16 중복 스택 시 효과 중첩 X (각 카드 별도 계산, 둘 다 Lv.5 = +2 하트) | 회복 아이템 도입 여부 결정 후 | +| **보물상자 각성 남발 (P23 재물복 어뷰징)** | P23 Lv.5 풀 스택 시 보물상자 확률 +50% 하드캡. 스테이지당 보물상자 최대 8개 하드캡 | 보물상자 체계 구현 후 | +| **Experience Delay 악용** | 적을 죽이지 않고 대기하여 보스 전 미레벨업 유도 → 보스 처치 XP 80 탐 | XP 처리 순서 코드 레벨 | +| **카드 배율 무한 스택** | 동일 카드 재픽 Lv.5 도달 시 하드캡. StackLevelFactor 2.0 상한 | 카드 시스템 구현 후 수치 조정 | | **보스 딜레이 패턴** (보스를 일부러 안 죽이고 구간 2 적 파밍) | 보스 방 진입 후 후방 차단 (05_스테이지 §3-2). 방 밖 파밍 불가 구조 | 맵 구현 후 | -| **엣지 Push 등반 버그** | 수직 성분 없는 수평 보정만 허용 (01_전투 §9 리스크 5) | 개발팀 구현 시 | +| **엣지 Push 등반 버그** | 수직 성분 없는 수평 보정만 허용 | 개발팀 구현 시 | + +### 슬롯 분리 재설계 (v0.1 "10장 하드캡" 폐기) + +**BT7-Plan 확정 방향 6·9 반영** — VS 원작 6/6 슬롯 참고. + +| 슬롯 유형 | 상한 | 근거 | +|---|---|---| +| **액티브 슬롯** | **6개** | VS 원작 참고. 액티브 15~20종 풀 대비 충분한 다양성 확보 | +| **패시브 슬롯** | **6개** | VS 원작 참고. 패시브 25종 풀 대비 선택 집중 유도 | +| **각성 슬롯** | **액티브 슬롯 내 진화** (별도 슬롯 아님) | 각성 발동 시 원 액티브가 각성 형태로 대체 | + +슬롯 상한 초과 시 **교체 or 포기 선택 UX** 필수 (ux-designer 이관). --- @@ -171,7 +218,7 @@ RareWeight = BaseRareWeight + (StageDepth - 1) × 5% 0 +----+----+----+----+----+----+----+----+----+ S1 S2 S3 S4 S5 (스테이지) -레벨 +카드 누적 (액티브 + 패시브) 9 | ● 8 | ● 7 | ● @@ -180,20 +227,30 @@ RareWeight = BaseRareWeight + (StageDepth - 1) × 5% 4 |●(S1 종료 예상) +----+----+----+----+---- S1 S2 S3 S4 S5 -``` -선형 증가 구조로 스테이지별 레벨 도달이 예측 가능 → 콘텐츠 설계·적 배치 기준 명확. +각성 발동 기대치 + 3 | ● (Stage 5 = 다중 각성) + 2 | ● + 1 | ● (Stage 3 = 첫 각성) + 0 |● ─ ─ ● + +----+----+----+----+---- + S1 S2 S3 S4 S5 +``` --- ## 8. 기각안 -1. **기하급수 곡선 `RequiredXP = 100 × 1.4^Lv` 제안 — 기각.** Lv 6에서 요구 XP 537. 5~10분 런 내 Lv 5~6 도달이 사실상 불가. 카드 4장 이상 누적이 불가능해져 축 1 육성 재미 붕괴. 기하급수는 장기 RPG에 적합. -2. **순수 선형 `RequiredXP = 100 고정` 제안 — 기각.** 모든 레벨업이 동일 시간 → 긴장감·성취감 없음. 후반 레벨업이 쉬워서 고레벨 카드(Rare·Epic) 도달 너무 빠름 → 초반 Common 카드 의미 약화. -3. **스테이지마다 XP 초기화 — 기각.** 런 내 성장(축 A)의 흐름을 스테이지 경계에서 끊음. 레벨·카드는 다음 스테이지에 **연속 계승**이 03_진행_시스템 설계 의도. 전손은 사망 시에만. -4. **보스 XP 0 (보스는 아이템만 드롭) — 기각.** 보스 처치 후 즉각 보상감이 없어 클라이맥스 감정 약화. XP 80으로 "보스 잡으면 거의 레벨업" 피드백 유지. -5. **Epic 카드 Lv 3 등장 허용 — 기각.** 초회차 첫 스테이지에서 Epic 빌드 완성 가능 → 게임 난이도 즉시 붕괴. Lv 4+ 하드캡 유지. -6. **드로우 3픽 → 2픽 제안 — 기각.** 03_진행_시스템 기각안 4와 동일 근거. 선택 긴장·시너지 탐색 최소 임계는 3장. +1. **기하급수 곡선 `RequiredXP = 100 × 1.4^Lv` 제안 — 기각 (현행 유지).** Lv 6에서 요구 XP 537. 5~10분 런 내 Lv 5~6 도달 불가. 기하급수는 장기 RPG에 적합. +2. **순수 선형 `RequiredXP = 100 고정` 제안 — 기각 (현행 유지).** 긴장감 없음, 고레벨 카드 도달 너무 빠름. +3. **스테이지마다 XP 초기화 — 기각 (현행 유지).** 런 내 성장 흐름 연속 보장. +4. **보스 XP 0 (보스는 아이템만 드롭) — 기각 (현행 유지).** 보스 처치 후 즉각 보상감 유지. +5. **"Epic 카드 Lv 3 등장 허용" 기각 — 폐기 (BT7-Plan 구조 변화).** Epic·Rare·Common 레어리티 구조 자체 폐기. 액티브·패시브 2축으로 대체. v0.1 기각안 5는 **구조 변화로 실효**. +6. **"드로우 3픽 → 2픽 제안" — 기각 (현행 유지).** 선택 긴장 최소 임계 3장. +7. **"레벨업 드로우에 각성 카드 포함" — 기각 (BT7-Plan 신규).** 각성은 보물상자 경로 전용. 레벨업 드로우 포함 시 조건 미충족 각성 카드가 무의미 등장. +8. **"보물상자 무제한 스폰" — 기각 (BT7-Plan 신규).** 각성 남발 방지 스테이지당 8개 하드캡 + P23 확률 상한 50% 하드캡. +9. **"카드 10장 하드캡 단일 설계 유지" — 기각 (BT7-Plan 번복).** v0.1은 "런 내 카드 최대 10장 하드캡"이었으나 BT7-Plan에서 액티브 6 + 패시브 6 슬롯 분리로 재설계 (VS 원작 참고). **기각안 유지(번복 기록)**. +10. **"각성 조건 완화 (액티브 Lv.5만 충족하면 자동 발동)" — 기각 (BT7-Plan 신규).** PD 확정 방향 5 "VS 원작 동일"에 위배. 필요 패시브 + 보물상자 3종 동시 충족 필수. --- @@ -201,11 +258,14 @@ RareWeight = BaseRareWeight + (StageDepth - 1) × 5% | 항목 | 이유 | 의존 주체 | |---|---|---| -| 스테이지당 적 수 실측 | 예상 XP/스테이지 292는 적 15마리 가정 — 실제 배치 확정 후 재산출 | level-designer | -| 카드 풀 규모 확정 | 비복원 3장 추출 시 풀이 10장 미만이면 중복 불가 가드 충돌 | system-designer | -| 레어리티 수 확정 | Epic 미도입 시 Rare 40%로 병합 필요 | system-designer | -| XP 처리 순서 (보스 XP + 레벨업 판정) | 어뷰징 가드 §6과 코드 레벨 정합 | 개발팀 | -| 카드 최대 10장 하드캡 UI | 10장 초과 픽 시 교체 or 포기 선택 UX 필요 | ux-designer | +| 스테이지당 적 수 실측 | 예상 XP/스테이지 292는 적 15마리 가정 | level-designer | +| 카드 풀 규모 확정 (50~65장) | 비복원 3장 추출 시 풀 고갈 시점 검증 | system-designer | +| **보물상자 스폰 위치 설계** | 구간별 3회 확정 + 엘리트 드롭 50% 조건 확정 | level-designer | +| **각성 발동 빈도 실측** | 스테이지 3에서 첫 각성 가능 설계 검증 | balance·system 교차 | +| XP 처리 순서 (보스 XP + 레벨업 판정) | 어뷰징 가드 §6과 코드 정합 | 개발팀 | +| **액티브/패시브 슬롯 6/6 UI** | VS 원작 스타일 슬롯 UI | ux-designer | +| **슬롯 초과 시 교체·포기 UX** | 6개 초과 픽 시 결정 UI | ux-designer | +| 최대 하트 수 상한 5개 검증 | 게임 난이도 붕괴 방지 | 개발팀 실측 | --- @@ -214,3 +274,4 @@ RareWeight = BaseRareWeight + (StageDepth - 1) × 5% | 일시 | 변경 | 이전값 | 이후값 | 사유 | 기안 | |---|---|---|---|---|---| | 2026-04-22 | v0.1 초안 작성 | — | — | PD 지시 BT6-Plan Phase 3-B | 밸런스기획자 | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (액티브/패시브 2축 드로우·슬롯 6/6 분리·보물상자 체계·회복 쿼터 단위 어뷰징 가드·각성 별도 경로) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/content/01_카드_풀.md b/프로젝트/EerieVillage/기획/content/01_카드_풀.md index db6d308..2980043 100644 --- a/프로젝트/EerieVillage/기획/content/01_카드_풀.md +++ b/프로젝트/EerieVillage/기획/content/01_카드_풀.md @@ -2,19 +2,19 @@ type: 컨텐츠_설계 scope: 스킬_카드_풀 author: 컨텐츠_기획팀장 -date: 2026-04-22 -version: v0.1 (Phase 3-B 파일럿) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3-B -data_source: 03_진행_시스템_초안.md (3축 구조) · 04_전투_기본_스펙.md · PD 코어 룰 6 -status: 예시 셋 — 수치·확률은 balance-designer 이관 · 세계관 톤은 narrative-designer 확정 예정 +data_source: 03_진행_시스템_초안.md · 04_전투_기본_스펙.md v0.2 · system/01_카드_시스템.md v0.2 · BT7-Plan PD 확정 방향 11건 +status: 초안 — 수치·확률은 balance-designer 이관 · 세계관 특화 용어는 narrative-designer PD 후속 검토 대기 --- # 01. 스킬 카드 풀 ## 1. 재미 축 연결 -- **축 1 (육성 롤러코스터)**: 카드 풀이 다양할수록 런마다 빌드가 달라지고 "쌓는 재미" 변주 가능 +- **축 1 (육성 롤러코스터)**: 카드 풀이 다양할수록 런마다 빌드가 달라지고 "쌓는 재미" 변주 가능. 액티브·패시브 각성 3분류 구조가 "조건 형성 → 각성 발동" 카타르시스 제공 - 모든 카드는 "왜 이 카드를 픽하고 싶은가"에 답할 수 있어야 한다 (P30) - 명확한 상위호환 금지 — 상황·빌드 방향에 따라 선택지가 유의미하게 달라야 한다 @@ -22,145 +22,205 @@ status: 예시 셋 — 수치·확률은 balance-designer 이관 · 세계관 ## 2. 카드 체계 개요 -### 2-1. 티어 정의 +### 2-1. 카드 3분류 (BT7-Plan 확정 방향 3·6) -| 티어 | 레이블 | 출현 타이밍 | 성격 | -|------|--------|-----------|------| -| **1티어 (기본)** | 보통 | 초반 레벨업 가중 | 단일 효과, 조합 진입점 | -| **2티어 (상급)** | 귀 | 중반 이후 출현 증가 | 복합 효과, 시너지 촉매 | -| **3티어 (희귀)** | 신 | 후반 레어 출현 | 빌드 완성자, 강력한 단일 효과 | +**구 4티어 레어리티(Common/Uncommon/Rare/Epic) 폐기**. VS 원작 계승 3분류 구조. -### 2-2. 태그 체계 (시너지 기준 축) +| 분류 | 성격 | 규모 | 발동 방식 | +|------|------|------|----------| +| **액티브** | 자동 발동 무기·스킬 (판정·주기·대미지 보유) | 15~20종 | 장착 즉시 자동 발동. Lv.5까지 스택 업그레이드 | +| **패시브** | 상시 스탯·효과 보정 (공격력·속도·하트 수·회피 등) | 25종 이내 | 장착 즉시 상시 적용. Lv.5까지 스택 업그레이드 | +| **각성** | 액티브+패시브 조합 충족 시 진화 카드 | 15~20종 | 별도 풀. 조건 충족(액티브 Lv.5 + 필요 패시브 + 보물상자) 시 드로우·발동 | + +**총 카드 풀 규모**: 50~65장. + +### 2-2. 태그 체계 — 일반 RPG 용어 임시 재작성 (BT7-Plan 확정 방향 11) + +**세계관 특화 용어(한자·조선 퇴마)는 PD 후속 검토 대기** — narrative-designer가 추후 일괄 재매핑 예정. + +**속성 태그 (후보 5종)**: | 태그 | 의미 | |------|------| -| `[공격]` | 기본 공격 강화 계열 | -| `[부적]` | 부적·주문 계열 (시전 효과) | -| `[주술]` | 지속 시간 효과·DoT 계열 | -| `[소환]` | 소환물·분신 계열 | -| `[방호]` | 피해 감소·실드·회피 계열 | -| `[속도]` | 이동·공격 속도 계열 | -| `[회복]` | 실드 회복·생존 연장 계열 | -| `[폭발]` | 범위·연쇄 계열 | +| `[물리]` | 순수 타격·관통 계열 | +| `[화염]` | 지속 대미지·점화 계열 | +| `[냉기]` | 둔화·빙결 계열 | +| `[번개]` | 연쇄·즉발 계열 | +| `[암흑]` | 저주·DoT·약화 계열 | + +**유형 태그 (후보 6종)**: + +| 태그 | 의미 | +|------|------| +| `[근접]` | 플레이어 주변 판정 | +| `[원거리]` | 투사체·원격 판정 | +| `[범위]` | AoE·다중 타격 | +| `[지속]` | 설치·오라·DoT | +| `[회복]` | 하트 쿼터 회복·실드 | +| `[방어]` | 피해 감소·회피 확률·i-frame 연장·하트 수 증가 | + +**PD 후속 검토 요청**: 본 태그 후보 5+6 = 11종은 balance·content 작업을 위한 임시 구조. narrative-designer가 세계관 톤(조선 퇴마·한자 네이밍)으로 일괄 재매핑하여 최종 확정할 예정 (PD님 검토·지시 대기). --- -## 3. 카드 풀 예시 (32장) +## 3. 카드 풀 재분배 (50~65장) -> **수치 표기 원칙**: "대미지 증가", "속도 상승" 등 방향성만 기재. 구체 수치는 balance-designer 이관. +> **수치 표기 원칙**: "대미지 증가", "속도 상승" 등 방향성만 기재. 구체 수치는 balance-designer 이관. 카드 이름은 세계관 톤 보류(v0.1 기존 한자 네이밍 유지 — narrative 영역 건드리지 않음 · PD 지시). -### [공격 강화] 카테고리 — 기본 공격을 핵심으로 성장시키는 빌드 축 +### 3-1. 액티브 카드 (15~20종) -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 01 | **봉황격(鳳凰擊)** | 1 | `[공격]` | 기본 공격 대미지 증가 | `[공격]` 카드 2장 이상 시 추가 효과 | -| 02 | **천둥발(天動撥)** | 1 | `[공격]` | 공격 판정 범위 확대 | `[폭발]` 태그와 연계 시 파편 발생 | -| 03 | **일격필살(一擊必殺)** | 2 | `[공격]` | 공격 적중 시 일정 확률로 2배 대미지 | `[속도]` 태그와 연계 시 발동률 상승 | -| 04 | **학익진(鶴翼陣)** | 2 | `[공격]` `[폭발]` | 공격 시 좌우 부채꼴 범위 추가 판정 | `[부적]` 태그 보유 시 넓어짐 | -| 05 | **천지신명(天地神明)** | 3 | `[공격]` `[폭발]` | 공격마다 지면에 충격파 발생 | 단독 채용 시에도 강력한 완성자 | +**자동 발동형 무기·스킬**. 기본 공격 강화 효과(구 v0.1 [공격] 태그 5장)는 폐기 — 공격 버튼 자체가 제거되었으므로 "기본 공격 강화"는 무의미. -### [부적] 카테고리 — 시전형 단발 효과. 런 내 "한 방" 카드군 +| # | 카드 이름 | 태그 | 효과 요지 | 시너지 힌트 | +|---|-----------|------|-----------|------------| +| A01 | **진언부(眞言符)** | `[원거리]` `[물리]` | 전방에 부적 자동 투척 (주기 N초) | `[물리]` 패시브 시너지 | +| A02 | **화염부(火焰符)** | `[원거리]` `[화염]` | 부적 투척 + 화염 DoT 부여 | `[화염]` 누적 시 점화 중첩 | +| A03 | **봉인부(封印符)** | `[원거리]` `[암흑]` | 투척 적중 시 행동 정지 (저주) | `[암흑]` 시너지 | +| A04 | **뇌격부(雷擊符)** | `[원거리]` `[번개]` `[범위]` | 투척 부적이 연쇄 번개 발생 | 밀집 구간 필살 | +| A05 | **학익진(鶴翼陣)** | `[근접]` `[범위]` `[물리]` | 주변 부채꼴 범위 자동 타격 (주기 N초) | `[근접]` 시너지 | +| A06 | **독안개(毒霧)** | `[지속]` `[암흑]` | 이동 경로에 독 안개 잔존, 접촉 적 DoT | `[지속]` 중첩 | +| A07 | **혼백박멸(魂魄薄滅)** | `[범위]` `[암흑]` | 주기적으로 주변 약화 오라 발생 | 소환·DoT 연계 | +| A08 | **저주문(詛呪文)** | `[원거리]` `[암흑]` `[지속]` | 자동 발동 시 적에게 저주 스택, N스택 시 폭발 | 자동 발동 주기 빠를수록 스택 가속 | +| A09 | **허수아비(藁人形)** | `[지속]` `[방어]` | 이동 경로에 허수아비 설치, 적 어그로 유도 | `[방어]` 시너지 | +| A10 | **분신술(分身術)** | `[근접]` `[물리]` | 분신 1기 자동 공격 | `[물리]` 패시브 공유 | +| A11 | **도깨비불소환** | `[원거리]` `[암흑]` `[지속]` | 도깨비불 2기 자동 발동, 랜덤 적 추적 + DoT | `[지속]` 빌드 활성 | +| A12 | **쾌속검(快速劍)** | `[근접]` `[물리]` | 전방 연속 베기 (주기 빠름) | `[물리]` 시너지 | +| A13 | **천둥발(天動撥)** | `[범위]` `[번개]` | 주변 원형 번개 판정 (주기 N초) | `[번개]` 중첩 | +| A14 | **빙결창(氷結槍)** | `[원거리]` `[냉기]` | 투창 자동 발사, 적중 시 둔화 | `[냉기]` 시너지 | +| A15 | **귀화(鬼火)** | `[원거리]` `[화염]` `[지속]` | 유도 화염구 자동 발사, 접촉 점화 | `[화염]` 중첩 | +| A16 | **일격필살(一擊必殺)** | `[근접]` `[물리]` | 일정 확률 자동 회심 공격 (주기 N초) | `[물리]` 확률 증폭 | +| A17 | **결계장벽(結界障壁)** | `[방어]` `[지속]` | 전방 고정 실드 자동 설치, 적 저지 | `[방어]` 시너지 | +| A18 | **무영보(無影步)** | `[방어]` `[근접]` | 주기적 짧은 순간 무적 대시 자동 발동 | `[방어]` 시너지 | -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 06 | **진언부(眞言符)** | 1 | `[부적]` | 전방에 부적 투척, 접촉 몬스터 피해 | `[부적]` 3장 이상 시 관통 판정 | -| 07 | **화염부(火焰符)** | 1 | `[부적]` `[주술]` | 부적 적중 시 화염 DoT 부여 | `[주술]` 태그 강화 시 지속 시간 연장 | -| 08 | **봉인부(封印符)** | 2 | `[부적]` | 적중 몬스터 일정 시간 행동 정지 | `[소환]` 카드와 조합 시 처치 보너스 | -| 09 | **뇌격부(雷擊符)** | 2 | `[부적]` `[폭발]` | 투척 부적이 연쇄 번개로 근접 적 피해 | 밀집 구간 필살기 역할 | -| 10 | **천부경문(天符經文)** | 3 | `[부적]` | 화면 전체 부적 전개, 전 적 피해 | 런 마무리 구간 단독 완성자 | +**기본 시작 무기 (1종)**: 퇴마사 고유 무기 (VS 원작 캐릭터 고유 무기 대응). v0.1 세부 결정 대기 — balance·content 협의. 기본 무기는 A01~A18 중 1종을 기본 장착 or 별도 카드로 설계. -### [주술] 카테고리 — 지속 효과·DoT로 "시간이 지날수록 강해지는" 빌드 축 +### 3-2. 패시브 카드 (25종 이내) -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 11 | **독안개(毒霧)** | 1 | `[주술]` | 이동 경로에 독 안개 잔존, 접촉 적 DoT | `[주술]` 카드 중복 시 효과 중첩 | -| 12 | **혼백박멸(魂魄薄滅)** | 2 | `[주술]` | 주기적으로 주변에 약화 오라 발생 | `[소환]` 태그와 연계 시 소환물도 약화 부여 | -| 13 | **저주문(詛呪文)** | 2 | `[주술]` `[부적]` | 공격 적중 적에게 저주 스택 부여, N스택 시 폭발 | `[공격]` 태그로 스택 가속 | -| 14 | **사령결계(死靈結界)** | 3 | `[주술]` | 발동 시 범위 내 전 적에게 대형 DoT 적용 | `[주술]` 빌드의 최종 완성자 | +**상시 스탯 보정**. 액티브 효율 증폭 + 각성 조건 형성. -### [소환] 카테고리 — 분신·소환물로 "나를 도와주는 동료" 재미 축 +| # | 카드 이름 | 태그 | 효과 요지 | 시너지 힌트 | +|---|-----------|------|-----------|------------| +| P01 | **봉황격(鳳凰擊)** | `[물리]` | 모든 액티브 대미지 증가 | 범용 | +| P02 | **화염강화(火焰强化)** | `[화염]` | `[화염]` 태그 액티브 대미지 증가 | `[화염]` 빌드 핵심 | +| P03 | **냉기강화(冷氣强化)** | `[냉기]` | `[냉기]` 태그 액티브 대미지 증가 | `[냉기]` 빌드 핵심 | +| P04 | **뇌전강화(雷電强化)** | `[번개]` | `[번개]` 태그 액티브 대미지 증가 | `[번개]` 빌드 핵심 | +| P05 | **어둠강화(暗黑强化)** | `[암흑]` | `[암흑]` 태그 액티브 대미지 증가 | `[암흑]` 빌드 핵심 | +| P06 | **연사술(連射術)** | `[물리]` | 모든 액티브 발동 주기 단축 | 범용 고부가 | +| P07 | **광역확장(廣域擴張)** | `[범위]` | 액티브 판정 범위 증가 | `[범위]` 빌드 | +| P08 | **투사체증폭(投射體增幅)** | `[원거리]` | `[원거리]` 액티브 투사체 수 증가 | `[원거리]` 빌드 | +| P09 | **지속시간연장(持續延長)** | `[지속]` | `[지속]` 액티브 효과 지속시간 증가 | `[지속]` 빌드 | +| P10 | **호신부(護身符)** | `[방어]` | 피격 전 1회 흡수 실드 (N초 쿨다운) | 생존력 | +| P11 | **질풍보(疾風步)** | — | 플레이어 이동 속도 상승 | 회피 보조 | +| P12 | **도약강화(跳躍强化)** | — | 점프 높이 상승 | 회피 보조 | +| P13 | **단전수련(丹田修練)** | `[회복]` | 적 처치 시 소량 쿼터 회복 (N킬당 1/4 하트) | 회복 빌드 | +| P14 | **감로수(甘露水)** | `[회복]` | 일정 시간마다 쿼터 자동 재생 | `[방어]` 시너지 | +| P15 | **생명의 꽃(生命之花)** | `[방어]` `[회복]` | **최대 하트 수 +1** (런 내) | 생존 빌드 핵심 (각성 조건 패시브 다수에 포함) | +| P16 | **강철심장(鋼鐵心臟)** | `[방어]` | **최대 하트 수 +1** (런 내) | 생존 빌드 (P15와 중첩 가능) | +| P17 | **부적방패(符籍防牌)** | `[방어]` | 피해 감소 % | 범용 생존 | +| P18 | **회피술(回避術)** | `[방어]` | 회피 확률 % | 생존 빌드 | +| P19 | **심안(心眼)** | — | i-frame 지속시간 연장 | 생존 빌드 | +| P20 | **도주경공(逃走輕功)** | — | 피격 시 순간 가속 | 생존 보조 | +| P21 | **쾌보술(快步術)** | — | `[근접]` 액티브 발동 주기 단축 | `[근접]` 빌드 | +| P22 | **선견지명(先見之明)** | — | 경험치 획득량 증가 | 성장 가속 | +| P23 | **재물복(財物福)** | — | 보물상자 발견 확률 증가 | 각성 빌드 핵심 | +| P24 | **집중술(集中術)** | — | 크리티컬 확률 % | 대미지 빌드 | +| P25 | **폭풍혼(暴風魂)** | — | 크리티컬 대미지 배율 증가 | 대미지 빌드 | -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 15 | **허수아비(藁人形)** | 1 | `[소환]` | 이동 경로에 허수아비 설치, 적 어그로 유도 | `[방호]` 태그와 연계 시 내구도 강화 | -| 16 | **분신술(分身術)** | 2 | `[소환]` `[공격]` | 분신 1기 소환, 기본 공격 동시 수행 | `[공격]` 카드 적용 범위 공유 | -| 17 | **도깨비불소환** | 2 | `[소환]` `[주술]` | 도깨비불 2기 소환, 랜덤 적 추적 및 DoT | `[주술]` 빌드의 활성화 트리거 역할 | -| 18 | **산신령강림(山神靈降臨)** | 3 | `[소환]` | 강력 소환물 1기 등장, 자동 공격·높은 내구도 | 소환 빌드 최종 완성자 | +**주요 변경점**: +- **P15·P16 최대 하트 수 증가 신설** — BT7-Plan 확정 방향 7 구현 +- **P23 보물상자 확률 증가 신설** — 각성 빌드 핵심 카드 +- `[방호]`·`[회복]` 실효 수치는 **쿼터 단위 명시** — "실드 소량 회복 = 1 쿼터" 등 (balance-designer 튜닝) -### [방호] 카테고리 — 라이프 1 전제에서의 "실질적 생존 연장" 수단 +### 3-3. 각성 카드 (15~20종) -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 19 | **호신부(護身符)** | 1 | `[방호]` | 피격 전 1회 흡수 실드 생성 (N초 쿨타임) | 단독 채용 시도 고생존 기여 | -| 20 | **부적방패(符籍防牌)** | 1 | `[방호]` `[부적]` | 부적 투척 후 일정 시간 회피율 상승 | `[부적]` 빌드의 부산물 생존력 | -| 21 | **무영보(無影步)** | 2 | `[방호]` `[속도]` | 짧은 순간 무적 대시 추가 | `[속도]` 태그 보유 시 거리 증가 | -| 22 | **결계장벽(結界障壁)** | 2 | `[방호]` | 발동 시 전방 고정 실드 설치 | `[소환]` 태그와 조합 시 소환물 뒤 자동 배치 | -| 23 | **천지음양방호(天地陰陽)** | 3 | `[방호]` | 일정 시간 완전 무적 + 무적 해제 시 반경 폭발 | 단독 완성자, 위기 탈출기 | +**별도 풀**. 조건 충족(액티브 Lv.5 + 필요 패시브 1개 이상 보유 + 보물상자) 시 발동. -### [속도] 카테고리 — "빠르게 치고 빠지는" 게릴라 빌드 축 +각 각성 카드는 `필요_액티브` + `필요_패시브[]` 쌍을 가진다. **필요 패시브 배열에 명시된 카드 중 1개 이상 보유 시 조건 충족**. -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 24 | **쾌보술(快步術)** | 1 | `[속도]` | 이동 속도 상승 | `[속도]` 3장 이상 시 점프력 추가 상승 | -| 25 | **연속타(連續打)** | 2 | `[속도]` `[공격]` | 공격 속도 상승 + 연타 효과 | `[공격]` 태그와 연계 시 연타 횟수 증가 | -| 26 | **귀신발걸음(鬼步)** | 2 | `[속도]` | 일정 시간 극속 이동, 적 통과 판정 | `[주술]` 태그와 연계 시 이동 경로에 DoT 잔존 | +| # | 각성 이름 | 필요_액티브 | 필요_패시브[] | 효과 요지 | +|---|-----------|-------------|---------------|-----------| +| AW01 | **천부경문(天符經文)** | A01 진언부 Lv.5 | [P01, P06, P08] | 화면 전체 부적 전개, 전 적 강타 (자동 발동 주기 대폭 단축 + 광역화) | +| AW02 | **염라화염(閻羅火焰)** | A02 화염부 Lv.5 | [P02, P09] | 투척 부적 범위 대폭 확장, 지속 점화 스택 무제한 | +| AW03 | **천뢰강림(天雷降臨)** | A04 뇌격부 Lv.5 | [P04, P06, P08] | 연쇄 번개 무제한 전파, 화면 내 모든 적 연쇄 | +| AW04 | **봉령결계(封靈結界)** | A03 봉인부 Lv.5 | [P05, P09] | 봉인 대상 영구 행동 정지 + DoT 부여 | +| AW05 | **학익천진(鶴翼天陣)** | A05 학익진 Lv.5 | [P01, P07] | 360도 전방위 자동 타격 | +| AW06 | **독무유역(毒霧流域)** | A06 독안개 Lv.5 | [P05, P09] | 화면 전체 독무 잔존, 무한 DoT | +| AW07 | **사령결계(死靈結界)** | A08 저주문 Lv.5 | [P05, P06] | 저주 스택 즉시 최대치 + 폭발 대미지 증폭 | +| AW08 | **혼령폭풍(魂靈暴風)** | A07 혼백박멸 Lv.5 | [P05, P07] | 주변 오라가 화면 전체 약화 | +| AW09 | **허수군세(藁人軍勢)** | A09 허수아비 Lv.5 | [P01, P10] | 허수아비 다수 자동 소환, 자동 공격 | +| AW10 | **분신만화(分身萬華)** | A10 분신술 Lv.5 | [P01, P06] | 분신 3~4기 동시 소환, 액티브 공유 | +| AW11 | **산신령강림(山神靈降臨)** | A11 도깨비불소환 Lv.5 | [P05, P09] | 강력 소환물 1기 상주, 자동 타격·높은 내구 | +| AW12 | **쾌검비경(快劍秘境)** | A12 쾌속검 Lv.5 | [P01, P06] | 전방 연타 속도 극속, 무한 연격 | +| AW13 | **천지진동(天地震動)** | A13 천둥발 Lv.5 | [P04, P07] | 원형 번개 범위 화면 전체 확장 | +| AW14 | **빙하시대(氷河時代)** | A14 빙결창 Lv.5 | [P03, P09] | 투창 빙결 영역화, 접촉 적 전부 빙결 | +| AW15 | **귀화유성(鬼火流星)** | A15 귀화 Lv.5 | [P02, P08] | 유도 화염구 무한 발사, 화면 전체 점화 | +| AW16 | **일격절명(一擊絶命)** | A16 일격필살 Lv.5 | [P24, P25] | 회심 확률·배율 극한 상승 (보스 제외 즉사) | +| AW17 | **천지음양방호(天地陰陽)** | A17 결계장벽 Lv.5 | [P10, P15·P16 중 1개] | 완전 무적 시간 상승 + 실드 상시 유지 | +| AW18 | **귀보유영(鬼步遊影)** | A18 무영보 Lv.5 | [P11, P18] | 무적 대시 무한 연계, 피격 시 자동 발동 | -### [회복] 카테고리 — 실드·생존 연장 수단 (라이프 1 전제에서 "버티기" 옵션) - -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 27 | **단전수련(丹田修練)** | 1 | `[회복]` | 적 처치 시 소량 실드 회복 | 처치 수가 많은 플레이 스타일에 효과 극대 | -| 28 | **부적치유(符籍治癒)** | 2 | `[회복]` `[부적]` | 부적 적중 처치 시 실드 대량 회복 | `[부적]` 빌드의 생존 보장 | -| 29 | **감로수(甘露水)** | 2 | `[회복]` | 일정 시간마다 실드 자동 재생 | `[방호]` 태그와 조합 시 실드 상한 상승 | - -### [특수] 카테고리 — 빌드 방향 전환자·고위험 고보상 카드 - -| # | 카드 이름 | 티어 | 태그 | 효과 요지 | 시너지 힌트 | -|---|-----------|------|------|-----------|------------| -| 30 | **역천지기(逆天之氣)** | 3 | `[공격]` `[폭발]` | 이번 런 처음 10회 공격에 한해 3배 대미지, 이후 공격력 일시 감소 | 초반 스파이크 전략용 | -| 31 | **귀문관(鬼門關)** | 3 | `[주술]` `[소환]` | 사방에 문 설치, 30초간 문 통과 몬스터에 즉사 판정 (보스 제외) | 소환·주술 복합 빌드 완성자 | -| 32 | **천지개벽(天地開闢)** | 3 | `[공격]` `[폭발]` `[주술]` | 발동 시 전 화면 공격 + 모든 DoT 즉시 폭발 | 전 태그 연계 최종 파이널 카드 | +**각성 조합 설계 원칙**: +- 각 각성마다 **필요 패시브는 2~3개 후보** 중 1개 이상 보유로 조건 충족 +- 복수 각성 조건이 동시 충족되는 경우 플레이어 선택 UI 제공 (규칙 시스템 §7 엣지 케이스 3) +- 한 런에서 동일 각성 중복 발동 불가 --- -## 4. 시너지 조합 예시 +## 4. 시너지 조합 예시 (일반 RPG 용어 기반) > 상세 조합 규칙·발동 조건은 system-designer 이관. 아래는 "플레이어가 느끼는 방향성" 기준 예시. -| 빌드명 | 핵심 카드 | 컨셉 | -|--------|-----------|------| -| **부적 스패머** | 진언부·화염부·부적방패·부적치유 | 부적을 쏟아부으며 생존까지 해결 | -| **주술 소각** | 독안개·저주문·사령결계 | 모든 적에게 DoT 누적 후 폭발 | -| **분신 군주** | 분신술·도깨비불소환·산신령강림 | 소환물로 화면을 점령 | -| **속도 게릴라** | 쾌보술·연속타·귀신발걸음 | 빠르게 치고 빠지는 히트앤런 | -| **천부경 오버로드** | 천부경문·천지개벽·역천지기 | 3티어 중심 고위험 고보상 | +| 빌드명 | 핵심 카드 | 컨셉 | 예상 각성 | +|--------|-----------|------|----------| +| **화염 폭격수** | A02·A15·P02·P09 | 화염 DoT 지속 누적 | AW02 or AW15 | +| **번개 연쇄술사** | A04·A13·P04·P06·P08 | 번개 연쇄로 화면 소탕 | AW03 or AW13 | +| **암흑 저주사** | A03·A06·A08·P05·P09 | 저주·독으로 DoT 누적 | AW04 or AW06 or AW07 | +| **분신 군주** | A09·A10·A11·P01·P10 | 소환물로 화면 점령 | AW09 or AW10 or AW11 | +| **회피 게릴라** | A12·A18·P11·P18·P19 | 빠른 공격 + 무적 대시 | AW12 or AW18 | +| **철벽 생존** | A17·P10·P15·P16·P17 | 최대 하트 3~4 + 상시 실드 | AW17 | +| **보물상자 각성 특화** | P23 중심 + 아무 액티브 Lv.5 | 보물상자 발견율 극대화, 다중 각성 | AW 중 조건 충족 시 발동 | --- ## 5. 기각안 -1. **"카드별 쿨타임 부여" — 기각.** 로그라이크 카드는 "장착 후 패시브·능동 발동" 구분이 필요하나, 쿨타임 UI는 모바일 기준 인지 부담 과대. 패시브 위주로 설계하고 능동 카드는 별도 슬롯 구조로 격리 검토 → system-designer 이관. -2. **"카드 50장 이상 초기 풀" — 기각.** 파일럿에서 과도한 풀은 팀 개발 부하·QA 비용 폭증. MVP 30~35장으로 시작, 업데이트 확장 구조 채택. 단 확장 용이하도록 태그 체계를 미리 확정. -3. **"동일 카드 중복 픽 시 즉시 2배 효과" — 기각.** 밸런스 붕괴 위험. 동일 카드 재픽은 "레벨 업" 형태로 처리(상세는 Phase 3-B system-designer 결정). 즉시 2배는 단일 카드 과의존 빌드 고착화 원인. -4. **"카드 판매·재료화 메카닉" — 기각.** 파츠 교체식(코어 룰 8)과 역할 혼선. 카드는 "픽 or 포기" 이분법 유지. 재화 연동은 Phase 3-C BM 설계에서 별도 검토. +1. **"카드별 쿨타임 UI 표시" — 기각 (BT7-Plan 의미 변화).** v0.1은 "패시브 위주 설계, 능동 카드는 별도 슬롯 격리 검토"였으나 BT7-Plan에서 **모든 공격을 자동 발동으로 전환**하여 쿨타임 UI 필요성이 근본 변화. 액티브 카드는 각자 내부 발동 주기(쿨다운)를 가지지만 **플레이어에게 쿨다운 UI를 노출할 필요 없음** (수동 발동 아님). VS 원작과 동일 — 카드 슬롯 아이콘·Lv 표기만 HUD 반영. + +2. **"카드 50장 이상 초기 풀" — 기각 (BT7-Plan 번복).** v0.1은 "30~35장 MVP"로 제한했으나, BT7-Plan에서 액티브 15~20 + 패시브 25 + 각성 15~20 = 총 50~65장으로 명시 확장. 3분류 구조 + 각성 조합 설계상 최소 풀 규모가 필요. **기각안 유지(번복 기록)**. + +3. **"동일 카드 중복 픽 시 즉시 2배 효과" — 기각 (현행 유지 + Lv.5 확장).** 밸런스 붕괴 위험. 동일 카드 재픽은 "Lv 업"(최대 Lv.5) 형태로 처리. 즉시 2배는 단일 카드 과의존 빌드 고착화 원인. + +4. **"카드 판매·재료화 메카닉" — 기각 (현행 유지).** 파츠 교체식(코어 룰 8)과 역할 혼선. 카드는 "픽 or 포기" 이분법 유지. 재화 연동은 Phase 3-C BM 설계에서 별도 검토. + +5. **"4티어 레어리티 체계 (Common/Uncommon/Rare/Epic) 유지" — 기각 (BT7-Plan 신규).** PD 2026-04-24 확정 방향 4에서 "티어 3→4 변경 폐기" 명시 + 확정 방향 3에서 "액티브+패시브=각성" 구조 확정. 레어리티 체계 자체 폐기. 3분류 구조로 통일. + +6. **"각성 카드를 레벨업 드로우에 포함" — 기각 (BT7-Plan 신규).** PD 확정 방향 10 "각성은 별도 풀. 조건 충족 시 드로우·보물상자 획득으로 발동" 명시. + +7. **"기본 공격 강화 카드 유지 (구 v0.1 [공격] 태그 5장)" — 기각 (BT7-Plan 신규).** PD 확정 방향 2에서 공격 버튼 자체 폐기 (VS 순수형). "기본 공격 강화" 개념 자체 무의미화. 해당 5장은 액티브 카테고리에 재배치되거나 패시브 형태로 재해석. --- ## 6. balance-designer 이관 항목 -- 티어별 출현 가중치 수치 (레벨 구간별 확률 테이블) -- 카드별 효과 수치 (대미지 배율·지속 시간·쿨타임·스택 한도) +- 액티브·패시브 출현 가중치 수치 (레벨 구간별 확률 테이블) +- 각성 발동 시 대미지·효과 강도 수치 +- 카드별 효과 수치 (대미지 배율·지속 시간·쿨다운·스택 한도·쿼터 회복량) - 시너지 트리거 조건 (태그 N장 이상 임계) -- 3티어 카드 출현 구간 제한 설계 +- 각성 카드 필요_패시브 배열 최종 조정 (조건 난이도 vs 발동 빈도 균형) +- 보물상자 스폰 조건·빈도·대체 보상 수치 +- 최대 하트 수 상한 (초기 권고 3~5개) +- Lv.5 이상 재픽 시 보상 방식 (재화 vs 랜덤 변형) -## 7. narrative-designer 이관 항목 +## 7. narrative-designer 이관 항목 (PD 후속 검토 대기) -- 카드 네이밍 최종 확정 (조선 퇴마 세계관 고증 · 한자 표기 통일) -- 카드 플레이버 텍스트 (짧은 설명 1~2줄, 세계관 맥락) -- "진언·경문·부적·주술" 용어 계보 정리 +- **태그 세계관 재매핑** — 일반 RPG 용어(물리/화염/냉기/번개/암흑/근접/원거리/범위/지속/회복/방어 11종) → 조선 퇴마 특화 용어로 일괄 재매핑 (PD님 BT7-Plan 확정 방향 11에서 "나중에 일괄 재매핑" 명시) +- 각성 카드 플레이버 텍스트 (조선 퇴마 세계관 맥락) +- "진언·경문·부적·주술" 용어 계보 정리 — narrative 01·02·03 현행 유지 + 카드 네이밍만 필요 시 조정 + +**주의**: 카드 한자 네이밍(진언부·화염부·봉황격 등)은 **현행 유지** (PD 특별 주의 — narrative 영역 건드리지 않음). 태그 용어만 추후 재매핑 대상. ## 8. 변경 이력 | 일시 | 변경 | 사유 | 기안 | |------|------|------|------| | 2026-04-22 | v0.1 파일럿 예시 셋 32장 작성 | PD 지시 BT6-Plan Phase 3-B | 컨텐츠 기획팀장 | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (3분류 구조·50~65장 확장·Lv.5·각성 조합·일반 RPG 태그·하트 수 증가 패시브·보물상자 확률 패시브) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/system/01_카드_시스템.md b/프로젝트/EerieVillage/기획/system/01_카드_시스템.md index d6d641c..67eb9ee 100644 --- a/프로젝트/EerieVillage/기획/system/01_카드_시스템.md +++ b/프로젝트/EerieVillage/기획/system/01_카드_시스템.md @@ -2,12 +2,12 @@ type: 시스템_설계 scope: 카드_시스템 author: system-designer -date: 2026-04-22 -version: v0.1 +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage (기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist) phase: Phase 3-B -data_source: 03_진행_시스템_초안.md §3 / PD 코어 룰 6·7 -status: 핵심 메카닉 골격 확정 — 효과 리스트·수치는 content-designer·balance-designer 이관 +data_source: 03_진행_시스템_초안.md §3 / PD 코어 룰 6·7 / BT7-Plan PD 확정 방향 11건 (2026-04-24) +status: BT7-Plan 개정 반영 — 액티브/패시브/각성 3분류·Lv.5 확장·각성 발동 조건 --- # 01. 카드 시스템 @@ -15,13 +15,14 @@ status: 핵심 메카닉 골격 확정 — 효과 리스트·수치는 content-d ## 1. 목적 **이 시스템이 풀고자 하는 플레이어 문제** -"레벨업마다 무언가 의미 있는 선택을 했다는 느낌, 그리고 내 빌드가 점점 나만의 것이 되는 느낌"을 제공한다. -PD 코어 룰 6(레벨업 시 3장 중 1장 선택·조합 육성)은 이 경험의 구조적 기반이다. 카드 시스템은 그 구조를 완결한다. +"레벨업마다 무언가 의미 있는 선택을 했다는 느낌, 그리고 내 빌드가 점점 나만의 것이 되는 느낌, 그리고 조건을 만족했을 때 발동하는 각성의 카타르시스"를 제공한다. +PD 코어 룰 6(레벨업 시 3장 중 1장 선택·조합 육성) + BT7-Plan 확정 방향 2·3·4·5·6·9·10은 이 경험의 구조적 기반이다. 카드 시스템은 그 구조를 완결한다. **제공하는 경험** -- 픽 순간마다 "이게 맞는 선택인가?" 의 짧은 긴장 -- 카드가 쌓일수록 내 빌드가 강해지는 성장 곡선의 체감 -- 동일 덱으로도 달라지는 시너지 조합에서 오는 재발견 재미 +- 픽 순간마다 "액티브를 강화할까, 패시브를 쌓아 각성 조건을 노릴까?"의 육성 경로 긴장 +- 카드가 쌓일수록 내 빌드(장착 액티브 + 패시브 조합)가 강해지는 성장 곡선의 체감 +- 각성 조건 충족 + 보물상자 획득 순간의 "기다림이 보상받는" 카타르시스 +- 동일 덱으로도 달라지는 액티브·패시브·각성 조합 재발견 재미 --- @@ -30,11 +31,15 @@ PD 코어 룰 6(레벨업 시 3장 중 1장 선택·조합 육성)은 이 경험 ``` 레벨업 트리거 ↓ -카드 풀에서 3장 무작위 드로우 (추첨 전 중복 제거) +카드 풀에서 3장 무작위 드로우 (액티브·패시브 2축, 각성은 별도 풀) ↓ 픽 UI 표시 — 플레이어가 1장 선택 (강제) ↓ -선택 카드 → 빌드 슬롯에 장착 / 동일 카드 재픽 시 → 업그레이드 처리 +선택 카드 → 빌드 슬롯에 장착 / 동일 카드 재픽 시 → 스택 업그레이드 (최대 Lv.5) + ↓ +[병행] 스테이지 진행 중 보물상자 발견·획득 + ↓ +각성 발동 판정: 액티브 Lv.5 + 필요 패시브 1개 이상 보유 시 → 각성 카드 풀에서 드로우·발동 ↓ 런 종료(보스 클리어 or 사망) → 카드 전손 · 빌드 초기화 ``` @@ -45,46 +50,92 @@ PD 코어 룰 6(레벨업 시 3장 중 1장 선택·조합 육성)은 이 경험 ## 3. 규칙 -### 규칙 1. 카드 풀 3티어 구조 +### 규칙 1. 카드 3분류 구조 — 액티브 / 패시브 / 각성 (BT7-Plan 확정 방향 3·6) -| 티어 | 명칭 | 해제 조건 | 특징 | -|------|------|----------|------| -| T1 | 기본 | 런 시작 시 항상 활성 | 단순 효과, 개수 多 | -| T2 | 숙련 | 누적 레벨 N 이상 도달 시 드로우 풀 합류 | 중복·시너지 조건 포함 효과 | -| T3 | 각성 | 런 내 지정 조건 충족 시 한정 등장 | 빌드 방향 전환급 효과, 개수 少 | +**구 3티어 구조(T1 기본·T2 숙련·T3 각성) 폐기**. VS 원작 계승 3분류로 재설계. -- N 수치는 balance-designer 영역. 구조상 T3는 "후반부에만 보인다"는 경험 설계. -- T3는 항상 3장 중 1장 이하로 등장한다. T3가 2장 이상 동시 출현 시 1장으로 대체한다. +| 분류 | 정의 | 역할 | 규모 | +|------|------|------|------| +| **액티브** | 자동 발동 무기·스킬 (판정 박스·주기·대미지 보유) | 적 처치의 실질 DPS 공급 | 15~20종 | +| **패시브** | 스탯·효과 상시 보정 (공격력·속도·하트 수·회피 등) | 액티브 효율 증폭 + 각성 조건 형성 | 25종 이내 | +| **각성** | 액티브+패시브 조합 충족 시 발동하는 진화 카드 | 빌드 완성자·클라이맥스 | 15~20종 | -### 규칙 2. 픽 알고리즘 — 가중 무작위 +**총 카드 풀 규모**: 50~65장 (구 32장 대비 확장). -1) 현재 런의 레벨(진행도)에 따라 T1/T2/T3 비율 가중을 결정한다. -2) 가중 비율 안에서 **현재 빌드의 주력 태그 2개**에 해당하는 카드에 추가 가중치를 부여한다. -3) 이미 빌드에 편입된 카드는 재픽 후보에서 제외하되, **업그레이드 가능 카드(동일 카드 2회 픽 조건)**는 재등장 허용한다. -4) 3장은 서로 다른 티어 조합이 되도록 필터를 우선 적용하되, 같은 티어만 남을 경우 필터를 해제한다. +### 규칙 2. 픽 알고리즘 — 액티브·패시브 2축 드로우 + +1) 레벨업 시 **액티브·패시브 2축에서** 가중 무작위로 3장 드로우 (각성은 별도 경로). +2) 현재 런의 레벨·빌드 태그에 따라 액티브 vs 패시브 비율 가중을 결정한다 (상세: `balance/02_레벨업_곡선.md` v0.2 §4). +3) **현재 빌드의 주력 태그 2개**에 해당하는 카드에 추가 가중치를 부여한다. +4) 이미 빌드에 편입된 카드는 재픽 후보에서 제외하되, **업그레이드 가능 카드(동일 카드 재픽 조건, Lv.5 미만)**는 재등장 허용한다. +5) 3장은 액티브·패시브가 혼합되도록 필터를 우선 적용하되, 풀 고갈 시 필터를 해제한다. 가중치 수치와 태그 연동 강도는 balance-designer 영역. -### 규칙 3. 태그 기반 시너지 체계 +### 규칙 3. 태그 기반 시너지 체계 (일반 RPG 용어 임시 재작성) 카드 하나는 반드시 **1~2개의 태그**를 가진다. -**태그 축 2종**: +**태그 체계는 임시 일반 RPG 용어로 재작성**한다 (BT7-Plan 확정 방향 11). PD 후속 검토용 **5개 속성 태그 + 6개 유형 태그 후보**: -1) **속성 태그** (예: 불·물·목·금·토 — 조선 오행 기반, 실제 명칭은 content-designer 확정) -2) **유형 태그** (예: 근거리·원거리·결계·부적·주술) +**속성 태그 (후보 5종)**: +1) `[물리]` — 순수 타격·관통 +2) `[화염]` — 지속 대미지·점화 +3) `[냉기]` — 둔화·빙결 +4) `[번개]` — 연쇄·즉발 +5) `[암흑]` — 저주·DoT·약화 -시너지 발동 조건: 동일 태그 카드 K장 이상 빌드에 편입 시 패시브 효과 추가 발동. -K 수치와 효과 내용은 balance-designer·content-designer 영역. +**유형 태그 (후보 6종)**: +1) `[근접]` — 플레이어 주변 판정 +2) `[원거리]` — 투사체·원격 +3) `[범위]` — AoE·다중 타격 +4) `[지속]` — 설치·오라·DoT +5) `[회복]` — 하트 쿼터 회복·실드 +6) `[방어]` — 피해 감소·회피 확률·i-frame 연장 + +**세계관 특화 용어 (한자 네이밍·조선 퇴마 톤)는 PD 후속 검토 대기** — narrative-designer가 BT7-Plan 11번 지시에 따라 추후 일괄 재매핑 예정. 현 v0.2는 일반 RPG 용어 후보만 기록하며, PD님 검토·확정 시점에 narrative-designer 작업으로 전환. + +**시너지 발동 조건**: 동일 태그 카드 K장 이상 빌드에 편입 시 패시브 효과 추가 발동. K 수치와 효과 내용은 balance-designer·content-designer 영역. 태그 2축 설계로 "속성 빌드"와 "유형 빌드" 두 방향의 조합이 가능하며, 양 축을 동시에 쌓는 교차 빌드가 제3의 방향이 된다. -### 규칙 4. 업그레이드 체계 — 동일 카드 스택형 +### 규칙 4. 업그레이드 체계 — 동일 카드 스택 Lv.1→Lv.5 (BT7-Plan 확정 방향 9) -- 같은 카드를 2회째 픽하면 즉시 **Lv.1 → Lv.2** 업그레이드. -- 최대 Lv.3까지 허용. Lv.3 이상에서 동일 카드 재픽 시 **재화 보상 or 랜덤 변형**으로 처리한다. - (재화 보상 vs 랜덤 변형 2가지 처리 방식의 선택은 balance-designer 판단 — 재화는 BM 연계, 변형은 빌드 복잡도 증가) -- 업그레이드는 카드 기본 효과의 **수치 상향 또는 추가 트리거** 중 하나. 두 효과 모두 부여하지 않는다. +**구 Lv.3 상한 폐기**. VS 원작 Lv.5 체계 계승. + +- 같은 액티브·패시브 카드를 재픽할 때마다 **Lv.N → Lv.N+1** 업그레이드 (최대 Lv.5) +- Lv.5 도달 시 해당 액티브는 **각성 조건 중 "액티브 Lv.5"를 충족**한다 (규칙 5) +- Lv.5 이상에서 동일 카드 재픽 시 **재화 보상 or 랜덤 변형**으로 처리 (balance-designer 판단) +- 업그레이드는 카드 기본 효과의 **수치 상향 또는 추가 트리거** 중 하나 부여 (양자 동시 부여 금지) + +### 규칙 5. 각성 발동 조건 (VS 원작 동일, BT7-Plan 확정 방향 5·10) + +**각성 카드는 별도 풀에 분리된다**. 조건 충족 시 드로우·보물상자 획득으로 발동. + +``` +각성 발동 조건 (3종 동시 충족): + 1. 해당 액티브 카드가 Lv.5 도달 + 2. 각성에 필요한 특정 패시브 카드 1개 이상 보유 + 3. 보물상자 획득 + → 세 조건 동시 충족 시 각성 카드 발동 (액티브가 각성 형태로 진화) +``` + +**각성 카드 데이터 구조**: +- 각 각성 카드마다 `필요_액티브` + `필요_패시브[]` 쌍 명시 (`content/01_카드_풀.md` v0.2) +- 각성 발동 시 원 액티브는 각성 형태로 대체 (원 액티브 슬롯 점유 유지) +- 같은 런에서 동일 각성 중복 발동 불가 (각성 카드는 1회 발동 후 "발동됨" 상태 고정) + +**보물상자 체계**: +- 스테이지 진행 중 일정 조건(적 처치 수·특정 위치·엘리트 처치 등)으로 스폰 +- 획득 시 각성 발동 조건 판정 수행 +- 조건 불충족 시 대체 보상(재화·경험치·회복 등) 제공 (balance-designer 결정) + +### 규칙 6. 플레이어 HP/하트 증가 메커니즘 (BT7-Plan 확정 방향 7) + +- **패시브 카드·특성으로 최대 하트 수 +1 획득 가능** +- **런 내 성장만 유효** — 사망 시 기본 1개로 복귀 (`02_코어_루프` v0.2 §4 상태 보존 매트릭스) +- **상한**: balance-designer 결정 (초기 권고 3~5개, 하드캡 필수) +- `[방어]` 태그 패시브가 주 공급원. 일부 `[회복]` 태그와 중첩 가능 --- @@ -95,7 +146,9 @@ K 수치와 효과 내용은 balance-designer·content-designer 영역. | 대기 | 카드 풀에 있으나 미등장 | 레벨업 드로우 알고리즘이 선택 | | 제시 | 픽 UI에 표시됨 | 플레이어 미선택 시 → 폐기; 선택 시 → 장착 | | 장착 | 빌드 슬롯에 편입, 효과 발동 중 | 동일 카드 재픽 시 → 업그레이드; 런 종료 → 전손 | -| 업그레이드 | Lv.2 이상, 강화 효과 발동 | Lv.3에서 동일 카드 재픽 → 보상/변형 분기 | +| 업그레이드 (Lv.2~4) | 강화 효과 발동 | 동일 카드 재픽 → Lv 상승; Lv.5 도달 시 → 각성 조건 충족 | +| Lv.5 도달 | 각성 조건 중 "액티브 Lv.5" 충족 | 필요 패시브 보유 + 보물상자 획득 → 각성 발동 | +| **각성** (신규) | 액티브가 각성 형태로 진화 발동 | 런 종료까지 지속 | | 전손 | 런 종료(사망 or 클리어) 시 소멸 | 다음 런 시작 → 빌드 초기화 | --- @@ -105,16 +158,20 @@ K 수치와 효과 내용은 balance-designer·content-designer 영역. **입력** - 레벨업 이벤트 (경험치 시스템 or 스테이지 클리어 트리거) - 플레이어 픽 입력 (터치·클릭) +- 보물상자 획득 이벤트 **시스템 반응** -- 드로우 알고리즘 즉시 실행 → 픽 UI 표시 (Additive Load 2씬 구조 전제 — 개발팀 03 결정 계승) +- 드로우 알고리즘 즉시 실행 → 픽 UI 표시 (Additive Load 2씬 구조 전제) - 픽 결정 즉시 효과 발동 (애니메이션 피드백 포함, 상세는 ux-designer) - 업그레이드 시 기존 카드 아이콘에 레벨 표기 갱신 +- **각성 발동 시 풀스크린 연출** (액티브·패시브 진화 시각 변환, 상세: `ux/02_HUD_설계.md` v0.2 §3-A) **필요한 피드백 종류 (ux-designer 연계)** -- 3장 표시 시 각 카드의 태그·레벨·업그레이드 가능 여부를 즉시 파악 가능한 UI -- 현재 빌드 태그 분포 시각화 (시너지 진행도 표시) +- 3장 표시 시 각 카드의 분류(액티브·패시브)·태그·레벨·업그레이드 가능 여부를 즉시 파악 가능한 UI +- 현재 빌드 태그 분포 시각화 (시너지·각성 조건 진행도 표시) - 업그레이드 완료 시 시각·음향 강조 +- **각성 조건 충족 예고** — 액티브 Lv.5 도달 시 UI에 "각성 대기" 표시 +- **보물상자 획득 시 각성 발동 강조 연출** --- @@ -122,44 +179,56 @@ K 수치와 효과 내용은 balance-designer·content-designer 영역. | 연동 시스템 | 연동 방식 | |------------|----------| -| **전투 시스템** (04_전투_기본_스펙) | 장착 카드 효과가 공격 판정·이동에 수식자로 적용 | -| **특성 시스템** (02_특성_시스템) | 특성 일부가 픽 알고리즘 가중치 수정 or T2/T3 해제 조건 완화 | -| **스테이지 구조** (05_스테이지_구조_초안) | 스테이지 클리어 or 적 처치 누적이 레벨업 트리거 역할 | -| **Additive Load 2씬** (개발팀 03) | 픽 UI는 별도 씬 Additive Load로 전투 씬 위에 오버레이 | +| **전투 시스템** (04_전투_기본_스펙) | 장착 액티브 카드가 자동 발동 체계에서 발동·대미지 적용. 패시브 카드는 스탯 보정으로 상시 적용 | +| **특성 시스템** (02_특성_시스템) | 특성 일부가 픽 알고리즘 가중치 수정 or 각성 조건 완화 (예: "필요 패시브 수 -1") | +| **스테이지 구조** (05_스테이지_구조_초안) | 스테이지 클리어·적 처치 누적이 레벨업 트리거. **보물상자 스폰 위치**가 스테이지 설계에 포함 | +| **보물상자 체계** (신규) | 스테이지 진행 중 발견·획득. 각성 발동 트리거. 조건 불충족 시 대체 보상 | +| **Additive Load 2씬** (개발팀 03) | 픽 UI·각성 발동 UI는 별도 씬 Additive Load로 전투 씬 위에 오버레이 | --- ## 7. 엣지 케이스 -1) **카드 풀 소진**: T1·T2 전체가 빌드에 장착되어 드로우 후보 소진 시 → T1 업그레이드 가능 카드로 강제 채움. 풀 규모는 이 상황이 발생하지 않도록 content-designer가 설계해야 한다. -2) **T3 조건 충족 카드가 없을 때**: T3 슬롯은 T2 카드로 대체. T3 강제 등장 없음. -3) **픽 UI 중 사망 (데미지 입력)**: 픽 UI 표시 중에는 게임 일시정지 처리. 픽 완료 후 전투 재개. (개발팀과 정합 필요 — 이슈 발견 시 C3 보고) -4) **동일 런 내 동일 카드 4회 이상 등장**: Lv.3 이후 재픽은 항상 보상/변형 분기로 흡수되므로 무한 업그레이드 루프 없음. +1) **카드 풀 소진**: 액티브·패시브 전체가 빌드에 장착되어 드로우 후보 소진 시 → 업그레이드 가능 카드로 강제 채움. 풀 규모(50~65장)로 이 상황이 발생하지 않도록 content-designer가 설계해야 한다. +2) **각성 조건 부분 충족 상태에서 보물상자 획득**: 각성 조건 3종 중 일부만 충족 → 각성 발동 없이 **대체 보상**(재화·회복·경험치) 제공. balance-designer 결정. +3) **다중 각성 조건 동시 충족**: 한 번의 보물상자 획득으로 복수 각성 조건이 동시 충족 시 → 플레이어에게 **1개 선택 UI 제공**. 동시 발동 금지 (밸런스 붕괴 방지). +4) **픽 UI 중 사망 (대미지 입력)**: 픽 UI 표시 중에는 게임 일시정지 처리. 픽 완료 후 전투 재개. +5) **동일 런 내 동일 카드 Lv.5 이후 재픽**: 재화 보상 or 랜덤 변형 분기로 흡수되므로 무한 업그레이드 루프 없음. +6) **각성 발동 후 필요 패시브 카드 분해·교체 시도**: 각성은 "발동됨" 상태로 고정되므로 영향 없음. 단 패시브 카드 자체는 런 종료까지 유지 (빌드 슬롯 고정). --- ## 8. 기각안 -1) **레어리티 3티어(공통·레어·전설) 명칭 체계 — 기각.** 기존 카드게임 언어와 충돌. 조선 퇴마 세계관에 맞는 T1(기본)·T2(숙련)·T3(각성) 명칭으로 대체. 내용상 동형이나 IP 정체성 강화 효과. +1) **"레어리티 3티어(공통·레어·전설) 명칭 체계" — 기각 (BT7-Plan 번복).** v0.1에서 "기존 카드게임 언어와 충돌, T1(기본)·T2(숙련)·T3(각성) 명칭"으로 기각했으나, PD 2026-04-24 BT7-Plan에서 **3티어 구조 자체 폐기** + "액티브+패시브=각성" 3분류로 전환. **기각안 유지(번복 기록)**: 원 기각 사유는 PD 지시로 무효화되었으나 설계 역사 보존 목적으로 본 기각안 섹션에 남긴다 (C14-5 히스토리 보존 정신). -2) **카드 합성 시스템(2장 합쳐 상위 카드) — 기각.** 합성은 별도 합성 UI·재고 관리·합성 레시피 설계를 요구하여 시스템 복잡도 폭증. 동일 카드 스택 업그레이드가 "합성"의 재미를 단순 구조로 대체한다. +2) **"HP 막대 도입 기각" (구 04_전투 §8 기각안 1 연계) — 기각 (BT7-Plan 번복).** 원 기각은 "라이프 1 고수"였으나 PD 2026-04-24 BT7-Plan 7에서 "하트 분할 + 카드·성장으로 하트 수 증가"로 전환. 본 시스템 규칙 6에 패시브·특성 하트 수 증가 메커니즘 신설. **기각안 유지(번복 기록)**. -3) **빌드 슬롯 상한 고정(최대 N장까지만 장착) — 기각.** 슬롯 상한은 "어떤 카드를 버릴까"라는 별도 결정 레이어를 요구. 파일럿 스코프에서는 슬롯 무제한 + 카드 효과 간 상호작용 복잡도로 빌드 깊이를 형성하는 방향이 구현 부담 대비 재미 우위. +3) **"카드 합성 시스템(2장 합쳐 상위 카드)" — 기각 (현행 유지).** 합성은 별도 UI·재고·레시피 설계를 요구하여 시스템 복잡도 폭증. 동일 카드 스택 업그레이드(Lv.5까지)가 "합성"의 재미를 단순 구조로 대체한다. -4) **카드 판매·분해 메카닉(런 중 카드 처분으로 재화 획득) — 기각.** BM 미확정 상태에서 런 내 재화 루프 설계는 범위 초과. Phase 3-C BM 설계 이후 재검토 안건으로 보관. +4) **"빌드 슬롯 상한 고정(최대 N장까지만 장착)" — 기각 (현행 유지 + BT7-Plan 의미 변화).** 파일럿 스코프에서 슬롯 무제한 + 카드 효과 간 상호작용 복잡도로 빌드 깊이 형성. 단 **BT7-Plan에서 액티브·패시브 분리**로 VS 원작 6/6 슬롯 분리 참고 가능 — `balance/02_레벨업_곡선.md` v0.2에서 재설계. -5) **현재 빌드 태그 연동 가중 OFF(완전 무작위 픽) — 기각.** 완전 무작위는 "빌드 방향이 매 픽마다 흔들리는" 경험을 유발, 조합 육성 재미 약화. 태그 연동 가중은 "시너지를 향해 나아가는" 느낌의 구조적 기반이다. 가중 강도만 balance-designer가 조정. +5) **"카드 판매·분해 메카닉(런 중 카드 처분으로 재화 획득)" — 기각 (현행 유지).** BM 미확정 상태에서 런 내 재화 루프 설계는 범위 초과. Phase 3-C BM 설계 이후 재검토. + +6) **"현재 빌드 태그 연동 가중 OFF(완전 무작위 픽)" — 기각 (현행 유지).** 완전 무작위는 빌드 방향 흔들림 유발, 조합 육성 재미 약화. 태그 연동 가중이 "시너지를 향해 나아가는" 구조적 기반. + +7) **"각성 카드를 레벨업 드로우 풀에 포함" — 기각 (BT7-Plan 신규).** PD 확정 방향 10에서 "각성 카드는 별도 풀. 조건 충족 시 드로우·보물상자 획득으로 발동"으로 명시. 레벨업 드로우 포함 시 조건 미충족 각성 카드가 무의미 카드로 등장하여 픽 UX 저해. + +8) **"각성 조건 단순화 (액티브 Lv.5만 충족하면 자동 발동)" — 기각 (BT7-Plan 신규).** PD 확정 방향 5는 "VS 원작 동일 — 필요 패시브 + 보물상자"를 명시. 단순화는 각성 카타르시스의 "기다림·빌드 설계" 감정을 파괴. VS 원작 구조 계승 필수. --- -## 9. 열린 이슈 (balance·content·ux 이관) +## 9. 열린 이슈 (balance·content·ux·narrative 이관) -1) **[balance]** T1/T2/T3 레벨 구간별 비율 수치 — 픽이 너무 쉽거나 너무 어렵지 않은 곡선 설계 필요. +1) **[balance]** 액티브·패시브 드로우 비율 수치 — 레벨 구간별 곡선 설계 (`balance/02_레벨업_곡선.md` v0.2). 2) **[balance]** 태그 시너지 발동 K장 임계값 및 효과 강도. -3) **[content]** 카드 명칭·효과 텍스트·태그 세트 전체 리스트 — 조선 오행·퇴마 세계관 반영. -4) **[content]** T3 해제 조건 텍스트 (런 내 어떤 달성이 T3를 여는가). -5) **[ux]** 픽 UI 레이아웃·애니메이션·시너지 진행도 시각화 방식. -6) **[balance·content]** Lv.3 이후 재픽 시 재화 보상 vs 랜덤 변형 선택 — BM 방향과 연계하여 결정. +3) **[balance]** 최대 하트 수 상한 수치. +4) **[balance]** 보물상자 스폰 조건·대체 보상 수치. +5) **[content]** 액티브 15~20종 / 패시브 25종 이내 / 각성 15~20종 전체 리스트 (`content/01_카드_풀.md` v0.2). +6) **[content]** 각성 카드별 필요_액티브 + 필요_패시브[] 쌍 데이터. +7) **[ux]** 픽 UI 레이아웃 (액티브·패시브 구분 표시) · 각성 발동 풀스크린 연출 · 시너지 진행도 시각화 방식. +8) **[balance·content]** Lv.5 이상 재픽 시 재화 보상 vs 랜덤 변형 선택 — BM 방향 연계. +9) **[narrative]** 태그 용어 세계관 재매핑 (일반 RPG 용어 → 조선 퇴마 특화) — PD 후속 검토 대기. --- @@ -168,3 +237,4 @@ K 수치와 효과 내용은 balance-designer·content-designer 영역. | 일시 | 변경 | 사유 | 기안 | |------|------|------|------| | 2026-04-22 | v0.1 시스템 설계 초안 | BT6-Plan Phase 3-B PD 지시 | system-designer | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (액티브/패시브/각성 3분류·Lv.5 확장·각성 발동 조건·하트 수 증가·2축 드로우) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/system/03_덱빌딩_방식_검토.md b/프로젝트/EerieVillage/기획/system/03_덱빌딩_방식_검토.md new file mode 100644 index 0000000..e750330 --- /dev/null +++ b/프로젝트/EerieVillage/기획/system/03_덱빌딩_방식_검토.md @@ -0,0 +1,228 @@ +--- +type: 방식_검토 +scope: 덱빌딩_방식_비교·4티어_개정안 +author: 기획팀장 +date: 2026-04-24 +version: v0.1 (Phase 3-C 방향 검토) +project: EerieVillage (기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist) +phase: BT7-Plan (PD 지시 2026-04-24) +data_source: 01_게임_컨셉·02_코어_루프·03_진행_시스템_초안·04_전투_기본_스펙·system/01_카드_시스템·content/01_카드_풀·balance/01·02·ux/02 +status: PD 방향 결정 대기 — 결정 후 system/01·content/01·balance/01·02·ux/02 개정 집행 +--- + +# 03. 덱빌딩 방식 검토 + 4티어 개정안 + +## 0. 검토 배경·범위 + +PD 2026-04-24 직접 지시 2건: +1. 세계관(narrative) 추가 진행 중단 — PD 직접 보완 예정. 본 검토에서 세계관 용어·네이밍은 현행 유지 전제 +2. **카드 시스템 개정 검토** — (a) 티어 3→4 변경 방향 확정 (b) 덱빌딩 방식을 **Slay the Spire 방식** vs **Vampire Survivors 방식** 중 선정 + +**재미 축 연결 (P30)**: 본 검토의 판단 기준은 현 기획 확정된 재미 축 3종이다. +- 축 1 (육성 롤러코스터의 카타르시스) — **핵심** +- 축 2 (액션 플랫포머의 손맛) — **핵심** +- 축 3 (영속 성장의 위안) — 보조 + +**유지 제약 (변경 불가)**: 모바일 타겟·라이프 1·사망 시 카드 전손·2D 횡스크롤 플랫포머·근거리 검·i-frame 0.6s·레벨업 3픽 골격. 본 검토는 이 제약 안에서 "카드 효과가 언제·어떻게 발동하는가" 축만 조정한다. + +--- + +## 1. 두 방식 구조 비교 + +### 1-1. 정의 + +| 방식 | 정의 (일반적으로 알려진 범위) | +|---|---| +| **Slay the Spire 방식** (이하 STS) | 덱 구축형. 카드팩에서 카드를 획득해 덱에 추가, 매 턴 손패 5장 드로우, 에너지 3 소비로 카드 발동, 턴제 전투. 경로 선택형 로그라이크. | +| **Vampire Survivors 방식** (이하 VS) | 자동 발동형. 무기·패시브 최대 6·6 슬롯, 레벨업마다 3픽, 무기 5회 강화 시 진화. 기본 공격·무기는 자동 발동, 플레이어 입력은 **이동뿐**. 실시간 서바이버. | + +### 1-2. 5개 관점 매트릭스 + +| 관점 | STS | VS | +|---|---|---| +| **코어 루프** | 턴제 전투에서 카드 드로우·핸드 관리·에너지 분배 | 실시간 전투에서 자동 공격·주기 발동 | +| **조작 복잡도** | 카드 선택·타겟 지정·에너지 배분 (중~높음) | 이동만 (극단적으로 낮음) | +| **난이도 곡선** | 덱 시너지 이해 심화형. 카드 학습 곡선 가파름 | 무기 시너지 이해형. 진입 장벽 낮음·숙련 상한도 낮음 | +| **몰입 축** | 전략·빌드 구상 (사고형 몰입) | 화면 점유 쾌감·수치 폭발 (감각형 몰입) | +| **입력 평균 분당** (추정) | 5~15회 (턴 단위) | 0~60회 (이동만, 자유) | + +**핵심 차이**: STS는 **"카드가 곧 행동"** (플레이어가 카드를 써서 공격·방어). VS는 **"카드가 곧 배경 규칙"** (플레이어는 이동만, 카드·무기가 자동 발동). + +### 1-3. EerieVillage 현 설계와의 교차점 + +| 현 설계 요소 | STS 호환성 | VS 호환성 | +|---|---|---| +| 2D 횡스크롤 플랫포머 (축 2 손맛) | **충돌** — STS는 턴제라 실시간 점프·공격 플로우와 호환 불가 | **정합** — VS도 실시간. 단 VS는 탑뷰 고정 | +| 근거리 검 1종 + i-frame 0.6s (04_전투 §5·§4-2) | 공격은 카드 사용으로 대체 → 검 공격 개념 소실 | 검 공격은 유지 + 자동 발동 무기·효과가 추가 | +| 레벨업 3픽 골격 (03_진행·system/01 규칙 1) | **정합** — STS도 맵 노드 보상으로 카드 획득 (3픽 아님, 변형 필요) | **정합** — VS 원형 그대로 | +| 라이프 1·피격 즉사 (04_전투 §3) | 턴제에 라이프 1은 치명적 — 턴 1회 실수 = 사망 | 실시간 이동 회피와 결합, 현 설계와 충돌 없음 | +| 사망 시 카드 전손 (코어 룰 7) | 정합 | 정합 | +| 모바일 터치 (가상 스틱 + 점프/공격 버튼) | 카드 드래그·타겟 지정 UI 추가 필요 → 입력 복잡도 증가 | 이동만 → 가상 스틱 1개로 충분 | + +**실측 판단**: STS 방식은 축 2(액션 플랫포머 손맛)를 **구조적으로 포기**해야 성립한다. VS 방식은 축 2를 유지하면서 카드 효과 발동 축을 자동화한다. + +--- + +## 2. EerieVillage 맥락 적합성 분석 + +### 2-1. 유지 제약 5축별 10점 척도 평가 + +| 제약 축 | STS 적합성 | VS 적합성 | 판정 근거 | +|---|---|---|---| +| **모바일 조작** (가상 스틱 + 2버튼) | 3/10 | 9/10 | STS는 카드 드래그·핸드 관리 UI 필수 → 세로 화면에 핸드 공간 압박. VS는 이동만이라 기존 UI 그대로 유지 | +| **라이프 1** | 4/10 | 8/10 | STS 턴제는 "한 턴 실수 = 즉사". 오히려 낙차 재미가 "무력감"으로 전환 위험. VS는 실시간 이동 회피가 라이프 1 긴장을 스킬 기반으로 승화 | +| **2D 액션 플랫포머** (축 2) | 1/10 | 7/10 | STS는 턴제라 점프·실시간 공격 플로우와 병존 불가. VS는 실시간이지만 원형은 탑뷰 — 2D 플랫포머 변형은 선례 적음(하이브리드 시도 필요) | +| **재미 축 1 육성 롤러코스터** | 8/10 | 9/10 | 양자 모두 "쌓기→폭발→전손" 구조 가능. STS는 턴마다 의사결정 누적 → 더 치밀한 빌드감. VS는 자동 발동 폭발이 직관적 카타르시스 | +| **32장 스코프** | 6/10 | 9/10 | STS 덱빌딩은 카드 수가 많을수록 깊이 증가 — 32장은 얕은 느낌. VS 32장은 무기 12 + 패시브 12 + 시너지 카드 8 수준으로 충분한 볼륨 | + +**종합**: STS = 22/50 (44%), VS = 42/50 (84%). VS 방식이 EerieVillage 유지 제약과 정합도가 **구조적으로** 높다. + +### 2-2. STS 방식의 결정적 부적합 사유 3종 + +1. **축 2 구조적 포기** — 턴제는 점프·실시간 공격의 즉각 피드백 재미를 성립 불가능하게 만든다. 템플릿(2D PlatformerMicrogame) 선택의 전제가 부정된다. +2. **모바일 세로 화면 정보 밀도 초과** — STS는 PC·태블릿 기준 설계. 모바일 세로 화면에서 핸드 5장·에너지·적 스탯·의도·버프 표시는 HUD 과포화를 유발 (ux/02 HUD 원칙 "정보 과다 = 정보 없음" 위배). +3. **캐주얼 로그라이크 포지션 이탈** — 01_게임_컨셉 §3 타겟 유저(20~40대 캐주얼~미드코어)와 STS의 사고형 몰입(평균 학습 시간 수십 시간)이 충돌. + +--- + +## 3. 권장안 + +### 3-1. 결론 + +**Vampire Survivors 방식을 기본 골격으로 채택하되, EerieVillage 고유의 "근거리 검 조작 + 2D 횡스크롤 플랫포머" 축을 유지하는 하이브리드**를 권장한다. + +### 3-2. 권장안 구조 (3줄 요약) + +1. **플레이어 직접 조작 유지**: 이동·점프·근거리 검 공격 (04_전투 §2·§5 계승). VS 원형의 "이동만"은 축 2를 약화하므로 기각. +2. **카드 효과는 자동 발동 + 플레이어 공격 강화의 두 축**: `[공격]`·`[방호]`·`[속도]` 태그는 플레이어 검 공격·이동에 즉시 적용 (STS형). `[부적]`·`[소환]`·`[주술]`·`[폭발]`·`[회복]` 태그는 주기 자동 발동 (VS형). content/01 32장 태그 체계가 이미 양 방식 분리 가능한 구조. +3. **레벨업 3픽 + 동일 카드 스택 업그레이드 유지**: system/01 규칙 1~4 골격 전부 계승. VS의 "진화(Evolution)" 개념은 **시너지 발동**(system/01 규칙 3)으로 대체하여 학습 부담 최소화. + +### 3-3. 권장 근거 (3~5줄) + +- **축 2(액션 플랫포머 손맛) 보존**: 플레이어 입력·검 공격·점프 회피를 핵심 축으로 유지. VS 원형의 "이동만 조작"은 축 2를 포기하는 결정이므로 EerieVillage에는 부적합. +- **축 1(육성 롤러코스터) 강화**: 자동 발동 카드가 화면에 쌓일수록 "내 플레이가 점점 압도적이 된다"는 VS 특유의 시각적 쾌감을 획득. 기존 3픽 긴장은 동일하게 유지. +- **모바일 UX 부담 최소**: 조작은 현 스킴 그대로(가상 스틱 + 점프·공격). 핸드 관리·에너지·턴 엔드 UI가 필요 없어 HUD 정보 밀도 유지 가능. +- **구현 복잡도 현실성**: VS 자동 발동형은 주기 타이머 + 투사체/AoE 풀링만 구현하면 확장 용이. BT.Framework Tier 1(Log·ValidationEx·MathEx·EnumEx·FormatEx)과 Unity PlatformerMicrogame Simulation 시스템 활용 가능 (C11 관점 — 개발팀 교차 검증 필요). +- **하이브리드의 선례 근거**: Dead Cells의 "장착 스킬 쿨타임 자동 + 플레이어 검 공격" 구조가 유사. STS 순수형·VS 순수형보다 EerieVillage 유지 제약 충족도가 높다. (추정: Dead Cells가 본 하이브리드 모델에 가장 근접한 양산 사례) + +### 3-4. 대안 (PD 결정 보조용) + +| 대안 | 요지 | 선정 시 영향 | +|---|---|---| +| **대안 A: VS 순수형** | 플레이어 조작 이동만. 검 공격도 자동 발동. | 축 2 사실상 포기. 캐주얼성 극대화. 구현 단순. BT5 템플릿 선택 근거 약화 | +| **대안 B: 하이브리드** (권장) | 검 공격 수동 + 카드 효과 자동·수동 혼합 | 축 1·2 모두 유지. 구현 중간 복잡도 | +| **대안 C: STS 변형** | 실시간 이동 유지 + 카드 사용 수동 (에너지 시스템) | 학습 부담 증가. 모바일 UX 부담 증가. 사고형 타겟 전환 필요 | + +--- + +## 4. 4티어 변경 반영안 + +### 4-1. 현 상태 모순 식별 (판단 선행) + +현 기획 문서 실측 결과 **이미 티어 체계가 내부 불일치 상태**: +- `system/01_카드_시스템.md §3 규칙 1`: 3티어 (T1 기본 · T2 숙련 · T3 각성) +- `content/01_카드_풀.md §2-1`: 3티어 (1티어 보통 · 2티어 귀 · 3티어 신) +- `balance/02_레벨업_곡선.md §4`: **4티어** 확률 테이블 존재 (Common · Uncommon · Rare · Epic) + +PD 지시의 "3→4 변경"은 이 불일치를 해소하는 방향이며, **balance 문서의 4티어가 이미 선행 존재**하므로 system·content를 balance에 맞춰 확장하는 방향이 자연스럽다. + +### 4-2. 권장 4티어 구조 — 3티어 사이 분할 + +**티어 추가 위치**: 기존 T2(숙련) vs T3(각성) **사이**에 신 티어 "비전(祕傳)" 삽입. T1 확장이나 T3 위 추가가 아닌 이유는 아래 §4-4에서 설명. + +| 신 티어 | 레이블 | 성격 | 해제 조건 | 등장 비율 지향 | +|---|---|---|---|---| +| **T1** | 기본 (普通) | 단일 효과·조합 진입점 | 런 시작 시 항상 활성 | 초반 주력, 후반 배경 | +| **T2** | 숙련 (鍛鍊) | 복합 효과·시너지 촉매 | 런 내 Lv.3 이상 도달 시 풀 합류 | 중반 주력 | +| **T3** | **비전 (祕傳) ← 신규** | 빌드 방향을 좁히는 특화 효과 | 런 내 Lv.5 이상 + 현 빌드 주력 태그 2장 이상 보유 시 출현 | 중후반, 빌드 확정기 | +| **T4** | 각성 (覺醒) | 빌드 완성자·화면 점유급 강력 효과 | 런 내 Lv.7 이상 + 보스 1회 이상 처치 시 출현 | 후반, 런 피날레 | + +### 4-3. 4티어 각각의 성격·해제 조건 + +1. **T1 기본 (普通)** — 단일 태그·단일 효과. 빌드 탐색의 출발점. 해제: 항상. 등장: 초반 주력, 후반 잔여. +2. **T2 숙련 (鍛鍊)** — 2개 태그 혹은 조건부 효과. 시너지 발동 조건 생성·촉매 역할. 해제: Lv.3+. 등장: 중반. +3. **T3 비전 (祕傳)** — 현재 빌드 주력 태그를 가진 **특화 효과**. "이미 선택한 길을 깊게 판다"는 감정. 해제: Lv.5+ & 주력 태그 2장 이상. 등장: 중후반 빌드 확정기. +4. **T4 각성 (覺醒)** — 3티어 요소의 완성자. 구 `content/01 §3` T3 5장(천지신명·천부경문·사령결계·산신령강림·천지음양방호·역천지기·귀문관·천지개벽)이 대체로 여기에 해당. 해제: Lv.7+ & 보스 1회 이상 처치. 등장: 후반 런 피날레. + +### 4-4. 왜 "중간 분할"인가 — 3안 비교 + +| 추가 위치 | 장점 | 단점 | 판정 | +|---|---|---|---| +| T1 아래 (초심자 티어 추가) | 진입 장벽 최소화 | T1이 이미 "기본"이라 의미 중복. 런 초반 선택지 과다 | 기각 | +| T3 위 (최상위 티어 추가) | 후반 빌드 피날레 강화 | balance/02 Epic 8~30% 등장 확률을 더 낮춰야 함. 체감 희박화 | 차선 | +| **T2·T3 사이 (권장)** | 중후반 빌드 확정기에 "내 빌드를 깊게" 감정 층 추가. 구 T3 5장(content/01)이 자연스럽게 T4로 승격 | 없음 (balance/02 기존 4티어와 정합) | **권장** | + +### 4-5. 32장 → 4티어 재분배 수치안 + +구 분포 (content/01 §3 실측): T1 12장·T2 15장·T3 5장. (T2에 다수 포진) + +| 티어 | 권장 분포 | 비중 | 이동·분류 근거 | +|---|---|---|---| +| T1 | 12장 | 37.5% | 현 T1 유지 (01·02·06·07·11·15·19·20·24·27) 10장 + 현 T2 하위 2장 재분류 | +| T2 | 10장 | 31.3% | 현 T2 중 "복합 효과 촉매"형 (03·08·16·22·25·28) 6장 + 4장 추가 재분류 | +| T3 (비전 신규) | 7장 | 21.9% | 현 T2 중 "빌드 특화"형 (04·09·12·13·17·21·26·29) 중 7장 승격 | +| T4 (각성, 구 T3) | 3장 | 9.4% | 구 T3 5장 중 3장만 유지 (05·10·14·18·23·30·31·32 중 피날레급 3장 선별). 2장은 T3 비전으로 강등 | + +**주의**: 위 장번호는 **예시 매핑**. content/01 개정 시점에 세밀 조정 필요 (기각안 2번 "과도한 재분배는 balance/02 기존 수치 충돌 위험"과 연관). + +### 4-6. 권장 덱빌딩 방식과의 정합성 + +- **VS 하이브리드 + 4티어**: VS의 진화(Evolution) 개념 대신 **"시너지 발동 + T3 비전 등장"** 이중 구조로 유사 감정 제공. 학습 부담은 T3 비전 해제 조건이 "Lv.5+ & 주력 태그 2장"이므로 플레이어가 자연 체득. +- **자동 발동 카드(T2·T3·T4)의 발동 주기 차등**: T2는 짧은 주기, T3 비전은 중간 주기 + 태그 보너스, T4는 긴 주기 + 대형 효과. balance/02의 티어별 출현 확률(§4)과 정합 유지. +- **T4 해제 조건의 재미 축 연결**: "보스 1회 이상 처치" 조건은 축 1(육성 롤러코스터) 중 "폭발" 직전 단계에서 T4가 열려 피날레 감정 강화. + +--- + +## 5. 개정 영향 범위 + +본 방향 결정(PD 승인) 시 **순차 개정**이 필요한 파일 목록. 본 검토 문서는 제안 단계이며 실제 개정은 PD 방향 결정 후 별도 집행. + +| 파일 | 개정 요지 | 책임 에이전트 | +|---|---|---| +| `system/01_카드_시스템.md` §3 규칙 1~4 | 3티어 → 4티어 확장. 픽 알고리즘에 "T3 비전 태그 보너스 조건" 추가. 업그레이드 체계는 그대로 유지. VS 하이브리드 방식 반영(카드 발동 분류: 수동 강화형 vs 자동 발동형) | system-designer | +| `content/01_카드_풀.md` §2-1·§3 | 티어 레이블 4종으로 재매핑. 32장 재분배 (위 §4-5 수치안 기준). 카드별 "자동 발동 vs 수동 강화" 분류 컬럼 신규 추가 | content-designer | +| `balance/01_전투_수치.md` §3 대미지 공식 | CardMultiplier 범위(1.0~2.5) 재검토. 자동 발동 카드의 DPS 기여도 추가 분석 필요. 수동 공격 카드와 DPS 합산 시 하드캡 DPS 100 유지 여부 재검증 | balance-designer | +| `balance/02_레벨업_곡선.md` §4 | 현 4티어 확률 테이블 유지 + 레이블을 신 체계 명(T1 기본·T2 숙련·T3 비전·T4 각성)으로 재매핑. 해제 조건(Lv.3/5/7·태그 2장·보스 처치)과 확률 테이블 정합성 검증 | balance-designer | +| `ux/02_HUD_설계.md` §3 레벨업 카드 픽 UI | 3장 레이아웃은 유지. 카드별 "자동 발동 vs 수동 강화" 아이콘 구분 표시 추가. T3 비전 등장 시 태그 보너스 시각 피드백 추가. HUD 정보 밀도 재평가 | ux-designer | + +**세계관 용어 유지**: narrative 영역 건드리지 않음. 카드명·티어명·태그명 등 기존 한자·조선 퇴마 톤 전부 유지. "비전(祕傳)"·"각성(覺醒)" 신 레이블은 현 톤과 정합. + +--- + +## 6. 기각안 (C32 필수 필드) + +1. **STS 순수 채택 — 기각.** + 근거: §2-2에 상세. 축 2(액션 플랫포머 손맛)를 구조적으로 포기해야 하며, 템플릿(2D PlatformerMicrogame) 선택의 전제(PD 코어 룰 2 횡스크롤 플랫포머)를 부정한다. 모바일 세로 화면 정보 밀도 초과·캐주얼 타겟 이탈까지 3중 부적합. + +2. **VS 순수 채택 (플레이어 조작 이동만) — 기각.** + 근거: 축 2를 축소 포기하는 결정이다. "근거리 검 공격으로 카드 효과를 직접 체감·전달하는 물성감"(01_게임_컨셉 §2 축 2)을 자동 발동 전환 시 "덱빌딩 감각은 얻지만 조작 손맛은 잃는" 교환이 된다. 본 유지 제약의 "2D 플랫포머·근거리 검"과 직접 충돌. 권장안 하이브리드가 축 2를 유지하면서 VS의 수치 폭발 쾌감을 획득한다. + +3. **4티어 최상위(T3 위) 추가 — 차선, 권장안 아님.** + 근거: §4-4 비교표. 기존 balance/02 §4 Epic 확률(8~30%)을 더 낮춰야 체감 희박성 유지 가능하나, 이 경우 Epic 카드 자체가 "거의 못 본다" 상태 전환 위험. T2·T3 중간 삽입이 기존 확률 테이블과 정합도 높고, 구 T3 5장이 자연스럽게 T4로 승격되는 구조적 이점 획득. + +4. **4티어 T1 아래 추가 (초심자 티어) — 기각.** + 근거: T1이 이미 "기본"이라 의미 중복. 런 초반 선택지 과다로 초심자 진입 장벽이 오히려 증가. PD 지시(카드 3픽 유지) 구조상 초반 3장 중 최하 티어 비중이 높으면 "이 게임은 처음에 뭐 골라도 효과가 미미하다"는 인상 형성 위험. + +5. **카드 풀 32장 유지 vs 확장 — 기각 (현 32장 유지).** + 근거: content/01 §5 기각안 2 "50장 이상 초기 풀 기각" 계승. 4티어 재분배로 볼륨 조정 충분. 업데이트 확장은 Phase 3-C 이후 별도 안건. + +6. **T3 비전의 "주력 태그 2장" 해제 조건을 동적 판정 대신 정적 판정으로 — 기각.** + 근거: 정적 판정(런 시작 시 태그 고정)은 VS의 실시간 성장 감각을 약화한다. 매 픽마다 빌드 주력 태그를 재평가하는 동적 판정이 "내 빌드를 깊게 판다"는 비전 티어 의도와 정합. 구현 복잡도는 태그 카운터 증가만이라 BT.Framework EnumEx 활용으로 해소 (C11 판단 — 개발팀 교차 검증 필요). + +--- + +## 7. 검토 요약 (PD 결정 보조용) + +1. **덱빌딩 방식**: VS 하이브리드 (권장) / VS 순수 / STS 변형 3안 중 택1 — PD 방향 결정 요청. +2. **4티어 구조**: T2·T3 중간 삽입 "비전(祕傳)" (권장) / T3 위 추가 (차선) 중 택1 — PD 방향 결정 요청. +3. **32장 재분배**: 12·10·7·3 권장 분포 — 방향 확정 후 content-designer 세밀 조정. +4. **개정 집행 범위**: system/01·content/01·balance/01·02·ux/02 5개 파일 순차 개정 — PD 승인 후 착수. +5. **narrative 영역**: PD 직접 지시에 따라 현행 유지 — 본 검토에서 건드리지 않음. + +--- + +## 8. 변경 이력 + +| 일시 | 변경 | 사유 | 기안 | +|------|------|------|------| +| 2026-04-24 | v0.1 BT7-Plan 덱빌딩 방식 검토 + 4티어 개정안 작성 | PD 직접 지시 2026-04-24 | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/ux/01_모바일_터치_UX.md b/프로젝트/EerieVillage/기획/ux/01_모바일_터치_UX.md index af45c50..80f37c9 100644 --- a/프로젝트/EerieVillage/기획/ux/01_모바일_터치_UX.md +++ b/프로젝트/EerieVillage/기획/ux/01_모바일_터치_UX.md @@ -2,29 +2,30 @@ type: 상세_기획 scope: 모바일_터치_UX author: ux-designer -date: 2026-04-23 -version: v0.1 (Phase 3-B) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3-B -data_source: BT5-Plan 04_전투_기본_스펙 v0.1 + BT5-Dev 03_게임_제작_준비 -status: 확정 골격 — 수치 실측은 balance-designer + 개발팀 협의 +data_source: 04_전투_기본_스펙.md v0.2 + BT5-Dev 03_게임_제작_준비 + BT7-Plan PD 확정 방향 11건 +status: BT7-Plan 개정 반영 — 공격 버튼 제거·VS 순수형 스킴 --- # 01. 모바일 터치 UX ## 1. 재미 축 연결 (P30) -본 스킴이 강화하는 재미: **축 2 "액션 플랫포머 손맛"**. 가상 스틱·버튼의 즉각 반응(0.1초 이내)과 오입력 최소화 레이아웃이 이동·점프·공격의 체감 직결 요소다. +본 스킴이 강화하는 재미: **축 2 "보며 즐기는" 액션 플랫포머**. 이동·점프의 즉각 반응(0.1초 이내)과 오입력 최소화 레이아웃이 회피·포지셔닝 스킬의 체감 직결 요소다. 공격 입력 제거로 조작 복잡도 감소 → 액티브 자동 발동 감상 재미에 집중. -## 2. 조작 스킴 확정 +## 2. 조작 스킴 확정 (BT7-Plan 재작성) + +**BT7-Plan 확정 방향 2 — VS 순수형**: 공격 버튼 제거, 이동·점프만. | 액션 | PC 입력 | 모바일 입력 | 비고 | |------|---------|------------|------| | **이동** | WASD/방향키 | 좌측 가상 스틱 | 엄지 자연 안착 영역 | -| **점프** | Space | 우측 점프 버튼 | 오른 엄지 도달 상단 | -| **공격** | 마우스 좌클릭 | 우측 공격 버튼 | 오른 엄지 도달 하단 | +| **점프** | Space | 우측 점프 버튼 | 오른 엄지 도달 영역 | -**결정 근거**: 04_전투_기본_스펙 §2 확정 스킴 계승. 단일 근거리 공격 1종으로 파일럿 시작 (공격 버튼 복수 기각안 계승). +**결정 근거**: 04_전투_기본_스펙 v0.2 §2 계승. 플레이어 수동 공격 입력은 존재하지 않음. 장착한 액티브 카드가 자동 발동. ## 3. 버튼 레이아웃 (화면 분할) @@ -36,49 +37,57 @@ status: 확정 골격 — 수치 실측은 balance-designer + 개발팀 협의 │ 플레이 영역 │ │ │ ├────────────┬─────────────────┤ -│ [가상스틱] │ [점프] [공격] │ ← 입력 영역 +│ [가상스틱] │ [점프] │ ← 입력 영역 (공격 버튼 제거) │ 왼손 엄지 │ 오른손 엄지 │ └────────────┴─────────────────┘ Safe Area (Home Indicator 회피) ``` - **가상 스틱 반지름**: 기본 60dp (BT 실측 전 후보값). 조이스틱 중심은 터치 다운 위치 추종 -- **점프 버튼**: 우측 상단. 오른 엄지 자연 신전 위치 -- **공격 버튼**: 우측 하단. 오른 엄지 굴곡 위치. 점프보다 크게 배치 (주요 인터랙션) +- **점프 버튼**: 우측 중앙. 오른 엄지 자연 도달 영역. **공격 버튼 제거로 단독 대형 배치** (시인성·터치 성공률 상승) - **투명도**: 기본 70%, 입력 시 100% (비활성 구분 피드백) - **Safe Area**: 노치(iOS) · 상태표시줄(Android) 상단 + Home Indicator/제스처바 하단 회피 의무 → SafeAreaBorder 컴포넌트 신규 구현 필요 (BT.Framework Tier 2 이관, §6 참조) -## 4. 입력 시스템 설계 +## 4. 입력 시스템 설계 (BT7-Plan 간소화) Unity **Input System 액션 맵** 기반: - `Move` (Value, Vector2) — 가상 스틱 → PC 키보드 WASD 동시 지원 - `Jump` (Button) — 점프 버튼 → Space -- `Attack` (Button) — 공격 버튼 → 마우스 좌클릭 + +**Attack 액션 제거** (BT7-Plan 확정 방향 2). 액티브 카드의 자동 발동은 게임 내부 타이머에 의해 처리되며 플레이어 입력 체계와 분리됨. **UITouchHandler** (BT.Framework Tier 2 신규 구현 예정): 가상 스틱 드래그 감도·데드존 처리 로직 캡슐화. 구현 전까지는 Unity OnScreenStick 임시 사용. -**즉각 반응 의무**: Input 감지 후 0.1초 이내 캐릭터 반응. 지연 시 플레이어가 입력 불인식으로 오인 (C7 피드백 원칙). +**즉각 반응 의무**: Input 감지 후 0.1초 이내 캐릭터 반응. 지연 시 플레이어가 입력 불인식으로 오인. ## 5. 피드백 설계 -### 5-1. 피격 피드백 (3종 의무, 04_전투_기본_스펙 §6 계승) +### 5-1. 피격 피드백 (3종 의무, 04_전투_기본_스펙 v0.2 §6 계승 + 피해량별 차등) | 피드백 종류 | 내용 | 인지 목표 | |-------------|------|----------| -| **시각** | 화면 테두리 붉은 섬광 + 캐릭터 깜박임(i-frame 표시) | 0.3초 이내 인지 | -| **청각** | 피격 SFX (사운드팀 명세) | 즉시 인지 | -| **진동 (모바일)** | 짧은 진동 1회 (~80ms) | 즉각 체감 | +| **시각** | 화면 테두리 붉은 섬광 + 캐릭터 깜박임(i-frame 표시) + **하트 UI 쿼터 분할 애니메이션** | 0.3초 이내 인지 | +| **청각** | 피격 SFX (피해량별 차등) | 즉시 인지 | +| **진동 (모바일)** | 피해량별 진동 차등 (§5-3 참조) | 즉각 체감 | + +**피해량별 차등 (BT7-Plan 하트 분할 구조 반영)**: +- 피해 1 (1쿼터): 짧은 진동 40ms + 테두리 연한 섬광 +- 피해 2 (반 하트): 중간 진동 80ms + 테두리 중간 섬광 +- 피해 3 (3/4 하트): 긴 진동 120ms + 테두리 강한 섬광 +- 피해 4 (하트 전소): 강한 진동 160ms + 테두리 최대 섬광 + 화면 살짝 흔들림 ### 5-2. i-frame(무적 시간) 표시 -- 피격 후 N ms 동안 캐릭터 스프라이트 **깜박임** (점멸 주기 80~120ms 후보) +- 피격 후 0.6초 동안 캐릭터 스프라이트 **깜박임** (점멸 주기 80ms, 7.5회) - 깜박임 종료 = 무적 해제 → 플레이어 학습 가능한 시각 언어 -- N 수치 (400~800ms)는 balance-designer + 개발팀 실측 확정 +- P19 심안 패시브 적용 시 0.8초까지 연장 가능 (깜박임 횟수 10회) -### 5-3. 버튼 입력 피드백 +### 5-3. 버튼 입력 피드백 (BT7-Plan 재정의) -- 버튼 눌림 시 시각적 눌림 애니메이션(스케일 축소 0.9x, 50ms) 의무 -- **성공 공격 적중** 시 짧은 진동 1회 (~40ms) — 손맛 강화 (재미 축 2) +- 버튼 눌림 시 시각적 눌림 애니메이션(스케일 축소 0.9x, 50ms) 의무 (점프 버튼) +- **공격 버튼 관련 진동 제거** (버튼 자체 폐기) +- **액티브 무기 발동 시 짧은 진동 1회 (~40ms)** — 자동 발동 체감 피드백 (BT7-Plan 재정의) +- **적중 시 히트스탑 3프레임 (50ms)** + 짧은 진동 1회 — 자동 발동이어도 타격감 유지 ## 6. BT.Framework 재사용 매핑 @@ -88,25 +97,30 @@ Unity **Input System 액션 맵** 기반: | **ValidationEx** | 버튼 null 체크·스틱 범위 검증 | Tier 1 P0 즉시 | | **MathEx** | 스틱 감도·데드존 보정 연산 | Tier 1 P0 즉시 | | **SafeAreaBorder** | Safe Area 패딩 자동 적용 | Tier 2 신규 구현 후 | -| **UITouchHandler** | 스틱 드래그·버튼 멀티터치 처리 | Tier 2 신규 구현 후 | +| **UITouchHandler** | 스틱 드래그·점프 버튼 멀티터치 처리 | Tier 2 신규 구현 후 | | **BackKeyDispatcher** | Android 뒤로가기 키 → 일시정지 메뉴 | Tier 2 신규 구현 후 | -Tier 2 3종 미구현 상태 (BT5-Dev 3단계 실측 확인 — `Runtime/UI/Components/` 빈 디렉토리). 개발팀 이관 항목. +Tier 2 3종 미구현 상태. 개발팀 이관 항목. ## 7. 기각안 -1. **"스와이프 회피 제스처" — 기각.** 캐주얼 포지션에서 스와이프는 이동 입력과 오입력 충돌 위험 과다. 라이프 1 전제에서 오입력 즉사는 재미 축 2 붕괴. 회피 메커니즘 도입은 PD 결정 대상 (04_전투_기본_스펙 §7 보류 계승). -2. **"고정 위치 가상 스틱" — 기각.** 터치 다운 위치 추종 방식이 다양한 그립 스타일 수용성 높음. 고정 위치는 손 크기·그립 편차로 오입력 증가. -3. **"버튼 비표시(보이지 않는 탭 영역)" — 기각.** 버튼 시각 피드백 부재는 입력 성공 여부 불확실성 유발. 플레이어가 입력이 먹혔는지 의심하게 만들어 C7 피드백 원칙 위반. +1. **"스와이프 회피 제스처" — 기각 (현행 유지).** 캐주얼 포지션에서 스와이프는 이동 입력과 오입력 충돌 위험 과다. 회피 메커니즘 도입은 Phase 3-C. +2. **"고정 위치 가상 스틱" — 기각 (현행 유지).** 터치 다운 위치 추종 방식이 다양한 그립 스타일 수용성 높음. +3. **"버튼 비표시(보이지 않는 탭 영역)" — 기각 (현행 유지).** 버튼 시각 피드백 부재는 입력 성공 여부 불확실성 유발. +4. **"공격 버튼 복수 배치(약공·강공)" 기각 — 의미 변화 (BT7-Plan).** 원 기각 근거는 "파일럿 근거리 1종 시작"이었으나 BT7-Plan에서 **공격 버튼 자체 폐기**로 의미 근본 변화. 복수 버튼 배치는 논의 대상 자체 소멸. **기각안 유지(번복 기록)**. +5. **"공격 버튼 유지 + 자동 발동 병행" — 기각 (BT7-Plan 신규).** PD 확정 방향 2 "VS 순수형 (이동·점프만)" 명시. 병행은 조작 복잡도 증가 + VS 원작 감상 재미 저해. +6. **"커스터마이즈 버튼 위치 기본 제공" — 기각 (현행 유지).** 파일럿 스코프에서는 기본 레이아웃만. Phase 3-C 설정 메뉴 도입 시 재검토. ## 8. 개발팀 이관 항목 - SafeAreaBorder · UITouchHandler · BackKeyDispatcher 컴포넌트 신규 구현 (BT.Framework Tier 2 승격 후 EerieVillage 편입) -- Input System 액션 맵 에셋 생성 + PC/모바일 바인딩 구성 -- 피격 진동 Unity Handheld.Vibrate() 또는 플랫폼별 Haptic 구현 +- Input System 액션 맵 에셋 생성 + PC/모바일 바인딩 구성 (**Attack 액션 제거**) +- 피격 진동 Unity Handheld.Vibrate() 또는 플랫폼별 Haptic 구현 (피해량별 차등) +- 액티브 발동 진동 피드백 통합 (Unity Haptic) ## 9. 변경 이력 | 일시 | 변경 | 사유 | 기안 | |------|------|------|------| | 2026-04-23 | v0.1 Phase 3-B 초기 확정 | BT6-Plan PD 지시 | ux-designer | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (공격 버튼 제거·VS 순수형·Attack 액션 제거·피해량별 진동 차등) | 기획팀장 | diff --git a/프로젝트/EerieVillage/기획/ux/02_HUD_설계.md b/프로젝트/EerieVillage/기획/ux/02_HUD_설계.md index 3ee0788..16c6e55 100644 --- a/프로젝트/EerieVillage/기획/ux/02_HUD_설계.md +++ b/프로젝트/EerieVillage/기획/ux/02_HUD_설계.md @@ -2,57 +2,82 @@ type: 상세_기획 scope: HUD_설계 author: ux-designer -date: 2026-04-23 -version: v0.1 (Phase 3-B) +date: 2026-04-24 +version: v0.2 (BT7-Plan 개정) project: EerieVillage phase: Phase 3-B -data_source: BT5-Plan 02_코어_루프 v0.1 + 04_전투_기본_스펙 v0.1 -status: 확정 골격 — 세부 레이아웃 수치는 개발팀 협의 +data_source: 02_코어_루프 v0.2 + 04_전투_기본_스펙 v0.2 + system/01_카드_시스템.md v0.2 + BT7-Plan PD 확정 방향 11건 +status: BT7-Plan 개정 반영 — 하트 분할 UI·액티브/패시브 슬롯 분리·각성 발동 연출 --- # 02. HUD 설계 ## 1. 재미 축 연결 (P30) -HUD 원칙: **정보 과다 = 정보 없음**. 라이프 1 시스템(즉사 전제)에서 HUD가 전달해야 할 것은 오직 "현재 상태"와 "다음 결정"이다. 한 화면에 한 가지 결정만 요구. +HUD 원칙: **정보 과다 = 정보 없음**. 하트 분할 구조(BT7-Plan 확정 방향 7)에서 HUD가 전달해야 할 것은: +- "현재 생존 상태" (하트 잔량 시각화) +- "다음 결정 트리거" (레벨업 예고·보물상자 획득·각성 조건 충족) +- "현재 빌드 상태" (액티브·패시브 슬롯) ## 2. 인게임 HUD 요소 -### 2-1. 정보 우선순위 +### 2-1. 정보 우선순위 (BT7-Plan 재구성) | 우선순위 | 요소 | 이유 | |---|---|---| -| **1순위** | 라이프 표시 (생존 여부) | 라이프 1 즉사 → 즉시 인지 필수 | +| **1순위** | **하트 UI (생존 여부 + 잔량)** | 하트 분할 구조 → 쿼터 단위 잔량 즉시 인지 필수 | | **2순위** | 레벨 + 경험치 게이지 | 레벨업 카드 픽 트리거 예고 | -| **3순위** | 카드 슬롯 (현재 보유 카드) | 빌드 확인용, 전투 흐름 방해 금지 | +| **3순위** | **액티브 슬롯 (장착 무기 + Lv 표기)** | 자동 발동 감상 재미의 기준 정보 | +| **4순위** | **패시브 슬롯 (장착 패시브 + Lv 표기)** | 빌드 확인용, 전투 흐름 방해 금지 | +| **5순위** | 각성 조건 진행도 (신규) | 액티브 Lv.5 도달 시 "각성 대기" 표시 | -### 2-2. HUD 배치 (와이어프레임) +### 2-2. HUD 배치 (와이어프레임, BT7-Plan 재설계) ``` ┌──────────────────────────────┐ -│ [Lv.3 ████████░░] [♥] │ ← 좌상단: 레벨·경험치 + 라이프 +│ [Lv.3 ████████░░] [♥ ♥] │ ← 좌상단: 레벨·경험치 + 하트 분할 UI │ [⚙] │ ← 우상단: 일시정지 ├──────────────────────────────┤ │ │ │ 플레이 영역 │ │ │ -│ [카드1][카드2][카드3] │ ← 하단: 카드 슬롯 (반투명) -│ [입력 영역] │ -└──────────────────────────────┘ +├────────────┬─────────────────┤ +│ 액티브: │ 패시브: │ ← 하단: 카드 슬롯 분리 (반투명) +│ [A1][A2] │ [P1][P2][P3] │ +│ [A3][★★] │ [P4][P5][P6] │ ← ★ = 각성 대기 표시 +└────────────┴─────────────────┘ + [입력 영역: 가상스틱 + 점프] ``` -- **라이프 표시**: 하트 아이콘 1개. 피격 시 깜박임·소멸 애니메이션 (1초 이내 인지) +- **하트 UI**: ♥ 하트 분할 시각화 (풀·3/4·반·1/4·빈 5단계, Zelda BotW 방식). 최대 하트 수 증가 시 우측 추가 하트 아이콘 생성 (최대 5개, 한 줄 배치) - **레벨·경험치 게이지**: 텍스트 + 바. FormatEx로 "Lv.N" 포맷 렌더링 -- **카드 슬롯**: 보유 카드 아이콘 최대 N개 (N=balance-designer 결정). 소형·반투명으로 전투 방해 최소화 +- **액티브 슬롯**: 6개 슬롯 (BT7-Plan 확정 방향 6). 좌측 반투명 배치. 각 슬롯 아이콘 우하단에 Lv 표기 (Lv.1~Lv.5) +- **패시브 슬롯**: 6개 슬롯. 우측 반투명 배치. 각 슬롯 아이콘 우하단에 Lv 표기 +- **각성 대기 표시 (신규)**: 액티브 슬롯 내 아이콘이 Lv.5 도달 + 필요 패시브 1개 이상 보유 시 해당 슬롯 테두리 황금색 하이라이트 + ★ 아이콘 부착 - **일시정지 버튼**: 우상단 고정. Safe Area 내 배치 의무 -### 2-3. 보스전 추가 HUD +### 2-3. 하트 UI 분할 스프라이트 (BT7-Plan 신규) + +**젤다 BotW 방식 5단계 상태**. 개발팀 이관 항목(§9): + +| 상태 | 스프라이트 | 애니메이션 | +|---|---|---| +| 풀 (4/4) | `heart_full.png` | 정적 | +| 3/4 | `heart_three_quarter.png` | 우하단 1/4 사라짐 애니 (150ms) | +| 반 (2/4) | `heart_half.png` | 우측 반 사라짐 애니 (150ms) | +| 1/4 | `heart_one_quarter.png` | 좌상단 1/4만 남기 애니 (150ms) | +| 빈 (0/4) | `heart_empty.png` | 외곽선만. 하트 전소 애니 후 전환 (200ms) | + +하트 전소 시 → 우측 하트 아이콘이 있으면 새 하트가 즉시 활성. 모든 하트 전소 시 사망 분기. + +### 2-4. 보스전 추가 HUD 보스룸 진입 시 보스 HP 바 상단 출현: - 보스 이름 + HP 바 (화면 상단 중앙) +- 페이즈 2 진입 시 바 색상 전환 + 경고 아이콘 - 보스 HP 0 도달 시 바 사라짐 + 처치 피드백 (성공 인지 1초 이내) -## 3. 레벨업 카드 픽 UI (분기 포인트 1) +## 3. 레벨업 카드 픽 UI (분기 포인트 1, BT7-Plan 재설계) **트리거**: 경험치 만렙 → `Time.timeScale = 0` 일시정지 → 카드 픽 화면 진입 @@ -61,18 +86,62 @@ HUD 원칙: **정보 과다 = 정보 없음**. 라이프 1 시스템(즉사 전 │ │ │ 레벨 업! Lv.N → Lv.N+1 │ │ │ -│ [카드 A] [카드 B] [카드 C] │ ← 3장 선택 -│ 설명 설명 설명 │ -│ │ +│ ┌──────┐ ┌──────┐ ┌──────┐ │ +│ │[액티브]│ │[패시브]│ │[액티브]│ │ ← 분류 아이콘 상단 표시 +│ │ 카드A │ │ 카드B │ │ 카드C │ │ +│ │ Lv.1 │ │ Lv.2 │ │ 신규 │ │ ← 업그레이드 vs 신규 명시 +│ │설명 │ │설명 │ │설명 │ │ +│ └──────┘ └──────┘ └──────┘ │ └──────────────────────────────┘ ``` - **Canvas**: CardPickCanvas.prefab (Additive), timeScale 0에서도 정상 동작 (Unscaled Time 사용) +- **분류 구분 표시 (신규)**: 각 카드 상단에 **액티브·패시브 아이콘** 명시 (색상·기호). 플레이어가 "어떤 슬롯으로 들어갈 카드인가" 즉시 인지 +- **업그레이드 vs 신규 구분**: 이미 장착한 카드는 "Lv.N → Lv.N+1" 표기, 미장착은 "신규" 표기 +- **각성 조건 힌트 (신규)**: 액티브 카드가 Lv.4 도달 시 "다음 픽으로 Lv.5 → 각성 조건 근접" 힌트 표시 (선택적) - **결정 압박 없음**: 시간 제한 없이 선택 가능 (캐주얼 포지션) - **선택 피드백**: 카드 선택 시 하이라이트 + 확인 버튼 노출 → 실수 방지 2단계 - **선택 완료**: `Time.timeScale = 1` 복귀 + 카드 획득 시각 피드백 -## 4. 마을 UI (허브 화면) +## 3-A. 각성 발동 피드백 UI (신규, BT7-Plan 확정 방향 5·10) + +**트리거**: 보물상자 획득 → 각성 발동 조건 충족 판정 → 조건 충족 시 연출 진입 + +``` +보물상자 획득 연출 (1.5s) + ↓ +조건 충족 판정 + ↓ (충족) +┌──────────────────────────────┐ +│ │ +│ ★ 각성! ★ │ +│ │ +│ A05 학익진 → AW05 학익천진 │ +│ │ +│ [풀스크린 이펙트] │ +│ │ +└──────────────────────────────┘ + ↓ (3s) +액티브 슬롯 아이콘 각성 형태로 변환 + ↓ +전투 재개 +``` + +- **풀스크린 효과**: 황금색 섬광 + 각성 이름 대형 표기 + 원 액티브 → 각성 변환 애니메이션 +- **지속시간**: 3초 (캐주얼 페이싱 유지, 너무 길지 않게) +- **Unscaled Time 사용**: `Time.timeScale = 0` 일시정지 상태에서 연출 진행 +- **복수 조건 충족 시 선택 UI**: `system/01_카드_시스템.md` v0.2 §7 엣지 케이스 3 반영. 2개 이상 각성 조건 동시 충족 시: + ``` + ┌────────────────────────┐ + │ 각성 조건 복수 충족! │ + │ 발동할 각성을 선택하세요│ + │ │ + │ [AW05] [AW12] │ + │ │ + └────────────────────────┘ + ``` + +## 4. 마을 UI (허브 화면) — BT7-Plan 유지 진입점: 게임 시작 / 사망 복귀 / 보스 처치 후 귀환 @@ -81,19 +150,20 @@ HUD 원칙: **정보 과다 = 정보 없음**. 라이프 1 시스템(즉사 전 | **스테이지 선택** | 다음 도전 스테이지 결정 | 스테이지 번호·난이도 표시 | | **특성 목록** | 현재 보유 특성 확인 | 유지 자산 확인 (사망 후 안도감) | | **아이템 슬롯** | 장착 아이템 현황 | 파츠별 1개 제한 가시화 | -| **출발 버튼** | 스테이지 진입 | 단일 CTA (Call-To-Action) | +| **기본 무기 정보 (신규)** | 퇴마사 고유 기본 무기 스펙 | 시작 무기 정보 | +| **출발 버튼** | 스테이지 진입 | 단일 CTA | - NPC 대화·상점은 Phase 3-C 이후 확장 (파일럿 제외) -- 화면 전환: 버튼 탭 → 씬 전환. 씬 전환 UX (페이드·연출)는 Phase 3-B 후속 과제 +- 화면 전환: 버튼 탭 → 씬 전환. 씬 전환 UX(페이드·연출)는 Phase 3-B 후속 -## 5. 사망·복귀 전환 UI +## 5. 사망·복귀 전환 UI (BT7-Plan 업데이트) -**목표**: 사망 낙차 감정을 1~2초 이내로 처리하여 "다시 하고 싶다" 루프 유지 (02_코어_루프 §6 계승) +**목표**: 사망 낙차 감정을 1~2초 이내로 처리하여 "다시 하고 싶다" 루프 유지 -1. **사망 연출**: 1~2초 (캐릭터 소멸 애니메이션) -2. **결과 표시**: "런 종료 / 레벨 N 도달 / 획득 경험 N" 1화면. 심플하게 -3. **마을 복귀**: 로딩 느낌 없이 Additive Load 씬 전환 (VillageScene 상시 유지 방식) -4. **유지 자산 확인**: 마을 복귀 직후 아이템·특성 유지 표시 → 낙차 후 안도 제공 +1. **사망 연출**: 1~2초 (**하트 소멸 애니메이션** + 캐릭터 소멸 애니메이션) — BT7-Plan 하트 UI 반영 +2. **결과 표시**: "런 종료 / 레벨 N 도달 / 최대 하트 N / 획득 경험 N / 발동 각성 N" 1화면 +3. **마을 복귀**: 로딩 느낌 없이 Additive Load 씬 전환 +4. **유지 자산 확인**: 마을 복귀 직후 아이템·특성 유지 표시 → 낙차 후 안도 제공 (최대 하트 수는 기본 1개로 초기화 표시) **인지 목표**: 사망부터 다음 스테이지 선택까지 5초 이내 (페이싱 유지). @@ -102,26 +172,34 @@ HUD 원칙: **정보 과다 = 정보 없음**. 라이프 1 시스템(즉사 전 | BT.Framework | HUD 활용 용도 | 구현 시점 | |---|---|---| | **Log** | HUD 갱신 이벤트 디버그 | Tier 1 P0 즉시 | -| **FormatEx** | "Lv.N" · 경험치 수치 포맷 | Tier 1 P1 | -| **EnumEx** | 카드 슬롯 타입 enum 순회 | Tier 1 P2 | +| **FormatEx** | "Lv.N" · 경험치 수치 포맷 · "Lv.5 / 5" 스택 표기 | Tier 1 P1 | +| **EnumEx** | 카드 슬롯 타입 enum(액티브/패시브/각성) 순회 | Tier 1 P2 | | **SafeAreaBorder** | HUD 요소 Safe Area 자동 패딩 | Tier 2 신규 구현 후 | ## 7. 접근성 기본 원칙 -- **색맹 대응**: 라이프·보스 HP는 색상 외 형태(아이콘·바 형태)로 이중 표현 +- **색맹 대응**: 하트·보스 HP·슬롯 분류 구분은 색상 외 형태(아이콘·위치·기호)로 이중 표현 - **텍스트 크기**: 최소 14sp (모바일 기준), 중요 수치는 18sp 이상 - **버튼 터치 영역**: 최소 44×44dp (Apple HIG / Google Material 공통 기준) +- **각성 발동 연출**: 플래시 민감도 대응 옵션 제공 (풀스크린 효과 강도 조절) ## 8. 기각안 -1. **"미니맵 HUD 포함" — 기각.** 2D 횡스크롤 플랫포머에서 미니맵 정보 밀도가 손맛·집중을 저해. 스테이지 구조는 선형 진행 설계로 방향 혼란 없음. 추가 필요 시 Phase 3-C 재검토. -2. **"카드 슬롯 상시 크게 표시" — 기각.** 카드 슬롯은 빌드 확인 보조 정보. 전투 중 시선 분산 유발. 반투명 소형으로 유지하되 일시정지 시 풀 표시. -3. **"시간 제한 카드 픽" — 기각.** 캐주얼 포지션. 시간 제한은 긴장을 주지만 카드 텍스트 읽기 방해 → 빌드 이해도 하락 → 재미 축 1 "육성 카타르시스" 저해. +1. **"미니맵 HUD 포함" — 기각 (현행 유지).** 2D 횡스크롤 플랫포머에서 미니맵 정보 밀도가 손맛·집중을 저해. 선형 진행 설계로 방향 혼란 없음. +2. **"카드 슬롯 상시 크게 표시" — 기각 (현행 유지).** 슬롯은 빌드 확인 보조 정보. 반투명 소형으로 유지하되 일시정지 시 풀 표시. +3. **"시간 제한 카드 픽" — 기각 (현행 유지).** 캐주얼 포지션. 시간 제한은 카드 텍스트 읽기 방해. +4. **"하트 UI 대신 HP 수치만 표기" — 기각 (BT7-Plan 신규).** 하트 분할 시각화의 재미 핵심은 "수치가 아닌 형태 인지"(젤다 BotW 고전 강점). 수치 표기는 부가 정보로만 허용 (디버그용 옵션). +5. **"액티브·패시브 슬롯 통합 표시" — 기각 (BT7-Plan 신규).** PD 확정 방향 3에서 3분류 구조 명시. 통합 표시는 "어떤 카드가 자동 발동되는가" 정보 혼선 유발. +6. **"각성 발동 연출 생략 (즉시 변환)" — 기각 (BT7-Plan 신규).** 각성은 클라이맥스 순간의 카타르시스. 연출 생략은 재미 축 1 "육성 폭발" 감정 파괴. 3초 연출 유지 필수. ## 9. 개발팀 이관 항목 -- CardPickCanvas.prefab + Unscaled Time 애니메이션 구현 +- CardPickCanvas.prefab + Unscaled Time 애니메이션 구현 (**액티브/패시브 분류 구분 표시 반영**) +- **AwakeningCanvas.prefab 신규 구현** — 각성 발동 풀스크린 연출 + 복수 조건 선택 UI - SafeAreaBorder 신규 구현 후 HUD Canvas에 적용 +- **하트 UI 분할 스프라이트 5단계** (풀·3/4·반·1/4·빈) 렌더링 시스템 +- **하트 아이콘 동적 생성 로직** (최대 하트 수 증가 시 우측 추가) +- **각성 대기 표시 황금 테두리 + ★ 아이콘** (액티브 슬롯 조건 충족 시) - 사망 결과 화면 씬 플로우 (Additive Load VillageScene 유지) - FormatEx "Lv.N" · 경험치 바 UI 컴포넌트 구현 @@ -130,3 +208,4 @@ HUD 원칙: **정보 과다 = 정보 없음**. 라이프 1 시스템(즉사 전 | 일시 | 변경 | 사유 | 기안 | |------|------|------|------| | 2026-04-23 | v0.1 Phase 3-B 초기 확정 | BT6-Plan PD 지시 | ux-designer | +| 2026-04-24 | v0.2 — BT7-Plan 개정 집행 — PD 지시 11건 반영 (하트 분할 UI 5단계·액티브/패시브 슬롯 분리·각성 발동 풀스크린 연출·각성 대기 표시·하트 수 증가 UI) | 기획팀장 |