← 자료실/designsLOWAPPROVED

Transcendent Drop Table - Sprint 01 W1 산출물 README

designs/transcendent_drop_table_README.md

Transcendent Drop Table - Sprint 01 W1 산출물 README

작성: 2026-04-21 (game-designer) · 근거: designs/transcendent_reward_draft.md v1.0 APPROVED 문서 상태: APPROVED v1.0 (PD 승인 2026-04-21) --- ## PD 승인 결정 (재검토 2건 + 리스크 1건) | # | 결정 | 후속 영향 | |---|------|-----------| | §4 등급 리매핑 | 그대로 확정 (Normal→Common / Superior→Rare / 원본 Rare→Epic / Unique→Legendary / Magic·Mythic 신설) | Importer는 GradeRemap.cs 로 원본값 즉시 치환. 원본 "Rare" 리터럴은 신규 Epic임을 code-lead가 명시적으로 인지 | | §6-#6 어픽스 이월 | Sprint 02 이월 승인 — W2엔 affix_pool.tsv 6행(grade→slot count)만 반영. OptionItemRandom 211행 실수치 접합은 Sprint 02 전담 스프린트로 | Sprint 02 킥오프 시 "어픽스 풀 실수치 주입" 별도 과제로 편성 필요 | | R2 Magic 베이스 부족 | Normal 베이스 복제 방식 채택 — Sprint 02에 ItemInfo.xml의 Normal 아이템을 복제하여 Magic 파생 생성 | Sprint 02 game-designer·code-lead 공동 작업 (어픽스 이월 과제와 묶어서 진행) | Q4·Q5 유예 상태 유지. Sprint 03+ 실측 리튜닝 대상.

1. 파일 구성

파일행수역할
transcendent_drop_table.tsv60층 구간 × 등급 × 일반/보스 드롭률 매트릭스
transcendent_milestone_reward.tsv2210/50/100/150/200층 확정 보상
transcendent_affix_pool.tsv6Q3 6등급 × 어픽스 슬롯/값 범위 뼈대
transcendent_drop_table_README.md—본 문서

모든 TSV: UTF-8 no-BOM, 탭 구분자, 헤더 1행. Sprint 00 TranscendentStageSO Importer 규약과 동일.


2. 원본 자산 탐색 결과

