BurningTimesAi/기획팀/밸런싱/수상한잡화점/3성조건_12개_상세명세_v1.md

32 KiB
Raw Blame History

수상한 잡화점 — ★ 조건 12개 풀 상세 명세서 v1

작성일: 2026-04-14 담당: 기획팀장 (PD님 재량 위임 — Phase 3 HOLD 중 가능 작업) 위임 근거: 2026-04-14 PD님 지시 "Phase 3 작업 전 진행 가능한 작업을 기획팀장이 판단하에 진행" 문서 성격: P18 설계 문서화 의무 이행 (Phase 2 §5 PD님 3차 승인의 조건 풀 12개에 대한 본문 작성) HOLD 준수: 본 문서는 판정 로직·측정 변수·UI 표시·개발실 구현 요청까지만 다룸. 구체적 수치 최종 확정은 Phase 3 재개 후 시뮬 검증으로 수행


0. 본 문서의 목적·범위

목적

Phase 2 §5에서 PD님 3차 승인으로 확정된 ★ 조건 풀 12개(+N7 보류)에 대해, 각 조건별:

  1. 정의 (기본 의미)
  2. 달성 판정 로직 의사코드
  3. 측정 변수 (게임 런타임 중 추적해야 할 값)
  4. UI 표시 방식
  5. 개발실 구현 요청 포인트
  6. 엣지 케이스 및 주의 사항

를 한 곳에 정리한다. 개발실이 Headless C# 시뮬 추출 시 동시에 구현해야 할 조건 판정 코드의 설계 기반 자료.

범위 외 (HOLD 준수)

  • 조건별 구체적 수치 최종 확정 금지 — 수치는 Phase 3 재개 후 시뮬 결과로만 산출
  • 조건 풀 12개 추가·삭제 금지 — PD님 3차 승인으로 확정된 풀 유지
  • 스테이지별 슬롯 배치 확정 금지 — 맵 패턴 사전분석 v1 §3-3 검증틀을 실제로 적용하는 것은 Phase 3 재개 후
  • 카드 수치 조정 제안 금지 — 이슈 1·3 재논의 영역

P18 준수 (설계 문서 필수 포함 사항)

항목 본 문서 위치
결정의 배경 §1 (Prove-2-of-3 체계 도입 배경)
선택된 방향과 대안 §2 (조건 풀 12개 선정 경위)
구현 가이드라인 §3~§5 (조건별 명세)
검증 방법 §6 (조건 판정 검증 체크리스트)
변경 이력 §8

1. Prove-2-of-3 체계 개요 (결정 배경)

1-1. 체계 구조

수상한 잡화점 스테이지의 3성(★★★) 클리어는 Prove-2-of-3 체계로 판정:

충족 조건
★1 스테이지 클리어 (기본)
★2 스테이지 클리어 + 슬롯2 조건 1개 달성
★3 스테이지 클리어 + 슬롯2·슬롯3 조건 2개 동시 달성
  • 스테이지별 슬롯2·슬롯3은 사전 지정 (고정). 런타임 랜덤 없음
  • 슬롯 지정은 스테이지 특성(노드 수·몬스터 배치 패턴·등장 몬스터 수)과 연동
  • PD님 2차 승인 (2026-04-14)으로 대방향 확정

1-2. 조건 설계 원칙 (PD님 3차 승인 기준)

  1. 유저가 확실히 컨트롤할 수 있는 조건: 누적형·운 의존·빌드 의존 조건 부적합
  2. 재도전 유도 방향성: "무난하게 모든 조건을 완성"이 아니라 "특정 조건을 만족하기 위해 여러 번 재도전"을 유발하도록 다소 난해한 수준
  3. 완화 방향 금지: 조건 수치는 "완화"가 아닌 "재도전 유도" 방향 튜닝
  4. P17 배타 배치 규칙 준수: 동시 배치 금지 조합 7종 회피

1-3. 조건 분류

Phase 2 §5 용어 기준:

  • C 계열 (Clear 조건): 스테이지 진행 과정 전체 관점 6종 — C1·C2·C3·C6·C9·C12
  • N 계열 (Node 조건 또는 Numeric 조건): 서브맵 단위 또는 특정 행동 기반 6종 — N1·N2·N3·N4·N5·N6
  • 합계: 12종 (C10 "성장의 증거" 보류, N7 "방어 성공" 보류, N8 "저 HP 완주" 변형 채택)

2. 조건 풀 12개 요약 테이블

