← ClaudeAtlas

narrativelisted

스토리·대사·퀘스트 — 대사를 Yarn Spinner 텍스트로 두어 git·리뷰·테스트 대상으로 만든다. 분기 설계와 현지화 대비. 트리거 "스토리", "대사", "퀘스트", "내러티브".
snwlee/Nereus · ★ 2 · AI & Automation · score 73
Install: claude install-skill snwlee/Nereus
# narrative nereus:common 규칙을 따른다. 담당 에이전트: narrative-writer. **엔진과 무관하다** — Yarn Spinner 는 엔진 불가지론이고 런타임이 따로 있다. ## 1. 대사는 텍스트 파일이다 대사를 코드나 에디터 데이터에 묻으면 diff 가 안 되고 리뷰도 테스트도 안 된다. `.yarn` 파일로 두면 **평범한 코드처럼** 다룰 수 있다 — 이게 이 스킬의 유일한 전제다. ```yarn title: Intro --- 상인: 처음 보는 얼굴이군. -> 물건을 보여줘 <<jump Shop>> -> 아무것도 아니야 <<jump Leave>> === ``` - 노드 하나 = 한 장면. 노드가 100줄을 넘으면 쪼갠다. - 파일은 챕터·지역 단위로 나눈다. 한 파일에 전부 넣지 않는다. ## 2. 분기 설계 분기는 **되돌아오는 곳을 먼저 정하고** 만든다. 합류점 없는 분기는 분기 수만큼 콘텐츠를 곱한다. | 분기 종류 | 쓸 때 | 비용 | |---|---|---| | 즉시 합류 | 말투·톤 선택 | 낮음. 자주 써도 된다 | | 지연 합류 | 한 장면 뒤 다시 만남 | 중간. 상태 플래그 하나 | | 진짜 분기 | 엔딩·진영 | 높음. 개수를 먼저 정하고 늘리지 않는다 | 플래그를 남발하면 조합 폭발이 난다. 플래그 하나를 추가할 때마다 **검증할 경우의 수가 두 배**가 된다는 것을 전제로 센다. ## 3. 게임 상태와의 결합을 최소화한다 대사가 게임 상태를 직접 바꾸면 대사 수정이 게임 로직 수정이 된다. 대사는 **신호만 내보내고**, 상태 변경은 게임 쪽이 받아서 한다. - 좋음: 대사가 `퀘스트_수락` 이벤트를 낸다 → 게임이 받아 처리 - 나쁨: 대사 안에서 인벤토리를 직접 조작 ## 4. 현지화 대비 - 문자열을 코드에 박지 않는다. 처음부터 `.yarn` 과 문자열 테이블에 둔다. - 문장을 조각으로 이어 붙이지 않는다("당신은 " + N + "개를 얻었다"). 어순이 다른 언어에서 깨진다. 자리표시자를 가진 온전한 문장 하나로 둔다. - 길이 여유를 UI 에 미리 둔다. 같은 문장이 언어에 따라 1.5배까지 길어진다. ## 5. 검증 - 모든 노드에 도달 가능한가. 고아 노드는 쓴 사람만 모른다 - 모든 분기가 합류하거나 명시적 종료에 닿는가 - 참조하는 플래그·변수가 실제로 정의돼 있는가 - 화자 이름이 일관된가 이 넷은 기계로 검사할 수 있다. `.yarn` 이 텍스트이기 때문에 가능한 것이다. ## 하지 말 것 - 대사를 엔진 에디터 안에만 두지 않는다. - 합류점 없는 분기를 늘리지 않는다. - 문장을 조각내어 이어 붙이지 않는다.