Repository navigation
Cross Mod State Experiments
Historical page: original version facts are retained. Current stable 4.0.0 supports targeted offline combination/state restoration; see Home and Preset guide. Universal live-state experiments are not re-enabled.
The manager was intended to remember clothing parts, colors, toggles, variants, and other internal options separately for each mod, then restore them when returning to that mod or applying a combined profile without requiring the user to repeat every in-game hotkey operation.
All research was performed on independent experimental branches created from the stable v3.8.0 baseline. The prototypes did not automatically replace the stable source, original library mods, or the real EFMI directory.
Third-party mod state may be stored in several different places:
-
.ini,.json,.cfg, or other state files inside the mod folder; - the shared root-level EFMI
d3dx_user.ini; - numeric variables registered through
global persist; - state that exists only in memory while the game is running;
- state produced by hotkeys, command chains,
postcommands, or runtime calculations.
There is no universal per-mod serialization and restoration interface across these forms. A folder name also cannot reliably identify a variable namespace, registration time, or reload sequence.
| Version | Approach | Observed result | Status |
|---|---|---|---|
| v3.8.1 Hot Injection Lab | Snapshot and replace the complete d3dx_user.ini, then request an F10 reload |
Also overwrites other mods and loader state; F10 may write stale in-memory values back first | Unreleased; discontinued |
| v3.8.1 Persistent State Lab | Parse and merge scalar global persist values; separately test a temporary bridge INI and two manual F10 reloads |
Handles only some numeric variables and cannot cover in-memory state, complex types, later command overrides, or loader-specific sequencing | Unreleased; discontinued |
| v3.8.2 EFMI Resident Lab | Generate resident controlled mod copies and gate profiles through $active_profile
|
Only supports standard structures with provable complete gating; arbitrary compatibility, resource usage, and real-game behavior cannot be guaranteed | Unreleased; not generally viable |
| v3.8.3–current directory junctions | Let the loader and library reference one physical mod directory | Works for configuration actually written inside the mod folder; does not cover root-level d3dx_user.ini or in-memory-only state |
Released as an optional mode and retained in v3.9.0 |
- Read the original bytes of the complete
d3dx_user.ini. - Store each named snapshot with its file length and SHA-256 digest.
- Back up the current file and restore through an atomic temporary-file replacement.
- Request an EFMI/3DMigoto configuration reload through F10.
-
d3dx_user.iniis a shared user-state file for multiple mods and the loader, not an isolated save file for one mod. - Restoring one snapshot also restores or overwrites the state of every mod captured at that time.
- Some EFMI/3DMigoto flows write current in-memory values to disk before reloading, overwriting the newly restored target values.
- F10 save and reload behavior is not identical across loader branches.
Whole-file hot replacement is therefore not a safe, isolated, or universal per-mod restoration method.
- Scan enabled mod INIs and capture only valid scalar variables explicitly declared as
global persist. - Wait until the length and modification time of
d3dx_user.iniremain stable before reading it. - During offline restore, merge only target variables, preserve unrelated state, verify every value, and then start XXMI.
- During runtime restore, create a marker-protected temporary bridge INI, require two manual F10 reloads, remove the bridge, and verify the result.
- State that is never written to disk cannot be captured.
- Strings, vectors, commands, and runtime expressions cannot be handled universally.
- Later
postcommands may overwrite restored values again. - Correctness depends on namespaces, registration order, load order, and loader-branch behavior.
- The two-F10 bridge requires user interaction and still cannot guarantee arbitrary third-party compatibility.
- Scan every mod referenced by multiple desktop profiles.
- Recognize
$mod_enabled,$object_detected, and registration commands in standard EFMI Tools structures. - Generate controlled copies without modifying original library mods.
- Gate standard runtime conditions and hotkey entries through a controller.
- Use
global persist $active_profileand an EFMI[Key] type = cyclecontroller to switch profiles in game.
- Arbitrary handwritten or legacy INIs cannot prove that every TextureOverride, ShaderOverride, and command entry is fully gated.
- VRAM, memory, frame-rate, and conflict behavior with several complete resident mods was not sufficiently verified.
- Broad real-game validation and failure rollback were not completed.
- Generated copies introduce additional synchronization work after an original mod is updated.
Directory junctions solve the deep-copy deployment problem: the junction in the target Mods folder and the library mod refer to one physical directory. When the loader writes configuration inside that mod folder, it modifies the library files directly.
-
.ini,.json,.cfg, and other files actually written inside the mod's own directory; - state files that remain in the original library mod after switching;
- safe replacement of the previous managed junction when linking another mod for the same character.
-
global persiststate stored in EFMI's root-leveld3dx_user.ini; - temporary state that exists only in game-process memory;
- hotkey, command-chain, or runtime-calculation results that are never written inside the mod folder;
- restoration of arbitrary third-party internal variables.
The released v3.9.0 application:
- does not read or write game-process memory;
- does not inject DLLs;
- does not automatically simulate F10 or other game keys;
- does not bypass anti-cheat systems;
- does not package the v3.8.1/v3.8.2 prototypes as usable features;
- removes only a junction reparse point and never recursively deletes its library target.
XXMI/EFMI and third-party mods remain third-party game-modification environments. This project cannot promise zero account risk; users must follow the rules of the game, platform, and mod authors.
Universal, automatic, and reliable persistence of internal
$variablesacross arbitrary third-party XXMI / EFMI mods is temporarily infeasible.
The feature should only be reconsidered after the upstream environment provides a stable per-mod state serialization interface, reliable mod identity and namespace mapping, documented runtime reload ordering, and isolated transactional restoration with rollback.
Wiki Home · v4.6.1 · Latest Release · Documentation · Licensing · Issues · Security
开始 / Start
使用手册 / Guides
- 快速上手 · Quick Start
- 用户手册 · User Guide
- 快捷键与浮窗 · Shortcut Panel
- 状态槽位 · State Slots
- 组合预设 · Combination Presets
- 浏览与下载 · Browse and Download
- 终末地启动 · Endfield Launch
- 组合与状态预设 · Combination and State Presets
发布记录 / Release Notes
- 4.6.1 默认槽位、浮窗保存与排版修复 / Default Slots, Overlay Saves and Layout Fixes
- 4.6.0 全部页面重新设计 / Every Page Redesigned
- 4.5.2 保存、刷新与提速 / Save, Refresh and Speed
- 4.5.1 浮窗保存 / Overlay Saving
- 4.5.0 头像、多选与槽位 / Avatars, Multi-select and Slots
- 4.4.0 快捷键面板 / Shortcut Panel
- 完整更新日志 / Full Changelog
历史页面与实验 / Historical Pages and Experiments
- 4.5.2 正式版(历史) · Stable 4.5.2 (history)
- 升级到 4.5.2(历史) · Upgrade to 4.5.2 (history)
- 4.0 正式版(历史) · Stable 4.0 (history)
- 4.0 预设(历史) · 4.0 Presets (history)
- 升级到 4.0(历史) · Upgrade to 4.0 (history)
- 4.0-beta · 3.9.5
- 3.9.0(历史) · 3.9.0 (history)
- 实验归档索引 · Experiment Archive
- 实验结论 · Experiment Findings
- 详细开发记录 · Development Notes
项目 / Project
- Source
- Documentation
- 软件结构 / Software Structure
- 4.6.1 Verification
- Licensing / 许可证
- Issues
- 反馈 QQ 群 / QQ group: 1041384622
- Security