ID 명칭 계열 수치 방식 유저 컨트롤 난이도 재도전 유도 강도
C1 신속 시간 스테이지 총 소요 시간 ≤ 임계값
C2 완벽 클리어 HP 스테이지 종료 시 PC HP = MaxHP
C3 고 HP 완주 HP 스테이지 종료 시 PC HP ≥ MaxHP × 70% 저~중
C6 포션 절제 카운트 스테이지 내 포션 사용 횟수 ≤ 임계값
C9 보스 집중 카운트 보스 대상 유효 공격 ≥ 임계값
C12 회피 주도 카운트 회피 발생 횟수 ≥ 서브맵수 × 3 이상 (유지 이상)
N1 빗맞힘 절제 카운트 빗맞힘 횟수 ≤ 임계값
N2 피격 제한 카운트 피격 횟수 ≤ 서브맵수 × 1 이하
N3 치명타 처치 카운트 치명타로 몬스터 처치 ≥ 임계값 중~고
N4 쉴드 보존 비율 스테이지 종료 시 Shield ≥ MaxShield × 30% 이상
N5 후열 선공 순서 서브맵마다 최초 공격 대상이 후열 저~중
N6 전열 선공 순서 서브맵마다 최초 공격 대상이 전열 저~중

주의: 임계값 "이상/이하"의 구체적 숫자는 본 문서에서 확정하지 않는다 (HOLD 범위). C# 시뮬로 재도전 유도 강도와 밸런스를 검증한 후 Phase 3 재개 시점에 PD님 승인으로 확정.


3. C 계열 조건 상세 명세 (6종)

3-1. C1 — 신속 (스테이지 총 소요 시간)

정의

스테이지 시작부터 최종 보스 처치(또는 스테이지 종료)까지의 총 경과 시간이 임계값 이하.

달성 판정 로직 (의사코드)

OnStageStart:
    stageTimer.start()

OnStageClear:
    totalTime = stageTimer.elapsed()
    if totalTime <= C1_threshold_of_stage(stageID):
        condition_C1_satisfied = true
    else:
        condition_C1_satisfied = false

측정 변수

변수명 타입 설명 리셋 시점
stageTimer_elapsedSec float 스테이지 시작부터 누적 시간(초) 스테이지 시작 시 0으로

UI 표시

  • 스테이지 진입 시: 상단 또는 슬롯 표시 영역에 "목표: XX초 이내 클리어" (임계값 명시)
  • 플레이 중: HUD에 경과 타이머 실시간 표시 (기존 시스템 활용 여지 확인 필요)
  • 스테이지 종료 시: 결과창에 실제 소요 시간 vs 임계값 병기 + ✓/✗ 표시

개발실 구현 요청 포인트

  1. 스테이지 경과 시간이 이미 측정되고 있는지 확인 (StageManager 또는 유사 클래스)
  2. 포즈·메뉴 오픈 시간 제외 여부 결정 필요 — 기획팀장 초안: 실제 전투 시간만 카운트, UI 포즈 중 시간 제외
  3. 임계값은 스테이지별 고정 테이블로 관리 (예: StageClearCondition.json 또는 기존 테이블 확장)

엣지 케이스

  • 사망 후 재시작: 재시작 시 타이머 0 리셋 (같은 스테이지 내 이어하기 없음 가정)
  • 일시정지: 포즈 시간 제외 여부는 구현 방식에 따름
  • 매우 짧은 스테이지 (Stage 1~2): 임계값이 너무 타이트하면 첫 플레이에서는 거의 불가능 — 재도전 유도 목적에는 적합하나 Stage 1·2의 입문 부담 고려 필요

P17 배타 조합

  • (입문 1~6) C1 ∧ C3 동시 배치 금지 — 입문 구간 이중 부담
  • 중반·후반은 허용

3-2. C2 — 완벽 클리어 (HP = MaxHP)

정의

스테이지 종료 시점에 PC의 HP가 MaxHP와 같음 (피격 후 회복도 인정).

달성 판정 로직 (의사코드)

OnStageClear:
    if pc.currentHP == pc.maxHP:
        condition_C2_satisfied = true
    else:
        condition_C2_satisfied = false

측정 변수

변수명 타입 설명 리셋 시점
pc.currentHP int/float PC 현재 HP 실시간 갱신
pc.maxHP int/float PC 최대 HP (성장·카드 효과 반영) 성장·버프 적용 시 갱신

UI 표시

  • 스테이지 진입 시: "HP Full 유지 필요" 뱃지
  • 플레이 중: HP 바가 100% 미만으로 떨어지면 해당 조건 위반 예고 상태 (아이콘 흐려짐 등)
  • 스테이지 종료 시: 결과창 ✓/✗

