dayz-launch-objectbuilder
Opens DayZ Tools' Object Builder (the .p3d model editor), optionally on a specific .p3d or the one .p3d in a mod's P: folder. Needs /dayz-setup-objectbuilder run once. Use when you need to inspect or
SKILL.mdskills/dayz-launch-objectbuilder/SKILL.md
GitHub<!-- skill-dir-note -->
Path note:
<skill-dir>in commands below is the absolute path of this skill's folder. When the agent loads this skill the harness exposes the skill's base directory; substitute it before running. Sibling skills are reached via<skill-dir>\..\dayz-X\.
/dayz-launch-objectbuilder
Open Object Builder without leaving the terminal. Optionally pre-loads a .p3d: one you name with --file, or the one model anywhere under a mod's P:\<ModName>\ folder with --mod.
Follow skills/_shared/dayz-conventions.md.
What it does
- Gates on
/dayz-preflight(as/dayz-launch-workbenchdoes), so an unmountedP:\fails with preflight's fix before--modlooks under it. - Resolves the open target:
--file <path>: that.p3d. A relative path is looked up under the project root first, then the current folder; when neither has it, the error lists both paths it tried. Fails if the path is missing or is a folder (Object Builder opens model files, not folders); warns if the extension isn't.p3d.--mod <ModName>: checks the name against/dayz-new-mod's naming rule (a letter first, then letters, digits or underscores, at most 64 characters; the sameNAME_PATTERN, loaded from itsnew_mod.py) and refuses the top-levelP:\folders that are not mods (vanilla data such asP:\DZ,P:\scriptsorP:\gui, and theP:\Modsjunction; the sameRESERVED_P_FOLDERSlist/dayz-launch-workbenchuses, loaded from itslaunch.py) before joining it ontoP:\. It then takes the.p3danywhere underP:\<ModName>\(every subfolder, sodata\,models\or any other layout). Object Builder opens model files, not folders, so the skill never passes it a directory. Fails if the name is invalid or reserved, or the mod folder is missing. With no.p3dyet (a fresh/dayz-new-modscaffold), it says so and opens Object Builder with no model. With several, it lists the first 20 (plus a count of the rest) and asks for--file.- Neither: no argument; Object Builder opens its last-used file.
- Locates
ObjectBuilder.exevia DayZ Tools. - Verifies the registry has been populated by
/dayz-setup-objectbuilder(with that skill's own check, loaded from itssetup.py), and fails with a hint if not. - Refuses if
ObjectBuilder.exeis already running (checked withtasklist, using/dayz-setup-objectbuilder's own check) and tells you to switch to that window, so a second instance never opens on the same.p3d. Iftasklistitself fails, it prints a[WARN]and carries on as if Object Builder were not running. - Spawns
ObjectBuilder.exedetached, with working directory<DayZ Tools>\Bin\ObjectBuilder\, so the shell returns immediately. The window may take a few seconds to appear. - Watches the new process for about a second. If it has already exited, the skill reports a failure with its exit code (exit 1) instead of printing "launched".
How to run
Just open the editor:
python "<skill-dir>\launch.py"
Open a specific .p3d:
python "<skill-dir>\launch.py" --file P:\MyMod\data\model.p3d
Open a mod's model:
python "<skill-dir>\launch.py" --mod MyMod
(Requires P:\MyMod\, typically created by /dayz-new-mod. Opens the one .p3d anywhere under it, or the editor with no model when there is none yet. With several, use --file.)
When to run
- Anytime you need to inspect or edit a
.p3dmodel. - After
/dayz-new-modproduced a scaffold and you want to drop a model intodata/. - Before adding LODs, named selections, or memory points to a custom asset.
Output
DayZ Object Builder launcher
DayZ preflight
[OK] P:\ is mounted
[OK] DayZ Tools found: C:\...\steamapps\common\DayZ Tools
[OK] Vanilla data found: P:\dz
[OK] P:\Mods -> C:\...\steamapps\common\DayZ\!Workshop
Preflight complete.
[OK] ObjectBuilder.exe: ...\Bin\ObjectBuilder\ObjectBuilder.exe
[OK] Registry configured
[INFO] Opening: P:\MyMod\data\model.p3d
[OK] Object Builder launched (PID 12345). The window may take a few seconds to appear.
Flag rules
--fileand--modare mutually exclusive (argparse rejects both together); pass one or neither.--filetakes an absolute path, or a relative one. A relative path is tried under the project root first, then under the current folder, and the first that exists wins; if neither exists, the error names both. The root is found the way the other DayZ skills find it (/dayz-init'sfind_project_dir()):CLAUDE_PROJECT_DIR, else the nearest folder at or above the current one that holds the/dayz-initproject cache, else the clone that holds the skill scripts when that clone has the cache, else the current folder. So--file data\model.p3dworks both from the project root (data\model.p3dthere) and fromworkspace\<ModName>\(its owndata\model.p3d). Warns if the extension isn't.p3d(Object Builder may refuse it).--modis just the mod name; the skill opens the single.p3danywhere underP:\<ModName>\, or the editor with no model when there is none. Fails, right after preflight, if the name breaks the naming rule, names a vanilla or reservedP:\folder (for example--mod DZ; pass a vanilla model with--fileinstead), or the folder isn't there. With more than one.p3dit lists up to 20 of them, then how many more there are.
Why detached
The editor is spawned detached (shared DETACH_FLAGS in _shared/skill_helpers.py) so the terminal returns at once and closing it doesn't kill Object Builder; the printed PID identifies the process.
Do not
- Don't run before
/dayz-setup-objectbuilderon a fresh machine — the skill will tell you to run setup first. - Don't rely on a relative
--filewhen the same relative path exists under both the project root and the current folder: the project root's copy wins. Pass an absolute path to be sure which model opens. - Don't try to open a second instance: the skill refuses while
ObjectBuilder.exeis running. Switch to the open window, or close it and re-run.