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/main.tpz

Topaz · 1502 B · Original file

1// 도메인 전쟁 Topaz 엔트리. 입력 패킷을 파싱하고 pure core에 위임한 뒤 DW1 패킷을 프린트한다.
2// Domain War Topaz entry. Parse the input packet, delegate to the pure core, and print a DW1 packet.
3//
4// 하우스룰(app): app 계층은 패킷 파싱 + 코어 호출 + print만 한다. 게임 규칙은 core/game.tpz에 있다.
5// House rule (app): packet parsing + core call + print only. Game rules live in core/game.tpz.
6//
7// DW1 packet contract:
8// 입력: DW1 / STATE:<prev> / EVENT:<choice_0|choice_1|choice_2|back|restart>
9// 출력: DW1 / STATE:<new> / SCENE:<scene id> / TEXT:<text key> / CHOICES:<choice text keys pipe-separated>
11import core.game { 처리 }
13// 문자열에서 접두사 뒤의 꼬리를 Unicode scalar 인덱스 기반 slice로 돌려준다.
14// Return the tail after a prefix with Unicode-scalar-indexed slice.
15function 접두사뒤(전체: string, 접두사: string) -> string {
16 전체.slice(접두사.scalars().length, 전체.scalars().length)
19// "PREFIX:"로 시작하는 줄에서 값을 읽는다. 없으면 빈 문자열.
20// Read the value after a "PREFIX:" line. Missing values become empty string.
21function 줄값(원본: string, 접두사: string) -> string {
22 원본.split("\n").reduce("", (값, 줄) => {
23 let 다듬 = 줄.trim()
24 if 다듬.startsWith(접두사) { 접두사뒤(다듬, 접두사) } else { 값 }
25 }).trim()
28let 패킷 = input()
29print(처리(줄값(패킷, "STATE:"), 줄값(패킷, "EVENT:")))

SHA256 a196cf94836db4d2b45717e69b96879cf03a1b578778192dd72ba298612a7edf