Files
asciinevrdie/doc/game-system-overhaul-plan.md
JiWoong Sul 9dfa465e0a docs: 게임 시스템 개편 계획 문서 작성
- 기존 문서 doc/bak으로 백업
- 새 계획 문서 game-system-overhaul-plan.md 추가
  - Phase 1-10: 전투, 아이템, 스킬, 사망/부활, 종족/클래스 등
  - 사운드/음악/진동 시스템 설계
  - 업적, 도감, 통계 시스템 설계
  - 재미 요소 설계 (데미지 팝업, 콤보, 일일 도전 등)
  - 피해야 할 요소 정리
2025-12-16 18:03:37 +09:00

47 KiB

ASCII Never Die - 게임 시스템 개편 계획

1. 개요

1.1 목적

Progress Quest 클론에서 실제 게임성을 갖춘 RPG로 전환한다. Idle game의 자동 진행 특성은 유지하되, 전투/성장/사망의 의미있는 시스템을 도입한다.

1.2 핵심 변경 사항

  • Stats가 전투에 실제 영향을 미침
  • 사망 시스템 및 부활 메커니즘
  • MP 기반 스킬 시스템
  • 아이템 스탯 및 가중치
  • 레벨 1-100 밸런싱
  • 종족/클래스 특화

1.3 현재 상태

항목 현재 목표
Stats 장식용 (CON→HP, INT→MP, WIS→주문, STR→무게만 영향) 전투력에 직접 영향
전투 시간 경과 시 자동 승리 데미지 계산, 승패 결정
사망 없음 장비 상실, 부활 버튼
스킬 획득만 (사용 없음) MP 소모, 쿨타임
아이템 이름만 존재 스탯 보정, 가중치
레벨 무한 성장 1-100 (100에서 성장 멈춤)

2. 수정 단계 (Phase)

Phase 1: 핵심 전투 시스템     ████████████████████  (기반)
Phase 2: 아이템 시스템        ████████████████      (의존: Phase 1)
Phase 3: 스킬 시스템          ████████████          (의존: Phase 1, 2)
Phase 4: 사망/부활 시스템     ████████              (의존: Phase 1, 2, 3)
Phase 5: 종족/클래스 특화     ██████                (의존: Phase 1)
Phase 6: 밸런싱               ████████████████████  (전체 의존)
Phase 7: 콘텐츠 확장          ████████████          (의존: Phase 6)
Phase 8: UI/UX 개선           ████████              (병렬 가능)
Phase 9: 스토리/엔딩          ██████                (의존: Phase 7)
Phase 10: 명예의 전당         ████                  (최종)

3. Phase 1: 핵심 전투 시스템

3.1 목표

Stats가 전투에 실제 영향을 미치도록 전투 계산 로직을 구현한다.

3.2 새로운 Stats 구조

class CombatStats {
  // 기본 스탯 (캐릭터 고유)
  final int str;      // 힘: 물리 공격력 보정
  final int con;      // 체력: HP, 방어력 보정
  final int dex;      // 민첩: 회피율, 크리티컬율, 명중률
  final int intelligence; // 지능: 마법 공격력, MP
  final int wis;      // 지혜: 마법 방어력, MP 회복
  final int cha;      // 매력: 상점 가격, 드롭률 보정

  // 파생 스탯 (장비 + 기본 스탯으로 계산)
  final int atk;      // 공격력
  final int def;      // 방어력
  final int magAtk;   // 마법 공격력
  final int magDef;   // 마법 방어력
  final double criRate;    // 크리티컬 확률 (0.0 ~ 1.0)
  final double criDamage;  // 크리티컬 데미지 배율 (1.5 ~ 3.0)
  final double evasion;    // 회피율 (0.0 ~ 0.5)
  final double accuracy;   // 명중률 (0.8 ~ 1.0)
  final double blockRate;  // 방패 방어율 (0.0 ~ 0.4)
  final double parryRate;  // 무기로 쳐내기 확률 (0.0 ~ 0.3)

  // 자원
  final int hpMax;
  final int hpCurrent;
  final int mpMax;
  final int mpCurrent;
}

3.3 전투 계산 공식

1. 명중 판정
   명중 = random() < (공격자.accuracy - 방어자.evasion)

2. 방어 판정 (명중 시)
   방패 방어 = random() < 방어자.blockRate
   무기 쳐내기 = random() < 방어자.parryRate

3. 데미지 계산
   기본 데미지 = 공격자.atk * (1 + random() * 0.2) - 방어자.def * 0.5

   크리티컬 판정 = random() < 공격자.criRate
   if (크리티컬) 데미지 *= 공격자.criDamage

   if (방패 방어) 데미지 *= 0.3
   if (무기 쳐내기) 데미지 *= 0.5

   최종 데미지 = max(1, 데미지)

4. 전투 결과
   방어자.hp -= 최종 데미지
   if (방어자.hp <= 0) 전투 종료

3.4 전투 틱 시스템

현재: 2초 후 자동 승리
변경: 매 틱(200ms)마다 공격 교환, HP가 0이 되면 승패 결정

전투 흐름:
1. 플레이어 턴 (atk 기반 공격)
2. 몬스터 턴 (몬스터 레벨 기반 공격)
3. HP 체크
4. 반복 또는 종료

3.5 수정 대상 파일

파일 변경 내용
core/model/game_state.dart CombatStats 클래스 추가, Stats 구조 변경
core/engine/progress_service.dart 전투 틱 로직 변경
core/util/pq_logic.dart 전투 계산 함수 추가
core/engine/combat_calculator.dart 신규 - 전투 계산 전담

3.6 예상 작업량

  • 예상 파일 수: 4-5개
  • 신규 코드: ~400 LOC
  • 수정 코드: ~200 LOC

4. Phase 2: 아이템 시스템

4.1 목표

아이템에 스탯 보정치를 부여하고, 가중치 시스템을 도입한다.

4.2 아이템 스탯 구조

