Skip to main content

veloren_world/site/plot/
sea_chapel.rs

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