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]