There is no experience bar and no level up. Using a stat rolls once for a chance to raise it, and a soft cap bends that chance instead of capping the number
Guided views
Explore this system
Step through curated paths without changing the source diagram.
Beat
Next
ReadyChapter 01 / 01
Guided chapter
Diagram guideExplore this system
Inspecting compiled semantics
E ExportT ThemeS Style0 Reset+ Zoom in- Zoom outEsc Close
Find a node
⌕/
No matching nodes
Semantic passport
Verified source
Authored reach
Route probeChoose a start node
Pick two semantic nodes on the diagram
Choose the source, then the destination. Direction matters.
Semantic lensCompare system roles
Choose up to two semantic kinds. One reveals its real traffic; two compare only direct authored relationships.
Choose a kind to inspect its nodes and touching relationships.
Semantic radar
Building overview
Click nodeDrag to pan
The only way a stat grows through play
• In normal play a stat rises only when it is used; quest StatInfo rewards are the one authored exception
• OnStatUse increments one counter and then immediately rolls for advancement
• The roll happens on every single use, not once every 25 uses
• On a hit, IncreaseStat adds one to that stat's Training field and revalidates
• There is no experience value, no level, and no point buy anywhere on this path
The curve, in real numbers
• Virtual rank is the stat's use count divided by UsesPerRank, which ships at 25
• chance = BaseProgressionChance * exp(-3 * rank / softCap), base ships at 0.12
• Stat rolls are then scaled by StatProgressionRate, which ships at 2.25
• So a fresh stat sits near 27 percent per use, and near 1.3 percent at the soft cap
• The draw is integer: threshold = chance * 10000, compared against util.Rand(10000)
The soft cap is a brake, not a wall
• StatProgressionSoftCap ships at 150 and is a virtual rank, never a limit on the value
• Above it the curve keeps decaying by ProgressionDecayAboveCap rather than stopping
• It also acts as an anti exploit floor: a raw stat above 150 pins the virtual rank to it
• IncreaseStat has no bound to check, and stats.Recalculate copies Value to ValueAdj raw
• The only real ceiling in this function is MobStatCap, and it applies to mobs alone
Skills ride the same machinery
• OnSkillUse tracks the use, rolls, then fires OnStatUse for the skill's governing stat
• Same CalculateProgressionChance, with SkillSoftCap at 50 in place of 150
• Per skill multipliers normalise fast firing combat skills against rare utility skills
• A crit or a critical failure each grant an extra progression check; the crit's runs at double the normal chance
• IncreaseSkill has no cap either, so the soft cap only bends the odds here too
Traced from source
• github.com/pruuk/DOGMud at 8847e15537f4b3289775aa3bb2d681302b46f3c8
• internal/characters/progression.go lines 44 to 62, the exponential chance curve
• internal/characters/progression.go lines 149 to 193, the stat roll and the soft cap floor
• internal/characters/progression.go lines 68 to 144 and 214 to 266, the skill loop
• internal/characters/skills.go lines 191 to 222, internal/stats/stats.go line 46
• _datafiles/config.yaml lines 718 to 727, the shipped balance knobs
Lifecycle diagram • Built with Archify • Create yours ↗ • Hover to trace • R route • Click to focus • +/− zoom • M radar • [/] views • P play story • T theme • E export