---
from: 개발팀장
to: 총괄PM
type: 현황보고
subject: 시뮬레이터 이원화 해소 작업 현황 및 기획팀 밸런스 작업 대응 계획
priority: high
status: 보고
created: 2026-04-16
ref: PD님 직접 지시 (2026-04-16), PD 지시 로그 #28, #3
req_ref: 공유/소통/PM→개발팀/2026-04-16_REQ_시뮬레이션_대응_기획팀_밸런스작업_지원.md
---

# 시뮬레이터 이원화 해소 작업 현황 및 기획팀 밸런스 작업 대응 계획

> ⚠️ **DEPRECATED (2026-04-17)**: 본 보고서는 07 Headless C# 추출 방향으로 작성되었으나, 2026-04-17 PD님 지시로 **Unity MCP 기반 시뮬레이션 방향으로 전환**되어 일부 효력 상실. **최신 방향은 [`2026-04-17_Unity_MCP_시뮬레이션_기술검토_개발팀.md`](2026-04-17_Unity_MCP_시뮬레이션_기술검토_개발팀.md) 참조.** 본 문서는 Phase A 전투 로직 분석·Unity 엔진 의존성 식별 부분만 유효하며, Phase B~E(Headless 추출·CLI)는 폐기.

---

## 1. 07 착수계획 Phase A~E 진행 상태

| Phase | 작업 | 상태 | 비고 |
|-------|------|------|------|
| **A. 전투 로직 식별 및 경계 확정** | 전투 코드 전수 분석, Unity 의존성 식별, 전투 공식 명문화 | **부분 완료** | 08 SOT 문서(v1)로 핵심 피해 계산 15단계, 회피 판정 3단계, 크리티컬, 상태이상 등 명문화됨. A-1~A-3 실질 완료. A-4(전투공식 SOT 최종 확정)는 미확인 항목 잔존 |
| **B. Headless C# 추출 (코어화)** | BattleCore 라이브러리 분리 | **미착수** | 선행: Phase A 최종 확정 필요 |
| **C. CLI 실행 환경 구성** | dotnet CLI, JSON 입출력, 배치 러너 | **미착수** | 선행: Phase B 완료 필요 |
| **D. Python 교차 검증** | Python vs C# 결과 비교 | **미착수** | 선행: Phase C 완료 필요 |
| **E. 문서화 및 인수인계** | 기획팀용 가이드, 구조 문서 | **미착수** | 선행: Phase D 완료 필요 |

---

## 2. Unity 전투 코드 분석 결과 (본 보고 시점 실제 확인)

### 2.1 코드 규모 및 구조

| 파일 | 라인 수 | 역할 |
|------|--------|------|
| `Actor.cs` | 4,545줄 | **전투 핵심** -- 피해 계산, 회피, 크리티컬, 상태이상, 공격 루프 전체 |
| `PCActor.cs` | ~200줄 | 플레이어 전용 -- 방어, LowHP, 쉴드 Kill 효과 |
| `MobActor.cs` | ~250줄 | 몬스터 전용 -- 라인 위치, 샤이니, 드롭 보상 |
| `MonsterNodeControler.cs` | ~500줄 | 전투 루프 제어 -- 몬스터 배치, 라인 변경, 노드 종료 |

### 2.2 Unity 엔진 의존성 분석

Actor.cs에서 식별된 Unity 의존성 (Headless 추출 시 제거/추상화 대상):

| 의존 항목 | 사용 위치 | 추상화 방안 |
|----------|----------|-----------|
| `UnityEngine.Random` | 피해 범위, 회피 판정, 크리티컬 | `IRandomSource` 인터페이스로 교체 (시드 기반 결정론 보장) |
| `MonoBehaviour` / `Coroutine` | 공격 쿨타임, 상태이상 지속, 라인 변경 | 턴/틱 기반 루프로 전환 |
| `Animation` / `Animator` | 연출 전용 | `IBattlePresenter` 인터페이스 분리 (Headless에서는 NullPresenter) |
| `ObscuredInt/Float/Bool` (ACTk) | 치트 방지 | 순수 int/float/bool로 교체 (시뮬에서는 보안 불필요) |
| `Transform` / `Vector3` | 위치 기반 이펙트, 발사체 | 시뮬에서는 라인/슬롯 인덱스만 필요, 좌표 불필요 |
| `Addressable` / 리소스 로드 | 스프라이트, 이펙트 | JSON 직접 로드로 대체 |
| `table_GlobalValue.Ins` 등 싱글턴 | 전역 밸런스 값 참조 | `ITableLoader` 인터페이스로 추상화 |

### 2.3 전투 핵심 공식 현황 (08 SOT v1 + 본 보고 시점 코드 직접 확인)

**피해 계산 15단계**: `Actor.Get_Dmg()` (Actor.cs:521~834) -- 08 SOT 문서와 코드가 일치함을 확인.

핵심 공식 요약:
```
기본 = Random[Attack_Min, Attack_Max]  (최소 1 보장)
중간 = 기본 + 절대증가 + (기본 x 배수증가)
(크리 시) 중간 x CriDmg
중간 - 절대감소(방어 포함)
중간 - (중간 x 감소비율)
max(중간, 1)
(쉴드 존재 시) 쉴드 먼저 흡수 -> HP 감산
```

**회피 판정 3단계**:
1. 명중률 체크: `HitRate / (Avoid x 3.69)` -- 3.69 상수 근거 미확인
2. PC 회피율: 근접/원거리 분리 확률 판정
3. 최초 공격 무조건 회피 (카드 효과)

