Skip to content
SARDONYX edited this page Jan 20, 2024 · 50 revisions

DAR to OAR Converter(GUI & CLI)

Features

  • DAR to OAR conversion(CLI & GUI applications)
  • Implemented sub commands (Remove OAR dir, Unhide DAR files)
  • Mapping table complements OAR's readability on GUI
  • Localization system(Could be customized)
  • Could edit JavaScript & CSS

Getting Started for User

Hints

  • For Windows, select g_dar2oar_{VERSON}_x64_en-US.msi or g_dar2oar_{VERSON}_x64-setup.exe

  • What is the one marked DAR_to_OAR_Converter-Windows-Portable.zip? It is a compressed file that contains the GUI and CLI, it is not an installer, so it does not automatically install the dependent libraries needed to start the GUI.

GUI

  1. Download the latest binary from Nexus or GitHub

  2. Click g_dar2oar.exe

convert-page

How do I customize my translation? -> You can customize it by writing JavaScript as follows.

See custom_translation sample

Set a key named 'custom-translation-dict' in the localStorage, and enter en-US.json format Json is embedded in it.

CLI (For example, if you want to list multiple mods using PowerShell commands and convert them automatically in the CLI)

  1. Download the latest binary from GitHub
  2. Use Command

Examples

  • Simple
./dar2oar convert "./test/data/UNDERDOG Animations" --mapping-file "./test/mapping_tables/UnderDog Animations_v1.9.6_mapping_table.txt" --run-parallel --stdout
  • Multi mods conversion
<# Example dir status
D:/Programming/rust/dar-to-oar
  ├─── test
  │     └─── data
  │           ├─── Modern Female Sitting Animations Overhaul
  │           └─── UNDERDOG Animations
  └─── logs

D:/Programming/rust/dar-to-oar/target/release
  └─── dar2oar.exe
#>

$base_dir = "D:/Programming/rust/dar-to-oar" # Convert target base directory
$bin_dir = "D:/Programming/rust/dar-to-oar/target/release" # Directory with dar2oar.exe

if (!$(Get-Command dar2oar -ErrorAction SilentlyContinue)) {
  # Temporarily pass through to access without specifying an absolute path.
  $env:Path += ";$bin_dir"
}

function Convert-Mods($base, $mods_dir, $log_level) {
  # Create log dir if it doesn't exist.
  if (!$(Test-Path "$base_dir/logs")) {
    New-Item -ItemType Directory "$base_dir/logs"
  }

  Get-ChildItem $mods_dir -Directory |
  ForEach-Object {
    # The following values are expected for `$_.FullName`.
    # - D:/Programming/rust/dar-to-oar/test/data/Modern Female Sitting Animations Overhaul
    # - D:/Programming/rust/dar-to-oar/test/data/UNDERDOG Animations

    # The following values are expected for `$_.Name`.
    # - Modern Female Sitting Animations Overhaul
    # - UNDERDOG Animations
    dar2oar convert $_.FullName `
      --run-parallel `
      --stdout `
      --log-level $log_level `
      --log-path "$base_dir/logs/convert-$($_.Name).log"
    Write-Host ""
  }
}

function Show-Dar($base, $mods_dir, $log_level) {
  if (!$(Test-Path "$base_dir/logs")) {
    New-Item -ItemType Directory "$base_dir/logs"
  }

  Get-ChildItem $mods_dir -Directory |
  ForEach-Object {
    dar2oar unhide-dar $_.FullName `
      --stdout `
      --log-level $log_level `
      --log-path "$base_dir/logs/convert-$($_.Name).log"
    Write-Host ""
  }
}

function Remove-Oar($base, $mods_dir, $log_level) {
  if (!$(Test-Path "$base_dir/logs")) {
    New-Item -ItemType Directory "$base_dir/logs"
  }

  Get-ChildItem $mods_dir -Directory |
  ForEach-Object {
    dar2oar remove-oar $_.FullName `
      --stdout `
      --log-level $log_level `
      --log-path "$base_dir/logs/convert-$($_.Name).log"
    Write-Host ""
  }
}

function Get-Help() {
  dar2oar --help
  dar2oar --help
  dar2oar convert --help
  dar2oar remove-oar --help
  dar2oar unhide-dar --help
}

# Convert-Mods $base_dir "$base_dir/test/data" "debug"
# Remove-Oar  $base_dir "$base_dir/test/data" "debug"
# Show-Dar $base_dir "$base_dir/test/data" "debug"
Get-Help

CLI Help

dar2oar 0.5.0
DAR to OAR Converter CLI

USAGE:
    dar2oar.exe <SUBCOMMAND>

OPTIONS:
    -h, --help       Print help information
    -V, --version    Print version information

SUBCOMMANDS:
    convert       Convert DAR to OAR
    help          Print this message or the help of the given subcommand(s)
    remove-oar    Find and delete `OpenAnimationReplacer` directory
    unhide-dar    Unhide all files in the `DynamicAnimationReplacer` directory by removing the
                      `mohidden` extension
dar2oar.exe-convert
Convert DAR to OAR

USAGE:
    dar2oar.exe convert [OPTIONS] <SOURCE>

ARGS:
    <SOURCE>
            Path containing the "DynamicAnimationReplacer" directory

