Files
asciinevrdie/doc/task-ext-save-data.md
JiWoong Sul b110b2dc53 docs: 게임 시스템 개편 계획 문서 분리
- 121KB 단일 문서를 22개 태스크 문서로 분리
- 메인 인덱스 문서 (game-system-overhaul-index.md) 생성
- Phase 1-10 태스크 문서 10개 분리
- 추가 시스템 태스크 문서 10개 분리
- 재미 요소 설계 문서 1개 분리
- 기존 문서는 archive/ 폴더로 이동
2025-12-16 19:33:57 +09:00

7.4 KiB

세이브/데이터 관리 시스템

메인 문서: game-system-overhaul-index.md


1. 멀티 세이브 슬롯

1.1 세이브 슬롯 구조

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 버전별 마이그레이션 전략

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 마이그레이션 안전 장치

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 세이브 파일 구조

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 (레벨업)     │
│   └─ ...                            │
│                                     │
│   [ 내보내기 ] [ 가져오기 ]         │
│   [ 백업에서 복원 ] [ 삭제 ]        │
│                                     │
└─────────────────────────────────────┘