**크리티컬**: 확률 판정 + N연타 강제 크리, 상한 90%

### 2.4 미확인 항목 (A-4 완료 차단 요인)

| 항목 | 상태 | 영향 |
|------|------|------|
| 회피 공식 3.69 상수 근거 | 미확인 | 시뮬 재현에 영향 없음 (값 자체는 확인됨) |
| PC 방어 입력 윈도우 연결 지점 | 미확인 | 시뮬에서는 "방어 상태 On/Off"로 추상화 가능 |
| `eCardType.G1~G5` 200+개 효과 전수 맵 | 부분 확인 | 주요 효과는 08 SOT에 문서화됨. 전수 맵핑은 점진적 보완 가능 |
| 상태이상 중첩 규칙 | 부분 확인 | 기본 CC(Stun/Freezing) 확인됨, 상세 상호작용 추가 확인 필요 |

---

## 3. 기획팀 Python 시뮬레이터 현황

기획팀 `.cache/` 디렉토리에서 `battle_sim.py`, `full_stage_sim.py`, `stage_sim_v2.py` 등의 Python 시뮬레이터 파일이 **현재 확인되지 않음** (NerdNavisAi 레포 내에 부재). 원본은 기획팀 로컬 또는 별도 경로에 있을 것으로 추정.

---

## 4. Headless C# 추출 기술 판단

### 4.1 추출 가능성 판단: **가능하나 상당한 작업량**

Actor.cs 4,545줄의 전투 로직은 Unity 엔진 의존성이 **깊이 얽혀** 있어 단순 분리가 아닌 체계적 리팩토링이 필요합니다.

**난이도 분류**:

| 영역 | 난이도 | 사유 |
|------|--------|------|
| 피해 계산 (Get_Dmg) | **중** | 핵심 수치 로직. 의존성 정리하면 분리 가능. 단 300줄 내 카드 효과 분기가 다수 |
| 공격 루프 (Update/AttackCoolTime) | **중** | Coroutine → 틱 기반 전환 필요 |
| 몬스터 배치/스폰 | **하** | 테이블 기반, 순수 로직 |
| 상태이상 시스템 | **중** | 시간 기반 → 틱 기반 전환 + 효과 200종 분류 필요 |
| 카드 효과 200종 전수 대응 | **상** | eCardType 전수 분기 → 전략 패턴 리팩토링 권장 |
| ACTk Obscured 타입 제거 | **하** | 기계적 치환 가능 |

### 4.2 차단 요인

1. **카드 효과 200종**: `eCardType.G1~G5` 전수를 시뮬레이터에 반영해야 정확한 밸런싱이 가능. 단, 기획팀이 필요로 하는 밸런스 작업 범위에 따라 **핵심 효과만 우선 구현**하는 것이 현실적
2. **데이터 테이블 로더**: JSON 기반이므로 CLI에서 직접 로드 가능 (`GlobalValue.json`, `MonsterList.json`, `MonsterPatternList.json` 등 확인됨)
3. **결정론 보장**: `UnityEngine.Random` → 시드 기반 난수로 전환 필수

---

## 5. 착수 계획 및 기획팀 조기 제공 가능 산출물

### 5.1 즉시 착수 가능한 작업

1. **Phase A-4 완료**: 08 SOT 문서 기반으로 전투공식 SOT 최종 문서 작성 (미확인 항목은 "코드 기준 값" 그대로 반영, 기획 의도와의 대조는 별도)
2. **Phase B 착수**: BattleCore 순수 도메인 클래스 분리 시작
   1) Actor → ActorCore (전투 스탯/피해 계산 순수 로직)
   2) IRandomSource, IBattlePresenter, ITableLoader 인터페이스 정의
   3) ObscuredInt/Float → int/float 기계적 치환

### 5.2 기획팀 조기 제공 가능 산출물 (전체 Phase 완료 전)

| 산출물 | 선행 조건 | 기획팀 활용 |
|--------|----------|-----------|
| **전투 공식 SOT 문서 v2** (A-4) | Phase A 잔여 정리 | 기획팀이 **Python 시뮬 로직을 C# SOT에 맞춰 검증/수정** 가능 |
| **JSON 데이터 테이블 스키마 문서** | 없음 (즉시 가능) | 기획팀이 데이터 테이블 구조를 파악하여 시뮬 입력값 정비 |
| **BattleCore 피해 계산 단독 모듈** (B-1 부분) | Phase A-4 완료 | 기획팀이 C# 콘솔에서 피해 계산만 단독 실행 가능 |

### 5.3 차단 요인 없음

현재 이 작업에 대한 차단 요인은 없습니다. Unity 프로젝트 코드 접근 가능하고, 데이터 테이블 JSON이 확인되었으며, 08 SOT 문서가 Phase A의 주요 분석을 커버합니다. 즉시 착수합니다.

---

## 6. 요청 사항에 대한 응답 정리

| 요청 | 응답 |
|------|------|
| 1. 현재 진행 상태 | Phase A 부분 완료 (08 SOT v1 작성됨), Phase B~E 미착수 |
| 2. 기획팀 시뮬 환경 구축 | 즉시 착수. 전투공식 SOT v2 → BattleCore 피해 계산 모듈 → CLI 순서 |
| 3. 차단 요인 | 없음. 즉시 착수 가능 |

---

## 7. 변경 이력

| 일자 | 작성자 | 내용 |
|------|--------|------|
| 2026-04-16 | 개발팀장 | REQ 수령 후 현황 보고 초안 작성 |
