docs: 게임 시스템 개편 계획 문서 분리

- 121KB 단일 문서를 22개 태스크 문서로 분리
- 메인 인덱스 문서 (game-system-overhaul-index.md) 생성
- Phase 1-10 태스크 문서 10개 분리
- 추가 시스템 태스크 문서 10개 분리
- 재미 요소 설계 문서 1개 분리
- 기존 문서는 archive/ 폴더로 이동
This commit is contained in:
JiWoong Sul
2025-12-16 19:33:57 +09:00
parent 9dfa465e0a
commit b110b2dc53
24 changed files with 7142 additions and 1502 deletions

223
doc/task-ext-save-data.md Normal file
View File

@@ -0,0 +1,223 @@
# 세이브/데이터 관리 시스템
> 메인 문서: [game-system-overhaul-index.md](game-system-overhaul-index.md)
---
## 1. 멀티 세이브 슬롯
### 1.1 세이브 슬롯 구조
```dart
class SaveSlot {
final int slotIndex; // 0-4 (5개 슬롯)
final String? characterName;
final String? race;
final String? klass;
final int? level;
final Duration? playTime;
final DateTime? lastPlayedAt;
final bool isEmpty;
}
```
### 1.2 세이브 슬롯 UI
```
┌─ 세이브 슬롯 선택 ──────────────────┐
│ │
│ ┌─ 슬롯 1 ─────────────────────┐ │
│ │ 🎮 CodeSlayer (Lv.45) │ │
│ │ 버퍼 드워프 디버거 성기사 │ │
│ │ 플레이: 8시간 22분 │ │
│ │ 마지막: 2024.03.15 14:30 │ │
│ └──────────────────────────────┘ │
│ │
│ ┌─ 슬롯 2 ─────────────────────┐ │
│ │ 🎮 NullMaster (Lv.12) │ │
│ │ 널 엘프 컴파일러 마법사 │ │
│ │ 플레이: 1시간 05분 │ │
│ │ 마지막: 2024.03.14 20:15 │ │
│ └──────────────────────────────┘ │
│ │
│ ┌─ 슬롯 3 ─────────────────────┐ │
│ │ 빈 슬롯 │ │
│ │ [ + 새 게임 시작 ] │ │
│ └──────────────────────────────┘ │
│ │
│ ┌─ 슬롯 4 ─────────────────────┐ │
│ │ 빈 슬롯 │ │
│ └──────────────────────────────┘ │
│ │
│ ┌─ 슬롯 5 ─────────────────────┐ │
│ │ 빈 슬롯 │ │
│ └──────────────────────────────┘ │
│ │
└─────────────────────────────────────┘
```
### 1.3 슬롯 관리 기능
| 기능 | 설명 |
|------|------|
| 새 게임 | 빈 슬롯에 새 캐릭터 생성 |
| 계속하기 | 해당 슬롯 캐릭터로 게임 재개 |
| 삭제 | 슬롯 데이터 삭제 (확인 필요) |
| 복사 | 다른 빈 슬롯으로 복사 |
| 내보내기 | 세이브 파일로 내보내기 |
### 1.4 관련 파일
| 파일 | 역할 |
|------|------|
| `core/model/save_slot.dart` | **신규** - 세이브 슬롯 모델 |
| `core/storage/multi_save_manager.dart` | **신규** - 멀티 세이브 관리 |
| `features/save/save_slot_screen.dart` | **신규** - 슬롯 선택 화면 |
---
## 2. 데이터 마이그레이션
### 2.1 버전별 마이그레이션 전략
```dart
class SaveMigrator {
/// 세이브 데이터 버전 확인 및 마이그레이션
SaveData migrate(Map<String, dynamic> rawData) {
final version = rawData['version'] as int? ?? 1;
var data = rawData;
// 단계별 마이그레이션
if (version < 2) data = _migrateV1ToV2(data);
if (version < 3) data = _migrateV2ToV3(data);
if (version < 4) data = _migrateV3ToV4(data);
// ...
return SaveData.fromJson(data);
}
}
```
### 2.2 버전별 변경 사항
| 버전 | 변경 내용 | 마이그레이션 |
|------|----------|-------------|
| v1→v2 | CombatStats 추가 | 기본 스탯에서 파생 스탯 계산 |
| v2→v3 | ItemStats 추가 | 기존 아이템에 기본 스탯 부여 |
| v3→v4 | SkillState 추가 | 보유 스킬에 상태 초기화 |
| v4→v5 | DeathInfo 추가 | 사망 기록 초기화 |
| v5→v6 | 통계 데이터 추가 | 기존 플레이 기반 추정 |
### 2.3 마이그레이션 안전 장치
```dart
class MigrationSafetyNet {
/// 마이그레이션 전 백업 생성
Future<void> createBackup(int slotIndex) async {
final backup = await loadRawSave(slotIndex);
await saveBackup(slotIndex, backup, DateTime.now());
}
/// 마이그레이션 실패 시 롤백
Future<void> rollback(int slotIndex) async {
final backup = await loadLatestBackup(slotIndex);
await restoreSave(slotIndex, backup);
}
}
```
### 2.4 마이그레이션 실패 처리
```
┌─────────────────────────────────────┐
│ │
│ ⚠️ 세이브 데이터 업그레이드 실패 │
│ │
│ 이전 버전의 세이브 데이터를 │
│ 현재 버전으로 변환하는 데 │
│ 문제가 발생했습니다. │
│ │
│ [ 백업에서 복원 ] │
│ [ 새 게임 시작 ] │
│ [ 버그 리포트 ] │
│ │
└─────────────────────────────────────┘
```
---
## 3. 세이브 파일 관리
### 3.1 세이브 파일 구조
```dart
class SaveFileManager {
/// 세이브 파일 경로
Future<String> getSavePath(int slotIndex);
/// 백업 파일 경로
Future<String> getBackupPath(int slotIndex, DateTime timestamp);
/// 내보내기 파일 생성
Future<File> exportSave(int slotIndex);
/// 외부 파일에서 가져오기
Future<void> importSave(File file, int slotIndex);
}
```
### 3.2 자동 백업
| 시점 | 백업 유형 | 보관 기간 |
|------|----------|----------|
| 레벨업 시 | 자동 | 최근 5개 |
| 퀘스트 완료 시 | 자동 | 최근 5개 |
| 앱 종료 시 | 자동 | 최근 3개 |
| 수동 저장 시 | 수동 | 무제한 |
| 버전 업데이트 전 | 마이그레이션 | 영구 |
### 3.3 내보내기/가져오기
```
내보내기 형식: JSON (압축)
파일명: ascii_never_die_save_{slot}_{timestamp}.json
내보내기 내용:
- 캐릭터 데이터
- 인벤토리
- 장비
- 퀘스트 진행
- 통계
- 업적
- 설정 (선택적)
```
### 3.4 클라우드 저장 (향후)
| 플랫폼 | 저장 위치 |
|--------|----------|
| iOS | iCloud |
| Android | Google Play Games |
| Desktop | 로컬만 (향후 자체 서버) |
### 3.5 세이브 파일 UI
```
┌─ 세이브 파일 관리 ──────────────────┐
│ │
│ 📁 슬롯 1: CodeSlayer │
│ │
│ 자동 백업 (최근 5개) │
│ ├─ 2024-03-15 14:30 (레벨업) │
│ ├─ 2024-03-15 14:15 (퀘스트) │
│ ├─ 2024-03-15 13:45 (레벨업) │
│ └─ ... │
│ │
│ [ 내보내기 ] [ 가져오기 ] │
│ [ 백업에서 복원 ] [ 삭제 ] │
│ │
└─────────────────────────────────────┘
```
---