자산상태경로 / 라인조치
data_transcendent_stage_reward SQL 스키마확보Dump20210311.sql:4069-408111 컬럼 그대로 참조
RewardItemInfo.xml / TranscendentStageReward 시트확보Datasheets/RewardItemInfo.xml:150579, 3459 데이터 행 (R5C1:R3463C13)Importer 주입 대상
OptionInfo.xml / OptionItemRandom 시트확보Datasheets/OptionInfo.xml:33967, 211 어픽스 행어픽스 실수치 주입 대상
TranscendentStageSO.cs확보Unity6/Assets/_Project/Scripts/Data/TranscendentStageSO.cs (Sprint 00 PR #1)보조 TSV는 덧붙임 레이어
원본 Grade 리터럴4개만 발견Normal / Superior / Rare / Unique신규 6등급에 매핑 (§4)

2.1 원본 TranscendentStageReward 13 컬럼

순서컬럼타입신규 TSV 대응
1Readbool(임포트 플래그)
2Descriptionstringnotes 필드로 흡수
3RewardGeneralCodeintmilestone.reward_code / 드롭풀 ID
4StageGeneralCodeintTranscendentStageSO.generalTypeCode와 FK
5RequiredClassenum (All/Berserker/...)싱글 리부트에선 All 고정 권장
6Actint무한던전은 단일 Act → 상수
7StageNoint층 번호
8GeneralTypeCodeint실제 드롭되는 아이템 코드
9ItemMinCountintreward_count min
10ItemMaxCountintreward_count max
11DropRatefloatdrop_rate 최종 값
12EquipTypeenum직업 필터 제거 후에도 슬롯(Weapon/Ring/Armor)은 유지
13Gradeenum4등급 → 6등급 리매핑 필요 (§4)

2.2 원본 OptionItemRandom 11 컬럼

순서컬럼의미
1Read플래그
2Description옵션 한글명 (예: "공격력 기본")
3OptionRandomGroupID아이템 RandomOptionGroup 인덱스 (Item 시트와 연동)
4OptionDivisionOptionBase.OptionCode 인덱스
5OptionRank그룹 내 랭크
6OptionAdjustType+/- (1/-1)
7OptionDataType0 Constant / 1 Percent
8OptionValueMinfloat, 범위 최소
9OptionValueMaxfloat, 범위 최대
10Interval값 변화 단위
11OptionRate10000 분율 적용 확률

해석: 원본은 "그룹 ID + 랭크"로 풀을 정의, 10000 분율 Weighted 추첨. 신규 6등급 체계는 affix_pool.tsv 의 grade 를 축으로 접근하되, 실제 값은 이 OptionItemRandom 211행을 Sprint 01 W2 에 code-lead 가 Importer로 연결.


3. TranscendentStageSO 와의 연결 그림

TranscendentStageSO (Sprint 00 - 고정)
 ├─ generalTypeCode  ────────────┐
 ├─ stageNumberInAct ─ 1~200     │  (stage FK)
 ├─ bossSpawnHpAmount            │
 ├─ RewardGeneralCode  ──────┐   │
 ├─ FirstRewardGeneralCode   │   │
 └─ AddRewardGroupCode   ────┤   │
                             │   │
                             ▼   ▼
            ┌─────────────────────────────────┐
            │   transcendent_drop_table.tsv   │  (신규, Sprint 01)
            │  floor_range × grade × mob_kind │
            │  → 실제 드롭 선택 확률만 정의    │
            └──────────────┬──────────────────┘
                           │
                           ▼ (grade 축이 일치)
            ┌─────────────────────────────────┐
            │   transcendent_affix_pool.tsv    │  (신규, Sprint 01)
            │  grade × slot_count × value range │
            └──────────────┬──────────────────┘
                           │
                           ▼ (OptionRandomGroupID 매핑)
            ┌─────────────────────────────────┐
            │   OptionInfo.xml/OptionItemRandom │  (원본, Sprint 01 W2)
            │   실제 Prefix/Suffix 수치 211행    │
            └─────────────────────────────────┘

마일스톤:
  transcendent_milestone_reward.tsv
    └─ floor (10/50/100/150/200) 도달 시 확정 지급
       → 드롭 테이블과 독립 경로 (겹치지 않음)

4. 등급 리매핑 규칙 (원본 4 → 신규 6)

원본 Grade출현수(RewardItemInfo)신규 매핑비고
Normal2,535Common기본 템 그대로
(없음)—Magic신규 — 어픽스 2슬롯 저가 접근
Superior3,386RareSuperior를 Rare로 승격 (Diablo 식)
Rare (원본)3,743Epic원본 Rare는 실질 상위 템 → Epic으로 흡수
Unique2,960Legendary1:1
(없음)—Mythic신규 — 시즌 최상위

근거: 원본 EOD는 4등급이지만 신규 방치형 6등급 체계를 위해 Magic / Mythic 두 층을 신설. Importer 는 기존 XML의 Grade 컬럼을 위 매핑표로 치환하여 drop_table.tsv 의 grade 와 충돌 없이 통합.

I-3 패치 (2026-05-04, #W1-03): transcendent_affix_pool.tsv 의 legacy_grade_map 컬럼은 원본 자산 추적용 메타데이터로, Sp01 W2 Importer는 본 컬럼을 무시한다 (등급 리매핑은 §4 표만 진실). R2 정책(Magic 베이스 = Normal 복제)은 Sp02 W2 코드 분기로 처리.

5. 드롭률 합 검증

층 구간일반 합보스 합
1~301.0001.000
31~801.0001.000
81~1301.0001.000
131~1801.0001.000
181~2001.0001.000

모든 구간 합 = 1.000 ± 0.000. 오차 없음.

5.1 Mythic 기대치 검증 (181~200층 일반)

초안보다 기대치가 크므로, Epic 이상만 개별 보존 필터(Q2) 가 반드시 켜져야 로그 폭주 방지. settings.idle.keepIndividualLogFromGrade = "Epic" 상수로 code-lead에 전달.


6. Sprint 01 W2 code-lead 임포터 검증 체크포인트

  1. Grade 리매핑 변환 테이블 — §4 의 4→6 매핑을 GradeRemap.cs enum 또는 Dictionary 로 하드코딩. 누락 시 Importer 에서 즉시 Fail (Unknown grade exception).
  2. 드롭 테이블 검색 함수는 (floor:int, mobKind:enum, grade:enum) 키 — 60행 테이블을 런타임 Lookup O(1) 로. Dictionary<(int,int,int), float> 추천.
  3. 층 구간 경계값 편입 규칙 — floor_range_min <= floor <= floor_range_max (양끝 포함). 30/31 경계에 테스트 케이스 2개 필수.
  4. TSV 파서 "TBD_" 프리픽스 처리 — reward_code가 TBD_ 로 시작하면 플레이스홀더 로그만 남기고 Skip (임시, Sprint 02 이후 실제 코드로 치환 예정).
  5. 드롭률 합 자기검증 — Importer 끝에서 층 구간별 합이 1.000 ± 0.001 인지 Assert. 벗어나면 Editor 콘솔에 Error 로그 (런타임 Crash 금지).
  6. 어픽스 풀은 Week 2 완결 금지 — affix_pool.tsv 6행은 "뼈대". 실제 OptionItemRandom 211행 접합은 Sprint 02 로 이월 권장. Week 2 엔 "Grade→슬롯 수"만 반영해도 충분.
  7. 마일스톤은 드롭 테이블과 별도 경로 — 10/50/100/150/200 층에서 MilestoneGranter.Award(floor) 같은 이벤트 한 번만 실행, 드롭 Roll 과 중복 지급 금지.

7. 리스크 · 미해결


8. 분량

본 문서 8쪽 이내, TSV 총 88행. 초안 한 번에 완결. Sprint 01 W2 code-lead Importer 착수 전 PD 재검토 필요 구간은 §4 등급 리매핑과 §6-#6 어픽스 이월 여부 두 곳.