개발실 구현 요청 포인트

  1. pc.maxHP가 카드·각성·장비 효과로 실시간 변하는 경우의 처리 필요
  2. 스테이지 종료 시점 정의 명확화: 최종 보스 처치 직후 프레임 vs 결과창 오픈 시점
  3. 중요: 피격 후 회복하여 HP=MaxHP 도달해도 인정 (PD님 해석 확인 필요 시 문의)

엣지 케이스

  • MaxHP 증가 효과 (G3 "MaxHP 2배" 등) 중 HP도 2배로 회복되는가? — 개발실 코드 확인 필요
  • 종료 시점 판정 프레임: 결과창 오픈 시점 HP 기준으로 통일 권장

P17 배타 조합

  • C2 ∧ N2 동시 배치 금지 — 피격 최소화 축 이중 부담

3-3. C3 — 고 HP 완주 (HP ≥ MaxHP × 70%)

정의

스테이지 종료 시점에 PC의 HP가 MaxHP의 70% 이상.

※ 임계값 "70%"는 Phase 2 §5 원안 기반 초안. Phase 3 재개 후 시뮬 결과로 재튜닝 가능.

달성 판정 로직 (의사코드)

OnStageClear:
    hpRatio = pc.currentHP / pc.maxHP
    if hpRatio >= C3_threshold:  // 초안 0.7
        condition_C3_satisfied = true
    else:
        condition_C3_satisfied = false

측정 변수

변수명 타입 설명
pc.currentHP / pc.maxHP float HP 비율 (0.0~1.0)

UI 표시

  • 스테이지 진입 시: "HP 70% 이상 유지" 뱃지
  • 플레이 중: HP 바에 "70% 마커" 표시
  • 스테이지 종료 시: 결과창에 최종 HP 비율 + ✓/✗

개발실 구현 요청 포인트

  • C2와 동일 구조. 임계값만 다름
  • 임계값 상수화 필수 (스테이지별 개별 튜닝 가능성 대비)

엣지 케이스

  • C2 충족 시 C3도 자동 충족 (HP=MaxHP는 ≥70% 만족). 논리상 문제 없음, 같은 슬롯에 중복 배치만 피하면 됨

P17 배타 조합

  • (입문 1~6) C1 ∧ C3 동시 배치 금지

3-4. C6 — 포션 절제 (포션 사용 ≤ N)

정의

스테이지 내 포션(회복 아이템) 사용 횟수가 임계값 이하. "미사용"은 N=0 케이스.

달성 판정 로직 (의사코드)

OnPotionUsed(potionType):
    potionUseCount += 1

OnStageClear:
    if potionUseCount <= C6_threshold:
        condition_C6_satisfied = true
    else:
        condition_C6_satisfied = false

측정 변수

변수명 타입 설명 리셋 시점
potionUseCount int 스테이지 내 포션 사용 누적 스테이지 시작 시 0

UI 표시

  • 스테이지 진입 시: "포션 사용 N회 이하" 뱃지
  • 플레이 중: 포션 슬롯 UI에 남은 허용 횟수 표시
  • 스테이지 종료 시: 실제 사용 vs 임계값 + ✓/✗

개발실 구현 요청 포인트

  1. "포션"의 정의 명확화: HP 포션·MP 포션·기타 소모품 중 어느 것을 카운트할지
  2. 기획팀장 초안: HP 회복계 물약만 카운트 (메테오·전체 기절 같은 전투용 물약은 별도 조건으로 다룰지 추후 논의)
  3. 패시브로 발동되는 회복 효과는 카운트 제외

엣지 케이스

  • 물약 빌드와의 충돌: 물약 사용 시 추가 효과가 있는 카드(메테오·7.5초 무적·전체 기절)를 플레이하면 C6 달성 불가 → P17-2 배타 "C6 ∧ 물약 사용 유도 조건"으로 방지
  • 회복 빌드와의 충돌: 힐 카드 패시브 회복은 포션 사용이 아니므로 영향 없음

P17 배타 조합

  • C6 ∧ 물약 사용 유도 조건 동시 배치 금지
  • C6 ∧ N4(쉴드 하한) 동시 배치 금지 — 회복 빌드 외 빌드 배제

3-5. C9 — 보스 집중 (보스 대상 유효 공격 ≥ N)

정의

스테이지 내 보스 몬스터를 대상으로 한 유효 공격 횟수가 임계값 이상. "처치 우선순위를 보스에 둔 플레이"를 유도.

