1 local S
= minetest
.get_translator("tsm_pyramids")
12 " "," "," "," "," "," "," "," "," ",
13 " ","^"," ","^"," ","^"," ","^"," ",
14 " ","c"," ","c"," ","c"," ","c"," ",
15 " "," "," "," "," "," "," "," "," ",
16 " "," "," "," "," "," "," "," "," ",
17 " "," "," "," "," "," "," "," "," ",
18 " ","c"," ","c"," ","c"," ","c"," ",
19 " ","v"," ","v"," ","v"," ","v"," ",
20 " "," "," "," "," "," "," "," "," "
28 "s","h","h","h","h","h","h","h","s",
29 "h"," "," "," "," "," "," "," ","h",
30 "h"," "," "," "," "," "," "," ","h",
31 "h"," "," "," "," "," "," "," ","h",
32 " "," "," "," ","<"," "," "," ","h",
33 "h"," "," "," "," "," "," "," ","h",
34 "h"," "," "," "," "," "," "," ","h",
35 "h"," "," "," "," "," "," "," ","h",
36 "s","h","h","h","h","h","h","h","s"
43 " "," "," "," ","v"," "," "," "," ",
44 " ","c","c"," "," "," ","c","c"," ",
45 " ","c","c"," "," "," ","c","c"," ",
46 " "," "," "," "," "," "," "," "," ",
47 " "," "," "," "," "," "," "," ","<",
48 " "," "," "," "," "," "," "," "," ",
49 " ","c","c"," "," "," ","c","c"," ",
50 " ","c","c"," "," "," ","c","c"," ",
51 " "," "," "," ","^"," "," "," "," "
58 " "," "," "," "," "," "," "," "," ",
59 " "," "," "," "," "," "," "," "," ",
60 " "," ","c","S","c","S","c"," "," ",
61 " "," ","S"," "," "," ","S"," "," ",
62 " "," ","c"," ",">"," ","c"," ","<",
63 " "," ","S"," "," "," ","S"," "," ",
64 " "," ","c","S","c","S","c"," "," ",
65 " "," "," "," "," "," "," "," "," ",
66 " "," "," "," "," "," "," "," "," "
73 " "," "," "," "," "," "," "," "," ",
74 " ","S","S","S","S","S","S","S"," ",
75 " ","S"," "," "," "," "," ","S"," ",
76 " ","S"," ","c","c","c"," ","S"," ",
77 " ","S"," ","c","v","c"," ","S"," ",
78 "S","S"," ","c"," ","c"," ","S"," ",
79 "S","S"," ","c"," "," "," ","S"," ",
80 "v","S"," ","S","S","S","S","S"," ",
81 " ","S"," "," "," "," "," "," "," "
88 " "," "," "," "," "," "," "," "," ",
89 " ","S","S","S","S","S","S","S"," ",
90 " "," "," ","c"," "," "," ","S"," ",
91 "S","S"," ","c"," ","c"," ","S"," ",
92 " ","S"," ","c","^","c"," ","S"," ",
93 " ","S"," ","c","c","c"," ","S"," ",
94 " ","S"," "," "," "," "," ","S"," ",
95 " ","S","S","S","S","S","S","S"," ",
96 " "," "," "," "," "," "," "," "," "
103 " "," ","v"," ","v"," ","v"," ","v",
104 " ","c"," ","c"," ","c"," ","c"," ",
105 " "," "," "," "," "," "," "," "," ",
106 " ","c"," ","c"," ","c"," ","c"," ",
107 " "," "," "," "," "," "," "," "," ",
108 " ","c"," ","c"," ","c"," ","c"," ",
109 " "," "," "," "," "," "," "," "," ",
110 " ","c"," ","c"," ","c"," ","c"," ",
111 " "," ","^"," ","^"," ","^"," ","^",
119 "c"," "," "," "," "," "," "," ","c",
120 " "," ","c",">"," ","<","c"," "," ",
121 " ","c","s","c"," ","c","s","c"," ",
122 " "," ","c"," "," "," ","c"," "," ",
123 " "," "," "," ","<"," "," "," "," ",
124 " "," ","c"," "," "," ","c"," "," ",
125 " ","c","s","c"," ","c","s","c"," ",
126 " "," ","c",">"," ","<","c"," "," ",
127 "c"," "," "," "," "," "," "," ","c",
135 ">","s","s","c","c","c","s","s","s",
136 "s","s","c"," "," "," ","c","s","s",
137 "s","c"," "," "," "," "," ","c","s",
138 "c"," "," "," "," "," "," "," ","c",
139 " "," "," "," "," "," "," ","<","c",
140 "c"," "," "," "," "," "," "," ","c",
141 "s","c"," "," "," "," "," ","c","s",
142 "s","s","c"," "," "," ","c","s","s",
143 ">","s","s","c","c","c","s","s","s",
151 " "," "," "," "," "," "," "," "," ",
152 " ","S","S","S","^","S","S","S"," ",
153 " ","S","S","S","S","S","S","S"," ",
154 " ","S","S","S","S","S","S","S"," ",
155 " ","S","S","S","S","S","S",">"," ",
156 " ","S","S","S","S","S","S","S"," ",
157 " ","S","S","S","S","S","S","S"," ",
158 " ","S","S","S","v","S","S","S"," ",
159 " "," "," "," "," "," "," "," "," ",
166 "S","S","S","S",">"," "," "," "," ",
167 "S","S","S","S","S","^","S","S"," ",
168 "S","S","S","S","S","S","S","S"," ",
169 "S","S","S","S","S","S","S","S"," ",
170 " "," "," "," "," "," "," "," "," ",
171 "S","S","S","S","S","S","S","S"," ",
172 "S","S","S","S","S","S","S","S"," ",
173 "S","S","S","S","S","v","S","S"," ",
174 "S","S","S","S",">"," "," "," "," ",
181 "S","S","S","S","S"," "," "," "," ",
182 "S","S","S","S","c",">"," "," "," ",
183 "S","c","S","c","S","c","S"," "," ",
184 " "," "," "," "," "," "," "," "," ",
185 " "," "," "," "," "," "," "," "," ",
186 " "," "," "," "," "," "," "," "," ",
187 "S","c","S","c","S","c","S"," "," ",
188 "S","S","S","S","c",">"," "," "," ",
189 "S","S","S","S","S"," "," "," "," ",
196 "S","S","S","S","S","v","S","S","S",
197 "S","S","S","S","S","S","S","S","S",
198 "c","S","c","S","c","S","c","S","c",
199 " "," "," "," "," "," "," "," "," ",
200 " "," "," "," "," "," "," "," ","<",
201 " "," "," "," "," "," "," "," "," ",
202 "c","S","c","S","c","S","c","S","c",
203 "S","S","S","S","S","S","S","S","S",
204 "S","S","S","S","S","^","S","S","S",
211 "S","S","S","S","S","S","S","S","v",
212 "S","S","S","S","S","S","S","S"," ",
213 "S","S","S","S","S","S","S","S"," ",
214 "S","S","S"," "," "," ","S","S"," ",
215 " "," "," "," ","<"," ","S","S"," ",
216 "S","S","S"," "," "," ","S","S"," ",
217 "S","S","S","S","S","S","S","S"," ",
218 "S","S","S","S","S","S","S","S"," ",
219 "S","S","S","S","S","S","S","S","^",
226 "S","S","S","S","S","S","S","S","S",
227 "S","S","S","S","S","S","S","S","S",
228 "S","S"," ","v"," ","v"," ","S","S",
229 "S","S",">"," "," "," ","<","S"," ",
230 " "," "," "," ","c"," "," ","S"," ",
231 "S","S",">"," "," "," ","<","S"," ",
232 "S","S"," ","^"," ","^"," ","S","S",
233 "S","S","S","S","S","S","S","S","S",
234 "S","S","S","S","S","S","S","S","S",
241 " "," "," "," "," "," "," "," "," ",
242 " ","S","S","S","S","S","S","S"," ",
243 " ","S"," "," ","v"," "," ","S"," ",
244 "S","S"," "," "," "," "," ","S"," ",
245 " "," "," "," "," "," ","<","S"," ",
246 "S","S"," "," "," "," "," ","S"," ",
247 " ","S"," "," ","^"," "," ","S"," ",
248 " ","S","S","S","S","S","S","S"," ",
249 " "," "," "," "," "," "," "," "," ",
256 " "," "," "," "," "," "," "," "," ",
257 " "," "," "," "," "," "," "," "," ",
258 " "," "," "," ","^"," "," "," "," ",
259 " "," "," ","c","c","c"," "," "," ",
260 " "," ","<","c","S","c",">"," "," ",
261 " "," "," ","c","c","c"," "," "," ",
262 " "," "," "," ","v"," "," "," "," ",
263 " "," "," "," "," "," "," "," "," ",
264 " "," "," "," "," "," "," "," "," ",
272 " "," "," "," "," "," "," "," "," ",
273 " "," "," "," "," "," "," "," "," ",
274 " "," "," ","c","c","c"," "," "," ",
275 " "," ","c","c","v","c","c"," "," ",
276 " "," ","c",">"," "," "," "," "," ",
277 " "," ","c","c","^","c","c"," "," ",
278 " "," "," ","c","c","c"," "," "," ",
279 " "," "," "," "," "," "," "," "," ",
280 " "," "," "," "," "," "," "," "," ",
287 "S","S","S","S","S","S","S"," ","<",
288 "c","c","c","c","c","c","S"," ","c",
289 "c"," "," "," "," "," ","c"," ","<",
290 "c"," "," "," "," "," ","c"," ","c",
291 " "," "," "," "," ","<","c"," ","<",
292 "c"," "," "," "," "," ","c"," ","c",
293 "c"," "," "," "," "," ","c"," ","<",
294 "c","c","c","c","c","c","c"," ","c",
295 "S","S","S","S","S","S","S"," ","<",
302 " "," "," "," "," "," "," "," "," ",
303 " "," "," "," "," "," "," "," "," ",
304 " "," "," "," "," "," "," "," "," ",
305 " "," "," ","^"," ","^"," "," "," ",
306 " "," "," ","c"," ","c"," "," "," ",
307 " "," "," ","v"," ","v"," "," "," ",
308 " "," "," "," "," "," "," "," "," ",
309 " "," "," "," "," "," "," "," "," ",
310 " "," "," "," "," "," "," "," "," ",
317 " "," "," "," "," "," "," "," "," ",
318 " "," "," "," ","^"," "," "," "," ",
319 " "," "," "," ","c"," "," "," "," ",
320 " "," "," "," "," "," "," "," "," ",
321 " ","<","c"," "," "," ","c",">"," ",
322 " "," "," "," "," "," "," "," "," ",
323 " "," "," "," ","c"," "," "," "," ",
324 " "," "," "," ","v"," "," "," "," ",
325 " "," "," "," "," "," "," "," "," ",
332 " "," "," "," "," "," "," "," "," ",
333 " "," ","^"," ","^"," ","^"," "," ",
334 " "," ","c"," ","c"," ","c"," "," ",
335 " "," "," "," "," "," "," "," "," ",
336 " "," "," "," "," "," "," "," "," ",
337 " "," "," "," "," "," "," "," "," ",
338 " "," ","c"," ","c"," ","c"," "," ",
339 " "," ","v"," ","v"," ","v"," "," ",
340 " "," "," "," "," "," "," "," "," ",
348 " ","S","v","S","v","S","v","S","v",
349 " ","S"," ","S"," ","S"," ","S"," ",
350 " ","c"," ","c"," ","c"," ","c"," ",
351 " "," "," "," "," "," "," "," "," ",
352 " "," "," "," "," "," "," "," "," ",
353 " "," "," "," "," "," "," "," "," ",
354 " ","c"," ","c"," ","c"," ","c"," ",
355 " ","S"," ","S"," ","S"," ","S"," ",
356 " ","S","^","S","^","S","^","S","^",
363 " "," "," "," "," "," "," "," "," ",
364 " ","c"," "," "," "," "," ","c"," ",
365 " "," "," "," "," "," "," "," "," ",
366 " "," "," ","c","S","c"," "," "," ",
367 " "," "," ","S",">"," "," "," "," ",
368 " "," "," ","c","S","c"," "," "," ",
369 " "," "," "," "," "," "," "," "," ",
370 " ","c"," "," "," "," "," ","c"," ",
371 " "," "," "," "," "," "," "," "," ",
378 " "," "," "," "," "," "," "," "," ",
379 " "," "," "," "," "," "," "," "," ",
380 " "," "," "," "," "," "," "," "," ",
381 " "," "," "," "," "," "," "," "," ",
382 " "," "," "," ","<"," "," "," "," ",
383 " "," "," "," "," "," "," "," "," ",
384 " "," "," "," "," "," "," "," "," ",
385 " "," "," "," "," "," "," "," "," ",
386 " "," "," "," "," "," "," "," "," ",
393 " "," "," "," "," "," "," "," "," ",
394 " "," "," "," "," "," "," "," ","<",
395 " "," "," "," "," "," "," "," "," ",
396 " "," "," "," "," "," "," "," "," ",
397 " "," "," "," "," "," "," "," "," ",
398 " "," "," "," "," "," "," "," "," ",
399 " "," "," "," "," "," "," "," "," ",
400 " "," "," "," "," "," "," "," ","<",
401 " "," "," "," "," "," "," "," "," ",
409 "c"," "," "," "," "," "," "," ","c",
410 "c","c",">"," "," "," ","<","c","c",
411 " ","c","c"," "," "," ","c","c"," ",
412 " "," ","c","c"," ","c","c"," "," ",
413 " "," "," "," "," "," "," "," "," ",
414 " "," ","c","c"," ","c","c"," "," ",
415 " ","c","c"," "," "," ","c","c"," ",
416 "c","c",">"," "," "," ","<","c","c",
417 "c"," "," "," "," "," "," "," ","c",
424 "S","S","S","S","S","S","S","S","S",
425 "S","S","S"," "," "," "," "," "," ",
426 "S","S","S"," "," "," "," "," "," ",
427 "S","S","S"," "," ","^","^","^","^",
428 " "," "," "," "," ","c","c","c","c",
429 "S","S","S"," "," ","v","v","v","v",
430 "S","S","S"," "," "," "," "," "," ",
431 "S","S","S"," "," "," "," "," "," ",
432 "S","S","S","S","S","S","S","S","S",
439 " "," "," "," "," "," "," "," "," ",
440 " "," "," "," "," "," "," "," "," ",
441 " "," "," "," "," "," "," "," "," ",
442 " ","^"," ","^"," ","^"," ","^"," ",
443 " ","c"," ","c"," ","c"," ","c"," ",
444 " ","v"," ","v"," ","v"," ","v"," ",
445 " "," "," "," "," "," "," "," "," ",
446 " "," "," "," "," "," "," "," "," ",
447 " "," "," "," "," "," "," "," "," ",
454 "S","S"," "," "," "," "," ","S","S",
455 "S"," "," "," ","c"," "," "," ","S",
456 " "," ","<","S","S","S",">"," "," ",
457 " "," ","S","S","S","S","S"," "," ",
458 " ","c","S","S","S","S","S","c"," ",
459 " "," ","S","S","S","S","S"," "," ",
460 " "," ","<","S","S","S",">"," "," ",
461 "S"," "," "," ","c"," "," "," ","S",
462 "S","S"," "," "," "," "," ","S","S",
469 " "," "," "," "," "," "," "," "," ",
470 " ","c","^","c"," ","c","^","c"," ",
471 " ","c","c","c"," ","c","c","c"," ",
472 " ","c","c","c"," ","c","c","c"," ",
473 " "," "," "," "," "," "," "," "," ",
474 " ","c","c","c"," ","c","c","c"," ",
475 " ","c","c","c"," ","c","c","c"," ",
476 " ","c","v","c"," ","c","v","c"," ",
477 " "," "," "," "," "," "," "," "," ",
484 "S"," "," "," "," "," "," "," "," ",
485 "S"," "," ","^"," "," ","^"," "," ",
486 "S"," "," ","c"," "," ","c"," "," ",
487 "S"," "," "," "," "," "," "," "," ",
488 " "," "," ","c"," "," ","c"," "," ",
489 "S"," "," "," "," "," "," "," "," ",
490 "S"," "," ","c"," "," ","c"," "," ",
491 "S"," "," ","v"," "," ","v"," "," ",
492 "S"," "," "," "," "," "," "," "," ",
499 "c"," ","c"," ","c"," ","c"," ","c",
500 " "," ","v"," ","v"," ","v"," "," ",
501 "c"," "," "," "," "," "," "," ","c",
502 " "," "," "," "," "," "," "," "," ",
503 " "," "," "," "," "," "," "," ","c",
504 " "," "," "," "," "," "," "," "," ",
505 "c"," "," "," "," "," "," "," ","c",
506 " "," ","^"," ","^"," ","^"," "," ",
507 "c"," ","c"," ","c"," ","c"," ","c",
515 " "," "," "," "," "," "," "," "," ",
516 " "," ","^"," ","^"," ","^"," "," ",
517 " "," ","c"," ","c"," ","c"," "," ",
518 " "," "," "," "," "," "," "," "," ",
519 " "," ","c"," ","c"," ","c"," "," ",
520 " "," "," "," "," "," "," "," "," ",
521 " "," ","c"," ","c"," ","c"," "," ",
522 " "," ","v"," ","v"," ","v"," "," ",
523 " "," "," "," "," "," "," "," "," ",
531 " "," "," "," "," "," "," "," "," ",
532 " "," "," "," "," "," "," "," "," ",
533 " "," "," "," "," "," "," "," "," ",
534 " "," "," "," "," "," "," "," "," ",
535 " "," "," "," ","s",">"," "," "," ",
536 " "," "," "," "," "," "," "," "," ",
537 " "," "," "," "," "," "," "," "," ",
538 " "," "," "," "," "," "," "," "," ",
539 " "," "," "," "," "," "," "," "," ",
541 " "," "," "," "," "," "," "," "," ",
542 " "," "," "," "," "," "," "," "," ",
543 " "," "," "," "," "," "," "," "," ",
544 " "," "," "," ","s"," "," "," "," ",
545 " "," "," "," ","s"," "," "," "," ",
546 " "," "," "," ","s"," "," "," "," ",
547 " "," "," "," "," "," "," "," "," ",
548 " "," "," "," "," "," "," "," "," ",
549 " "," "," "," "," "," "," "," "," ",
551 " "," "," "," "," "," "," "," "," ",
552 " "," "," "," "," "," "," "," "," ",
553 " "," "," "," "," "," "," "," "," ",
554 " "," "," "," "," "," "," "," "," ",
555 " "," "," "," ","s"," "," "," "," ",
556 " "," "," "," "," "," "," "," "," ",
557 " "," "," "," "," "," "," "," "," ",
558 " "," "," "," "," "," "," "," "," ",
559 " "," "," "," "," "," "," "," "," ",
561 " "," "," "," "," "," "," "," "," ",
562 " "," "," "," "," "," "," "," "," ",
563 " "," "," "," "," "," "," "," "," ",
564 " "," "," "," ","s"," "," "," "," ",
565 " "," "," "," "," "," "," "," "," ",
566 " "," "," "," ","s"," "," "," "," ",
567 " "," "," "," "," "," "," "," "," ",
568 " "," "," "," "," "," "," "," "," ",
569 " "," "," "," "," "," "," "," "," ",
571 " "," "," "," "," "," "," "," "," ",
572 " "," "," "," "," "," "," "," "," ",
573 " "," "," "," "," "," "," "," "," ",
574 " "," "," "," "," "," "," "," "," ",
575 " "," "," "," ","s"," "," "," "," ",
576 " "," "," "," "," "," "," "," "," ",
577 " "," "," "," "," "," "," "," "," ",
578 " "," "," "," "," "," "," "," "," ",
579 " "," "," "," "," "," "," "," "," ",
581 stype
= "desert_sandstone",
583 "S","S","S","S","S","S","S","S","S",
584 "s","2","s","2","s","2","s","2","s",
585 "S","S","S","S","S","S","S","S","S",
586 "2","s","2","s","2","s","2","s","2",
587 "S","S","S","S","S","S","S","S","S",
596 "s","s","s","s","s","s","s","s","s",
597 "s","a","a","a","a","a","a","a","s",
598 "s","a","a","a","a","a","a","a","s",
599 "s","a","a","a","a","a","a","a","s",
600 "s","a","a","a","a","a","a","a","s",
601 "s","a","a","a","a","a","a","a","s",
602 "s","a","a","a","a","a","a","a","s",
603 "s","a","a","a","a","a","a","a","s",
604 "s","s","s","s","s","s","s","s","s",
606 " "," "," "," "," "," "," "," ","<",
607 " ","C"," ","C"," ","C"," ","C"," ",
608 " "," "," "," "," "," "," "," "," ",
609 " ","C"," ","C"," ","C"," ","C"," ",
610 " "," "," "," "," "," "," "," "," ",
611 " ","C"," ","C"," ","C"," ","C"," ",
612 " "," "," "," "," "," "," "," "," ",
613 " ","C"," ","C"," ","C"," ","C"," ",
614 " "," "," "," "," "," "," "," ","<",
618 "S","S","S","S","S","S","S","S","S",
619 "s","1","s","1","s","1","s","1","s",
620 "S","S","S","S","S","S","S","S","S",
621 "s","1","s","1","s","1","s","1","s",
622 "S","S","S","S","S","S","S","S","S",
624 stype
= "desert_sandstone",
632 "S","s","s","s","s","s","s","s","S",
633 "s","S","s","s","s","s","s","S","s",
634 "s","s","S","S","S","S","S","s","s",
635 "s","s","S","s","s","s","S","s","s",
636 "s","s","S","s","s","s","S","s","s",
637 "s","s","S","s","s","s","S","s","s",
638 "s","s","S","S","S","S","S","s","s",
639 "s","S","s","s","s","s","s","S","s",
640 "S","s","s","s","s","s","s","s","S",
642 " "," "," "," "," "," "," "," "," ",
643 " "," "," "," "," "," "," "," "," ",
644 " "," "," "," "," "," "," "," "," ",
645 " "," "," "," "," "," "," "," "," ",
646 " "," "," "," ","<"," "," "," "," ",
647 " "," "," "," "," "," "," "," "," ",
648 " "," "," "," "," "," "," "," "," ",
649 " "," "," "," "," "," "," "," "," ",
650 " "," "," "," "," "," "," "," "," ",
652 "S","s","s","s","s","s","s","s","S",
653 "s","S","s","s","s","s","s","S","s",
654 "s","s","S","S","S","S","S","s","s",
655 "s","s","S","s","s","s","S","s","s",
656 "s","s","S","s","s","s","S","s","s",
657 "s","s","S","s","s","s","S","s","s",
658 "s","s","S","S","S","S","S","s","s",
659 "s","S","s","s","s","s","s","S","s",
660 "S","s","s","s","s","s","s","s","S",
663 "S","S","S","S","S","S","S","S","S",
664 "s","1","s","1","s","1","s","1","s",
665 "S","S","S","S","S","S","S","S","S",
666 "1","s","1","s","1","s","1","s","1",
667 "S","S","S","S","S","S","S","S","S",
678 " "," "," "," "," "," "," "," "," ",
679 " ","S","S","S"," ","S","S","S"," ",
680 " ","S"," "," "," "," "," ","S"," ",
681 " ","S"," "," "," "," "," ","S"," ",
682 " "," "," "," ","c",">"," "," "," ",
683 " ","S"," "," "," "," "," ","S"," ",
684 " ","S"," "," "," "," "," ","S"," ",
685 " ","S","S","S"," ","S","S","S"," ",
686 " "," "," "," "," "," "," "," "," ",
688 " "," "," "," "," "," "," "," "," ",
689 " ","S","S","S"," ","S","S","S"," ",
690 " ","S"," "," "," "," "," ","S"," ",
691 " ","S"," "," "," "," "," ","S"," ",
692 " "," "," "," ","c"," "," "," "," ",
693 " ","S"," "," "," "," "," ","S"," ",
694 " ","S"," "," "," "," "," ","S"," ",
695 " ","S","S","S"," ","S","S","S"," ",
696 " "," "," "," "," "," "," "," "," ",
698 " "," "," "," "," "," "," "," "," ",
699 " ","S","S","S"," ","S","S","S"," ",
700 " ","S"," "," "," "," "," ","S"," ",
701 " ","S"," "," "," "," "," ","S"," ",
702 " "," "," "," ","c"," "," "," "," ",
703 " ","S"," "," "," "," "," ","S"," ",
704 " ","S"," "," "," "," "," ","S"," ",
705 " ","S","S","S"," ","S","S","S"," ",
706 " "," "," "," "," "," "," "," "," ",
708 "s","s","s","s","s","s","s","s","s",
709 "s","S","S","S","S","S","S","S","s",
710 "s","S","s","s","s","s","s","S","s",
711 "s","S","s","s","s","s","s","S","s",
712 "s","S","s","s","s","s","s","S","s",
713 "s","S","s","s","s","s","s","S","s",
714 "s","S","s","s","s","s","s","S","s",
715 "s","S","S","S","S","S","S","S","c",
716 "s","s","s","s","s","s","s","s","s",
718 "S","S","S","S","S","S","S","S","S",
719 "S","S","S","S","v","S","S","S","S",
720 "S","S"," "," "," "," "," ","S","S",
721 "S","S"," "," "," "," "," ","S","S",
722 "S",">"," "," "," "," "," ","<","S",
723 "S","S"," "," "," "," "," ","S","S",
724 "S","S"," "," "," "," "," ","S","S",
725 "S","S","S","S","^","S","S","S","S",
726 "S","S","S","S","S","S","S","S","S",
728 "S","S","S","S","S","S","S","S","S",
729 "S","S","S","S","S","S","S","S","S",
730 "S","S"," "," "," "," "," ","S","S",
731 "S","S"," "," "," "," "," ","S","S",
732 "S","S"," "," "," "," "," ","S","S",
733 "S","S"," "," "," "," "," ","S","S",
734 "S","S"," "," "," "," "," ","S","S",
735 "S","S","S","S","S","S","S","S","S",
736 "S","S","S","S","S","S","S","S","S",
742 local layout_traps_template
= {
743 "S","S","S","S","S","S","S","S","S",
744 "?","?","?","?","?","?","?","?","S",
745 "?","?","?","?","?","?","?","?","S",
746 "?","?","?","?","?","?","?","?","S",
747 "?","?","?","?","?","?","?","?","S", -- << entrance on left side
748 "?","?","?","?","?","?","?","?","S",
749 "?","?","?","?","?","?","?","?","S",
750 "?","?","?","?","?","?","?","?","S",
751 "S","S","S","S","S","S","S","S","S"
754 local code_sandstone
= {
756 ["c"] = "default:sandstone",
757 ["s"] = "default:sandstone",
758 ["h"] = "default:sandstone",
759 ["S"] = "default:sandstonebrick",
760 ["1"] = "tsm_pyramids:deco_stone1",
761 ["2"] = "tsm_pyramids:deco_stone2",
762 ["3"] = "tsm_pyramids:deco_stone3",
763 ["^"] = "default:chest",
764 ["<"] = "default:chest",
765 [">"] = "default:chest",
766 ["v"] = "default:chest",
767 ["~"] = "default:lava_source",
768 ["t"] = "tsm_pyramids:trap",
769 ["C"] = "default:large_cactus_seedling",
770 ["a"] = "default:sand",
772 local code_desert_sandstone
= table.copy(code_sandstone
)
773 code_desert_sandstone
["c"] = "default:desert_sandstone"
774 code_desert_sandstone
["s"] = "default:desert_sandstone"
775 code_desert_sandstone
["h"] = "default:desert_sandstone"
776 code_desert_sandstone
["1"] = "tsm_pyramids:deco_stone4"
777 code_desert_sandstone
["2"] = "tsm_pyramids:deco_stone5"
778 code_desert_sandstone
["3"] = "tsm_pyramids:deco_stone6"
779 code_desert_sandstone
["S"] = "default:desert_sandstone_brick"
780 code_desert_sandstone
["t"] = "tsm_pyramids:desert_trap"
781 code_desert_sandstone
["a"] = "default:desert_sand"
783 local code_desert_stone
= table.copy(code_sandstone
)
784 code_desert_stone
["c"] = "default:desert_stone_block"
785 code_desert_stone
["s"] = "default:desert_stone_block"
786 code_desert_stone
["h"] = "default:desert_stone_block"
787 code_desert_stone
["1"] = "default:desert_stone_block"
788 code_desert_stone
["2"] = "default:desert_stone_block"
789 code_desert_stone
["3"] = "default:desert_stone_block"
790 code_desert_stone
["S"] = "default:desert_stonebrick"
791 code_desert_stone
["t"] = "air"
792 code_desert_stone
["a"] = "default:desert_sand"
794 local function replace(str
, iy
, code_table
, deco
, column_style
)
795 if iy
< 4 and (str
== "<" or str
== ">" or str
== "^" or str
== "v") then str
= " " end
797 local r
= math
.random(0,3)
803 elseif column_style
== 1 or column_style
== 2 then
804 if iy
== 0 and str
== "c" then str
= deco
[1] end
805 if iy
== 3 and str
== "c" then str
= deco
[2] end
806 elseif column_style
== 3 then
807 if iy
== 0 and str
== "c" then str
= deco
[1] end
808 if iy
== 2 and str
== "c" then str
= deco
[2] end
809 elseif column_style
== 4 then
810 if iy
== 2 and str
== "c" then str
= deco
[1] end
812 return code_table
[str
]
815 local function replace2(str
, iy
, depth
, code_table
)
817 -- Sandstone at the bottom-most layer
819 elseif iy
== depth
-1 then
820 -- Brick at the layer above
822 elseif iy
== 0 and str
== "~" then
823 -- Trap stones at the top layer
825 elseif iy
< depth
-3 and str
== "~" then
826 -- Air below the trap stones
829 -- Everything else is untouched (will stay pyramid material)
831 return code_table
[str
]
834 local function get_flat_index(x
, y
, width
)
835 return 1 + x
+ y
* width
838 local function rotate_layout_single(layout
, width
)
839 local size
= width
*width
840 local new_layout
= {}
843 local symbol
= layout
[get_flat_index((width
-1) - y
, x
, width
)]
845 if symbol
== "^" then
847 elseif symbol
== "<" then
849 elseif symbol
== "v" then
851 elseif symbol
== ">" then
854 new_layout
[get_flat_index(x
, y
, width
)] = symbol
860 local function rotate_layout(layout
, width
, rotations
)
861 local new_layout
= table.copy(layout
)
862 for r
=1, rotations
do
863 new_layout
= rotate_layout_single(new_layout
, width
)
868 -- pos: Position to spawn pyramid
869 -- stype: Sand type ("sandstone" or "desert")
870 -- room_id: Room layout identified (see list of rooms above)
871 -- rotations: Number of times to rotate the room (0-3)
872 function tsm_pyramids
.make_room(pos
, stype
, room_id
, rotations
)
873 local code_table
= code_sandstone
874 if stype
== "desert_sandstone" then
875 code_table
= code_desert_sandstone
876 elseif stype
== "desert_stone" then
877 code_table
= code_desert_stone
879 -- Select random deco block
880 local deco_ids
= {"1", "2", "3"}
883 local r
= math
.random(1, #deco_ids
)
884 table.insert(deco
, deco_ids
[r
])
885 table.remove(deco_ids
, r
)
887 local hole
= {x
=pos
.x
+7,y
=pos
.y
+5, z
=pos
.z
+7}
888 if room_id
== nil then
889 room_id
= math
.random(1, #room_types
)
892 if room_id
< 1 or room_id
> #room_types
then
893 return false, S("Incorrect room type ID: @1", room_id
)
895 local room
= table.copy(room_types
[room_id
])
898 if stype
== "desert_stone" then
901 column_style
= math
.random(0,4)
904 if room
.style
== "yrepeat" then
905 layout
= rotate_layout(room
.layout
, ROOM_WIDTH
, rotations
)
909 local n_str
= layout
[tonumber(ix
*9+iz
+1)]
913 elseif n_str
== ">" then
915 elseif n_str
== "^" then
917 elseif n_str
== "v" then
920 local cpos
= {x
=hole
.x
+ix
,y
=hole
.y
-iy
,z
=hole
.z
+iz
}
921 local nn
= replace(n_str
, iy
, code_table
, deco
, column_style
)
922 minetest
.set_node(cpos
, {name
=nn
, param2
=p2
})
923 if nn
== "default:chest" then
924 table.insert(chests
, cpos
)
929 elseif room
.style
== "stacked" then
930 -- TODO: Implement wall designs
931 -- TODO: Fix room height settings
932 local layout_list
= room
.layout
934 local layout_offset
= room
.layout_offset
935 local layout_height
= room
.layout_height
936 if not layout_offset
then
939 if not layout_height
then
942 for iy
=0,layout_height
-1,1 do
944 if layout_list
[layout_height
-iy
] then
945 layout
= rotate_layout(layout_list
[layout_height
-iy
], ROOM_WIDTH
, rotations
)
951 n_str
= layout
[tonumber(ix
*9+iz
+1)]
958 elseif n_str
== ">" then
960 elseif n_str
== "^" then
962 elseif n_str
== "v" then
965 local cpos
= {x
=hole
.x
+ix
,y
=hole
.y
-iy
+layout_offset
,z
=hole
.z
+iz
}
966 local nn
= code_table
[n_str
]
967 minetest
.set_node(cpos
, {name
=nn
, param2
=p2
})
968 if nn
== "default:chest" then
969 table.insert(chests
, cpos
)
975 minetest
.log("error", "Invalid pyramid room style! room type ID="..r
)
977 local sanded
= room
.flood_sand
~= false and stype
~= "desert_stone" and math
.random(1,8) == 1
979 -- Make at least 8 attempts to fill chests
983 tsm_pyramids
.fill_chest(chests
[c
], stype
, sanded
)
989 tsm_pyramids
.make_traps(pos
, stype
, rotations
, layout
)
992 tsm_pyramids
.flood_sand(pos
, stype
)
994 return true, nil, sanded
997 local shuffle_traps
= function(chance
, layout_room
)
998 layout_traps
= table.copy(layout_traps_template
)
999 for a
=1, #layout_traps
do
1000 -- Delete trap if this space of the room is occupied
1001 if layout_room
[a
] ~= " " then
1002 layout_traps
[a
] = "S"
1003 -- Randomly turn tile into a trap, or not
1004 elseif layout_traps
[a
] == "?" then
1005 -- percentage for a trap
1006 if math
.random(1,100) <= chance
then
1007 layout_traps
[a
] = "~"
1009 layout_traps
[a
] = "S"
1015 function tsm_pyramids
.make_traps(pos
, stype
, rotations
, layout_room
)
1016 local code_table
= code_sandstone
1017 if stype
== "desert_sandstone" then
1018 code_table
= code_desert_sandstone
1019 elseif stype
== "desert_stone" then
1020 code_table
= code_desert_stone
1022 shuffle_traps(math
.random(10,100), layout_room
)
1023 local hole
= {x
=pos
.x
+7,y
=pos
.y
, z
=pos
.z
+7}
1024 local layout
= rotate_layout(layout_traps
, ROOM_WIDTH
, rotations
)
1025 -- Depth is total depth of trap area:
1026 -- * top layer with trap stones
1027 -- * followed by air layers
1028 -- * followed by 2 layer of lava
1029 -- * and 2 layers of sandstone/brick at the bottom (to prevent lava escaping)
1030 -- The depth of air between trap stones and lava layer is <depth> - 4
1032 local wmin
, wmax
= -1,9
1034 for ix
=wmin
,wmax
,1 do
1035 for iz
=wmin
,wmax
,1 do
1037 if ix
== wmin
or ix
== wmax
or iz
== wmin
or iz
== wmax
then
1038 -- Walls around room
1040 n_str
= code_table
["s"]
1042 n_str
= code_table
["S"]
1044 minetest
.set_node({x
=hole
.x
+ix
,y
=hole
.y
-iy
,z
=hole
.z
+iz
}, {name
=n_str
})
1047 n_str
= layout
[tonumber(ix
*9+iz
+1)]
1048 minetest
.set_node({x
=hole
.x
+ix
,y
=hole
.y
-iy
,z
=hole
.z
+iz
}, {name
=replace2(n_str
, iy
, depth
, code_table
)})
1055 function tsm_pyramids
.flood_sand(pos
, stype
)
1056 local set_to_sand
= {}
1057 local nn
= "default:sand"
1058 if stype
== "desert_sandstone" or stype
== "desert_stone" then
1059 nn
= "default:desert_sand"
1061 local hole
= {x
=pos
.x
+7,y
=pos
.y
+1, z
=pos
.z
+7}
1062 local maxh
= math
.random(1,4)
1063 local chance
= math
.random(1,7)
1066 if math
.random(1,chance
) == 1 then
1067 local h
= math
.random(1,maxh
)
1069 local p
= {x
=hole
.x
+ix
,y
=hole
.y
+iy
,z
=hole
.z
+iz
}
1070 if minetest
.get_node(p
).name
== "air" then
1071 table.insert(set_to_sand
, p
)
1077 minetest
.bulk_set_node(set_to_sand
, {name
=nn
})