Secret Sauce LootGen

ARPG progression generator by Charles Torris.

This tool:

Presets

Loading presets…
Game Configuration
Character
Min Max
Force
Intelligence
Dexterity
Attack Per Second (APS)
APS from to
Character can equip up to APS modifiers
Flat DMG
FlatDmg from to
Character can equip up to items that source flat dmg
DMG modifiers
Dmg mod from to
Character can equip up to items using dmg modifiers
DPS projection
see DPS projection per level
XP Configuration
XP base multiplier
see XP per level
Level Time
level length (s) to
Time to endgame : h
Loot & Affixes
Resist Balance
Resist from to
Character can equip up to items with resistance affixes
Simulation

    
Show formulas

This notice explains the configuration parameters (state) needed to reproduce the loot compute logic outside of JavaScript, plus the core mathematical steps for level-based item generation.

Parameters

  • state.levels: total simulated levels (normalization denominator).
  • state.flat_damage_min/max: floor/ceiling for flat damage growth.
  • state.flat_damage_power_progression: exponent controlling curve shape.
  • state.flat_damage_equipement_slots_auto: divisor based on flat-damage-capable slots.
  • state.attack_speed_min/max: APS range used for bonuses.
  • state.attack_speed_power_progression: attack speed curve exponent.
  • state.attack_speed_slots_auto: slots that contribute attack speed.
  • state.mod_damage_min/max: percent damage modifier range.
  • state.mod_damage_power_progression & state.mod_damage_slots_auto: curve exponent and slot divisor for mods.
  • state.resistance_affix_min/max: resist value range per affix.
  • state.resistance_curve: exponent shaping resistance growth.
  • state.generate_percent: loot generation scale.
  • state.rarity_base_weights & state.rarity_weight_growth: base/level weights for rarities.
  • state.damage_types: metadata linking damage to attributes and colors.
  • state.equipment_slots: slot permissions (flat damage, mods, AS, resist) that determine distribution.

Core formulas

normalizedProgress(L) = clamp(((L − 1) / max(1, levels − 1)), 0, 1).

flatDamage(L) = (flat_damage_min + (flat_damage_max − flat_damage_min) * normalizedProgress(L)flat_damage_power_progression) / flat_damage_equipement_slots_auto.

damageMod(L) = (mod_damage_min + (mod_damage_max − mod_damage_min) * normalizedProgress(L)mod_damage_power_progression) / mod_damage_slots_auto.

targetAPS(L) = attack_speed_min + (attack_speed_max − attack_speed_min) * normalizedProgress(L)attack_speed_power_progression.

attackSpeedBonus(L) = ((targetAPS(L) − attack_speed_min) / attack_speed_min * 100) / attack_speed_slots_auto.

resistance(L) = resistance_affix_min + (resistance_affix_max − resistance_affix_min) * normalizedProgress(L)resistance_curve.

applyJitter(value, seed) = value * (1 + offset), offset ∈ [−flat_damage_jitter_pct, +flat_damage_jitter_pct], pseudo-random per level.

rarityWeight(rarity) = (baseWeight + rarity_weight_growth * level) * rarity_power_multiplier.

Final loot roll sums flatDamage, damageMod, attackSpeedBonus, resistance per affix, and rarityWeight filtered by slot/category permissions.

Translate these steps into your engine of choice by feeding the same state values (from presets/lootgen_default.js) into matching curve evaluators and slot filters.