※ "유효 공격"의 정의·임계값은 Phase 3 재개 후 시뮬로 확정. 본 문서는 판정 틀만 제시.

달성 판정 로직 (의사코드)

OnAttackLanded(attacker, target, damage):
    if attacker == pc and target.type == MonsterType.Boss and damage > 0:
        bossHitCount += 1

OnStageClear:
    if bossHitCount >= C9_threshold_of_stage(stageID):
        condition_C9_satisfied = true
    else:
        condition_C9_satisfied = false

측정 변수

변수명 타입 설명
bossHitCount int 스테이지 내 보스 피격(플레이어→보스) 누적

UI 표시

  • 스테이지 진입 시: "보스에 N회 이상 공격" 뱃지
  • 플레이 중: 카운터 표시 (권장)
  • 스테이지 종료 시: 실제 vs 임계값 + ✓/✗

개발실 구현 요청 포인트

  1. "유효 공격" 정의:
    • 기획팀장 초안: 데미지 > 0인 공격만 카운트 (빗맞힘·회피된 공격 제외)
    • 무적·반사 상태 몬스터 대상 공격의 카운트 여부 결정 필요
  2. Shield 흡수된 공격: HP에 들어간 데미지가 0이라도 Shield에 데미지가 들어갔다면 카운트해야 함 (개발실 판단 필요)
  3. DOT (도트 데미지) 처리: 독·화상·처형 같은 지속 데미지 틱을 카운트할지 여부

엣지 케이스

  • 보스가 여러 체인 경우 (Stage 20 등 3체): 각 보스별 카운트를 합산
  • 보스 미등장 서브맵 + 보스 등장 서브맵 혼재: 전체 스테이지 합산이므로 문제 없음. 단, 보스 미등장 서브맵 비율이 너무 높으면 임계값 달성 불가
  • 단독 보스 스테이지 (Stage 7·10·13): P17-5로 C9 배치 금지

P17 배타 조합

  • C9 ∧ 단독 보스·보스 미등장 스테이지 동시 배치 금지
  • 맵 패턴 재검증 필요 (맵패턴_사전분석_v1 §1·§2 참조)

연동 작업

  • 보스 혼용 등장 패턴 설계 (맵패턴_사전분석_v1 §2) 완료 후 임계값 재튜닝

3-6. C12 — 회피 주도 (회피 횟수 ≥ 서브맵수 × 3 이상)

정의

스테이지 내 PC의 회피 발생 횟수가 (해당 스테이지 서브맵 수 × 3) 이상. PD님 지침 "유지 이상"으로 재도전 유도 강도 고수위.

달성 판정 로직 (의사코드)

OnAttackMissed(attacker, target):
    if target == pc and miss_reason == "Avoid":
        avoidCount += 1

OnStageClear:
    requiredAvoid = submap_count_of_stage(stageID) * 3
    if avoidCount >= requiredAvoid:
        condition_C12_satisfied = true
    else:
        condition_C12_satisfied = false

측정 변수

변수명 타입 설명
avoidCount int 스테이지 내 회피 발생 누적
submap_count_of_stage(stageID) int 해당 스테이지 서브맵 총 수 (고정 데이터)

UI 표시

  • 스테이지 진입 시: "회피 X회 이상" (X = 서브맵수 × 3) 뱃지
  • 플레이 중: 카운터 표시 권장
  • 스테이지 종료 시: ✓/✗

개발실 구현 요청 포인트

  1. "회피"의 정의: Avoid_M / Avoid_R 스탯에 의한 미스만 포함. 빗맞힘(Miss)과 구분 필요
  2. 몬스터 공격에 대한 PC 회피만 카운트. PC 공격이 몬스터에게 회피된 것은 N1(빗맞힘 절제)의 "빗맞힘"에 해당 (별도 조건)
  3. 서브맵 수는 스테이지별 고정 데이터 (CreateMapConfig.json 또는 유사)에서 조회

엣지 케이스

  • 서브맵 수 이상 스테이지 (Stage 7=4, 13=4, 16=3 등): 임계값이 낮아져 달성이 쉬워질 수 있음 — PD님 지침 "유지 이상"에 따라 스테이지별 추가 상향 검토 여지
  • 회피율 극대화 빌드: 회피 빌드와 시너지가 극도로 강함. P17에 "회피 빌드 유도 조건"과의 배타 조합이 필요한지는 추후 판단 (현재 미등재)

P17 배타 조합

  • 현재 P17 7종 배타 조합에 C12는 포함되지 않음
  • 단, N1(빗맞힘 절제)과 구조 유사점 있음. 동시 배치 시 혼동 가능성 UI 점검 필요

