---
type: 시스템_설계
scope: 특성_시스템
author: system-designer
date: 2026-04-22
version: v0.1
project: EerieVillage (기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist)
phase: Phase 3-B
data_source: 03_진행_시스템_초안.md §5 / PD 코어 룰 9
status: 핵심 메카닉 골격 확정 — 특성 종류·효과·획득 조건 텍스트는 content-designer 이관
---

# 02. 특성 시스템

## 1. 목적

**이 시스템이 풀고자 하는 플레이어 문제**
"죽어도 완전히 제로로 돌아가지 않는다는 안도감, 그리고 많이 플레이할수록 내 캐릭터가 근본적으로 달라진다는 성장 체감"을 제공한다.
PD 코어 룰 9(특성 사망·레벨 초기화 유지)는 런 간 영속 성장의 구조적 근거다.

**제공하는 경험**
- 카드 전손(축 A)의 낙차를 "이번 런도 쌓였다"는 누적 감각으로 완충
- 런을 반복할수록 퇴마사가 점진적으로 변화하는 정체성 강화
- 특성 조합에 따라 다음 런의 빌드 방향이 달라지는 장기적 선택 재미

---

## 2. 코어 루프

```
조건 충족 이벤트 발생 (보스 처치 / 누적 도전 / 런 중 이벤트)
    ↓
특성 후보 UI 표시 — 플레이어가 선택 or 자동 획득
    ↓
특성 저장소(persistentDataPath JSON)에 즉시 기록
    ↓
다음 런 시작 시 자동 적용
    ↓
특성 효과가 카드·아이템·전투 수식자로 작동
```

---

## 3. 규칙

### 규칙 1. 특성 3축 구조

| 축 | 명칭 | 효과 방향 | 특징 |
|----|------|----------|------|
| A축 | **능력치 특성** | 기본 수치 상향 (공격력·이동 속도·i-frame 등) | 항상 가시적 효과, 단순 |
| B축 | **해금 특성** | 새 메카닉·카드 티어·조건 해제 | 플레이 폭 확장, 강한 체감 |
| C축 | **선택지 특성** | 픽 알고리즘 변형 or 빌드 방향 편향 | 전략 방향 결정, 조합 시 시너지 |

각 획득 조건에서 세 축 중 하나의 특성이 제공된다. 한 번의 조건 충족에서 복수 축이 동시 제공되지 않는다.

### 규칙 2. 획득 조건 3종

1) **보스 처치 보상** — 보스 클리어 직후 특성 후보 K장 중 1장 선택. K 수치는 balance-designer.
2) **누적 도전 과제** — 런 수·처치 수·사망 횟수 등 메타 누적값이 임계치 도달 시 자동 획득 (선택 없음).
3) **런 중 이벤트** — 스테이지 내 특수 조건(미탐색 구역 달성 등) 충족 시 즉시 획득. 선택형 or 자동형은 content-designer·balance-designer 결정.

### 규칙 3. 상호 배타(Exclusive) 쌍 체계

특성 중 일부는 **배타 쌍**으로 설계된다. 배타 쌍의 특성 A를 보유 중이면 특성 B가 획득 후보에서 제거된다.

- 배타 쌍은 B축(해금) 및 C축(선택지) 특성에 한정 적용한다.
- A축(능력치) 특성은 배타 없음 — 중복 획득 시 효과 누적.
- 배타 쌍 목록은 content-designer가 정의. 시스템은 보유 목록과 배타 맵을 조회해 후보 필터링만 수행.

### 규칙 4. 특성 슬롯 — 무제한

특성 보유 상한을 두지 않는다. 런을 반복할수록 특성이 누적되어 캐릭터가 변화하는 것이 본 시스템의 핵심 경험이다.

- **수치 특성 상한**: A축 특성이 동일 수치 항목에 누적되는 경우, 합산 상한 캡(cap)을 적용한다. 수치는 balance-designer 영역.
- 무제한 획득이 밸런스를 붕괴시키지 않도록 각 특성의 효과 강도를 balance-designer가 캡 기반으로 설계해야 한다.

### 규칙 5. 데이터 모델 (persistentDataPath JSON 초안)

개발팀 03에서 확정한 persistentDataPath 저장 방식을 따른다. 구조 초안:

```json
{
  "traits": [
    {
      "id": "trait_001",
      "axis": "B",
      "acquired_at": "2026-01-01T00:00:00",
      "exclusive_group": "exg_001"
    }
  ],
  "trait_version": 1
}
```

- `id`: 특성 고유 식별자 (content-designer 명명)
- `axis`: A/B/C 축 분류
- `acquired_at`: 획득 시각 (디버그·통계용)
- `exclusive_group`: 배타 쌍 그룹 ID. null이면 배타 없음
- `trait_version`: 데이터 스키마 버전 (향후 특성 추가·삭제 대응용 마이그레이션 플래그)

### 규칙 6. 리셋 조건 — 절대 리셋 없음 (기본)

특성은 **어떤 이유로도 초기화되지 않는다** (PD 코어 룰 9). 이것이 축 C(영속 성장)의 본질이다.

- **예외 조건**: PD님 명시 지시로 "초기화 옵션(재도전 콘텐츠용 리셋)"을 Phase 3-C BM 설계 시 재검토 가능. 현재 파일럿 스코프에서는 리셋 없음.

---

## 4. 상태와 전이

