Reacivate desert stone pyramids ... for now
[minetest_pyramids/tsm_pyramids.git] / room.lua
blobbdf39187be92d10ae52ce7557df8e00f8ab5677c
1 local S = minetest.get_translator("tsm_pyramids")
3 -- ROOM LAYOUTS
5 local ROOM_WIDTH = 9
7 local room_types = {
8 -- Pillar room
10 style = "yrepeat",
11 layout = {
12 " "," "," "," "," "," "," "," "," ",
13 " ","^"," ","^"," ","^"," ","^"," ",
14 " ","c"," ","c"," ","c"," ","c"," ",
15 " "," "," "," "," "," "," "," "," ",
16 " "," "," "," "," "," "," "," "," ",
17 " "," "," "," "," "," "," "," "," ",
18 " ","c"," ","c"," ","c"," ","c"," ",
19 " ","v"," ","v"," ","v"," ","v"," ",
20 " "," "," "," "," "," "," "," "," "
22 traps = true,
24 -- Hieroglyph walls
26 style = "yrepeat",
27 layout = {
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"
39 -- 4 large pillars
41 style = "yrepeat",
42 layout = {
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 " "," "," "," ","^"," "," "," "," "
54 -- hidden room
56 style = "yrepeat",
57 layout = {
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 " "," "," "," "," "," "," "," "," "
69 -- spiral 1
71 style = "yrepeat",
72 layout = {
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"," "," "," "," "," "," "," "
84 -- spiral 2
86 style = "yrepeat",
87 layout = {
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 " "," "," "," "," "," "," "," "," "
99 -- pillar mania
101 style = "yrepeat",
102 layout = {
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 " "," ","^"," ","^"," ","^"," ","^",
113 --traps = true,
115 -- plusses
117 style = "yrepeat",
118 layout = {
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",
129 --traps = true,
131 -- diamond
133 style = "yrepeat",
134 layout = {
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",
145 --traps = true,
147 -- square
149 style = "yrepeat",
150 layout = {
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 " "," "," "," "," "," "," "," "," ",
162 -- hallway 2
164 style = "yrepeat",
165 layout = {
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",">"," "," "," "," ",
177 -- hallway 3
179 style = "yrepeat",
180 layout = {
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"," "," "," "," ",
192 -- hallway 4
194 style = "yrepeat",
195 layout = {
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",
207 -- tiny
209 style = "yrepeat",
210 layout = {
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","^",
222 -- small
224 style = "yrepeat",
225 layout = {
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",
237 -- small 2
239 style = "yrepeat",
240 layout = {
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 " "," "," "," "," "," "," "," "," ",
252 -- big pillar
254 style = "yrepeat",
255 layout = {
256 " "," "," "," "," "," "," "," "," ",
257 " "," "," "," "," "," "," "," "," ",
258 " "," "," "," ","^"," "," "," "," ",
259 " "," "," ","c","c","c"," "," "," ",
260 " "," ","<","c","S","c",">"," "," ",
261 " "," "," ","c","c","c"," "," "," ",
262 " "," "," "," ","v"," "," "," "," ",
263 " "," "," "," "," "," "," "," "," ",
264 " "," "," "," "," "," "," "," "," ",
266 --traps = true,
268 -- pacman
270 style = "yrepeat",
271 layout = {
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 " "," "," "," "," "," "," "," "," ",
283 -- the wall
285 style = "yrepeat",
286 layout = {
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"," ","<",
298 -- split
300 style = "yrepeat",
301 layout = {
302 " "," "," "," "," "," "," "," "," ",
303 " "," "," "," "," "," "," "," "," ",
304 " "," "," "," "," "," "," "," "," ",
305 " "," "," ","^"," ","^"," "," "," ",
306 " "," "," ","c"," ","c"," "," "," ",
307 " "," "," ","v"," ","v"," "," "," ",
308 " "," "," "," "," "," "," "," "," ",
309 " "," "," "," "," "," "," "," "," ",
310 " "," "," "," "," "," "," "," "," ",
313 -- 4 small pillars
315 style = "yrepeat",
316 layout = {
317 " "," "," "," "," "," "," "," "," ",
318 " "," "," "," ","^"," "," "," "," ",
319 " "," "," "," ","c"," "," "," "," ",
320 " "," "," "," "," "," "," "," "," ",
321 " ","<","c"," "," "," ","c",">"," ",
322 " "," "," "," "," "," "," "," "," ",
323 " "," "," "," ","c"," "," "," "," ",
324 " "," "," "," ","v"," "," "," "," ",
325 " "," "," "," "," "," "," "," "," ",
328 -- 6 pillars
330 style = "yrepeat",
331 layout = {
332 " "," "," "," "," "," "," "," "," ",
333 " "," ","^"," ","^"," ","^"," "," ",
334 " "," ","c"," ","c"," ","c"," "," ",
335 " "," "," "," "," "," "," "," "," ",
336 " "," "," "," "," "," "," "," "," ",
337 " "," "," "," "," "," "," "," "," ",
338 " "," ","c"," ","c"," ","c"," "," ",
339 " "," ","v"," ","v"," ","v"," "," ",
340 " "," "," "," "," "," "," "," "," ",
342 traps = true,
344 -- stripes
346 style = "yrepeat",
347 layout = {
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","^",
359 -- inside
361 style = "yrepeat",
362 layout = {
363 " "," "," "," "," "," "," "," "," ",
364 " ","c"," "," "," "," "," ","c"," ",
365 " "," "," "," "," "," "," "," "," ",
366 " "," "," ","c","S","c"," "," "," ",
367 " "," "," ","S",">"," "," "," "," ",
368 " "," "," ","c","S","c"," "," "," ",
369 " "," "," "," "," "," "," "," "," ",
370 " ","c"," "," "," "," "," ","c"," ",
371 " "," "," "," "," "," "," "," "," ",
374 -- 1 chest
376 style = "yrepeat",
377 layout = {
378 " "," "," "," "," "," "," "," "," ",
379 " "," "," "," "," "," "," "," "," ",
380 " "," "," "," "," "," "," "," "," ",
381 " "," "," "," "," "," "," "," "," ",
382 " "," "," "," ","<"," "," "," "," ",
383 " "," "," "," "," "," "," "," "," ",
384 " "," "," "," "," "," "," "," "," ",
385 " "," "," "," "," "," "," "," "," ",
386 " "," "," "," "," "," "," "," "," ",
389 -- 2 chests
391 style = "yrepeat",
392 layout = {
393 " "," "," "," "," "," "," "," "," ",
394 " "," "," "," "," "," "," "," ","<",
395 " "," "," "," "," "," "," "," "," ",
396 " "," "," "," "," "," "," "," "," ",
397 " "," "," "," "," "," "," "," "," ",
398 " "," "," "," "," "," "," "," "," ",
399 " "," "," "," "," "," "," "," "," ",
400 " "," "," "," "," "," "," "," ","<",
401 " "," "," "," "," "," "," "," "," ",
403 traps = true,
405 -- X
407 style = "yrepeat",
408 layout = {
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",
420 -- split 2
422 style = "yrepeat",
423 layout = {
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",
435 -- split 3
437 style = "yrepeat",
438 layout = {
439 " "," "," "," "," "," "," "," "," ",
440 " "," "," "," "," "," "," "," "," ",
441 " "," "," "," "," "," "," "," "," ",
442 " ","^"," ","^"," ","^"," ","^"," ",
443 " ","c"," ","c"," ","c"," ","c"," ",
444 " ","v"," ","v"," ","v"," ","v"," ",
445 " "," "," "," "," "," "," "," "," ",
446 " "," "," "," "," "," "," "," "," ",
447 " "," "," "," "," "," "," "," "," ",
450 -- diamond 2
452 style = "yrepeat",
453 layout = {
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",
465 -- ultra pillars
467 style = "yrepeat",
468 layout = {
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 " "," "," "," "," "," "," "," "," ",
480 -- vstripes
482 style = "yrepeat",
483 layout = {
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"," "," "," "," "," "," "," "," ",
495 -- sides
497 style = "yrepeat",
498 layout = {
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",
509 traps = true,
511 -- 9 pillars
513 style = "yrepeat",
514 layout = {
515 " "," "," "," "," "," "," "," "," ",
516 " "," ","^"," ","^"," ","^"," "," ",
517 " "," ","c"," ","c"," ","c"," "," ",
518 " "," "," "," "," "," "," "," "," ",
519 " "," ","c"," ","c"," ","c"," "," ",
520 " "," "," "," "," "," "," "," "," ",
521 " "," ","c"," ","c"," ","c"," "," ",
522 " "," ","v"," ","v"," ","v"," "," ",
523 " "," "," "," "," "," "," "," "," ",
525 --traps = true,
527 -- Ankh statue
529 style = "stacked",
530 layout = { {
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",
582 wall = {
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",
590 -- Cactus room
592 style = "stacked",
593 layout_offset = -1,
594 layout_height = 5,
595 layout = {{
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 " "," "," "," "," "," "," "," ","<",
617 wall = {
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",
626 -- Sun room
628 style = "stacked",
629 layout_offset = 0,
630 layout_height = 8,
631 layout = {{
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",
662 wall = {
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",
669 stype = "sandstone",
670 open_roof = true,
672 -- Attic
674 style = "stacked",
675 layout_height = 6,
676 layout_offset = 1,
677 layout = { {
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",
741 local layout_traps
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 = {
755 [" "] = "air",
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
796 if str == "h" then
797 local r = math.random(0,3)
798 if r > 0 then
799 str = deco[r]
800 else
801 str = "c"
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)
816 if iy == depth then
817 -- Sandstone at the bottom-most layer
818 str = "s"
819 elseif iy == depth-1 then
820 -- Brick at the layer above
821 str = "S"
822 elseif iy == 0 and str == "~" then
823 -- Trap stones at the top layer
824 str = "t"
825 elseif iy < depth-3 and str == "~" then
826 -- Air below the trap stones
827 str = " "
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 = {}
841 for x=0, width-1 do
842 for y=0, width-1 do
843 local symbol = layout[get_flat_index((width-1) - y, x, width)]
844 -- Rotate chest
845 if symbol == "^" then
846 symbol = "<"
847 elseif symbol == "<" then
848 symbol = "v"
849 elseif symbol == "v" then
850 symbol = ">"
851 elseif symbol == ">" then
852 symbol = "^"
854 new_layout[get_flat_index(x, y, width)] = symbol
857 return new_layout
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)
865 return new_layout
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"}
881 local deco = {}
882 for i=1, 3 do
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)
891 local room
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])
896 local chests = {}
897 local column_style
898 if stype == "desert_stone" then
899 column_style = 0
900 else
901 column_style = math.random(0,4)
903 local layout
904 if room.style == "yrepeat" then
905 layout = rotate_layout(room.layout, ROOM_WIDTH, rotations)
906 for iy=0,4,1 do
907 for ix=0,8,1 do
908 for iz=0,8,1 do
909 local n_str = layout[tonumber(ix*9+iz+1)]
910 local p2 = 0
911 if n_str == "<" then
912 p2 = 0
913 elseif n_str == ">" then
914 p2 = 2
915 elseif n_str == "^" then
916 p2 = 1
917 elseif n_str == "v" then
918 p2 = 3
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
933 local layout
934 local layout_offset = room.layout_offset
935 local layout_height = room.layout_height
936 if not layout_offset then
937 layout_offset = 0
939 if not layout_height then
940 layout_height = 5
942 for iy=0,layout_height-1,1 do
943 layout = nil
944 if layout_list[layout_height-iy] then
945 layout = rotate_layout(layout_list[layout_height-iy], ROOM_WIDTH, rotations)
947 for ix=0,8,1 do
948 for iz=0,8,1 do
949 local n_str
950 if layout then
951 n_str = layout[tonumber(ix*9+iz+1)]
952 else
953 n_str = " "
955 local p2 = 0
956 if n_str == "<" then
957 p2 = 0
958 elseif n_str == ">" then
959 p2 = 2
960 elseif n_str == "^" then
961 p2 = 1
962 elseif n_str == "v" then
963 p2 = 3
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)
974 else
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
978 if #chests > 0 then
979 -- Make at least 8 attempts to fill chests
980 local filled = 0
981 while filled < 8 do
982 for c=1, #chests do
983 tsm_pyramids.fill_chest(chests[c], stype, sanded)
984 filled = filled + 1
988 if room.traps then
989 tsm_pyramids.make_traps(pos, stype, rotations, layout)
991 if sanded then
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] = "~"
1008 else
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
1031 local depth = 7
1032 local wmin, wmax = -1,9
1033 for iy=0,depth,1 do
1034 for ix=wmin,wmax,1 do
1035 for iz=wmin,wmax,1 do
1036 local n_str
1037 if ix == wmin or ix == wmax or iz == wmin or iz == wmax then
1038 -- Walls around room
1039 if iy == depth then
1040 n_str = code_table["s"]
1041 else
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})
1045 else
1046 -- Walls below room
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)
1064 for ix=0,8,1 do
1065 for iz=0,8,1 do
1066 if math.random(1,chance) == 1 then
1067 local h = math.random(1,maxh)
1068 for iy=0,h,1 do
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})