Skip to content

Config Reference

Ink230 edited this page Sep 10, 2026 · 21 revisions

Irongoon configuration 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.

Seed

publicSeed

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.

Characters

bodyTotalStatsPerLevel

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

bodyTotalStatsBounds

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

bodyTotalStatsDistributionPerLevel

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

hpStatPerLevel

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

hpStatUpperPercentBound

The upper percentage-point bound used by character HP modes that apply percentage modifiers. 150 permits up to a 50% increase.

hpStatLowerPercentBound

The lower percentage-point bound used by character HP modes that apply percentage modifiers. 75 permits up to a 25% decrease.

speedStatPerLevel

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

speedStatUpperPercentBound

The upper percentage-point bound used by speedStatPerLevel: RANDOMIZE_RANDOM_BOUNDS. 150 permits up to a 50% increase over stock Speed.

speedStatLowerPercentBound

The lower percentage-point bound used by speedStatPerLevel: RANDOMIZE_RANDOM_BOUNDS. 30 permits up to a 70% decrease from stock Speed.

characterElements

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.

characterNoElement

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.

characterElementOverride

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.

Party

enableAllCharacters

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.

battleParty

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.

battlePartyOverride

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.

battlePartySize

The requested party size from 1 through 3.

battlePartyPool

A list of enabled character IDs eligible for randomized slots. An empty list uses every enabled character.

battlePartyPool: [0, 3, 6]

battlePartyDuplicates

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.

Dragoons

enableAllDragoons

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.

dragoonTotalStatsPerLevel

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

dragoonStatsBounds

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

dragoonTotalStatsDistributionPerLevel

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

dragoonElements

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.

dragoonNoElement

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.

dragoonElementOverride

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.

dragoonSpellUnlocks

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.

dragoonSpellRandomizationPool

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.

dragoonSpellStats

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.

dragoonSpellRandomizePower

When TRUE, includes normalized damage, healing, drain, and regeneration potency in dragoonSpellStats. Default: TRUE.

dragoonSpellPowerLowerPercentBound

The minimum percentage of a spell's source potency used by bounded power generation. Default: 50.

dragoonSpellPowerUpperPercentBound

The maximum percentage of a spell's source potency used by bounded power generation. Blueprint default: 250.

dragoonSpellMpCosts

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.

dragoonSpellMpCostLowerBound

Minimum generated MP cost for every non-STOCK MP-cost mode. Blueprint default: 5.

dragoonSpellMpCostUpperBound

Maximum generated MP cost for every non-STOCK MP-cost mode. Blueprint default: 120.

dragoonSpellRandomizeAccuracy

When TRUE, includes spell and status hit accuracy in dragoonSpellStats. Default: FALSE.

dragoonSpellAccuracyLowerBound

The minimum generated accuracy percentage. Blueprint default: 90.

dragoonSpellAccuracyUpperBound

The maximum generated accuracy percentage. Default: 100.

dragoonSpellRandomizeStatusChance

When TRUE, includes status chance when the resolved spell applies a status. Default: TRUE.

dragoonSpellStatusChanceLowerBound

The minimum generated status application percentage. Blueprint default: 35.

dragoonSpellStatusChanceUpperBound

The maximum generated status application percentage. Default: 100.

dragoonSpellElements

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

dragoonSpellNoElement

When TRUE, permits the registered No Element entry in randomized spell-element results. It has no effect with dragoonSpellElements: STOCK. Default: FALSE.

dragoonSpellEffects

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.

Dragoon spell effect pool

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

Dragoon spell engine boundary

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.

Confirmed legacy metadata

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

Example configurations

A conservative configuration randomizes unlock order and bounded scalar metadata while preserving stock effect packages:

dragoonSpellUnlocks: RANDOMIZE_SEQUENCE
dragoonSpellStats: RANDOMIZE_BOUNDS
dragoonSpellElements: SHUFFLE
dragoonSpellEffects: STOCK

An 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: FALSE

A raw configuration opts into undecoded legacy-field combinations and their usability risks:

dragoonSpellStats: RANDOMIZE_RANDOM
dragoonSpellElements: RANDOMIZE
dragoonSpellEffects: RANDOMIZE_RAW

Monsters

monsterTotalStatsPerLevel

Controls 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

totalStatsMonstersUpperPercentBound

The upper percentage-point modifier for monster body stats. 150 permits up to a 50% increase.

totalStatsMonstersLowerPercentBound

The lower percentage-point modifier for monster body stats. 50 permits up to a 50% decrease.

monsterDefenseFloor

The minimum randomized monster Defense value.

monsterMagicDefenseFloor

The minimum randomized monster Magic Defense value.

hpStatMonsters

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.

hpStatMonstersUpperPercentBound

The upper percentage-point modifier for monster HP. 150 permits up to a 50% increase.

hpStatMonstersLowerPercentBound

The lower percentage-point modifier for monster HP. 50 permits up to a 50% decrease.

speedStatMonsters

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.

speedStatMonstersUpperBound

The highest absolute Speed value generated by randomized monster Speed modes.

speedStatMonstersLowerBound

The lowest absolute Speed value generated by randomized monster Speed modes.

statsVarianceMonsters

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.

monsterElements

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

noElementMonsters

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

Shops

shopAvailability

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

shopQuantity

Value Description
STOCK Keeps the shop's stock inventory count
RANDOMIZE_BOUNDS Assigns a seeded inventory count between the configured bounds

shopQuantityUpperBound

The maximum inventory count for shopQuantity: RANDOMIZE_BOUNDS.

shopQuantityLowerBound

The minimum inventory count for shopQuantity: RANDOMIZE_BOUNDS.

shopQuantityLogic

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.

shopContents

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.

shopContentsItemPool

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"]

shopContentsEquipmentPool

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"]

shopContentsRecalled

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"]

shopDuplicates

Value Description
NONE Prevents duplicate randomized entries within a shop
ANY Allows duplicate randomized entries within a shop

Items

itemCarryLimit

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: 2

With this value, the player may hold up to two of each individual item type.

Additions

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.

additionUnlocks

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.

additionUnlockLevelLowerBound and additionUnlockLevelUpperBound

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.

additionBaseStats

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.

additionLevelScaling

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.

additionHitTiming

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,overlayStartingFrameOffset

Addition 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.

additionElements

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.

additionStatuses

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:

  • additionStatusAllowPetrify
  • additionStatusAllowBewitch
  • additionStatusAllowConfuse
  • additionStatusAllowFear
  • additionStatusAllowStun
  • additionStatusAllowWeaponBlock
  • additionStatusAllowDispirit
  • additionStatusAllowPoison

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.

Modded additions

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.

Data

csvDataOverrides

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.

Seed behavior

useRandomSeedOnNewCampaign

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.

Encounters

battleStage

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

battleStageList

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]

battleMusic

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.

escapeChance

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%

escapeChanceUpperBound

The maximum escape percentage reserved for a randomized escape mode. It currently has no runtime effect.

escapeChanceLowerBound

The minimum escape percentage reserved for a randomized escape mode. It currently has no runtime effect.

Notes

  • Per-level stats accumulate normally, so unusually high or low rolls at one level remain part of later totals
  • Percentage bounds use 100 as stock, 50 as −50%, and 150 as +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

Clone this wiki locally