From 4934f574be748cb235a4262d5955a05c4cbdf1ed Mon Sep 17 00:00:00 2001 From: ened Date: Fri, 15 Aug 2025 20:19:06 +0900 Subject: [PATCH] update design document --- moon/claude.md | 195 +++- moon/docs/design/01_game_design_document.md | 269 +++-- moon/docs/design/02_system_specification.md | 1023 ++++++++++++++----- moon/docs/design/03_development_roadmap.md | 707 ++++++++++++- 4 files changed, 1834 insertions(+), 360 deletions(-) diff --git a/moon/claude.md b/moon/claude.md index e1966a2..470f2e7 100644 --- a/moon/claude.md +++ b/moon/claude.md @@ -8,34 +8,99 @@ # 현재 개발 상태 - **버전**: v0.0.1 -- **마지막 업데이트**: 2025-08-13 -- **현재 작업 중인 기능**: 디자인 문서 완성 +- **마지막 업데이트**: 2025-08-15 +- **현재 작업 중인 기능**: 디자인 문서 완성 (업데이트 완료) - **다음 마일스톤**: Phase 1 - 기반 시스템 구축 시작 # 핵심 게임 컨셉 -## 게임플레이 핵심 -1시간 압축 생애 시스템으로 선녀의 한 생을 경험하고, DNA Pool을 통해 다음 세대에 경험을 전수하는 세대 연결형 RPG. 한국적 정서와 매듭공예를 활용한 인연 시스템이 핵심. +## 혁신적 매듭 시스템 +**노리개 연결 구조**: 매듭들이 하나의 연속된 실로 연결되어 노리개 형태 구성. **연결 순서에 따라 완전히 다른 스킬과 능력 조합 발현**이 핵심 혁신점. + +예시: +- "국화매듭 → 물결매듭 → 웃음매듭" = "치유하는 웃음" 스킬 +- "웃음매듭 → 물결매듭 → 국화매듭" = "기쁨의 가르침" 스킬 + +## 생명의 동반자 시스템 +4단계에서 가장 깊은 인연과의 결합 선택. 6가지 동반자 유형 + 독립적 완성 경로: +1. 연인/배우자 2. 영혼의 벗 3. 스승/제자 4. 수호 관계 5. 창조적 파트너 6. 혼자서 완성 ## 주요 시스템 -- [x] 게임 디자인 문서 완성 -- [x] 시스템 설계 명세서 완성 -- [x] 개발 로드맵 수립 +- [x] 게임 디자인 문서 완성 (프로토타입 기반 개정) +- [x] 시스템 설계 명세서 완성 (매듭 연결 순서 시스템 포함) +- [x] 개발 로드맵 수립 (24개월 상세 계획) - [ ] 생애주기 시스템 (LifeCycleManager) -- [ ] DNA Pool 유전 시스템 (DNAPoolManager) -- [ ] 매듭 기반 인연 시스템 (KnotSystem) +- [ ] 선녀의 별자리 유전 시스템 (DNAPoolManager → StellarDNA) +- [ ] 매듭 시스템 (KnotSystem) - 연결 순서 기반 스킬 생성 +- [ ] 생명의 동반자 시스템 (CompanionSystem) - [ ] 노드 기반 맵 시스템 (MapManager) - [ ] 위험 요소 및 사망 시스템 (RiskManager) +# 시나리오 1: "치유의 노래" 상세 콘텐츠 +## 등장인물 (14명) +### Map A: 꽃마루 (4명) +1. **할머니 달빛** (75세) - 스승/제자 관계 +2. **소년 해찬** (12세) - 영혼의 벗 관계 +3. **나무꾼 석주** (45세) - 연인/수호자 관계 +4. **꽃신 정령 꽃님** (나이불명) - 창조적 파트너 관계 + +### Map B: 물소리 벌판 (4명) +5. **농부 철수** (38세) - 실용적 조력자 +6. **용왕 미르** (1000세) - 연인/창조적 파트너 관계 +7. **의원 혜련** (52세) - 스승/창조적 파트너 관계 +8. **청년 준호** (28세) - 연인/창조적 파트너 관계 + +### Map C: 단풍골 (5명) +9. **한옥 보존가 영숙** (68세) - 스승/제자 관계 +10. **환경운동가 민수** (35세) - 영혼의 벗/창조적 파트너 +11. **예술가 소희** (29세) - 창조적 파트너 관계 +12. **기업인 태영** (42세) - 인생 동반자 관계 +13. **도시 수호신 한울** (500세) - 신령 동맹 관계 + +### Map D: 백설봉 (1명 + 최종 동반자 선택) +14. **산신령 설봉** (나이불명) - 최종 깨달음 제공자 + +## 매듭 시스템 (24종) +### 시나리오 1 특화 매듭 (16종) +- **Map A**: 꽃매듭, 웃음매듭, 뿌리매듭, 달빛매듭 +- **Map B**: 물결매듭, 자비매듭, 희망매듭, 땀방울매듭 +- **Map C**: 전통매듭, 갈등매듭, 예술매듭, 성찰매듭 +- **Map D**: 전승매듭, 완성매듭, 평화매듭, 순환매듭 + +### 공통 기본 매듭 (8종) +생명매듭, 시간매듭, 기억매듭, 선택매듭, 성장매듭, 연결매듭, 순환매듭, 감사매듭 + # 기술적 아키텍처 ## 코어 시스템 설계 - **GameManager**: 게임 전반 관리 및 씬 전환 - **LifeCycleManager**: 4단계 생애주기 관리 (어린선녀→성장→성숙→지혜) -- **DNAPoolManager**: 세대 간 유전 및 진화 시스템 +- **DNAPoolManager**: 선녀의 별자리 시스템 (StellarDNA 구조) - **RelationshipManager**: 인연 형성 및 발전 관리 -- **KnotSystem**: 한국 전통 매듭 기반 시각화 +- **KnotSystem**: 매듭 연결 순서 기반 스킬 생성 +- **CompanionSystem**: 생명의 동반자 시스템 - **MapManager**: 4개 맵의 노드 기반 이동 - **RiskManager**: 생애주기별 위험 요소 관리 -- **EventSystem**: 이벤트 기반 통신 +- **EventManager**: 이벤트 기반 통신 + +## 핵심 데이터 구조 +```csharp +public class StellarDNA // 선녀의 별자리 +{ + public Dictionary Attributes { get; set; } + public List Knots { get; set; } + public List KnotConnections { get; set; } // 연결 순서 중요! + public CompanionBond CompanionBond { get; set; } + public int Generation { get; set; } + public float QualityRating { get; set; } +} + +public class KnotConnection +{ + public string FromKnotId { get; set; } + public string ToKnotId { get; set; } + public int Order { get; set; } // 연결 순서가 스킬 결정 + public float Strength { get; set; } +} +``` ## 코딩 컨벤션 - 클래스명: PascalCase @@ -45,26 +110,47 @@ - 프라이빗 필드: _camelCase # 맵 및 콘텐츠 구조 -## 4개 주요 맵 -- **Map A (봄)**: 산골 마을 - 어린 선녀 시기 -- **Map B (여름)**: 강변 들판 - 성장기 선녀 -- **Map C (가을)**: 도시 근교 - 성숙기 선녀 -- **Map D (겨울)**: 설산 - 지혜의 시기 +## 4개 주요 맵 (시나리오 1) +- **Map A (봄)**: 꽃마루 - 어린 선녀 시기 (7개 노드) +- **Map B (여름)**: 물소리 벌판 - 성장기 선녀 (12개 노드) +- **Map C (가을)**: 단풍골 - 성숙기 선녀 (16개 노드) +- **Map D (겨울)**: 백설봉 - 지혜의 시기 (20개 노드) -## 핵심 데이터 구조 -```json -{ - "generation": 1, - "attributes": { - "wisdom": 45.5, - "courage": 38.2, - "compassion": 52.1, - "creativity": 41.8 - }, - "knots": [], - "relationships": [] -} -``` +## 노드 기반 이동 시스템 +클릭 기반 즉시 이동으로 복잡한 이동 메커니즘 배제. 스토리와 관계에 집중. + +# 개발 로드맵 (24개월) +## Phase 1: 핵심 시스템 구축 (3개월) +- Month 1: 기본 아키텍처 및 생애주기 시스템 +- Month 2: 노드 기반 맵 시스템 +- Month 3: 기본 매듭 시스템 + +## Phase 2: 시나리오 1 기본 콘텐츠 (6개월) +- Month 4: Map A 완전 구현 +- Month 5: Map B 구현 +- Month 6: Map C 구현 +- Month 7-8: 생명의 동반자 시스템 +- Month 9: 선녀의 별자리 시스템 + +## Phase 3: 완성도 향상 (3개월) +- Month 10: 위험 시스템 및 사망 처리 +- Month 11: UI/UX 완성 +- Month 12: 밸런싱 및 최적화 + +## Phase 4: 확장 시나리오 (9개월) +- Month 13-15: 시나리오 2 "모험의 날개" +- Month 16-18: 시나리오 3 "지혜의 탑" +- Month 19-21: 혼합 시나리오 시스템 + +## Phase 5: 출시 준비 (3개월) +- Month 22: 최종 완성 및 마스터링 +- Month 23: 정식 출시 및 초기 대응 +- Month 24: 사후 지원 및 확장 계획 + +# 확장 시나리오 계획 +- **시나리오 2**: "모험의 날개" (14명 추가, 16종 모험 매듭) +- **시나리오 3**: "지혜의 탑" (14명 추가, 16종 지혜 매듭) +- **혼합 시나리오**: 생애주기 4단계에서 시나리오 조합 # Claude 협업 가이드라인 ## 요청할 때 포함해야 할 정보 @@ -73,6 +159,18 @@ 3. **요구사항**: 구체적인 기능 명세 4. **제약사항**: 성능, 메모리, 호환성 등 +## 중요한 설계 원칙 +1. **매듭 연결 순서가 스킬을 결정**: 같은 매듭도 순서에 따라 다른 능력 +2. **생명의 동반자는 선택사항**: 혼자서도 완전한 생애 가능 +3. **1시간 압축 생애**: 집중도 높은 완성된 경험 제공 +4. **한국적 정서**: 전통 문화의 현대적 재해석 + +## 프로토타입 참고 문서 +- **prototype/scenarioA1/**: Map A-D 상세 설계 +- **prototype/매듭_시스템_설계_v2.md**: 노리개 연결 시스템 +- **prototype/생명의_동반자_시스템_설계.md**: 동반자 시스템 +- **prototype/위험요소_사망시스템_설계.md**: 사망 처리 + ## 코드 리뷰 요청 시 - 전체 코드보다는 특정 기능 단위로 요청 - 의도한 동작과 실제 문제점 명시 @@ -84,11 +182,34 @@ - 예상 동작 vs 실제 동작 비교 # 개발 우선순위 -1. **높음**: 핵심 게임플레이 로직 -2. **중간**: UI/UX 개선 -3. **낮음**: 부가 기능, 최적화 +1. **최우선**: 매듭 연결 순서 시스템 (핵심 혁신) +2. **높음**: 생애주기 및 인연 시스템 +3. **중간**: UI/UX 개선 +4. **낮음**: 부가 기능, 최적화 + +# 성공 지표 +## 경험 목표 달성도 +- 플레이어가 "살아있음의 기쁨"을 느끼는가? +- 매듭 시스템이 의미있고 아름답게 작동하는가? +- 동반자 시스템이 감동을 주는가? +- 세대 연결에서 연속성을 체험하는가? + +## 기술적 목표 +- 1시간 플레이 세션의 완성도 +- 매듭 연결 순서 시스템 안정성 +- 선녀의 별자리 세대 전승 정확성 +- 직관적이고 아름다운 UI # 테스트 전략 -- Unit Test: 핵심 로직 테스트 -- Integration Test: 시스템 간 연동 테스트 -- Play Test: 실제 게임플레이 테스트 \ No newline at end of file +- **Unit Test**: 매듭 연결 로직, 스킬 생성 시스템 +- **Integration Test**: 시스템 간 연동 (인연→매듭→스킬) +- **Play Test**: 1시간 완주 경험, 감정적 몰입도 +- **Cultural Test**: 한국 문화 요소의 정확성과 자연스러움 + +--- +**업데이트 기록**: +- 2025-08-15: 프로토타입 기반 문서 대폭 개정 +- 매듭 연결 순서 시스템 상세 추가 +- 생명의 동반자 시스템 통합 +- 시나리오 1 상세 콘텐츠 반영 +- 24개월 개발 로드맵 수립 \ No newline at end of file diff --git a/moon/docs/design/01_game_design_document.md b/moon/docs/design/01_game_design_document.md index 5417138..6b514a2 100644 --- a/moon/docs/design/01_game_design_document.md +++ b/moon/docs/design/01_game_design_document.md @@ -1,4 +1,4 @@ -# Little Fairy - 게임 디자인 문서 +# Little Fairy - 게임 디자인 문서 (개정판) ## 1. 게임 개요 @@ -31,177 +31,273 @@ ### 2.3 세계의 구조 4개의 주요 맵이 계절과 생애주기에 연동: -- **Map A**: 봄의 산골 마을 (어린 선녀 시기) -- **Map B**: 여름의 강변 들판 (성장기 선녀) -- **Map C**: 가을의 도시 근교 (성숙기 선녀) -- **Map D**: 겨울의 설산 (지혜의 시기) +- **Map A**: 봄의 산골 마을 "꽃마루" (어린 선녀 시기) +- **Map B**: 여름의 강변 들판 "물소리 벌판" (성장기 선녀) +- **Map C**: 가을의 도시 근교 "단풍골" (성숙기 선녀) +- **Map D**: 겨울의 설산 "백설봉" (지혜의 시기) -## 3. 핵심 게임플레이 시스템 +## 3. 혁신적 매듭 시스템 -### 3.1 생애주기 시스템 -**1시간 = 1생애 구조**: -- 1단계 (0-15분): 어린 선녀 × 봄 -- 2단계 (15-30분): 성장기 선녀 × 여름 -- 3단계 (30-45분): 성숙기 선녀 × 가을 -- 4단계 (45-60분): 지혜의 시기 × 겨울 - -**각 단계별 특징**: -- 다른 능력과 활동 가능 -- 단계별 고유한 도전과 성장 기회 -- 시간 흐름에 따른 자연스러운 변화 - -### 3.2 DNA Pool 시스템 -**세대 간 유전 시스템**: -- 한 생애의 모든 경험이 DNA Pool에 저장 -- 다음 세대는 이전 경험을 바탕으로 시작 -- 진화와 퇴화 모두 가능한 현실적 시스템 - -**저장되는 요소들**: -- 능력치 (지혜, 용기, 자비, 창조성 등) -- 학습한 기술과 지식 -- 맺은 인연들의 기록 -- 중요한 선택과 그 결과 - -### 3.3 매듭 기반 인연 시스템 +### 3.1 매듭 기반 인연 시스템 **한국 전통 매듭공예를 활용한 관계 시각화**: - 각 인연이 고유한 매듭 패턴으로 표현 - 매듭의 복잡성과 아름다움이 관계의 깊이를 나타냄 -- 여러 매듭이 유기적으로 연결되어 DNA Pool 형성 +- 여러 매듭이 유기적으로 연결되어 노리개 형태의 선녀의 별자리 형성 -**매듭의 종류**: -- **인연 매듭**: 나비매듭(우정), 매화매듭(사랑), 국화매듭(사제관계) 등 -- **능력 매듭**: 구름매듭(비행), 물결매듭(치유), 바람매듭(이동) 등 -- **기억 매듭**: 지혜, 감정, 경험이 저장된 매듭들 +### 3.2 노리개 연결 구조 +**혁신적 특징**: +- 매듭들이 하나의 연속된 실로 연결되어 노리개 형태 구성 +- **연결 순서에 따라 다른 스킬과 능력 조합 발현** +- 같은 매듭이라도 연결 순서에 따라 완전히 다른 능력 획득 -### 3.4 노드 기반 맵 시스템 +**예시**: +``` +"국화매듭 → 물결매듭 → 웃음매듭" = "치유하는 웃음" 스킬 +"웃음매듭 → 물결매듭 → 국화매듭" = "기쁨의 가르침" 스킬 +``` + +### 3.3 매듭의 종류 (총 56종) +#### 시나리오 1: 치유의 노래 매듭들 (24종) +**기본 치유 계열 매듭 (16종)**: +- 꽃매듭, 웃음매듭, 뿌리매듭, 달빛매듭 (Map A) +- 물결매듭, 자비매듭, 희망매듭, 땀방울매듭 (Map B) +- 전통매듭, 갈등매듭, 예술매듭, 성찰매듭 (Map C) +- 전승매듭, 완성매듭, 평화매듭, 순환매듭 (Map D) + +**공통 기본 매듭 (8종)**: +- 생명매듭, 시간매듭, 기억매듭, 선택매듭, 성장매듭, 연결매듭, 순환매듭, 감사매듭 + +## 4. 생명의 동반자 시스템 + +### 4.1 시스템 철학 +- **다양한 형태의 깊은 인연 인정**: 로맨틱한 사랑뿐만 아니라 모든 깊은 관계의 가치 존중 +- **자발적 선택**: 혼자서도 완전한 생애가 가능하며, 동반자는 선택사항 +- **조화의 아름다움**: 서로 다른 존재들이 만들어내는 시너지의 경험 + +### 4.2 동반자 유형 +1. **연인/배우자**: 로맨틱한 사랑과 미래에 대한 공동 계획 +2. **영혼의 벗**: 완전한 이해와 신뢰를 바탕으로 한 우정 +3. **스승과 제자**: 지혜 전수를 통한 깊은 유대 +4. **수호 관계**: 보호자와 피보호자 간의 깊은 책임감 +5. **창조적 파트너**: 함께 새로운 것을 만들어가는 동료 +6. **혼자서 완성**: 독립적 완성의 고독하지만 숭고한 길 + +### 4.3 결합 메커니즘 +- **결합 조건**: 2-3단계에 걸친 지속적 관계 발전 (호감도 75% 이상) +- **결합 의식**: 신성한 장소에서의 특별한 의례 +- **노리개 융합**: 두 노리개가 물리적으로 융합되는 과정 +- **특별 매듭**: 각 동반자별 고유한 복합 매듭 생성 + +## 5. 핵심 게임플레이 시스템 + +### 5.1 생애주기 시스템 +**1시간 = 1생애 구조**: +- 1단계 (0-15분): 어린 선녀 × 봄 × Map A +- 2단계 (15-30분): 성장기 선녀 × 여름 × Map B +- 3단계 (30-45분): 성숙기 선녀 × 가을 × Map C +- 4단계 (45-60분): 지혜의 시기 × 겨울 × Map D + +### 5.2 선녀의 별자리 시스템 +**세대 간 유전 시스템**: +- 한 생애의 모든 경험이 선녀의 별자리에 저장 +- 매듭 조합, 연결 순서, 동반자 결합 모두 기록 +- 다음 세대는 이전 경험을 바탕으로 시작 +- 진화와 퇴화 모두 가능한 현실적 시스템 + +### 5.3 노드 기반 맵 시스템 **단순하고 직관적인 이동**: - 각 맵은 의미있는 장소들로 구성된 노드 네트워크 - 클릭 기반 즉시 이동 (복잡한 이동 메커니즘 배제) - 스토리와 관계 발전에 따른 점진적 영역 확장 -**맵별 주요 노드 예시**: -- **봄 맵**: 선녀의 둥지, 꽃밭, 시냇가, 할머니집 -- **여름 맵**: 강변 들판, 마을 축제장, 깊은 숲 -- **가을 맵**: 도시 외곽, 선녀 학교, 예술의 거리 -- **겨울 맵**: 설산 입구, 명상의 동굴, 별빛 정상 +## 6. 위험과 사망 시스템 -## 4. 위험과 사망 시스템 - -### 4.1 위험 요소의 철학 +### 6.1 위험 요소의 철학 - **예측 가능하되 완전 통제 불가능** - **모든 위험이 성장의 기회 포함** - **자연스럽고 의미있는 통합** -### 4.2 생애주기별 위험 +### 6.2 생애주기별 위험 - **1단계**: 호기심의 위험 (첫 비행 실수, 독성 식물 등) - **2단계**: 도전의 위험 (자연재해, 과도한 자신감 등) - **3단계**: 책임의 위험 (도덕적 딜레마, 번아웃 등) - **4단계**: 완성의 위험 (고립, 미완성에 대한 미련 등) -### 4.3 사망의 종류와 의미 -- **자연사**: 평화로운 생명의 완성, 최고 등급 DNA Pool +### 6.3 사망의 종류와 의미 +- **자연사**: 평화로운 생명의 완성, 최고 등급 선녀의 별자리 - **사고사**: 예상치 못한 배움, 특별한 매듭 형성 - **희생사**: 타인을 위한 선택, 전설급 매듭 생성 -### 4.4 아름다운 사망 연출 -- **시각적**: 꽃잎 흩날리기, 빛의 승천 -- **음향적**: 한국 전통 음악, 자연의 소리 -- **감정적**: 슬픔보다는 완성과 전환의 의미 부여 +## 7. 등장인물과 시나리오 -## 5. 사용자 경험 설계 +### 7.1 시나리오 1: "치유의 노래" 등장인물 (14명) -### 5.1 게임플레이 철학 +#### Map A: 꽃마루 마을 (4명) +1. **할머니 달빛** (75세) - 스승/제자 관계 가능 +2. **소년 해찬** (12세) - 영혼의 벗 관계 가능 +3. **나무꾼 석주** (45세) - 연인/수호자 관계 가능 +4. **꽃신 정령 꽃님** (나이불명) - 창조적 파트너 관계 가능 + +#### Map B: 물소리 벌판 (4명) +5. **농부 철수** (38세) - 실용적 조력자 +6. **용왕 미르** (1000세) - 연인/창조적 파트너 관계 가능 +7. **의원 혜련** (52세) - 스승/창조적 파트너 관계 가능 +8. **청년 준호** (28세) - 연인/창조적 파트너 관계 가능 + +#### Map C: 단풍골 (5명) +9. **한옥 보존가 영숙** (68세) - 스승/제자 관계 가능 +10. **환경운동가 민수** (35세) - 영혼의 벗/창조적 파트너 가능 +11. **예술가 소희** (29세) - 창조적 파트너 관계 가능 +12. **기업인 태영** (42세) - 인생 동반자 관계 가능 +13. **도시 수호신 한울** (500세) - 신령 동맹 관계 가능 + +#### Map D: 백설봉 (1명 + 동반자들) +14. **산신령 설봉** (나이불명) - 최종 깨달음 제공자 + +### 7.2 확장 시나리오 계획 +- **시나리오 2**: "모험의 날개" (14명 추가) +- **시나리오 3**: "지혜의 탑" (14명 추가) +- **혼합 시나리오**: 여러 시나리오 요소 결합 + +## 8. 사용자 경험 설계 + +### 8.1 게임플레이 철학 - **일상의 서사**: 거대한 모험보다는 평범한 일상의 기적 - **관계 중심**: NPC와의 깊은 상호작용과 감정적 유대 - **성찰과 성장**: 경쟁보다는 내적 성장에 중점 - **조화와 균형**: 자연과 공동체와의 조화로운 관계 -### 5.2 감정적 여정 +### 8.2 감정적 여정 - **1단계**: 경이로움과 순수한 기쁨 - **2단계**: 도전 의식과 성취감 - **3단계**: 책임감과 성숙한 감정 - **4단계**: 평온함과 완성의 만족감 -### 5.3 리플레이 가치 -- **세대별 다른 경험**: DNA Pool에 따른 시작 조건 변화 -- **인연의 진화**: 관계 발전에 따른 새로운 콘텐츠 -- **숨겨진 발견**: 여러 세대에 걸쳐 발견할 수 있는 요소들 +### 8.3 리플레이 가치 +- **다양한 엔딩**: 시나리오 1만으로도 10가지 서로 다른 엔딩 +- **매듭 조합**: 연결 순서에 따른 무한한 스킬 조합 가능성 +- **세대별 진화**: 선녀의 별자리에 따른 시작 조건 변화 -## 6. 기술적 구조 +## 9. 기술적 구조 -### 6.1 핵심 시스템 아키텍처 +### 9.1 핵심 시스템 아키텍처 ``` GameManager ├── LifeCycleManager (생애주기 관리) -├── DNAPoolManager (유전 시스템) +├── DNAPoolManager (선녀의 별자리 시스템) ├── RelationshipManager (인연 관리) ├── KnotSystem (매듭 시스템) +├── CompanionSystem (동반자 시스템) ├── MapManager (노드 기반 맵) └── RiskSystem (위험 요소 관리) ``` -### 6.2 데이터 구조 -- **JSON 기반 노드 정의**: 새로운 맵과 이벤트 쉬운 추가 -- **매듭 템플릿 시스템**: 다양한 매듭 패턴의 모듈화 -- **세이브 시스템**: DNA Pool과 인연 데이터의 지속적 저장 +### 9.2 데이터 구조 +```csharp +public class DNAPool // 선녀의 별자리 +{ + public Dictionary Attributes { get; set; } + public List Knots { get; set; } + public List Connections { get; set; } // 매듭 연결 순서 + public CompanionBond CompanionBond { get; set; } // 동반자 결합 정보 + public int Generation { get; set; } + public float QualityRating { get; set; } +} -### 6.3 성능 고려사항 +public class Knot +{ + public string Id { get; set; } + public KnotType Type { get; set; } + public Color PrimaryColor { get; set; } + public float Complexity { get; set; } + public string Source { get; set; } // 어떤 경험에서 생성되었는지 + public List ConnectedTo { get; set; } // 연결된 다른 매듭들 +} +``` + +### 9.3 성능 고려사항 - **2D 기반 아트**: 경량화된 비주얼 시스템 - **모듈형 로딩**: 필요한 컨텐츠만 메모리에 로드 - **효율적 매듭 렌더링**: 복잡한 매듭의 최적화된 표현 -## 7. 한국적 문화 요소 +## 10. 한국적 문화 요소 -### 7.1 전통 문화 통합 +### 10.1 전통 문화 통합 - **24절기 시스템**: 계절 변화와 연계된 게임플레이 -- **전통 매듭공예**: 인연과 DNA를 표현하는 핵심 시스템 +- **전통 매듭공예**: 인연과 선녀의 별자리를 표현하는 핵심 시스템 - **선녀 설화**: 전래동화 모티프의 현대적 재해석 - **한국적 자연관**: 인간과 자연의 조화로운 관계 -### 7.2 현대적 적용 +### 10.2 현대적 적용 - **전통과 현대의 공존**: 각 맵에서 시대의 변화 반영 - **환경 의식**: 지속가능성과 자연 보호 메시지 - **공동체 문화**: 개인의 성장과 공동체 기여의 균형 -## 8. 개발 로드맵 +## 11. 개발 로드맵 -### 8.1 Phase 1: 핵심 시스템 구현 +### 11.1 Phase 1: 핵심 시스템 구현 (3개월) +- [x] 게임 디자인 문서 완성 +- [x] 시스템 설계 명세서 완성 - [ ] 기본 생애주기 시스템 - [ ] 노드 기반 맵 이동 - [ ] 간단한 인연 시스템 -- [ ] 기본 DNA Pool 저장/로드 +- [ ] 기본 매듭 시스템 -### 8.2 Phase 2: 콘텐츠 확장 -- [ ] 매듭 시스템 구현 -- [ ] 4개 맵의 기본 콘텐츠 -- [ ] 위험 요소와 사망 시스템 +### 11.2 Phase 2: 콘텐츠 구현 (3개월) +- [ ] Map A "꽃마루" 완전 구현 +- [ ] 4명 등장인물과 인연 시스템 +- [ ] 매듭 생성과 연결 시스템 - [ ] 기본 UI/UX 완성 -### 8.3 Phase 3: 완성도 향상 +### 11.3 Phase 3: 시나리오 1 완성 (6개월) +- [ ] Map B, C, D 순차 구현 +- [ ] 동반자 시스템 완성 +- [ ] 위험 요소와 사망 시스템 +- [ ] 선녀의 별자리 세대 전승 시스템 + +### 11.4 Phase 4: 완성도 향상 (3개월) - [ ] 아트 에셋 완성 - [ ] 사운드 시스템 - [ ] 밸런싱과 튜닝 - [ ] 최종 테스트 및 폴리싱 -## 9. 성공 지표 +## 12. 성공 지표 -### 9.1 경험 목표 달성도 +### 12.1 경험 목표 달성도 - 플레이어가 "살아있음의 기쁨"을 느끼는가? - 세대 연결에서 감동을 받는가? - 인연 시스템이 의미있게 작동하는가? +- 매듭 시스템이 아름답고 의미있게 느껴지는가? -### 9.2 기술적 목표 +### 12.2 기술적 목표 - 1시간 플레이 세션의 완성도 - 안정적인 세이브/로드 시스템 - 직관적이고 아름다운 UI +- 매듭 시각화의 완성도 -### 9.3 확장성 -- 새로운 맵과 콘텐츠 추가 용이성 +### 12.3 확장성 +- 새로운 시나리오 추가 용이성 - 매듭 시스템의 확장 가능성 - 커뮤니티 기능 추가 여지 --- +## 13. 혁신적 특징 요약 + +### 13.1 핵심 혁신 +1. **매듭 연결 순서 시스템**: 같은 매듭도 순서에 따라 다른 능력 +2. **생명의 동반자 시스템**: 다양한 형태의 깊은 인연 모두 존중 +3. **압축된 생애 경험**: 1시간에 전 생애를 의미있게 체험 +4. **한국적 정서의 게임화**: 전통 매듭공예의 현대적 재해석 + +### 13.2 차별화 요소 +- **경쟁보다 성장**: 다른 플레이어와의 경쟁이 아닌 개인적 완성 추구 +- **관계 중심 RPG**: 전투보다 인연과 성장에 중점 +- **세대 연결**: 개인을 넘어선 생명의 연속성 체험 +- **문화적 깊이**: 한국 문화의 아름다움을 자연스럽게 체험 + +--- + **이 문서는 "Living Joy"의 핵심 경험을 구현하기 위한 설계 가이드라인입니다. 모든 개발 결정은 "살아있음의 기쁨"이라는 핵심 가치에 부합하는지를 기준으로 평가합니다.** --- @@ -209,5 +305,6 @@ GameManager ## 참고 문서 - [시스템 설계 명세서](02_system_specification.md) - [개발 로드맵](03_development_roadmap.md) -- [아트 가이드라인](04_art_guidelines.md) -- [사운드 디자인](05_sound_design.md) +- [프로토타입 시나리오 A1 상세](../../../prototype/scenarioA1/) +- [매듭 시스템 설계 v2](../../../prototype/매듭_시스템_설계_v2.md) +- [생명의 동반자 시스템](../../../prototype/생명의_동반자_시스템_설계.md) diff --git a/moon/docs/design/02_system_specification.md b/moon/docs/design/02_system_specification.md index 80b301b..15b0815 100644 --- a/moon/docs/design/02_system_specification.md +++ b/moon/docs/design/02_system_specification.md @@ -1,4 +1,4 @@ -# Little Fairy - 시스템 설계 명세서 +# Little Fairy - 시스템 설계 명세서 (개정판) ## 1. 핵심 시스템 아키텍처 @@ -6,9 +6,10 @@ ``` GameManager (게임 전반 관리) ├── LifeCycleManager (생애주기 관리) -├── DNAPoolManager (DNA Pool 유전 시스템) +├── DNAPoolManager (선녀의 별자리 유전 시스템) ├── RelationshipManager (인연 시스템) ├── KnotSystem (매듭 시스템) +├── CompanionSystem (생명의 동반자 시스템) ├── MapManager (노드 기반 맵 시스템) ├── RiskManager (위험 요소 시스템) ├── TimeManager (시간 흐름 관리) @@ -17,7 +18,7 @@ GameManager (게임 전반 관리) ### 1.2 데이터 흐름 ``` -플레이어 행동 → 이벤트 발생 → 시스템별 처리 → DNA Pool 업데이트 → 매듭 생성/수정 → UI 반영 +플레이어 행동 → 이벤트 발생 → 인연 발전 → 매듭 생성/연결 → 노리개 형성 → 선녀의 별자리 업데이트 → UI 반영 ``` ## 2. 생애주기 시스템 (LifeCycleManager) @@ -36,100 +37,172 @@ public class LifeCycleManager : Node [Signal] public delegate void LifeStageChanged(LifeStage newStage); [Signal] public delegate void LifeEnded(DeathType deathType); + [Signal] public delegate void CompanionSelectionTime(); + + private float _stageTimer; + private const float STAGE_DURATION = 900f; // 15분 = 900초 } ``` ### 2.2 단계별 특성 -- **시간 관리**: 각 단계는 실시간 15분 (게임 시간 압축 가능) +- **시간 관리**: 각 단계는 실시간 15분 - **능력 변화**: 단계별로 다른 능력치와 행동 가능 - **환경 연동**: 각 단계는 특정 맵과 계절에 대응 +- **매듭 제한**: 단계별로 획득 가능한 매듭 수 증가 ### 2.3 주요 기능 -- 시간 경과에 따른 자동 단계 전환 -- 단계별 능력치 변화 관리 -- 조기 사망 시 현재 단계 정보 저장 -- 다음 세대 시작 시 이전 경험 반영 - -## 3. DNA Pool 시스템 (DNAPoolManager) - -### 3.1 데이터 구조 ```csharp -public class DNAPool +public class LifeCycleManager : Node +{ + public void AdvanceToNextStage() + { + var newStage = (LifeStage)((int)CurrentStage + 1); + + if (newStage > LifeStage.WisdomStage) + { + TriggerLifeCompletion(); + return; + } + + CurrentStage = newStage; + EmitSignal(SignalName.LifeStageChanged, (int)newStage); + + // 단계 전환 시 특별 이벤트 발생 + HandleStageTransitionEvents(newStage); + } + + private void HandleStageTransitionEvents(LifeStage stage) + { + switch (stage) + { + case LifeStage.WisdomStage: + // 4단계 진입 시 동반자 선택 시간 신호 + EmitSignal(SignalName.CompanionSelectionTime); + break; + } + } +} +``` + +## 3. 선녀의 별자리 시스템 (DNAPoolManager) + +### 3.1 선녀의 별자리 데이터 구조 +```csharp +public class StellarDNA // 선녀의 별자리 { public Dictionary Attributes { get; set; } // 능력치 - public List Skills { get; set; } // 습득 기술 + public List Knots { get; set; } // 매듭 컬렉션 + public List KnotConnections { get; set; } // 매듭 연결 순서 public List Relationships { get; set; } // 인연 관계 public List Memories { get; set; } // 중요한 기억 - public List Knots { get; set; } // 매듭 컬렉션 + public CompanionBond CompanionBond { get; set; } // 동반자 결합 정보 public int Generation { get; set; } // 세대 수 - public float OverallQuality { get; set; } // 전체 품질 + public float QualityRating { get; set; } // 전체 품질 (S/A/B/C) + public string FamilyLineage { get; set; } // 가문 계보 } -public class Attribute +public class CompanionBond { - public string Name { get; set; } // 속성명 (지혜, 용기, 자비 등) - public float Value { get; set; } // 현재 값 - public float Growth { get; set; } // 성장률 - public int TimesImproved { get; set; } // 향상된 횟수 + public string CompanionId { get; set; } // 동반자 ID + public CompanionType Type { get; set; } // 동반자 유형 + public Knot FusedKnot { get; set; } // 융합된 특별 매듭 + public DateTime BondingDate { get; set; } // 결합 일시 + public float BondStrength { get; set; } // 결합 강도 +} + +public enum CompanionType +{ + RomanticPartner, // 연인/배우자 + SoulFriend, // 영혼의 벗 + MasterDisciple, // 스승/제자 + GuardianBond, // 수호 관계 + CreativePartner, // 창조적 파트너 + IndependentPath // 독립적 완성 } ``` ### 3.2 유전 메커니즘 -- **직접 유전**: 능력치의 70-90%가 다음 세대에 전달 -- **돌연변이**: 5-10% 확률로 새로운 특성 발현 -- **퇴화 가능성**: 특정 조건에서 능력치 감소 가능 -- **복합 효과**: 여러 속성의 조합으로 새로운 능력 생성 - -### 3.3 저장 및 로드 ```csharp public class DNAPoolManager : Node { - private const string SAVE_PATH = "user://dna_pool.json"; + public StellarDNA GenerateNextGeneration(StellarDNA previousGen) + { + var newGen = new StellarDNA + { + Generation = previousGen.Generation + 1, + FamilyLineage = previousGen.FamilyLineage + }; + + // 1. 기본 능력치 유전 (70-90%) + InheritAttributes(previousGen, newGen); + + // 2. 매듭 패턴 유전 (진화 가능) + InheritKnotPatterns(previousGen, newGen); + + // 3. 동반자 결합 효과 적용 + ApplyCompanionBonusEffects(previousGen, newGen); + + // 4. 가문 특성 발전 + DevelopFamilyTraits(newGen); + + return newGen; + } - public void SaveDNAPool(DNAPool pool) { /* JSON 직렬화 */ } - public DNAPool LoadDNAPool() { /* JSON 역직렬화 */ } - public DNAPool GenerateNextGeneration(DNAPool previousGen) { /* 유전 로직 */ } + private void ApplyCompanionBonusEffects(StellarDNA prev, StellarDNA next) + { + if (prev.CompanionBond == null) return; + + switch (prev.CompanionBond.Type) + { + case CompanionType.RomanticPartner: + // 사랑과 조화 관련 능력 향상 + next.Attributes["Compassion"] *= 1.3f; + next.Attributes["Harmony"] *= 1.2f; + break; + + case CompanionType.SoulFriend: + // 우정과 신뢰 관련 스킬 강화 + next.Attributes["Trust"] *= 1.25f; + next.Attributes["Communication"] *= 1.2f; + break; + + case CompanionType.CreativePartner: + // 창조와 예술 능력 극대화 + next.Attributes["Creativity"] *= 1.4f; + next.Attributes["Artistic"] *= 1.3f; + break; + + case CompanionType.IndependentPath: + // 완벽한 균형과 독립성 + BalanceAllAttributes(next); + next.Attributes["Independence"] = 100f; + break; + } + } } ``` -## 4. 인연 시스템 (RelationshipManager) - -### 4.1 관계 타입 +### 3.3 세대별 특화 발전 ```csharp -public enum RelationshipType +public void DevelopFamilyTraits(StellarDNA stellarDNA) { - Nature, // 자연계 (정령, 동식물) - Human, // 인간계 (마을 사람, 도시민) - Divine, // 신령계 (신, 조상령) - Temporal // 시간적 (과거/미래 세대) -} - -public class Relationship -{ - public string EntityId { get; set; } // 상대방 ID - public RelationshipType Type { get; set; } // 관계 타입 - public float Strength { get; set; } // 관계 강도 (0-100) - public string Quality { get; set; } // 관계 성격 (우정, 사랑, 존경 등) - public List SharedMemories { get; set; } // 공유 기억들 - public DateTime LastInteraction { get; set; } // 마지막 상호작용 시간 - public bool IsActive { get; set; } // 현재 활성 상태 + // 3세대 이상 동일한 동반자 유형 선택 시 가문 특성 형성 + if (GetConsecutiveCompanionType(stellarDNA.FamilyLineage) >= 3) + { + CreateFamilyTrait(stellarDNA); + } + + // 5세대 이상 시 전설적 가문 능력 획득 + if (stellarDNA.Generation >= 5) + { + UnlockLegendaryFamilyAbility(stellarDNA); + } } ``` -### 4.2 관계 발전 메커니즘 -- **상호작용 빈도**: 자주 만날수록 관계 강화 -- **공유 경험**: 함께한 특별한 경험이 관계 깊이 증가 -- **시간의 영향**: 오랜 시간 만나지 않으면 관계 약화 -- **위기 상황**: 어려운 상황을 함께 극복하면 급속 강화 +## 4. 혁신적 매듭 시스템 (KnotSystem) -### 4.3 세대 간 관계 전승 -- **직계 상속**: 가족 단위 관계는 자동 상속 -- **명성 상속**: 뛰어난 관계는 다음 세대에 긍정적 영향 -- **숙적 관계**: 부정적 관계도 세대를 거쳐 이어질 수 있음 - -## 5. 매듭 시스템 (KnotSystem) - -### 5.1 매듭 데이터 구조 +### 4.1 매듭 데이터 구조 ```csharp public class Knot { @@ -140,240 +213,724 @@ public class Knot public Color SecondaryColor { get; set; } // 보조 색상 public float Complexity { get; set; } // 복잡도 (0-10) public float Beauty { get; set; } // 아름다움 (0-10) - public string Source { get; set; } // 생성 근원 (어떤 경험에서 나왔는지) + public string Source { get; set; } // 생성 근원 (인연 경험) public DateTime CreatedAt { get; set; } // 생성 시간 - public List ConnectedKnots { get; set; } // 연결된 다른 매듭들 + public LifeStage OriginStage { get; set; } // 생성된 생애주기 단계 } -public enum KnotType +public class KnotConnection { - // 인연 매듭 - Butterfly, // 나비매듭 (순수한 우정) - Plum, // 매화매듭 (깊은 사랑) - Chrysanthemum, // 국화매듭 (사제관계) - Lotus, // 연꽃매듭 (영적 교감) - - // 능력 매듭 - Cloud, // 구름매듭 (비행 능력) - Wave, // 물결매듭 (치유 능력) - Wind, // 바람매듭 (이동 능력) - - // 지혜 매듭 - Book, // 책매듭 (학습한 지식) - Star, // 별매듭 (직관과 예지력) - Seed // 씨앗매듭 (성장 잠재력) + public string FromKnotId { get; set; } // 연결 시작 매듭 + public string ToKnotId { get; set; } // 연결 끝 매듭 + public int Order { get; set; } // 연결 순서 (중요!) + public float Strength { get; set; } // 연결 강도 + public string ThreadType { get; set; } // 실의 종류 (기본/굵은/빛나는) +} + +public class NoRiGae // 노리개 (매듭들의 완성된 조합) +{ + public List Knots { get; set; } + public List Connections { get; set; } + public string OverallPattern { get; set; } // 전체 패턴 + public float AestheticValue { get; set; } // 미적 가치 + public float FunctionalValue { get; set; } // 기능적 가치 + public List GeneratedSkills { get; set; } // 생성된 스킬들 } ``` -### 5.2 매듭 생성 시스템 +### 4.2 연결 순서 기반 스킬 생성 시스템 ```csharp -public class KnotGenerator +public class SkillGenerator { - public Knot CreateKnotFromExperience(Experience exp) + public Skill GenerateSkillFromKnotSequence(List sequence) { - // 경험의 종류에 따라 적절한 매듭 타입 결정 - var knotType = DetermineKnotType(exp.Type, exp.Intensity); + if (sequence.Count < 2) return null; - // 경험의 감정적 색조에 따라 색상 결정 - var colors = DetermineColors(exp.EmotionalTone); + // 연결 순서에 따른 스킬 생성 로직 + var skillKey = GenerateSequenceKey(sequence); - // 경험의 복잡성에 따라 매듭 패턴 복잡도 결정 - var complexity = CalculateComplexity(exp.Depth, exp.Duration); + // 예시: 국화 → 물결 → 웃음 순서 + if (skillKey == "Chrysanthemum-Wave-Laughter") + { + return new Skill + { + Name = "치유하는 웃음", + Description = "다른 존재를 치유할 때 긍정적 감정도 함께 전달", + Effect = SkillEffect.HealingWithJoy, + Power = CalculatePowerFromSequence(sequence) + }; + } - return new Knot { /* 매듭 생성 */ }; + // 예시: 웃음 → 물결 → 국화 순서 (순서 바뀜) + if (skillKey == "Laughter-Wave-Chrysanthemum") + { + return new Skill + { + Name = "기쁨의 가르침", + Description = "가르칠 때 학습자가 더 쉽게 이해하고 즐거워함", + Effect = SkillEffect.JoyfulTeaching, + Power = CalculatePowerFromSequence(sequence) + }; + } + + return CreateGenericSkill(sequence); + } + + private string GenerateSequenceKey(List sequence) + { + return string.Join("-", sequence.Select(k => k.Type.ToString())); } } ``` -### 5.3 매듭 조합 시스템 -- **융합**: 관련성 높은 매듭들이 하나의 복합 매듭으로 발전 -- **공명**: 비슷한 매듭들이 서로 강화 효과 -- **상극**: 상반되는 매듭들이 균형을 이루며 새로운 특성 창조 - -## 6. 노드 기반 맵 시스템 (MapManager) - -### 6.1 맵 데이터 구조 +### 4.3 매듭 조합의 복잡성 ```csharp -public class GameMap +public enum KnotCombinationType { - public string Id { get; set; } // 맵 ID - public string Name { get; set; } // 맵 이름 - public Season Season { get; set; } // 계절 - public LifeStage AssociatedLifeStage { get; set; } // 연관된 생애주기 - public List Nodes { get; set; } // 노드 목록 - public Dictionary Connections { get; set; } // 노드 간 연결 - public string BackgroundArt { get; set; } // 배경 아트 경로 - public string BackgroundMusic { get; set; } // 배경 음악 경로 + Linear, // 직선형 연결 (A → B → C) + Branched, // 분기형 연결 (A → B, A → C) + Circular, // 순환형 연결 (A → B → C → A) + Complex // 복합형 연결 (여러 패턴 혼합) } -public class MapNode +public class KnotCombinationAnalyzer { - public string Id { get; set; } // 노드 ID - public string Name { get; set; } // 표시 이름 - public Vector2 Position { get; set; } // 화면상 위치 - public bool IsUnlocked { get; set; } // 해금 상태 - public List RequiredConditions { get; set; } // 해금 조건 - public List AvailableEvents { get; set; } // 발생 가능한 이벤트들 - public string Description { get; set; } // 노드 설명 - public NodeType Type { get; set; } // 노드 타입 -} -``` - -### 6.2 이동 시스템 -- **클릭 기반 이동**: 연결된 노드 클릭 시 즉시 이동 -- **조건부 해금**: 특정 인연이나 능력 달성 시 새 노드 해금 -- **시간별 변화**: 생애주기에 따라 접근 가능한 노드 변화 - -### 6.3 맵별 특성 -```json -{ - "springMap": { - "nodes": ["fairyNest", "flowerGarden", "stream", "grandmaHouse"], - "theme": "growth_and_curiosity", - "primaryColors": ["lightGreen", "pink", "skyBlue"], - "backgroundMusic": "spring_village.ogg" - }, - "summerMap": { - "nodes": ["riverField", "festivalGround", "deepForest", "travelerInn"], - "theme": "adventure_and_challenge", - "primaryColors": ["deepGreen", "yellow", "blue"], - "backgroundMusic": "summer_energy.ogg" + public List AnalyzeFullNoRiGae(NoRiGae noriGae) + { + var skills = new List(); + + // 1. 기본 연결 스킬들 + var sequences = ExtractLinearSequences(noriGae); + foreach (var seq in sequences) + { + var skill = _skillGenerator.GenerateSkillFromKnotSequence(seq); + if (skill != null) skills.Add(skill); + } + + // 2. 순환 연결 특별 스킬 + var cycles = DetectCycles(noriGae); + foreach (var cycle in cycles) + { + var cycleSkill = GenerateCycleSkill(cycle); + if (cycleSkill != null) skills.Add(cycleSkill); + } + + // 3. 전체 조화 스킬 (모든 매듭이 조화롭게 연결된 경우) + if (IsHarmoniousPattern(noriGae)) + { + skills.Add(GenerateHarmonySkill(noriGae)); + } + + return skills; } } ``` -## 7. 위험 시스템 (RiskManager) +## 5. 생명의 동반자 시스템 (CompanionSystem) -### 7.1 위험 요소 분류 +### 5.1 동반자 후보 관리 ```csharp -public class RiskEvent +public class CompanionCandidate { public string Id { get; set; } - public RiskType Type { get; set; } // 위험 종류 - public LifeStage ApplicableStage { get; set; } // 적용 생애주기 - public float Probability { get; set; } // 발생 확률 - public int Severity { get; set; } // 심각도 (1-10) - public bool IsPreventable { get; set; } // 예방 가능 여부 - public List PreventionMethods { get; set; } // 예방 방법 - public string Description { get; set; } // 위험 설명 - public DeathType PotentialOutcome { get; set; } // 잠재적 결과 + public string Name { get; set; } + public CompanionType PotentialType { get; set; } + public float Affection { get; set; } // 호감도 (0-100) + public LifeStage FirstMeeting { get; set; } // 첫 만남 시기 + public List SharedExperiences { get; set; } + public bool IsEligibleForBonding { get; set; } // 결합 자격 여부 + public NoRiGae CandidateNoRiGae { get; set; } // 후보자의 노리개 } -public enum RiskType +public class SharedExperience { - Curiosity, // 호기심으로 인한 위험 - Overconfidence, // 과신으로 인한 위험 - MoralDilemma, // 도덕적 딜레마 - NaturalDisaster, // 자연재해 - SocialConflict, // 사회적 갈등 - Isolation // 고립과 외로움 -} - -public enum DeathType -{ - Natural, // 자연사 - Accidental, // 사고사 - Sacrificial // 희생사 + public string EventId { get; set; } + public string Description { get; set; } + public float EmotionalImpact { get; set; } + public DateTime OccurredAt { get; set; } + public List GeneratedKnots { get; set; } // 이 경험으로 생성된 매듭들 } ``` -### 7.2 위험 관리 메커니즘 -- **예측 시스템**: DNA Pool의 경험을 바탕으로 위험 감지 -- **예방 행동**: 플레이어가 위험을 회피할 수 있는 선택지 제공 -- **리스크-리워드**: 큰 위험을 감수할수록 큰 성장 기회 - -### 7.3 사망 처리 시스템 +### 5.2 동반자 선택 및 결합 프로세스 ```csharp -public class DeathProcessor +public class CompanionSystem : Node { - public DNAPool ProcessDeath(DeathType deathType, LifeStage stage, DNAPool currentPool) + [Signal] public delegate void CompanionBondingAvailable(List candidates); + [Signal] public delegate void CompanionBondingCompleted(CompanionBond bond); + + public void InitiateCompanionSelection() { - switch (deathType) + var eligibleCandidates = GetEligibleCandidates(); + + // 호감도 75% 이상인 후보들만 최종 선택 가능 + var finalCandidates = eligibleCandidates + .Where(c => c.Affection >= 75f) + .ToList(); + + // 독립적 완성 옵션도 추가 + finalCandidates.Add(CreateIndependentPathOption()); + + EmitSignal(SignalName.CompanionBondingAvailable, finalCandidates); + } + + public async Task PerformBondingCeremony(CompanionCandidate chosen) + { + if (chosen.Id == "independent_path") { - case DeathType.Natural: - return ProcessNaturalDeath(currentPool); // 최고 품질 보존 - case DeathType.Accidental: - return ProcessAccidentalDeath(stage, currentPool); // 미완성 매듭 생성 - case DeathType.Sacrificial: - return ProcessSacrificialDeath(currentPool); // 전설 매듭 생성 + return await PerformIndependentCompletion(); + } + + // 동반자와의 결합 의식 + var ceremonyLocation = DetermineOptimalCeremonyLocation(chosen); + var fusedKnot = await FuseNoRiGaePatterns( + _playerNoRiGae, + chosen.CandidateNoRiGae + ); + + var bond = new CompanionBond + { + CompanionId = chosen.Id, + Type = chosen.PotentialType, + FusedKnot = fusedKnot, + BondingDate = DateTime.Now, + BondStrength = chosen.Affection + }; + + EmitSignal(SignalName.CompanionBondingCompleted, bond); + return bond; + } +} +``` + +### 5.3 노리개 융합 시스템 +```csharp +public class NoRiGaeFusion +{ + public Knot FuseNoRiGaePatterns(NoRiGae playerNoRiGae, NoRiGae companionNoRiGae) + { + // 두 노리개의 매듭들을 분석하여 최적의 융합 패턴 생성 + var harmonics = AnalyzeHarmonics(playerNoRiGae, companionNoRiGae); + var complementarity = AnalyzeComplementarity(playerNoRiGae, companionNoRiGae); + + var fusedKnot = new Knot + { + Id = Guid.NewGuid().ToString(), + Type = KnotType.CompanionFusion, + Pattern = GenerateFusionPattern(harmonics, complementarity), + PrimaryColor = BlendColors(playerNoRiGae, companionNoRiGae), + Complexity = Math.Max(10f, CalculateFusionComplexity(playerNoRiGae, companionNoRiGae)), + Source = $"Fusion of {playerNoRiGae.OverallPattern} and {companionNoRiGae.OverallPattern}", + CreatedAt = DateTime.Now + }; + + return fusedKnot; + } + + private float CalculateFusionComplexity(NoRiGae a, NoRiGae b) + { + // 두 노리개의 복잡성을 조합하여 새로운 수준의 복잡성 창조 + var baseComplexity = (a.Knots.Sum(k => k.Complexity) + b.Knots.Sum(k => k.Complexity)) / 2; + var harmonyBonus = CalculateHarmonyBonus(a, b); + + return Math.Min(10f, baseComplexity * (1 + harmonyBonus)); + } +} +``` + +## 6. 인연 시스템 (RelationshipManager) + +### 6.1 관계 발전 세부 메커니즘 +```csharp +public class Relationship +{ + public string EntityId { get; set; } + public RelationshipType Type { get; set; } + public float Affection { get; set; } // 호감도 (0-100) + public float Trust { get; set; } // 신뢰도 (0-100) + public float Understanding { get; set; } // 이해도 (0-100) + public float SharedHistory { get; set; } // 공유 역사 (0-100) + + public List Milestones { get; set; } + public CompanionType PotentialCompanionType { get; set; } + public bool CanBecomeSoulFriend { get; set; } + public bool CanBecomeRomanticPartner { get; set; } + public bool CanBecomeMentor { get; set; } +} + +public class RelationshipMilestone +{ + public string EventDescription { get; set; } + public LifeStage OccurredAt { get; set; } + public float ImpactOnAffection { get; set; } + public List GeneratedKnots { get; set; } + public bool IsSpecialMoment { get; set; } +} +``` + +### 6.2 관계별 특별 이벤트 시스템 +```csharp +public class RelationshipEventTrigger +{ + public void CheckForSpecialEvents(Relationship relationship) + { + // 호감도 구간별 특별 이벤트 체크 + if (relationship.Affection >= 25 && !relationship.HasMilestone("first_heart_to_heart")) + { + TriggerEvent("first_heart_to_heart", relationship.EntityId); + } + + if (relationship.Affection >= 50 && !relationship.HasMilestone("deep_trust_moment")) + { + TriggerEvent("deep_trust_moment", relationship.EntityId); + } + + if (relationship.Affection >= 75 && !relationship.HasMilestone("profound_connection")) + { + TriggerEvent("profound_connection", relationship.EntityId); + // 동반자 후보 자격 획득 + relationship.BecomeCompanionCandidate(); } } } ``` -## 8. UI/UX 시스템 +## 7. 노드 기반 맵 시스템 (MapManager) -### 8.1 주요 UI 컴포넌트 -- **생애주기 표시기**: 현재 단계와 남은 시간 표시 -- **매듭 정원**: DNA Pool과 매듭들을 시각화 -- **인연 네트워크**: 현재 관계들을 그래프로 표시 -- **맵 네비게이션**: 노드 기반 이동 인터페이스 - -### 8.2 정보 표시 시스템 +### 7.1 맵 데이터 구조 (개선된 버전) ```csharp -public class UIManager : Node +public class GameMap { - public void UpdateLifeStageDisplay(LifeStage stage, float timeRemaining) { } - public void ShowKnotGarden(List knots) { } - public void DisplayRelationshipNetwork(List relationships) { } - public void UpdateMapView(GameMap currentMap, string currentNodeId) { } + public string Id { get; set; } + public string Name { get; set; } + public Season Season { get; set; } + public LifeStage AssociatedLifeStage { get; set; } + public List Nodes { get; set; } + public Dictionary> NodeConnections { get; set; } + public MapTheme Theme { get; set; } + public EnvironmentalData Environment { get; set; } +} + +public class MapNode +{ + public string Id { get; set; } + public string Name { get; set; } + public string KoreanName { get; set; } // 한국어 이름 + public Vector2 Position { get; set; } + public NodeType Type { get; set; } + public List RequiredKnots { get; set; } // 접근에 필요한 매듭들 + public List AvailableCharacters { get; set; } + public List PossibleEvents { get; set; } + public string Description { get; set; } + public Mood NodeMood { get; set; } // 노드의 분위기 +} + +public class EnvironmentalData +{ + public List DominantColors { get; set; } + public string BackgroundMusic { get; set; } + public string AmbientSounds { get; set; } + public WeatherCondition Weather { get; set; } + public TimeOfDay PreferredTimeOfDay { get; set; } } ``` -### 8.3 접근성 고려사항 -- **색맹 대응**: 색상 외에도 패턴과 모양으로 정보 전달 -- **시각 장애 대응**: 음성 피드백과 대체 텍스트 제공 -- **조작 편의성**: 키보드 단축키와 마우스 조작 모두 지원 - -## 9. 성능 최적화 - -### 9.1 메모리 관리 -- **오브젝트 풀링**: 자주 생성/제거되는 객체들의 재활용 -- **지연 로딩**: 필요한 시점에만 리소스 로드 -- **가비지 컬렉션 최소화**: 불필요한 객체 생성 방지 - -### 9.2 렌더링 최적화 -- **2D 기반 그래픽**: 3D 대비 경량화된 렌더링 -- **텍스처 아틀라스**: 작은 이미지들을 하나로 합쳐 드로우콜 감소 -- **LOD 시스템**: 거리에 따른 디테일 조절 - -### 9.3 데이터 최적화 +### 7.2 시나리오 1 맵 구성 (상세) ```csharp -public class DataOptimizer +public static class Scenario1Maps { - // JSON 데이터 압축 - public string CompressDNAPool(DNAPool pool) { } + public static GameMap CreateMapA_FlowerVillage() + { + return new GameMap + { + Id = "map_a_flower_village", + Name = "Spring Mountain Village", + KoreanName = "꽃마루", + Season = Season.Spring, + AssociatedLifeStage = LifeStage.YoungFairy, + Theme = new MapTheme + { + PrimaryEmotion = Emotion.Wonder, + SecondaryEmotion = Emotion.Curiosity, + CulturalFocus = CulturalFocus.TraditionalRural + }, + Nodes = new List + { + new MapNode + { + Id = "grandma_house", + Name = "Grandma's House", + KoreanName = "할머니 집", + Type = NodeType.Residence, + AvailableCharacters = new List { "grandma_dalbit" }, + NodeMood = Mood.Warm + }, + new MapNode + { + Id = "flower_garden", + Name = "Withering Flower Garden", + KoreanName = "시든 꽃밭", + Type = NodeType.NatureSpot, + AvailableCharacters = new List { "spirit_flownim" }, + NodeMood = Mood.Melancholic + }, + // ... 다른 노드들 + } + }; + } +} +``` + +## 8. 위험 시스템 (RiskManager) + +### 8.1 생애주기별 위험 상세 구현 +```csharp +public class RiskEvent +{ + public string Id { get; set; } + public RiskType Type { get; set; } + public LifeStage ApplicableStage { get; set; } + public float BaseProbability { get; set; } // 기본 확률 + public List ModifyingFactors { get; set; } // 확률 조정 요인들 + public int Severity { get; set; } // 심각도 (1-10) + public List PreventionMethods { get; set; } + public List PossibleOutcomes { get; set; } + public string NarrativeDescription { get; set; } // 서사적 설명 +} + +public class RiskFactor +{ + public string FactorName { get; set; } // 요인명 (예: "과도한 호기심") + public float Multiplier { get; set; } // 확률 배수 + public string Source { get; set; } // 요인 출처 (매듭, 인연 등) +} + +public class PreventionMethod +{ + public string Method { get; set; } // 예방 방법 + public float SuccessRate { get; set; } // 성공률 + public List RequiredKnots { get; set; } // 필요한 매듭들 + public string Description { get; set; } +} +``` + +### 8.2 위험 발생 및 처리 시스템 +```csharp +public class RiskManager : Node +{ + [Signal] public delegate void RiskEventTriggered(RiskEvent riskEvent); + [Signal] public delegate void DeathEventOccurred(DeathType deathType, string cause); - // 불필요한 데이터 정리 - public void CleanupOldData(int generationsToKeep) { } + public void EvaluateRisksForCurrentStage() + { + var currentStage = _lifeCycleManager.CurrentStage; + var applicableRisks = GetRisksForStage(currentStage); + + foreach (var risk in applicableRisks) + { + var adjustedProbability = CalculateAdjustedProbability(risk); + + if (ShouldTriggerRisk(adjustedProbability)) + { + EmitSignal(SignalName.RiskEventTriggered, risk); + } + } + } - // 인덱싱을 통한 빠른 검색 - public void BuildSearchIndex(List knots) { } + private float CalculateAdjustedProbability(RiskEvent risk) + { + var baseProbability = risk.BaseProbability; + + foreach (var factor in risk.ModifyingFactors) + { + if (PlayerHasFactor(factor.Source)) + { + baseProbability *= factor.Multiplier; + } + } + + // 이전 세대 경험에 따른 위험 감지 능력 + var wisdom = _dnaPoolManager.GetWisdomLevel(); + baseProbability *= (1f - wisdom * 0.1f); // 지혜가 높을수록 위험 감소 + + return Math.Max(0f, Math.Min(1f, baseProbability)); + } } ``` -## 10. 확장성 설계 +## 9. UI/UX 시스템 -### 10.1 모듈화 구조 -- **이벤트 시스템**: 각 모듈 간 느슨한 결합 -- **플러그인 아키텍처**: 새로운 기능을 쉽게 추가 가능 -- **데이터 기반 설정**: JSON 파일로 게임 밸런스 조정 - -### 10.2 콘텐츠 확장 +### 9.1 매듭 시각화 시스템 ```csharp -public interface IContentLoader +public class KnotVisualizationManager : Node2D { - void LoadNewMap(string mapDefinitionPath); - void LoadNewKnotTypes(string knotDefinitionPath); - void LoadNewEvents(string eventDefinitionPath); + public void RenderNoRiGae(NoRiGae noriGae, Vector2 centerPosition) + { + // 노리개의 전체 구조를 아름답게 렌더링 + var layout = CalculateOptimalLayout(noriGae); + + foreach (var knot in noriGae.Knots) + { + RenderIndividualKnot(knot, layout[knot.Id]); + } + + foreach (var connection in noriGae.Connections) + { + RenderKnotConnection(connection, layout); + } + + // 전체 노리개의 아우라나 특별 효과 렌더링 + RenderNoRiGaeAura(noriGae, centerPosition); + } + + private void RenderIndividualKnot(Knot knot, Vector2 position) + { + // 매듭의 3D 입체감과 질감 표현 + var texture = GetKnotTexture(knot.Type); + var colorModulated = ModulateColorByComplexity(texture, knot); + + // 매듭이 살아있는 듯 미묘하게 움직이는 애니메이션 + AddSubtleAnimation(colorModulated, knot.Beauty); + + DrawTextureAtPosition(colorModulated, position); + } } ``` -### 10.3 버전 관리 -- **세이브 데이터 호환성**: 버전 간 데이터 마이그레이션 -- **점진적 업데이트**: 핫픽스와 콘텐츠 추가의 분리 -- **A/B 테스트**: 다양한 밸런스 옵션 실험 가능 +### 9.2 인연 네트워크 시각화 +```csharp +public class RelationshipNetworkUI : Control +{ + public void DisplayRelationshipWeb(List relationships) + { + var networkGraph = CreateNetworkGraph(relationships); + + // 관계의 강도에 따라 연결선의 두께와 색상 조절 + foreach (var rel in relationships) + { + var lineThickness = rel.Affection / 100f * 5f; + var lineColor = GetRelationshipColor(rel.Type, rel.Affection); + + DrawRelationshipLine(rel, lineThickness, lineColor); + } + + // 동반자 후보들을 특별히 하이라이트 + HighlightCompanionCandidates(relationships); + } +} +``` + +### 9.3 생애주기 진행 표시 +```csharp +public class LifeProgressUI : Control +{ + [Export] public ProgressBar LifeStageProgress; + [Export] public Label CurrentStageLabel; + [Export] public Label SeasonLabel; + [Export] public TextureRect SeasonIcon; + + public void UpdateLifeProgress(LifeStage stage, float progress) + { + CurrentStageLabel.Text = GetStageDisplayName(stage); + SeasonLabel.Text = GetSeasonDisplayName(GetSeasonForStage(stage)); + LifeStageProgress.Value = progress; + + // 계절 변화에 따른 UI 색조 변경 + ModulateUIColorForSeason(GetSeasonForStage(stage)); + } +} +``` + +## 10. 성능 최적화 및 확장성 + +### 10.1 매듭 시스템 최적화 +```csharp +public class KnotOptimizationManager +{ + private Dictionary _knotTextureCache; + private Dictionary _skillCache; + + public void PreloadKnotAssets() + { + // 자주 사용되는 매듭 텍스처들을 미리 로드 + foreach (var knotType in Enum.GetValues()) + { + var texturePath = GetKnotTexturePath(knotType); + _knotTextureCache[knotType.ToString()] = GD.Load(texturePath); + } + } + + public Skill GetOrCreateSkill(string sequenceKey, List sequence) + { + // 스킬 캐싱으로 중복 계산 방지 + if (_skillCache.ContainsKey(sequenceKey)) + { + return _skillCache[sequenceKey]; + } + + var newSkill = _skillGenerator.GenerateSkillFromKnotSequence(sequence); + _skillCache[sequenceKey] = newSkill; + return newSkill; + } +} +``` + +### 10.2 데이터 저장 최적화 +```csharp +public class SaveManager : Node +{ + private const string SAVE_FILE_PATH = "user://little_fairy_save.dat"; + + public async Task SaveGameData(StellarDNA stellarDNA) + { + // JSON 직렬화 후 압축 + var jsonData = JsonSerializer.Serialize(stellarDNA); + var compressedData = GzipCompress(jsonData); + + // 비동기 파일 저장 + await File.WriteAllBytesAsync(SAVE_FILE_PATH, compressedData); + } + + public async Task LoadGameData() + { + if (!File.Exists(SAVE_FILE_PATH)) + return null; + + var compressedData = await File.ReadAllBytesAsync(SAVE_FILE_PATH); + var jsonData = GzipDecompress(compressedData); + + return JsonSerializer.Deserialize(jsonData); + } +} +``` + +### 10.3 확장성 설계 +```csharp +public interface IScenarioLoader +{ + Task LoadScenario(string scenarioId); + List GetScenarioCharacters(string scenarioId); + List GetScenarioSpecificKnots(string scenarioId); +} + +public class ModularContentManager +{ + private readonly Dictionary _scenarioLoaders; + + public async Task LoadAdditionalScenario(string scenarioId) + { + var loader = _scenarioLoaders[scenarioId]; + var scenario = await loader.LoadScenario(scenarioId); + + // 새로운 시나리오 콘텐츠를 기존 시스템에 통합 + IntegrateNewScenario(scenario); + } +} +``` + +## 11. 이벤트 시스템 및 연출 + +### 11.1 이벤트 관리 시스템 +```csharp +public class EventManager : Node +{ + [Signal] public delegate void KnotFormed(Knot newKnot); + [Signal] public delegate void RelationshipMilestone(string characterId, string milestoneType); + [Signal] public delegate void SeasonTransition(Season newSeason); + [Signal] public delegate void SpecialMoment(string momentType, Dictionary context); + + public void TriggerKnotFormationEvent(Knot knot, string source) + { + // 매듭 생성 시 아름다운 연출 + PlayKnotFormationAnimation(knot); + PlayKnotFormationSound(knot.Type); + + EmitSignal(SignalName.KnotFormed, knot); + + // 다른 시스템들에 알림 + NotifySystemsOfKnotFormation(knot, source); + } +} +``` + +### 11.2 한국 전통 문화 연출 +```csharp +public class CulturalPresentationManager +{ + public void PresentTraditionalCeremony(CompanionType companionType) + { + switch (companionType) + { + case CompanionType.RomanticPartner: + PresentTraditionalWedding(); + break; + case CompanionType.MasterDisciple: + PresentDiscipleshipCeremony(); + break; + // ... 다른 의식들 + } + } + + private void PresentTraditionalWedding() + { + // 한국 전통 혼례 의식 연출 + PlayTraditionalMusic("wedding_music.ogg"); + ShowHanbokCostumes(); + PerformPyebaekCeremony(); + } +} +``` --- -**이 시스템 설계는 "살아있음의 기쁨"이라는 핵심 경험을 기술적으로 구현하기 위한 상세한 명세서입니다. 각 시스템은 독립적으로 개발 가능하면서도 유기적으로 연결되어 통합된 경험을 제공하도록 설계되었습니다.** +## 12. 기술적 구현 세부사항 + +### 12.1 시스템 간 통신 패턴 +```csharp +public class SystemCommunicationHub : Node +{ + // 이벤트 기반 느슨한 결합 + public void ConnectSystems() + { + var lifeCycleManager = GetNode("/root/LifeCycleManager"); + var knotSystem = GetNode("/root/KnotSystem"); + var relationshipManager = GetNode("/root/RelationshipManager"); + + // 생애주기 변화 → 매듭 시스템 업데이트 + lifeCycleManager.LifeStageChanged += knotSystem.OnLifeStageChanged; + + // 인연 발전 → 매듭 생성 + relationshipManager.RelationshipImproved += knotSystem.CreateRelationshipKnot; + + // 매듭 생성 → 능력치 업데이트 + knotSystem.KnotCreated += UpdatePlayerAbilities; + } +} +``` + +### 12.2 한국어 지원 시스템 +```csharp +public class LocalizationManager : Node +{ + private Dictionary> _localizedTexts; + + public void InitializeKoreanSupport() + { + LoadLocalizedTexts("ko-KR"); + SetupKoreanFonts(); + ConfigureRightToLeftSupport(); + } + + public string GetLocalizedKnotName(KnotType knotType) + { + var key = $"knot_{knotType.ToString().ToLower()}"; + return _localizedTexts["ko-KR"].GetValueOrDefault(key, knotType.ToString()); + } +} +``` + +--- + +**이 시스템 설계는 "살아있음의 기쁨"이라는 핵심 경험을 기술적으로 구현하기 위한 상세한 명세서입니다. 특히 혁신적인 매듭 연결 순서 시스템과 생명의 동반자 시스템을 통해 플레이어에게 깊이 있고 의미있는 경험을 제공할 수 있도록 설계되었습니다.** + +**각 시스템은 독립적으로 개발 가능하면서도 유기적으로 연결되어 통합된 경험을 제공하며, 한국적 정서와 전통 문화를 현대적 게임 메커니즘으로 성공적으로 구현할 수 있는 기반을 제공합니다.** diff --git a/moon/docs/design/03_development_roadmap.md b/moon/docs/design/03_development_roadmap.md index cb1e16f..91ae9aa 100644 --- a/moon/docs/design/03_development_roadmap.md +++ b/moon/docs/design/03_development_roadmap.md @@ -1,17 +1,716 @@ -# Little Fairy - 개발 로드맵 +# Little Fairy - 개발 로드맵 (개정판) ## 1. 프로젝트 개요 ### 1.1 개발 목표 -- **핵심 경험**: "살아있음의 기쁨"을 체험할 수 있는 게임 완성 +- **핵심 경험**: "살아있음의 기쁨"과 "생명의 연속성"을 체험할 수 있는 게임 완성 - **기술 목표**: Godot 4.4.1 + C#을 활용한 안정적인 게임 구현 -- **일정 목표**: 6개월 내 알파 버전 완성, 12개월 내 정식 출시 +- **일정 목표**: 15개월 내 시나리오 1 완성, 24개월 내 다중 시나리오 시스템 완성 ### 1.2 개발 철학 - **점진적 개발**: 핵심 기능부터 단계적으로 구현 - **플레이 테스트 중심**: 빈번한 테스트를 통한 경험 검증 - **문서화 우선**: 모든 결정과 변경사항의 체계적 기록 +- **한국적 정서 구현**: 전통 문화 요소의 현대적 재해석 --- -**이 로드맵은 "살아있음의 기쁨"이라는 핵심 경험을 단계적으로 구현하면서도 기술적 안정성과 개발 효율성을 균형있게 추구하는 실용적인 계획입니다. 각 단계에서 핵심 경험 목표 달성도를 지속적으로 검증하며, 필요시 우선순위를 조정할 수 있는 유연성을 확보했습니다.** +## 2. 전체 개발 로드맵 (24개월) + +### 2.1 Phase 1: 핵심 시스템 구축 (3개월) +**목표**: 게임의 기본 뼈대와 핵심 메커니즘 구현 + +#### Month 1: 기본 아키텍처 및 생애주기 시스템 +``` +Week 1-2: 프로젝트 셋업 및 기본 아키텍처 +├── Godot 프로젝트 초기화 +├── 핵심 시스템 Manager들 기본 구조 생성 +├── 이벤트 시스템 구축 +└── 기본 씬 구조 설계 + +Week 3-4: 생애주기 시스템 구현 +├── LifeCycleManager 완성 +├── 4단계 생애주기 타이머 시스템 +├── 단계별 전환 로직 +└── 기본 UI 연동 +``` + +#### Month 2: 노드 기반 맵 시스템 +``` +Week 1-2: 맵 데이터 구조 및 로딩 +├── GameMap, MapNode 클래스 구현 +├── JSON 기반 맵 데이터 로더 +├── 노드 간 연결 시스템 +└── 맵 렌더링 기본 시스템 + +Week 3-4: Map A "꽃마루" 기본 구현 +├── 꽃마루 마을 노드 7개 구성 +├── 노드 간 이동 시스템 +├── 기본 배경 아트 적용 +└── 간단한 상호작용 시스템 +``` + +#### Month 3: 기본 매듭 시스템 +``` +Week 1-2: 매듭 데이터 구조 및 생성 +├── Knot, KnotConnection 클래스 구현 +├── 기본 매듭 타입들 정의 +├── 매듭 생성 로직 +└── 간단한 매듭 시각화 + +Week 3-4: 노리개 시스템 기초 +├── NoRiGae 클래스 구현 +├── 매듭 연결 시스템 +├── 기본 연결 순서 스킬 생성 +└── 매듭 저장/로드 시스템 +``` + +### 2.2 Phase 2: 시나리오 1 기본 콘텐츠 구현 (6개월) + +#### Month 4: Map A 완전 구현 +``` +Week 1: 등장인물 시스템 +├── Character 클래스 및 데이터 구조 +├── 4명 등장인물 기본 구현 +├── 대화 시스템 기초 +└── 인연 시스템 기본 구조 + +Week 2-3: 인연 및 호감도 시스템 +├── Relationship 클래스 완성 +├── 호감도 발전 메커니즘 +├── 관계별 특별 이벤트 +└── 인연 기반 매듭 생성 + +Week 4: Map A 이벤트 구현 +├── 15분 분량 주요 이벤트 시퀀스 +├── 선택지 시스템 +├── 4개 기본 매듭 획득 로직 +└── Map A → Map B 전환 이벤트 +``` + +#### Month 5: Map B "물소리 벌판" 구현 +``` +Week 1-2: Map B 환경 및 등장인물 +├── 강변 들판 노드 12개 구성 +├── 4명 새로운 등장인물 추가 +├── 환경별 분위기 연출 +└── 계절감 (여름) 구현 + +Week 3-4: Map B 콘텐츠 및 매듭 +├── 대규모 치유 프로젝트 이벤트 +├── 4개 새로운 매듭 구현 +├── 매듭 조합 스킬 확장 +└── 위험 요소 시스템 기초 +``` + +#### Month 6: Map C "단풍골" 구현 +``` +Week 1-2: 복잡한 사회적 갈등 시스템 +├── 전통 vs 현대 갈등 구조 +├── 5명 등장인물 (다양한 배경) +├── 복합적 선택지 시스템 +└── 갈등 해결 메커니즘 + +Week 3-4: 고급 매듭 조합 +├── 복잡한 매듭 연결 패턴 +├── 분기형, 순환형 연결 구현 +├── 고급 스킬 생성 시스템 +└── 12개 매듭 누적 관리 +``` + +#### Month 7-8: 생명의 동반자 시스템 +``` +Month 7 Week 1-2: 동반자 후보 시스템 +├── CompanionCandidate 클래스 +├── 호감도 75% 달성 조건 +├── 6가지 동반자 유형 구현 +└── 독립적 완성 경로 + +Month 7 Week 3-4: 동반자 선택 UI +├── 아름다운 선택 인터페이스 +├── 각 후보별 상세 정보 표시 +├── 예상 결과 시뮬레이션 +└── 최종 결정 확인 시스템 + +Month 8 Week 1-2: 결합 의식 시스템 +├── 동반자별 특별 의식 장면 +├── 노리개 융합 시각화 +├── 특별 매듭 생성 로직 +└── 감동적인 연출 시스템 + +Month 8 Week 3-4: Map D "백설봉" 기본 +├── 설산 환경 구현 +├── 영적 승화 과정 연출 +├── 완성 매듭들 구현 +└── 생애 마무리 시스템 +``` + +#### Month 9: 선녀의 별자리 시스템 +``` +Week 1-2: StellarDNA 완성 +├── 완전한 유전 메커니즘 +├── 동반자 보너스 적용 +├── 세대별 특화 발전 +└── 가문 특성 시스템 + +Week 3-4: 세대 전환 시스템 +├── 이전 세대 데이터 보존 +├── 다음 세대 생성 로직 +├── 상속 효과 시각화 +└── 연속 플레이 지원 +``` + +### 2.3 Phase 3: 완성도 향상 및 폴리싱 (3개월) + +#### Month 10: 위험 시스템 및 사망 처리 +``` +Week 1-2: 위험 요소 구현 +├── 생애주기별 위험 이벤트 +├── 확률 계산 시스템 +├── 예방 및 대응 메커니즘 +└── 위험 시각화 + +Week 3-4: 사망 시스템 완성 +├── 3가지 사망 유형 구현 +├── 아름다운 사망 연출 +├── 미완성 상태 처리 +└── 사망 후 선녀의 별자리 처리 +``` + +#### Month 11: UI/UX 완성 +``` +Week 1-2: 매듭 시각화 고도화 +├── 3D 입체감 매듭 렌더링 +├── 노리개 전체 시각화 +├── 매듭 연결 애니메이션 +└── 아름다운 이펙트 시스템 + +Week 3-4: 전체 UI 통합 +├── 일관된 디자인 시스템 +├── 한국적 미감 적용 +├── 접근성 개선 +└── 사용성 테스트 반영 +``` + +#### Month 12: 밸런싱 및 최적화 +``` +Week 1-2: 게임 밸런스 조정 +├── 매듭 생성 확률 조정 +├── 인연 발전 속도 조절 +├── 위험 요소 균형 맞추기 +└── 플레이 타임 최적화 + +Week 3-4: 성능 최적화 +├── 메모리 사용량 최적화 +├── 로딩 시간 단축 +├── 프레임레이트 안정화 +└── 저사양 PC 지원 +``` + +### 2.4 Phase 4: 확장 시나리오 개발 (9개월) + +#### Month 13-15: 시나리오 2 "모험의 날개" +``` +Month 13: 기본 구조 및 환경 +├── 모험 테마 맵 4개 설계 +├── 14명 새로운 등장인물 +├── 모험 특화 매듭 16종 +└── 액션 지향 이벤트 시스템 + +Month 14: 모험 메커니즘 +├── 위험과 도전 시스템 +├── 탐험 기반 퀘스트 +├── 역동적 선택지 +└── 모험 동반자 시스템 + +Month 15: 시나리오 2 완성 +├── 전체 스토리 구현 +├── 모험 테마 UI 스킨 +├── 시나리오 1과 연동 +└── 테스트 및 밸런싱 +``` + +#### Month 16-18: 시나리오 3 "지혜의 탑" +``` +Month 16: 학문/예술 환경 +├── 지혜 테마 맵 4개 +├── 학자/예술가 14명 +├── 지혜 계열 매듭 16종 +└── 창작/연구 시스템 + +Month 17: 지적 도전 시스템 +├── 복잡한 문제 해결 +├── 창작 미니게임 +├── 철학적 선택지 +└── 지혜 동반자 시스템 + +Month 18: 시나리오 3 완성 +├── 통합된 3시나리오 시스템 +├── 지혜 테마 UI 완성 +├── 크로스오버 이벤트 +└── 전체 시스템 안정화 +``` + +#### Month 19-21: 혼합 시나리오 시스템 +``` +Month 19: 4단계 혼합 메커니즘 +├── 생애주기별 시나리오 조합 +├── 1+2, 1+3, 2+3 조합 +├── 새로운 융합 매듭 +└── 복합 스킬 시스템 + +Month 20: 고급 가문 시스템 +├── 다세대 가문 특성 +├── 전설적 가문 능력 +├── 가문 역사 기록 +└── 커뮤니티 랭킹 + +Month 21: 확장 콘텐츠 +├── 특별 이벤트 시나리오 +├── 계절별 한정 이벤트 +├── 히든 매듭과 비밀 +└── 엔드게임 콘텐츠 +``` + +### 2.5 Phase 5: 출시 준비 및 사후 지원 (3개월) + +#### Month 22: 최종 완성 및 마스터링 +``` +Week 1-2: 최종 버그 수정 +├── 크리티컬 버그 제로화 +├── 성능 최적화 완료 +├── 모든 플랫폼 호환성 확인 +└── 세이브 데이터 안정성 검증 + +Week 3-4: 출시 준비 +├── 스토어 페이지 준비 +├── 트레일러 영상 제작 +├── 프레스 키트 완성 +└── 리뷰어 사전 배포 +``` + +#### Month 23: 출시 및 초기 대응 +``` +Week 1-2: 정식 출시 +├── 전 세계 동시 출시 +├── 커뮤니티 매니징 +├── 초기 사용자 피드백 대응 +└── 긴급 핫픽스 준비 + +Week 3-4: 안정화 +├── 사용자 리포트 버그 수정 +├── 밸런스 패치 +├── 성능 개선 업데이트 +└── 커뮤니티 이벤트 +``` + +#### Month 24: 사후 지원 및 확장 계획 +``` +Week 1-2: 장기 지원 체계 +├── 정기 업데이트 계획 +├── 커뮤니티 기능 강화 +├── DLC 콘텐츠 기획 +└── 차기작 초기 기획 + +Week 3-4: 레거시 구축 +├── 개발 포스트모템 +├── 기술 문서 정리 +├── 팀 정리 및 차기 프로젝트 준비 +└── 수상 및 인정 추진 +``` + +--- + +## 3. 개발 팀 구성 및 역할 + +### 3.1 핵심 개발팀 (8명) +**프로젝트 리드 겸 게임 디자이너** (1명) +- 전체 프로젝트 관리 및 방향성 제시 +- 게임 시스템 설계 및 밸런싱 +- 한국 문화 요소 기획 및 감수 + +**프로그래머** (3명) +- **클라이언트 리드**: 핵심 게임플레이 시스템 구현 +- **UI/UX 프로그래머**: 사용자 인터페이스 전담 +- **시스템 프로그래머**: 매듭 시스템, 선녀의 별자리 시스템 전담 + +**아티스트** (3명) +- **컨셉 아티스트**: 매듭 디자인, 캐릭터 디자인 +- **환경 아티스트**: 맵 배경, 노드 시각화 +- **UI 아티스트**: 인터페이스 디자인, 아이콘 + +**사운드 디자이너** (1명) +- 한국 전통 음악 기반 BGM 제작 +- 매듭 생성, 인연 발전 등 핵심 이벤트 사운드 +- 환경음 및 효과음 제작 + +### 3.2 외부 협력진 +**한국 문화 전문가** +- 매듭공예 장인과의 협업 +- 전통 의식 및 문화 고증 +- 한국어 현지화 감수 + +**베타 테스터 그룹** (50명) +- 다양한 연령대 플레이어 +- 한국 문화에 대한 다양한 배경 +- 정기적인 피드백 세션 + +--- + +## 4. 기술적 구현 전략 + +### 4.1 개발 환경 구성 +``` +Primary Tools: +├── Godot 4.4.1 (게임 엔진) +├── Visual Studio 2022 (C# 개발) +├── Git + GitHub (버전 관리) +└── Discord (팀 커뮤니케이션) + +Art Tools: +├── Clip Studio Paint (컨셉 아트) +├── Blender (3D 매듭 모델링) +├── Adobe Photoshop (텍스처 작업) +└── Adobe After Effects (이펙트) + +Audio Tools: +├── Reaper (음악 제작) +├── 국악기 샘플 라이브러리 +└── Audacity (사운드 편집) +``` + +### 4.2 코드 품질 관리 +```csharp +Development Standards: +├── 코딩 컨벤션 문서 준수 +├── 주간 코드 리뷰 세션 +├── 단위 테스트 커버리지 80% 이상 +├── 성능 프로파일링 월 1회 +└── 문서화 의무화 +``` + +### 4.3 데이터 관리 전략 +``` +Data Architecture: +├── JSON 기반 게임 데이터 +├── 버전별 세이브 호환성 +├── 클라우드 저장 지원 +├── 데이터 무결성 검증 +└── 백업 및 복구 시스템 +``` + +--- + +## 5. 품질 보증 및 테스트 계획 + +### 5.1 단계별 테스트 전략 + +#### Phase 1 테스트 (시스템 안정성) +``` +Focus Areas: +├── 생애주기 전환 버그 없음 +├── 맵 이동 시스템 안정성 +├── 매듭 생성/저장 정확성 +├── 메모리 누수 없음 +└── 기본 성능 기준 달성 +``` + +#### Phase 2 테스트 (콘텐츠 품질) +``` +Focus Areas: +├── 스토리 흐름 자연스러움 +├── 인연 발전 로직 정확성 +├── 매듭 조합 스킬 정상 작동 +├── 동반자 시스템 완성도 +└── 감정적 몰입도 측정 +``` + +#### Phase 3 테스트 (전체 경험) +``` +Focus Areas: +├── 1시간 플레이 완주율 +├── 재플레이 의향률 +├── "살아있음의 기쁨" 체험도 +├── 한국 문화 이해도 +└── 전체적 만족도 +``` + +### 5.2 성능 기준점 +``` +Technical Requirements: +├── 시작 로딩 시간: 30초 이내 +├── 맵 전환 시간: 3초 이내 +├── 평균 FPS: 60fps 유지 +├── 메모리 사용량: 2GB 이하 +└── 세이브/로드: 5초 이내 +``` + +### 5.3 접근성 기준 +``` +Accessibility Standards: +├── 색각 이상자 지원 +├── 키보드 전용 플레이 가능 +├── 텍스트 크기 조절 +├── 사운드 자막 지원 +└── 간소화 UI 모드 +``` + +--- + +## 6. 위험 요소 및 대응 계획 + +### 6.1 주요 위험 요소 + +#### 기술적 위험 +**매듭 시스템 복잡성** +- 위험: 연결 순서 조합의 폭발적 증가로 인한 성능 문제 +- 대응: 효율적인 캐싱 시스템과 조합 제한 +- 백업: 단순화된 매듭 시스템으로 대체 + +**선녀의 별자리 데이터 관리** +- 위험: 세대별 데이터 누적으로 인한 저장 공간 문제 +- 대응: 압축 알고리즘과 불필요 데이터 정리 +- 백업: 핵심 데이터만 유지하는 경량 모드 + +#### 콘텐츠 위험 +**한국 문화 고증 정확성** +- 위험: 부정확한 문화 표현으로 인한 비판 +- 대응: 전문가 자문단 운영 +- 백업: 창작 요소임을 명확히 표시 + +**감정적 몰입도 부족** +- 위험: "살아있음의 기쁨" 경험 목표 미달성 +- 대응: 빈번한 플레이 테스트와 피드백 반영 +- 백업: 핵심 경험 요소 강화 + +#### 시장 위험 +**틈새 장르의 한계** +- 위험: 생명 시뮬레이션 장르의 제한적 어필 +- 대응: 교육적 가치 강조, 다양한 연령층 타겟 +- 백업: 캐주얼 게임 요소 추가 + +### 6.2 위험 완화 전략 + +#### 기술적 대응 +``` +Risk Mitigation: +├── 매월 기술 검토 회의 +├── 프로토타입 우선 개발 +├── 성능 테스트 자동화 +├── 코드 리뷰 강화 +└── 백업 플랜 B 항상 준비 +``` + +#### 콘텐츠 대응 +``` +Content Quality Assurance: +├── 주간 플레이 테스트 세션 +├── 다양한 배경의 테스터 모집 +├── 전문가 자문 정기 회의 +├── 감정적 반응 측정 도구 +└── 문화 컨설턴트 상시 대기 +``` + +--- + +## 7. 예산 및 리소스 계획 + +### 7.1 개발 예산 개요 (24개월) +``` +Total Budget Breakdown: +├── 인건비 (70%): 핵심팀 8명 + 외부 협력 +├── 기술 및 도구 (15%): 소프트웨어 라이선스, 하드웨어 +├── 문화 자문 및 연구 (10%): 전문가 비용, 자료 수집 +├── 마케팅 및 홍보 (5%): 트레일러, 홍보 자료 제작 +└── 예비비 (10%): 예상치 못한 비용 대비 +``` + +### 7.2 월별 예산 배분 +``` +Phase별 예산 배분: +├── Phase 1 (3개월): 전체 예산의 15% +├── Phase 2 (6개월): 전체 예산의 35% +├── Phase 3 (3개월): 전체 예산의 20% +├── Phase 4 (9개월): 전체 예산의 25% +└── Phase 5 (3개월): 전체 예산의 5% +``` + +### 7.3 수익 모델 +``` +Revenue Streams: +├── 기본 게임 판매 (시나리오 1) +├── 추가 시나리오 DLC 판매 +├── 콜렉터즈 에디션 (매듭 굿즈 포함) +├── 교육용 라이선스 +└── 문화 상품 연계 판매 +``` + +--- + +## 8. 마케팅 및 출시 전략 + +### 8.1 타겟 오디언스 +``` +Primary Targets: +├── 한국 문화에 관심 있는 글로벌 게이머 +├── 힐링 게임을 선호하는 플레이어 +├── 인디 게임 애호가 +├── 교육 관계자 (한국어/문화 교육) +└── 가족 단위 플레이어 + +Secondary Targets: +├── 스트리머/유튜버 (콘텐츠 제작자) +├── 게임 연구자 및 비평가 +├── 문화계 인사들 +└── 심리 치료 관련 전문가 +``` + +### 8.2 마케팅 단계별 전략 + +#### Pre-Production (Month 1-6) +``` +Early Marketing: +├── 개발 블로그 시작 +├── 소셜 미디어 계정 개설 +├── 게임 컨셉 아트 공개 +├── 개발 과정 영상 제작 +└── 인디 게임 커뮤니티 참여 +``` + +#### Production (Month 7-18) +``` +Development Marketing: +├── 플레이어블 데모 공개 +├── 게임쇼 및 컨퍼런스 참가 +├── 인플루언서 협업 +├── 베타 테스트 프로그램 +└── 미디어 인터뷰 및 기사 +``` + +#### Pre-Launch (Month 19-22) +``` +Launch Preparation: +├── 트레일러 영상 제작 +├── 리뷰어 사전 체험 +├── 스팀 위시리스트 캠페인 +├── 한국 문화 홍보 이벤트 +└── 파트너십 및 협업 확대 +``` + +#### Post-Launch (Month 23-24) +``` +Post-Launch Support: +├── 사용자 커뮤니티 관리 +├── 업데이트 및 DLC 홍보 +├── 수상 및 인정 추진 +├── 교육 기관 파트너십 +└── 차기작 티저 +``` + +### 8.3 플랫폼 전략 +``` +Platform Rollout: +├── Phase 1: Steam (PC) 우선 출시 +├── Phase 2: itch.io, GOG 확장 +├── Phase 3: Epic Games Store +├── Phase 4: 콘솔 포팅 검토 +└── Phase 5: 모바일 버전 고려 +``` + +--- + +## 9. 성공 지표 및 KPI + +### 9.1 단기 목표 (출시 후 6개월) +``` +Short-term KPIs: +├── 판매량: 50,000 카피 이상 +├── 사용자 평점: Steam 90% 이상 긍정 +├── 완주율: 70% 이상 (시나리오 1 기준) +├── 재플레이율: 40% 이상 +└── 미디어 점수: 메타크리틱 80점 이상 +``` + +### 9.2 중기 목표 (출시 후 1년) +``` +Medium-term KPIs: +├── 판매량: 200,000 카피 이상 +├── 커뮤니티: 활성 플레이어 100,000명 +├── DLC 판매율: 기본 게임 구매자의 60% +├── 교육 기관 도입: 50개 이상 +└── 수상: 인디 게임 어워드 3개 이상 +``` + +### 9.3 장기 목표 (출시 후 2년) +``` +Long-term Goals: +├── 총 판매량: 500,000 카피 이상 +├── 글로벌 인지도: 주요 게임 미디어 인정 +├── 문화적 영향: 한국 문화 이해 증진 기여 +├── 후속작: 차기 프로젝트 착수 +└── 레거시: 장르 개척자로 인정 +``` + +--- + +## 10. 지속가능성 및 확장 계획 + +### 10.1 장기 컨텐츠 계획 +``` +Long-term Content Roadmap: +├── 계절별 특별 이벤트 +├── 새로운 시나리오 정기 추가 +├── 커뮤니티 제작 매듭 지원 +├── VR 버전 개발 검토 +└── 교육용 특별 에디션 +``` + +### 10.2 기술적 진화 +``` +Technical Evolution: +├── AI 기반 스토리 생성 +├── 클라우드 세이브 고도화 +├── 크로스 플랫폼 지원 +├── 실시간 매듭 공유 시스템 +└── 차세대 그래픽 엔진 도입 +``` + +### 10.3 문화적 확장 +``` +Cultural Expansion: +├── 다른 문화권 매듭 전통 추가 +├── 국제 문화 교류 프로그램 +├── 박물관 및 문화원 협업 +├── 학술 연구 지원 +└── 문화 보존 프로젝트 참여 +``` + +--- + +## 11. 리스크 관리 매트릭스 + +### 11.1 위험도 평가 +``` +Risk Assessment Matrix: +├── 높음/높음: 매듭 시스템 복잡성 +├── 높음/중간: 문화 고증 정확성 +├── 중간/높음: 감정적 몰입도 달성 +├── 중간/중간: 시장 수용성 +└── 낮음/높음: 기술적 안정성 +``` + +### 11.2 단계별 대응 계획 +``` +Risk Response Strategy: +├── 매월 리스크 리뷰 회의 +├── 조기 경고 시스템 구축 +├── 신속 대응팀 편성 +├── 백업 계획 상시 준비 +└── 이해관계자 소통 강화 +``` + +--- + +**이 개발 로드맵은 "살아있음의 기쁨"이라는 핵심 경험을 단계적으로 구현하면서도 기술적 안정성과 개발 효율성을 균형있게 추구하는 실용적인 계획입니다. 각 단계에서 핵심 경험 목표 달성도를 지속적으로 검증하며, 필요시 우선순위를 조정할 수 있는 유연성을 확보했습니다.** + +**특히 혁신적인 매듭 시스템과 생명의 동반자 시스템을 통해 플레이어에게 깊이 있고 의미있는 경험을 제공하면서, 한국 전통 문화의 아름다움을 전 세계에 알리는 문화적 가치도 함께 실현할 수 있도록 설계되었습니다.**