Team Cereustooling wiki

Get a shared tool

Partly checkedagainst the code on 2026-11-12 11:43

Every reusable build tool lives in S:/eclipse-build/tools and is listed in tools/tools.toml. Stages use only those. eb tool build gives you the folder of a tool, building it the first time.

The commands and the tool list are checked against the code and tools.toml. The one-line descriptions come from the comments in tools.toml; the tools themselves were not run for this page.

EB means py -3.12 -I -B S:/eclipse-build/eb.py.

Steps

  1. Build or restore the tool. Give one or more names from the list below, or all.

    EB tool build skillport behedit ds3retarget
    

    Each line of output is <name>: <folder>. The program is in that folder under the file name in the "Run" column below, for example <folder>/SkillPort.exe.

  2. Run the tool from that folder as an eb job (run-heavy-jobs.md). Pass absolute paths: several of these tools resolve relative paths against their own folder.

  3. To see the tool paths and environment variables the release pipeline gets:

    EB tool env
    

    It prints one --tool=<name>=<path> line per pipeline tool, then EB_REGQ, EB_LEDA_DIR, EB_PARAMDEFS and AI_LUA_VANILLA_DIR. It never builds: a tool that is not built yet stops it with <name> <key> is not built (eb.py tool build <name>).

How a tool folder is made

Kind in tools.toml What eb tool build does Folder
dotnet Builds tools/dotnet/<src> with dotnet build -c Release -m:1 as a 1 GB eb job. S:/eclipse-build-out/tools/<name>/<key>
frozen Copies a frozen build out of the store. S:/eclipse-build-out/sets/<set>-<first 12 of the list hash>
data Copies a frozen input folder out of the store. same as frozen
  • <key> is a hash of the tool's source files, tools/dotnet/Directory.Build.props, tools/dotnet/global.json, its dependencies and its tools.toml entry. Change any of them and you get a new folder.
  • A folder is made once and never overwritten. Every session that needs that exact version shares it. A finished folder has a .eb-ok file.
  • A failed build prints <name>: build failed and the end of the compiler output.

The tools

Built from source (kind = "dotnet"):

Name Run What it is
polish Polish.dll Applies rowlists to the regulation. One tool for the pipeline's polish and polish_delrow.
regq RegQ.exe Reads the regulation (queries used by the release checks).
tablerows TableRows.exe Applies tablerows rowlists.
mimicopen MimicOpen.exe The seed mimic's Open prompt: MSB entity and two EMEVD events.
ds2humanport Ds2HumanPort.exe DS2 humanoid to NR converter steps (TaeBuild, ParamsBuild, FlverNr, ...).
npcport NpcPort.exe DS3 to NR port steps (param-port-npc, param-dump, tae-port, ds3-extract, ...).
ds2port Ds2Port.exe DS2 port steps: bnd-x, flver-bind, nsa-dump, hks.
ds2unpack Ds2Unpack.exe DS2 BHD/BDT unpack.
havok2014 Havok2014.exe relayout, tagcheck, behbnd --havok; an input of critfix, addlayers and kneelretarget.
portlint port-lint.exe Port fix and lint.
kneelretarget KneelRetarget.exe track (used by pose_cancels.py).
critfix CritFix.exe verify, @crits.
addlayers AddLayers.exe The additive step of the DS2 port script.
statport StatPort.exe The port step (stats).
aiport AiPort.exe The localize step (AI scripts).
fxbnd FxBnd.exe Effect binders for build_fx.mjs.
materialfix MaterialFix.exe gloss (used by apply_tex.py).
skillport SkillPort.exe ER skill TAE and clip port into NR c0000 (convert, event-add, event-del, res-add, ...).
behedit BehEdit.exe Byte-level edits of the NR player graph c0000.behbnd (apply, interval, selfix, ...).
ds3retarget Ds3Retarget.exe DS3 c0000 clips to the NR skeleton (build, pack).
fxmodelsgen FxModelsGen.exe DS3 effect models to NR sfx-model materials and textures.
castlevariants_src CastleVariants.exe CastleVariants built from source: the MSB/EMEVD builder, with operations the frozen build lacks.
dummyaim DummyAim.exe FLVER dummies rigid with a bone, turned to another pitch.
bndset BndSet.exe Replaces entries of a binder by file name, with a read-back.
mapkit MapKit.exe flvermats, tpfls, bndnames, matadd, msbparts.
terraincut TerrainCut.exe Openings through map terrain: collision and map-piece triangles in boxes.
invtool InvTool.exe Eclipse invasions tool: common.emevd events, invader maps, msgadd, probes.