class ItemStats {
  final int atk;        // 공격력 보정
  final int def;        // 방어력 보정
  final int magAtk;     // 마법 공격력 보정
  final int magDef;     // 마법 방어력 보정
  final double criRate; // 크리티컬 확률 보정
  final double evasion; // 회피율 보정
  final double blockRate;  // 방패 방어율 (방패 전용)
  final double parryRate;  // 무기 쳐내기 (무기 전용)

  // 추가 효과
  final int hpBonus;
  final int mpBonus;
  final int strBonus;
  final int dexBonus;
  // ... 기타 스탯 보너스
}

class Equipment {
  final String name;
  final EquipmentSlot slot;
  final int level;          // 아이템 레벨
  final int weight;         // 가중치 (높을수록 좋은 아이템)
  final ItemStats stats;
  final ItemRarity rarity;  // Common, Uncommon, Rare, Epic, Legendary
}

4.3 아이템 가중치 계산

가중치 = 기본값 + (레벨 * 10) + (희귀도 보너스) + (스탯 합계)

희귀도 보너스:
- Common: 0
- Uncommon: 50
- Rare: 150
- Epic: 400
- Legendary: 1000

4.4 자동 장착 로직

1. 인벤토리에서 장착 가능한 아이템 필터링
2. 슬롯별로 그룹화
3. 각 슬롯에서 가장 높은 가중치 아이템 선택
4. 현재 장비와 비교하여 더 좋으면 교체

4.5 아이템 생성 공식

/// 아이템 스탯 생성 (레벨 기반)
ItemStats generateItemStats(int level, ItemRarity rarity, EquipmentSlot slot) {
  final rarityMultiplier = {
    ItemRarity.common: 1.0,
    ItemRarity.uncommon: 1.3,
    ItemRarity.rare: 1.7,
    ItemRarity.epic: 2.2,
    ItemRarity.legendary: 3.0,
  }[rarity]!;

  final baseValue = (level * 2 * rarityMultiplier).round();

  // 슬롯별 주요 스탯 결정
  return switch (slot) {
    EquipmentSlot.weapon => ItemStats(atk: baseValue, ...),
    EquipmentSlot.shield => ItemStats(def: baseValue ~/ 2, blockRate: 0.1, ...),
    EquipmentSlot.armor => ItemStats(def: baseValue, ...),
    // ...
  };
}

4.6 수정 대상 파일

파일 변경 내용
core/model/game_state.dart Equipment 구조 변경, ItemStats 추가
core/model/equipment_slot.dart 슬롯별 기본 스탯 정의
core/util/pq_logic.dart 아이템 생성 로직 변경
core/engine/item_service.dart 신규 - 아이템 관리 전담
data/pq_config_data.dart 아이템 기본 데이터 확장

4.7 예상 작업량

  • 예상 파일 수: 5-6개
  • 신규 코드: ~500 LOC
  • 수정 코드: ~300 LOC

5. Phase 3: 스킬 시스템

5.1 목표

MP를 소모하여 스킬을 사용하고, 쿨타임을 관리한다.

5.2 스킬 구조

class Skill {
  final String id;
  final String name;
  final SkillType type;     // attack, heal, buff, debuff
  final int mpCost;
  final int cooldownMs;     // 쿨타임 (밀리초)
  final int power;          // 스킬 위력

  // 효과
  final double damageMultiplier;  // 공격 스킬: 데미지 배율
  final int healAmount;           // 회복 스킬: 회복량
  final BuffEffect? buff;         // 버프 효과
}

class SkillState {
  final String skillId;
  final int lastUsedMs;     // 마지막 사용 시간
  final int rank;           // 스킬 레벨

  bool isReady(int currentMs) =>
    currentMs - lastUsedMs >= skill.cooldownMs;
}

5.3 MP 시스템

MP 회복:
- 비전투 시: 50ms당 1 회복
- 전투 중: 회복 없음 (또는 WIS에 비례하여 느리게 회복)
- 전투 종료: 즉시 전체 회복

MP 소모:
- 스킬 사용 시 즉시 차감
- MP 부족 시 스킬 사용 불가 (일반 공격으로 대체)

5.4 스킬 사용 로직

자동 스킬 사용 우선순위:
1. HP < 30% → 회복 스킬 (있으면)
2. 보스전 → 가장 강력한 공격 스킬
3. 일반 전투 → MP 효율이 좋은 스킬
4. MP < 20% → 일반 공격만

수동 개입:
- 현재 버전에서는 자동만 지원
- 향후 수동 스킬 사용 UI 추가 가능

5.5 스킬 목록 예시

스킬명 타입 MP 쿨타임 효과
Debug Strike attack 10 3s 데미지 150%
Memory Leak attack 25 8s 데미지 250%, 적 방어력 -20%
Hot Reload heal 20 10s HP 30% 회복
Safe Mode buff 30 30s 방어력 +50%, 10초 지속
Core Dump attack 50 20s 데미지 400%
Kernel Panic attack 100 60s 데미지 800%, 자신 HP -10%

5.6 수정 대상 파일

파일 변경 내용
core/model/game_state.dart SkillState 추가
core/model/skill.dart 신규 - 스킬 정의
core/engine/skill_service.dart 신규 - 스킬 사용 로직
core/engine/progress_service.dart MP 회복 로직, 스킬 자동 사용
data/skill_data.dart 신규 - 스킬 데이터

5.7 예상 작업량

  • 예상 파일 수: 5-6개
  • 신규 코드: ~600 LOC
  • 수정 코드: ~200 LOC

6. Phase 4: 사망/부활 시스템

6.1 목표

사망 개념을 도입하고, 페널티 및 부활 메커니즘을 구현한다.

6.2 사망 조건

사망 = HP <= 0

사망 시 처리:
1. 게임 루프 일시 정지
2. 장착 중인 모든 장비 제거 (인벤토리로 이동하지 않음 - 상실)
3. 인벤토리 아이템 유지
4. 골드 유지
5. 경험치 유지 (레벨 다운 없음)
6. 사망 UI 표시 (부활 버튼)

6.3 부활 프로세스

