Repository navigation
Config Reference
This reference tracks Irongoon main.future, currently packaged as v0.5.1. Its rolling Latest Irongoon Future prerelease includes matching Severed Chains main.spike-testing builds. Use the release notes for exact source revisions; rolling assets change when new builds publish.
Profiles are YAML files in mods/irongoon/configs whose names end in -ig.yaml. In the Irongoon configuration screen, use Rescan Profiles, Load YAML Profile, and Save YAML As... to manage them. If no profiles are found, the older mods/irongoon/config.yaml is available as the Legacy fallback; saving it creates configs/legacy-ig.yaml. Do not place profiles in the old US folder.
Each campaign stores a canonical configuration snapshot. New campaigns use their staged snapshot, including settings selected through an SC preset; if none exists, Irongoon selects a YAML profile or its Blueprint fallback. Loading a saved campaign applies its snapshot rather than rereading the source file. To apply an edited file, select it with Load YAML Profile and choose Use settings. Existing campaigns then require saving and reloading. Active Configuration identifies the SC preset and retains (Modified) after staging until the preset is saved. Save YAML As... creates a separate profile file; it is not required to use Blueprint settings in a campaign.
Option names and enum values are case-sensitive. Missing keys use the shipped Irongoon Blueprint defaults. The Config Template and web builder are explicit custom presets and can differ from those defaults. Unknown keys are ignored with warnings; invalid values for known keys fail validation.
The base seed used for deterministic randomization. Use an eight-digit, 32-bit hexadecimal value such as 2F055604.
When useRandomSeedOnNewCampaign is FALSE, this seed applies to every campaign loaded with Irongoon. When it is TRUE, a campaign-specific seed is generated and saved when a new campaign starts.
Controls the total points available for Attack, Magic Attack, Defense, and Magic Defense at each character level.
| Value | Description |
|---|---|
RANDOMIZE_BOUNDS_PER_LEVEL |
Randomizes the total between the lowest and highest character totals available at that level |
MAINTAIN_STOCK |
Keeps each character's stock total, then redistributes it using bodyTotalStatsDistributionPerLevel
|
AVERAGE_ALL_CHARACTERS |
Uses the average total across all characters at that level, then redistributes it |
STOCK |
Uses the stock stat values without redistributing them |
Accepted schema field reserved for character total-stat bounds. Current runtime does not consume it, so every value has the same current behavior.
| Value | Description |
|---|---|
STOCK |
Accepted; currently no runtime effect |
RANDOM_MODIFIER |
Accepted; currently no runtime effect |
RANDOM_MODIFIER_CUSTOM_UPPER_BOUND |
Accepted; currently no runtime effect |
Controls how the selected total is distributed among the four character body stats.
| Value | Description |
|---|---|
RANDOM |
Uses a random distribution for each character and level |
DABAS_FIXED |
Uses one Dabas-style distribution per character across all levels |
DABAS_PER_LEVEL |
Uses a Dabas-style distribution that may change by level |
DABAS_FIXED_CUSTOM |
Reserved custom fixed distribution mode; not implemented |
DABAS_PER_LEVEL_CUSTOM |
Reserved custom per-level distribution mode; not implemented |
| Value | Description |
|---|---|
MAINTAIN_STOCK |
Uses stock character HP |
RANDOMIZE_BOUNDS_PER_LEVEL |
Randomizes HP between the lowest and highest character HP values available at each level |
RANDOMIZE_STOCK_BOUNDS |
Applies one seeded percentage modifier to the character's stock HP progression |
RANDOMIZE_RANDOM_STOCK_BOUNDS |
Applies a newly rolled percentage modifier to stock HP when recalculated |
RANDOMIZE_BOUNDS_PERCENT_MODIFIED_PER_LEVEL |
Randomizes within the per-level character bounds and applies the configured percentage bounds |
The upper percentage-point bound used by character HP modes that apply percentage modifiers. 150 permits up to a 50% increase.
The lower percentage-point bound used by character HP modes that apply percentage modifiers. 75 permits up to a 25% decrease.
| Value | Description |
|---|---|
MAINTAIN_STOCK |
Uses stock character Speed |
RANDOMIZE_BOUNDS |
Randomizes Speed between the lowest and highest character values available at that level |
RANDOMIZE_RANDOM_BOUNDS |
Applies a random percentage modifier to the character's stock Speed using the configured bounds |
The upper percentage-point bound used by speedStatPerLevel: RANDOMIZE_RANDOM_BOUNDS. 150 permits up to a 50% increase over stock Speed.
The lower percentage-point bound used by speedStatPerLevel: RANDOMIZE_RANDOM_BOUNDS. 30 permits up to a 70% decrease from stock Speed.
Controls normal-form character elements independently from Dragoon elements.
| Value | Description |
|---|---|
STOCK |
Uses each character's stock element |
RANDOM_CAMPAIGN |
Assigns a seeded element roster for the campaign |
RANDOM_BATTLE |
Assigns a new element roster for each battle |
Campaign and battle assignments shuffle the stock character-element roster, so duplicate stock elements remain possible where they already occur.
When TRUE, No Element has a 50% chance to replace one non-overridden randomized character slot. Divine is rolled separately with its existing 50% insertion rule. This setting has no effect with characterElements: STOCK.
A positional list by character ID: Dart, Lavitz, Shana, Rose, Haschel, Albert, Meru, Kongol, and Miranda. Use skip or an empty value to leave a slot randomized.
Built-in values are fire, water, wind, earth, dark, light, thunder, noelement, and divine.
characterElementOverride: ["skip", "light", "noelement", "skip"]In this example Dart and Rose remain randomized, Lavitz is Light, and Shana is No Element. Overrides apply only to randomized character-element modes.
| Value | Description |
|---|---|
STOCK |
Leaves character availability under normal story control |
PERMANENTLY |
Enables all characters and keeps them enabled |
STORY_CONTROLLED |
Enables all characters initially, then allows story progression to control them |
This option only initializes correctly when starting a new campaign. Existing campaigns may require the Severed Chains game-state editor to correct party flags.
| Value | Description |
|---|---|
STOCK |
Keeps the current battle party |
RANDOM_CAMPAIGN |
Uses a seeded randomized party assignment |
RANDOM_BATTLE |
Randomizes the party for each battle |
Only enabled characters are eligible.
A positional list of character IDs that locks specific battle-party slots. Omitted slots remain randomized.
battlePartyOverride: [3, 6]This places Rose in slot 0 and Meru in slot 1, leaving the remaining configured slot randomized. Overrides take priority over battlePartyPool and must reference enabled characters.
The requested party size from 1 through 3.
A list of enabled character IDs eligible for randomized slots. An empty list uses every enabled character.
battlePartyPool: [0, 3, 6]| Value | Description |
|---|---|
TRUE |
Allows the same character to fill more than one randomized slot |
FALSE |
Uses each character at most once |
When duplicates are disabled and the eligible pool is smaller than battlePartySize, the generated party contains only the available unique characters.
| Value | Description |
|---|---|
STOCK |
Leaves Dragoon Spirit goods under normal story control |
PERMANENTLY |
Grants all seven base Dragoon Spirits and prevents them from being removed |
STORY_CONTROLLED |
Grants all seven base Dragoon Spirits initially, then allows story progression to control them |
This option grants spirits only when starting a new campaign. It does not add missing spirits when loading an existing campaign. Severed Chains owns Dragoon level progression independently and initializes each character at Dragoon level 1.
The goods retain their vanilla character mappings: Red unlocks Dart, Jade unlocks Lavitz and Albert, Silver unlocks Shana and Miranda, Dark unlocks Rose, Violet unlocks Haschel, Blue unlocks Meru, and Gold unlocks Kongol. Divine is not granted initially. With PERMANENTLY, Red remains protected when Divine is acquired, so both goods remain present.
Controls the total points available for Dragoon Attack, Magic Attack, Defense, and Magic Defense at each Dragoon level.
| Value | Description |
|---|---|
RANDOMIZE_BOUNDS_PER_LEVEL |
Randomizes the total between the lowest and highest Dragoon totals available at that level |
MAINTAIN_STOCK |
Keeps each character's stock Dragoon total, then redistributes it |
AVERAGE_ALL_CHARACTERS |
Uses the average Dragoon total across all characters at that level, then redistributes it |
STOCK |
Uses the stock Dragoon stat values without redistributing them |
Accepted schema field reserved for Dragoon total-stat bounds. Current runtime does not consume it, so every value has the same current behavior.
| Value | Description |
|---|---|
STOCK |
Accepted; currently no runtime effect |
RANDOM_MODIFIER |
Accepted; currently no runtime effect |
RANDOM_MODIFIER_CUSTOM_UPPER_BOUND |
Accepted; currently no runtime effect |
Controls how the selected total is distributed among the four Dragoon stats.
| Value | Description |
|---|---|
RANDOM |
Uses a random distribution for each character and Dragoon level |
DABAS_FIXED |
Uses one Dabas-style distribution per character across all Dragoon levels |
DABAS_PER_LEVEL |
Uses a Dabas-style distribution that may change by Dragoon level |
DABAS_FIXED_CUSTOM |
Reserved custom fixed distribution mode; not implemented |
DABAS_PER_LEVEL_CUSTOM |
Reserved custom per-level distribution mode; not implemented |
Controls Dragoon-form elements independently from characterElements.
| Value | Description |
|---|---|
STOCK |
Uses Severed Chains' stock Dragoon element, including Divine Dragoon Dart |
RANDOM_CAMPAIGN |
Assigns each Dragoon a seeded element for the campaign |
RANDOM_BATTLE |
Assigns each Dragoon an element for the current battle |
RANDOM_TRANSFORM |
Rolls an element when that character transforms and keeps it until detransformation |
Campaign and battle modes assign without replacement while unique eligible elements remain, then reuse the pool if necessary. Every registered built-in or custom element is eligible except No Element and Divine, which receive their special handling below.
Only the Dragoon's resolved defending element changes. Attack elements, Dragoon spells, items, enemies, weaknesses, resistances, immunities, equipment effects, custom-element behavior, and Dragoon Space effects continue to use Severed Chains' normal combat logic.
For campaign and battle modes, TRUE enables the existing 50% No Element insertion rule. Divine has a separate 50% insertion rule whether this setting is enabled or not. Explicit override slots are never replaced.
For RANDOM_TRANSFORM, TRUE adds No Element to the equally weighted transform pool; Divine is always in that pool.
A positional list by character ID. Use skip or an empty value to leave a slot randomized. Overrides apply to all randomized Dragoon modes and are ignored by STOCK.
Accepted built-in aliases are fire, water, wind, earth, dark, light, thunder, none, noelement, and divine. Custom elements use their full registry ID.
dragoonElementOverride: ["fire", "skip", "example_mod:cosmic"]This forces Dart to Fire and Shana to example_mod:cosmic, while Lavitz and all unlisted Dragoons remain randomized. An invalid alias or registry ID stops loading with the affected character index in the error.
Controls which Dragoon spell occupies each character's existing unlock slot. Blueprint default: RANDOMIZE_SEQUENCE.
| Value | Description |
|---|---|
STOCK |
Keeps every spell in its registered unlock slot |
RANDOMIZE_SEQUENCE |
Applies a seeded, character-local permutation to eligible spell IDs while preserving every slot's spirit and Dragoon-level criteria |
Sequence randomization processes every character, including characters enabled by enableAllCharacters, and preserves each character's number and timing of unlock milestones. It leaves an unprofiled custom spell in its original slot and does nothing when a character has fewer than two eligible spells. Because spell IDs move across the existing bounded schedule, a character is not left waiting from character level 1 through 50 for another spell.
Irongoon rebuilds the sequence whenever a save is loaded. Changing the seed or this mode on an existing save intentionally recomputes unlocked spells from the character's current Dragoon level and spirit criteria; the old spell-ID mapping is not migrated.
Controls the source pool for stat, element, and complete effect-package shuffles. Default: GLOBAL.
| Value | Description |
|---|---|
PER_CHARACTER |
Shuffles eligible values only among spells registered to the same character |
GLOBAL |
Shuffles eligible values among all profiled player Dragoon spells |
This setting does not add items, battle items, or healing items to any pool.
Controls scalar spell metadata. Blueprint default: RANDOMIZE_BOUNDS.
| Value | Description |
|---|---|
STOCK |
Keeps stock power, accuracy, and status chance |
SHUFFLE |
Shuffles each enabled scalar field using dragoonSpellRandomizationPool
|
RANDOMIZE_BOUNDS |
Generates each enabled scalar field within its configured bounds |
RANDOMIZE_RANDOM |
Seed-selects STOCK, SHUFFLE, or RANDOMIZE_BOUNDS independently for each enabled scalar field |
All results are deterministic for the active Irongoon seed, character template, base spell, and configuration. MP costs are controlled independently by dragoonSpellMpCosts.
When TRUE, includes normalized damage, healing, drain, and regeneration potency in dragoonSpellStats. Default: TRUE.
The minimum percentage of a spell's source potency used by bounded power generation. Default: 50.
The maximum percentage of a spell's source potency used by bounded power generation. Blueprint default: 250.
Controls Dragoon spell MP costs independently from dragoonSpellStats. Blueprint default: RANDOM_CAMPAIGN_CHARACTER.
| Value | Description |
|---|---|
STOCK |
Keeps each spell's stock MP cost |
RANDOM_CAMPAIGN_UNLOCK |
Generates one seeded MP-cost progression by unlock slot and shares it across every character for the campaign; every first-slot spell has the same cost, every second-slot spell has the same cost, and so on |
RANDOM_CAMPAIGN_CHARACTER |
Generates a separate seeded MP-cost progression for each character and keeps it for the campaign |
RANDOM_BATTLE |
Generates a separate MP-cost progression for each character and keeps it for the current battle, then rerolls it for the next battle |
RANDOM_TRANSFORM |
Generates a separate MP-cost progression for each character and keeps it for the current transformation, then rerolls it after detransforming and transforming again |
Campaign modes reproduce their values from the active Irongoon seed. Battle and transformation modes intentionally reroll at their lifecycle boundary. Randomized values use dragoonSpellMpCostLowerBound and dragoonSpellMpCostUpperBound; they are never capped by Dragoon-level-1 maximum MP.
Minimum generated MP cost for every non-STOCK MP-cost mode. Blueprint default: 5.
Maximum generated MP cost for every non-STOCK MP-cost mode. Blueprint default: 120.
When TRUE, includes spell and status hit accuracy in dragoonSpellStats. Default: FALSE.
The minimum generated accuracy percentage. Blueprint default: 90.
The maximum generated accuracy percentage. Default: 100.
When TRUE, includes status chance when the resolved spell applies a status. Default: TRUE.
The minimum generated status application percentage. Blueprint default: 35.
The maximum generated status application percentage. Default: 100.
Controls each profiled player Dragoon spell's attack element. Blueprint default: SHUFFLE.
| Value | Description |
|---|---|
STOCK |
Keeps the base spell's registered element |
SHUFFLE |
Shuffles elements using dragoonSpellRandomizationPool
|
RANDOMIZE |
Assigns a seeded element from the registered eligible-element pool |
When TRUE, permits the registered No Element entry in randomized spell-element results. It has no effect with dragoonSpellElements: STOCK. Default: FALSE.
Controls targeting and spell-effect behavior. Blueprint default: RANDOMIZE_INDEPENDENT.
| Value | Description |
|---|---|
STOCK |
Keeps the base spell's targeting and effects |
SHUFFLE_PACKAGES |
Moves complete profiled targeting-and-effect plans using dragoonSpellRandomizationPool
|
RANDOMIZE_ARCHETYPE |
Generates one coherent primary archetype with compatible targeting, modifiers, and secondary effects |
RANDOMIZE_INDEPENDENT |
Rolls enabled components independently, then rejects contradictory targets, invalid dead-target use, missing primary effects, and drains without a valid source |
RANDOMIZE_RAW |
Independently rolls legacy target, flag, special-effect, multiplier, status, buff, and unknown bytes without semantic validation |
SHUFFLE_PACKAGES, RANDOMIZE_ARCHETYPE, and RANDOMIZE_INDEPENDENT use Severed Chains' declarative spell-effect engine. They ensure the first unlock slot can affect a living target; if the enabled effect pool cannot produce such a spell, configuration initialization fails with a contextual error rather than silently substituting another effect. Declarative effects execute in this order: revive, cleanse, immediate HP/MP/SP restoration, damage, drains derived from actual loss, statuses, buffs or debuffs, then regeneration.
SHUFFLE_PACKAGES preserves each complete profiled effect plan and performs a final swap when necessary so the first unlock slot works on a living target.
RANDOMIZE_RAW is an intentionally unsafe compatibility mode. It guarantees only structurally valid integer values, registered elements, and nonnegative MP costs. Script-coupled or unknown bit combinations can be misleading, ineffective, or unusable and do not receive the first-slot comfort guarantee.
The following toggles are dormant under dragoonSpellEffects: STOCK and default to TRUE. They control eligible components for package, archetype, and independent effect modes:
| Entry | Effect |
|---|---|
dragoonSpellAllowDamage |
Direct damage |
dragoonSpellAllowHealHp |
Immediate HP healing |
dragoonSpellAllowRestoreMp |
Immediate MP restoration |
dragoonSpellAllowRestoreSp |
Immediate SP restoration |
dragoonSpellAllowRevive |
Revival of dead targets |
dragoonSpellAllowCleanse |
Removal of configured statuses |
dragoonSpellAllowDrainHp |
HP drain derived from actual damage or vital loss |
dragoonSpellAllowDrainMp |
MP drain derived from actual vital loss |
dragoonSpellAllowDrainSp |
SP drain derived from actual vital loss |
dragoonSpellAllowStatus |
Status application |
dragoonSpellAllowBuff |
Stat increases |
dragoonSpellAllowDebuff |
Stat decreases |
dragoonSpellAllowRegenHp |
Timed HP regeneration |
dragoonSpellAllowRegenMp |
Timed MP regeneration |
dragoonSpellAllowRegenSp |
Timed SP regeneration |
Irongoon randomizes player Dragoon spell metadata and profiled effect plans. Severed Chains resolves that metadata consistently for menu display, affordability, MP deduction, targeting, descriptions, the status screen, and combat. Declarative execution is SC engine functionality; Irongoon selects and caches the deterministic plan.
Unlock sequencing needs no new SC event: Irongoon rebuilds complete character loadouts at GameLoadedEvent. Scalar metadata and targeting fit cleanly through SC's centralized SpellStatsEvent resolution, with ResolveSpellDescriptionEvent keeping menu text synchronized. Independently composable healing, revival, cleansing, drains, and regeneration require SC's declarative effect engine and therefore represent the major engine portion of this feature rather than a script-event-only change.
Every randomized spell retains the base spell's registry identity, localized name, DEFF animation and sounds, and dragon battle stage. Independent animation or name randomization is not supported. Items, battle items, and healing items use separate item registries and ITEM_MAGIC execution paths and are never inspected or changed by this feature, even though retail data represents some of them similarly to spells.
Other mods may opt a custom Dragoon spell into randomization by registering an Irongoon Dragoon spell capability profile through GatherDragoonSpellProfilesEvent. A profile declares whether metadata replacement, declarative effects, raw legacy fields, and presentation-only DEFF execution are safe, plus its stock effect plan and any targeting or archetype restrictions. A spell must both appear in a character's spell map and have a profile; an unprofiled custom spell remains stock.
The following legacy fields have confirmed behavior. Irongoon does not assign invented meanings to undecoded bits:
| Field | Confirmed behavior |
|---|---|
targetType_00 & 0x08 |
Targets all |
targetType_00 & 0x40 |
Targets enemies; absence targets friendlies |
targetType_00 & 0x80 |
Selects retail offensive or defensive script routing; unsafe as an independent semantic toggle |
flags_01 & 0x04 |
Selects percentage-of-target-maximum-HP and buff or debuff calculation paths |
flags_01 & 0x02 |
Observed on drain-like spells but not independently implemented in Java |
flags_01 & 0xf0 |
Participates in special-effect and instant-effect handling |
specialEffect_02 |
Exposed to scripts but not sufficiently decoded for safe independent use |
damageMultiplier_03 |
Applies a discrete damage multiplier listed below |
multi_04 |
Adds to magic attack for ordinary spells; becomes a percentage of maximum HP under flag 0x04
|
accuracy_05 |
Spell or status hit accuracy |
mp_06 |
Displayed, affordability-checked, and deducted MP cost |
statusChance_07 |
Status application percentage |
element_08 |
Elemental damage, resistance, immunity, Dragoon Space, and HUD element |
statusType_09 |
Status bitset; retail resolution applies the first matching bit rather than every bit |
buffType_0a |
Named stat-up and stat-down mask |
_0b |
No confirmed current runtime behavior |
Target profiles used by safe modes name the side as SELF, ALLIES, ENEMIES, or ANY; scope as SINGLE or ALL; and life state as LIVING, DEAD, or ANY.
| Status bit | Status |
|---|---|
0x80 |
Poison |
0x40 |
Dispirit |
0x20 |
Arm or weapon block |
0x10 |
Stun |
0x08 |
Fear |
0x04 |
Confusion |
0x02 |
Bewitchment |
0x01 |
Petrify |
| Buff/debuff bit | Modifier |
|---|---|
0x80 |
Defence up |
0x40 |
Magic defence up |
0x20 |
Attack up |
0x10 |
Magic attack up |
0x08 |
Defence down |
0x04 |
Magic defence down |
0x02 |
Attack down |
0x01 |
Magic attack down |
| Multiplier bit | Damage multiplier |
|---|---|
0x01 |
8x |
0x02 |
6x |
0x04 |
5x |
0x08 |
4x |
0x10 |
3x |
0x20 |
2x |
0x40 |
1.5x |
0x80 |
0.5x |
| Any other value | 1x |
A conservative configuration randomizes unlock order and bounded scalar metadata while preserving stock effect packages:
dragoonSpellUnlocks: RANDOMIZE_SEQUENCE
dragoonSpellStats: RANDOMIZE_BOUNDS
dragoonSpellElements: SHUFFLE
dragoonSpellEffects: STOCKAn independent configuration composes validated declarative effects from selected components:
dragoonSpellEffects: RANDOMIZE_INDEPENDENT
dragoonSpellAllowDamage: TRUE
dragoonSpellAllowHealHp: TRUE
dragoonSpellAllowRevive: TRUE
dragoonSpellAllowDrainHp: TRUE
dragoonSpellAllowStatus: TRUE
dragoonSpellAllowRegenHp: TRUE
dragoonSpellAllowRestoreMp: FALSE
dragoonSpellAllowRestoreSp: FALSEA raw configuration opts into undecoded legacy-field combinations and their usability risks:
dragoonSpellStats: RANDOMIZE_RANDOM
dragoonSpellElements: RANDOMIZE
dragoonSpellEffects: RANDOMIZE_RAWControls Attack, Magic Attack, Defense, and Magic Defense for monsters.
| Value | Description |
|---|---|
RANDOMIZE_BOUNDS |
Randomizes combined offensive and defensive stat totals using the configured percentage bounds |
MAINTAIN_STOCK |
Uses stock monster body stats |
RANDOMIZE_STOCK_BOUNDS |
Applies the configured percentage bounds to each monster's stock values |
The upper percentage-point modifier for monster body stats. 150 permits up to a 50% increase.
The lower percentage-point modifier for monster body stats. 50 permits up to a 50% decrease.
The minimum randomized monster Defense value.
The minimum randomized monster Magic Defense value.
| Value | Description |
|---|---|
MAINTAIN_STOCK |
Uses stock monster HP |
RANDOMIZE_BOUNDS |
Applies a seeded percentage modifier to stock monster HP using the configured bounds |
Use the plural key hpStatMonsters. The obsolete hpStatMonster key remains a fallback for older configurations when the plural key is absent.
The upper percentage-point modifier for monster HP. 150 permits up to a 50% increase.
The lower percentage-point modifier for monster HP. 50 permits up to a 50% decrease.
| Value | Description |
|---|---|
MAINTAIN_STOCK |
Uses stock monster Speed |
RANDOMIZE_BOUNDS |
Assigns a seeded Speed between the configured absolute bounds |
RANDOMIZE_RANDOM_BOUNDS |
Rolls a new Speed between the configured absolute bounds whenever monster stats are loaded |
Use the plural key speedStatMonsters. The obsolete speedStatMonster key remains a fallback for older configurations when the plural key is absent.
The highest absolute Speed value generated by randomized monster Speed modes.
The lowest absolute Speed value generated by randomized monster Speed modes.
| Value | Description |
|---|---|
STOCK |
Applies no additional spawn variance |
RANDOM_PERCENT_BOUNDS |
Applies an additional random variance when each monster spawns |
The current variance range is hardcoded to ±20% of the already calculated values.
| Value | Description |
|---|---|
MAINTAIN_STOCK |
Uses the stock monster element and elemental immunity |
RANDOMIZE |
Assigns a seeded randomized monster element while retaining stock immunity |
RANDOMIZE_RANDOM |
Rolls a monster element each time its stats are loaded while retaining stock immunity |
RANDOMIZE_AND_TYPINGS |
Assigns seeded randomized element and elemental immunity values |
RANDOMIZE_RANDOM_AND_TYPINGS |
Rolls element and elemental immunity values each time monster stats are loaded |
Controls whether No Element is eligible for randomized monster elements and immunities.
| Value | Description |
|---|---|
EXCLUDE |
Excludes No Element from both randomized elements and immunities |
INCLUDE |
Includes No Element in both randomized elements and immunities |
ELEMENTS_ONLY |
Includes No Element only as a monster element |
IMMUNITIES_ONLY |
Includes No Element only as an elemental immunity |
| Value | Description |
|---|---|
STOCK |
Keeps every shop available |
RANDOM |
Deterministically randomizes whether each shop has inventory |
NO_SHOPS |
Removes all shop inventory |
NO_ITEMS |
Removes items while retaining equipment |
NO_EQUIPMENT |
Removes equipment while retaining items |
| Value | Description |
|---|---|
STOCK |
Keeps the shop's stock inventory count |
RANDOMIZE_BOUNDS |
Assigns a seeded inventory count between the configured bounds |
The maximum inventory count for shopQuantity: RANDOMIZE_BOUNDS.
The minimum inventory count for shopQuantity: RANDOMIZE_BOUNDS.
Controls how newly created inventory slots are filled when randomized quantity exceeds the prepared shop contents.
| Value | Description |
|---|---|
RESPECT_SHOP_CONTENTS |
Respects item-only or equipment-only content modes when filling compatible shops |
FILL_ALL |
Fills every generated slot regardless of the original shop's inventory type |
Mixed-inventory shops may fill with both inventory types under either mode.
| Value | Description |
|---|---|
STOCK |
Keeps stock shop entries after quantity, pool, and recall processing |
RANDOMIZE_ITEMS |
Randomizes item entries and retains equipment entries |
RANDOMIZE_EQUIPMENT |
Randomizes equipment entries and retains item entries |
RANDOMIZE_ALL |
Randomizes items as items and equipment as equipment |
RANDOMIZE_ALL_MIXED |
Randomizes every entry from a mixed item-and-equipment selection |
RANDOMIZE_ALL preserves each slot's inventory type. RANDOMIZE_ALL_MIXED allows any randomized slot to become either an item or equipment.
A list of full item registry IDs eligible for randomized item slots. An empty list uses all registered items after recalls are removed.
shopContentsItemPool: ["lod:healing_potion", "lod:burn_out"]A list of full equipment registry IDs eligible for randomized equipment slots. An empty list uses all registered equipment after recalls are removed.
shopContentsEquipmentPool: ["lod:bastard_sword"]A list of full item or equipment registry IDs removed from stock preparation and random selection. Recalled entries are also removed from explicitly configured pools.
shopContentsRecalled: ["lod:sachet", "lod:psyche_bomb_x"]| Value | Description |
|---|---|
NONE |
Prevents duplicate randomized entries within a shop |
ANY |
Allows duplicate randomized entries within a shop |
Sets the maximum combined quantity of each item that may be received when inventory is granted. 0 disables Irongoon's per-item carry limit.
itemCarryLimit: 2With this value, the player may hold up to two of each individual item type.
Addition assignments are fixed by the active campaign seed and rebuilt when a save loads. Irongoon only randomizes additions already assigned to each character. It does not move additions between characters, borrow animation packages, or insert, remove, reorder, or replace hits.
Blueprint uses RANDOMIZE_SEQUENCE for additionUnlocks, RANDOMIZE_BOUNDS for additionBaseStats and additionLevelScaling, RANDOMIZE for additionElements and additionStatuses, and STOCK for additionHitTiming. Dependent bounds and toggles are validated on load but ignored while their owning mode is STOCK.
| Value | Description |
|---|---|
STOCK |
Uses the existing Addition unlock criteria |
RANDOMIZE_SEQUENCE |
Selects a seeded mastery-gated Addition first, a different guaranteed starter, then assigns ordered ordinary unlock levels to a shuffled per-character sequence |
RANDOMIZE_SEQUENCE uses only additions explicitly profiled as safe for unlock reordering. If a character has fewer than two compatible additions, that character keeps stock unlocks. Save loads recompute transient criteria, unlock state, unlock timestamp, and selected Addition from the campaign seed and current character level. Addition XP and Addition level remain campaign progression and persist whether the underlying stock Addition is locked or unlocked.
Inclusive ordinary unlock-level range from 2 through 60; Blueprint uses 2 through 30. Level 1 is reserved for the single guaranteed starter. Levels are sampled without replacement when the range is large enough; otherwise ordered duplicate levels are allowed.
Controls base damage and SP totals without transferring hit structures.
| Value | Description |
|---|---|
STOCK |
Keeps stock damage and SP |
SHUFFLE |
Shuffles totals within the stable compatible per-character Addition pool, then redistributes each total across the destination Addition's existing hits |
RANDOMIZE_BOUNDS |
Applies the configured percentage bounds to each Addition's stock total |
RANDOMIZE_RANDOM |
Deterministically chooses STOCK, SHUFFLE, or RANDOMIZE_BOUNDS per Addition and enabled field |
additionRandomizeDamage and additionRandomizeSp independently enable the two fields and default to TRUE. Blueprint uses additionDamageLowerPercentBound: 50, additionDamageUpperPercentBound: 150, additionSpLowerPercentBound: 50, and additionSpUpperPercentBound: 250.
Controls the per-level damage and SP multiplier curves. It has the same STOCK, SHUFFLE, RANDOMIZE_BOUNDS, and RANDOMIZE_RANDOM values as additionBaseStats. Shuffle candidates are grouped by level count and never transfer hit or animation data.
additionRandomizeDamageScaling and additionRandomizeSpScaling independently enable the curves and default to TRUE. Blueprint uses additionDamageScalingLowerPercentBound: 50, additionDamageScalingUpperPercentBound: 150, additionSpScalingLowerPercentBound: 50, and additionSpScalingUpperPercentBound: 250.
| Value | Description |
|---|---|
STOCK |
Keeps stock timing |
RANDOMIZE_BOUNDS |
Applies one coherent seeded percentage to each hit's permitted timing tuple |
OVERRIDES |
Applies exact values from mods/irongoon/addition-hit-overrides.csv
|
RANDOMIZE_WITH_OVERRIDES |
Generates bounded timing first, then applies nonblank exact overrides |
additionHitTimingLowerPercentBound and additionHitTimingUpperPercentBound default to 50 and 150.
The CSV header is:
additionId,hitNumber,totalFrames,overlayHitFrameOffset,totalSuccessFrames,overlayStartingFrameOffsetAddition IDs are full registry IDs and hit numbers are one-based. Blank timing values inherit the already resolved value. Duplicate Addition/hit rows, unavailable IDs, invalid hit numbers, negative values, and tuples where totalFrames < overlayHitFrameOffset + totalSuccessFrames + 1 stop campaign initialization with an error.
Only totalFrames, overlayHitFrameOffset, totalSuccessFrames, and overlayStartingFrameOffset may change. Hit count, order, final-hit markers, flags, animation scale, audio, camera movement, movement distance and speed, failure animation, models, and assets remain unchanged.
| Value | Description |
|---|---|
STOCK |
Adds no Addition element |
RANDOMIZE |
Assigns each Addition a seeded registered element for the campaign |
additionNoElement includes Severed Chains' No Element entry in the randomized pool when TRUE. The resolved Addition element is added to equipment attack elements, so SC's existing multi-element damage, immunity, Dragoon Space, and HUD behavior remains authoritative.
| Value | Description |
|---|---|
STOCK |
Adds no Addition status |
RANDOMIZE |
Assigns one seeded status and chance to each Addition for the campaign |
additionStatusChanceLowerBound and additionStatusChanceUpperBound are inclusive percentages from 0 through 100; Blueprint uses 35 through 100.
The allowed pool is controlled by:
additionStatusAllowPetrifyadditionStatusAllowBewitchadditionStatusAllowConfuseadditionStatusAllowFearadditionStatusAllowStunadditionStatusAllowWeaponBlockadditionStatusAllowDispiritadditionStatusAllowPoison
At least one must be TRUE when status randomization is enabled. The status is eligible only after the entire Addition succeeds and rolls at most once. A configured equipment status mask suppresses the Addition status even when the later equipment roll fails because Severed Chains currently exposes one physical-status source per attack.
Stock additions are explicitly profiled after registries populate. Third-party additions remain stock, including contextual element and status behavior, unless their mod registers an AdditionProfile through GatherAdditionProfilesEvent and opts into the applicable unlock, stat, scaling, or timing capabilities. Profiled additions participate only while assigned to that character; Irongoon never guesses that an unprofiled custom Addition is compatible.
Controls whether files in mods/irongoon/irongoon-data override data available directly from Severed Chains.
| Value | Description |
|---|---|
FALSE |
Prefers supported Severed Chains data; uses CSV only when SC cannot provide the complete table |
TRUE |
Uses a matching CSV as the authoritative source when that file exists; otherwise falls back to supported Severed Chains data |
Selected CSV data is validated and fails with a contextual error if invalid. Irongoon does not silently fall through from an invalid selected source.
| Value | Description |
|---|---|
TRUE |
Generates and saves a new campaign seed when a new campaign starts |
FALSE |
Uses publicSeed for every campaign |
Use TRUE for normal long-term campaigns. FALSE is useful when repeatedly restarting from the same prepared save and intentionally reproducing the same public seed.
| Value | Description |
|---|---|
STOCK |
Uses the stock battle stage |
RANDOM |
Rolls a battle stage each time |
RANDOM_FIXED_ENCOUNTER |
Uses a seeded stage fixed by encounter ID |
RANDOM_FIXED_SUBMAP |
Uses a seeded stage fixed by submap ID |
A list of battle-stage IDs used as the randomization pool. An empty list uses the full built-in stage-ID range.
battleStageList: [3, 5, 29, 95]| Value | Description |
|---|---|
STOCK |
Uses the stock battle music |
RANDOM |
Randomly selects one of Irongoon's supported battle tracks |
The supported Severed Chains music indexes are 702, 707, 712, 717, 722, 727, and 732.
Current compatibility limitation: these values are parsed but are not applied at runtime. Severed Chains no longer exposes the former writable global escape-chance value, and Irongoon's old assignment is disabled until a safe per-battle API is available.
| Value | Description |
|---|---|
STOCK |
Intended to preserve the encounter escape chance |
RANDOMIZE_BOUNDS |
Intended to roll an escape chance between the configured bounds each time |
RANDOMIZE_BOUNDS_FIXED_ENCOUNTER |
Intended to use a seeded escape chance fixed by encounter ID |
RANDOMIZE_BOUNDS_FIXED_SUBMAP |
Intended to use a seeded escape chance fixed by submap ID |
NO_ESCAPE |
Intended to set escape chance to 0% |
COWARD |
Intended to set escape chance to 100% |
The maximum escape percentage reserved for a randomized escape mode. It currently has no runtime effect.
The minimum escape percentage reserved for a randomized escape mode. It currently has no runtime effect.
- Per-level stats accumulate normally, so unusually high or low rolls at one level remain part of later totals
- Percentage bounds use
100as stock,50as −50%, and150as +50% - Lower percentage bounds must be below
100 - Campaign and fixed modes derive deterministic results from the active Irongoon seed
- Changing installed mods can change Dragoon-element campaign results when those mods register additional eligible elements