Cross-platform application to convert DynamicAnimationReplacer to OpenAnimationReplacer (GUI & CLI)
Made with Rust and TypeScript.
Permissions and credits
Credits and distribution permission
Other user's assetsAll the assets in this file belong to the author, or are from free-to-use modder's resources
Upload permissionYou can upload this file to other sites but you must credit me as the creator of the file
Modification permissionYou are allowed to modify my files and release bug fixes or improve on the features so long as you credit me as the original creator
Conversion permissionYou can convert this file to work with other games as long as you credit me as the creator of the file
Asset use permissionYou are allowed to use the assets in this file without permission as long as you credit me
Asset use permission in mods/files that are being soldYou are allowed to use the assets in this file in mods/files that are being sold, for money, on Steam Workshop or other platforms
Asset use permission in mods/files that earn donation pointsYou are allowed to earn Donation Points for your mods if they use my assets
Author notes
This author has not provided any additional notes regarding file permissions
File credits
This author has not credited anyone else in this file
Donation Points system
This mod is not opted-in to receive Donation Points
GUI: Added notification settings and backup of settings.
GUI: Added JS auto-execute permission button.
GUI: changed notification library.
GUI window sizes are now saved.
The parent folder is now automatically selected when reselecting a mod dir.
Version 0.5.0
Changed behavior when an invalid DAR path is passed.(If you put an invalid folder or directory as a DAR in a directory directly under _CustomConditions, it will simply be copied as a note.)
Breaking change: Change CLI arg `--dist` to `--destination`
Changed code whre `unreachable!()` was used to be error-reportable.
Make logs easier to read.
Implement import language button.
Enable strict checking of conditional statements.
More clear background color.
Version 0.4.0
Breaking Change: Added CLI sub commands <- CLI can now also use `unhide_dar` and `remove_oar`.
Added preset4
Added open log dir button
Added custom translation system <- By writing Custom JavaScript, users can now use the app in any language
Fixed hide_dar process <- Since ".mohidden" does not work only for directories, we changed to a recursive process that ".mohidden" is applied to all files.
Fixed jump to link button <- It used to open a separate window in the app, but now it opens the default web browser
Fixed 1st person config.json not being output.
Version 0.3.0
fix: fix multithread.(It may be more than twice as fast as before.)
feat: Supports function calls with only ident in DAR syntax
Version 0.2.3
add: Implemented strict checking of DAR parsing omissions. If any part of the text cannot be parsed, including trailing comments, an error will now be generated. (Previously, the tail comment was not parsed.)
fix: Corrected the rotation logger behavior by changing the maximum number of loggers to 4 (from the previous 5).
fix: Made minor localization fixes.
refactor: Consolidated common code for single and multi.
perf: Improved the speed of the overwrite loop with a filter.
Version 0.2.2
Fixed a bug in "HasMagicEffect" that forgot to apply "negated".
Fixed localization.
Version 0.2.1
(GUI)Fix i18n & editor mode display
Version 0.2.0
Change all File I/O to asynchronous I/O (more efficient use of CPU)
Changed to rotate log files
Added Progress bar
Added translation system
Added Preset3
Version 0.1.6
Change button name(from posts).
Fixed a problem in which the "IsInFaction" Plugin argument was empty.
Fixed a problem in which NumericValue was not enclosed in "form".
Version 0.1.5
Add NewEditor & Custom JavaScript
Add Hide & Restore DAR button(For MO2 user)
Add Remove OAR button(For MO2 user)
Version 0.1.4
Help text is clearer (requested by post).
Fixed Custom CSS overwrite bug.
Fixed CSS preset1.
Version 0.1.3
Fixed a problem where the `IsActorValueLessThan` condition was forgotten, so 100% of the encounters crashed.
Fixed it to appear in the message and error log instead of crashing.
Supported uppercase hexadecimal prefix(0X).
Added button to open log file.
Added parallel execution mode.
Version 0.1.2
Support to parse dar comment
Version 0.1.1
The path to the mapping_table in the GUI was required. (Error with empty string in it, even though it expects None in Rust.)
The type conversion process was only accepting Float, so if there was a decimal number in it, it was giving an error.
Fixed "condition" being converted to "Condition".
The processing of "IsWornHasKeyword" was wrong.
Stop syntax errors with "OR" & "AND" at the end.
Version 0.1.0
Created CLI and GUI on an experimental basis.
There was already a converter(DAR to OAR Converter(C#)), but it didn't automatically change the priority directory name, so I made my own.
Rust is easy to write unit tests for, and as fast as C, C++ (Disk I/O and serialization are handled in concurrent processing using tokio's M:N model(model image), which uses the CPU efficiently.).
I wanted to change the background with CSS.(To me this is important.)
PluginValue(In CompareValues) is not enclosed in "Form" (this is an error but a potential error that is not displayed in the OAR GUI v2.1.0) This error occurred up to `DAR to OAR converter v1.0.8` (original C# ver.) and earlier versions. dar2oar used to have this bug, but thanks to a bug reporter, it has been fixed in v0.1.6 (See the second from the earliest page of the post).Unless the original converter is fixed, it is better to use this application.This bug is easily seen when converting `EVG Conditional Idles` and others.
Parsing error for countries with commas in decimal places (This error does not occur in Rust. Always use `. `)
Nested directory error (support for directories after numbers like male, female, etc.)
I am not fluent in English so this is a machine translation.
Only the `custom conditions` pattern is supported now, not the DAR for the `ActorBase` pattern. (It may be possible to change the behavior of "dar2oar_core::path_chagner.rs", but I haven't seen it except for `LokiPose`, so I haven't started it yet) => Supported since v0.7.0
Rejection of ambiguous constructions This converter will error if you omit AND or OR. This is because dar2oar don't know whether the mod author is intended to be an `OR` or an `AND`.
- actual
IsFemale() IsCombat()
- expected pattern1(If the mod author intended to AND)
IsFemale() AND IsCombat()
- expected pattern2(If the mod author intended to OR)
IsFemale() OR IsCombat()
The following syntax is not present in the DAR documentation, but is supported by dar2oar for flexibility.
They are used without (). - actual
IsCombat
- expected(automatically parsed by dar2oar)
IsCombat()
Tailing AND or OR - actual
IsFemale() OR IsCombat() OR
Line comment(`;`) - actual
IsCombat() AND ; This is DAR line comment IsFemale()
GUI
Download the latest binary from Nexus or GitHub
Click g_dar2oar.exe
CLI (For example, if you want to list multiple mods using PowerShell commands and convert them automatically in the CLI)
./dar2oar convert --src "./data/Smooth Moveset" --mapping-file "./settings/mapping_table.txt" See Examples
There are a certain number of people who want to do batch processing with GUI, but there are mods that are impossible to revert when converted to OAR (mods that mix OAR and DAR), and it must have the flexibility to exclude such mods, hence the CLI, which can be accomplished by invoking the CLI with PowrShell or Python.
The CLI is also more convenient for automatic application of mapping tables. For example, the directory name and the file name of the mapping table can be the same, and variables in the for loop during directory search can be passed directly as command arguments during conversion.
Yes, but this is a slow conversion, since calling a sys_fork equivalent system call in a loop to create a process is to create a new memory space. If speed is not acceptable, there is a way to statically link the dar2oar_core library itself. This application is completely separate from the core, CLI, and GUI, and is designed with the intention that it can be imported into your own exe at any time. See this document
DAR priority folder name => A specific name
1. If a mapping file is passed
mapping_table.txt(Sample)
8000000 Combat 8000001 8000002 // This is a line comment. It is ignored until a line break comes, so you can freely write notes. 8000005 8000005 Female 8001000 8001000 Unarmed 8001010 8001010 Sword // More to follow below...
2. It is interpreted as follows (As you can see, if there is no corresponding priority folder name, a sequential number will be added at the end.)
8000000 Combat 8000001 Combat_1 8000002 Combat_2 8000005 Female 8001000 Unarmed 8001010 Sword // More to follow below...
Build commands GUI npm run dev # Development mode npm run build # Release (See target directory)
CLI cargo run # Development mode cargo build --release # Release (See target directory)
GUI
Clear all field inputs at once button -> Implemented in v0.1.3
For user custom JavaScript -> Implemented in v0.1.5
Parallel directory walk with native threads(I honestly don't know how to write this. It would be nice if I could.) -> Implemented in v0.1.3
progress bar(I have written periodic execution code using async and mpsc channel in Rust, but I have never written code to do periodic IPC on the frontend, so this is only ideal) -> Implemented in v0.2.0
Core
Bulk Move Backup of DAR Folders -> Implement in v0.1.5 (Zip compression is too costly, so instead I used MO2's functionality to hide it by adding mohidden with rename)
I could not have made this Rust converter without the source of the C# application and the bug report from POST.
Thank you.
MIT OR Apache-2.0 Copyright (c) 2023 SARDONYX License
Original Application: MIT License Copyright (c) 2023 Allison Payne MIT License