부활 버튼 클릭 시:
1. HP/MP 전체 회복
2. 자동으로 샵 이동
3. 골드로 구매 가능한 최고 장비 자동 구매
4. 각 슬롯에 장비 자동 장착
5. 게임 루프 재개

6.4 샵 시스템

class Shop {
  /// 현재 레벨에서 구매 가능한 장비 목록
  List<Equipment> getAvailableItems(int playerLevel, int gold);

  /// 최적의 장비 세트 자동 구매
  PurchaseResult autoBuy(int playerLevel, int gold, List<EquipmentSlot> emptySlots);
}

class PurchaseResult {
  final List<Equipment> purchased;
  final int totalCost;
  final int remainingGold;
}

6.5 장비 가격 공식

기본 가격 = 아이템 레벨 * 50 * 희귀도 배율

희귀도 배율:
- Common: 1.0
- Uncommon: 2.0
- Rare: 5.0
- Epic: 15.0
- Legendary: 50.0

판매 가격 = 구매 가격 * 0.3

6.6 사망 UI

┌─────────────────────────────────────┐
│                                     │
│           YOU DIED                  │
│                                     │
│   Level 45 버그 헌터                │
│                                     │
│   사망 원인: 커널 패닉              │
│                                     │
│   ─────────────────────────         │
│   장비 상실: 7개                    │
│   보유 골드: 15,420                 │
│   ─────────────────────────         │
│                                     │
│        [ 부활하기 ]                 │
│                                     │
└─────────────────────────────────────┘

6.7 수정 대상 파일

파일 변경 내용
core/model/game_state.dart isDead 플래그, deathInfo 추가
core/engine/progress_service.dart 사망 판정 로직
core/engine/resurrection_service.dart 신규 - 부활 처리
core/engine/shop_service.dart 신규 - 샵 로직
features/game/widgets/death_overlay.dart 신규 - 사망 UI
features/game/game_session_controller.dart 사망/부활 상태 관리

6.8 예상 작업량

  • 예상 파일 수: 6-7개
  • 신규 코드: ~500 LOC
  • 수정 코드: ~200 LOC

7. Phase 5: 종족/클래스 특화

7.1 목표

종족과 클래스에 고유한 능력치 보정과 특수 능력을 부여한다.

7.2 종족 특성

class RaceTraits {
  final String raceId;
  final Map<StatType, int> statModifiers;  // 스탯 보정
  final List<PassiveAbility> passives;      // 패시브 능력
  final double expMultiplier;               // 경험치 배율
}
종족 STR CON DEX INT WIS CHA 특수 능력
Byte Human 0 0 0 0 0 +2 경험치 +10%
Null Elf -1 -1 +2 +2 0 0 마법 데미지 +15%
Buffer Dwarf +2 +2 -1 -1 0 0 방어력 +10%
Stack Goblin -1 -1 +3 0 0 +1 크리티컬 확률 +5%
Heap Troll +3 +3 -2 -2 0 0 HP +20%
Pointer Fairy -2 -2 +2 +2 +2 0 MP +20%
Coredump Undead +1 +2 -1 0 0 -2 사망 시 장비 1개 유지

7.3 클래스 특성

class ClassTraits {
  final String classId;
  final Map<StatType, int> statModifiers;
  final List<String> startingSkills;        // 시작 스킬
  final List<String> classSkills;           // 클래스 전용 스킬
  final EquipmentRestriction restrictions;  // 장비 제한
}
클래스 주요 스탯 장비 제한 특수 능력
Bug Hunter STR/DEX 전체 가능 일반 공격 +20%
Debugger Paladin STR/CON 중갑, 방패 방어력 +15%, 회복력 +10%
Compiler Mage INT/WIS 경갑, 지팡이 마법 데미지 +25%
Refactor Monk DEX/WIS 경갑, 맨손 회피율 +15%, 연속 공격
Pointer Assassin DEX/STR 경갑, 단검 크리티컬 +20%, 첫 공격 2배
Garbage Collector CON/STR 중갑 HP +30%, 전투 후 HP 10% 회복

7.4 수정 대상 파일

파일 변경 내용
core/model/race_traits.dart 신규 - 종족 특성
core/model/class_traits.dart 신규 - 클래스 특성
data/race_data.dart 신규 - 종족 데이터
data/class_data.dart 신규 - 클래스 데이터
core/engine/stat_calculator.dart 신규 - 최종 스탯 계산
features/character/character_creation.dart 종족/클래스 선택 UI 개선

7.5 예상 작업량

  • 예상 파일 수: 6-7개
  • 신규 코드: ~400 LOC
  • 수정 코드: ~150 LOC

8. Phase 6: 밸런싱

8.1 목표

레벨 1-100 구간에서 적절한 난이도 곡선을 설계한다.

8.2 레벨 구간 설계

구간 레벨 특징 예상 플레이 시간
초반 1-20 튜토리얼, 기본 시스템 학습 1-2시간
중반 21-50 본격적인 성장, 다양한 스킬 3-5시간
후반 51-80 고급 장비, 어려운 몬스터 5-8시간
엔드게임 81-100 최종 보스, 명예의 전당 3-5시간

8.3 경험치 곡선

레벨업 필요 경험치 = 기본값 * (1.15 ^ 레벨)

기본값 = 100
레벨 10: 405 exp
레벨 50: 108,366 exp
레벨 100: 11,739,085 exp

8.4 몬스터 스탯 스케일링

MonsterStats generateMonster(int level) {
  return MonsterStats(
    hp: 50 + level * 20 + (level * level / 5).round(),
    atk: 5 + level * 3,
    def: 2 + level * 2,
    exp: 10 + level * 5,
    gold: 5 + level * 3,
  );
}

8.5 사망 확률 목표

레벨 구간 목표 사망 확률 (전투당)
1-20 1-3%
21-50 3-5%
51-80 5-10%
81-100 10-20%

8.6 밸런스 테스트 도구

/// 시뮬레이션으로 밸런스 검증
class BalanceSimulator {
  /// 특정 레벨 구간을 N회 시뮬레이션
  SimulationResult simulate({
    required int startLevel,
    required int endLevel,
    required int iterations,
  });
}

