Every entry of S:/eclipse-build/tools/tools.toml and every folder under tools/dotnet, with what it does, how to get it and
its main commands. EB means py -3.12 -I -B S:/eclipse-build/eb.py.
Checked against code: the names, kinds and exe names (from tools.toml) and the command names (from each tool's entry point).
Partial: for the frozen tools and for commands marked "no usage text" only the name is known.
How to get a tool
EB tool build <name> [<name> ...] # prints "<name>: <folder>"; the exe is in that folder
EB tool build all
EB tool env # the pinned tool paths and environment the release pipeline gets
A tool folder is named by a hash of its source and dependencies. It is built once and shared. Never write into it and never
build a private copy; see ../build/use-shared-tools.md. Run anything heavy as
EB run --mem <GB> -- <command>.
Rules that hold for almost every C# tool here:
- Pass absolute paths. Most tools change to their own folder so Oodle loads, and several resolve a relative path against that folder.
- They read their inputs and write a new output file. They re-read the output and exit non-zero if the check fails.
Tools built from source (kind = "dotnet")
tools.toml name |
Source folder | Exe | What it does | Main commands | Page |
|---|---|---|---|---|---|
polish |
Polish |
Polish.dll (run with dotnet) |
applies rowlists to a regulation | apply, apply-chain, verify-chain, dump, plist, diffreg, npcn, scan, ci |
edit-params-and-rowlists.md |
regq |
RegQ |
RegQ.exe |
read-only regulation queries and compare | cells, dump, find, table, order |
same |
tablerows |
TableRows |
TableRows.exe |
adds rows to params with duplicate row ids, without sorting | append, check, rows, counts, fmg |
same |
bndset |
BndSet |
BndSet.exe |
replaces binder entries by file name | BndSet <in binder> <out binder> <entry file name>=<replacement file>... |
same |
invtool |
InvTool |
InvTool.exe |
Eclipse invasions layer build, plus param / event / FMG / MSB probes | build, common, pdump, pscan, evdump, evscan, fmg, fmgfind, msb, reward, msgadd, tae |
same |
mimicopen |
MimicOpen |
MimicOpen.exe |
gives a seed's mimic chest the Open prompt (MSB entity + two events) | one command line, 10 arguments | same |
ds2humanport |
Ds2HumanPort |
Ds2HumanPort.exe |
DS2 humanoid to NR converter steps | flver, dummies, tex, attacks, tae, behbnd, chrbnd, anibnd, ragdoll, params, tae-dump, param-dump, matscan, bndcheck, tex-dump |
port-a-ds2-character.md |
ds2port |
Ds2Port |
Ds2Port.exe |
DS2 extraction and conversion helpers (older Aava route, still used for dumps) | see the list below | same |
ds2unpack |
Ds2Unpack |
Ds2Unpack.exe |
unpacks files from the DS2 archives | --game, --out, --include, --list, --dictionary |
same |
addlayers |
AddLayers |
AddLayers.exe |
additive layer clips for a port on a vanilla graph | probe, additive, twist |
map-tools.md |
npcport |
NpcPort |
NpcPort.exe |
DS3 to NR port steps | ds3-extract, ds3-regulation, flver-port, tex-port, tae-port, param-port-npc, param-dump, param-free, bnd-repack, anibnd-build, luabnd-build, sfxbnd-build, ragdoll-port, hk-convert, hk-xml, hk2014-dump, ffx-roots, verify-package, bnd-ls, bnd-x, flver-info, tae-info, matbin-info, tpf-info |
port-a-ds3-or-er-character.md |
aiport |
AiPort |
AiPort.exe |
ports DS1 / DS3 / ER battle AI Lua to NR | port, localize, aicheck, airun, decompile, inventory, catalog, luabnd-extract, luabnd-pack, luabnd-verify, luabnd-bytecode, tae-info, shim-import, spefx-remap |
same |
statport |
StatPort |
StatPort.exe |
carries source-game enemy stats onto NR rows | dump, list, port, all, audit, apply, defdiff |
same |
portlint |
PortLint |
port-lint.exe |
offline checks and mechanical fixes for a port | <mod folder> (lint), fix, rules, flverinfo, taeinfo, paramhist |
same |
materialfix |
MaterialFix |
MaterialFix.exe |
gloss, metal and matbin param repairs | gloss, matparam, matdump |
same |
dummyaim |
DummyAim |
DummyAim.exe |
adds aimed FLVER dummies to a chrbnd | <in chrbnd> <out chrbnd> <spec.tsv>, info, rebnd |
same |
kneelretarget |
KneelRetarget |
KneelRetarget.exe |
retargets clips between skeletons | info, bones, build, verify, pack, track, concat, rootinfo, taedump, roundtrip, dmyinfo, meshes, maskflver, flvbind, ls |
same |
critfix |
CritFix |
CritFix.exe |
fixes the pose pop between crit receive and death anims | scan, death, info, tags, verify |
same |
fxbnd |
FxBnd |
FxBnd.exe |
packs and checks effect binders | unpack, ds2-xml, pack, verify, dummies, stage-res, ds2-tex, flver-info |
same |
fxmodelsgen |
FxModelsGen |
FxModelsGen.exe |
DS3 effect models to NR effect-model materials and textures | dump, fix |
same |
havok2014 |
Havok2014 |
Havok2014.exe |
DS3 Havok 2014 to 2018 conversion, tagfile checks, navmesh commands | see the list below | port-a-ds3-or-er-character.md, map-tools.md |
skillport |
SkillPort |
SkillPort.exe |
ER skill TAE and clips into NR c0000; TAE event edits |
ls, dump, port, validate, hkx-add, res-add, get, event-add, event-del, event-edit, anim-copy |
port-a-weapon-skill.md |
behedit |
BehEdit |
BehEdit.exe |
byte-level edits of the NR player graph c0000.behbnd |
probe, show, find, apply, interval, selfix, names, events, clipcmp, wcdump, itemdump, files |
same |
ds3retarget |
Ds3Retarget |
Ds3Retarget.exe |
DS3 c0000 clips onto the NR skeleton; writes TAE anims |
bones, build, pack, info, tae-set |
same |
mapkit |
MapKit |
MapKit.exe |
map file audits, MSB edits, by-entry binder merges | 25 commands | map-tools.md |
terraincut |
TerrainCut |
TerrainCut.exe |
cuts openings through terrain collision and drawn mesh | ls, tris, cut, check, rewrite, fields, audit |
same |
castlevariants_src |
CastleVariants |
CastleVariants.exe |
MSB / EMEVD builder for seeds, POI variants, FMG merges | build msbjson, build apply, fmgls, fmgadd, verify, arena, rapappend, matdiff, gaolgate, testevent, inspection commands |
same |
Ds2Port commands
Usage text from Program.cs:
bnd-ls <bnd[.dcx]>
bnd-x <bnd[.dcx]> <outDir>
flver-info <flver[.dcx]>
tae-info <tae> [--events]
flver-bind <flver> <out.json>
nsa-dump <ds2 anibnd> <outDir> (NSA_MAPOFF=1 for c6790)
tex-info <texbnd> | matbin-info <matbinbnd> <name>
flver <ds2.flv> <nrTemplate.flver> <out.flver> <srcChr> <dstChr>
flver-dmy <flver> <attacks/bullet_dummies.tsv> <out.flver>
texbnd <ds2.texbnd> <nrTemplate texbnd> <out> <srcChr> <dstChr> <_h|_l>
tae <ds2 _pl.tae> <ds2 _snd.tae> <nrTemplate.tae> <animmap.csv> <nsaDumpDir> <out.tae> <dstChr> <attacksDir> <slots.json> <ds2 _sfx.tae|-> <sfxBase> <musicStopId> <stopMusicSlots,..> <defaultBulletDmy>
attacks <enc_regulation> <ds2 defs dir> <ds2 _pl.tae> <slots.json> <outDir> [--verify]
ragdoll <src ragdoll.hkx> <donor NR chrbnd|hkx> <skeleton.hkx|bind.json> <out.hkx> [--verify]
pf2hk <hk2014 packfile> <out hk2018> [--verify]
pf-dump <packfile> <out.json> | hkx-xml <hk2018> <out.xml> | rag-info <hk2018 ragdoll> | ds2param <reg> <param> <defs> [ids]
anibnd <tplAnibnd> <hkxDir> <tae> <chr> <modDir>
chrbnd <tplChrbnd> <tplChr> <flver> <physics.hkx> <chr> <modDir>
behbnd <tplBehbnd> <tplChr> <chr> <modDir>
hks <tpl.hks> <tplChr> <chr> <modDir>
luabnd <tplLuabnd> <battle.lua> <name> <modDir>
idcheck <regulation.bin> <Param:lo-hi>...
The code also accepts nsa-raw, nsa-static, nsa-root, rawstr, esd-dump, msb2-sounds, ffx-xml, fx-res and fx-pack,
with no usage text. Run Ds2Port from its own folder.
Havok2014 commands
Running it with no arguments prints the usage. Commands in the switch: dump14, types14, xml18, dump18, typedb,
ragdoll, rules, diff18, cloth, cloth-pairing, cloth-remap, cloth-verify, cloth-selftest, cloth-mesh-fix,
behavior-character, batch, tagcheck, relayout, flver-layouts, flver-tris, hulls18, hkxbounds, hkxscale,
navinfo, navcover, navunlink, navclearance, nav (prints the navmesh usage). flver-layouts, flver-tris, hulls18,
hkxbounds and hkxscale are not in the usage text: not written up yet; see tools/dotnet/Havok2014/Cli.cs and FlverInfo.cs.
Frozen tools (kind = "frozen")
The exact builds that shipped 0.0.86, restored from the store. Their source has not moved to eclipse-build.
| Name | Exe | What it is | Notes |
|---|---|---|---|
idreg |
idreg.exe |
by-entry merges of allmaterial, msg and banks | not written up yet; source in souls-script-kt npc-ports/id-registry/IdReg |
castlevariants |
CastleVariants.exe |
the 0.0.86 CastleVariants; the pipeline uses its fmgadd |
lacks newer operations; use castlevariants_src for map work |
ledaport |
LedaPort.exe |
dump for dup_order.py |
not written up yet; source in souls-script-kt npc-ports/leda/tool |
ssk_checks |
(scripts) | release checks: ai_lua_budget.py, check_gaol_drops.py, castle-variants config/ |
not written up yet; they find their data by relative path, so they run from a layout-preserving copy |
Data sets (kind = "data")
Nothing is built. EB tool build <name> restores the set and prints its folder.
| Name | What it holds |
|---|---|
andre |
the July 2026 Andre SoulsFormats build that Polish, RegQ, TableRows and most tools link |
andre_pin, hklib_pin |
Andre and HKLib from S:\Smithbox-havok-pin; Ds2HumanPort and NpcPort link these |
hklib_sbx |
HKLib from Smithbox before its November rewrite; the DS2 family and the arts tools link it |
andre_io |
Andre.IO.dll for Ds2Unpack |
directxtex |
DirectXTexNet, its natives and oo2core_9, from the Smithbox 2.1.2 release |
bhd5_decrypt_rust |
bhd5_decrypt_rust.dll for Ds2Unpack, MaterialFix, SkillPort |
oo2core_6, oo2core_9 |
Oodle dlls (oo2core_9 is oo2core_9_win64.dll, used to normalise Kraken output) |
lua502 |
stock Lua 5.0.2 dll for AiPort |
paramdefs |
Nightreign paramdef XMLs (Smithbox 2.1.2); EB tool env exports the folder as EB_PARAMDEFS |
vanilla_regulation |
the vanilla regulation.bin |
aicommon |
vanilla aicommon(_dlc01).luabnd.dcx for ai_lua_budget.py |
vgmstream |
vgmstream_cmd.exe r1776, the decoder for snd_bank.py |
ds3_fdp_main_sound |
DS3 fdp_main.fsb and fdp_main.fev |
Scripts that are not in tools.toml
| Script | What it does | Run | Page |
|---|---|---|---|
tools/ds2/npmirror.py |
builds the per-run npc-ports mirror with eclipse-build tool bins |
imported by each DS2 build.py: npmirror.tools(work, NP, run), npmirror.bin(NP, rel) |
port-a-ds2-character.md |
tools/ds2/anim_stage.py |
the DS2 anim stage (anim_build.py then tna1.py) as one cacheable step |
py -3.12 -I -B anim_stage.py --python <exe> --soulstruct-lib <dir> --anim-build <py> --tna1 <py> --out-dir <dir> --tna1-args "<args>" -- <anim_build args> |
same |
tools/ds2/py/pursuer/, tools/ds2/py/aava/ |
the DS2-only Python steps | called by the Kotlin port script | same |
tools/arts-py/tae_ds3.py |
DS3 TAE events to NR events for a weapon art | py -3.12 -I -B tae_ds3.py <spec.json> <ds3 dump.tsv> <nr dump.tsv> <SpEffectParam.tsv> <fxr list> <out events.tsv> <log.txt> [fx map.tsv] |
port-a-weapon-skill.md |
tools/snd-py/snd_bank.py |
DS3 sounds into cs_c4340.bnk from a job file |
snd_bank.py run <job.toml> --in-bank <in.bnk> --out-bank <out.bnk> [--fsb ..] [--fev ..] [--vgmstream ..] [--work ..] [--report ..] |
add-ds3-sounds.md |
tools/snd-py/fev_ds3.py, wwbnk.py, wwise_port.py |
libraries for snd_bank.py (DS3 FEV reader, Wwise bank reader and writer, sample helpers) |
imported | same |
tools/camp-py/poi_templates/build.py |
POI template maps | py -3.12 -I build.py <mapkit.exe> <release mapstudio dir> <vanilla mapstudio dir> <out dir> |
map-tools.md |
tools/camp-py/hknp_tris.py |
collision triangles from a Havok2014 dump18 --all text |
from hknp_tris import tris_from_dump |
same |
tools/skins/preflight.py |
where each skin's source parts are | py -3.12 -I -B preflight.py [TOML|DIR ...] [--materialize OUT] |
skins.md |
tools/release-py/, tools/stage.py |
release pipeline scripts and eb stage |
through EB release ... and EB stage ... |
../build/README.md |
Environment variables these tools read
| Variable | Tool | Effect |
|---|---|---|
EB_PARAMDEFS |
Polish, RegQ | folder of Nightreign paramdef XMLs |
EB_REG_IV |
Polish, TableRows | the regulation IV: unset = random, content, or 32 hex digits |
EB_FIX_CHAIN |
Ds2HumanPort tae |
path of fix-chain.tsv |
EB_DHP_LIVE, EB_TOOLS_LIVE |
npmirror.py |
use live souls-script-kt tool builds |
EB_NO_CACHE |
the DS2 Kotlin port script | run the anim stage without the cache |
EB_STORE |
skins/preflight.py |
store location, default S:/eclipse-build-store |
SKILLPORT_CWD |
SkillPort | base folder for relative path arguments |
DR_LIST, DR_ROOT |
Ds3Retarget | diagnostics: list binder files, print root motion |
NSA_MAPOFF |
Ds2Port nsa-dump |
set to 1 for c6790 |
FIELDS |
StatPort dump |
limit columns |
MORPHEME_MCP_CACHE |
the morpheme MCP |
cache folder |
Tools still waiting to be imported
tools/README.md keeps the list ("Waiting to be imported"). Examples: the FX port script sfx_port.mjs, the FXR sound fix
scripts, the weapon-port tools (WepModel, PatchNanaya, WepFix), parts-inspect, AndreTool, HawkTool, BossMenu.
Import one before you use it again. Ds3Fix, which the DS3 route calls, is not in tools.toml either.