4. N 계열 조건 상세 명세 (6종)

4-1. N1 — 빗맞힘 절제 (빗맞힘 ≤ N)

정의

스테이지 내 PC의 공격 빗맞힘(Miss) 횟수가 임계값 이하. "정확도 플레이"를 유도.

달성 판정 로직 (의사코드)

OnAttackMissed(attacker, target):
    if attacker == pc and miss_reason == "Miss":  // Hit 판정 실패
        missCount += 1

OnStageClear:
    if missCount <= N1_threshold:
        condition_N1_satisfied = true
    else:
        condition_N1_satisfied = false

측정 변수

변수명 타입 설명
missCount int 스테이지 내 PC 공격이 빗맞은 횟수

UI 표시

  • 스테이지 진입 시: "빗맞힘 N회 이하" 뱃지
  • 플레이 중: 카운터 (권장, 선택적)
  • 스테이지 종료 시: ✓/✗

개발실 구현 요청 포인트

  1. Miss 스탯 vs Avoid 스탯을 명확히 구분해 판정 (공격자 Hit 실패 = Miss, 수비자 회피 성공 = Avoid)
  2. 몬스터의 회피 성공(Avoid_M/R) 때문에 PC 공격이 빗나간 경우 — 이것은 "Miss"가 아니라 "Avoided"로 구분해야 함. 구분 불가능한 경우는 C9·C12와 상호 모순 발생 가능성 → 개발실 점검 필요

엣지 케이스

  • 빗맞힘이 극히 드문 빌드 (높은 명중률 빌드): N1 달성이 거의 자동 → 임계값을 낮춰 난이도 확보 필요
  • C12와의 구분 UI: "회피"와 "빗맞힘" 용어 혼동을 방지하는 UI 문구 필요

P17 배타 조합

  • 현재 없음

4-2. N2 — 피격 제한 (피격 ≤ 서브맵수 × 1 이하)

정의

스테이지 내 PC가 피격받은 횟수가 (서브맵수 × 1) 이하. Shield·HP에 데미지가 들어간 모든 피격 카운트.

달성 판정 로직 (의사코드)

OnDamageReceived(target, damage):
    if target == pc and damage > 0:
        hitCount += 1

OnStageClear:
    maxHits = submap_count_of_stage(stageID) * 1
    if hitCount <= maxHits:
        condition_N2_satisfied = true
    else:
        condition_N2_satisfied = false

측정 변수

변수명 타입 설명
hitCount int 스테이지 내 PC 피격 누적

UI 표시

  • 스테이지 진입 시: "피격 X회 이하" (X = 서브맵수 × 1) 뱃지
  • 플레이 중: 카운터 표시 필수 — 피격 1회마다 긴장감 고조
  • 스테이지 종료 시: ✓/✗

개발실 구현 요청 포인트

  1. "피격"의 정의:
    • 기획팀장 초안: Shield 흡수 피격 + HP 데미지 피격 모두 카운트 (의도된 방어가 있었든 없었든 "맞았다"는 사실만)
    • Avoid된 공격은 카운트 제외
    • 반사·무적으로 무효화된 공격: 카운트 제외 (피해 발생 없음)
  2. DOT는 데미지 틱마다 카운트하지 않고 "최초 부착 시 1회"만 카운트 (초안). 대안: 틱마다 카운트. 개발실과 협의 필요

엣지 케이스

  • 서브맵 수 이상 스테이지: C12와 동일. 임계값 재튜닝 여지
  • 최종 보스 단 1체 스테이지: 피격이 집중되므로 N2 달성 난이도 급증

P17 배타 조합

  • C2 ∧ N2 동시 배치 금지

4-3. N3 — 치명타 처치 (치명타로 처치 ≥ N)

정의

스테이지 내 치명타 공격으로 몬스터를 처치한 횟수가 임계값 이상. 치명타 빌드와 시너지.

달성 판정 로직 (의사코드)

OnMonsterKilled(killer, target, killBlow):
    if killer == pc and killBlow.isCritical == true:
        critKillCount += 1

OnStageClear:
    if critKillCount >= N3_threshold:
        condition_N3_satisfied = true
    else:
        condition_N3_satisfied = false

측정 변수

변수명 타입 설명
critKillCount int 치명타로 처치한 몬스터 수

UI 표시

  • 스테이지 진입 시: "치명타 처치 N회 이상" 뱃지
  • 플레이 중: 카운터 + 치명타 발생 시 시각·음향 강화 (기존 크리 연출 활용)
  • 스테이지 종료 시: ✓/✗