class SimulationResult {
  final double averageDeaths;
  final double averageTimeMinutes;
  final double survivalRate;
  final List<String> deathCauses;
}

8.7 수정 대상 파일

파일 변경 내용
core/util/balance_constants.dart 신규 - 밸런스 상수
core/util/pq_logic.dart 경험치/몬스터 스케일링
data/pq_config_data.dart 몬스터 레벨 재조정
test/balance_test.dart 신규 - 밸런스 테스트

8.8 예상 작업량

  • 예상 파일 수: 4-5개
  • 신규 코드: ~300 LOC
  • 수정 코드: ~400 LOC
  • 테스트 및 조정: 반복 작업 필요

9. Phase 7: 콘텐츠 확장

9.1 목표

더 많은 몬스터, 아이템, 애니메이션을 추가한다.

9.2 몬스터 확장

현재: ~100종 목표: ~200종

추가할 몬스터 카테고리:

  • 레벨 81-100 엔드게임 몬스터 (30종)
  • 보스 몬스터 (10종, 각 Act 마다)
  • 미니 보스 (20종)
  • 특수 이벤트 몬스터 (20종)
  • 퀘스트 전용 몬스터 (20종)

9.3 아이템 확장

현재: 이름만 존재 목표: 스탯이 있는 300+ 아이템

카테고리별 추가:

  • 무기 (50종): 검, 도끼, 활, 지팡이, 단검 등
  • 방어구 (80종): 투구, 갑옷, 장갑, 부츠, 망토
  • 방패 (30종)
  • 악세서리 (50종): 반지, 목걸이, 귀걸이
  • 소모품 (50종): 물약, 스크롤

9.4 ASCII 애니메이션 확장

9.4.1 전투 결과별 애니메이션

상황 애니메이션
일반 공격 기존 battle_mode
크리티컬 히트 화려한 이펙트
회피 성공 살짝 비켜가는 모션
방패 방어 방패 들어올리기
스킬 사용 스킬별 고유 애니메이션
사망 쓰러지는 애니메이션
레벨업 빛나는 이펙트

9.4.2 몬스터별 애니메이션

class MonsterAnimation {
  final String monsterId;
  final List<String> idleFrames;
  final List<String> attackFrames;
  final List<String> hitFrames;
  final List<String> deathFrames;
}

카테고리별 기본 애니메이션:

  • 버그류 (곤충 형태)
  • 언데드류 (좀비, 유령)
  • 드래곤류 (대형)
  • 휴머노이드류 (NPC형)
  • 기계류 (로봇, 바이러스)

9.5 수정 대상 파일

파일 변경 내용
data/pq_config_data.dart 몬스터/아이템 데이터 확장
data/ascii_animation_data.dart 애니메이션 프레임 추가
data/monster_animations.dart 신규 - 몬스터별 애니메이션
features/game/widgets/ascii_animation_card.dart 상황별 애니메이션 선택

9.6 예상 작업량

  • 예상 파일 수: 4-5개
  • 신규 코드: ~1000 LOC (대부분 데이터)
  • 수정 코드: ~200 LOC

10. Phase 8: UI/UX 개선

10.1 목표

능력치 변화를 실시간으로 표시하고, 전반적인 UI를 개선한다.

10.2 실시간 스탯 변화 표시

┌─ Stats ─────────────────┐
│ HP: 450/500  ████████░░ │
│ MP: 80/120   ██████░░░░ │
│                         │
│ ATK: 125 (+15) ▲        │  ← 장비 변경 시 변화량 표시
│ DEF: 89  (-5)  ▼        │
│ CRI: 12.5%              │
│ EVA: 8.3%               │
└─────────────────────────┘

10.3 전투 로그

┌─ Combat Log ────────────────────┐
│ > 문법 오류를 공격! 45 데미지   │
│ > 문법 오류의 반격! 12 데미지   │
│ > 크리티컬! 98 데미지           │
│ > Debug Strike 사용! 150 데미지 │
│ > 문법 오류 처치! +25 exp       │
└─────────────────────────────────┘

10.4 알림 시스템

이벤트 표시 방식
레벨업 화면 중앙 팝업 + 사운드
장비 획득 우측 하단 토스트
스탯 변화 해당 스탯 옆 애니메이션
사망 위험 (HP < 20%) HP 바 깜빡임
스킬 쿨타임 완료 스킬 아이콘 빛남

10.5 수정 대상 파일

파일 변경 내용
features/game/widgets/stats_panel.dart 스탯 변화 애니메이션
features/game/widgets/combat_log.dart 신규 - 전투 로그
features/game/widgets/notification_overlay.dart 신규 - 알림
core/service/notification_service.dart 신규 - 알림 관리

10.6 예상 작업량

  • 예상 파일 수: 5-6개
  • 신규 코드: ~400 LOC
  • 수정 코드: ~200 LOC

11. Phase 9: 스토리/엔딩

11.1 목표

프롤로그부터 엔딩까지 일관된 스토리를 구성한다.

11.2 스토리 구조

Act I (레벨 1-20): 각성
- 프롤로그: 코드의 신으로부터 비전을 받음
- 마을에서 기본 훈련
- 첫 번째 던전: 버그 둥지
- Act I 보스: Syntax Error Dragon

Act II (레벨 21-40): 성장
- 디버거 기사단 가입
- 손상된 네트워크 탐험
- 배신자 발견
- Act II 보스: Memory Leak Hydra

Act III (레벨 41-60): 시련
- 널 왕국 진입
- 고대 컴파일러의 시험
- 동료의 희생
- Act III 보스: Buffer Overflow Titan

Act IV (레벨 61-80): 결전
- 글리치 신의 성채 침입
- 최후의 동맹 결성
- Act IV 보스: Kernel Panic Archon

Act V (레벨 81-100): 종말
- 글리치 신과의 최종 대결
- 다중 페이즈 보스전
- 엔딩: 시스템 재부팅, 평화 회복

11.3 시네마틱 개선

