Compatibility and supported scope
Use the documented contract
Section titled “Use the documented contract”Each function section lists its arguments, return value, capabilities, and timing. A field that appears in recovered game XML is not automatically available in Lua. Unknown definition fields and unsupported callback names can fail mod loading.
The current API supports typed content definitions, combat behavior callbacks and ticks, saved mod state, branching/generated local modes and raids, owned UI, achievement counters, and explicit asset replacement. Story subscriptions support procedural logic at documented lifecycle boundaries. Programmable tactics choose among native eligible actions. Framework services let dependent mods share typed Lua functionality. Declared round controllers can request offline round wins/losses with native result precedence. Each system retains its documented authority and timing limits; arbitrary engine objects and unrestricted fight-result authority remain outside the current contract.
Test what players use
Section titled “Test what players use”Combine mods documents additive rule composition, dependency order and the Focus/objective pack. Different mods can append compatible rules to one fight. Rule-list replacements remain exclusive; overlapping controllers and duplicate handles still reject registration.
A successful registration confirms that the supplied definitions passed validation. It cannot prove that a sprite looks right, an opponent behaves well, a reward is balanced, or an update preserves every intended player experience. Test your mod in Eclipse, including restart, failure, and existing-save cases relevant to your feature.
Use working examples as starting points. Keep version numbers and saved IDs deliberate, and follow save compatibility when retiring content or changing state schemas.
Numeric values in XML
Section titled “Numeric values in XML”Write fractional XML values with a decimal point, such as 0.25, and no
thousands separators. Scientific notation such as 1e-5 is supported. This
applies to model coordinates, node weights, cloth damping, and other numeric XML
attributes. Eclipse reads these values independently of the player’s Windows
regional format, including languages that normally use a decimal comma.
Multiplayer combat and recordings
Section titled “Multiplayer combat and recordings”Local and online versus use equal combat ratings for both fighters. Their
JSON balance presets configure damage multipliers and recoverable blocked
damage. Defaults multiply native unblocked strikes by 0.5 and blocked strikes
by 0.25, after native block/critical modifiers. All actual blocked damage is
recoverable by default; blocked strikes leave a positive amount of health and
cannot knock out. Landing an attack or making the opponent block restores
existing grey health according to the preset’s recovery rates. Training uses
these same rules. Campaign and title-screen sparring retain their own rules.
See Tune PvP balance for the editor, JSON fields, inheritance, recovery calculations and sharing presets. The native strike multiplier is applied before the lethal damage cap and does not change hit reactions, knockback or block detection. Separate scripted health changes do not receive this multiplier.
Online peers must match the combat engine identifier, enabled mods, equipment roster and the selected gameplay rules hash. Changing the host’s rules clears guest readiness. New replays store their immutable JSON rules; changing your selected preset does not change playback. Older recordings without the balance snapshot remain browsable but cannot play in this combat version. Use netplay protocol 4 and room protocol 5 clients with an updated room server.
When testing mods with Unity Multiplayer Play Mode, Eclipse’s tagged editor
clients use separate saves, control bindings, mod selections and user-installed
mod directories under MultiplayerPlayMode/<player tag> in the normal data
directory. Install and enable matching mods for every client. Ordinary editor
sessions and player builds keep their existing data paths. These editor tags
are testing settings and do not add Lua capabilities.