veloren_world/site2/plot/
sea_chapel.rs

1use super::*;
2use crate::{
3    CONFIG, Land,
4    site2::gen::{PrimitiveTransform, spiral_staircase},
5    util::{DIAGONALS, NEIGHBORS, RandomField, sampler::Sampler},
6};
7use common::{
8    generation::EntityInfo,
9    terrain::{Block, BlockKind, SpriteKind},
10};
11
12use rand::prelude::*;
13use std::{
14    f32::consts::{PI, TAU},
15    sync::Arc,
16};
17
18use vek::*;
19
20pub struct SeaChapel {
21    pub(crate) center: Vec2<i32>,
22    pub(crate) alt: i32,
23}
24impl SeaChapel {
25    pub fn generate(_land: &Land, _rng: &mut impl Rng, site: &Site, tile_aabr: Aabr<i32>) -> Self {
26        let bounds = Aabr {
27            min: site.tile_wpos(tile_aabr.min),
28            max: site.tile_wpos(tile_aabr.max),
29        };
30        let center = bounds.center();
31        Self {
32            center,
33            alt: CONFIG.sea_level as i32,
34        }
35    }
36
37    pub fn spawn_rules(&self, wpos: Vec2<i32>) -> SpawnRules {
38        SpawnRules {
39            waypoints: false,
40            trees: wpos.distance_squared(self.center) > 100_i32.pow(2),
41            ..SpawnRules::default()
42        }
43    }
44}
45
46impl Structure for SeaChapel {
47    #[cfg(feature = "use-dyn-lib")]
48    const UPDATE_FN: &'static [u8] = b"render_seachapel\0";
49
50    #[cfg_attr(feature = "be-dyn-lib", export_name = "render_seachapel")]
51    fn render_inner(&self, _site: &Site, _land: &Land, painter: &Painter) {
52        let base = self.alt + 1;
53        let center = self.center;
54        let diameter = 54;
55        let variant = center.with_z(base);
56        let mut rng = thread_rng();
57        // Fills
58        let (top, washed) = match (RandomField::new(0).get(variant)) % 2 {
59            0 => {
60                //color_scheme_1 blue
61                (
62                    Fill::Brick(BlockKind::Rock, Rgb::new(0, 51, 209), 24),
63                    Fill::Brick(BlockKind::Rock, Rgb::new(24, 115, 242), 12),
64                )
65            },
66            _ => {
67                //color_scheme_2 turquoise
68                (
69                    Fill::Brick(BlockKind::Rock, Rgb::new(0, 55, 71), 24),
70                    Fill::Brick(BlockKind::Rock, Rgb::new(2, 106, 129), 24),
71                )
72            },
73        };
74        let water = Fill::Block(Block::new(BlockKind::Water, Rgb::zero()));
75        let rope = Fill::Block(Block::air(SpriteKind::Rope));
76        let ropefix1 = Fill::Brick(BlockKind::Rock, Rgb::new(80, 75, 35), 24);
77        let ropefix2 = Fill::Brick(BlockKind::Rock, Rgb::new(172, 172, 172), 4);
78        let white = Fill::Brick(BlockKind::Rock, Rgb::new(202, 202, 202), 24);
79        let floor_blue = Fill::Sampling(Arc::new(|variant| {
80            Some(
81                match (RandomField::new(0).get(Vec3::new(variant.z, variant.x, variant.y))) % 9 {
82                    0 => Block::new(BlockKind::Rock, Rgb::new(38, 118, 179)),
83                    1 => Block::new(BlockKind::Rock, Rgb::new(34, 52, 126)),
84                    2 => Block::new(BlockKind::Rock, Rgb::new(69, 179, 228)),
85                    3 => Block::new(BlockKind::Rock, Rgb::new(32, 45, 113)),
86                    4 => Block::new(BlockKind::Rock, Rgb::new(252, 253, 248)),
87                    5 => Block::new(BlockKind::Rock, Rgb::new(40, 106, 167)),
88                    6 => Block::new(BlockKind::Rock, Rgb::new(69, 182, 240)),
89                    7 => Block::new(BlockKind::Rock, Rgb::new(69, 182, 240)),
90                    _ => Block::new(BlockKind::Rock, Rgb::new(240, 240, 238)),
91                },
92            )
93        }));
94        let floor_white = white.clone();
95        let floor_color = match (RandomField::new(0).get(center.with_z(base - 1))) % 2 {
96            0 => floor_white,
97            _ => floor_blue,
98        };
99        let gold = Fill::Brick(BlockKind::GlowingRock, Rgb::new(245, 232, 0), 10);
100        let gold_chain = Fill::Block(Block::air(SpriteKind::SeaDecorChain));
101        let gold_decor = Fill::Block(Block::air(SpriteKind::SeaDecorBlock));
102        let window_ver = Fill::Block(Block::air(SpriteKind::SeaDecorWindowVer));
103        let window_ver2 = Fill::Block(
104            Block::air(SpriteKind::SeaDecorWindowVer)
105                .with_ori(2)
106                .unwrap(),
107        );
108        let window_hor = Fill::Block(Block::air(SpriteKind::SeaDecorWindowHor));
109        let glass_barrier = Fill::Block(Block::air(SpriteKind::GlassBarrier));
110        let glass_keyhole = Fill::Block(Block::air(SpriteKind::GlassKeyhole));
111        // random exit from water basin to side building
112        let mut connect_gate_types = vec![
113            SpriteKind::GlassBarrier,
114            SpriteKind::SeaDecorWindowHor,
115            SpriteKind::SeaDecorWindowHor,
116            SpriteKind::SeaDecorWindowHor,
117        ];
118        let sprite_fill = Fill::Sampling(Arc::new(|center| {
119            Some(match (RandomField::new(0).get(center)) % 200 {
120                0 => Block::air(SpriteKind::CoralChest),
121                1..=5 => Block::air(SpriteKind::SeaDecorPillar),
122                6..=25 => Block::air(SpriteKind::SeashellLantern),
123                _ => Block::new(BlockKind::Air, Rgb::new(0, 0, 0)),
124            })
125        }));
126        let pos_var = RandomField::new(0).get(center.with_z(base)) % 5;
127        let radius = diameter / 2; //8 + pos_var;
128        let tubes = 7.0 + pos_var as f32;
129        let phi = TAU / tubes;
130        let up = diameter / 16;
131        // chapel main room
132        painter
133            .sphere(Aabb {
134                min: (center - (diameter / 2)).with_z(base - (diameter / 8)),
135                max: (center + (diameter / 2)).with_z(base - (diameter / 8) + diameter),
136            })
137            .fill(white.clone());
138        let main_upper_half = painter.aabb(Aabb {
139            min: (center - (diameter / 2)).with_z(base - (diameter / 8) + (diameter / 2)),
140            max: (center + (diameter / 2)).with_z(base - (diameter / 8) + diameter),
141        });
142        // chapel 1st washed out top
143        painter
144            .sphere(Aabb {
145                min: (center - (diameter / 2)).with_z(base - (diameter / 8)),
146                max: (center + (diameter / 2)).with_z(base - (diameter / 8) + diameter),
147            })
148            .intersect(main_upper_half)
149            .fill(washed.clone());
150        // chapel 1st top
151        painter
152            .sphere(Aabb {
153                min: (center - (diameter / 2) + 1).with_z(base - (diameter / 8) + 1),
154                max: (center + (diameter / 2)).with_z(base - (diameter / 8) + diameter),
155            })
156            .intersect(main_upper_half)
157            .fill(top.clone());
158        // chapel main room gold ring
159        painter
160            .cylinder(Aabb {
161                min: (center - (diameter / 2)).with_z(base - (diameter / 8) + (diameter / 2) + 1),
162                max: (center + (diameter / 2)).with_z(base - (diameter / 8) + (diameter / 2) + 2),
163            })
164            .fill(gold.clone());
165
166        // chapel top room
167        painter
168            .sphere(Aabb {
169                min: (center - (diameter / 3))
170                    .with_z(base - (diameter / 8) + diameter - (diameter / 3)),
171                max: (center + (diameter / 3))
172                    .with_z(base - (diameter / 8) + diameter + (diameter / 3)),
173            })
174            .fill(white.clone());
175        let small_upper_half = painter.aabb(Aabb {
176            min: (center - (diameter / 3)).with_z(base - (diameter / 8) + diameter),
177            max: (center + (diameter / 3))
178                .with_z(base - (diameter / 8) + diameter + (diameter / 3)),
179        });
180        // chapel small washed out top
181        painter
182            .sphere(Aabb {
183                min: (center - (diameter / 3))
184                    .with_z(base - (diameter / 8) + diameter - (diameter / 3)),
185                max: (center + (diameter / 3))
186                    .with_z(base - (diameter / 8) + diameter + (diameter / 3)),
187            })
188            .intersect(small_upper_half)
189            .fill(washed.clone());
190        // chapel small top
191        painter
192            .sphere(Aabb {
193                min: (center - (diameter / 3) + 1)
194                    .with_z(base - (diameter / 8) + diameter - (diameter / 3) + 1),
195                max: (center + (diameter / 3))
196                    .with_z(base - (diameter / 8) + diameter + (diameter / 3)),
197            })
198            .intersect(small_upper_half)
199            .fill(top.clone());
200        // chapel small top  gold ring
201        painter
202            .cylinder(Aabb {
203                min: (center - (diameter / 3)).with_z(base - (diameter / 8) + diameter + 1),
204                max: (center + (diameter / 3)).with_z(base - (diameter / 8) + diameter + 2),
205            })
206            .fill(gold.clone());
207        // clear chapel top room
208        painter
209            .sphere(Aabb {
210                min: (center - (diameter / 3) + 1)
211                    .with_z(base - (diameter / 8) + diameter - (diameter / 3) + 1),
212                max: (center + (diameter / 3) - 1)
213                    .with_z(base - (diameter / 8) + diameter + (diameter / 3) - 1),
214            })
215            .clear();
216
217        // chapel gold top emblem
218        let emblem_4 = painter.aabb(Aabb {
219            min: Vec3::new(
220                center.x - 7,
221                center.y - 1,
222                base - (diameter / 8) + diameter + (diameter / 3) + 9,
223            ),
224            max: Vec3::new(
225                center.x + 7,
226                center.y + 1,
227                base - (diameter / 8) + diameter + (diameter / 3) + 11,
228            ),
229        });
230        emblem_4.fill(gold.clone());
231        let emblem_4_clear = painter.aabb(Aabb {
232            min: Vec3::new(
233                center.x - 3,
234                center.y - 1,
235                base - (diameter / 8) + diameter + (diameter / 3) + 9,
236            ),
237            max: Vec3::new(
238                center.x + 3,
239                center.y + 1,
240                base - (diameter / 8) + diameter + (diameter / 3) + 11,
241            ),
242        });
243        emblem_4_clear.clear();
244        emblem_4
245            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
246            .fill(gold.clone());
247        emblem_4_clear
248            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
249            .clear();
250
251        let emblem_5 = painter.aabb(Aabb {
252            min: Vec3::new(
253                center.x - 9,
254                center.y - 1,
255                base - (diameter / 8) + diameter + (diameter / 3) + 11,
256            ),
257            max: Vec3::new(
258                center.x + 9,
259                center.y + 1,
260                base - (diameter / 8) + diameter + (diameter / 3) + 13,
261            ),
262        });
263        emblem_5.fill(gold.clone());
264        let emblem_5_clear = painter.aabb(Aabb {
265            min: Vec3::new(
266                center.x - 5,
267                center.y - 1,
268                base - (diameter / 8) + diameter + (diameter / 3) + 11,
269            ),
270            max: Vec3::new(
271                center.x + 5,
272                center.y + 1,
273                base - (diameter / 8) + diameter + (diameter / 3) + 13,
274            ),
275        });
276        emblem_5_clear.clear();
277        emblem_5
278            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
279            .fill(gold.clone());
280        emblem_5_clear
281            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
282            .clear();
283        let emblem_6 = painter.aabb(Aabb {
284            min: Vec3::new(
285                center.x - 11,
286                center.y - 1,
287                base - (diameter / 8) + diameter + (diameter / 3) + 13,
288            ),
289            max: Vec3::new(
290                center.x + 11,
291                center.y + 1,
292                base - (diameter / 8) + diameter + (diameter / 3) + 17,
293            ),
294        });
295        emblem_6.fill(gold.clone());
296        let emblem_6_clear = painter.aabb(Aabb {
297            min: Vec3::new(
298                center.x - 7,
299                center.y - 1,
300                base - (diameter / 8) + diameter + (diameter / 3) + 13,
301            ),
302            max: Vec3::new(
303                center.x + 7,
304                center.y + 1,
305                base - (diameter / 8) + diameter + (diameter / 3) + 17,
306            ),
307        });
308        emblem_6_clear.clear();
309        emblem_6
310            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
311            .fill(gold.clone());
312        emblem_6_clear
313            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
314            .clear();
315        let emblem_7 = painter.aabb(Aabb {
316            min: Vec3::new(
317                center.x - 11,
318                center.y - 1,
319                base - (diameter / 8) + diameter + (diameter / 3) + 13,
320            ),
321            max: Vec3::new(
322                center.x + 11,
323                center.y + 1,
324                base - (diameter / 8) + diameter + (diameter / 3) + 17,
325            ),
326        });
327        emblem_7.fill(gold.clone());
328        let emblem_7_clear = painter.aabb(Aabb {
329            min: Vec3::new(
330                center.x - 5,
331                center.y - 1,
332                base - (diameter / 8) + diameter + (diameter / 3) + 17,
333            ),
334            max: Vec3::new(
335                center.x + 5,
336                center.y + 1,
337                base - (diameter / 8) + diameter + (diameter / 3) + 19,
338            ),
339        });
340        emblem_7_clear.clear();
341        emblem_7
342            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
343            .fill(gold.clone());
344        emblem_7_clear
345            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
346            .clear();
347
348        let emblem_8 = painter.aabb(Aabb {
349            min: Vec3::new(
350                center.x - 9,
351                center.y - 1,
352                base - (diameter / 8) + diameter + (diameter / 3) + 19,
353            ),
354            max: Vec3::new(
355                center.x + 9,
356                center.y + 1,
357                base - (diameter / 8) + diameter + (diameter / 3) + 21,
358            ),
359        });
360        emblem_8.fill(gold.clone());
361        let emblem_8_clear = painter.aabb(Aabb {
362            min: Vec3::new(
363                center.x - 3,
364                center.y - 1,
365                base - (diameter / 8) + diameter + (diameter / 3) + 19,
366            ),
367            max: Vec3::new(
368                center.x + 3,
369                center.y + 1,
370                base - (diameter / 8) + diameter + (diameter / 3) + 21,
371            ),
372        });
373        emblem_8_clear.clear();
374        emblem_8
375            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
376            .fill(gold.clone());
377        emblem_8_clear
378            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
379            .clear();
380        let emblem_9 = painter.aabb(Aabb {
381            min: Vec3::new(
382                center.x - 11,
383                center.y - 1,
384                base - (diameter / 8) + diameter + (diameter / 3) + 21,
385            ),
386            max: Vec3::new(
387                center.x + 11,
388                center.y + 1,
389                base - (diameter / 8) + diameter + (diameter / 3) + 23,
390            ),
391        });
392        emblem_9.fill(gold.clone());
393        let emblem_9_clear = painter.aabb(Aabb {
394            min: Vec3::new(
395                center.x - 7,
396                center.y - 1,
397                base - (diameter / 8) + diameter + (diameter / 3) + 21,
398            ),
399            max: Vec3::new(
400                center.x + 7,
401                center.y + 1,
402                base - (diameter / 8) + diameter + (diameter / 3) + 23,
403            ),
404        });
405        emblem_9_clear.clear();
406        emblem_9
407            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
408            .fill(gold.clone());
409        emblem_9_clear
410            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
411            .clear();
412        let emblem_10 = painter.aabb(Aabb {
413            min: Vec3::new(
414                center.x - 11,
415                center.y - 1,
416                base - (diameter / 8) + diameter + (diameter / 3) + 23,
417            ),
418            max: Vec3::new(
419                center.x + 11,
420                center.y + 1,
421                base - (diameter / 8) + diameter + (diameter / 3) + 25,
422            ),
423        });
424        emblem_10.fill(gold.clone());
425        let emblem_10_clear = painter.aabb(Aabb {
426            min: Vec3::new(
427                center.x - 5,
428                center.y - 1,
429                base - (diameter / 8) + diameter + (diameter / 3) + 23,
430            ),
431            max: Vec3::new(
432                center.x + 5,
433                center.y + 1,
434                base - (diameter / 8) + diameter + (diameter / 3) + 25,
435            ),
436        });
437        emblem_10_clear.clear();
438        emblem_10
439            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
440            .fill(gold.clone());
441        emblem_10_clear
442            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
443            .clear();
444        let emblem_11 = painter.aabb(Aabb {
445            min: Vec3::new(
446                center.x - 9,
447                center.y - 1,
448                base - (diameter / 8) + diameter + (diameter / 3) + 25,
449            ),
450            max: Vec3::new(
451                center.x + 9,
452                center.y + 1,
453                base - (diameter / 8) + diameter + (diameter / 3) + 27,
454            ),
455        });
456        emblem_11.fill(gold.clone());
457        let emblem_11_clear = painter.aabb(Aabb {
458            min: Vec3::new(
459                center.x - 3,
460                center.y - 1,
461                base - (diameter / 8) + diameter + (diameter / 3) + 25,
462            ),
463            max: Vec3::new(
464                center.x + 3,
465                center.y + 1,
466                base - (diameter / 8) + diameter + (diameter / 3) + 27,
467            ),
468        });
469        emblem_11_clear.clear();
470        emblem_11
471            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
472            .fill(gold.clone());
473        emblem_11_clear
474            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
475            .clear();
476
477        let emblem_12 = painter.aabb(Aabb {
478            min: Vec3::new(
479                center.x - 5,
480                center.y - 1,
481                base - (diameter / 8) + diameter + (diameter / 3) + 27,
482            ),
483            max: Vec3::new(
484                center.x + 5,
485                center.y + 1,
486                base - (diameter / 8) + diameter + (diameter / 3) + 29,
487            ),
488        });
489        emblem_12.fill(gold.clone());
490        let emblem_12_clear = painter.aabb(Aabb {
491            min: Vec3::new(
492                center.x - 3,
493                center.y - 1,
494                base - (diameter / 8) + diameter + (diameter / 3) + 27,
495            ),
496            max: Vec3::new(
497                center.x + 3,
498                center.y + 1,
499                base - (diameter / 8) + diameter + (diameter / 3) + 29,
500            ),
501        });
502        emblem_12_clear.clear();
503        emblem_12
504            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
505            .fill(gold.clone());
506        emblem_12_clear
507            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
508            .clear();
509        let emblem_13 = painter.aabb(Aabb {
510            min: Vec3::new(
511                center.x - 7,
512                center.y - 1,
513                base - (diameter / 8) + diameter + (diameter / 3) + 29,
514            ),
515            max: Vec3::new(
516                center.x + 7,
517                center.y + 1,
518                base - (diameter / 8) + diameter + (diameter / 3) + 31,
519            ),
520        });
521        emblem_13.fill(gold.clone());
522        let emblem_13_clear = painter.aabb(Aabb {
523            min: Vec3::new(
524                center.x - 5,
525                center.y - 1,
526                base - (diameter / 8) + diameter + (diameter / 3) + 29,
527            ),
528            max: Vec3::new(
529                center.x + 5,
530                center.y + 1,
531                base - (diameter / 8) + diameter + (diameter / 3) + 31,
532            ),
533        });
534        emblem_13_clear.clear();
535        emblem_13
536            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
537            .fill(gold.clone());
538        emblem_13_clear
539            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
540            .clear();
541        // chapel gold top sphere
542        painter
543            .sphere(Aabb {
544                min: (center - 4).with_z(base - (diameter / 8) + diameter + (diameter / 3) - 3),
545                max: (center + 4).with_z(base - (diameter / 8) + diameter + (diameter / 3) + 5),
546            })
547            .fill(gold.clone());
548        // chapel gold top pole
549        painter
550            .aabb(Aabb {
551                min: (center - 1).with_z(base - (diameter / 8) + diameter + (diameter / 3) + 5),
552                max: (center + 1).with_z(base - (diameter / 8) + diameter + (diameter / 3) + 21),
553            })
554            .fill(gold.clone());
555
556        let emblem_1 = painter.aabb(Aabb {
557            min: Vec3::new(
558                center.x - 3,
559                center.y - 1,
560                base - (diameter / 8) + diameter + (diameter / 3) + 11,
561            ),
562            max: Vec3::new(
563                center.x + 3,
564                center.y + 1,
565                base - (diameter / 8) + diameter + (diameter / 3) + 19,
566            ),
567        });
568        emblem_1.fill(gold.clone());
569        emblem_1
570            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
571            .fill(gold.clone());
572        let emblem_2 = painter.aabb(Aabb {
573            min: Vec3::new(
574                center.x - 5,
575                center.y - 1,
576                base - (diameter / 8) + diameter + (diameter / 3) + 21,
577            ),
578            max: Vec3::new(
579                center.x + 5,
580                center.y + 1,
581                base - (diameter / 8) + diameter + (diameter / 3) + 23,
582            ),
583        });
584        emblem_2.fill(gold.clone());
585        emblem_2
586            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
587            .fill(gold.clone());
588        let emblem_3 = painter.aabb(Aabb {
589            min: Vec3::new(
590                center.x - 5,
591                center.y - 1,
592                base - (diameter / 8) + diameter + (diameter / 3) + 7,
593            ),
594            max: Vec3::new(
595                center.x + 5,
596                center.y + 1,
597                base - (diameter / 8) + diameter + (diameter / 3) + 9,
598            ),
599        });
600        emblem_3.fill(gold.clone());
601        emblem_3
602            .rotate_about(Mat3::rotation_z(PI / 2.0).as_(), center.with_z(base))
603            .fill(gold.clone());
604
605        // chapel bottom
606        painter
607            .sphere(Aabb {
608                min: (center - (diameter / 2)).with_z(base - (2 * (diameter / 3))),
609                max: (center + (diameter / 2)).with_z(base - (2 * (diameter / 3)) + diameter),
610            })
611            .fill(white.clone());
612        // chapel clear bottom
613        painter
614            .sphere(Aabb {
615                min: (center - (diameter / 2) + 1).with_z(base - (2 * (diameter / 3)) + 1),
616                max: (center + (diameter / 2) - 1)
617                    .with_z(base - (2 * (diameter / 3)) + diameter - 1),
618            })
619            .clear();
620        // cellar sea crocodiles
621        let cellar_sea_croc_pos = (center - (diameter / 4)).with_z(base - (diameter / 2));
622        for _ in 0..(3 + ((RandomField::new(0).get((cellar_sea_croc_pos).with_z(base))) % 5)) {
623            painter.spawn(EntityInfo::at(cellar_sea_croc_pos.as_()).with_asset_expect(
624                "common.entity.wild.aggressive.sea_crocodile",
625                &mut rng,
626                None,
627            ))
628        }
629        // clear chapel main room
630        painter
631            .sphere(Aabb {
632                min: (center - (diameter / 2) + 1).with_z(base - (diameter / 8) + 1),
633                max: (center + (diameter / 2) - 1).with_z(base - (diameter / 8) + diameter - 1),
634            })
635            .clear();
636
637        // chapel small top room gold decor ring and floor
638        painter
639            .cylinder(Aabb {
640                min: (center - (diameter / 3) + 2).with_z(base - (diameter / 8) + diameter - 7),
641                max: (center + (diameter / 3) - 2).with_z(base - (diameter / 8) + diameter - 6),
642            })
643            .fill(gold_decor.clone());
644        painter
645            .cylinder(Aabb {
646                min: (center - (diameter / 3) + 3).with_z(base - (diameter / 8) + diameter - 7),
647                max: (center + (diameter / 3) - 3).with_z(base - (diameter / 8) + diameter - 6),
648            })
649            .fill(floor_color.clone());
650        // chapel small top sprites
651        painter
652            .cylinder(Aabb {
653                min: (center - (diameter / 3) + 3).with_z(base - (diameter / 8) + diameter - 6),
654                max: (center + (diameter / 3) - 3).with_z(base - (diameter / 8) + diameter - 5),
655            })
656            .fill(sprite_fill.clone());
657        painter
658            .cylinder(Aabb {
659                min: (center - (diameter / 3) + 4).with_z(base - (diameter / 8) + diameter - 6),
660                max: (center + (diameter / 3) - 4).with_z(base - (diameter / 8) + diameter - 5),
661            })
662            .clear();
663        // window to main room
664        let center_w = center + 4;
665        painter
666            .cylinder(Aabb {
667                min: (center_w - 6).with_z(base - (diameter / 8) + diameter - 7),
668                max: (center_w + 6).with_z(base - (diameter / 8) + diameter - 6),
669            })
670            .fill(gold_decor.clone());
671        painter
672            .cylinder(Aabb {
673                min: (center_w - 5).with_z(base - (diameter / 8) + diameter - 7),
674                max: (center_w + 5).with_z(base - (diameter / 8) + diameter - 6),
675            })
676            .fill(window_hor);
677        // chapel top floor organ podium
678        let center_o2 = center - 4;
679        painter
680            .cylinder(Aabb {
681                min: (center_o2 - 4).with_z(base - (diameter / 8) + diameter - 6),
682                max: (center_o2 + 4).with_z(base - (diameter / 8) + diameter - 5),
683            })
684            .fill(gold_decor.clone());
685        painter
686            .cylinder(Aabb {
687                min: (center_o2 - 3).with_z(base - (diameter / 8) + diameter - 6),
688                max: (center_o2 + 3).with_z(base - (diameter / 8) + diameter - 5),
689            })
690            .fill(floor_color.clone());
691        // organ on chapel top floor organ podium
692        let first_floor_organ_pos = center_o2.with_z(base - (diameter / 8) + diameter - 4);
693        painter.spawn(
694            EntityInfo::at(first_floor_organ_pos.as_()).with_asset_expect(
695                "common.entity.dungeon.sea_chapel.organ",
696                &mut rng,
697                None,
698            ),
699        );
700        // sea clerics, bishop on top floor
701        let first_floor_spawn_pos = (center_o2 - 2).with_z(base - (diameter / 8) + diameter - 4);
702        for _ in 0..(2 + ((RandomField::new(0).get((first_floor_spawn_pos).with_z(base))) % 2)) {
703            painter.spawn(
704                EntityInfo::at(first_floor_spawn_pos.as_()).with_asset_expect(
705                    "common.entity.dungeon.sea_chapel.sea_cleric",
706                    &mut rng,
707                    None,
708                ),
709            )
710        }
711        painter.spawn(
712            EntityInfo::at(first_floor_spawn_pos.as_()).with_asset_expect(
713                "common.entity.dungeon.sea_chapel.sea_bishop",
714                &mut rng,
715                None,
716            ),
717        );
718        // chapel main room gold decor ring and floor
719        painter
720            .cylinder(Aabb {
721                min: (center - (diameter / 2) + 3).with_z(base - 1),
722                max: (center + (diameter / 2) - 3).with_z(base),
723            })
724            .fill(gold_decor.clone());
725        painter
726            .cylinder(Aabb {
727                min: (center - (diameter / 2) + 5).with_z(base - 1),
728                max: (center + (diameter / 2) - 5).with_z(base),
729            })
730            .fill(floor_color.clone());
731        // chapel main room sprites
732        painter
733            .cylinder(Aabb {
734                min: (center - (diameter / 2) + 5).with_z(base),
735                max: (center + (diameter / 2) - 5).with_z(base + 1),
736            })
737            .fill(sprite_fill.clone());
738        painter
739            .cylinder(Aabb {
740                min: (center - (diameter / 2) + 6).with_z(base),
741                max: (center + (diameter / 2) - 6).with_z(base + 1),
742            })
743            .clear();
744        // chapel main room organ podium
745        let center_o1 = center + (diameter / 8);
746        painter
747            .cylinder(Aabb {
748                min: (center_o1 - 4).with_z(base),
749                max: (center_o1 + 4).with_z(base + 1),
750            })
751            .fill(gold_decor.clone());
752        painter
753            .cylinder(Aabb {
754                min: (center_o1 - 3).with_z(base),
755                max: (center_o1 + 3).with_z(base + 1),
756            })
757            .fill(floor_color.clone());
758        // organ on chapel main room organ podium
759        let first_floor_organ_pos = center_o1.with_z(base + 2);
760        painter.spawn(
761            EntityInfo::at(first_floor_organ_pos.as_()).with_asset_expect(
762                "common.entity.dungeon.sea_chapel.organ",
763                &mut rng,
764                None,
765            ),
766        );
767        // sea clerics on main floor
768        let main_room_sea_clerics_pos = (center_o1 - 2).with_z(base + 2);
769        for _ in 0..(3 + ((RandomField::new(0).get((main_room_sea_clerics_pos).with_z(base))) % 3))
770        {
771            painter.spawn(
772                EntityInfo::at(main_room_sea_clerics_pos.as_()).with_asset_expect(
773                    "common.entity.dungeon.sea_chapel.sea_cleric",
774                    &mut rng,
775                    None,
776                ),
777            )
778        }
779        // coral golem on main floor
780        painter.spawn(
781            EntityInfo::at((first_floor_organ_pos + 2).as_()).with_asset_expect(
782                "common.entity.dungeon.sea_chapel.coralgolem",
783                &mut rng,
784                None,
785            ),
786        );
787        painter.spawn(
788            EntityInfo::at((first_floor_organ_pos + 4).as_()).with_asset_expect(
789                "common.entity.dungeon.sea_chapel.sea_bishop",
790                &mut rng,
791                None,
792            ),
793        );
794        // chapel main room glassbarrier to cellar
795        let center_g = center - diameter / 7;
796        painter
797            .cylinder(Aabb {
798                min: (center_g - 4).with_z(base - 1),
799                max: (center_g + 4).with_z(base),
800            })
801            .fill(gold_decor.clone());
802        painter
803            .cylinder(Aabb {
804                min: (center_g - 3).with_z(base - 1),
805                max: (center_g + 3).with_z(base),
806            })
807            .fill(glass_barrier.clone());
808        painter
809            .cylinder(Aabb {
810                min: (center_g - 1).with_z(base - 1),
811                max: (center_g).with_z(base),
812            })
813            .fill(glass_keyhole.clone());
814
815        // cellar gold decor ring and floor
816        painter
817            .cylinder(Aabb {
818                min: (center - (diameter / 2) + 1).with_z(base - (diameter / 4) - 5),
819                max: (center + (diameter / 2) - 1).with_z(base - (diameter / 4) - 4),
820            })
821            .fill(gold_decor.clone());
822        painter
823            .cylinder(Aabb {
824                min: (center - (diameter / 2) + 3).with_z(base - (diameter / 4) - 5),
825                max: (center + (diameter / 2) - 3).with_z(base - (diameter / 4) - 4),
826            })
827            .fill(floor_color.clone());
828        // chapel cellar sprites
829        painter
830            .cylinder(Aabb {
831                min: (center - (diameter / 2) + 3).with_z(base - (diameter / 4) - 4),
832                max: (center + (diameter / 2) - 3).with_z(base - (diameter / 4) - 3),
833            })
834            .fill(sprite_fill.clone());
835        painter
836            .cylinder(Aabb {
837                min: (center - (diameter / 2) + 4).with_z(base - (diameter / 4) - 4),
838                max: (center + (diameter / 2) - 4).with_z(base - (diameter / 4) - 3),
839            })
840            .clear();
841        // stairway to cellar cardinals room
842        let stairs_pos = center_g + 1;
843        let stair_radius1 = 5.0;
844        let stairs_clear1 = painter.cylinder(Aabb {
845            min: (stairs_pos - stair_radius1 as i32).with_z(base - (diameter / 4) - 5),
846            max: (stairs_pos + stair_radius1 as i32).with_z(base - 1),
847        });
848        stairs_clear1
849            .sample(spiral_staircase(
850                stairs_pos.with_z(base - (diameter / 8) + diameter - (diameter / 8)),
851                stair_radius1,
852                0.5,
853                7.0,
854            ))
855            .fill(gold.clone());
856        stairs_clear1
857            .sample(spiral_staircase(
858                stairs_pos.with_z(base - (diameter / 8) + diameter - (diameter / 8)),
859                stair_radius1 - 1.0,
860                0.5,
861                7.0,
862            ))
863            .fill(white.clone());
864        // cardinals room sea clerics
865        let cr_sea_clerics_pos = (center - (diameter / 5)).with_z(base - (diameter / 4) - 3);
866        for _ in 0..(2 + ((RandomField::new(0).get((cr_sea_clerics_pos).with_z(base))) % 3)) {
867            painter.spawn(EntityInfo::at(cr_sea_clerics_pos.as_()).with_asset_expect(
868                "common.entity.dungeon.sea_chapel.sea_cleric",
869                &mut rng,
870                None,
871            ))
872        }
873        // Cardinal
874        let cr_cardinal_pos = (center - (diameter / 6)).with_z(base - (diameter / 4) - 3);
875        painter.spawn(EntityInfo::at(cr_cardinal_pos.as_()).with_asset_expect(
876            "common.entity.dungeon.sea_chapel.cardinal",
877            &mut rng,
878            None,
879        ));
880        // glassbarrier to water basin
881        painter
882            .cylinder(Aabb {
883                min: (center - 3).with_z(base - (diameter / 4) - 5),
884                max: (center + 3).with_z(base - (diameter / 4) - 4),
885            })
886            .fill(gold_decor.clone());
887        painter
888            .cylinder(Aabb {
889                min: (center - 2).with_z(base - (diameter / 4) - 5),
890                max: (center + 2).with_z(base - (diameter / 4) - 4),
891            })
892            .fill(glass_barrier.clone());
893        painter
894            .cylinder(Aabb {
895                min: (center - 1).with_z(base - (diameter / 4) - 5),
896                max: (center).with_z(base - (diameter / 4) - 4),
897            })
898            .fill(glass_keyhole.clone());
899
900        // chapel floor1 window1
901        painter
902            .aabb(Aabb {
903                min: Vec3::new(
904                    center.x - (diameter / 3),
905                    center.y - 2,
906                    base - (diameter / 8) + diameter - 2,
907                ),
908                max: Vec3::new(
909                    center.x - (diameter / 3) + 1,
910                    center.y + 2,
911                    base - (diameter / 8) + diameter - 1,
912                ),
913            })
914            .fill(window_ver2.clone());
915
916        painter
917            .aabb(Aabb {
918                min: Vec3::new(
919                    center.x - (diameter / 3),
920                    center.y - 1,
921                    base - (diameter / 8) + diameter - 3,
922                ),
923                max: Vec3::new(
924                    center.x - (diameter / 3) + 1,
925                    center.y + 1,
926                    base - (diameter / 8) + diameter - 2,
927                ),
928            })
929            .fill(window_ver2.clone());
930
931        // chapel floor1 window2
932        painter
933            .aabb(Aabb {
934                min: Vec3::new(
935                    center.x + (diameter / 3) - 1,
936                    center.y - 2,
937                    base - (diameter / 8) + diameter - 2,
938                ),
939                max: Vec3::new(
940                    center.x + (diameter / 3),
941                    center.y + 2,
942                    base - (diameter / 8) + diameter - 1,
943                ),
944            })
945            .clear();
946
947        painter
948            .aabb(Aabb {
949                min: Vec3::new(
950                    center.x + (diameter / 3) - 1,
951                    center.y - 1,
952                    base - (diameter / 8) + diameter - 3,
953                ),
954                max: Vec3::new(
955                    center.x + (diameter / 3),
956                    center.y + 1,
957                    base - (diameter / 8) + diameter - 2,
958                ),
959            })
960            .clear();
961
962        // chapel floor1 window3
963        painter
964            .aabb(Aabb {
965                min: Vec3::new(
966                    center.x - 2,
967                    center.y + (diameter / 3) - 1,
968                    base - (diameter / 8) + diameter - 2,
969                ),
970                max: Vec3::new(
971                    center.x + 2,
972                    center.y + (diameter / 3),
973                    base - (diameter / 8) + diameter - 1,
974                ),
975            })
976            .clear();
977        painter
978            .aabb(Aabb {
979                min: Vec3::new(
980                    center.x - 1,
981                    center.y + (diameter / 3) - 1,
982                    base - (diameter / 8) + diameter - 3,
983                ),
984                max: Vec3::new(
985                    center.x + 1,
986                    center.y + (diameter / 3),
987                    base - (diameter / 8) + diameter - 2,
988                ),
989            })
990            .clear();
991        // chapel floor1 window4
992        painter
993            .aabb(Aabb {
994                min: Vec3::new(
995                    center.x - 2,
996                    center.y - (diameter / 3),
997                    base - (diameter / 8) + diameter - 2,
998                ),
999                max: Vec3::new(
1000                    center.x + 2,
1001                    center.y - (diameter / 3) + 1,
1002                    base - (diameter / 8) + diameter - 1,
1003                ),
1004            })
1005            .fill(window_ver.clone());
1006
1007        painter
1008            .aabb(Aabb {
1009                min: Vec3::new(
1010                    center.x - 1,
1011                    center.y - (diameter / 3),
1012                    base - (diameter / 8) + diameter - 3,
1013                ),
1014                max: Vec3::new(
1015                    center.x + 1,
1016                    center.y - (diameter / 3) + 1,
1017                    base - (diameter / 8) + diameter - 2,
1018                ),
1019            })
1020            .fill(window_ver.clone());
1021
1022        // chapel main room window1
1023        painter
1024            .aabb(Aabb {
1025                min: Vec3::new(
1026                    center.x - (diameter / 2),
1027                    center.y - 4,
1028                    base - (diameter / 8) + (diameter / 2) - 2,
1029                ),
1030                max: Vec3::new(
1031                    center.x - (diameter / 2) + 1,
1032                    center.y + 4,
1033                    base - (diameter / 8) + (diameter / 2) - 1,
1034                ),
1035            })
1036            .fill(window_ver2.clone());
1037
1038        painter
1039            .aabb(Aabb {
1040                min: Vec3::new(
1041                    center.x - (diameter / 2),
1042                    center.y - 3,
1043                    base - (diameter / 8) + (diameter / 2) - 3,
1044                ),
1045                max: Vec3::new(
1046                    center.x - (diameter / 2) + 1,
1047                    center.y + 3,
1048                    base - (diameter / 8) + (diameter / 2) - 2,
1049                ),
1050            })
1051            .fill(window_ver2.clone());
1052        painter
1053            .aabb(Aabb {
1054                min: Vec3::new(
1055                    center.x - (diameter / 2),
1056                    center.y - 2,
1057                    base - (diameter / 8) + (diameter / 2) - 4,
1058                ),
1059                max: Vec3::new(
1060                    center.x - (diameter / 2) + 1,
1061                    center.y + 2,
1062                    base - (diameter / 8) + (diameter / 2) - 3,
1063                ),
1064            })
1065            .fill(window_ver2.clone());
1066
1067        // chapel main room window2
1068        painter
1069            .aabb(Aabb {
1070                min: Vec3::new(
1071                    center.x + (diameter / 2) - 1,
1072                    center.y - 4,
1073                    base - (diameter / 8) + (diameter / 2) - 2,
1074                ),
1075                max: Vec3::new(
1076                    center.x + (diameter / 2),
1077                    center.y + 4,
1078                    base - (diameter / 8) + (diameter / 2) - 1,
1079                ),
1080            })
1081            .fill(window_ver2.clone());
1082        painter
1083            .aabb(Aabb {
1084                min: Vec3::new(
1085                    center.x + (diameter / 2) - 1,
1086                    center.y - 3,
1087                    base - (diameter / 8) + (diameter / 2) - 3,
1088                ),
1089                max: Vec3::new(
1090                    center.x + (diameter / 2),
1091                    center.y + 3,
1092                    base - (diameter / 8) + (diameter / 2) - 2,
1093                ),
1094            })
1095            .fill(window_ver2.clone());
1096        painter
1097            .aabb(Aabb {
1098                min: Vec3::new(
1099                    center.x + (diameter / 2) - 1,
1100                    center.y - 2,
1101                    base - (diameter / 8) + (diameter / 2) - 4,
1102                ),
1103                max: Vec3::new(
1104                    center.x + (diameter / 2),
1105                    center.y + 2,
1106                    base - (diameter / 8) + (diameter / 2) - 3,
1107                ),
1108            })
1109            .fill(window_ver2.clone());
1110        // chapel main room window3
1111        painter
1112            .aabb(Aabb {
1113                min: Vec3::new(
1114                    center.x - 4,
1115                    center.y + (diameter / 2) - 1,
1116                    base - (diameter / 8) + (diameter / 2) - 2,
1117                ),
1118                max: Vec3::new(
1119                    center.x + 4,
1120                    center.y + (diameter / 2),
1121                    base - (diameter / 8) + (diameter / 2) - 1,
1122                ),
1123            })
1124            .fill(window_ver.clone());
1125        painter
1126            .aabb(Aabb {
1127                min: Vec3::new(
1128                    center.x - 3,
1129                    center.y + (diameter / 2) - 1,
1130                    base - (diameter / 8) + (diameter / 2) - 3,
1131                ),
1132                max: Vec3::new(
1133                    center.x + 3,
1134                    center.y + (diameter / 2),
1135                    base - (diameter / 8) + (diameter / 2) - 2,
1136                ),
1137            })
1138            .fill(window_ver.clone());
1139        painter
1140            .aabb(Aabb {
1141                min: Vec3::new(
1142                    center.x - 2,
1143                    center.y + (diameter / 2) - 1,
1144                    base - (diameter / 8) + (diameter / 2) - 4,
1145                ),
1146                max: Vec3::new(
1147                    center.x + 2,
1148                    center.y + (diameter / 2),
1149                    base - (diameter / 8) + (diameter / 2) - 3,
1150                ),
1151            })
1152            .fill(window_ver.clone());
1153
1154        // chapel main room window4
1155        painter
1156            .aabb(Aabb {
1157                min: Vec3::new(
1158                    center.x - 4,
1159                    center.y - (diameter / 2) + 1,
1160                    base - (diameter / 8) + (diameter / 2) - 2,
1161                ),
1162                max: Vec3::new(
1163                    center.x + 4,
1164                    center.y - (diameter / 2),
1165                    base - (diameter / 8) + (diameter / 2) - 1,
1166                ),
1167            })
1168            .fill(window_ver.clone());
1169        painter
1170            .aabb(Aabb {
1171                min: Vec3::new(
1172                    center.x - 3,
1173                    center.y - (diameter / 2) + 1,
1174                    base - (diameter / 8) + (diameter / 2) - 3,
1175                ),
1176                max: Vec3::new(
1177                    center.x + 3,
1178                    center.y - (diameter / 2),
1179                    base - (diameter / 8) + (diameter / 2) - 2,
1180                ),
1181            })
1182            .fill(window_ver.clone());
1183        painter
1184            .aabb(Aabb {
1185                min: Vec3::new(
1186                    center.x - 2,
1187                    center.y - (diameter / 2) + 1,
1188                    base - (diameter / 8) + (diameter / 2) - 4,
1189                ),
1190                max: Vec3::new(
1191                    center.x + 2,
1192                    center.y - (diameter / 2),
1193                    base - (diameter / 8) + (diameter / 2) - 3,
1194                ),
1195            })
1196            .fill(window_ver.clone());
1197
1198        // main room hanging emblem
1199        painter.rotated_sprite(
1200            center.with_z(base + (diameter / 4)),
1201            SpriteKind::SeaDecorEmblem,
1202            2_u8,
1203        );
1204        painter
1205            .aabb(Aabb {
1206                min: Vec3::new(center.x, center.y, base + (diameter / 4) + 1),
1207                max: Vec3::new(
1208                    center.x + 1,
1209                    center.y + 1,
1210                    base - (diameter / 8) + diameter - 7,
1211                ),
1212            })
1213            .fill(gold_chain.clone());
1214
1215        for n in 1..=tubes as i32 {
1216            let pos = Vec2::new(
1217                center.x + (radius as f32 * ((n as f32 * phi).cos())) as i32,
1218                center.y + (radius as f32 * ((n as f32 * phi).sin())) as i32,
1219            );
1220
1221            let storeys = 2 + (RandomField::new(0).get(pos.with_z(base)) as i32 % 2);
1222            let steps = 7;
1223            for n in 0..2 {
1224                for t in 0..storeys {
1225                    let mut points = vec![];
1226                    for s in 0..steps {
1227                        let step_pos = Vec2::new(
1228                            pos.x + (8_f32 * ((s as f32 * phi).cos())) as i32,
1229                            pos.y + (8_f32 * ((s as f32 * phi).sin())) as i32,
1230                        );
1231                        points.push(step_pos);
1232                    }
1233                    if t == (storeys - 1) {
1234                        // room
1235                        painter
1236                            .sphere(Aabb {
1237                                min: (points[0] - (diameter / 6)).with_z(
1238                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6),
1239                                ),
1240
1241                                max: (points[0] + (diameter / 6)).with_z(
1242                                    base + (6 * up) + (t * (steps - 1) * up) + (diameter / 6),
1243                                ),
1244                            })
1245                            .fill(white.clone());
1246
1247                        let room_upper_half = painter.aabb(Aabb {
1248                            min: (points[0] - (diameter / 6))
1249                                .with_z(base + (6 * up) + (t * (steps - 1) * up)),
1250                            max: (points[0] + (diameter / 6))
1251                                .with_z(base + (6 * up) + (t * (steps - 1) * up) + (diameter / 6)),
1252                        });
1253                        // room top washed out
1254                        painter
1255                            .sphere(Aabb {
1256                                min: (points[0] - (diameter / 6)).with_z(
1257                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6),
1258                                ),
1259                                max: (points[0] + (diameter / 6)).with_z(
1260                                    base + (6 * up) + (t * (steps - 1) * up) + (diameter / 6),
1261                                ),
1262                            })
1263                            .intersect(room_upper_half)
1264                            .fill(washed.clone());
1265                        // room top
1266                        painter
1267                            .sphere(Aabb {
1268                                min: (points[0] - (diameter / 6) + 1).with_z(
1269                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 1,
1270                                ),
1271                                max: (points[0] + (diameter / 6)).with_z(
1272                                    base + (6 * up) + (t * (steps - 1) * up) + (diameter / 6),
1273                                ),
1274                            })
1275                            .intersect(room_upper_half)
1276                            .fill(top.clone());
1277                        // room gold ring
1278                        painter
1279                            .cylinder(Aabb {
1280                                min: (points[0] - (diameter / 6))
1281                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) + 1),
1282                                max: (points[0] + (diameter / 6))
1283                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) + 2),
1284                            })
1285                            .fill(gold.clone());
1286                        // clear room
1287                        painter
1288                            .sphere(Aabb {
1289                                min: (points[0] - (diameter / 6) + 1).with_z(
1290                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 1,
1291                                ),
1292
1293                                max: (points[0] + (diameter / 6) - 1).with_z(
1294                                    base + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) - 1,
1295                                ),
1296                            })
1297                            .clear();
1298                        // room windows 1
1299                        painter
1300                            .aabb(Aabb {
1301                                min: Vec3::new(
1302                                    points[0].x + (diameter / 6) - 1,
1303                                    points[0].y - 2,
1304                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 7,
1305                                ),
1306                                max: Vec3::new(
1307                                    points[0].x + (diameter / 6),
1308                                    points[0].y + 2,
1309                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 8,
1310                                ),
1311                            })
1312                            .fill(window_ver2.clone());
1313                        // room windows 2
1314                        painter
1315                            .aabb(Aabb {
1316                                min: Vec3::new(
1317                                    points[0].x - 2,
1318                                    points[0].y + (diameter / 6) - 1,
1319                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 7,
1320                                ),
1321                                max: Vec3::new(
1322                                    points[0].x + 2,
1323                                    points[0].y + (diameter / 6),
1324                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 8,
1325                                ),
1326                            })
1327                            .fill(window_ver.clone());
1328                        // room windows 3
1329                        painter
1330                            .aabb(Aabb {
1331                                min: Vec3::new(
1332                                    points[0].x - 2,
1333                                    points[0].y - (diameter / 6) + 1,
1334                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 7,
1335                                ),
1336                                max: Vec3::new(
1337                                    points[0].x + 2,
1338                                    points[0].y - (diameter / 6),
1339                                    base + (6 * up) + (t * (steps - 1) * up) - (diameter / 6) + 8,
1340                                ),
1341                            })
1342                            .fill(window_ver.clone());
1343                    }
1344                    let stairs_decor = painter
1345                        .cubic_bezier(
1346                            points[0].with_z(base - 4 + (n * 2) + (t * (steps - 1) * up)),
1347                            points[1].with_z(base - 4 + (n * 2) + up + (t * (steps - 1) * up)),
1348                            points[2]
1349                                .with_z(base - 4 + (n * 2) + (2 * up) + (t * (steps - 1) * up)),
1350                            points[3]
1351                                .with_z(base - 4 + (n * 2) + (3 * up) + (t * (steps - 1) * up)),
1352                            1.0,
1353                        )
1354                        .union(
1355                            painter.cubic_bezier(
1356                                points[3]
1357                                    .with_z(base - 4 + (n * 2) + (3 * up) + (t * (steps - 1) * up)),
1358                                points[4]
1359                                    .with_z(base - 4 + (n * 2) + (4 * up) + (t * (steps - 1) * up)),
1360                                points[5]
1361                                    .with_z(base - 4 + (n * 2) + (5 * up) + (t * (steps - 1) * up)),
1362                                points[0]
1363                                    .with_z(base - 4 + (n * 2) + (6 * up) + (t * (steps - 1) * up)),
1364                                1.0,
1365                            ),
1366                        );
1367                    let stairs = painter
1368                        .cubic_bezier(
1369                            points[0].with_z(base + (n * 2) + (t * (steps - 1) * up)),
1370                            points[1].with_z(base + (n * 2) + up + (t * (steps - 1) * up)),
1371                            points[2].with_z(base + (n * 2) + (2 * up) + (t * (steps - 1) * up)),
1372                            points[3].with_z(base + (n * 2) + (3 * up) + (t * (steps - 1) * up)),
1373                            4.0,
1374                        )
1375                        .union(painter.cubic_bezier(
1376                            points[3].with_z(base + (n * 2) + (3 * up) + (t * (steps - 1) * up)),
1377                            points[4].with_z(base + (n * 2) + (4 * up) + (t * (steps - 1) * up)),
1378                            points[5].with_z(base + (n * 2) + (5 * up) + (t * (steps - 1) * up)),
1379                            points[0].with_z(base + (n * 2) + (6 * up) + (t * (steps - 1) * up)),
1380                            4.0,
1381                        ));
1382                    match n {
1383                        0 => {
1384                            stairs_decor.fill(gold.clone());
1385                            stairs.fill(white.clone())
1386                        },
1387                        _ => stairs.clear(),
1388                    };
1389                    if t == (storeys - 1) {
1390                        // room gold decor ring and floor
1391                        painter
1392                            .cylinder(Aabb {
1393                                min: (points[0] - (diameter / 6) + 2)
1394                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 5),
1395                                max: (points[0] + (diameter / 6) - 2)
1396                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 4),
1397                            })
1398                            .fill(gold_decor.clone());
1399                        painter
1400                            .cylinder(Aabb {
1401                                min: (points[0] - (diameter / 6) + 3)
1402                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 7),
1403                                max: (points[0] + (diameter / 6) - 3)
1404                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 4),
1405                            })
1406                            .fill(floor_color.clone());
1407                        // room sprites
1408                        painter
1409                            .cylinder(Aabb {
1410                                min: (points[0] - (diameter / 6) + 3)
1411                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 3),
1412                                max: (points[0] + (diameter / 6) - 3)
1413                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 4),
1414                            })
1415                            .fill(sprite_fill.clone());
1416                        painter
1417                            .cylinder(Aabb {
1418                                min: (points[0] - (diameter / 6) + 4)
1419                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 3),
1420                                max: (points[0] + (diameter / 6) - 4)
1421                                    .with_z(base + (6 * up) + (t * (steps - 1) * up) - 4),
1422                            })
1423                            .clear();
1424                        // room sea clerics
1425                        let room_clerics_pos =
1426                            (points[0] + 2).with_z(base + (6 * up) + (t * (steps - 1) * up) - 4);
1427                        painter.spawn(EntityInfo::at(room_clerics_pos.as_()).with_asset_expect(
1428                            "common.entity.dungeon.sea_chapel.sea_cleric",
1429                            &mut rng,
1430                            None,
1431                        ));
1432                    };
1433                    // decor for top rooms
1434                    if t == 2 {
1435                        let bldg_gold_top1 = Aabb {
1436                            min: (points[0] - 2).with_z(
1437                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) - 3,
1438                            ),
1439                            max: (points[0] + 2).with_z(
1440                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 1,
1441                            ),
1442                        };
1443                        let bldg_gold_top_pole = Aabb {
1444                            min: (points[0] - 1).with_z(
1445                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 1,
1446                            ),
1447                            max: (points[0] + 1).with_z(
1448                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 7,
1449                            ),
1450                        };
1451                        let bldg_gold_top_antlers1 = Aabb {
1452                            min: Vec3::new(
1453                                points[0].x - 2,
1454                                points[0].y - 1,
1455                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 1,
1456                            ),
1457                            max: Vec3::new(
1458                                points[0].x + 2,
1459                                points[0].y + 1,
1460                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 2,
1461                            ),
1462                        };
1463                        let bldg_gold_top_antlers2 = painter.aabb(Aabb {
1464                            min: Vec3::new(
1465                                points[0].x - 3,
1466                                points[0].y - 1,
1467                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 2,
1468                            ),
1469
1470                            max: Vec3::new(
1471                                points[0].x + 3,
1472                                points[0].y + 1,
1473                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 3,
1474                            ),
1475                        });
1476                        let bldg_gold_top_antlers2_clear = painter.aabb(Aabb {
1477                            min: Vec3::new(
1478                                points[0].x - 2,
1479                                points[0].y - 1,
1480                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 2,
1481                            ),
1482
1483                            max: Vec3::new(
1484                                points[0].x + 2,
1485                                points[0].y + 1,
1486                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 3,
1487                            ),
1488                        });
1489                        let bldg_gold_top_antlers3 = Aabb {
1490                            min: Vec3::new(
1491                                points[0].x - 3,
1492                                points[0].y - 1,
1493                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 4,
1494                            ),
1495                            max: Vec3::new(
1496                                points[0].x + 3,
1497                                points[0].y + 1,
1498                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 5,
1499                            ),
1500                        };
1501                        let bldg_gold_top_antlers4 = painter.aabb(Aabb {
1502                            min: Vec3::new(
1503                                points[0].x - 5,
1504                                points[0].y - 1,
1505                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 5,
1506                            ),
1507
1508                            max: Vec3::new(
1509                                points[0].x + 5,
1510                                points[0].y + 1,
1511                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 6,
1512                            ),
1513                        });
1514                        let bldg_gold_top_antlers4_clear = painter.aabb(Aabb {
1515                            min: Vec3::new(
1516                                points[0].x - 2,
1517                                points[0].y - 1,
1518                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 5,
1519                            ),
1520
1521                            max: Vec3::new(
1522                                points[0].x + 2,
1523                                points[0].y + 1,
1524                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 6,
1525                            ),
1526                        });
1527                        let bldg_gold_top_antlers5 = painter.aabb(Aabb {
1528                            min: Vec3::new(
1529                                points[0].x - 2,
1530                                points[0].y - 1,
1531                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 7,
1532                            ),
1533
1534                            max: Vec3::new(
1535                                points[0].x + 2,
1536                                points[0].y + 1,
1537                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 8,
1538                            ),
1539                        });
1540                        let bldg_gold_top_antlers5_clear = painter.aabb(Aabb {
1541                            min: Vec3::new(
1542                                points[0].x - 1,
1543                                points[0].y - 1,
1544                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 7,
1545                            ),
1546                            max: Vec3::new(
1547                                points[0].x + 1,
1548                                points[0].y + 1,
1549                                base + 1 + (6 * up) + (t * (steps - 1) * up) + (diameter / 6) + 8,
1550                            ),
1551                        });
1552                        bldg_gold_top_antlers2.fill(gold.clone());
1553                        bldg_gold_top_antlers2_clear.clear();
1554                        bldg_gold_top_antlers4.fill(gold.clone());
1555                        bldg_gold_top_antlers4_clear.clear();
1556                        bldg_gold_top_antlers5.fill(gold.clone());
1557                        bldg_gold_top_antlers5_clear.clear();
1558                        painter.sphere(bldg_gold_top1).fill(gold.clone());
1559                        painter.aabb(bldg_gold_top_pole).fill(gold.clone());
1560                        painter.aabb(bldg_gold_top_antlers1).fill(gold.clone());
1561                        painter.aabb(bldg_gold_top_antlers3).fill(gold.clone());
1562                    };
1563                }
1564            }
1565        }
1566
1567        // water basin
1568        painter
1569            .sphere_with_radius(
1570                center.with_z(base - (2 * diameter) + (diameter / 4)),
1571                (diameter + (diameter / 5) + 1) as f32,
1572            )
1573            .fill(white.clone());
1574        let water_basin = painter.sphere_with_radius(
1575            center.with_z(base - (2 * diameter) + (diameter / 4) + 1),
1576            (diameter + (diameter / 5)) as f32,
1577        );
1578        water_basin.fill(water.clone());
1579        // clear some water
1580        water_basin
1581            .intersect(
1582                painter.aabb(Aabb {
1583                    min: (center - (diameter + (diameter / 5)))
1584                        .with_z(base - (4 * (diameter / 4)) + 1),
1585                    max: (center + (diameter + (diameter / 5)))
1586                        .with_z(base - diameter + (diameter / 5) + (diameter / 4) + 1),
1587                }),
1588            )
1589            .clear();
1590        // water basin gold ring
1591        painter
1592            .cylinder_with_radius(
1593                center.with_z(base - (3 * diameter) + (diameter / 2)),
1594                (diameter - 4) as f32,
1595                1.0,
1596            )
1597            .fill(gold.clone());
1598        painter
1599            .cylinder_with_radius(
1600                center.with_z(base - (3 * diameter) + (diameter / 2)),
1601                (diameter - 5) as f32,
1602                1.0,
1603            )
1604            .fill(water.clone());
1605
1606        // underwater chamber
1607        painter
1608            .sphere_with_radius(
1609                center.with_z(base - (3 * diameter) + (diameter / 2)),
1610                ((diameter / 2) + 2) as f32,
1611            )
1612            .fill(white.clone());
1613
1614        painter
1615            .sphere_with_radius(
1616                center.with_z(base - (3 * diameter) + (diameter / 2)),
1617                (diameter / 2) as f32,
1618            )
1619            .fill(water.clone());
1620
1621        // underwater chamber entries
1622        painter
1623            .aabb(Aabb {
1624                min: Vec3::new(
1625                    center.x - (diameter / 2) - 2,
1626                    center.y - 2,
1627                    base - (3 * diameter) + (diameter / 3) - 8,
1628                ),
1629                max: Vec3::new(
1630                    center.x + (diameter / 2) + 2,
1631                    center.y + 2,
1632                    base - (3 * diameter) + (diameter / 3) + 4,
1633                ),
1634            })
1635            .fill(water.clone());
1636        // underwater chamber entries
1637        painter
1638            .aabb(Aabb {
1639                min: Vec3::new(
1640                    center.x - 2,
1641                    center.y - (diameter / 2) - 2,
1642                    base - (3 * diameter) + (diameter / 3) - 8,
1643                ),
1644                max: Vec3::new(
1645                    center.x + 2,
1646                    center.y + (diameter / 2) + 2,
1647                    base - (3 * diameter) + (diameter / 3) + 4,
1648                ),
1649            })
1650            .fill(water);
1651        // underwater chamber top
1652        painter
1653            .sphere_with_radius(
1654                center.with_z(base - (3 * diameter) + (diameter / 2)),
1655                ((diameter / 2) + 2) as f32,
1656            )
1657            .intersect(
1658                painter.aabb(Aabb {
1659                    min: (center - (diameter / 2) - 3)
1660                        .with_z(base - (3 * diameter) + (diameter / 2) - 1),
1661                    max: (center + (diameter / 2) + 3).with_z(base - (3 * diameter) + diameter + 2),
1662                }),
1663            )
1664            .fill(top.clone());
1665        // clear underwater chamber
1666        painter
1667            .sphere_with_radius(
1668                center.with_z(base - (3 * diameter) + (diameter / 2)),
1669                (diameter / 2) as f32,
1670            )
1671            .intersect(
1672                painter.aabb(Aabb {
1673                    min: (center - (diameter / 2) - 3)
1674                        .with_z(base - (3 * diameter) + (diameter / 2) - 1),
1675                    max: (center + (diameter / 2) + 3).with_z(base - (3 * diameter) + diameter + 2),
1676                }),
1677            )
1678            .clear();
1679        // underwater chamber gold ring and floors
1680        painter
1681            .cylinder_with_radius(
1682                center.with_z(base - (3 * diameter) + (diameter / 2)),
1683                ((diameter / 2) + 2) as f32,
1684                1.0,
1685            )
1686            .fill(gold.clone());
1687        painter
1688            .cylinder_with_radius(
1689                center.with_z(base - (3 * diameter) + (diameter / 2)),
1690                ((diameter / 2) + 1) as f32,
1691                1.0,
1692            )
1693            .fill(floor_color.clone());
1694        painter
1695            .cylinder_with_radius(
1696                center.with_z(base - (3 * diameter) + (diameter / 2) - 1),
1697                ((diameter / 2) + 1) as f32,
1698                1.0,
1699            )
1700            .fill(floor_color.clone());
1701        // organ in underwater chamber
1702        let underwater_organ_pos =
1703            (center - (diameter / 4)).with_z(base - (3 * diameter) + (diameter / 2) + 1);
1704        painter.spawn(
1705            EntityInfo::at(underwater_organ_pos.as_()).with_asset_expect(
1706                "common.entity.dungeon.sea_chapel.organ",
1707                &mut rng,
1708                None,
1709            ),
1710        );
1711        // underwater chamber decor ring
1712        painter
1713            .cylinder_with_radius(
1714                center.with_z(base - (3 * diameter) + (diameter / 2) + 1),
1715                (diameter / 2) as f32,
1716                1.0,
1717            )
1718            .fill(gold_decor.clone());
1719        painter
1720            .cylinder_with_radius(
1721                center.with_z(base - (3 * diameter) + (diameter / 2) + 1),
1722                ((diameter / 2) - 1) as f32,
1723                1.0,
1724            )
1725            .clear();
1726
1727        // underwater chamber sprites
1728        painter
1729            .cylinder_with_radius(
1730                center.with_z(base - (3 * diameter) + (diameter / 2) + 1),
1731                ((diameter / 2) - 1) as f32,
1732                1.0,
1733            )
1734            .fill(sprite_fill);
1735        painter
1736            .cylinder_with_radius(
1737                center.with_z(base - (3 * diameter) + (diameter / 2) + 1),
1738                ((diameter / 2) - 2) as f32,
1739                1.0,
1740            )
1741            .clear();
1742        // underwater chamber hanging emblem
1743        painter.rotated_sprite(
1744            center.with_z(base - (3 * diameter) + (diameter / 2) + (diameter / 4)),
1745            SpriteKind::SeaDecorEmblem,
1746            2_u8,
1747        );
1748        painter
1749            .aabb(Aabb {
1750                min: Vec3::new(
1751                    center.x,
1752                    center.y,
1753                    base - (3 * diameter) + (diameter / 2) + (diameter / 4) + 1,
1754                ),
1755                max: Vec3::new(
1756                    center.x + 1,
1757                    center.y + 1,
1758                    base - (3 * diameter) + diameter + 1,
1759                ),
1760            })
1761            .fill(gold_chain);
1762        // underwater chamber dagon
1763        let cellar_miniboss_pos = (center + 6).with_z(base - (3 * diameter) + (diameter / 2) + 1);
1764        painter.spawn(EntityInfo::at(cellar_miniboss_pos.as_()).with_asset_expect(
1765            "common.entity.dungeon.sea_chapel.dagon",
1766            &mut rng,
1767            None,
1768        ));
1769        // underwater chamber floor entry
1770        painter
1771            .cylinder_with_radius(
1772                center.with_z(base - (3 * diameter) + (diameter / 2)),
1773                3.0,
1774                1.0,
1775            )
1776            .fill(white.clone());
1777        painter
1778            .cylinder_with_radius(
1779                center.with_z(base - (3 * diameter) + (diameter / 2) + 3),
1780                3.0,
1781                1.0,
1782            )
1783            .fill(gold_decor.clone());
1784        painter
1785            .cylinder_with_radius(
1786                center.with_z(base - (3 * diameter) + (diameter / 2)),
1787                3.0,
1788                3.0,
1789            )
1790            .fill(white.clone());
1791        painter
1792            .cylinder_with_radius(
1793                center.with_z(base - (3 * diameter) + (diameter / 2) - 1),
1794                3.0,
1795                1.0,
1796            )
1797            .fill(gold.clone());
1798        painter
1799            .cylinder_with_radius(
1800                center.with_z(base - (3 * diameter) + (diameter / 2) - 1),
1801                2.0,
1802                7.0,
1803            )
1804            .clear();
1805        // water basin ground floor
1806        painter
1807            .cylinder_with_radius(
1808                center.with_z(base - (3 * diameter) + (diameter / 3) - 9),
1809                (diameter / 2) as f32,
1810                1.0,
1811            )
1812            .fill(floor_color.clone());
1813
1814        // side buildings hut, pavillon, tower
1815        for dir in DIAGONALS {
1816            let bldg_center = center + dir * (2 * (diameter / 3));
1817            let bldg_variant = (RandomField::new(0).get((bldg_center).with_z(base))) % 10;
1818            let tower_height = (diameter / 4) + (3 * (bldg_variant as i32));
1819            let bldg_diameter = diameter;
1820            let bldg_cellar = Aabb {
1821                min: (bldg_center - (bldg_diameter / 4)).with_z(base - (bldg_diameter / 3)),
1822                max: (bldg_center + (bldg_diameter / 4))
1823                    .with_z(base - (bldg_diameter / 3) + (bldg_diameter / 2)),
1824            };
1825            let bldg_cellar_clear = Aabb {
1826                min: (bldg_center - (bldg_diameter / 4) + 1).with_z(base - (bldg_diameter / 3) + 1),
1827                max: (bldg_center + (bldg_diameter / 4) - 1)
1828                    .with_z(base - (bldg_diameter / 3) + (bldg_diameter / 2) - 1),
1829            };
1830            let bldg_room = Aabb {
1831                min: (bldg_center - (bldg_diameter / 4)).with_z(base - (bldg_diameter / 15)),
1832                max: (bldg_center + (bldg_diameter / 4))
1833                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2)),
1834            };
1835            let bldg_hut_entry_clear1 = Aabb {
1836                min: Vec3::new(
1837                    bldg_center.x - (bldg_diameter / 4) - 2,
1838                    bldg_center.y - 2,
1839                    base + (bldg_diameter / 15),
1840                ),
1841                max: Vec3::new(
1842                    bldg_center.x + (bldg_diameter / 4) + 2,
1843                    bldg_center.y + 2,
1844                    base + (bldg_diameter / 15) + 4,
1845                ),
1846            };
1847            let bldg_hut_entry_clear2 = Aabb {
1848                min: Vec3::new(
1849                    bldg_center.x - (bldg_diameter / 4) - 2,
1850                    bldg_center.y - 1,
1851                    base + (bldg_diameter / 15) + 4,
1852                ),
1853                max: Vec3::new(
1854                    bldg_center.x + (bldg_diameter / 4) + 2,
1855                    bldg_center.y + 1,
1856                    base + (bldg_diameter / 15) + 5,
1857                ),
1858            };
1859            let bldg_pavillon_entry_clear1 = Aabb {
1860                min: Vec3::new(
1861                    bldg_center.x - (bldg_diameter / 4),
1862                    bldg_center.y - 6,
1863                    base + (bldg_diameter / 15),
1864                ),
1865                max: Vec3::new(
1866                    bldg_center.x + (bldg_diameter / 4),
1867                    bldg_center.y + 6,
1868                    base + (bldg_diameter / 15) + 4,
1869                ),
1870            };
1871            let bldg_pavillon_entry_clear2 = Aabb {
1872                min: Vec3::new(
1873                    bldg_center.x - (bldg_diameter / 4),
1874                    bldg_center.y - 5,
1875                    base + (bldg_diameter / 15) + 4,
1876                ),
1877                max: Vec3::new(
1878                    bldg_center.x + (bldg_diameter / 4),
1879                    bldg_center.y + 5,
1880                    base + (bldg_diameter / 15) + 5,
1881                ),
1882            };
1883            let bldg_pavillon_entry_clear3 = Aabb {
1884                min: Vec3::new(
1885                    bldg_center.x - (bldg_diameter / 4),
1886                    bldg_center.y - 4,
1887                    base + (bldg_diameter / 15) + 5,
1888                ),
1889                max: Vec3::new(
1890                    bldg_center.x + (bldg_diameter / 4),
1891                    bldg_center.y + 4,
1892                    base + (bldg_diameter / 15) + 6,
1893                ),
1894            };
1895            let bldg_pavillon_entry_clear4 = Aabb {
1896                min: Vec3::new(
1897                    bldg_center.x - 6,
1898                    bldg_center.y - (bldg_diameter / 4),
1899                    base + (bldg_diameter / 15),
1900                ),
1901                max: Vec3::new(
1902                    bldg_center.x + 6,
1903                    bldg_center.y + (bldg_diameter / 4),
1904                    base + (bldg_diameter / 15) + 4,
1905                ),
1906            };
1907            let bldg_pavillon_entry_clear5 = Aabb {
1908                min: Vec3::new(
1909                    bldg_center.x - 5,
1910                    bldg_center.y - (bldg_diameter / 4),
1911                    base + (bldg_diameter / 15) + 4,
1912                ),
1913                max: Vec3::new(
1914                    bldg_center.x + 5,
1915                    bldg_center.y + (bldg_diameter / 4),
1916                    base + (bldg_diameter / 15) + 5,
1917                ),
1918            };
1919            let bldg_pavillon_entry_clear6 = Aabb {
1920                min: Vec3::new(
1921                    bldg_center.x - 4,
1922                    bldg_center.y - (bldg_diameter / 4),
1923                    base + (bldg_diameter / 15) + 5,
1924                ),
1925                max: Vec3::new(
1926                    bldg_center.x + 4,
1927                    bldg_center.y + (bldg_diameter / 4),
1928                    base + (bldg_diameter / 15) + 6,
1929                ),
1930            };
1931            let bldg_room_windows_1 = painter.aabb(Aabb {
1932                min: Vec3::new(
1933                    bldg_center.x - 1,
1934                    bldg_center.y - (bldg_diameter / 4),
1935                    base - (bldg_diameter / 15) + (bldg_diameter / 4) - 2,
1936                ),
1937                max: Vec3::new(
1938                    bldg_center.x + 1,
1939                    bldg_center.y - (bldg_diameter / 4) + 1,
1940                    base - (bldg_diameter / 15) + (bldg_diameter / 4) - 1,
1941                ),
1942            });
1943            let bldg_room_windows_2 = painter.aabb(Aabb {
1944                min: Vec3::new(
1945                    bldg_center.x - 1,
1946                    bldg_center.y + (bldg_diameter / 4) - 1,
1947                    base - (bldg_diameter / 15) + (bldg_diameter / 4) - 2,
1948                ),
1949                max: Vec3::new(
1950                    bldg_center.x + 1,
1951                    bldg_center.y + (bldg_diameter / 4),
1952                    base - (bldg_diameter / 15) + (bldg_diameter / 4) - 1,
1953                ),
1954            });
1955            let bldg_top_half = painter.aabb(Aabb {
1956                min: (bldg_center - (bldg_diameter / 4))
1957                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4)),
1958                max: (bldg_center + (bldg_diameter / 4))
1959                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2)),
1960            });
1961            let bldg_washed_top = painter
1962                .sphere(Aabb {
1963                    min: (bldg_center - (bldg_diameter / 4)).with_z(base - (bldg_diameter / 15)),
1964                    max: (bldg_center + (bldg_diameter / 4))
1965                        .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2)),
1966                })
1967                .intersect(bldg_top_half);
1968            let bldg_top = painter
1969                .sphere(Aabb {
1970                    min: (bldg_center - (bldg_diameter / 4) + 1)
1971                        .with_z(base - (bldg_diameter / 15) + 1),
1972                    max: (bldg_center + (bldg_diameter / 4))
1973                        .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2)),
1974                })
1975                .intersect(bldg_top_half);
1976            let bldg_room_goldring = painter.cylinder(Aabb {
1977                min: (bldg_center - (bldg_diameter / 4))
1978                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 1),
1979                max: (bldg_center + (bldg_diameter / 4))
1980                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2),
1981            });
1982            let bldg_room_goldring_clear = painter.cylinder(Aabb {
1983                min: (bldg_center - (bldg_diameter / 4) + 1)
1984                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 1),
1985                max: (bldg_center + (bldg_diameter / 4) - 1)
1986                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2),
1987            });
1988            let bldg_room_clear = Aabb {
1989                min: (bldg_center - (bldg_diameter / 4) + 1)
1990                    .with_z(base - (bldg_diameter / 15) + 1),
1991                max: (bldg_center + (bldg_diameter / 4) - 1)
1992                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 1),
1993            };
1994            let bldg_room_floor = Aabb {
1995                min: (bldg_center - (bldg_diameter / 4) + 1)
1996                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 1),
1997                max: (bldg_center + (bldg_diameter / 4) - 1)
1998                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2),
1999            };
2000            let bldg_hut_floors_clear = Aabb {
2001                min: (bldg_center - 3).with_z(base - (bldg_diameter / 3) + 2),
2002                max: (bldg_center + 3)
2003                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 2),
2004            };
2005            let bldg_room2 = Aabb {
2006                min: (bldg_center - (bldg_diameter / 6)).with_z(
2007                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 6),
2008                ),
2009                max: (bldg_center + (bldg_diameter / 6)).with_z(
2010                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2011                ),
2012            };
2013            let bldg_room2_windows1 = painter.aabb(Aabb {
2014                min: Vec3::new(
2015                    bldg_center.x - 1,
2016                    bldg_center.y - (bldg_diameter / 6),
2017                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 2,
2018                ),
2019                max: Vec3::new(
2020                    bldg_center.x + 1,
2021                    bldg_center.y - (bldg_diameter / 6) + 1,
2022                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 1,
2023                ),
2024            });
2025            let bldg_room2_windows2 = painter.aabb(Aabb {
2026                min: Vec3::new(
2027                    bldg_center.x - 1,
2028                    bldg_center.y + (bldg_diameter / 6) - 1,
2029                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 2,
2030                ),
2031                max: Vec3::new(
2032                    bldg_center.x + 1,
2033                    bldg_center.y + (bldg_diameter / 6),
2034                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 1,
2035                ),
2036            });
2037            let bldg_room2_windows3 = painter.aabb(Aabb {
2038                min: Vec3::new(
2039                    bldg_center.x - (bldg_diameter / 6),
2040                    bldg_center.y - 1,
2041                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 2,
2042                ),
2043                max: Vec3::new(
2044                    bldg_center.x - (bldg_diameter / 6) + 1,
2045                    bldg_center.y + 1,
2046                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 1,
2047                ),
2048            });
2049            let bldg_room2_windows4 = painter.aabb(Aabb {
2050                min: Vec3::new(
2051                    bldg_center.x + (bldg_diameter / 6) - 1,
2052                    bldg_center.y - 1,
2053                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 2,
2054                ),
2055                max: Vec3::new(
2056                    bldg_center.x + (bldg_diameter / 6),
2057                    bldg_center.y + 1,
2058                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - 1,
2059                ),
2060            });
2061            let bldg_room2_top_half = painter.aabb(Aabb {
2062                min: (bldg_center - (bldg_diameter / 6) + 1)
2063                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2)),
2064                max: (bldg_center + (bldg_diameter / 6)).with_z(
2065                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2066                ),
2067            });
2068            let bldg_room2_top = painter
2069                .sphere(Aabb {
2070                    min: (bldg_center - (bldg_diameter / 6) + 1).with_z(
2071                        base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 6) + 1,
2072                    ),
2073                    max: (bldg_center + (bldg_diameter / 6)).with_z(
2074                        base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2075                    ),
2076                })
2077                .intersect(bldg_room2_top_half);
2078            let bldg_room2_washed_top = painter
2079                .sphere(Aabb {
2080                    min: (bldg_center - (bldg_diameter / 6)).with_z(
2081                        base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 6),
2082                    ),
2083                    max: (bldg_center + (bldg_diameter / 6)).with_z(
2084                        base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2085                    ),
2086                })
2087                .intersect(bldg_room2_top_half);
2088            let bldg_room2_goldring = painter.cylinder(Aabb {
2089                min: (bldg_center - (bldg_diameter / 6))
2090                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) + 1),
2091                max: (bldg_center + (bldg_diameter / 6))
2092                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) + 2),
2093            });
2094            let bldg_room2_goldring_clear = painter.cylinder(Aabb {
2095                min: (bldg_center - (bldg_diameter / 6) + 1)
2096                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) + 1),
2097                max: (bldg_center + (bldg_diameter / 6) - 1)
2098                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) + 2),
2099            });
2100            let bldg_room2_clear = Aabb {
2101                min: (bldg_center - (bldg_diameter / 6) + 1).with_z(
2102                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 6),
2103                ),
2104                max: (bldg_center + (bldg_diameter / 6) - 1).with_z(
2105                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2106                ),
2107            };
2108            let bldg_room2_floor = Aabb {
2109                min: (bldg_center - (bldg_diameter / 6) + 1).with_z(
2110                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 10),
2111                ),
2112                max: (bldg_center + (bldg_diameter / 6) - 1).with_z(
2113                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 10) + 1,
2114                ),
2115            };
2116            let bldg_tube = painter.cylinder(Aabb {
2117                min: (bldg_center - 4).with_z(
2118                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6) - 1,
2119                ),
2120                max: (bldg_center + 4)
2121                    .with_z(base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4)),
2122            });
2123            let bldg_tube_clear = painter.cylinder(Aabb {
2124                min: (bldg_center - 3).with_z(
2125                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 6) - 1,
2126                ),
2127                max: (bldg_center + 3)
2128                    .with_z(base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4)),
2129            });
2130            let bldg_tube_windows1 = Aabb {
2131                min: Vec3::new(
2132                    bldg_center.x + 3,
2133                    bldg_center.y - 1,
2134                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2135                ),
2136                max: Vec3::new(
2137                    bldg_center.x + 4,
2138                    bldg_center.y + 1,
2139                    base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 2,
2140                ),
2141            };
2142            let bldg_tube_windows2 = Aabb {
2143                min: Vec3::new(
2144                    bldg_center.x - 4,
2145                    bldg_center.y - 1,
2146                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2147                ),
2148                max: Vec3::new(
2149                    bldg_center.x - 3,
2150                    bldg_center.y + 1,
2151                    base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 2,
2152                ),
2153            };
2154            let bldg_tube_windows3 = Aabb {
2155                min: Vec3::new(
2156                    bldg_center.x - 1,
2157                    bldg_center.y - 4,
2158                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2159                ),
2160                max: Vec3::new(
2161                    bldg_center.x + 1,
2162                    bldg_center.y - 3,
2163                    base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 2,
2164                ),
2165            };
2166            let bldg_tube_windows4 = Aabb {
2167                min: Vec3::new(
2168                    bldg_center.x - 1,
2169                    bldg_center.y + 3,
2170                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6),
2171                ),
2172                max: Vec3::new(
2173                    bldg_center.x + 1,
2174                    bldg_center.y + 4,
2175                    base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 2,
2176                ),
2177            };
2178            let bldg_room3 = Aabb {
2179                min: (bldg_center - (bldg_diameter / 7))
2180                    .with_z(base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 2),
2181                max: (bldg_center + (bldg_diameter / 7)).with_z(
2182                    base - (bldg_diameter / 15)
2183                        + tower_height
2184                        + (bldg_diameter / 4)
2185                        + (2 * (bldg_diameter / 7))
2186                        - 2,
2187                ),
2188            };
2189            let bldg_room3_washed_top_half = painter.aabb(Aabb {
2190                min: (bldg_center - (bldg_diameter / 7)).with_z(
2191                    base - (bldg_diameter / 15)
2192                        + tower_height
2193                        + (bldg_diameter / 4)
2194                        + (bldg_diameter / 7)
2195                        - 2,
2196                ),
2197                max: (bldg_center + (bldg_diameter / 7)).with_z(
2198                    base - (bldg_diameter / 15)
2199                        + tower_height
2200                        + (bldg_diameter / 4)
2201                        + (2 * (bldg_diameter / 7))
2202                        - 2,
2203                ),
2204            });
2205            let bldg_room3_washed_top = painter
2206                .sphere(Aabb {
2207                    min: (bldg_center - (bldg_diameter / 7)).with_z(
2208                        base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 2,
2209                    ),
2210                    max: (bldg_center + (bldg_diameter / 7)).with_z(
2211                        base - (bldg_diameter / 15)
2212                            + tower_height
2213                            + (bldg_diameter / 4)
2214                            + (2 * (bldg_diameter / 7))
2215                            - 2,
2216                    ),
2217                })
2218                .intersect(bldg_room3_washed_top_half);
2219            let bldg_room3_top = painter
2220                .sphere(Aabb {
2221                    min: (bldg_center - (bldg_diameter / 7) + 1).with_z(
2222                        base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 1,
2223                    ),
2224                    max: (bldg_center + (bldg_diameter / 7)).with_z(
2225                        base - (bldg_diameter / 15)
2226                            + tower_height
2227                            + (bldg_diameter / 4)
2228                            + (2 * (bldg_diameter / 7))
2229                            - 2,
2230                    ),
2231                })
2232                .intersect(bldg_room3_washed_top_half);
2233            let bldg_room3_goldring = Aabb {
2234                min: (bldg_center - (bldg_diameter / 7)).with_z(
2235                    base - (bldg_diameter / 15)
2236                        + tower_height
2237                        + (bldg_diameter / 4)
2238                        + (bldg_diameter / 7)
2239                        - 1,
2240                ),
2241                max: (bldg_center + (bldg_diameter / 7)).with_z(
2242                    base - (bldg_diameter / 15)
2243                        + tower_height
2244                        + (bldg_diameter / 4)
2245                        + (bldg_diameter / 7),
2246                ),
2247            };
2248            let bldg_room3_clear = Aabb {
2249                min: (bldg_center - (bldg_diameter / 7) + 1)
2250                    .with_z(base - (bldg_diameter / 15) + tower_height + (bldg_diameter / 4) - 1),
2251                max: (bldg_center + (bldg_diameter / 7) - 1).with_z(
2252                    base - (bldg_diameter / 15)
2253                        + tower_height
2254                        + (bldg_diameter / 4)
2255                        + (2 * (bldg_diameter / 7))
2256                        - 3,
2257                ),
2258            };
2259            let bldg_room3_floor = painter.cylinder(Aabb {
2260                min: (bldg_center - 3).with_z(
2261                    base - (bldg_diameter / 15)
2262                        + tower_height
2263                        + (bldg_diameter / 4)
2264                        + (bldg_diameter / 7)
2265                        - 8,
2266                ),
2267                max: (bldg_center + 3).with_z(
2268                    base - (bldg_diameter / 15)
2269                        + tower_height
2270                        + (bldg_diameter / 4)
2271                        + (bldg_diameter / 7)
2272                        - 7,
2273                ),
2274            });
2275            let bldg_room3_floor_clear = painter.cylinder(Aabb {
2276                min: (bldg_center - 2).with_z(
2277                    base - (bldg_diameter / 15)
2278                        + tower_height
2279                        + (bldg_diameter / 4)
2280                        + (bldg_diameter / 7)
2281                        - 8,
2282                ),
2283                max: (bldg_center + 2).with_z(
2284                    base - (bldg_diameter / 15)
2285                        + tower_height
2286                        + (bldg_diameter / 4)
2287                        + (bldg_diameter / 7)
2288                        - 7,
2289                ),
2290            });
2291            let bldg_tower_floors_clear = Aabb {
2292                min: (bldg_center - 3).with_z(base - (bldg_diameter / 3) + 2),
2293                max: (bldg_center + 3).with_z(
2294                    base - (bldg_diameter / 15)
2295                        + tower_height
2296                        + (bldg_diameter / 4)
2297                        + (bldg_diameter / 4)
2298                        - 3,
2299                ),
2300            };
2301            let bldg_room3_entry_clear1 = Aabb {
2302                min: Vec3::new(
2303                    bldg_center.x - (bldg_diameter / 7),
2304                    bldg_center.y - 3,
2305                    base - (bldg_diameter / 15)
2306                        + tower_height
2307                        + (bldg_diameter / 4)
2308                        + (bldg_diameter / 7)
2309                        - 6,
2310                ),
2311                max: Vec3::new(
2312                    bldg_center.x + (bldg_diameter / 7),
2313                    bldg_center.y + 3,
2314                    base - (bldg_diameter / 15)
2315                        + tower_height
2316                        + (bldg_diameter / 4)
2317                        + (bldg_diameter / 7)
2318                        - 4,
2319                ),
2320            };
2321            let bldg_room3_entry_clear2 = Aabb {
2322                min: Vec3::new(
2323                    bldg_center.x - (bldg_diameter / 7),
2324                    bldg_center.y - 2,
2325                    base - (bldg_diameter / 15)
2326                        + tower_height
2327                        + (bldg_diameter / 4)
2328                        + (bldg_diameter / 7)
2329                        - 4,
2330                ),
2331                max: Vec3::new(
2332                    bldg_center.x + (bldg_diameter / 7),
2333                    bldg_center.y + 2,
2334                    base - (bldg_diameter / 15)
2335                        + tower_height
2336                        + (bldg_diameter / 4)
2337                        + (bldg_diameter / 7)
2338                        - 3,
2339                ),
2340            };
2341            let bldg_room3_entry_clear3 = Aabb {
2342                min: Vec3::new(
2343                    bldg_center.x - 3,
2344                    bldg_center.y - (bldg_diameter / 7),
2345                    base - (bldg_diameter / 15)
2346                        + tower_height
2347                        + (bldg_diameter / 4)
2348                        + (bldg_diameter / 7)
2349                        - 6,
2350                ),
2351                max: Vec3::new(
2352                    bldg_center.x + 3,
2353                    bldg_center.y + (bldg_diameter / 7),
2354                    base - (bldg_diameter / 15)
2355                        + tower_height
2356                        + (bldg_diameter / 4)
2357                        + (bldg_diameter / 7)
2358                        - 4,
2359                ),
2360            };
2361            let bldg_room3_entry_clear4 = Aabb {
2362                min: Vec3::new(
2363                    bldg_center.x - 2,
2364                    bldg_center.y - (bldg_diameter / 7),
2365                    base - (bldg_diameter / 15)
2366                        + tower_height
2367                        + (bldg_diameter / 4)
2368                        + (bldg_diameter / 7)
2369                        - 4,
2370                ),
2371                max: Vec3::new(
2372                    bldg_center.x + 2,
2373                    bldg_center.y + (bldg_diameter / 7),
2374                    base - (bldg_diameter / 15)
2375                        + tower_height
2376                        + (bldg_diameter / 4)
2377                        + (bldg_diameter / 7)
2378                        - 3,
2379                ),
2380            };
2381            let bldg_gold_top1 = Aabb {
2382                min: (bldg_center - 2).with_z(
2383                    base - (bldg_diameter / 15)
2384                        + tower_height
2385                        + (bldg_diameter / 4)
2386                        + (2 * (bldg_diameter / 7))
2387                        - 3,
2388                ),
2389                max: (bldg_center + 2).with_z(
2390                    base - (bldg_diameter / 15)
2391                        + tower_height
2392                        + (bldg_diameter / 4)
2393                        + (2 * (bldg_diameter / 7))
2394                        + 1,
2395                ),
2396            };
2397            let bldg_gold_top_pole = Aabb {
2398                min: (bldg_center - 1).with_z(
2399                    base - (bldg_diameter / 15)
2400                        + tower_height
2401                        + (bldg_diameter / 4)
2402                        + (2 * (bldg_diameter / 7))
2403                        + 1,
2404                ),
2405                max: (bldg_center + 1).with_z(
2406                    base - (bldg_diameter / 15)
2407                        + tower_height
2408                        + (bldg_diameter / 4)
2409                        + (2 * (bldg_diameter / 7))
2410                        + 7,
2411                ),
2412            };
2413            let bldg_gold_top_antlers1 = Aabb {
2414                min: Vec3::new(
2415                    bldg_center.x - 2,
2416                    bldg_center.y - 1,
2417                    base - (bldg_diameter / 15)
2418                        + tower_height
2419                        + (bldg_diameter / 4)
2420                        + (2 * (bldg_diameter / 7))
2421                        + 1,
2422                ),
2423                max: Vec3::new(
2424                    bldg_center.x + 2,
2425                    bldg_center.y + 1,
2426                    base - (bldg_diameter / 15)
2427                        + tower_height
2428                        + (bldg_diameter / 4)
2429                        + (2 * (bldg_diameter / 7))
2430                        + 2,
2431                ),
2432            };
2433            let bldg_gold_top_antlers2 = painter.aabb(Aabb {
2434                min: Vec3::new(
2435                    bldg_center.x - 3,
2436                    bldg_center.y - 1,
2437                    base - (bldg_diameter / 15)
2438                        + tower_height
2439                        + (bldg_diameter / 4)
2440                        + (2 * (bldg_diameter / 7))
2441                        + 2,
2442                ),
2443
2444                max: Vec3::new(
2445                    bldg_center.x + 3,
2446                    bldg_center.y + 1,
2447                    base - (bldg_diameter / 15)
2448                        + tower_height
2449                        + (bldg_diameter / 4)
2450                        + (2 * (bldg_diameter / 7))
2451                        + 3,
2452                ),
2453            });
2454            let bldg_gold_top_antlers2_clear = painter.aabb(Aabb {
2455                min: Vec3::new(
2456                    bldg_center.x - 2,
2457                    bldg_center.y - 1,
2458                    base - (bldg_diameter / 15)
2459                        + tower_height
2460                        + (bldg_diameter / 4)
2461                        + (2 * (bldg_diameter / 7))
2462                        + 2,
2463                ),
2464
2465                max: Vec3::new(
2466                    bldg_center.x + 2,
2467                    bldg_center.y + 1,
2468                    base - (bldg_diameter / 15)
2469                        + tower_height
2470                        + (bldg_diameter / 4)
2471                        + (2 * (bldg_diameter / 7))
2472                        + 3,
2473                ),
2474            });
2475            let bldg_gold_top_antlers3 = Aabb {
2476                min: Vec3::new(
2477                    bldg_center.x - 3,
2478                    bldg_center.y - 1,
2479                    base - (bldg_diameter / 15)
2480                        + tower_height
2481                        + (bldg_diameter / 4)
2482                        + (2 * (bldg_diameter / 7))
2483                        + 4,
2484                ),
2485                max: Vec3::new(
2486                    bldg_center.x + 3,
2487                    bldg_center.y + 1,
2488                    base - (bldg_diameter / 15)
2489                        + tower_height
2490                        + (bldg_diameter / 4)
2491                        + (2 * (bldg_diameter / 7))
2492                        + 5,
2493                ),
2494            };
2495            let bldg_gold_top_antlers4 = painter.aabb(Aabb {
2496                min: Vec3::new(
2497                    bldg_center.x - 5,
2498                    bldg_center.y - 1,
2499                    base - (bldg_diameter / 15)
2500                        + tower_height
2501                        + (bldg_diameter / 4)
2502                        + (2 * (bldg_diameter / 7))
2503                        + 5,
2504                ),
2505
2506                max: Vec3::new(
2507                    bldg_center.x + 5,
2508                    bldg_center.y + 1,
2509                    base - (bldg_diameter / 15)
2510                        + tower_height
2511                        + (bldg_diameter / 4)
2512                        + (2 * (bldg_diameter / 7))
2513                        + 6,
2514                ),
2515            });
2516            let bldg_gold_top_antlers4_clear = painter.aabb(Aabb {
2517                min: Vec3::new(
2518                    bldg_center.x - 2,
2519                    bldg_center.y - 1,
2520                    base - (bldg_diameter / 15)
2521                        + tower_height
2522                        + (bldg_diameter / 4)
2523                        + (2 * (bldg_diameter / 7))
2524                        + 5,
2525                ),
2526
2527                max: Vec3::new(
2528                    bldg_center.x + 2,
2529                    bldg_center.y + 1,
2530                    base - (bldg_diameter / 15)
2531                        + tower_height
2532                        + (bldg_diameter / 4)
2533                        + (2 * (bldg_diameter / 7))
2534                        + 6,
2535                ),
2536            });
2537            let bldg_gold_top_antlers5 = painter.aabb(Aabb {
2538                min: Vec3::new(
2539                    bldg_center.x - 2,
2540                    bldg_center.y - 1,
2541                    base - (bldg_diameter / 15)
2542                        + tower_height
2543                        + (bldg_diameter / 4)
2544                        + (2 * (bldg_diameter / 7))
2545                        + 7,
2546                ),
2547
2548                max: Vec3::new(
2549                    bldg_center.x + 2,
2550                    bldg_center.y + 1,
2551                    base - (bldg_diameter / 15)
2552                        + tower_height
2553                        + (bldg_diameter / 4)
2554                        + (2 * (bldg_diameter / 7))
2555                        + 8,
2556                ),
2557            });
2558            let bldg_gold_top_antlers5_clear = painter.aabb(Aabb {
2559                min: Vec3::new(
2560                    bldg_center.x - 1,
2561                    bldg_center.y - 1,
2562                    base - (bldg_diameter / 15)
2563                        + tower_height
2564                        + (bldg_diameter / 4)
2565                        + (2 * (bldg_diameter / 7))
2566                        + 7,
2567                ),
2568                max: Vec3::new(
2569                    bldg_center.x + 1,
2570                    bldg_center.y + 1,
2571                    base - (bldg_diameter / 15)
2572                        + tower_height
2573                        + (bldg_diameter / 4)
2574                        + (2 * (bldg_diameter / 7))
2575                        + 8,
2576                ),
2577            });
2578            let bldg_tower_ropefix1 = Aabb {
2579                min: (bldg_center - 2).with_z(
2580                    base - (bldg_diameter / 15)
2581                        + tower_height
2582                        + (bldg_diameter / 4)
2583                        + (2 * (bldg_diameter / 7))
2584                        - 4,
2585                ),
2586                max: (bldg_center + 2).with_z(
2587                    base - (bldg_diameter / 15)
2588                        + tower_height
2589                        + (bldg_diameter / 4)
2590                        + (2 * (bldg_diameter / 7))
2591                        - 3,
2592                ),
2593            };
2594            let bldg_tower_ropefix2 = Aabb {
2595                min: (bldg_center).with_z(
2596                    base - (bldg_diameter / 15)
2597                        + tower_height
2598                        + (bldg_diameter / 4)
2599                        + (2 * (bldg_diameter / 7))
2600                        - 5,
2601                ),
2602                max: (bldg_center + 1).with_z(
2603                    base - (bldg_diameter / 15)
2604                        + tower_height
2605                        + (bldg_diameter / 4)
2606                        + (2 * (bldg_diameter / 7))
2607                        - 4,
2608                ),
2609            };
2610            let bldg_tower_rope = Aabb {
2611                min: bldg_center.with_z(base - (5 * (bldg_diameter / 4)) - 5),
2612                max: (bldg_center + 1).with_z(
2613                    base - (bldg_diameter / 15)
2614                        + tower_height
2615                        + (bldg_diameter / 4)
2616                        + (2 * (bldg_diameter / 7))
2617                        - 5,
2618                ),
2619            };
2620            let bldg_hut_ropefix1 = Aabb {
2621                min: (bldg_center - 2)
2622                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 3),
2623                max: (bldg_center + 2)
2624                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 2),
2625            };
2626            let bldg_hut_ropefix2 = Aabb {
2627                min: bldg_center.with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 4),
2628                max: (bldg_center + 1)
2629                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 3),
2630            };
2631            let bldg_hut_rope = Aabb {
2632                min: bldg_center.with_z(base - (5 * (bldg_diameter / 4)) - 5),
2633                max: (bldg_center + 1)
2634                    .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 2) - 4),
2635            };
2636            let bldg_room_lantern_pos = (bldg_center + 2).with_z(base - (bldg_diameter / 15) + 2);
2637            let bldg_floor_lantern_pos =
2638                (bldg_center + 2).with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2);
2639            let bldg_floor2_lantern_pos = Vec3::new(
2640                bldg_center.x + 3,
2641                bldg_center.y + 2,
2642                base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 10) + 1,
2643            );
2644            let bldg_floor3_lantern_pos = (bldg_center + 2).with_z(
2645                base - (bldg_diameter / 15)
2646                    + tower_height
2647                    + (bldg_diameter / 4)
2648                    + (bldg_diameter / 7)
2649                    - 7,
2650            );
2651            let bldg_floor3_drawer_pos = (bldg_center - 3).with_z(
2652                base - (bldg_diameter / 15)
2653                    + tower_height
2654                    + (bldg_diameter / 4)
2655                    + (bldg_diameter / 7)
2656                    - 7,
2657            );
2658            let bldg_floor3_potion_pos = (bldg_center - 3).with_z(
2659                base - (bldg_diameter / 15)
2660                    + tower_height
2661                    + (bldg_diameter / 4)
2662                    + (bldg_diameter / 7)
2663                    - 6,
2664            );
2665            let bldg_cellar_chest_pos = Vec3::new(
2666                bldg_center.x - (bldg_diameter / 8),
2667                bldg_center.y,
2668                base - (bldg_diameter / 3) + 3,
2669            );
2670            let bldg_floor_bed_pos = Vec3::new(
2671                bldg_center.x - (bldg_diameter / 6),
2672                bldg_center.y,
2673                base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2,
2674            );
2675            let bldg_floor_drawer_pos = (bldg_center - (bldg_diameter / 8))
2676                .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2);
2677            let bldg_floor_potion_pos = (bldg_center - (bldg_diameter / 8))
2678                .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 3);
2679            let bldg_floor2_wall = Aabb {
2680                min: (bldg_center - 4).with_z(
2681                    base - (bldg_diameter / 15) + (bldg_diameter / 2) - (bldg_diameter / 10) + 1,
2682                ),
2683                max: (bldg_center + 4).with_z(
2684                    base - (bldg_diameter / 15) + (bldg_diameter / 2) + (bldg_diameter / 6) - 2,
2685                ),
2686            };
2687
2688            let bldg_underwater_exit_pos_1 =
2689                center + dir * (2 * ((diameter / 3) - (diameter / 10)));
2690            let bldg_underwater_exit_pos_2 = center + dir * (2 * ((diameter / 3) - (diameter / 7)));
2691            let bldg_underwater_tube = painter.cubic_bezier(
2692                bldg_center.with_z(base - (5 * (bldg_diameter / 4)) + 2),
2693                bldg_center.with_z(base - (6 * (bldg_diameter / 4))),
2694                bldg_underwater_exit_pos_1.with_z(base - (6 * (bldg_diameter / 4))),
2695                bldg_underwater_exit_pos_2.with_z(base - (5 * (bldg_diameter / 4))),
2696                ((bldg_diameter / 10) + 1) as f32,
2697            );
2698            let bldg_underwater_tube_clear = painter.cubic_bezier(
2699                bldg_center.with_z(base - (5 * (bldg_diameter / 4)) + 2),
2700                bldg_center.with_z(base - (6 * (bldg_diameter / 4))),
2701                bldg_underwater_exit_pos_1.with_z(base - (6 * (bldg_diameter / 4))),
2702                bldg_underwater_exit_pos_2.with_z(base - (5 * (bldg_diameter / 4))),
2703                (bldg_diameter / 10) as f32,
2704            );
2705            let bldg_underwater_exit = painter.cylinder(Aabb {
2706                min: (bldg_underwater_exit_pos_2 - (bldg_diameter / 10) - 1)
2707                    .with_z(base - (5 * (bldg_diameter / 4)) + 1),
2708                max: (bldg_underwater_exit_pos_2 + (bldg_diameter / 10) + 1)
2709                    .with_z(base - (4 * (bldg_diameter / 4)) + 2),
2710            });
2711            let bldg_underwater_exit_clear = painter.cylinder(Aabb {
2712                min: (bldg_underwater_exit_pos_2 - (bldg_diameter / 10))
2713                    .with_z(base - (5 * (bldg_diameter / 4)) + 1),
2714                max: (bldg_underwater_exit_pos_2 + (bldg_diameter / 10))
2715                    .with_z(base - (4 * (bldg_diameter / 4)) + 1),
2716            });
2717            let bldg_connect_tube = Aabb {
2718                min: (bldg_center - (bldg_diameter / 10))
2719                    .with_z(base - (5 * (bldg_diameter / 4)) + 2),
2720                max: (bldg_center + (bldg_diameter / 10)).with_z(base - (bldg_diameter / 3) + 1),
2721            };
2722            let bldg_connect_step_1 = Aabb {
2723                min: (bldg_center - (bldg_diameter / 10) + 1)
2724                    .with_z(base - (2 * (bldg_diameter / 4))),
2725                max: (bldg_center + (bldg_diameter / 10) - 1)
2726                    .with_z(base - (2 * (bldg_diameter / 4)) + 1),
2727            };
2728            let bldg_connect_step_1_clear = Aabb {
2729                min: (bldg_center - (bldg_diameter / 10) + 2)
2730                    .with_z(base - (2 * (bldg_diameter / 4))),
2731                max: (bldg_center + (bldg_diameter / 10) - 2)
2732                    .with_z(base - (2 * (bldg_diameter / 4)) + 1),
2733            };
2734            let bldg_connect_step_2 = Aabb {
2735                min: (bldg_center - (bldg_diameter / 10) + 1)
2736                    .with_z(base - (3 * (bldg_diameter / 4))),
2737                max: (bldg_center + (bldg_diameter / 10) - 1)
2738                    .with_z(base - (3 * (bldg_diameter / 4)) + 1),
2739            };
2740            let bldg_connect_step_2_clear = Aabb {
2741                min: (bldg_center - (bldg_diameter / 10) + 2)
2742                    .with_z(base - (3 * (bldg_diameter / 4))),
2743                max: (bldg_center + (bldg_diameter / 10) - 2)
2744                    .with_z(base - (3 * (bldg_diameter / 4)) + 1),
2745            };
2746            let bldg_connect_step_3 = Aabb {
2747                min: (bldg_center - (bldg_diameter / 10) + 1)
2748                    .with_z(base - (4 * (bldg_diameter / 4)) - 3),
2749                max: (bldg_center + (bldg_diameter / 10) - 1)
2750                    .with_z(base - (4 * (bldg_diameter / 4)) - 2),
2751            };
2752            let bldg_connect_step_3_clear = Aabb {
2753                min: (bldg_center - (bldg_diameter / 10) + 2)
2754                    .with_z(base - (4 * (bldg_diameter / 4)) - 3),
2755                max: (bldg_center + (bldg_diameter / 10) - 2)
2756                    .with_z(base - (4 * (bldg_diameter / 4)) - 2),
2757            };
2758            let bldg_connect_tube_gold_ring = Aabb {
2759                min: (bldg_underwater_exit_pos_2 - (bldg_diameter / 10) + 1)
2760                    .with_z(base - (4 * (bldg_diameter / 4)) + 1),
2761                max: (bldg_underwater_exit_pos_2 + (bldg_diameter / 10) - 1)
2762                    .with_z(base - (4 * (bldg_diameter / 4)) + 2),
2763            };
2764            let bldg_connect_decor_ring = Aabb {
2765                min: (bldg_underwater_exit_pos_2 - (bldg_diameter / 10))
2766                    .with_z(base - (4 * (bldg_diameter / 4))),
2767                max: (bldg_underwater_exit_pos_2 + (bldg_diameter / 10))
2768                    .with_z(base - (4 * (bldg_diameter / 4)) + 1),
2769            };
2770            let bldg_connect_decor_ring_clear = Aabb {
2771                min: (bldg_underwater_exit_pos_2 - (bldg_diameter / 10) + 1)
2772                    .with_z(base - (4 * (bldg_diameter / 4))),
2773                max: (bldg_underwater_exit_pos_2 + (bldg_diameter / 10) - 1)
2774                    .with_z(base - (4 * (bldg_diameter / 4)) + 1),
2775            };
2776            let bldg_connect_clear = Aabb {
2777                min: (bldg_center - (bldg_diameter / 10) + 1)
2778                    .with_z(base - (5 * (bldg_diameter / 4)) + 1),
2779                max: (bldg_center + (bldg_diameter / 10) - 1)
2780                    .with_z(base - (bldg_diameter / 3) + 2),
2781            };
2782            let bldg_connect_gate = Aabb {
2783                min: (bldg_underwater_exit_pos_2 - 2).with_z(base - (4 * (bldg_diameter / 4)) + 1),
2784                max: (bldg_underwater_exit_pos_2 + 2).with_z(base - (4 * (bldg_diameter / 4)) + 2),
2785            };
2786            let bldg_connect_keyhole = Aabb {
2787                min: (bldg_underwater_exit_pos_2 - 1).with_z(base - (4 * (bldg_diameter / 4)) + 1),
2788                max: (bldg_underwater_exit_pos_2).with_z(base - (4 * (bldg_diameter / 4)) + 2),
2789            };
2790            let bldg_floor_sea_cleric_pos = (bldg_center + (bldg_diameter / 8))
2791                .with_z(base - (bldg_diameter / 15) + (bldg_diameter / 4) + 2);
2792            let bldg_floor3_sea_cleric_pos = (bldg_center + 2).with_z(
2793                base - (bldg_diameter / 15)
2794                    + tower_height
2795                    + (bldg_diameter / 4)
2796                    + (bldg_diameter / 7)
2797                    - 6,
2798            );
2799            // bldg cellar Sea Crocodiles
2800            let bldg_cellar_sea_croc_pos = bldg_center.with_z(base - (5 * (bldg_diameter / 4)) - 5);
2801            for _ in
2802                0..(2 + ((RandomField::new(0).get((bldg_cellar_sea_croc_pos).with_z(base))) % 2))
2803            {
2804                painter.spawn(
2805                    EntityInfo::at(bldg_cellar_sea_croc_pos.as_()).with_asset_expect(
2806                        "common.entity.wild.aggressive.sea_crocodile",
2807                        &mut rng,
2808                        None,
2809                    ),
2810                )
2811            }
2812            match bldg_variant {
2813                0..=2 => {
2814                    // paint SeaHut
2815                    painter.sphere(bldg_cellar).fill(white.clone());
2816                    painter.sphere(bldg_cellar_clear).clear();
2817                    painter.sphere(bldg_room).fill(white.clone());
2818                    painter.aabb(bldg_hut_entry_clear1).clear();
2819                    painter.aabb(bldg_hut_entry_clear2).clear();
2820                    bldg_room_windows_1.fill(window_ver.clone());
2821                    bldg_room_windows_2.fill(window_ver.clone());
2822                    bldg_washed_top.fill(washed.clone());
2823                    bldg_top.fill(top.clone());
2824                    painter.sphere(bldg_room_clear).clear();
2825                    bldg_room_goldring.fill(gold.clone());
2826                    bldg_room_goldring_clear.clear();
2827                    painter.cylinder(bldg_room_floor).fill(floor_color.clone());
2828                    painter.cylinder(bldg_hut_floors_clear).clear();
2829                    painter.cylinder(bldg_hut_ropefix1).fill(ropefix1.clone());
2830                    painter.aabb(bldg_hut_ropefix2).fill(ropefix2.clone());
2831                    bldg_underwater_tube.fill(white.clone());
2832                    bldg_underwater_tube_clear.clear();
2833                    bldg_underwater_exit.fill(white.clone());
2834                    bldg_underwater_exit_clear.clear();
2835                    painter.cylinder(bldg_connect_tube).fill(white.clone());
2836                    painter
2837                        .cylinder(bldg_connect_tube_gold_ring)
2838                        .fill(gold.clone());
2839                    painter.cylinder(bldg_connect_clear).clear();
2840                    painter
2841                        .cylinder(bldg_connect_decor_ring)
2842                        .fill(gold_decor.clone());
2843                    painter.cylinder(bldg_connect_decor_ring_clear).clear();
2844                    painter.cylinder(bldg_connect_step_1).fill(white.clone());
2845                    painter.cylinder(bldg_connect_step_1_clear).clear();
2846                    painter.cylinder(bldg_connect_step_2).fill(white.clone());
2847                    painter.cylinder(bldg_connect_step_2_clear).clear();
2848                    painter.cylinder(bldg_connect_step_3).fill(white.clone());
2849                    painter.cylinder(bldg_connect_step_3_clear).clear();
2850                    painter.aabb(bldg_hut_rope).fill(rope.clone());
2851                    painter.sprite(bldg_room_lantern_pos, SpriteKind::SeashellLantern);
2852                    painter.sprite(bldg_floor_lantern_pos, SpriteKind::SeashellLantern);
2853                    painter.sprite(bldg_cellar_chest_pos, SpriteKind::DungeonChest1);
2854                    painter.sprite(bldg_floor_bed_pos, SpriteKind::Bed);
2855                    painter.sprite(bldg_floor_drawer_pos, SpriteKind::DrawerSmall);
2856                    painter.sprite(bldg_floor_potion_pos, SpriteKind::PotionMinor);
2857                    // bldg floor Sea Clerics
2858                    for _ in 0..(1
2859                        + ((RandomField::new(0).get((bldg_floor_sea_cleric_pos).with_z(base))) % 2))
2860                    {
2861                        painter.spawn(
2862                            EntityInfo::at(bldg_floor_sea_cleric_pos.as_()).with_asset_expect(
2863                                "common.entity.dungeon.sea_chapel.sea_cleric",
2864                                &mut rng,
2865                                None,
2866                            ),
2867                        )
2868                    }
2869                },
2870                3..=5 => {
2871                    // paint SeaPavillon
2872                    painter.sphere(bldg_cellar).fill(white.clone());
2873                    painter.sphere(bldg_cellar_clear).clear();
2874                    painter.sphere(bldg_room).fill(white.clone());
2875                    painter.aabb(bldg_pavillon_entry_clear1).clear();
2876                    painter.aabb(bldg_pavillon_entry_clear2).clear();
2877                    painter.aabb(bldg_pavillon_entry_clear3).clear();
2878                    painter.aabb(bldg_pavillon_entry_clear4).clear();
2879                    painter.aabb(bldg_pavillon_entry_clear5).clear();
2880                    painter.aabb(bldg_pavillon_entry_clear6).clear();
2881                    bldg_washed_top.fill(washed.clone());
2882                    bldg_top.fill(top.clone());
2883                    painter.sphere(bldg_room_clear).clear();
2884                    bldg_room_goldring.fill(gold.clone());
2885                    bldg_room_goldring_clear.clear();
2886                    painter.cylinder(bldg_hut_floors_clear).clear();
2887                    painter.cylinder(bldg_hut_ropefix1).fill(ropefix1.clone());
2888                    painter.aabb(bldg_hut_ropefix2).fill(ropefix2.clone());
2889                    bldg_underwater_tube.fill(white.clone());
2890                    bldg_underwater_tube_clear.clear();
2891                    bldg_underwater_exit.fill(white.clone());
2892                    bldg_underwater_exit_clear.clear();
2893                    painter.cylinder(bldg_connect_tube).fill(white.clone());
2894                    painter
2895                        .cylinder(bldg_connect_tube_gold_ring)
2896                        .fill(gold.clone());
2897                    painter.cylinder(bldg_connect_clear).clear();
2898                    painter
2899                        .cylinder(bldg_connect_decor_ring)
2900                        .fill(gold_decor.clone());
2901                    painter.cylinder(bldg_connect_decor_ring_clear).clear();
2902                    painter.cylinder(bldg_connect_step_1).fill(white.clone());
2903                    painter.cylinder(bldg_connect_step_1_clear).clear();
2904                    painter.cylinder(bldg_connect_step_2).fill(white.clone());
2905                    painter.cylinder(bldg_connect_step_2_clear).clear();
2906                    painter.cylinder(bldg_connect_step_3).fill(white.clone());
2907                    painter.cylinder(bldg_connect_step_3_clear).clear();
2908                    painter.aabb(bldg_hut_rope).fill(rope.clone());
2909                    painter.sprite(bldg_room_lantern_pos, SpriteKind::SeashellLantern);
2910                    painter.sprite(bldg_cellar_chest_pos, SpriteKind::DungeonChest1);
2911                },
2912                6..=9 => {
2913                    // paint SeaTower
2914                    painter.sphere(bldg_cellar).fill(white.clone());
2915                    painter.sphere(bldg_cellar_clear).clear();
2916                    painter.sphere(bldg_room).fill(white.clone());
2917                    painter.aabb(bldg_hut_entry_clear1).clear();
2918                    painter.aabb(bldg_hut_entry_clear2).clear();
2919                    bldg_room_windows_1.fill(window_ver.clone());
2920                    bldg_room_windows_2.fill(window_ver.clone());
2921                    bldg_washed_top.fill(washed.clone());
2922                    bldg_top.fill(top.clone());
2923                    painter.sphere(bldg_room2).fill(white.clone());
2924                    bldg_room2_windows1.fill(window_ver.clone());
2925                    bldg_room2_windows2.fill(window_ver.clone());
2926                    bldg_room2_windows3.fill(window_ver2.clone());
2927                    bldg_room2_windows4.fill(window_ver2.clone());
2928                    bldg_room2_washed_top.fill(washed.clone());
2929                    bldg_room2_top.fill(top.clone());
2930                    painter.sphere(bldg_room2_clear).clear();
2931                    bldg_room2_goldring.fill(gold.clone());
2932                    bldg_room2_goldring_clear.clear();
2933                    painter.sphere(bldg_room_clear).clear();
2934                    bldg_room_goldring.fill(gold.clone());
2935                    bldg_room_goldring_clear.clear();
2936                    painter.cylinder(bldg_room_floor).fill(floor_color.clone());
2937                    painter.cylinder(bldg_room2_floor).fill(floor_color.clone());
2938                    bldg_tube.fill(white.clone());
2939                    bldg_tube_clear.clear();
2940                    painter.aabb(bldg_tube_windows1).fill(window_ver2.clone());
2941                    painter.aabb(bldg_tube_windows2).fill(window_ver2.clone());
2942                    painter.aabb(bldg_tube_windows3).fill(window_ver.clone());
2943                    painter.aabb(bldg_tube_windows4).fill(window_ver.clone());
2944                    painter.sphere(bldg_room3).fill(white.clone());
2945                    bldg_room3_washed_top.fill(washed.clone());
2946                    bldg_room3_top.fill(top.clone());
2947                    painter.cylinder(bldg_room3_goldring).fill(gold.clone());
2948                    painter.sphere(bldg_room3_clear).clear();
2949                    painter.aabb(bldg_room3_entry_clear1).clear();
2950                    painter.aabb(bldg_room3_entry_clear2).clear();
2951                    painter.aabb(bldg_room3_entry_clear3).clear();
2952                    painter.aabb(bldg_room3_entry_clear4).clear();
2953                    painter.cylinder(bldg_floor2_wall).fill(white.clone());
2954                    painter.cylinder(bldg_tower_floors_clear).clear();
2955                    bldg_room3_floor.fill(floor_color.clone());
2956                    bldg_room3_floor_clear.clear();
2957                    painter.cylinder(bldg_tower_ropefix1).fill(ropefix1.clone());
2958                    painter.aabb(bldg_tower_ropefix2).fill(ropefix2.clone());
2959                    bldg_gold_top_antlers2.fill(gold.clone());
2960                    bldg_gold_top_antlers2_clear.clear();
2961                    bldg_gold_top_antlers4.fill(gold.clone());
2962                    bldg_gold_top_antlers4_clear.clear();
2963                    bldg_gold_top_antlers5.fill(gold.clone());
2964                    bldg_gold_top_antlers5_clear.clear();
2965                    painter.sphere(bldg_gold_top1).fill(gold.clone());
2966                    painter.aabb(bldg_gold_top_pole).fill(gold.clone());
2967                    painter.aabb(bldg_gold_top_antlers1).fill(gold.clone());
2968                    painter.aabb(bldg_gold_top_antlers3).fill(gold.clone());
2969                    bldg_underwater_tube.fill(white.clone());
2970                    bldg_underwater_tube_clear.clear();
2971                    bldg_underwater_exit.fill(white.clone());
2972                    bldg_underwater_exit_clear.clear();
2973                    painter.cylinder(bldg_connect_tube).fill(white.clone());
2974                    painter
2975                        .cylinder(bldg_connect_tube_gold_ring)
2976                        .fill(gold.clone());
2977                    painter.cylinder(bldg_connect_clear).clear();
2978                    painter
2979                        .cylinder(bldg_connect_decor_ring)
2980                        .fill(gold_decor.clone());
2981                    painter.cylinder(bldg_connect_decor_ring_clear).clear();
2982                    painter.cylinder(bldg_connect_step_1).fill(white.clone());
2983                    painter.cylinder(bldg_connect_step_1_clear).clear();
2984                    painter.cylinder(bldg_connect_step_2).fill(white.clone());
2985                    painter.cylinder(bldg_connect_step_2_clear).clear();
2986                    painter.cylinder(bldg_connect_step_3).fill(white.clone());
2987                    painter.cylinder(bldg_connect_step_3_clear).clear();
2988                    painter.aabb(bldg_tower_rope).fill(rope.clone());
2989                    painter.sprite(bldg_room_lantern_pos, SpriteKind::SeashellLantern);
2990                    painter.sprite(bldg_floor_lantern_pos, SpriteKind::SeashellLantern);
2991                    painter.sprite(bldg_floor2_lantern_pos, SpriteKind::SeashellLantern);
2992                    painter.sprite(bldg_floor3_lantern_pos, SpriteKind::SeashellLantern);
2993                    painter.sprite(bldg_floor3_drawer_pos, SpriteKind::DrawerSmall);
2994                    painter.sprite(bldg_floor3_potion_pos, SpriteKind::PotionMinor);
2995                    painter.sprite(bldg_cellar_chest_pos, SpriteKind::DungeonChest1);
2996                    painter.sprite(bldg_floor_bed_pos, SpriteKind::Bed);
2997                    painter.sprite(bldg_floor_drawer_pos, SpriteKind::DrawerSmall);
2998                    painter.sprite(bldg_floor_potion_pos, SpriteKind::PotionMinor);
2999                    // bldg floor Sea Clerics
3000                    for _ in 0..(1
3001                        + ((RandomField::new(0).get((bldg_floor_sea_cleric_pos).with_z(base))) % 2))
3002                    {
3003                        painter.spawn(
3004                            EntityInfo::at(bldg_floor_sea_cleric_pos.as_()).with_asset_expect(
3005                                "common.entity.dungeon.sea_chapel.sea_cleric",
3006                                &mut rng,
3007                                None,
3008                            ),
3009                        )
3010                    }
3011                    // bldg floor3 Sea Clerics
3012                    for _ in 0..(1
3013                        + ((RandomField::new(0).get((bldg_floor3_sea_cleric_pos).with_z(base)))
3014                            % 2))
3015                    {
3016                        painter.spawn(
3017                            EntityInfo::at(bldg_floor3_sea_cleric_pos.as_()).with_asset_expect(
3018                                "common.entity.dungeon.sea_chapel.sea_cleric",
3019                                &mut rng,
3020                                None,
3021                            ),
3022                        )
3023                    }
3024                },
3025                _ => {},
3026            };
3027            let connect_gate_type = connect_gate_types.swap_remove(
3028                RandomField::new(0).get((center + dir).with_z(base)) as usize
3029                    % connect_gate_types.len(),
3030            );
3031            painter
3032                .cylinder(bldg_connect_gate)
3033                .fill(Fill::Block(Block::air(connect_gate_type)));
3034            if connect_gate_type == SpriteKind::GlassBarrier {
3035                painter
3036                    .cylinder(bldg_connect_keyhole)
3037                    .fill(glass_keyhole.clone());
3038            };
3039        }
3040        // surrounding buildings foundling, small hut, small pavillon
3041        for dir in NEIGHBORS {
3042            let su_bldg_variant =
3043                ((RandomField::new(0).get((center - dir).with_z(base))) % 10) as i32;
3044            let su_bldg_center = center + dir * (diameter + (3 * su_bldg_variant));
3045            let su_bldg_base = base - 2 + (su_bldg_variant / 2);
3046            let su_bldg_diameter = diameter;
3047
3048            let foundling_bottom1 = Aabb {
3049                min: (su_bldg_center - (su_bldg_diameter / 8) - 3)
3050                    .with_z(su_bldg_base - (su_bldg_diameter / 5) - (su_bldg_diameter / 2)),
3051                max: (su_bldg_center + (su_bldg_diameter / 8) + 3)
3052                    .with_z(su_bldg_base - (su_bldg_diameter / 5) - (su_bldg_diameter / 4) + 6),
3053            };
3054            let foundling_bottom2 = Aabb {
3055                min: (su_bldg_center - (su_bldg_diameter / 8) - 1)
3056                    .with_z(su_bldg_base - (su_bldg_diameter / 5) - (su_bldg_diameter / 4) + 2),
3057                max: (su_bldg_center + (su_bldg_diameter / 8) + 1)
3058                    .with_z(su_bldg_base - (su_bldg_diameter / 5) + 2),
3059            };
3060            let foundling_top = Aabb {
3061                min: (su_bldg_center - (su_bldg_diameter / 8))
3062                    .with_z(su_bldg_base - (su_bldg_diameter / 5) - 1),
3063                max: (su_bldg_center + (su_bldg_diameter / 8))
3064                    .with_z(su_bldg_base - (su_bldg_diameter / 5) + (su_bldg_diameter / 4) - 1),
3065            };
3066            let su_bldg_bottom1 = Aabb {
3067                min: (su_bldg_center - (su_bldg_diameter / 6) - 1)
3068                    .with_z(su_bldg_base - (2 * (su_bldg_diameter / 3)) + 1),
3069                max: (su_bldg_center + (su_bldg_diameter / 6) + 1)
3070                    .with_z(su_bldg_base - (su_bldg_diameter / 3) + 1),
3071            };
3072            let su_bldg_bottom2 = Aabb {
3073                min: (su_bldg_center - (su_bldg_diameter / 6))
3074                    .with_z(su_bldg_base - (su_bldg_diameter / 3)),
3075                max: (su_bldg_center + (su_bldg_diameter / 6))
3076                    .with_z(su_bldg_base - (su_bldg_diameter / 3) + (su_bldg_diameter / 3)),
3077            };
3078            let su_bldg_room = Aabb {
3079                min: (su_bldg_center - (su_bldg_diameter / 6))
3080                    .with_z(su_bldg_base - (su_bldg_diameter / 15)),
3081                max: (su_bldg_center + (su_bldg_diameter / 6))
3082                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3)),
3083            };
3084            let su_bldg_hut_entries1 = Aabb {
3085                min: Vec3::new(
3086                    su_bldg_center.x - (su_bldg_diameter / 6) - 2,
3087                    su_bldg_center.y - 2,
3088                    su_bldg_base + (su_bldg_diameter / 15) - 2,
3089                ),
3090                max: Vec3::new(
3091                    su_bldg_center.x + (su_bldg_diameter / 6) + 2,
3092                    su_bldg_center.y + 2,
3093                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3094                ),
3095            };
3096            let su_bldg_hut_entries2 = Aabb {
3097                min: Vec3::new(
3098                    su_bldg_center.x - (su_bldg_diameter / 6) - 2,
3099                    su_bldg_center.y - 1,
3100                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3101                ),
3102                max: Vec3::new(
3103                    su_bldg_center.x + (su_bldg_diameter / 6) + 2,
3104                    su_bldg_center.y + 1,
3105                    su_bldg_base + (su_bldg_diameter / 15) + 2,
3106                ),
3107            };
3108            let su_bldg_top_half = painter.aabb(Aabb {
3109                min: (su_bldg_center - (su_bldg_diameter / 6))
3110                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6)),
3111                max: (su_bldg_center + (su_bldg_diameter / 6))
3112                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3)),
3113            });
3114            let su_bldg_washed_top = painter
3115                .sphere(Aabb {
3116                    min: (su_bldg_center - (su_bldg_diameter / 6))
3117                        .with_z(su_bldg_base - (su_bldg_diameter / 15)),
3118                    max: (su_bldg_center + (su_bldg_diameter / 6))
3119                        .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3)),
3120                })
3121                .intersect(su_bldg_top_half);
3122            let su_bldg_top = painter
3123                .sphere(Aabb {
3124                    min: (su_bldg_center - (su_bldg_diameter / 6) + 1)
3125                        .with_z(su_bldg_base - (su_bldg_diameter / 15) + 1),
3126                    max: (su_bldg_center + (su_bldg_diameter / 6))
3127                        .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3)),
3128                })
3129                .intersect(su_bldg_top_half);
3130            let su_bldg_goldring = Aabb {
3131                min: (su_bldg_center - (su_bldg_diameter / 6))
3132                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 1),
3133                max: (su_bldg_center + (su_bldg_diameter / 6))
3134                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 2),
3135            };
3136            let su_bldg_room_clear = Aabb {
3137                min: (su_bldg_center - (su_bldg_diameter / 6) + 1)
3138                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + 1),
3139                max: (su_bldg_center + (su_bldg_diameter / 6) - 1)
3140                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3) - 1),
3141            };
3142            let su_bldg_floor = Aabb {
3143                min: (su_bldg_center - (su_bldg_diameter / 6) + 1)
3144                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 1),
3145                max: (su_bldg_center + (su_bldg_diameter / 6) - 1)
3146                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 2),
3147            };
3148            let su_bldg_room_lantern_pos =
3149                (su_bldg_center + 2).with_z(su_bldg_base - (su_bldg_diameter / 15) + 2);
3150            let su_bldg_floor_lantern_pos = (su_bldg_center + 2)
3151                .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 2);
3152            let su_bldg_floor_drawer_pos = (su_bldg_center - (su_bldg_diameter / 10))
3153                .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 2);
3154            let su_bldg_floor_potion_pos = (su_bldg_center - (su_bldg_diameter / 10))
3155                .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 3);
3156            let su_bldg_floor_bed_pos = Vec3::new(
3157                su_bldg_center.x - (su_bldg_diameter / 8),
3158                su_bldg_center.y,
3159                su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 2,
3160            );
3161            let su_bldg_floor_entry = Aabb {
3162                min: (su_bldg_center - 3)
3163                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 1),
3164                max: (su_bldg_center + 3)
3165                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 6) + 2),
3166            };
3167            let su_bldg_ropefix1 = Aabb {
3168                min: (su_bldg_center - 2)
3169                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3) - 3),
3170                max: (su_bldg_center + 2)
3171                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3) - 2),
3172            };
3173            let su_bldg_ropefix2 = Aabb {
3174                min: (su_bldg_center)
3175                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3) - 4),
3176                max: (su_bldg_center + 1)
3177                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3) - 3),
3178            };
3179            let su_bldg_rope = Aabb {
3180                min: (su_bldg_center).with_z(su_bldg_base - (su_bldg_diameter / 15) + 3),
3181                max: (su_bldg_center + 1)
3182                    .with_z(su_bldg_base - (su_bldg_diameter / 15) + (su_bldg_diameter / 3) - 4),
3183            };
3184            let su_bldg_pavillon_entries1 = Aabb {
3185                min: Vec3::new(
3186                    su_bldg_center.x - (su_bldg_diameter / 6),
3187                    su_bldg_center.y - 4,
3188                    su_bldg_base + (su_bldg_diameter / 15) - 2,
3189                ),
3190                max: Vec3::new(
3191                    su_bldg_center.x + (su_bldg_diameter / 6),
3192                    su_bldg_center.y + 4,
3193                    su_bldg_base + (su_bldg_diameter / 15),
3194                ),
3195            };
3196            let su_bldg_pavillon_entries2 = Aabb {
3197                min: Vec3::new(
3198                    su_bldg_center.x - (su_bldg_diameter / 6),
3199                    su_bldg_center.y - 3,
3200                    su_bldg_base + (su_bldg_diameter / 15),
3201                ),
3202                max: Vec3::new(
3203                    su_bldg_center.x + (su_bldg_diameter / 6),
3204                    su_bldg_center.y + 3,
3205                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3206                ),
3207            };
3208            let su_bldg_pavillon_entries3 = Aabb {
3209                min: Vec3::new(
3210                    su_bldg_center.x - (su_bldg_diameter / 6),
3211                    su_bldg_center.y - 2,
3212                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3213                ),
3214                max: Vec3::new(
3215                    su_bldg_center.x + (su_bldg_diameter / 6),
3216                    su_bldg_center.y + 2,
3217                    su_bldg_base + (su_bldg_diameter / 15) + 2,
3218                ),
3219            };
3220            let su_bldg_pavillon_entries4 = Aabb {
3221                min: Vec3::new(
3222                    su_bldg_center.x - 4,
3223                    su_bldg_center.y - (su_bldg_diameter / 6),
3224                    su_bldg_base + (su_bldg_diameter / 15) - 2,
3225                ),
3226                max: Vec3::new(
3227                    su_bldg_center.x + 4,
3228                    su_bldg_center.y + (su_bldg_diameter / 6),
3229                    su_bldg_base + (su_bldg_diameter / 15),
3230                ),
3231            };
3232            let su_bldg_pavillon_entries5 = Aabb {
3233                min: Vec3::new(
3234                    su_bldg_center.x - 3,
3235                    su_bldg_center.y - (su_bldg_diameter / 6),
3236                    su_bldg_base + (su_bldg_diameter / 15),
3237                ),
3238                max: Vec3::new(
3239                    su_bldg_center.x + 3,
3240                    su_bldg_center.y + (su_bldg_diameter / 6),
3241                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3242                ),
3243            };
3244            let su_bldg_pavillon_entries6 = Aabb {
3245                min: Vec3::new(
3246                    su_bldg_center.x - 2,
3247                    su_bldg_center.y - (su_bldg_diameter / 6),
3248                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3249                ),
3250                max: Vec3::new(
3251                    su_bldg_center.x + 2,
3252                    su_bldg_center.y + (su_bldg_diameter / 6),
3253                    su_bldg_base + (su_bldg_diameter / 15) + 2,
3254                ),
3255            };
3256            let su_bldg_pavillon_entries7 = Aabb {
3257                min: Vec3::new(
3258                    su_bldg_center.x - 4,
3259                    su_bldg_center.y,
3260                    su_bldg_base + (su_bldg_diameter / 15) - 2,
3261                ),
3262                max: Vec3::new(
3263                    su_bldg_center.x + 4,
3264                    su_bldg_center.y + (su_bldg_diameter / 6),
3265                    su_bldg_base + (su_bldg_diameter / 15),
3266                ),
3267            };
3268            let su_bldg_pavillon_entries8 = Aabb {
3269                min: Vec3::new(
3270                    su_bldg_center.x - 2,
3271                    su_bldg_center.y,
3272                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3273                ),
3274                max: Vec3::new(
3275                    su_bldg_center.x + 2,
3276                    su_bldg_center.y + (su_bldg_diameter / 6),
3277                    su_bldg_base + (su_bldg_diameter / 15) + 2,
3278                ),
3279            };
3280            let su_bldg_pavillon_barriers_1 = Aabb {
3281                min: Vec3::new(
3282                    su_bldg_center.x - 3,
3283                    su_bldg_center.y + (su_bldg_diameter / 6) - 3,
3284                    su_bldg_base + (su_bldg_diameter / 15),
3285                ),
3286                max: Vec3::new(
3287                    su_bldg_center.x + 3,
3288                    su_bldg_center.y + (su_bldg_diameter / 6) - 2,
3289                    su_bldg_base + (su_bldg_diameter / 15) + 1,
3290                ),
3291            };
3292            let su_bldg_pavillon_barriers_2 = Aabb {
3293                min: Vec3::new(
3294                    su_bldg_center.x - 4,
3295                    su_bldg_center.y + (su_bldg_diameter / 6) - 3,
3296                    su_bldg_base + (su_bldg_diameter / 15) - 1,
3297                ),
3298                max: Vec3::new(
3299                    su_bldg_center.x + 4,
3300                    su_bldg_center.y + (su_bldg_diameter / 6) - 2,
3301                    su_bldg_base + (su_bldg_diameter / 15),
3302                ),
3303            };
3304            let su_bldg_pavillon_barriers_keyhole = Aabb {
3305                min: Vec3::new(
3306                    su_bldg_center.x - 1,
3307                    su_bldg_center.y + (su_bldg_diameter / 6) - 3,
3308                    su_bldg_base + (su_bldg_diameter / 15) - 2,
3309                ),
3310                max: Vec3::new(
3311                    su_bldg_center.x,
3312                    su_bldg_center.y + (su_bldg_diameter / 6) - 2,
3313                    su_bldg_base + (su_bldg_diameter / 15) - 1,
3314                ),
3315            };
3316            match su_bldg_variant {
3317                0..=5 => {
3318                    // common parts for small hut / small pavillon,
3319                    painter.sphere(su_bldg_bottom1).fill(white.clone());
3320                    painter.sphere(su_bldg_bottom2).fill(white.clone());
3321                    painter.sphere(su_bldg_room).fill(white.clone());
3322                    su_bldg_washed_top.fill(washed.clone());
3323                    su_bldg_top.fill(top.clone());
3324                    painter.cylinder(su_bldg_goldring).fill(gold.clone());
3325                    painter.sphere(su_bldg_room_clear).clear();
3326                    painter.sprite(su_bldg_room_lantern_pos, SpriteKind::SeashellLantern);
3327                    match su_bldg_variant {
3328                        0..=3 => {
3329                            // small hut
3330                            painter.aabb(su_bldg_hut_entries1).clear();
3331                            painter.aabb(su_bldg_hut_entries2).clear();
3332                            painter.cylinder(su_bldg_floor).fill(white.clone());
3333                            painter.cylinder(su_bldg_floor_entry).clear();
3334                            painter.aabb(su_bldg_ropefix1).fill(ropefix1.clone());
3335                            painter.aabb(su_bldg_ropefix2).fill(ropefix2.clone());
3336                            painter.aabb(su_bldg_rope).fill(rope.clone());
3337                            painter.sprite(su_bldg_floor_lantern_pos, SpriteKind::SeashellLantern);
3338                            painter.sprite(su_bldg_floor_drawer_pos, SpriteKind::DrawerSmall);
3339                            painter.sprite(su_bldg_floor_potion_pos, SpriteKind::PotionMinor);
3340                            painter.sprite(su_bldg_floor_bed_pos, SpriteKind::Bed);
3341                        },
3342                        _ => {
3343                            // small pavillon, some with prisoners
3344                            if su_bldg_variant > 4 {
3345                                painter.aabb(su_bldg_pavillon_entries2).clear();
3346                                painter.aabb(su_bldg_pavillon_entries7).clear();
3347                                painter.aabb(su_bldg_pavillon_entries5).clear();
3348                                painter.aabb(su_bldg_pavillon_entries8).clear();
3349                                painter
3350                                    .aabb(su_bldg_pavillon_barriers_1)
3351                                    .fill(glass_barrier.clone());
3352                                painter
3353                                    .aabb(su_bldg_pavillon_barriers_2)
3354                                    .fill(glass_barrier.clone());
3355                                painter
3356                                    .aabb(su_bldg_pavillon_barriers_keyhole)
3357                                    .fill(glass_keyhole.clone());
3358                                let prisoner_pos = su_bldg_center.with_z(base + 2);
3359                                for _ in 0..(6
3360                                    + ((RandomField::new(0).get((prisoner_pos).with_z(base))) % 6))
3361                                {
3362                                    painter.spawn(
3363                                        EntityInfo::at(prisoner_pos.as_()).with_asset_expect(
3364                                            "common.entity.dungeon.sea_chapel.prisoner",
3365                                            &mut rng,
3366                                            None,
3367                                        ),
3368                                    )
3369                                }
3370                            } else {
3371                                painter.aabb(su_bldg_pavillon_entries1).clear();
3372                                painter.aabb(su_bldg_pavillon_entries2).clear();
3373                                painter.aabb(su_bldg_pavillon_entries3).clear();
3374                                painter.aabb(su_bldg_pavillon_entries4).clear();
3375                                painter.aabb(su_bldg_pavillon_entries5).clear();
3376                                painter.aabb(su_bldg_pavillon_entries6).clear();
3377                            };
3378                        },
3379                    }
3380                },
3381                6..=7 => {
3382                    // foundling
3383                    painter.sphere(foundling_bottom1).fill(white.clone());
3384                    painter.sphere(foundling_bottom2).fill(white.clone());
3385                    painter.sphere(foundling_top).fill(white.clone());
3386                },
3387                _ => {},
3388            };
3389        }
3390    }
3391}