세 명의 merge 후 안정화가 완료된 시점에서, 다음 단계 개발 방향과 구체적인 구현 계획을 정리합니다.
현재 상태 요약 (v0.9)
완성도 높은 시스템
- NPC AI: 9명, 일과 스케줄, 날씨 반응, 호감도 5단계
- 날씨/시각: 6종 날씨, 파티클, 밤낮 전환, 별/반딧불이
- 퀘스트: 하드코딩 튜토리얼 + 동적 퀘스트 9종 (3티어)
- 카드: 8종 수집, 효과 적용, 드롭률 시스템
- 발견: 15개 숨겨진 장소, 시간/날씨 조건부
- 멀티플레이어: Firebase 위치 동기화, 실시간 접속자 표시
- LLM 대화: Gemini 모델 체인, SSE 스트리밍
핵심 문제점
| 문제 | 설명 |
|---|---|
| 기억 없음 | NPC가 이전 대화를 전혀 기억하지 못함 |
| 경제 없음 | 화폐/상점/교환 시스템 부재, 아이템이 퀘스트 토큰일 뿐 |
| 서사 없음 | 퀘스트가 독립적, 연결된 이야기가 없음 |
| 도전 없음 | 실패/긴장감이 없음, 리스크 제로 |
| 표현 없음 | 캐릭터 커스터마이징, 집 꾸미기 없음 |
| 소셜 없음 | NPC 간 관계가 없음, 멀티플레이어 상호작용 없음 |
비전: "AI가 만드는 살아있는 마을"
LLM을 단순 채팅 응답기에서 세계의 두뇌로 격상시킵니다.
- NPC가 플레이어를 기억하고, 관계가 깊어질수록 대화가 변합니다
- NPC끼리 관계를 맺고, 갈등하고, 화해합니다
- 마을에 사건이 생기고, 플레이어의 선택이 결과를 바꿉니다
- 매 플레이스루가 다른 이야기가 됩니다
다른 브라우저 게임과의 차별점: 스크립트된 대화가 아닌, AI가 생성하는 살아있는 관계와 서사.
Phase 1: NPC 기억 시스템 🧠
가장 적은 코드로 가장 큰 체감 변화
목표
NPC가 플레이어와의 과거를 기억하고, 대화에 자연스럽게 반영한다.
구현 항목
NPC별 memory 배열 추가
- 각 NPC에
memory: []필드 - 대화할 때마다 요약을 저장 (최근 10개 유지)
- 저장 형식:
{ tick, summary, sentiment, topic }
- 각 NPC에
LLM 호출 시 기억 컨텍스트 주입
- 시스템 프롬프트에
[과거 기억]섹션 추가 - 호감도 레벨에 따라 톤 지시 변경
- "낯선 사이" → 존댓말/경계, "소울메이트" → 반말/농담
- 시스템 프롬프트에
대화 요약 자동 생성
- LLM 응답 후, 별도 호출로 1줄 요약 생성 (flash 모델)
- 또는 응답에 요약을 포함하도록 프롬프트 설계
기억 기반 자발적 언급
- NPC가 먼저 과거를 언급하는 ambient 대화
- "저번에 커피 좋아한다고 했지? 카페에 새 메뉴 나왔대"
- 호감도 2 이상일 때 활성화
저장/불러오기에 memory 포함
- save/load에 NPC memory 배열 직렬화
- memory가 너무 길면 오래된 것부터 제거
API 비용 최적화
- 기억 요약: gemini-2.0-flash (저렴, 빠름)
- 기억 참조 대화: 기존 모델 체인 유지
- 토큰 절약: 기억 10개 × ~30토큰 = ~300토큰 추가
Phase 2: 의미있는 대화 반응 💬
플레이어의 말이 게임에 실제로 영향을 준다
목표
NPC가 플레이어의 말 내용에 따라 감정/관계가 실질적으로 변한다.
구현 항목
LLM 응답에 감정 메타데이터 포함
- 응답 JSON에
mood_change,relation_delta필드 추가 - 위로 → +관계, 무례 → -관계, 재미 → +무드
- 서버 프록시에서 파싱 후 전달
- 응답 JSON에
NPC 감정 상태 시각화
- 기존 mood(neutral/happy/sad) 확장 → 감동/화남/불안 등
- 말풍선 색상이나 이모지로 현재 감정 표시
특별 대화 트리거
- 특정 주제(고민, 비밀, 꿈) 언급 시 숨겨진 반응
- 호감도 3+ NPC에게 깊은 이야기를 꺼내면 특별 퀘스트 발동
- "나 요즘 힘들어" → 위로 퀘스트 체인 시작
대화 톤 학습
- 플레이어가 주로 반말/존댓말 쓰는지 추적
- NPC가 그에 맞춰 대화 스타일 조정
Phase 3: NPC 소셜 그래프 🕸️
NPC끼리 관계를 맺고, 드라마가 발생한다
목표
NPC 사이에 감정/관계가 존재하고, 그로 인한 이벤트가 자동 발생한다.
구현 항목
NPC-NPC 관계 매트릭스
npcRelations[npcA][npcB] = { type, value }- 관계 유형: 친구, 라이벌, 짝사랑, 무관심
- 초기값: 성격 기반 자동 설정
소셜 이벤트 생성기
- 5~10분 주기로 LLM에 월드 상태 전달
- "현재 NPC 관계 상황을 보고, 발생할 수 있는 사건 1개 생성"
- 예시: "김민수가 최민영에게 고백했다가 거절당함"
가십 시스템
- NPC와 대화하면 다른 NPC에 대한 소문을 들음
- "허승준이 요즘 공원에서 혼자 시간을 많이 보내더라..."
- 플레이어가 전달/비밀유지 선택 가능
중재 퀘스트
- NPC 갈등 발생 시 플레이어가 중재할 수 있는 퀘스트
- 결과에 따라 NPC-NPC 관계 변화
- 양쪽 모두의 호감도에 영향
Phase 4: 동적 스토리 아크 📖
며칠에 걸친 이야기가 AI로 생성된다
목표
단발성 퀘스트가 아닌, 여러 단계로 이어지는 서사가 자동 생성된다.
구현 항목
스토리 아크 생성기
- LLM이 현재 월드 상태(관계, 날씨, 계절, 이벤트 이력)를 보고 3~5단계 스토리 생성
- 템플릿 예시: 마을 축제, 실종 사건, NPC의 꿈 실현, 갈등 해소
분기 시스템
- 각 단계에서 플레이어 선택지 2~3개
- 선택에 따라 다음 단계가 달라짐
- LLM이 선택 결과를 반영한 후속 스토리 생성
스토리 아카이브
- 완료된 스토리를 기록/열람
- "마을 이야기" 탭 추가
Phase 5: 경제 & 생활 시뮬 🏪
자원 순환과 코지 요소
구현 항목
화폐 시스템 (골드/코인)
- 퀘스트 보상, 아이템 판매로 획득
- NPC 상점에서 소비
NPC 상점
- 카페: 음료 (버프 아이템)
- 시장: 재료, 선물용 아이템
- 호감도에 따라 할인/특별 품목
집 시스템
- 플레이어 전용 공간
- 가구/장식 배치
- NPC 초대 가능
계절/축제 이벤트
- 봄: 벚꽃, 여름: 불꽃놀이, 가을: 수확, 겨울: 크리스마스
- 계절 한정 아이템/퀘스트
Phase 6: 탐험 & 도전 확장 ⚔️
구현 항목
맵 확장
- 숲/동굴/해변 등 새 영역
- 스토리 진행으로 해금
미니게임
- 낚시, 요리, 보물찾기
- NPC와 대결 가능
도전 퀘스트
- 시간 제한, 조건부 성공, 랭킹
- 실패 시 관계도 하락 등 리스크
멀티플레이어 확장
- 채팅, 이모트
- 협동 퀘스트, 교환
구현 우선순위 & 예상 일정
| 순서 | Phase | 핵심 가치 | 상태 |
|---|---|---|---|
| 1 | NPC 기억 시스템 | 가장 큰 체감 변화 | 🔲 시작 전 |
| 2 | 의미있는 대화 | 대화에 의미 부여 | 🔲 시작 전 |
| 3 | NPC 소셜 그래프 | 살아있는 마을 | 🔲 시작 전 |
| 4 | 동적 스토리 아크 | 몰입감 극대화 | 🔲 시작 전 |
| 5 | 경제 & 생활 시뮬 | 장기 플레이 동기 | 🔲 시작 전 |
| 6 | 탐험 & 도전 확장 | 콘텐츠 다양성 | 🔲 시작 전 |
API 비용 전략
| 용도 | 모델 | 호출 빈도 | 토큰/회 |
|---|---|---|---|
| 일반 대화 | gemini-2.0-flash | 플레이어 발화 시 | ~500 |
| 기억 요약 | gemini-2.0-flash | 대화 종료 시 | ~100 |
| 소셜 이벤트 | gemini-2.0-flash | 5~10분 | ~800 |
| 스토리 아크 | gemini-2.5-pro | 아크 시작 시 | ~2000 |
| 감정 분석 | gemini-2.0-flash | 대화 시 (응답에 포함) | +50 |
기존 대비 추가 비용: 주로 기억 요약(대화당 +100토큰)과 소셜 이벤트(5~10분당 1회). 대부분 flash 모델 사용으로 비용 최소화.
변경 이력
| 날짜 | 내용 |
|---|---|
| 2026-02-18 | 초안 작성, Phase 1~6 정의 |