Configuration
Source: src/dungeon_config.c · 33 lines · 3 functions.
Module responsibility
Holds the tunable generation, reward, progression and combat rules used by the other Dungeon modules.
Module entry points
These functions are exposed to the rest of the Dungeon system. Open one to follow its decisions and helper calls.
How to read these diagrams
Each function has an expandable structural diagram derived from the current C source. Decisions split into True and False, loop bodies are indented, and arrows show statement order.
These are source diagrams before preprocessing, not runtime traces. Callback execution, task scheduling and macro expansion are not inferred.
Functions in this file
initDungeonConfig() · source line 5
void initDungeonConfig(void)
- Execute
config = (DungeonConfig){ .roomsPerFloor = 27, .extraConnectionPercent = 5, .enemyRoomRatio = 4, .treasureRoomRatio = 3, .emptyRoomRatio = 3, .trapsPer100Rooms = 50, .corridorTreasuresPer100Rooms = 20, .combatDiceSides = 8, .combatMinimumDamage = 1, .avoidChancePercent = 50, .runChancePercent = 50, .floor1TrapDamageMin = 2, .floor1TrapDamageMax = 5, .floor2TrapDamageMin = 4, .floor2TrapDamageMax = 8, .floor3TrapDamageMin = 6, .floor3TrapDamageMax = 12, .rareTreasurePercent = 10, .normalGoldRatio = 2, .normalHealthRatio = 1, .rareLifeRatio = 3, .rareAttackRatio = 4, .rareDefenceRatio = 3, .rareLifeHealthGain = 3, .rareAttackGain = 1, .rareDefenceGain = 1, .maxHealthPotions = 1, .floor1EnemyMinLevel = 1, .floor1EnemyMaxLevel = 2, .floor2EnemyMinLevel = 2, .floor2EnemyMaxLevel = 3, .floor3EnemyMinLevel = 3, .floor3EnemyMaxLevel = 4, .enemyLevel1Health = 8, .enemyLevel1Attack = 2, .enemyLevel1Defence = 1, .enemyLevel1Xp = 10, .enemyLevel2Health = 12, .enemyLevel2Attack = 3, .enemyLevel2Defence = 1, .enemyLevel2Xp = 15, .enemyLevel3Health = 16, .enemyLevel3Attack = 4, .enemyLevel3Defence = 2, .enemyLevel3Xp = 22, .enemyLevel4Health = 22, .enemyLevel4Attack = 5, .enemyLevel4Defence = 3, .enemyLevel4Xp = 30, .dragonHealth = 40, .dragonAttack = 7, .dragonDefence = 4, .dragonXp = 60, .floor1GoldMin = 10, .floor1GoldMax = 20, .floor2GoldMin = 20, .floor2GoldMax = 35, .floor3GoldMin = 35, .floor3GoldMax = 55, .shopHealthBaseCost = 40, .shopAttackBaseCost = 60, .shopDefenceBaseCost = 50, .shopRestoreCost = 20, .shopCostIncreasePercent = 25, .aiGlobalShopBudget = 100, .shopHealthGain = 3, .shopAttackGain = 1, .shopDefenceGain = 1, .startHealth = 20, .startAttack = 3, .startDefence = 1, .healthRegenMoves = 25, .healthRegenAmount = 1, .healthRegenLimitPercent = 90, .firstLevelXp = 40, .xpGrowthTenthsPercent = 125, .levelHealthGain = 3, .levelAttackGain = 1, .levelDefenceGain = 1, .chosenHealthGain = 3, .chosenAttackGain = 1, .chosenDefenceGain = 1, };
Read original function source
void initDungeonConfig(void)
{
config = (DungeonConfig){
.roomsPerFloor = 27, .extraConnectionPercent = 5, .enemyRoomRatio = 4, .treasureRoomRatio = 3, .emptyRoomRatio = 3,
.trapsPer100Rooms = 50, .corridorTreasuresPer100Rooms = 20, .combatDiceSides = 8, .combatMinimumDamage = 1,
.avoidChancePercent = 50, .runChancePercent = 50, .floor1TrapDamageMin = 2, .floor1TrapDamageMax = 5,
.floor2TrapDamageMin = 4, .floor2TrapDamageMax = 8, .floor3TrapDamageMin = 6, .floor3TrapDamageMax = 12,
.rareTreasurePercent = 10, .normalGoldRatio = 2, .normalHealthRatio = 1, .rareLifeRatio = 3, .rareAttackRatio = 4,
.rareDefenceRatio = 3, .rareLifeHealthGain = 3, .rareAttackGain = 1, .rareDefenceGain = 1, .maxHealthPotions = 1,
.floor1EnemyMinLevel = 1, .floor1EnemyMaxLevel = 2, .floor2EnemyMinLevel = 2, .floor2EnemyMaxLevel = 3,
.floor3EnemyMinLevel = 3, .floor3EnemyMaxLevel = 4, .enemyLevel1Health = 8, .enemyLevel1Attack = 2, .enemyLevel1Defence = 1, .enemyLevel1Xp = 10,
.enemyLevel2Health = 12, .enemyLevel2Attack = 3, .enemyLevel2Defence = 1, .enemyLevel2Xp = 15,
.enemyLevel3Health = 16, .enemyLevel3Attack = 4, .enemyLevel3Defence = 2, .enemyLevel3Xp = 22,
.enemyLevel4Health = 22, .enemyLevel4Attack = 5, .enemyLevel4Defence = 3, .enemyLevel4Xp = 30,
.dragonHealth = 40, .dragonAttack = 7, .dragonDefence = 4, .dragonXp = 60,
.floor1GoldMin = 10, .floor1GoldMax = 20, .floor2GoldMin = 20, .floor2GoldMax = 35, .floor3GoldMin = 35, .floor3GoldMax = 55,
.shopHealthBaseCost = 40, .shopAttackBaseCost = 60, .shopDefenceBaseCost = 50, .shopRestoreCost = 20, .shopCostIncreasePercent = 25,
.aiGlobalShopBudget = 100, .shopHealthGain = 3, .shopAttackGain = 1, .shopDefenceGain = 1, .startHealth = 20, .startAttack = 3, .startDefence = 1,
.healthRegenMoves = 25, .healthRegenAmount = 1, .healthRegenLimitPercent = 90, .firstLevelXp = 40, .xpGrowthTenthsPercent = 125,
.levelHealthGain = 3, .levelAttackGain = 1, .levelDefenceGain = 1, .chosenHealthGain = 3, .chosenAttackGain = 1, .chosenDefenceGain = 1,
};
}applyDungeonConfig() · source line 28
void applyDungeonConfig(const DungeonConfig *saved_config)
- Decision
saved_config != NULLTrue- Execute
config = *saved_config;
FalseContinue after this decision.
Read original function source
void applyDungeonConfig(const DungeonConfig *saved_config)
{
if (saved_config != NULL) config = *saved_config;
}getDungeonConfig() · source line 33
const DungeonConfig *getDungeonConfig(void)
- Exit this function
return &config;
Read original function source
const DungeonConfig *getDungeonConfig(void) { return &config; }Complete original file, including constants and data
/* Coded By JD(2026) */
#error "Reference listing only — not provided as build-ready source."
#include "dungeon_config.h"
static DungeonConfig config;
void initDungeonConfig(void)
{
config = (DungeonConfig){
.roomsPerFloor = 27, .extraConnectionPercent = 5, .enemyRoomRatio = 4, .treasureRoomRatio = 3, .emptyRoomRatio = 3,
.trapsPer100Rooms = 50, .corridorTreasuresPer100Rooms = 20, .combatDiceSides = 8, .combatMinimumDamage = 1,
.avoidChancePercent = 50, .runChancePercent = 50, .floor1TrapDamageMin = 2, .floor1TrapDamageMax = 5,
.floor2TrapDamageMin = 4, .floor2TrapDamageMax = 8, .floor3TrapDamageMin = 6, .floor3TrapDamageMax = 12,
.rareTreasurePercent = 10, .normalGoldRatio = 2, .normalHealthRatio = 1, .rareLifeRatio = 3, .rareAttackRatio = 4,
.rareDefenceRatio = 3, .rareLifeHealthGain = 3, .rareAttackGain = 1, .rareDefenceGain = 1, .maxHealthPotions = 1,
.floor1EnemyMinLevel = 1, .floor1EnemyMaxLevel = 2, .floor2EnemyMinLevel = 2, .floor2EnemyMaxLevel = 3,
.floor3EnemyMinLevel = 3, .floor3EnemyMaxLevel = 4, .enemyLevel1Health = 8, .enemyLevel1Attack = 2, .enemyLevel1Defence = 1, .enemyLevel1Xp = 10,
.enemyLevel2Health = 12, .enemyLevel2Attack = 3, .enemyLevel2Defence = 1, .enemyLevel2Xp = 15,
.enemyLevel3Health = 16, .enemyLevel3Attack = 4, .enemyLevel3Defence = 2, .enemyLevel3Xp = 22,
.enemyLevel4Health = 22, .enemyLevel4Attack = 5, .enemyLevel4Defence = 3, .enemyLevel4Xp = 30,
.dragonHealth = 40, .dragonAttack = 7, .dragonDefence = 4, .dragonXp = 60,
.floor1GoldMin = 10, .floor1GoldMax = 20, .floor2GoldMin = 20, .floor2GoldMax = 35, .floor3GoldMin = 35, .floor3GoldMax = 55,
.shopHealthBaseCost = 40, .shopAttackBaseCost = 60, .shopDefenceBaseCost = 50, .shopRestoreCost = 20, .shopCostIncreasePercent = 25,
.aiGlobalShopBudget = 100, .shopHealthGain = 3, .shopAttackGain = 1, .shopDefenceGain = 1, .startHealth = 20, .startAttack = 3, .startDefence = 1,
.healthRegenMoves = 25, .healthRegenAmount = 1, .healthRegenLimitPercent = 90, .firstLevelXp = 40, .xpGrowthTenthsPercent = 125,
.levelHealthGain = 3, .levelAttackGain = 1, .levelDefenceGain = 1, .chosenHealthGain = 3, .chosenAttackGain = 1, .chosenDefenceGain = 1,
};
}
void applyDungeonConfig(const DungeonConfig *saved_config)
{
if (saved_config != NULL) config = *saved_config;
}
const DungeonConfig *getDungeonConfig(void) { return &config; }