| 상태 | 설명 | 전이 조건 |
|------|------|----------|
| 미획득 | 특성 풀에 존재하나 플레이어 미보유 | 획득 조건 충족 + 플레이어 선택 or 자동 획득 → 보유 |
| 보유 | persistentDataPath에 기록, 효과 발동 | 절대 전이 없음 (리셋 없음 원칙) |
| 잠금(Locked) | 배타 쌍에 의해 획득 불가 상태 | 배타 특성 보유 → 잠금. 해제 조건 없음 |

---

## 5. 인풋 / 아웃풋

**입력**
- 보스 클리어 이벤트 (스테이지 시스템)
- 누적 도전 과제 임계치 도달 (메타 진행 데이터 감시)
- 런 중 이벤트 트리거

**시스템 반응**
- 특성 후보 UI 표시 (선택형) or 즉시 적용 알림 (자동형)
- JSON Write (persistentDataPath)
- 다음 런 시작 시 특성 효과 자동 로드

**필요한 피드백 종류 (ux-designer 연계)**
- 특성 획득 시 강조 연출 (영속 획득임을 체감하게)
- 현재 보유 특성 목록 UI (어떤 특성이 쌓였는지 확인 가능)
- 배타 특성 잠금 상태 시각화

---

## 6. 타 시스템 연동

| 연동 시스템 | 연동 방식 |
|------------|----------|
| **카드 시스템** (01_카드_시스템) | B축 특성이 픽 알고리즘 가중치 수정 or T2/T3 해제 조건 완화 |
| **전투 시스템** (04_전투_기본_스펙) | A축 특성이 공격·이동·i-frame 수치에 수식자 적용 |
| **스테이지 구조** (05_스테이지_구조_초안) | 보스 처치 이벤트 발화 → 특성 획득 트리거 |
| **개발팀 persistentDataPath** (개발팀 03) | JSON 저장·로드 구현 책임 (개발팀 영역) |

---

## 7. 엣지 케이스

1) **배타 쌍 전부 잠김으로 후보 소진**: 후보 풀에서 배타 필터 적용 후 0장이 되는 경우 → 배타 없는 A축 특성으로 강제 대체. content-designer가 A축 여분을 충분히 설계해야 한다.
2) **동일 특성 중복 획득 시도**: 이미 보유한 특성 ID가 후보에 나타나지 않도록 보유 목록 필터를 항상 먼저 적용.
3) **trait_version 불일치 (마이그레이션)**: 게임 업데이트로 특성 ID 변경·삭제 시 version 필드로 감지 → 구버전 ID는 무효 처리(손실 없이) + 마이그레이션 로직은 개발팀 책임.
4) **첫 런 (특성 0개)**: 특성 없이도 게임이 정상 작동해야 한다. 모든 특성 효과는 "있을 경우 추가 적용"이며, 기본 게임플레이는 특성 독립적으로 설계한다.

---

## 8. 기각안

1) **런 내 임시 특성(런 종료 시 소멸) — 기각.** 카드 시스템(축 A)과 역할 충돌. 03_진행_시스템_초안 §7 기각안 3번 계승. 런 내 임시 효과는 카드로 담당.

2) **특성 슬롯 N개 상한 — 기각.** 슬롯 상한은 "어떤 특성을 버릴까"라는 별도 결정 레이어를 요구하고, 영속 성장 경험을 "희소성 관리"로 왜곡한다. 축 C의 본질(도전 지속성 제공)이 무력화된다. 수치 캡(규칙 4)으로 밸런스를 제어하는 방향이 구조 단순성·경험 우위.

3) **특성 구매형(메타 재화 소모) — 기각.** BM 미확정 상태에서 런 간 재화 루프와 특성 획득을 결합하면 범위 초과. 획득 조건을 재화 종속으로 만들면 BM 방향에 따라 시스템 구조 전면 변경 필요. Phase 3-C BM 설계 이후 재검토 안건으로 보관.

4) **특성 선택 없이 전량 자동 획득 — 기각.** 자동 획득은 선택의 즐거움을 제거한다. 보스 처치 후 K장 선택 구조(규칙 2-1번)는 "이 특성을 선택하는 것이 내 빌드 방향에 맞는가"라는 소규모 전략 결정 지점을 제공한다. 단, 도전 과제 기반 자동 획득(규칙 2-2번)은 리워드 성격이므로 예외 허용.

---

## 9. 열린 이슈 (balance·content·ux·개발팀 이관)

1) **[content]** 특성 종류·ID·효과 텍스트 전체 리스트 — 3축 분류 + 조선 퇴마 세계관 반영 명칭.
2) **[content]** 배타 쌍 맵 정의 — 어떤 특성들이 배타 관계인가.
3) **[balance]** A축 특성 수치 캡 설정 — 어느 수준에서 성장을 막을 것인가.
4) **[balance]** 보스 처치 후 특성 후보 K장 수치.
5) **[content]** 누적 도전 과제 항목 및 임계값 설계.
6) **[ux]** 특성 획득 연출·보유 목록 UI·배타 잠금 시각화.
7) **[개발팀]** persistentDataPath JSON 스키마 최종 확정 + 마이그레이션 로직 구현.

---

## 10. 변경 이력

| 일시 | 변경 | 사유 | 기안 |
|------|------|------|------|
| 2026-04-22 | v0.1 시스템 설계 초안 | BT6-Plan Phase 3-B PD 지시 | system-designer |
