M0 Text GameEngine 구현계획서 V0.1
1. 목적
M0의 목적은 MMX가 앱, 음성, 로비, 방 운영 이전에 “시나리오가 게임으로 실행되는가”를 가장 작은 단위로 증명하는 것이다.
이번 단계에서는 text 기반으로 시나리오를 작성하고, 같은 text 기반 플레이어에서 처음부터 끝까지 완주한다. 화면 완성도, 음성, 로비, 방 입장/퇴장, Agora, 실시간 채팅은 DexPM 수다방 Task 범위로 둔다.
2. 핵심 명제
scenario.txt → parse → validate → runtime scenario → text play → ending reached
3. 범위
| 포함 | text scenario 최소 작성 규칙, “마지막 통화” 변환, parser, validation report, runtime JSON, text player, 단서/선택/범인 선택/엔딩, 플레이 로그. |
|---|---|
| 제외 | 음성 채팅, 로비, 방 생성, 입장/퇴장, Agora, active speaker, 실시간 텍스트 채팅, Flutter production UI, Studio 고급 편집기, 멀티플레이 동기화. |
4. 기준 시나리오
M0의 사용자 경험 기준 시나리오는 docs/MMX_FUE_and_Scenario_v0_1/MMX_TEST_SCENARIO_LAST_CALL_v0_1.md의 “마지막 통화”로 한다.
기존 www/public/studioPOC/scenarioFiles/1.txt는 매크로 parser 기술 fixture로 유지한다. 즉, “마지막 통화”는 FUE와 text play 검증용이고, scenarioFiles/1.txt는 macro grammar와 Reader 검증용이다.
5. 산출물
scenario.txt: M0 text scenario source.scenario.json: parser가 만든 runtime scenario.validation_report: 누락, unreachable branch, unsupported command 기록.- text player 실행 결과: 엔딩 도달 로그.
- implementation result report: 성공/실패와 후속 판단.
6. 최소 문법 방향
M0 text format은 작가가 읽고 고칠 수 있어야 한다. 과한 DSL을 만들지 않는다.
초기 문법은 title, intro, character, scene, clue, choice, accusation, ending_success, ending_failure 정도만 허용한다.
조건과 분기는 v0.1에서 범인 선택과 성공/실패 엔딩으로 제한한다. 복잡한 조건, 반복 조사, 동시 플레이, secret handout은 M1 이후로 보낸다.
7. 구현 순서
- “마지막 통화”를 M0 text format으로 변환한다.
- parser가 scene, character, clue, choice, ending을 구조화한다.
- validator가 title, character, clue, accusation, ending, scene 참조를 검사한다.
- text player가 CLI 또는 간단한 terminal UI에서 플레이를 진행한다.
- 플레이어가 범인을 선택하고 엔딩에 도달한다.
- 결과를 문서 댓글 또는 결과보고서에 남긴다.
8. 성공 기준
- text source만 보고 시나리오 의도를 이해할 수 있다.
- parser가 runtime JSON을 생성한다.
- validator가 오류를 숨기지 않고 보고한다.
- text player가 “마지막 통화”를 엔딩까지 진행한다.
- 정답 선택과 오답 선택이 다른 결과로 이어진다.
- 구현 결과가 App M0/M1 통합 계획에 재사용 가능하다.
9. M1과의 관계
M1은 폐기하지 않는다. M0는 M1 앞에 놓이는 엔진 증명 단계다.
M0가 끝나면 CODEX PM의 text scenario GameEngine과 DexPM의 수다방/로비/방/음성 계획을 합쳐 App 구현계획서를 새로 만든다. 구조는 “게임 엔진이 먼저 있고, 수다방/방/음성은 그 위의 플레이 환경”을 따른다.
10. PM 원칙
- 구현은 작게, 판정은 엄격하게 한다.
- 동작하지 않는 것을 동작한다고 쓰지 않는다.
- 시각적 완성보다 플레이 가능한 시나리오 엔진을 우선한다.
- M0에서 막힌 기술 이슈는 숨기지 않고 issue 또는 결과보고서에 남긴다.