--- type: 테이블 데이터 구조 재정비 (수상한잡화점) 작성일: 2026-04-20 작성자: 기획팀장 (PM 경유 PD 재발 방지 지시 #42 수용) 관련PD지시: 기획팀 #42 · PD 2026-04-20 "게임 내 테이블 데이터 구조 재확인 + 누락 정보 보완" 상태: **v1 초안 · PD 검증 선행** 근거: Unity Export 실측 (D:/NerdNavis/FilGoodBandits/DeckBuilding/Assets/ResWork/Table/Export/) --- # 수상한잡화점 — 테이블 데이터 구조 재정비 v1 ## §0. 본 문서의 목적 2026-04-20 PD 재발 방지 지시 5종 중 #42 "게임 내 테이블 데이터 구조 재확인 + 누락 정보 보완" 이행. **기존 기획팀이 "WorldMap 4개 그룹" 같이 추측·전제로 데이터 구조를 오해한 사건**을 계기로 Unity Export CSV/JSON 전수 실측 기반 구조 재정비. **본 문서는 재발 방지 + 추후 모든 기획 작업의 1차 데이터 참조 SOT**다. --- ## §1. PD 용어 정의 확정 (SOT) | 용어 | 정의 | 데이터 출처 | 총 개수 | |------|------|------------|---------| | **월드맵** | 게임 세계 전체 맵 | `WorldMapConfig` | 1개 | | **구역 / 지역** | 월드맵 내 각 지역 (= Stage) | `WorldMapConfig.n_StageID` 1~21 | **21개** | | **스테이지** | 지역 내 각 맵 (= MapConfig) | `CreateMapConfig.s_MapConfigID` | **122개** | | **서브맵** | 스테이지 내 노드 (전투·이벤트·이동 등) | 런타임 생성 (RandomPatternConfig 기반) | 스테이지마다 가변 | ### §1-1. 용어 혼선 주의 - **구 기획팀 용어 "WorldMap"** = 실제로는 **일부 스테이지 묶음의 배경 테마**에 불과 (`WorldMapConfig.s_StageBg` = map_01~map_10 재활용) - **"WM1~WM4 그룹"은 실측 무근 · 기획팀 추정이었음** — 본 v1 문서 이후 사용 금지 - **PD 지시 용어 엄수**: 월드맵·구역/지역·스테이지 3층 명칭만 사용 --- ## §2. WorldMapConfig 구조 ### §2-1. 필드 정의 (실측) | 필드 | 타입 | 의미 | |------|------|------| | `n_StageID` | int (1~21) | 월드맵 장소(=지역) 고유 ID | | `n_StageName` | 참조 (localization) | UI 표기용 명칭 | | `s_StageDiorama` | string (공란) | 월드맵 배치 디오라마 이미지 | | `s_StageBg` | string | UI 사용 BG 이미지 (map_01~map_10 재활용) | | `s_StageBGM` | string (공란) | 스테이지 BGM | | `n_ExtraRandombag` | int | 이벤트 추가 전리품 랜덤백 ID | ### §2-2. 실측 내용 21개 지역. Stage 1~21. 배경 이미지(`s_StageBg`)는 map_01~map_10이 반복 사용됨. ### §2-3. 기획 의도 재확인 - **각 지역은 독립적 세계관 공간** (지역 1 = 첫 입문 지역, 지역 21 = 최종 지역) - 지역별 배경 테마는 10종 순환 사용 (디자인 리소스 최적화) - 기획 시 **"WorldMap 4개 그룹"은 실존하지 않음** — 21개 지역을 난이도 곡선 상 **입문/초반/중반/후반**으로 나누는 **기획적 구분**은 가능하나, 이는 **데이터 구조가 아닌 기획 레이블** --- ## §3. CreateMapConfig 구조 ### §3-1. 필드 정의 (실측 41개 필드) #### 식별자 + 매핑 | 필드 | 의미 | |------|------| | `s_MapConfigID` | 맵 고유 ID (형식: `Stage{지역번호}_{순번}`, 예: `Stage1_1`·`Stage1_4`) | | `n_StageType` | 지역 번호 (1~21), WorldMapConfig.n_StageID 참조 | | `n_AppearMonsterGroup` | 일반 몬스터 그룹 ID → `ApprearMonsterPattern.n_AppearMonserGroup` 참조 | | `n_AppearBossGroup` | 보스 몬스터 ID (0 = 보스 없음) → `MonsterList.n_ID` 참조 | #### 노드 확률 체계 (10종 노드 타입) 각 노드 타입은 **4필드 세트**(확률·최소·최대·Data Border): | 노드 타입 | 확률 필드 | 의미 | |----------|----------|------| | 몬스터 | `f_Monster` / `n_MobNodeMin` / `n_MobNodeMax` | 전투 노드 | | 버프/디버프 | `f_BuffDebuff` / `n_BuffDebuffMin` / `n_BuffDebuffMax` | 효과 노드 | | 캠프 | `f_CampFire` / `n_CampMin` / `n_CampMax` | 휴식·회복 | | 암상인 | `f_Merchant` / `n_MerchantMin` / `n_MerchantMax` | 상점 | | 보물 | `f_Treasure` / `n_TreasureMin` / `n_TreasureMax` | 보상 | | NPC | `f_NPC` / `n_NPCMin` / `n_NPCMax` | 이벤트 | | 성소 | `f_Mine` / `n_MineMin` / `n_MineMax` | 특수 장소 | | 갈림길 | `f_TwoWay` / `n_TwoWayMin` / `n_TwoWayMax` | 경로 선택 | | Nothing | `f_Nothing` / `n_NothingMin` / `n_NothingMax` | 빈 공간 | | Random | `f_Random` / `n_RandomMin` / `n_RandomMax` | 랜덤 롤 | ### §3-2. 실측 현황 — 지역별 하위 스테이지 수 | 지역 | 하위 스테이지 수 | | 지역 | 하위 | | 지역 | 하위 | |------|-----|---|------|-----|---|------|-----| | 1 | **4** | | 8 | 5 | | 15 | 5 | | 2 | 6 | | 9 | 6 | | 16 | 3 | | 3 | 5 | | 10 | 5 | | 17 | 8 | | 4 | 7 | | 11 | 5 | | 18 | 8 | | 5 | 6 | | 12 | 7 | | 19 | 9 | | 6 | 7 | | 13 | 4 | | 20 | 9 | | 7 | 4 | | 14 | 5 | | 21 | 4 | **총 122 스테이지**. PD 2026-04-20 실측과 완전 일치. ### §3-3. 기획 의도 재확인 - **현재 수치는 임시 데이터** — 모든 스테이지에 동일 확률(80 몬스터 / 16.2 캠프 등) 입력 - **기획팀의 역할**: 스테이지별 노드 확률·최소/최대 개수 **차별화 설계** - **PD 고려사항 5종 (재확인)**: 1. **몬스터 특성**: MonsterList.n_Specificity1~4 활용 2. **고정+랜덤**: 스테이지마다 고정 몬스터 + 매 판 랜덤 조합 3. **3★ 조건**: 12개 조건 풀 순환 배치 (P17 배타 7종 준수) 4. **반복 방지**: 지역 내 스테이지 간 + 지역 간 다양성 5. **지역 순차**: 지역 1 완성 → PD 승인 → 지역 2 착수 ### §3-4. 누락 정보 (추후 확인 필요) - `n_AppearBossGroup` 형식 불일치: `CreateMapConfig`에서 `10001`·`10002` 등 **MonsterList.n_ID 직접 참조**로 보임. 하지만 이름이 `n_AppearBossGroup`(그룹 ID)이라 의미 혼동 — **개발팀 확인 필요** --- ## §4. ApprearMonsterPattern 구조 ### §4-1. 필드 정의 | 필드 | 의미 | |------|------| | `n_AppearMonserGroup` | 몬스터 그룹 고유 ID (CreateMapConfig.n_AppearMonsterGroup 참조) | | `n_MonsterID` | 해당 그룹에 소속된 몬스터 ID (MonsterList.n_ID 참조) | | `n_AppearRate` | 등장 확률 (100 = 무조건 등장 후보) | ### §4-2. 실측 예시 (Stage1_1) - `n_AppearMonsterGroup = 10101` - 소속 몬스터: `14001`·`14002`·`14013` (Pattern 소속 3종) ### §4-3. 기획 의도 - **그룹 ID 체계**: `{지역번호}0{순번}` (예: 10101 = 지역 1 · 스테이지 1번 · 그룹 1) - Stage 1 = 10101~10104 (4개 하위 스테이지) - Stage 2 = 10201~10206 (6개) - ... Stage 21 = 82101~82104 (4개) - 각 그룹에 **3~5종 몬스터**가 등장 후보로 등록 - 런타임에 해당 그룹에서 무작위 선택 (PD 고려사항 2 "랜덤" 대응) --- ## §5. MonsterList 구조 ### §5-1. 필드 정의 (실측 24개 필드) #### 식별·표기 | 필드 | 의미 | |------|------| | `n_ID` | 몬스터 고유 ID (보스 10001~10028 · 일반 11001~14024 등) | | `n_Name` | 로컬라이제이션 참조 ID | | `e_MonsterType` | Boss_Range · Boss_Melee · Normal_Range · Normal_Melee 등 | | `s_Image` / `s_Icon` | 리소스 경로 | #### 전투 능력치 (기획팀 1차 참조) | 필드 | 의미 | |------|------| | `n_RewardExp` | 처치 경험치 | | `n_HP` | 체력 | | `n_Shield` | 보호막 (0 = 쉴드 없음) | | `f_AttackCoolTime` | 공격 쿨타임 (초) | | `n_AttackMin` / `n_AttackMax` | 공격력 범위 | | `n_HitRate` | 명중력 (정수) | | `f_Cri` / `f_CriDmg` | 치명타 확률·피해량 | | `n_Avoid_Meele` / `n_Avoid_Range` | 근·원 회피력 | | `f_Scale` | 몬스터 크기 배율 | | `e_AttackType` | Melee / Range | | `s_Projectile` | 원거리 투사체 경로 | #### 몬스터 특성 (PD 고려사항 1 대응 — 핵심 기획 축) | 필드 | 의미 | |------|------| | `n_Specificity1~4` | 특성 ID (StatusConditionsList 참조 추정) | 예시: - **오우거1 (10004)**: Specificity1=31004 · Specificity2=32004 → "체력 2배, 최대 공격력 2배" - **다크엘프 아처1 (10010)**: Specificity1=31010 · Specificity2=32010 → "광포화-신속 / 치명타 15%" ### §5-2. 참고 필드 (CSV 헤더 31번째 이후) - `Lv`·`DPS`·`몬스터 특성` — 기획 참고용 원본 수치 ### §5-3. 기획 의도 재확인 - **몬스터 특성**이 PD 고려사항 1의 핵심 — 스테이지별 몬스터 선정 시 특성 조합 기반 - 특성 ID 체계(`31XXX`·`32XXX`)는 `MonsterPatternList.json` 또는 `StatusConditionsList.csv`와 교차 참조 필요 - **누락 정보**: Specificity ID → 효과명 매핑 테이블이 어디에 있는지 확정 필요 (개발팀 확인) --- ## §6. 기타 관련 테이블 (요약) ### §6-1. RandomPatternConfig - 스테이지 내 **랜덤 노드 롤 규칙** (몬스터/버프/상인/보물/NPC/성소/갈림길 비중) - 4가지 프리셋: 기본·많은 상인·많은 상자·많은 몬스터 - CreateMapConfig.f_Random이 이 테이블을 참조하여 런타임 확장 ### §6-2. StatusConditionsList - 상태 효과 정의 (Slow·Burn·Poison·Stun·Freezing·Blind·Heal_Hp_Add·Heal_Shield_Add 등) - 이펙트 경로 + 표시 위치 - 몬스터 특성·카드 효과에서 참조 가능 ### §6-3. CardList - 카드 스탯 (공격력·쿨·효과) - Phase 3 `이슈1_3_무시확정_v1.md §3`에서 고정 전제 확정 ### §6-4. GlobalValue - 게임 전역 상수 (밸런스 조정 기준치 다수) ### §6-5. 추후 전수 조사 필요 - `AchievementsMission`·`BuffPatternConfig`·`BattleLevelUp`·`ContentsOpenCondition` 등 — 현 Phase 4 범위 외 보류 --- ## §7. 기존 산출물 오염 범위 (재정비 대상) ### §7-1. 중대 오염 (전면 재작성 필요) | 문서 | 오염 내용 | 재정비 방식 | |------|----------|------------| | `Phase4_지역1_노드구성_v1.md` | 지역 1 = Stage 1~6 (6개) 가정으로 전체 설계 | **전면 폐기 · v2 재작성** (지역 1 = Stage1_1~1_4 = 4개) | | `스테이지난이도곡선_v1.md §1` | "WorldMap_1~4 4개 그룹" 가정 | §1만 삭제·재작성 · §2~이후 실측 수치(서브맵수·보스)는 정확하므로 **유지** | | `맵패턴_사전분석_v1.md` (의심) | "42 슬롯" 체계 가정 (추정 = 21 스테이지 × 2 슬롯) | **재검증 필요** — 121 스테이지 기준으로 재산출 가능성 | | `재검증보고_맵패턴_v1.md` (Day 11~14) | 상위 가정 오류로 부분 오염 | **설계 원칙 추출만 승격 · 수치 재검증** | ### §7-2. 경미 오염 (원칙 승격 + 언급 수정) | 문서 | 오염 내용 | 재정비 방식 | |------|----------|------------| | `Phase3_종결_설계체계_v1.md` | WorldMap 4그룹 가정 잔존 가능성 | 본 v1 문서 참조 추가 + 해당 표현 교체 | | `Phase4_노드구성_착수가이드_v1.md` | "청크 1 = Stage 1~6" 가정 | **재정비** — 청크 = 지역 1개씩으로 재정의 (Stage1_1~1_4 = 지역 1 청크) | | `이슈1_3_무시확정_v1.md §3` | 오염 없음 예상 (카드 수치 영역) | 교차 점검만 수행 | ### §7-3. 오염 없음 (유지) - `3성조건_12개_상세명세_v1.md` — 조건 풀 자체는 WorldMap 구조 무관 - `SKILL.md P17 배타 7종` — 배타 조합 자체는 WorldMap 구조 무관 - `밸런싱전략_v1.md`·`밸런싱문서_일관성점검_v1.md`·`전체테이블감사_v1.md` — 데이터 테이블 실측 기반이라 오염 없음 --- ## §8. 재정비 우선순위 ### §8-1. 즉시 (본 라운드) 1. **본 v1 문서 작성** (SOT 확립) 2. **기획팀 데이터 실측 의무 룰 (#43) 작성** 3. **Phase4_지역1_노드구성_v2.md 재작성** (4개 스테이지 기준) 4. **기존 v1 상단에 "아카이브됨" 배너 추가** ### §8-2. 후속 (별도 PD 지시 수령 시) 5. `스테이지난이도곡선_v1.md §1` 정정 6. `Phase4_노드구성_착수가이드_v1.md` 재정비 7. `맵패턴_사전분석_v1.md`·`재검증보고_맵패턴_v1.md` 재검증 8. `Phase3_종결_설계체계_v1.md` 표현 수정 --- ## §9. 기각안 ### §9-1. 기각안 A: 기존 v1 수치 살리기 (Stage 1~6을 지역 1로 유지) - **기각 사유**: PD 2026-04-20 "PD가 구성한 지역별 스테이지 수량 임의 수정 금지" 직접 지시 위반 - **손실**: v1 초안 전량 재작성 필요 - **이득**: 재작성 없음 (기각) ### §9-2. 기각안 B: "WorldMap 4그룹"을 기획 레이블로 명시하고 병행 사용 - **기각 사유**: 용어 혼선의 근본 원인. 병행 사용 시 신규 기획자 재혼동 유발 (C22 용어 일관) - **대체안**: "입문/초반/중반/후반 구간"은 **기획 레이블로만 별도 명시** (데이터 구조가 아닌 밸런싱 분류) ### §9-3. 기각안 C: 누락 정보(Specificity ID 매핑 등)를 기획팀 자체 추정으로 보완 - **기각 사유**: C23 허위 보고·추정 사실화 금지. 본 재발 방지 지시 #42의 교훈 정면 위반 - **대체안**: 개발팀 확인 요청 (소통 채널 발행 또는 PM 조율) --- ## §10. 참고 문서 - Unity Export 경로: `D:/NerdNavis/FilGoodBandits/DeckBuilding/Assets/ResWork/Table/Export/` - 실측 CSV 11종 (본 문서 기반): WorldMapConfig · CreateMapConfig · ApprearMonsterPattern · MonsterList · StatusConditionsList · RandomPatternConfig · CardList · PCList · PCAwakening · PCEvolution · PCEvolutionMax · GlobalValue · ItemList · BuffPatternConfig · RewardRandomBag · SanctuaryConfig · StatusOptionSet - 전수 감사: `프로젝트/수상한잡화점/기획/전체테이블감사_v1.md` - 3성 조건 SOT: `프로젝트/수상한잡화점/기획/3성조건_12개_상세명세_v1.md` - 배타 규칙: SKILL.md P17 - 기획팀 룰: `프로젝트/수상한잡화점/기획/기획팀_데이터_실측_의무_v1.md` (#43 산출물) --- ## §11. 변경 이력 (P16 산출물 추적성) | 일시 | 변경자 | 변경 필드 | 이전값 → 이후값 | 재미 근거 | 관련 PD 지시# | |------|--------|----------|----------------|----------|--------------| | 2026-04-20 | 기획팀장 | 전체 신설 | (없음) → v1 초안 | 재발 방지 + 정확한 데이터 구조가 기획 의도 실현의 전제 | #42 |