slow.monster

STUDIO HAZE · jeniapp

Topaz source

Open by house policy. Topaz is our own language.

Topaz 5.20.2 · 63 files

apps/slow-monster/data/maps.tpz

Topaz · 5335 B · Original file

1// 연못과 심층 두 맵의 타일 격자, 맵 사이를 잇는 워프, 좌표로 타일을 묻는 함수를 둡니다.
2// 격자는 24x22 타일을 행 우선으로 편 정수 배열이며 0 풀, 1 키큰풀, 2 길, 3 물, 4 나무, 5 꽃입니다. 맵 아이디 "deep" 은 심층이고 나머지는 연못입니다.
3// 상수 격자라 같은 맵과 좌표는 늘 같은 타일이고, 격자 밖은 나무 벽으로 답합니다.
4// 픽셀을 그리지 않습니다. 페이지의 셸이 타일 번호마다 16x16 무늬를 그립니다.
5// Map data: two 24x22 tile grids, position-based warps and tile lookup.
7// 맵이 화면에 보이는 10x9 보다 커서 카메라가 플레이어를 따라갑니다.
8export let 맵너비 = 24
9export let 맵높이 = 22
11export type 타일종류 = 0 | 1 | 2 | 3 | 4 | 5
12export let 타일_풀: 타일종류 = 0
13export let 타일_키큰풀: 타일종류 = 1
14export let 타일_길: 타일종류 = 2
15export let 타일_물: 타일종류 = 3
16export let 타일_나무: 타일종류 = 4
17export let 타일_꽃: 타일종류 = 5
19// 나무 테두리로 둘러싼 연못 분지입니다. 가운데 물웅덩이를 길이 감싸고 곳곳에 키큰풀밭이 있습니다.
20function 연못타일들() -> Array<int> {
21 [
22 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
23 4,0,0,0,5,0,0,1,1,1,1,0,0,0,0,5,0,0,0,0,0,0,0,4,
24 4,0,0,0,0,0,0,1,1,1,1,0,0,2,2,2,2,2,2,0,0,5,0,4,
25 4,0,5,0,0,0,0,1,1,1,1,0,0,2,0,0,0,0,2,0,0,0,0,4,
26 4,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,2,0,1,1,0,4,
27 4,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,5,0,2,0,1,1,0,4,
28 4,5,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,4,
29 4,0,0,2,0,0,3,3,3,3,3,0,0,0,0,0,0,0,2,2,2,2,2,4,
30 4,0,0,2,0,3,3,3,3,3,3,3,0,0,5,0,0,0,0,0,0,0,2,4,
31 4,0,0,2,0,3,3,3,3,3,3,3,3,0,0,0,0,1,1,1,0,0,2,4,
32 4,0,5,2,0,3,3,3,3,3,3,3,3,0,0,0,0,1,1,1,0,0,2,4,
33 4,0,0,2,0,3,3,3,3,3,3,3,0,0,0,0,0,1,1,1,0,0,2,4,
34 4,0,0,2,0,0,3,3,3,3,3,0,0,0,5,0,0,0,0,0,0,0,2,4,
35 4,0,0,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,4,
36 4,0,5,0,0,2,0,0,5,0,0,0,0,2,0,0,0,0,0,0,0,0,0,4,
37 4,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,5,0,0,5,0,0,0,4,
38 4,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,4,
39 4,1,1,1,0,0,5,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,4,
40 4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,5,0,0,0,0,1,1,1,4,
41 4,0,1,1,0,0,0,5,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,4,
42 4,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,4,
43 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
44 ]
47// 연못 남쪽 통로 너머의 어둡고 트인 동굴입니다. 같은 격자 크기라 카메라와 그리기를 그대로 씁니다.
48function 심층타일들() -> Array<int> {
49 [
50 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
51 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
52 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,4,
53 4,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,1,1,0,0,4,
54 4,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,1,0,0,0,4,
55 4,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,4,
56 4,0,0,4,0,0,0,0,0,3,3,3,0,0,0,0,4,0,0,0,0,0,0,4,
57 4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,4,
58 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
59 4,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
60 4,0,1,1,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,4,
61 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
62 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,
63 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,4,
64 4,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
65 4,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
66 4,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,4,
67 4,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,4,
68 4,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,5,0,0,0,4,
69 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
70 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
71 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
72 ]
75export function 맵타일들(맵아이디: string) -> Array<int> {
76 if 맵아이디 == "deep" { 심층타일들() } else { 연못타일들() }
79// 워프는 격자에 특수 타일을 박지 않고 엔티티처럼 좌표로 둡니다. 그 칸을 밟으면 목적 맵의 목적 좌표로 옮깁니다.
80export record 워프 { x: int, y: int, 목적맵: string, 목적x: int, 목적y: int }
82export function 워프목록(맵아이디: string) -> Array<워프> {
83 if 맵아이디 == "deep" {
84 [워프 { x: 3, y: 3, 목적맵: "pond", 목적x: 12, 목적y: 17 }]
85 } else {
86 [워프 { x: 12, y: 18, 목적맵: "deep", 목적x: 3, 목적y: 4 }]
87 }
90export function 워프에서(맵아이디: string, x: int, y: int) -> Option<워프> {
91 let 일치 = 워프목록(맵아이디).filter(후보 => 후보.x == x && 후보.y == y)
92 if 일치.length > 0 { Some(일치[0]) } else { None }
95// 4 와 표 밖의 값은 모두 나무로 읽어 지나갈 수 없게 합니다.
96function 타일읽기(값: int) -> 타일종류 {
97 match 값 {
98 case 0 => 타일_풀
99 case 1 => 타일_키큰풀
100 case 2 => 타일_길
101 case 3 => 타일_물
102 case 5 => 타일_꽃
103 case _ => 타일_나무
104 }
107// 격자 밖을 나무 벽으로 답해 카메라 가두기와 이동 경계가 따로 범위를 검사하지 않아도 됩니다.
108export function 타일에서(타일들: Array<int>, x: int, y: int) -> 타일종류 {
109 if x < 0 || y < 0 || x >= 맵너비 || y >= 맵높이 { return 타일_나무 }
110 타일읽기(타일들[y * 맵너비 + x])

SHA256 ecb8b1d4ccaed6263c91421eda3643dbbdaf239b36f01ecdd9b13146563bd66c