scripts/dungeon_theme.pyΒΆ
Part of Dungeon Explorer.
1"""Per-tier visual theming: tile palette and enemy pool by dungeon depth."""
2
3# Theme tiers every 10 levels
4THEMES = {
5 1: {
6 "name": "Stone Catacombs",
7 "floor_colour": (0.25, 0.22, 0.20, 1.0),
8 "wall_colour": (0.45, 0.40, 0.35, 1.0),
9 "corridor_colour": (0.28, 0.25, 0.22, 1.0),
10 "enemy_pool": ["slime", "bat_swarm", "skeleton"],
11 },
12 11: {
13 "name": "Goblin Warrens",
14 "floor_colour": (0.20, 0.22, 0.18, 1.0),
15 "wall_colour": (0.35, 0.38, 0.30, 1.0),
16 "corridor_colour": (0.23, 0.25, 0.20, 1.0),
17 "enemy_pool": ["skeleton", "goblin", "archer_skeleton"],
18 },
19 21: {
20 "name": "Haunted Depths",
21 "floor_colour": (0.18, 0.18, 0.22, 1.0),
22 "wall_colour": (0.30, 0.30, 0.40, 1.0),
23 "corridor_colour": (0.20, 0.20, 0.25, 1.0),
24 "enemy_pool": ["skeleton", "archer_skeleton", "wraith"],
25 },
26 31: {
27 "name": "Crystal Caverns",
28 "floor_colour": (0.15, 0.20, 0.25, 1.0),
29 "wall_colour": (0.25, 0.35, 0.45, 1.0),
30 "corridor_colour": (0.18, 0.22, 0.28, 1.0),
31 "enemy_pool": ["wraith", "golem", "goblin"],
32 },
33 51: {
34 "name": "Infernal Pit",
35 "floor_colour": (0.25, 0.15, 0.12, 1.0),
36 "wall_colour": (0.40, 0.25, 0.20, 1.0),
37 "corridor_colour": (0.28, 0.18, 0.15, 1.0),
38 "enemy_pool": ["wraith", "golem", "demon"],
39 },
40 71: {
41 "name": "Abyssal Halls",
42 "floor_colour": (0.12, 0.10, 0.15, 1.0),
43 "wall_colour": (0.22, 0.18, 0.28, 1.0),
44 "corridor_colour": (0.15, 0.12, 0.18, 1.0),
45 "enemy_pool": ["demon", "golem", "wraith"],
46 },
47 91: {
48 "name": "Dragon's Domain",
49 "floor_colour": (0.20, 0.12, 0.08, 1.0),
50 "wall_colour": (0.35, 0.20, 0.15, 1.0),
51 "corridor_colour": (0.25, 0.15, 0.10, 1.0),
52 "enemy_pool": ["demon", "demon", "golem"],
53 },
54}
55
56
57def get_theme(dungeon_level: int) -> dict:
58 """Return the theme dict for a given dungeon level."""
59 best_key = 1
60 for key in sorted(THEMES.keys()):
61 if dungeon_level >= key:
62 best_key = key
63 return THEMES[best_key]