각 Act 전환 시:

  • 전용 시네마틱 텍스트 (5-10개 단계)
  • ASCII 아트 일러스트
  • 분위기에 맞는 색상 테마

11.4 수정 대상 파일

파일 변경 내용
data/story_data.dart 신규 - 스토리 텍스트
data/game_text_l10n.dart 시네마틱 텍스트 확장
core/engine/story_service.dart 신규 - 스토리 진행 관리
features/game/widgets/cinematic_view.dart 신규 - 시네마틱 UI

11.5 예상 작업량

  • 예상 파일 수: 4-5개
  • 신규 코드: ~600 LOC (대부분 텍스트)
  • 수정 코드: ~100 LOC

12. Phase 10: 명예의 전당

12.1 목표

게임 클리어 시 캐릭터를 명예의 전당에 등재한다.

12.2 클리어 조건

클리어 = 레벨 100 달성 + 글리치 신 처치

12.3 명예의 전당 데이터

class HallOfFameEntry {
  final String id;
  final String characterName;
  final String race;
  final String klass;
  final int level;
  final Duration totalPlayTime;
  final int totalDeaths;
  final int monstersKilled;
  final DateTime clearedAt;

  // 향후 아스키 아레나용
  final CombatStats finalStats;
  final List<Equipment> finalEquipment;
  final List<Skill> skills;
}

12.4 명예의 전당 UI

╔═══════════════════════════════════════════════════╗
║              명예의 전당                          ║
╠═══════════════════════════════════════════════════╣
║                                                   ║
║  1. 버퍼 드워프 디버거 성기사 "CodeSlayer"        ║
║     Lv.100 | 12시간 34분 | 사망 3회              ║
║     2024.03.15                                   ║
║                                                   ║
║  2. 널 엘프 컴파일러 마법사 "NullMaster"          ║
║     Lv.100 | 15시간 22분 | 사망 7회              ║
║     2024.03.10                                   ║
║                                                   ║
║  3. 스택 고블린 포인터 암살자 "StackKiller"       ║
║     Lv.100 | 18시간 05분 | 사망 12회             ║
║     2024.03.08                                   ║
║                                                   ║
╚═══════════════════════════════════════════════════╝

12.5 클리어 후 처리

1. 축하 시네마틱 표시
2. 명예의 전당 등재
3. 통계 표시 (플레이 시간, 사망 횟수, 처치 몬스터 등)
4. "새 게임 시작" 버튼
5. 기존 캐릭터 데이터는 명예의 전당에만 보존

12.6 수정 대상 파일

파일 변경 내용
core/model/hall_of_fame.dart 신규 - 명예의 전당 모델
core/storage/hall_of_fame_storage.dart 신규 - 저장/로드
features/hall_of_fame/hall_of_fame_screen.dart 신규 - UI
features/game/game_session_controller.dart 클리어 처리

12.7 예상 작업량

  • 예상 파일 수: 4-5개
  • 신규 코드: ~400 LOC
  • 수정 코드: ~100 LOC

13. 추가 권장 사항

13.1 사운드/음악/진동 시스템

13.1.1 사운드 효과 (SFX)

상황 효과음 우선순위
일반 공격 타격음
크리티컬 히트 강한 타격음 + 효과음
스킬 사용 스킬별 고유 효과음
피격 피해 효과음
사망 쓰러지는 효과음
레벨업 팡파레
아이템 획득 획득 효과음 (희귀도별 차등)
장비 장착 장착 효과음
퀘스트 완료 완료 효과음
UI 조작 버튼 클릭음

13.1.2 배경 음악 (BGM)

상황 BGM 타입 우선순위
메인 화면 웅장한 타이틀 테마
일반 탐험 평화로운 필드 음악
전투 중 긴박한 전투 음악
보스전 강렬한 보스 테마
사망 화면 슬픈/긴장된 음악
시네마틱 스토리 테마
명예의 전당 영광스러운 엔딩 테마

13.1.3 진동 (모바일 전용)

상황 진동 패턴 강도
일반 공격 짧은 단일 진동
크리티컬 히트 강한 단일 진동
피격 짧은 이중 진동
사망 긴 진동
레벨업 리듬 있는 연속 진동
희귀 아이템 획득 짧은 삼중 진동
보스 등장 점점 강해지는 진동

13.1.4 구현 방안

// 사운드 서비스
class AudioService {
  void playSfx(SfxType type);
  void playBgm(BgmType type);
  void stopBgm();
  void setVolume(double sfx, double bgm);
}

// 진동 서비스 (모바일)
class HapticService {
  void vibrate(HapticPattern pattern);
  bool get isSupported;
}

13.2 업적 시스템

13.2.1 업적 카테고리

카테고리 예시 업적
전투 첫 번째 몬스터 처치, 100마리 처치, 1000마리 처치, 무피해 보스 처치
성장 레벨 10 달성, 레벨 50 달성, 레벨 100 달성
수집 첫 에픽 아이템, 전설 아이템 획득, 모든 슬롯 에픽 이상 장착
탐험 첫 퀘스트 완료, 100개 퀘스트 완료, 모든 Act 클리어
생존 10연전 생존, HP 1로 생존, 사망 없이 Act 1 클리어
스킬 첫 스킬 사용, 스킬로 100마리 처치, 모든 스킬 습득
도전 레벨 10 이하로 Act 1 보스 처치, 장비 없이 10마리 처치
히든 특정 조합 발견, 이스터에그 발견

13.2.2 업적 보상

등급 보상
브론즈 골드 100-500
실버 골드 500-2000, 아이템 박스
골드 골드 2000-10000, 희귀 아이템 박스
플래티넘 전설 아이템 박스, 특별 칭호

13.2.3 업적 UI

┌─ 업적 ──────────────────────────┐
│ ★ 전투 [12/25]                  │
│   ☑ 첫 번째 사냥꾼 - 몬스터 처치│
│   ☑ 백전용사 - 100마리 처치     │
│   ☐ 천인의 적 - 1000마리 처치   │
│                                 │
│ ★ 성장 [3/10]                   │
│   ☑ 신입 개발자 - 레벨 10       │
│   ☐ 시니어 개발자 - 레벨 50     │
└─────────────────────────────────┘