개발실 구현 요청 포인트

  1. "처치 타격" 판정: 몬스터 HP를 0으로 만든 최종 타격이 치명타였는지 확인. 중간 치명타는 카운트 안 됨
  2. DOT로 처치 시: 최종 틱이 치명타 판정을 가지는 경우 처리 방법 결정
  3. 처형·관통 같은 특수 스킬의 치명타 판정 여부 확인

엣지 케이스

  • 치명타율이 매우 낮은 빌드 (치명타 빌드 아닌 경우): 임계값 달성이 거의 불가능 → 입문 구간 배치 부적합
  • P17-6 "(입문 1~6) N3 단독 배치 금지" — 치명타 빌드 미형성 구간이라 달성 곤란

P17 배타 조합

  • (입문 1~6) N3 단독 배치 금지

4-4. N4 — 쉴드 보존 (Shield ≥ MaxShield × 30%)

정의

스테이지 종료 시점에 PC의 Shield가 MaxShield의 30% 이상. "쉴드 관리 플레이"를 유도.

달성 판정 로직 (의사코드)

OnStageClear:
    shieldRatio = pc.currentShield / pc.maxShield
    if shieldRatio >= N4_threshold:  // 초안 0.3
        condition_N4_satisfied = true
    else:
        condition_N4_satisfied = false

측정 변수

변수명 타입 설명
pc.currentShield / pc.maxShield float Shield 비율

UI 표시

  • 스테이지 진입 시: "Shield 30% 이상 유지" 뱃지
  • 플레이 중: Shield 바에 30% 마커
  • 스테이지 종료 시: ✓/✗

개발실 구현 요청 포인트

  1. Shield 시스템 구조 확인: 재생 Shield / 1회성 Shield / 성소 Shield의 구분과 pc.currentShield / pc.maxShield 계산 방식
  2. MaxShield가 동적인가: 카드·장비·각성으로 MaxShield가 변하는지 확인
  3. Shield 보유 불가능 빌드: PC나 빌드에 따라 MaxShield=0인 경우 본 조건 배치 금지 (단독 스테이지 특성 필요)

엣지 케이스

  • MaxShield = 0: 판정 시 0으로 나누기 방지. 해당 상황은 N4 배치가 부적절한 스테이지
  • Shield 회복 카드 있는 경우: Shield 회복계 카드가 자연 배치되면 N4 달성 쉬워짐

P17 배타 조합

  • C6 ∧ N4 동시 배치 금지 — 회복 빌드 외 배제

4-5. N5 — 후열 선공 (서브맵마다 최초 공격 대상이 후열)

정의

각 서브맵마다 PC가 처음 가하는 공격의 대상이 '후열 몬스터'. 스테이지 내 모든 서브맵에서 성공해야 충족.

달성 판정 로직 (의사코드)

OnSubmapStart(submapID):
    firstAttack_submapID = submapID
    firstAttack_registered = false

OnAttackLanded(attacker, target, damage):
    if attacker == pc and damage > 0 and firstAttack_registered == false:
        if target.position == Position.Rear:
            firstAttack_N5_success[submapID] = true
        else:
            firstAttack_N5_success[submapID] = false
        firstAttack_registered = true

OnStageClear:
    if all firstAttack_N5_success[submap] == true for all submaps:
        condition_N5_satisfied = true
    else:
        condition_N5_satisfied = false

측정 변수

변수명 타입 설명
firstAttack_N5_success[submapID] bool 서브맵별 성공 여부
firstAttack_registered bool 서브맵 내 최초 공격 확정 여부

UI 표시

  • 스테이지 진입 시: "모든 서브맵에서 후열부터 공격" 뱃지
  • 서브맵 시작 시: "후열 선공" 힌트 표시
  • 최초 공격 후: 성공/실패 즉시 피드백 아이콘
  • 스테이지 종료 시: ✓/✗

개발실 구현 요청 포인트

  1. 몬스터의 전열/후열 판정: MonsterPatternList.json / ApprearMonsterPattern.json의 배치 정보 또는 런타임 위치로 판정
  2. 서브맵에 후열 몬스터가 없는 경우: N5 달성 불가 → 해당 스테이지·서브맵에 N5 배치 금지
  3. "공격"의 정의: 자동 공격만 카운트? 스킬 공격도 포함? — 기획팀장 초안: 모든 데미지 발생 공격

