slow.monster

STUDIO HAZE · kakao

Topaz source

Open by house policy. Topaz is our own language.

Topaz 5.6.1 · 4 files

games/domain-war/data/scenes.tpz

Topaz · 17030 B · Original file

1// 도메인 전쟁 장면 그래프 데이터. data/gameContent JSON의 모든 장면과 선택지를 Topaz 레코드로 포팅한다.
2// Domain War scene graph data. Every scene and choice edge from data/gameContent is ported as typed Topaz records.
3//
4// 하우스룰(data): 순수 불변 데이터만 둔다. 플레이어에게 보이는 문장은 절대 담지 않고 i18n 키만 담는다.
5// House rule (data): immutable pure data only. Player-visible copy never lives here; only i18n keys do.
6//
7// 패리티 표식(parity marker): 선택지의 원래다음(oldNext)은 JSON의 choices[].next 값 그대로다.
8// The parity marker oldNext is copied byte-for-byte from JSON choices[].next.
9//
10// Key identifiers: 장면아이디=SceneId, 텍스트키=TextKey, 선택지=Choice, 장면=Scene, 장면찾기=findScene.
12export type 장면아이디 = "ch1_scene0" | "ch1_scene1" | "ch1_scene2" | "ch1_scene3" | "ch1_scene4" | "ch1_scene5" | "ch2_scene0" | "ch2_scene1" | "ch2_scene2" | "ch2_scene3" | "ch2_scene4" | "ch2_scene5" | "ch2_scene6" | "ch3_scene0" | "ch3_scene1" | "ch3_scene2" | "ch3_scene3" | "ch3_scene4" | "ch4_scene0" | "ch4_scene1" | "ch4_scene2" | "ch4_scene3" | "ch4_scene4" | "ch5_scene0" | "ch5_scene1" | "ch5_scene2" | "ch5_scene3" | "ch5_scene4" | "ch5_scene5" | "ch6_scene0" | "ch6_scene1" | "ch6_scene2" | "ch6_scene3" | "ch6_scene4" | "ch6_scene5" | "ch7_scene0" | "ch7_scene1" | "ch7_scene2" | "ch7_scene3" | "ch7_scene4" | "ch8_scene0" | "ch8_scene1" | "ch8_scene2" | "ch8_scene3" | "ch8_scene4" | "ch9_scene0" | "ch9_scene1" | "ch9_scene2"
14export type 텍스트키 = "domainCh1_scene0_text" | "domainCh1_scene0_choice0_text" | "domainCh1_scene0_choice1_text" | "domainCh1_scene1_text" | "domainCh1_scene1_choice0_text" | "domainCh1_scene1_choice1_text" | "domainCh1_scene2_text" | "domainCh1_scene2_choice0_text" | "domainCh1_scene2_choice1_text" | "domainCh1_scene3_text" | "domainCh1_scene3_choice0_text" | "domainCh1_scene4_text" | "domainCh1_scene4_choice0_text" | "domainCh1_scene5_text" | "domainCh1_scene5_choice0_text" | "domainCh2_scene0_text" | "domainCh2_scene0_choice0_text" | "domainCh2_scene0_choice1_text" | "domainCh2_scene1_text" | "domainCh2_scene1_choice0_text" | "domainCh2_scene1_choice1_text" | "domainCh2_scene2_text" | "domainCh2_scene2_choice0_text" | "domainCh2_scene2_choice1_text" | "domainCh2_scene3_text" | "domainCh2_scene3_choice0_text" | "domainCh2_scene4_text" | "domainCh2_scene4_choice0_text" | "domainCh2_scene5_text" | "domainCh2_scene5_choice0_text" | "domainCh2_scene6_text" | "domainCh2_scene6_choice0_text" | "domainCh3_scene0_text" | "domainCh3_scene0_choice0_text" | "domainCh3_scene0_choice1_text" | "domainCh3_scene0_choice2_text" | "domainCh3_scene1_text" | "domainCh3_scene1_choice0_text" | "domainCh3_scene1_choice1_text" | "domainCh3_scene2_text" | "domainCh3_scene2_choice0_text" | "domainCh3_scene2_choice1_text" | "domainCh3_scene3_text" | "domainCh3_scene3_choice0_text" | "domainCh3_scene4_text" | "domainCh3_scene4_choice0_text" | "domainCh4_scene0_text" | "domainCh4_scene0_choice0_text" | "domainCh4_scene0_choice1_text" | "domainCh4_scene1_text" | "domainCh4_scene1_choice0_text" | "domainCh4_scene1_choice1_text" | "domainCh4_scene2_text" | "domainCh4_scene2_choice0_text" | "domainCh4_scene2_choice1_text" | "domainCh4_scene3_text" | "domainCh4_scene3_choice0_text" | "domainCh4_scene4_text" | "domainCh4_scene4_choice0_text" | "domainCh5_scene0_text" | "domainCh5_scene0_choice0_text" | "domainCh5_scene0_choice1_text" | "domainCh5_scene0_choice2_text" | "domainCh5_scene1_text" | "domainCh5_scene1_choice0_text" | "domainCh5_scene2_text" | "domainCh5_scene2_choice0_text" | "domainCh5_scene3_text" | "domainCh5_scene3_choice0_text" | "domainCh5_scene4_text" | "domainCh5_scene4_choice0_text" | "domainCh5_scene5_text" | "domainCh5_scene5_choice0_text" | "domainCh6_scene0_text" | "domainCh6_scene0_choice0_text" | "domainCh6_scene0_choice1_text" | "domainCh6_scene0_choice2_text" | "domainCh6_scene1_text" | "domainCh6_scene1_choice0_text" | "domainCh6_scene2_text" | "domainCh6_scene2_choice0_text" | "domainCh6_scene3_text" | "domainCh6_scene3_choice0_text" | "domainCh6_scene4_text" | "domainCh6_scene4_choice0_text" | "domainCh6_scene5_text" | "domainCh6_scene5_choice0_text" | "domainCh7_scene0_text" | "domainCh7_scene0_choice0_text" | "domainCh7_scene0_choice1_text" | "domainCh7_scene0_choice2_text" | "domainCh7_scene1_text" | "domainCh7_scene1_choice0_text" | "domainCh7_scene2_text" | "domainCh7_scene2_choice0_text" | "domainCh7_scene3_text" | "domainCh7_scene3_choice0_text" | "domainCh7_scene4_text" | "domainCh7_scene4_choice0_text" | "domainCh8_scene0_text" | "domainCh8_scene0_choice0_text" | "domainCh8_scene0_choice1_text" | "domainCh8_scene0_choice2_text" | "domainCh8_scene1_text" | "domainCh8_scene1_choice0_text" | "domainCh8_scene2_text" | "domainCh8_scene2_choice0_text" | "domainCh8_scene3_text" | "domainCh8_scene3_choice0_text" | "domainCh8_scene4_text" | "domainCh8_scene4_choice0_text" | "domainCh9_scene0_text" | "domainCh9_scene0_choice0_text" | "domainCh9_scene1_text" | "domainCh9_scene1_choice0_text" | "domainCh9_scene2_text" | "domainCh9_scene2_choice0_text"
16export type 선택지 = {
17 텍스트키: 텍스트키,
18 다음: 장면아이디,
19 원래다음: int
22export type 장면 = {
23 아이디: 장면아이디,
24 텍스트키: 텍스트키,
25 선택지들: Array<선택지>
28function 선택(텍스트: 텍스트키, 다음: 장면아이디, 원래다음: int) -> 선택지 {
29 { 텍스트키: 텍스트, 다음: 다음, 원래다음: 원래다음 }
32function 장면만들기(아이디: 장면아이디, 텍스트: 텍스트키, 선택지들: Array<선택지>) -> 장면 {
33 { 아이디: 아이디, 텍스트키: 텍스트, 선택지들: 선택지들 }
36export function 시작장면() -> 장면아이디 { "ch1_scene0" }
38// STATE와 URL에서 들어온 문자열을 닫힌 장면 union으로 좁힌다. 손상 값은 시작 장면으로 복귀한다.
39// Narrow a STATE/URL string into the closed SceneId union. Corrupt values safely return to the start scene.
40export function 장면파싱(토큰: string) -> 장면아이디 {
41 match 토큰 {
42 case "ch1_scene0" => "ch1_scene0"
43 case "ch1_scene1" => "ch1_scene1"
44 case "ch1_scene2" => "ch1_scene2"
45 case "ch1_scene3" => "ch1_scene3"
46 case "ch1_scene4" => "ch1_scene4"
47 case "ch1_scene5" => "ch1_scene5"
48 case "ch2_scene0" => "ch2_scene0"
49 case "ch2_scene1" => "ch2_scene1"
50 case "ch2_scene2" => "ch2_scene2"
51 case "ch2_scene3" => "ch2_scene3"
52 case "ch2_scene4" => "ch2_scene4"
53 case "ch2_scene5" => "ch2_scene5"
54 case "ch2_scene6" => "ch2_scene6"
55 case "ch3_scene0" => "ch3_scene0"
56 case "ch3_scene1" => "ch3_scene1"
57 case "ch3_scene2" => "ch3_scene2"
58 case "ch3_scene3" => "ch3_scene3"
59 case "ch3_scene4" => "ch3_scene4"
60 case "ch4_scene0" => "ch4_scene0"
61 case "ch4_scene1" => "ch4_scene1"
62 case "ch4_scene2" => "ch4_scene2"
63 case "ch4_scene3" => "ch4_scene3"
64 case "ch4_scene4" => "ch4_scene4"
65 case "ch5_scene0" => "ch5_scene0"
66 case "ch5_scene1" => "ch5_scene1"
67 case "ch5_scene2" => "ch5_scene2"
68 case "ch5_scene3" => "ch5_scene3"
69 case "ch5_scene4" => "ch5_scene4"
70 case "ch5_scene5" => "ch5_scene5"
71 case "ch6_scene0" => "ch6_scene0"
72 case "ch6_scene1" => "ch6_scene1"
73 case "ch6_scene2" => "ch6_scene2"
74 case "ch6_scene3" => "ch6_scene3"
75 case "ch6_scene4" => "ch6_scene4"
76 case "ch6_scene5" => "ch6_scene5"
77 case "ch7_scene0" => "ch7_scene0"
78 case "ch7_scene1" => "ch7_scene1"
79 case "ch7_scene2" => "ch7_scene2"
80 case "ch7_scene3" => "ch7_scene3"
81 case "ch7_scene4" => "ch7_scene4"
82 case "ch8_scene0" => "ch8_scene0"
83 case "ch8_scene1" => "ch8_scene1"
84 case "ch8_scene2" => "ch8_scene2"
85 case "ch8_scene3" => "ch8_scene3"
86 case "ch8_scene4" => "ch8_scene4"
87 case "ch9_scene0" => "ch9_scene0"
88 case "ch9_scene1" => "ch9_scene1"
89 case "ch9_scene2" => "ch9_scene2"
90 case _ => 시작장면()
91 }
94// 장면 데이터는 match 하나로 닫혀 있다. 새 장면을 추가하면 이 함수가 exhaustive gate가 된다.
95// Scene data is closed over one match. Adding a scene makes this function the exhaustive gate.
96export function 장면찾기(아이디: 장면아이디) -> 장면 {
97 match 아이디 {
98 case "ch1_scene0" => 장면만들기("ch1_scene0", "domainCh1_scene0_text", [
99 선택("domainCh1_scene0_choice0_text", "ch1_scene1", 1),
100 선택("domainCh1_scene0_choice1_text", "ch1_scene2", 2)
101 ])
102 case "ch1_scene1" => 장면만들기("ch1_scene1", "domainCh1_scene1_text", [
103 선택("domainCh1_scene1_choice0_text", "ch1_scene3", 3),
104 선택("domainCh1_scene1_choice1_text", "ch1_scene4", 4)
105 ])
106 case "ch1_scene2" => 장면만들기("ch1_scene2", "domainCh1_scene2_text", [
107 선택("domainCh1_scene2_choice0_text", "ch1_scene5", 5),
108 선택("domainCh1_scene2_choice1_text", "ch1_scene4", 4)
109 ])
110 case "ch1_scene3" => 장면만들기("ch1_scene3", "domainCh1_scene3_text", [
111 선택("domainCh1_scene3_choice0_text", "ch2_scene1", 999)
112 ])
113 case "ch1_scene4" => 장면만들기("ch1_scene4", "domainCh1_scene4_text", [
114 선택("domainCh1_scene4_choice0_text", "ch2_scene2", 999)
115 ])
116 case "ch1_scene5" => 장면만들기("ch1_scene5", "domainCh1_scene5_text", [
117 선택("domainCh1_scene5_choice0_text", "ch2_scene0", 999)
118 ])
119 case "ch2_scene0" => 장면만들기("ch2_scene0", "domainCh2_scene0_text", [
120 선택("domainCh2_scene0_choice0_text", "ch2_scene1", 1),
121 선택("domainCh2_scene0_choice1_text", "ch2_scene2", 2)
122 ])
123 case "ch2_scene1" => 장면만들기("ch2_scene1", "domainCh2_scene1_text", [
124 선택("domainCh2_scene1_choice0_text", "ch2_scene3", 3),
125 선택("domainCh2_scene1_choice1_text", "ch2_scene4", 4)
126 ])
127 case "ch2_scene2" => 장면만들기("ch2_scene2", "domainCh2_scene2_text", [
128 선택("domainCh2_scene2_choice0_text", "ch2_scene5", 5),
129 선택("domainCh2_scene2_choice1_text", "ch2_scene6", 6)
130 ])
131 case "ch2_scene3" => 장면만들기("ch2_scene3", "domainCh2_scene3_text", [
132 선택("domainCh2_scene3_choice0_text", "ch3_scene0", 999)
133 ])
134 case "ch2_scene4" => 장면만들기("ch2_scene4", "domainCh2_scene4_text", [
135 선택("domainCh2_scene4_choice0_text", "ch3_scene0", 999)
136 ])
137 case "ch2_scene5" => 장면만들기("ch2_scene5", "domainCh2_scene5_text", [
138 선택("domainCh2_scene5_choice0_text", "ch3_scene0", 999)
139 ])
140 case "ch2_scene6" => 장면만들기("ch2_scene6", "domainCh2_scene6_text", [
141 선택("domainCh2_scene6_choice0_text", "ch3_scene0", 999)
142 ])
143 case "ch3_scene0" => 장면만들기("ch3_scene0", "domainCh3_scene0_text", [
144 선택("domainCh3_scene0_choice0_text", "ch3_scene1", 1),
145 선택("domainCh3_scene0_choice1_text", "ch3_scene2", 2),
146 선택("domainCh3_scene0_choice2_text", "ch3_scene3", 3)
147 ])
148 case "ch3_scene1" => 장면만들기("ch3_scene1", "domainCh3_scene1_text", [
149 선택("domainCh3_scene1_choice0_text", "ch3_scene2", 2),
150 선택("domainCh3_scene1_choice1_text", "ch3_scene3", 3)
151 ])
152 case "ch3_scene2" => 장면만들기("ch3_scene2", "domainCh3_scene2_text", [
153 선택("domainCh3_scene2_choice0_text", "ch3_scene1", 1),
154 선택("domainCh3_scene2_choice1_text", "ch3_scene3", 3)
155 ])
156 case "ch3_scene3" => 장면만들기("ch3_scene3", "domainCh3_scene3_text", [
157 선택("domainCh3_scene3_choice0_text", "ch3_scene4", 4)
158 ])
159 case "ch3_scene4" => 장면만들기("ch3_scene4", "domainCh3_scene4_text", [
160 선택("domainCh3_scene4_choice0_text", "ch4_scene0", 999)
161 ])
162 case "ch4_scene0" => 장면만들기("ch4_scene0", "domainCh4_scene0_text", [
163 선택("domainCh4_scene0_choice0_text", "ch4_scene1", 1),
164 선택("domainCh4_scene0_choice1_text", "ch4_scene2", 2)
165 ])
166 case "ch4_scene1" => 장면만들기("ch4_scene1", "domainCh4_scene1_text", [
167 선택("domainCh4_scene1_choice0_text", "ch4_scene3", 3),
168 선택("domainCh4_scene1_choice1_text", "ch4_scene4", 4)
169 ])
170 case "ch4_scene2" => 장면만들기("ch4_scene2", "domainCh4_scene2_text", [
171 선택("domainCh4_scene2_choice0_text", "ch4_scene3", 3),
172 선택("domainCh4_scene2_choice1_text", "ch4_scene4", 4)
173 ])
174 case "ch4_scene3" => 장면만들기("ch4_scene3", "domainCh4_scene3_text", [
175 선택("domainCh4_scene3_choice0_text", "ch5_scene0", 999)
176 ])
177 case "ch4_scene4" => 장면만들기("ch4_scene4", "domainCh4_scene4_text", [
178 선택("domainCh4_scene4_choice0_text", "ch1_scene0", 0)
179 ])
180 case "ch5_scene0" => 장면만들기("ch5_scene0", "domainCh5_scene0_text", [
181 선택("domainCh5_scene0_choice0_text", "ch5_scene1", 1),
182 선택("domainCh5_scene0_choice1_text", "ch5_scene2", 2),
183 선택("domainCh5_scene0_choice2_text", "ch5_scene3", 3)
184 ])
185 case "ch5_scene1" => 장면만들기("ch5_scene1", "domainCh5_scene1_text", [
186 선택("domainCh5_scene1_choice0_text", "ch5_scene4", 4)
187 ])
188 case "ch5_scene2" => 장면만들기("ch5_scene2", "domainCh5_scene2_text", [
189 선택("domainCh5_scene2_choice0_text", "ch5_scene4", 4)
190 ])
191 case "ch5_scene3" => 장면만들기("ch5_scene3", "domainCh5_scene3_text", [
192 선택("domainCh5_scene3_choice0_text", "ch5_scene4", 4)
193 ])
194 case "ch5_scene4" => 장면만들기("ch5_scene4", "domainCh5_scene4_text", [
195 선택("domainCh5_scene4_choice0_text", "ch5_scene5", 5)
196 ])
197 case "ch5_scene5" => 장면만들기("ch5_scene5", "domainCh5_scene5_text", [
198 선택("domainCh5_scene5_choice0_text", "ch6_scene0", 999)
199 ])
200 case "ch6_scene0" => 장면만들기("ch6_scene0", "domainCh6_scene0_text", [
201 선택("domainCh6_scene0_choice0_text", "ch6_scene1", 1),
202 선택("domainCh6_scene0_choice1_text", "ch6_scene2", 2),
203 선택("domainCh6_scene0_choice2_text", "ch6_scene3", 3)
204 ])
205 case "ch6_scene1" => 장면만들기("ch6_scene1", "domainCh6_scene1_text", [
206 선택("domainCh6_scene1_choice0_text", "ch6_scene4", 4)
207 ])
208 case "ch6_scene2" => 장면만들기("ch6_scene2", "domainCh6_scene2_text", [
209 선택("domainCh6_scene2_choice0_text", "ch6_scene4", 4)
210 ])
211 case "ch6_scene3" => 장면만들기("ch6_scene3", "domainCh6_scene3_text", [
212 선택("domainCh6_scene3_choice0_text", "ch6_scene4", 4)
213 ])
214 case "ch6_scene4" => 장면만들기("ch6_scene4", "domainCh6_scene4_text", [
215 선택("domainCh6_scene4_choice0_text", "ch6_scene5", 5)
216 ])
217 case "ch6_scene5" => 장면만들기("ch6_scene5", "domainCh6_scene5_text", [
218 선택("domainCh6_scene5_choice0_text", "ch7_scene0", 999)
219 ])
220 case "ch7_scene0" => 장면만들기("ch7_scene0", "domainCh7_scene0_text", [
221 선택("domainCh7_scene0_choice0_text", "ch7_scene1", 1),
222 선택("domainCh7_scene0_choice1_text", "ch7_scene2", 2),
223 선택("domainCh7_scene0_choice2_text", "ch7_scene3", 3)
224 ])
225 case "ch7_scene1" => 장면만들기("ch7_scene1", "domainCh7_scene1_text", [
226 선택("domainCh7_scene1_choice0_text", "ch7_scene4", 4)
227 ])
228 case "ch7_scene2" => 장면만들기("ch7_scene2", "domainCh7_scene2_text", [
229 선택("domainCh7_scene2_choice0_text", "ch7_scene3", 3)
230 ])
231 case "ch7_scene3" => 장면만들기("ch7_scene3", "domainCh7_scene3_text", [
232 선택("domainCh7_scene3_choice0_text", "ch7_scene4", 4)
233 ])
234 case "ch7_scene4" => 장면만들기("ch7_scene4", "domainCh7_scene4_text", [
235 선택("domainCh7_scene4_choice0_text", "ch8_scene0", 999)
236 ])
237 case "ch8_scene0" => 장면만들기("ch8_scene0", "domainCh8_scene0_text", [
238 선택("domainCh8_scene0_choice0_text", "ch8_scene1", 1),
239 선택("domainCh8_scene0_choice1_text", "ch8_scene2", 2),
240 선택("domainCh8_scene0_choice2_text", "ch8_scene3", 3)
241 ])
242 case "ch8_scene1" => 장면만들기("ch8_scene1", "domainCh8_scene1_text", [
243 선택("domainCh8_scene1_choice0_text", "ch8_scene4", 4)
244 ])
245 case "ch8_scene2" => 장면만들기("ch8_scene2", "domainCh8_scene2_text", [
246 선택("domainCh8_scene2_choice0_text", "ch8_scene4", 4)
247 ])
248 case "ch8_scene3" => 장면만들기("ch8_scene3", "domainCh8_scene3_text", [
249 선택("domainCh8_scene3_choice0_text", "ch8_scene4", 4)
250 ])
251 case "ch8_scene4" => 장면만들기("ch8_scene4", "domainCh8_scene4_text", [
252 선택("domainCh8_scene4_choice0_text", "ch9_scene0", 999)
253 ])
254 case "ch9_scene0" => 장면만들기("ch9_scene0", "domainCh9_scene0_text", [
255 선택("domainCh9_scene0_choice0_text", "ch9_scene1", 1)
256 ])
257 case "ch9_scene1" => 장면만들기("ch9_scene1", "domainCh9_scene1_text", [
258 선택("domainCh9_scene1_choice0_text", "ch9_scene2", 2)
259 ])
260 case "ch9_scene2" => 장면만들기("ch9_scene2", "domainCh9_scene2_text", [
261 선택("domainCh9_scene2_choice0_text", "ch1_scene0", 0)
262 ])
263 }

SHA256 28cef28a8a0a043113bf98c7c489a54ce4de30fdad0e416860a0585c9e2104ce