13.3 도감 시스템

13.3.1 도감 종류

도감 기록 내용 수집 조건
몬스터 도감 이름, 레벨 범위, 드롭 아이템, 출현 지역 한번이라도 처치
아이템 도감 이름, 스탯, 희귀도, 획득 방법 한번이라도 획득
스킬 도감 이름, 효과, MP 소모, 쿨타임 한번이라도 습득
NPC 도감 이름, 역할, 등장 시네마틱 시네마틱에서 등장

13.3.2 몬스터 도감 상세

class MonsterEntry {
  final String id;
  final String name;
  final int minLevel;
  final int maxLevel;
  final List<String> dropItems;
  final String description;
  final int killCount;        // 처치 횟수
  final DateTime firstMet;    // 첫 조우 시간
  final bool isDefeated;      // 처치 여부
}

13.3.3 도감 UI

┌─ 몬스터 도감 [127/200] ─────────┐
│                                 │
│  ┌──────┐ Syntax Error          │
│  │ ∧∧∧  │ Lv. 1-5              │
│  │ \○/  │ 드롭: 오타, 구두점    │
│  │  │   │ 처치: 47회            │
│  └──────┘                       │
│                                 │
│  ┌──────┐ Memory Leak           │
│  │ ~~~  │ Lv. 6-12              │
│  │ ⊂⊃   │ 드롭: 누수 바이트     │
│  │ ~~~  │ 처치: 23회            │
│  └──────┘                       │
│                                 │
│  ┌──────┐ ???                   │
│  │  ?   │ 미발견                │
│  └──────┘                       │
└─────────────────────────────────┘

13.3.4 수집률 보상

수집률 보상
25% 칭호 "수집가 견습생"
50% 드롭률 +5%
75% 칭호 "마스터 수집가"
100% 전설 아이템 + 칭호 "완벽주의자"

13.4 통계 화면

13.4.1 통계 카테고리

카테고리 통계 항목
시간 총 플레이 시간, 현재 세션 시간, 평균 세션 시간
전투 총 전투 횟수, 처치 몬스터 수, 총 데미지, 최고 단일 데미지, 크리티컬 횟수
생존 총 사망 횟수, 사망 원인 Top 5, 최장 생존 시간, 연속 전투 생존 기록
획득 총 획득 골드, 총 획득 아이템, 희귀도별 아이템 수, 가장 비싼 아이템
스킬 총 스킬 사용 횟수, 스킬별 사용 횟수, 스킬 데미지 합계, 가장 많이 쓴 스킬
탐험 완료 퀘스트 수, 방문 지역 수, 현재 Act, 최고 도달 레벨
효율 시간당 경험치, 시간당 골드, 평균 전투 시간, 승률

13.4.2 통계 UI

┌─ 플레이 통계 ───────────────────┐
│                                 │
│ ⏱ 플레이 시간                   │
│   총: 15시간 34분               │
│   현재 세션: 2시간 12분         │
│                                 │
│ ⚔ 전투                          │
│   처치 몬스터: 1,247마리        │
│   총 데미지: 458,291            │
│   최고 데미지: 2,847 (크리티컬) │
│   크리티컬 횟수: 312회          │
│                                 │
│ 💀 사망                          │
│   총 사망: 7회                  │
│   ┌ 사망 원인 Top 3 ┐           │
│   │ 1. 커널 패닉 (3회)│         │
│   │ 2. 메모리 누수 (2회)│       │
│   │ 3. 스택 오버플로우 (2회)│   │
│   └─────────────────┘           │
│                                 │
│ 💰 획득                          │
│   총 골드: 124,560              │
│   아이템: 892개                 │
│   전설: 3개 | 에픽: 12개        │
└─────────────────────────────────┘

13.4.3 통계 데이터 구조

class GameStatistics {
  // 시간
  final Duration totalPlayTime;
  final Duration currentSessionTime;

  // 전투
  final int totalBattles;
  final int monstersKilled;
  final int totalDamageDealt;
  final int highestDamage;
  final int criticalHits;

  // 생존
  final int totalDeaths;
  final Map<String, int> deathCauses;
  final Duration longestSurvival;

  // 획득
  final int totalGoldEarned;
  final int totalItemsObtained;
  final Map<ItemRarity, int> itemsByRarity;

  // 스킬
  final int totalSkillUses;
  final Map<String, int> skillUseCounts;

  // 탐험
  final int questsCompleted;
  final int highestLevel;
  final int currentAct;
}

13.5 설정 화면

설정 항목 옵션
게임 속도 0.5x, 1x, 2x, 5x
자동 저장 간격 1분, 5분, 10분
SFX 볼륨 0-100%
BGM 볼륨 0-100%
진동 켜기/끄기 (모바일)
알림 표시 켜기/끄기
전투 로그 간략/상세/끄기
언어 한국어/English

13.6 성능 최적화

항목 현재 개선 방안
상태 업데이트 매 틱마다 전체 rebuild 변경된 부분만 업데이트
애니메이션 Timer 기반 AnimationController 사용
저장 자동 저장 빈번 변경 감지 후 디바운스

13.7 테스트 전략

테스트 유형 대상 도구
유닛 테스트 전투 계산, 스탯 계산 flutter_test
위젯 테스트 UI 컴포넌트 flutter_test
통합 테스트 전체 게임 플로우 integration_test
밸런스 테스트 시뮬레이션 커스텀 도구

14. 재미 요소 설계 (Fun Factor Design)

14.1 즉각적인 보상감 (Dopamine Hits)

요소 설명 우선순위
데미지 숫자 팝업 공격 시 데미지가 화면에 튀어오름 (크리티컬은 크게, 빨간색)
콤보 시스템 연속 처치 시 "x5 COMBO!" 표시 + 보너스 경험치 (10% per combo)
희귀 드롭 연출 전설 아이템 획득 시 화면 번쩍 + 특별 효과음 + 진동
레벨업 축하 레벨업 시 3초간 화려한 ASCII 이펙트
크리티컬 이펙트 크리티컬 히트 시 화면 흔들림 + "CRITICAL!" 텍스트