Frozen builds (kind = "frozen", source not moved here yet):

Name Run What it is
idreg idreg.exe By-entry merges (allmaterial, msg, banks).
castlevariants CastleVariants.exe The 0.0.86 build, used for fmgadd merges.
ledaport LedaPort.exe dump for dup_order.py.
ssk_checks (folder) The release check scripts from souls-script-kt with their data: ai_lua_budget.py, check_gaol_drops.py.

Frozen inputs (kind = "data"):

Name What it is
andre Andre SoulsFormats build of 2026-07-07 that Polish, RegQ and TableRows link.
andre_pin, hklib_pin Andre and Havok.HKLib from Smithbox-havok-pin, linked by Ds2HumanPort and NpcPort.
hklib_sbx Havok.HKLib of Smithbox before its Havok rewrite, linked by the DS2-family and DS3 arts tools.
andre_io Andre.IO.dll for Ds2Unpack.
directxtex DirectXTexNet with natives and oo2core_9.
paramdefs NR paramdef XMLs read by Polish, RegQ and TableRows.
aicommon Vanilla aicommon luabnd files for ai_lua_budget.py.
vanilla_regulation Vanilla regulation.bin.
oo2core_9 Oodle 2.9, used by eb dcx.
oo2core_6, lua502, bhd5_decrypt_rust DLLs that AiPort, Ds2Unpack, MaterialFix and SkillPort need.
vgmstream vgmstream CLI r1776 (vgmstream_cmd.exe), the decoder for the DS3 sound jobs.
ds3_fdp_main_sound DS3 fdp_main.fsb and fdp_main.fev, read by tools/snd-py/snd_bank.py.

Scripts that are not in tools.toml but live in tools/: release-py/ (dcxnorm.py, readback.py, lotchain.py, dup_order.py), arts-py/tae_ds3.py, snd-py/snd_bank.py (DS3 sounds into cs_c4340.bnk; see tools/snd-py/README.md), ds2/ (npmirror.py, anim_stage.py), skins/preflight.py.

The shared-tools-only rule

Stan's rule since 2026-11-10 (written in docs/AGENTS-GUIDE.md):

  • Stages use only tools from eclipse-build/tools. Do not build a private copy into .tmp or a stage tool/ folder.
  • Fixes and speed-ups go into the shared source here, not into a stage copy.
  • An old tool that still lives only in a stage folder, .tmp or souls-script-kt gets imported here before you use it again. The pattern is tools/dotnet/DS3-ARTS-IMPORT.md. If the import is too big for your job, use the old copy unchanged and say so in your report. tools/README.md keeps the list of tools waiting to be imported.

Writing a new tool so it can be imported

  • No hard-coded stage paths.
  • Absolute paths come in as arguments.
  • Per-stage data goes in a file beside the stage, not in the script.
  • Name the tool in your report so it gets carried in.

To add a dotnet tool to the list: put its project in tools/dotnet/<Name>, add an entry to tools/tools.toml with kind = "dotnet", src, run and deps, then run EB tool build <name>. A deps entry is either "andre" or "<property>=<tool>"; each one reaches the project as the MSBuild property Eb<Property>Dir holding that tool's folder (for example "hklib=hklib_sbx" gives EbHklibDir).

Kotlin .nr.kts scripts

Run them with the installed script host:

S:/souls-script-kt/script-host/build/install/script-host/bin/script-host.bat <script> <args>
  • Do not use gradlew --no-daemon :script-host:run --args=.... It starts a cold Gradle every time. docs/AGENTS-GUIDE.md gives about 3 s of overhead for the installed host against about 15.6 s for Gradle (measured 2026-11-09, not re-measured for this page).
  • Rebuild the install with gradlew :script-host:installDist in S:/souls-script-kt only after you change script-host or the script libraries.
Source files this page documents (4)
  • eb:tools/tools.toml
  • eb:tools/README.md
  • eb:eb.py
  • eb:docs/AGENTS-GUIDE.md

Changed one of these? Update this page: build/use-shared-tools.md (how).