엣지 케이스

  • 후열 몬스터 미등장 서브맵: 해당 서브맵 때문에 스테이지 전체 실패 → 배치 전 서브맵별 몬스터 구성 점검 필수
  • 정합성 검증: 기획실 CLAUDE.md "등장 패턴과 3성 조건의 정합성" 항목과 직결. 맵 패턴 확정 후 N5 배치 가능 스테이지 재식별 필요

P17 배타 조합

  • N5 ∧ N6 동시 배치 금지 — 타겟팅 자유도 박탈·논리 모순

4-6. N6 — 전열 선공 (서브맵마다 최초 공격 대상이 전열)

정의

각 서브맵마다 PC가 처음 가하는 공격의 대상이 '전열 몬스터'. N5의 거울상.

달성 판정 로직 (의사코드)

(N5의 후열 → 전열 치환. 나머지 동일)
if target.position == Position.Front:
    firstAttack_N6_success[submapID] = true

측정 변수

N5와 동일 구조 (변수명만 N6).

UI 표시

  • N5와 동일 구조 (문구만 "전열 선공")

개발실 구현 요청 포인트

  • N5와 동일. 단 전열 몬스터 부재 서브맵 없음이 일반적이나 확인 필요 (보스 전용 서브맵 등 예외)

엣지 케이스

  • 후열만 등장하는 서브맵이 있다면 N6 배치 불가 — 흔치 않으나 확인 필요

P17 배타 조합

  • N5 ∧ N6 동시 배치 금지

5. 공통 설계 원칙·횡단 이슈

5-1. 임계값 관리 원칙

  1. 조건별 임계값은 스테이지 단위로 테이블화: StageStarCondition.json (가칭) 또는 기존 스테이지 테이블 확장
  2. 기본값 + 스테이지별 오버라이드 체계: 전역 기본값을 두고 특정 스테이지만 덮어쓰기 가능
  3. 임계값 튜닝은 C# 시뮬 결과 기반 (Phase 3 재개 후)

5-2. 달성 판정의 공통 요구사항

  • 모든 조건 판정은 스테이지 종료 시점에 최종 결정
  • 중간 실패 확정 조건(C2·C3·N4 등 HP/Shield 기준)도 UI는 실시간 경고, 최종 판정은 종료 시점
  • 중간 포기 (방 나가기·재시작) 시: 해당 런의 조건 기록 모두 폐기

5-3. 측정 변수의 저장 구조

재개 시점에 개발실이 구현해야 할 런타임 상태 컨테이너:

class StageConditionTracker {
    // 시간
    float stageTimer_elapsedSec;
    // HP / Shield
    // (실시간 pc 객체 참조로 충분)
    // 카운터
    int potionUseCount;
    int bossHitCount;
    int avoidCount;
    int missCount;
    int hitCount;
    int critKillCount;
    // 서브맵 단위 bool
    Dict<submapID, bool> firstAttack_N5_success;
    Dict<submapID, bool> firstAttack_N6_success;
    bool firstAttack_registered_current;
    // ... 등
}

5-4. Python 시뮬 ↔ C# 시뮬 교차 검증 시 확인 항목

개발실의 Headless C# 시뮬 추출 이후, 각 조건에 대해:

  1. 동일 입력으로 Python 시뮬과 C# 시뮬의 조건 판정 결과가 일치하는가
  2. 측정 변수의 스테이지 종료 시점 값이 일치하는가
  3. 엣지 케이스 (Shield 흡수, DOT, 동시 처치 등)에서 판정 기준이 일치하는가

6. 조건 판정 검증 체크리스트 (Phase 3 재개 시 활용)

6-1. 조건별 단위 테스트 매트릭스

조건 테스트 1 (명확 통과) 테스트 2 (명확 실패) 테스트 3 (경계값) 테스트 4 (엣지)
C1 임계값 - 1초 완주 임계값 + 1초 완주 임계값 정확히 포즈 시간 제외 검증
C2 HP=MaxHP HP=MaxHP-1 HP=MaxHP(회복 후) MaxHP 동적 변화 중
C3 HP=MaxHP×1.0 HP=MaxHP×0.69 HP=MaxHP×0.70 MaxHP 동적 변화
C6 포션 0 사용 포션 임계값+1 임계값 정확히 비 HP 포션 구분
C9 임계값+1 공격 임계값-1 정확히 Shield 흡수 공격
C12 서브맵수×3+1 서브맵수×3-1 정확히 Avoid와 Miss 구분
N1 0 빗맞힘 임계값+1 정확히 몬스터 Avoid 제외
N2 서브맵수-1 피격 서브맵수+1 정확히 반사 무효화 피격
N3 N+1 치명타 처치 N-1 정확히 DOT 처치
N4 30%+1 Shield 30%-1 정확히 MaxShield=0 가드
N5 모든 서브맵 후열 선공 1개 서브맵 실패 - 후열 부재 서브맵
N6 모든 서브맵 전열 선공 1개 서브맵 실패 - 전열 부재 서브맵