14.1.1 데미지 팝업 구현

class DamagePopup {
  final int damage;
  final bool isCritical;
  final Offset position;
  final double opacity;  // 1.0 → 0.0 fade out
  final double offsetY;  // 위로 떠오름
}

// 표시 예시
// 일반: "45" (흰색, 작게)
// 크리티컬: "127!" (빨간색, 크게, 흔들림)
// 회복: "+30" (녹색)
// 스킬: "DEBUG STRIKE 250" (노란색)

14.1.2 콤보 시스템

콤보 조건: 5초 내 연속 처치
콤보 보상:
- x2: 경험치 +10%
- x3: 경험치 +15%
- x5: 경험치 +25%, 골드 +10%
- x10: 경험치 +50%, 골드 +25%, 희귀 드롭률 +5%
- x20+: "UNSTOPPABLE!" 칭호 획득 조건

14.2 "한 판 더" 유발 요소

14.2.1 일일 도전

요소 설명
일일 미션 매일 3개의 미션 (예: "버그 30마리 처치", "크리티컬 10회")
일일 보너스 첫 접속 시 골드/아이템 박스
연속 접속 보상 7일 연속 시 전설 아이템 박스
┌─ 일일 도전 ─────────────────────┐
│                                 │
│ ☑ 버그 30마리 처치 [30/30]     │
│   보상: 골드 500               │
│                                 │
│ ☐ 크리티컬 10회 달성 [7/10]    │
│   보상: 경험치 물약            │
│                                 │
│ ☐ 레벨업 1회 [0/1]             │
│   보상: 랜덤 장비 박스         │
│                                 │
│ ───────────────────────────────│
│ 연속 접속: 5일째 🔥             │
│ 7일 보상까지: 2일 남음         │
└─────────────────────────────────┘

14.2.2 주간/이벤트 보스

보스 타입 출현 조건 보상
주간 보스 매주 일요일 등장 한정 아이템, 대량 골드
시즌 보스 명절/기념일 시즌 한정 장비, 칭호
랜덤 레이드 랜덤 (1% 확률) 희귀 아이템 + 업적

14.2.3 "거의 다 됐어" 심리

레벨업까지 남은 경험치가 10% 이하일 때:
→ 경험치 바 색상 변경 (황금색)
→ "조금만 더!" 메시지 표시
→ 다음 레벨 보상 미리보기

14.3 플레이어 선택권 확대

14.3.1 스킬 빌드 시스템

class SkillBuild {
  final List<String> activeSkills;  // 3개 슬롯
  final List<String> passiveSkills; // 2개 슬롯
  final String buildName;           // "공격형", "탱커형" 등
}
빌드 타입 특징
공격형 데미지 스킬 위주, 높은 DPS
방어형 회복/방어 스킬, 생존력 특화
균형형 공격 + 회복 혼합
스피드형 쿨타임 감소, 연속 공격

14.3.2 전투 스타일 전환

[공격 모드] 🗡️
- 공격력 +20%
- 방어력 -10%
- 크리티컬 +5%

[방어 모드] 🛡️
- 방어력 +30%
- 공격력 -10%
- 블록율 +10%

[균형 모드] ⚖️
- 기본 스탯
- 회복량 +10%

14.3.3 자동/반자동 전환

모드 설명
완전 자동 모든 것 자동 (기본)
스킬 수동 스킬만 수동 선택
보스전 수동 보스전에서만 수동 전환

14.4 감정적 연결

14.4.1 캐릭터 성장 기록

┌─ 나의 여정 ─────────────────────┐
│                                 │
│ 🎮 함께한 시간: 15시간 34분     │
│ ⚔️ 처치한 버그: 1,247마리       │
│ 💀 사망 횟수: 7회               │
│ 🏆 획득 업적: 23개              │
│                                 │
│ 📝 기억에 남는 순간:            │
│ • 첫 레벨업 (0시간 2분)         │
│ • 첫 사망 (1시간 15분)          │
│ • 첫 전설 아이템 (8시간 22분)   │
│ • 첫 보스 처치 (5시간 47분)     │
└─────────────────────────────────┘

14.4.2 상황별 메시지 (유머/위로)

상황 메시지 예시
첫 사망 "축하합니다! 첫 번째 교훈을 얻었습니다. 버그는 누구나 만납니다."
연속 사망 "잠시 쉬어가는 건 어떨까요? 커피 한 잔의 여유..."
레벨업 "레벨 {n} 달성! 당신의 코드가 더 강해졌습니다."
희귀 아이템 "운이 좋으시네요! 이건 정말 드문 거에요!"
100 연속 처치 "무자비한 디버거! 버그들이 당신을 두려워합니다."
장시간 플레이 "3시간째 플레이 중... 물 한 잔 드세요! 💧"

14.4.3 마일스톤 축하

마일스톤 축하 연출
100마리 처치 "백전용사" 칭호 + 특별 이펙트
1000마리 처치 "천인의 적" 칭호 + 업적 팝업
10시간 플레이 "헌신적인 개발자" 칭호
무사망 Act 클리어 "완벽주의자" 칭호 + 보너스 골드

14.5 예측 불가능한 재미

14.5.1 랜덤 이벤트

이벤트 확률 효과
전설 몬스터 출현 5% "갑자기 전설 몬스터가 나타났다!" - 처치 시 대량 보상
황금 몬스터 3% 골드 10배 드롭
보물 상자 2% 랜덤 아이템 발견
도움의 NPC 5% 버프 or 회복 제공
함정 3% 데미지 or 디버프 (긴장감)
경험치 폭풍 1% 다음 5분간 경험치 2배

14.5.2 행운 시스템

class LuckEvent {
  // 연속 불운 시 행운 상승
  int unluckyStreak = 0;

