Skip to content

SARDONYX-sard/d-merge

Repository files navigation

D Merge(Diff & Merge) hkx patcher

Release

There have been reports that the Tauri-based GUI may not work in virtual environments such as MO2.

In such cases, we recommend using the egui version build.

Intended Use of Automatic Settings File Loading

The load order configuration file is automatically loaded each time the application runs.

It is written to /.d_merge/d_merge_settings.json immediately before the application closes.

By utilizing this behavior as follows, settings will be automatically loaded and updated whenever you switch profiles.

MO2 Directory tree
D:/MO2/mods/
├── d_merge_windows_egui/
│       ├── .d_merge/
│       │    └── translation.json
│       ├── assets/                        <- templates files dir
│       ├── interface/                     <- dummy dir
│       └── d_merge_egui.exe               <- main exe
│
├── male_profile_dir/
│       ├── meshes/
│       └── .d_merge/
│             └── d_merge_settings.json    <- (output_dir: D:/MO2/mods/male_profile_dir)
│
└── female_profile_dir/
           ├── meshes/
           └── .d_merge/
                  └── d_merge_settings.json <- (output_dir: D:/MO2/mods/female_profile_dir)

Patch Page Progress

  • Mods Test status

  • GUI

    • Basic frontend(Patch/Convert/Settings: Reports indicate that tauri ver. MO2 cannot be launched. Cause unknown.)
    • Support Virtual fs mode(Use egui ver.)
    • Auto read settings file(Use egui ver.)
    • hkx json/patch editor
  • AnimData(animationdatasinglefile.txt)

    • Serialization
    • Deserialization
    • Patch(Add/Remove/Replace)
      • Txt project header
      • Anim data header
      • Clip Motion Block
      • Anim Data Block
  • AnimSetData(animationsetdatasinglefile.txt)

    • Serialization
    • Deserialization
    • Patch(Add/Remove/Replace)
      • Version
      • Triggers
      • Conditions
      • Attacks
      • AnimInfos(Only the directory and file name support the $crc32[some/path] macro syntax.)
  • hkx templates

    • Change xml to message_pack bin.
  • Nemesis Patch

    • Parallel merge.
  • FNIS Patch

Status Feature Abbreviation(s) Notes
Basic b Creature also supported (tested with FNISZoo converted to SE)
Sequenced Animations s, so Creature also supported
Arm Offset Animations ofa Tested with(Immersive Animated Looting v2.7)
Furniture Animations fu, fuo Tested with(Fort Knox v1.4.3)
⚠️ Paired Animations and KillMoves pa, km Pared/KillMove: only animation checked, not tested in actual kill/pair.
⚠️ Chair Animations ch Implemented it. Couldn't find any mods that could be tested.
Alternate Animations AAprefix Automatically convert to OAR. Need: OAR and fnis_aa.

patch_page

Build

requirements: Rust1.91

cargo build -p d_merge_egui --profile release-no-lto # Simple GUI by egui

requirements: Rust1.91, Node.js LTS

npm run build # Rich GUI by tauri

Licenses

This project includes multiple crates with different licenses. The overall license of the backend crate is GPL-3.0, due to transitive dependencies on GPL-licensed components.

License Tree

cli/gui (GPL-3.0)
├── nemesis_merge (GPL-3.0)
│   ├── auto_charset (MIT OR Apache-2.0)
│   ├── fnis_list (GPL-3.0)
│   ├── gh_issue_link (MIT OR Apache-2.0)
│   ├── json_patch (MIT OR Apache-2.0)
│   ├── jwalk_glob (MIT OR Apache-2.0)
│   ├── nemesis_xml (MIT OR Apache-2.0)
│   ├── serde_hkx_for_gui (MIT OR Apache-2.0)
│   ├── skyrim_anim_parser (GPL-3.0)
│   ├── skyrim_crc (MIT OR Apache-2.0)
│   └── skyrim_data_dir (MIT OR Apache-2.0)
│
├── node_expr (MIT OR Apache-2.0)
├── mod_info (MIT OR Apache-2.0)
├── serde_hkx_for_gui (MIT OR Apache-2.0)
└── tracing_rotation (MIT OR Apache-2.0)

License Propagation

  • skyrim_anim_parser: I understood the specification of this animationdatasinglefile.txt file from reading pandora. Therefore, I will keep it under GPL-3.0 just in case.

  • nemesis_merge: This crate depends on both skyrim_anim_parser (GPL-3.0) and a GPL-licensed template(See resource dir). Thus, it is required to be GPL-3.0.

  • backend: As a GUI frontend that depends on nemesis_merge, it inherits the GPL-3.0 license through transitive dependency.

Other utility crates (e.g., mod_info, node_expr, json_patch, etc.) are licensed under MIT OR Apache-2.0, but the presence of GPL-licensed dependencies requires that the final binary (the GUI/backend) must be distributed under GPL-3.0.

Please ensure that your usage and redistribution of this software complies with the GPL-3.0 license terms.

Deps NOTES

  • monaco-react: If we don't properly override the available Monaco Editor version, the build will fail.

    Using monaco-editor versions like 0.52.0 causes monaco-vim to become unresponsive. Pin 0.49.0

About

High-Speed Nemesis & FNIS Patcher + .hkx development tools

Topics

Resources

License

Stars

Watchers

Forks

Contributors