OPTIONS:
        --author <AUTHOR>
            Mod author in config.json

        --destination <DESTINATION>
            "OpenAnimationReplacer" directory output destination (if none, inferred from DAR path)

    -h, --help
            Print help information

        --hide-dar
            After conversion, add ".mohidden" to all DAR files to hide them(For MO2 user)

        --log-level <LOG_LEVEL>
            Log level

            trace | debug | info | warn | error

            [default: error]

        --log-path <LOG_PATH>
            Output path of log file

            [default: ./convert.log]

        --mapping-1person-file <MAPPING_1PERSON_FILE>
            Path to section name table(For _1st_person)

        --mapping-file <MAPPING_FILE>
            Path to section name table

            - See more details
            https://github.com/SARDONYX-sard/dar-to-oar/wiki#what-is-the-mapping-file

        --name <NAME>
            Mod name in config.json & directory name (if none, inferred from DAR path)

        --run-parallel
            Use multi thread

            [Note] More than twice the processing speed can be expected, but the concurrent
            processing results in thread termination timings being out of order, so log writes will
            be out of order as well, greatly reducing readability of the logs.

        --stdout
            Log output to standard output as well
dar2oar.exe-remove-oar
Find and delete `OpenAnimationReplacer` directory

USAGE:
    dar2oar.exe remove-oar [OPTIONS] <TARGET_PATH>

ARGS:
    <TARGET_PATH>
            Path containing the "OpenAnimationReplacer" directory

OPTIONS:
    -h, --help
            Print help information

        --log-level <LOG_LEVEL>
            Log level

            trace | debug | info | warn | error

            [default: error]

        --log-path <LOG_PATH>
            Output path of log file

            [default: ./convert.log]

        --stdout
            Log output to stdout as well
dar2oar.exe-unhide-dar
Unhide all files in the `DynamicAnimationReplacer` directory by removing the `mohidden` extension

USAGE:
    dar2oar.exe unhide-dar [OPTIONS] <DAR_DIR>

ARGS:
    <DAR_DIR>
            DAR directory containing files with ".mohidden" extension

OPTIONS:
    -h, --help
            Print help information

        --log-level <LOG_LEVEL>
            Log level

            trace | debug | info | warn | error

            [default: error]

        --log-path <LOG_PATH>
            Output path of log file

            [default: ./convert.log]

        --stdout
            Log output to stdout as well

What is the mapping file?

DAR priority folder name -> A specific name

Sample is here

1 It is interpreted as follows

Sample

  • mapping_table.txt
8000000  Combat
8000001
8000002
// This is a line comment. It is ignored until a line break comes, so you can freely write notes.
8000005  Female
8001000  Unarmed
8001010  Sword
// More to follow below...

2 Parse to...

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

3.1. Convert Result(Mapping table specified)

Smooth Moveset
    ├─1hm
    ├─2hm
    ├─Axe
    │  └─XPMSE
    ├─Axe+Shield
    │  └─XPMSE
    ├─Axe,
    ├─Base
    ├─Claw
    │  └─XPMSE
    ├─Claw+shield
    │  └─XPMSE
    ├─Dagger
    │  └─XPMSE
    ├─Dagger+Shield
    │  └─XPMSE
    ├─Dual
    │  └─XPMSE
    ├─Dual_1
    │  └─XPMSE
    ├─Dual_2
    ├─Female
    ├─Giant
    ├─Giant_1
    ├─Halberd
    ├─Hammer,
    ├─Javelin
    ├─Javelin+Shield
    ├─Katana
    │  └─XPMSE
    ├─LargeShield
    ├─Mace
    │  └─XPMSE
    ├─Mace+Shield
    │  └─XPMSE
    ├─Non_1
    ├─Non_2
    ├─Pike
    ├─Pike,
    ├─Pike,_1
    ├─Pike_1
    ├─QuarterStaff
    ├─QuarterStaff_1
    ├─Rapier
    │  └─XPMSE
    ├─Rapier+shield
    │  └─XPMSE
    ├─Scythe
    ├─Spear
    ├─Spear+Shield
    │  └─XPMSE
    ├─Spear+Shield_1
    ├─Sword
    │  └─XPMSE
    ├─Sword+Shield
    │  └─XPMSE
    ├─Sword+Shield_1
    │  └─XPMSE
    ├─Sword+Shield_2
    ├─Sword_1
    │  └─XPMSE
    ├─Sword_2
    ├─Unarmed
    ├─Unarmed_1
    │  └─XPMSE
    └─Unarmed_2

3.2 Convert Result(Mapping table isn't specified) => The name of the priority folder is used.

└─Smooth Moveset
    ├─8000001
    ├─8000005
    ├─8001000
    ├─8001010
    │  └─XPMSE
    ├─8001020
    │  └─XPMSE
    ├─8001040
    │  └─XPMSE
    ├─8001041
    ├─8001050
    │  └─XPMSE
    ├─8001055
    │  └─XPMSE
    ├─8001060
    ..........
    ├─8003010
    │  └─XPMSE
    └─8213000

For Developer

If it is too much trouble to set up an environment, you can also fork the system and build it with github CI by typing git tag -s "100.0.0".

Requirements

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)

Static link as library

If you can use Rust, you can easily incorporate my code into your software as a library.

See dar2oar_core readme

Acknowledgements & Credits

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
Clone this wiki locally