  double getLuckBonus() {
    // 10회 연속 일반 드롭 시 희귀 드롭 확률 +50%
    return unluckyStreak >= 10 ? 0.5 : 0.0;
  }
}

14.6 사회적 요소 (향후 확장)

14.6.1 현재 버전 (오프라인)

기능 설명
스크린샷 공유 명예의 전당 달성 시 공유 버튼
기록 내보내기 통계를 이미지로 저장

14.6.2 향후 버전 (아스키 아레나)

기능 설명
글로벌 랭킹 레벨, 사망 횟수, 클리어 시간 순위
친구 비교 친구의 기록과 비교
PvP 아레나 명예의 전당 캐릭터로 대전
길드 시스템 협력 레이드 보스

15. 피해야 할 요소

15.1 지루함 유발 요소

피해야 할 것 이유 대안
긴 대기 시간 아무 일도 안 일어나면 지루함 항상 뭔가 진행 중 표시
반복 메시지 같은 문구 반복은 지루함 30+ 가지 변형 메시지
단조로운 전투 항상 같은 패턴 랜덤 이벤트, 크리티컬, 콤보
느린 초반 첫 30분이 지루하면 이탈 초반 빠른 레벨업 + 튜토리얼 보상

15.2 불쾌감 유발 요소

피해야 할 것 이유 대안
불공정한 즉사 예측 불가능한 사망은 스트레스 HP 보고 대응 가능하도록
과도한 페널티 레벨 다운은 너무 가혹 장비 상실만 (레벨/인벤 유지)
강제 광고 게임 흐름 방해 광고 없음
과금 유도 필수 과금은 불쾌 무과금 완전 클리어 가능
복잡한 UI 정보 과다는 혼란 핵심 정보만, 상세는 별도 탭

15.3 혼란 유발 요소

피해야 할 것 이유 대안
설명 없는 시스템 무엇인지 모르면 답답 첫 등장 시 툴팁/튜토리얼
너무 많은 스탯 이해하기 어려움 핵심 6개만 강조
숨겨진 메커니즘 어떻게 작동하는지 모름 공식 공개 (도움말)

16. 핵심 재미 요약

┌─────────────────────────────────────────────────────┐
│                                                     │
│   🎮 ASCII Never Die의 5가지 재미                   │
│                                                     │
│   1. "조금만 더" - 다음 레벨업이 가까워!            │
│      → 경험치 바, 레벨업 보상 미리보기              │
│                                                     │
│   2. "오 뭐지?" - 예상 못한 전설 아이템!            │
│      → 랜덤 이벤트, 희귀 드롭 연출                  │
│                                                     │
│   3. "다시 해보자" - 사망해도 다시 도전!            │
│      → 적절한 페널티, 빠른 복귀                     │
│                                                     │
│   4. "나 잘하네" - 통계로 보는 내 성장!             │
│      → 상세 통계, 업적, 마일스톤                    │
│                                                     │
│   5. "수집 완료!" - 도감 100% 달성!                 │
│      → 몬스터/아이템 도감, 수집 보상                │
│                                                     │
└─────────────────────────────────────────────────────┘

17. 작업 우선순위 및 의존성

graph TD
    P1[Phase 1: 전투 시스템] --> P2[Phase 2: 아이템]
    P1 --> P5[Phase 5: 종족/클래스]
    P2 --> P3[Phase 3: 스킬]
    P1 --> P4[Phase 4: 사망/부활]
    P2 --> P4
    P3 --> P4
    P5 --> P6[Phase 6: 밸런싱]
    P4 --> P6
    P6 --> P7[Phase 7: 콘텐츠]
    P7 --> P9[Phase 9: 스토리]
    P9 --> P10[Phase 10: 명예의 전당]

    P8[Phase 8: UI/UX] -.-> P1
    P8 -.-> P4

권장 작업 순서

  1. Phase 1: 핵심 전투 시스템 (필수, 모든 것의 기반)
  2. Phase 2: 아이템 시스템 (전투 시스템 활용)
  3. Phase 5: 종족/클래스 특화 (전투 시스템과 병렬 가능)
  4. Phase 3: 스킬 시스템 (전투 + 아이템 필요)
  5. Phase 4: 사망/부활 시스템 (전투 + 아이템 + 스킬 필요)
  6. Phase 8: UI/UX 개선 (다른 Phase와 병렬 진행 가능)
  7. Phase 6: 밸런싱 (모든 시스템 완료 후)
  8. Phase 7: 콘텐츠 확장 (밸런싱 후)
  9. Phase 9: 스토리/엔딩 (콘텐츠 확장 후)
  10. Phase 10: 명예의 전당 (최종)

18. 총 예상 작업량

Phase 신규 코드 수정 코드 파일 수
1. 전투 시스템 400 200 5
2. 아이템 500 300 6
3. 스킬 600 200 6
4. 사망/부활 500 200 7
5. 종족/클래스 400 150 7
6. 밸런싱 300 400 5
7. 콘텐츠 1000 200 5
8. UI/UX 400 200 6
9. 스토리 600 100 5
10. 명예의 전당 400 100 5
합계 5,100 2,050 57

총 예상 코드량: ~7,150 LOC


19. 위험 요소 및 대응

위험 영향 대응 방안
밸런스 붕괴 게임성 저하 시뮬레이션 테스트, 점진적 조정
복잡도 증가 유지보수 어려움 모듈화, 문서화 철저
기존 세이브 호환성 사용자 데이터 손실 마이그레이션 로직 필수
성능 저하 UX 저하 프로파일링, 최적화
원본과의 괴리 정체성 혼란 명확한 차별화 선언

20. 버전 계획

버전 포함 Phase 목표
v0.5.0 1, 2 기본 전투 + 아이템
v0.6.0 3, 5 스킬 + 종족/클래스
v0.7.0 4, 8 사망/부활 + UI
v0.8.0 6 밸런싱 완료
v0.9.0 7, 9 콘텐츠 + 스토리
v1.0.0 10 명예의 전당, 정식 출시

문서 작성일: 2024년 ASCII Never Die - 게임 시스템 개편 계획 v1.0