6-2. 통합 검증

  • 21개 스테이지 × 슬롯2·슬롯3 가상 배치로 조건 판정이 오류 없이 작동하는지 전수 실측
  • 맵 패턴 사전분석 v1 §3-3 체크리스트를 이 단계에서 실제 적용 (현재는 틀만 준비됨)

7. 개발실 요청서 초안 (구조만)

※ 정식 요청서는 공유/기획실→개발실/ 폴더에 날짜·REQ번호 부여하여 생성. 본 문서는 내용 초안만 제공.

요청 개요

  • 제목: 수상한 잡화점 ★ 조건 12개 판정 로직 구현 요청
  • 배경: Phase 2 §5 PD님 3차 승인으로 조건 풀 12개 확정. Headless C# 시뮬 추출과 동시 구현이 필요
  • 선행 조건: 본 설계 문서(3성조건_12개_상세명세_v1.md) 개발실 리뷰 완료

요청 내용 (요약)

  1. §3·§4의 조건별 판정 로직을 C# 런타임에 구현
  2. §5-3의 StageConditionTracker(또는 상응 구조) 설계
  3. Headless C# 시뮬과의 공통 코드 경로 확보 (실제 전투·시뮬이 동일 판정기 사용)
  4. §6-1의 단위 테스트 매트릭스를 자동 테스트로 구축
  5. 임계값은 테이블 구동 — 코드 내 하드코딩 금지 (스테이지별 튜닝 가능성 대비)

우려 사항·문의

  • §3·§4 각 조건의 "엣지 케이스"에 대한 개발실 판단 필요
  • N7 방어 성공 조건이 추후 13번째 조건으로 추가될 가능성 — StageConditionTracker를 확장 가능한 구조로 설계 권장

8. 변경 이력 (P18 요구 사항)

일자 변경 근거
2026-04-14 초안 작성 (v1) PD님 재량 위임 지시 (Phase 3 HOLD 중 가능 작업) + Phase 2 §5 PD님 3차 승인 조건 풀 12개

향후 예정 변경:

  • Phase 3 재개 후 시뮬 기반 임계값 확정 → v2
  • N7 방어 성공 조건 추가 결정 시 → §4에 추가 + v2
  • 개발실 리뷰 피드백 수령 후 반영 → v1.1 or v2

9. HOLD 준수 확인

본 문서가 Phase 3 HOLD 영역을 침범하지 않음

체크 항목 상태
성장 요소(각성·진화·장비·인장) 기여도 측정 미수행
시뮬레이션 실행 미수행
카드 수치 조정 제안 미수행
조건별 구체적 임계값 수치 확정 미수행 (초안 값은 Phase 2 §5 원안 인용에 한정) ✓
데이터 테이블 변경 미수행
스테이지별 슬롯 배치 확정 미수행

본 문서가 수행한 것

  • 기존 PD님 3차 승인 조건 풀 12개의 설계 명문화 (P18 의무 이행)
  • 조건별 판정 로직 의사코드 수준의 구현 요구 정의
  • 개발실과의 협업 문서 초안 (Phase 3 재개 시 즉시 활용)

10. 참조 문서

  • 기획실/밸런싱/수상한잡화점/Phase2_카드임팩트측정_v1.md §5 (조건 풀 12개 PD님 3차 승인)
  • 기획실/밸런싱/수상한잡화점/맵패턴_사전분석_v1.md §1·§2 (C9·N5·N6 배치 제약)
  • 기획실/밸런싱/수상한잡화점/밸런싱문서_일관성점검_v1.md §2-5 (조건 판정 재검증 항목 22~25)
  • 기획실/밸런싱/수상한잡화점/재논의대기_사전자료모음_v1.md §4 (N7 보류·N8 변형 채택)
  • 공유/공통_업무_규칙.md P17 (배타 배치 규칙 7종) + P18 (설계 문서화 의무)
  • 기획실/⚠_PHASE3_HOLD_공지.md (HOLD 범위 준수)

작성 완료: 2026-04-14 상태: P18 설계 문서화 의무 이행용 초안 / Phase 3 재개 후 임계값 확정 및 v2 전환 예정