Dynamic Growth

From DragonMineZ Wiki
Revision as of 06:12, 13 October 2026 by FuzzyBot (talk | contribs) (Updating to match new version of source page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Dynamic Growth is a progression system that runs alongside buying stats with Training Points: instead of (or as well as) spending TP on stat points, you earn practice XP toward each stat just by using it, by dealing damage, taking hits, spending stamina and ki, and training on the right kind of target. When a stat's practice XP bar is full, that stat goes up by 1 point and you get a message and a sound.

Practicing one stat also trains its linked stat at half speed, and stat points earned through practice don't make TP purchases more expensive (see the TP section below). Server owners configure the system under the dynamicGrowth key of config/dragonminez/general-server.json; it has its own page because it has more than 20 fields and its own anti-farming logic.

How each stat grows

Stat Practice XP comes from
STR Melee damage dealt (also when Ki Infusion is active, see kiWeaponMeleePwrShare).
SKP Damage dealt with strike techniques.
RES Stamina spent (staminaSpentXpRatio).
VIT Damage taken from an attacker.
PWR Damage dealt with ki attacks and with ki weapons.
ENE Ki spent (energySpentXpRatio).

Damage-based XP uses the damage of the hit, capped at 20% of the target's max health (at least 1), multiplied by the practice-source multipliers below. Creative and spectator players don't gain practice XP, and stats that are already at their cap don't grow.

Linked stats

Every bit of practice XP also gives a share of it (linkedStatXpShare, 50% by default) to the stat paired with it:

Stat Linked stat
STR SKP (and the other way round)
RES VIT (and the other way round)
PWR ENE (and the other way round)

So punching mobs grows STR at full speed and SKP at half speed, spending ki grows ENE and some PWR, and so on. The linked share is applied before the linked stat's own per-stat multiplier and limits, so it gets up to half as much. Each half respects its own per-player toggle: the linked stat still gains XP when the main stat's growth is switched off, and vice versa.

XP needed per point

With practiceCurveEnabled, raising a stat that currently has the value S needs:

RequiredXp = 70 + 2 × S + floor(S^1.35)

With the curve disabled, every point needs a flat 100 XP. A single gain can never be bigger than 10% of the XP needed for the next point.

Per-player toggles

When Dynamic Growth is enabled, each player can switch practice growth on or off for every stat from the Configuration screen of the character menu (Gameplay category, "Stat Growth" toggles). The choice is saved in the player's data.

Configuration

Everything below lives in the dynamicGrowth block of config/dragonminez/general-server.json.

Master toggles

Key Default What it does
enabled true Master toggle for the whole system.
practiceCurveEnabled true If false, every stat point needs a flat 100 practice XP instead of the curve above.
practiceXpMultiplier 2.0 Global multiplier applied to all practice XP.

Per-stat practice multipliers

Key Default What it does
strPracticeMultiplier 1.0 Multiplier on STR practice XP.
skpPracticeMultiplier 1.0 Multiplier on SKP practice XP.
resPracticeMultiplier 1.5 Multiplier on RES practice XP.
vitPracticeMultiplier 0.5 Multiplier on VIT practice XP.
pwrPracticeMultiplier 1.0 Multiplier on PWR practice XP.
enePracticeMultiplier 1.5 Multiplier on ENE practice XP.

Negative values are treated as 0 (no growth for that stat).

Stamina and ki spending

Key Default What it does
staminaSpentXpRatio 0.1 RES practice XP per point of stamina spent.
energySpentXpRatio 0.1 ENE practice XP per point of ki spent.
kiWeaponMeleePwrShare 0.25 Melee hits with Ki Infusion active give STR XP plus this fraction of the same XP as PWR. (Melee hits with a ki weapon give PWR XP only.)
linkedStatXpShare 0.5 Fraction of every practice XP gain that also goes to the linked stat. 0 turns linked growth off.

Stamina and ki spending award XP directly and bypass the repeat-target anti-farm check below, since they aren't tied to a specific target.

TP interplay

Key Default What it does
naturalCombatTpMultiplier 1.0 Multiplier on the TP earned from hits and kills while Dynamic Growth is enabled. 0 removes combat TP entirely.
manualTpPurchasesEnabled true Whether players can still buy stat points with TP. If false, stats only grow through practice (and other sources such as capsules or racial skills).
attributeTpCostMultiplier 1.0 Multiplier on the TP cost of buying a stat point (minimum 1.0). See the TP cost formula on General Server Config.
growthStatsCountForTpCost false Whether stat points earned through Dynamic Growth raise the TP cost of buying stats.

The mod keeps count of the stat points each player earned through practice. With growthStatsCountForTpCost off (the default), those points are left out of the total used for the TP cost of the next stat point, so growing through practice never makes buying stats more expensive. The same reduced total drives the other values that follow the stat cost: the progression TP bonus (increaseTPGainRelativeToTPCost) and the TP rewards of training minigames.

Points bought with TP or given by capsules, wishes, commands and so on count normally. If a /dmzstats reset keeps only a percentage of your stats, the practice count shrinks by the same percentage; a full reset clears it.

Practice-source multipliers

These scale XP down for easy or low-effort training, so the system doesn't trivially outpace the intended progression:

Key Default Applies when…
passiveAnimalPracticeMultiplier 0.5 Training on animals (cows, sheep and so on).
villagerPracticeMultiplier 0.1 Training on protected NPCs (villagers, Namekian villagers and traders, demon villagers, masters, the dragon).
lowDamagePracticeMultiplier 0.2 The hit dealt less than 0.5 damage.
shadowDummyPracticeMultiplier 0.35 Training on a Shadow Dummy.
noRiskPracticeMultiplier 0.5 The target is not a player or a monster and isn't targeting the player back (no real risk).

Multipliers combine: a 0.3-damage hit on a passive cow counts 0.2 × 0.5 × 0.5.

Repeat-target anti-farming

Grinding the same target repeatedly falls off inside a time window:

Key Default What it does
repeatTargetWindowSeconds 30 Length of the window. It starts at the first hit on a target and restarts once it has fully elapsed.
repeatTargetSoftCap 8 Hits on the same target after which the soft multiplier applies.
repeatTargetHardCap 24 Hits on the same target after which the hard multiplier applies.
repeatTargetSoftMultiplier 0.5 Multiplier from hit 9 to hit 24 (with the default caps).
repeatTargetHardMultiplier 0.15 Multiplier from hit 25 on.

With the defaults, hits 1–8 on the same target within the window give full XP (1.0), hits 9–24 give 0.5, and every hit after that gives 0.15. A cap of 0 disables that step. The Bio-Android Vital Drain TP reward uses the same anti-farm counter.

Reload and validate

  1. Edit the dynamicGrowth block in config/dragonminez/general-server.json.
  2. Validate the JSON syntax.
  3. Run /dmzreload config.
  4. Test in-game: fight a mob and confirm that stat points arrive at the expected rate, and that repeated hits on the same target fall off as expected.