"하나의 통일 제국에서 분열된 것이 아님 — 각자의 기원" · "대전쟁(수백 년 전): 대륙 규모의 전면전 … 이 전쟁 이후 냉전 체제 + 성지 공동관리 조약 성립" · "비밀 결사의 결성: 비교적 최근(수백 년 전)"
— yggdrasil/docs/story/world/history.md
본편 캐논에 '제국'은 존재하지 않고, 대전쟁은 상세 미구체화 상태다. 그래서 이 게임의 설계 결론은 하나로 모인다 — 제국은 있었고, 사라졌다. Fateweaver가 그 공백을 채우는 외전 정사(正史)가 된다.
오르드란 제국 (Ordran) 시안 ★추천
변경(邊境)을 통합하며 일어선 신흥 패권국. 국교(國敎)에 가까운 교리는 단 한 줄 — "세계수는 관리되어야 한다." 성지의 단독 관리권을 선언하면서 대전쟁의 도화선이 된다.
종전과 함께 해체 → 본편 시대에 제국이 없는 이유, 성지 공동관리 조약의 기원이 설명됨
해체된 영토는 여러 소국으로 흩어짐 → 본편에 언급만 있는 '소국들'의 기원
떡밥: 제국의 교리가 훗날 비밀 결사(The Circle)의 사상적 원류일 가능성 — 캐논상 결사 결성 시기와 대전쟁기가 겹친다. 본편 미스터리에 그대로 접속되는 훅
대안 명칭: 발드렌(Valdren) / 카에드라스(Kaedras)
베리스 (Veris) 시안 ★추천
제국 변경의 자유도시 연합이 독립을 선언하며 태어난 신생국. 상비군이 거의 없는 대신 대륙 최고의 정보망을 가졌다. "베리스에는 칼이 없다. 대신 모든 칼이 어디 있는지 안다."
생존 전략 = 정보. 첩보원이 곧 국방이라는 설정이 챕터 1의 직업적 명분
떡밥: 본편 소국 외교의 '자주권 기반 중립' 독트린이 베리스에서 기원했다는 연결 가능
대안 명칭: 일렌(Ilen) / 노르베일(Norveil)
무대 지명 시안
바스티움 (Bastium) — 제국 수도. 세 겹의 성벽. 데모의 목적지는 가장 바깥 외성문 안쪽이다.
하벤로 (Havenro) — 수도 직전의 관문 도시. 잠입을 준비하는 허브 무대. 술집·세관·빈민가·역참이 있다.
시대 디테일 가드
화약 이전 시대. 캐논상 화약은 본편 시점의 '극히 최근' 발명 — 대전쟁기엔 존재하지 않는다. 총·폭약 소재 금지. 등불, 인장, 위조 서류, 마법 인증 같은 르네상스+마법 디테일로 채운다.
기존 6국 언급 최소화. 대전쟁기의 국제 정세는 본편에서 미정이라, 여기서 디테일을 박으면 본편의 발목을 잡는다. 제국 vs 독립국의 좁은 구도만 쓴다.
§ 05
주인공 시안
옴니버스 1챕터의 얼굴. 셋을 뽑았고, 추천은 A야 — 설명 비용이 가장 적고, "마법보다 기지"라는 정체성이 주관식 시스템과 정확히 포개져.
A · 카야 렌 (Kaya Ren) ★추천
인간 여성, 20대 후반. 베리스 정보국 요원, 코드네임 '바늘'. 학습 마법은 하급 보조 둘뿐 — 인장 위조와 감각 강화. 화려한 능력 대신 관찰과 임기응변으로 일하는 타입. 플레이어가 주관식으로 '좋은 수'를 쓰는 행위가 곧 카야의 캐릭터성이 된다. 본편 주인공(에제키엘·근위대 마검사)과 정확히 대척에 있는 실루엣.
B · 사일라스 번 (Silas Vern)
실바리 남성, 마나 감응자. 세계수의 이상 징후를 '느끼는' 체질이라 본편 떡밥 안테나로 좋다. 다만 종족·감응 설정을 데모 분량 안에서 설명해야 하는 부담이 있다.
C · 마렌 도르 (Maren Dor)
인간, 40대. 전직 제국 세관원 출신의 망명자. 회유 루트의 상대(경비병)와 옛 인연이 있다는 개인사를 쓸 수 있다. 노련하고 냉소적인 톤 — 다만 옴니버스 1번 타자로는 무게가 좀 가라앉는다.
§ 06
시나리오 · 루트 설계
시놉시스
대전쟁 전야. 오르드란 제국이 성지의 단독 관리를 선언하고, 대륙은 개전의 초읽기에 들어간다. 베리스 정보국은 수도 바스티움 깊숙이 심어둔 잠복 요원 — 코드네임 '직조공(Weaver)' — 과의 접선이 끊긴 것을 확인하고, 요원 '바늘'을 보낸다. 임무는 단 한 줄. 어떻게든, 성벽 안으로.
'직조공'은 제목 Fateweaver에 직결되는 떡밥이다. 챕터 1은 그 정체를 보여주지 않는다 — 성문을 통과하는 순간 끝나고, "당신이 만나러 가는 자는 누구인가"라는 질문만 남긴다. 내레이터의 점층 공개(§07)와 겹치면, 플레이어는 엔딩에서 서늘한 가설 하나를 갖게 된다.
구조
프롤로그 — 국경을 넘다 (튜토리얼)
│
관문 도시 하벤로 [허브]
│ 정보 · 자금 · 장비 준비
├─ A 회유 — 경비병의 아들 ★메인
├─ B 매수 — 세관장의 값
├─ C 물길 — 오래된 하수구
└─ D 화물 — 마차 속의 밀항
│
외성문 — 바스티움 진입
└─ 엔딩 ×7 (성공 4변주 · 실패 3)
루트 A · 회유 — 경비병의 아들 메인 · 풀 디테일
술집과 역참에서 외성문 경비 조장 브란트의 정보를 수집한다 — 술버릇, 교대 시간, 그리고 입을 닫는 화제 하나.
핵심 발견: 브란트의 아들은 변경 전선에서 죽었고, 제국은 패전을 감추려 전사자 명단을 통제하고 있다. 그는 아들이 살아 있다고 믿는 중이다.
명단 사본 입수(빈민가 필경사 / 세관 기록고 잠입 중 택1) → 새벽 교대 때 대면. 진실을 건네는 방식이 분기 — 위로인가, 거래인가.
성공: 브란트가 쪽문을 연다. 변수: 흔들린 그가 동요하면 의심도가 오른다. GM 개입 후보 — 브란트의 감정 반응은 내레이터가 직조한다.
루트 B · 매수 — 세관장의 값
세관장은 뇌물을 받는다. 문제는 액수 — 거액의 크라운이 필요하다.
자금 마련 비트: 역참 도박, 장물 중개, 정보 되팔기 중 조합. 의심도와 트레이드오프.
흥정 분기 + 배신 리스크: 돈만 받고 신고할 수 있다. 보험(약점 정보)을 쥐고 있는가가 갈림길.
루트 C · 물길 — 오래된 하수구
대전쟁 이전부터 있던 구(舊)수로. 지도는 옛 밀수꾼만 안다 — 빈민가에서 신뢰를 사야 한다.
준비물(등불, 밧줄)과 체크포인트: 붕괴 구간, 순찰 격자, 그리고 어둠 속에서 들리는 것.
준비 부족은 사망 엔딩으로 직결되는 유일한 루트 — 고위험 고효율.
루트 D · 화물 — 마차 속의 밀항
수도행 보급 마차의 검사 일정을 파악하고, 상인을 구슬리거나 몰래 짐칸에 숨는다.
하이라이트: 검문 이벤트 — 숨을 죽이는 정적 연출. GM 개입의 명소(검문병의 변덕을 내레이터가 쥔다).
루트 교차 1~2개만: 술집 정보가 B·D의 힌트를 겸하고, C의 수로 지도가 D의 검문 회피에 쓰인다. 데모 규모에선 이 이상 엮지 않는다.
엔딩 매트릭스
성공 A
쪽문 — 사람을 통해 들어간 자. 브란트의 마지막 한마디가 에필로그.
성공 B
정문 — 금화 위를 걸어 들어간 자. 세관장의 장부에 이름 없는 줄 하나.
성공 C
물길 — 도시의 내장을 지나 올라온 자. 첫 숨의 묘사.
성공 D
화물 — 짐짝의 운명으로 실려 온 자. 상자 틈의 첫 빛.
실패 1
체포 — 의심도 100. 심문실 컷에서 끊긴다.
실패 2
죽음 — 수로 붕괴, 추락 등 루트 사고.
실패 3
송환 — 매수 배신·신원 발각. 국경으로 되돌려진다.
실패 엔딩의 마지막 줄은 전부 내레이터의 것이다 — "…이 매듭은 여기서 끊긴다. 다른 실을 찾아야겠다." 실패조차 점층 공개(§07)의 재료가 된다.
스탯 · 인벤토리 — 최소주의
크라운 — 자금. 매수·장비·정보의 값.
의심도 0~100% — 검문 실수, 어설픈 거짓말, 과한 질문이 올린다. 100 = 체포. 서울 2033의 스탯 압박을 잇는 긴장 장치.
운명 자원(§07) — 주관식의 연료.
인벤토리: 위조 통행증, 등불, 밧줄, 전사자 명단 사본, 수로 지도… 전부 스크립트 관리. 플래그와 함께 루트 조건을 구성.
분량 추정
노드 약 45~50개 (허브 8~10 · 루트A 10~12 · 루트B/C/D 각 5~6 · 프롤로그 4~5 · 엔딩 7) · 본문 약 2만 자 내외 · 1회차 10~15분, 전 루트 수집 30~40분.
§ 07
AI 게임 마스터 — 핵심 설계
표면 페르소나
건조한 중립 내레이터. 짧은 문장, 절제된 감정, 평가하지 않는 시선 — 서울 2033의 그 목소리다. 정체는 끝까지 명시하지 않는다. 다만 권한이 점점 드러나며 "이 내레이터는 무엇인가"라는 질문 자체가 챕터의 메타 아크가 된다.
점층 공개 아크 해석 확인 Q1
STAGE 0 · 도입~중반
묘사 변형만. 같은 장면도 플레이어의 행보에 따라 결이 달라진다 — 플레이어는 "분위기 연출이 좋네" 정도로 오인한다.
STAGE 1 · 중반
사소한 상태 개입. 인벤토리에 기억에 없는 실 한 가닥, 미묘하게 어긋난 교대 시간. 로그에는 남지만 내레이션은 모른 척한다.
STAGE 2 · 후반
명시 개입. 실패로 향하던 장면이 눈앞에서 풀렸다 다시 짜인다(재직조 연출). 내레이터의 문장에 처음으로 1인칭의 흔적이 비친다.
판정 원칙: ① 세계관·장면 정합성 ② 보유 아이템·획득 정보를 활용한 수에 가점 ③ 영리하지만 위험한 수는 '부분 성공'으로 긴장 유지 ④ 황당한 입력은 건조한 냉소로 받아친다 — 이 받아침 자체가 시연 웃음 포인트.
소모 규칙: 시도 −2. 단 '불가' 판정은 −1만(절반 환불) — 실험을 벌주지 않는다.
장면 재구성 06-13 확정·구현: 판정 후 GM이 갈림길을 다시 짠다 — ① patch: 기존 선택지에 boost(보상 부여)·block(차단+사유, 실패가 좋은 전개를 닫는다)·rewrite(문구 재작성) ② subscene: 새 전개·새 묘사·새 선택지 생성(연결은 기존 씬으로만) ③ none. 판정과 재구성은 2단 호출 분리(안정성), 씬마다 GM 큐(서사 기능·금지선·선택지 톤 노트)와 행선지 미리보기를 자동 제공.
운명 자원 — 명칭 후보 선택 Q2
실마리 ★추천
'운명의 실 끝'과 '사건의 단서'의 중의어 — 첩보 게임과 직조 메타포에 동시에 걸린다. 정보를 캐면 실마리가 모이고, 실마리를 풀어 운명을 다시 짠다는 동선이 한국어로 완전히 자연스럽다. 주관식 버튼명은 「다시 짜기 (Reweave)」 제안.
개변(改變) — '운명 개변 포인트'. 게임 용어로 직관적, 대신 무난한 만큼 향이 옅다.
명사(命絲) — 운명의 실. 한자의 무게감이 좋지만 품사 '명사'와 동음이라 UI에서 헷갈릴 수 있다.
씨실(緯絲) — 날실(정해진 운명) 위에 플레이어가 끼워 넣는 한 가닥. 가장 시적, 가장 설명이 필요.
경제 시안: 시작 1개 · 영리한 선택, 숨은 정보 발견, 위기 모면으로 +1씩 (회차당 5~7개 순환) · 주관식 1회 −2. 수치는 데모 밸런싱에서 조정.
운명 뒤틀림 게이지 확정 · 06-12 추가
재직조가 일어나는 시점을 플레이어가 예측할 수 있게 하는 가시 장치. 스탯 바 둘째 줄에 5칸 게이지(▰▱)와 상태어(고요함→떨림→팽팽함→뒤틀림→풀림 직전)로 표시된다.
차오름: 모든 선택 +3 (조용히, 게이지 움직임으로만) · 큰 사건 +10~20 (기록고 잠입, 진실 전달, 금단의 지도…) · 주관식 선언 +12
내림: 휴식 −8 · 선행 −10 · 침묵·순리의 선택 −5~8
발동: 60 이상으로 '훅' 장면 진입 → 내레이터 개입 평가 → 재직조 → −50 배출. 60↑부터 게이지가 맥동하며 “운명이 가깝다” 경고
보장: 각 루트 클라이맥스 4곳(쪽문 새벽·정문 거래·수로의 어둠·검문 정적)은 게이지와 무관하게 반드시 발동
안전장치 · 비용
폴백: 타임아웃 4초 / JSON 스키마 불일치 → 재시도 1회 → 실패 시 스크립트 원문으로 조용히 진행(개입 없음 취급). 시연이 LLM 때문에 멈추는 일은 구조적으로 없다.
모델: gemini-3.1-flash-lite (GA 확인, $0.25/M in · $1.50/M out). 1회차 ≈ 15~20회 호출 ≈ 수 원 단위. 팀 전원이 플레이해도 백 원대.
지연 연출: 응답 대기 0.5~2초를 "…실이 팽팽해진다" 류의 정적 연출로 전환 — 기술 한계를 미학으로.
§ 08
UI · 연출 원칙
흑백 엄수. 검정·백지·회색 계조만. 강조는 색이 아니라 반전(배경↔글자)으로.
타이포 위계. 내레이션 = 명조(Noto Serif KR), 시스템·스탯·GM 흔적 = 모노스페이스. 두 목소리를 서체로 분리한다.
모바일 우선. 1열, 한 손 조작, 선택지는 엄지 높이. 360px에서 먼저 완성하고 데스크톱으로 넓힌다.
재직조 연출. §02 목업의 그 효과 — 문장이 실 무늬(─ ╌ ┄)로 풀렸다 다른 문장으로 짜인다. 개입의 시각 언어이자 이 게임의 시그니처.
침묵의 사용. 개입 직전 0.8초의 공백, 검문 장면의 줄간 여백 — 텍스트 게임의 긴장은 타이밍에서 나온다.
§ 09
기술 아키텍처
프론트
Vite + React 19 + TypeScript strict. 외부 UI 라이브러리 없음 — 상태는 useReducer, 스타일은 커스텀 CSS
씬 엔진
JSON 씬 그래프 + 조건/효과 해석기. 시나리오는 코드와 분리된 데이터
백엔드
Cloudflare Workers 1개 — GM 프록시. Gemini 키는 Workers secret, 시스템 프롬프트도 서버 측. 클라이언트에 노출 zero
API
POST /gm/intervene (개입 평가·생성) · POST /gm/freeform (주관식 판정). 둘 다 JSON 스키마 강제 출력
보안
CORS를 게임 도메인으로 제한 + IP당 간단 레이트리밋. 데모 수준으로 충분
세이브
localStorage 자동 저장 1슬롯 + 처음부터. 회차 기록(도달 엔딩)도 로컬
배포
CF Pages 신규 프로젝트 fateweaver + Worker fateweaver-gm
코드
Projects/fateweaver · 네 GitHub 프라이빗 레포. 팀 공유 시 저장소 이관