PhysicsTool is a Windows editor for Nintendo Havok physics files used by The Legend of Zelda: Breath of the Wild and Tears of the Kingdom.
It works with complete physics graphs rather than isolated values: cloth simulations, skeletons, particles, constraints, colliders, operators, buffers, and the format-specific metadata that connects them.
Open beta: PhysicsTool is actively being tested against real game files. Back up every file, keep a known-good original, and test changes in-game. Please report issues, failed merges, or reproducible crashes on Discord:
kb0mbyolo.
| Format | Game / purpose | Current support |
|---|---|---|
.hkcl |
BotW Havok cloth | Open, save, merge, remove, duplicate, rename, inspect, directly edit, and convert to BPHCL. |
.bphcl |
TotK Phive/Havok cloth | Open, save, merge, remove, duplicate, rename, inspect, directly edit, and convert to HKCL. |
.bphhb |
TotK helper-bone configuration | Open, save, edit, merge independent driver groups, add, duplicate, rename, mirror, reorder, and convert to BotW .bphyssb. This is not a full actor skeleton. |
.bphyssb |
BotW support-bone configuration | Open, inspect, save, edit, merge independent driver groups, and convert to TotK .bphhb. |
.hkrg |
BotW Havok ragdoll | Open, save, inspect, and edit model bones, ragdoll bones, rigid bodies, and supported constraints. |
.json |
PhysicsTool diagnostic export | Open and export for inspection. It is not the recommended authoring workflow. |
PhysicsTool can also export a BotW .bphysics AAMP sidecar for an HKCL file. That sidecar can reference a .bphyssb support-bone path.
- Merge complete cloth units between compatible HKCL files.
- Remove, duplicate, and rename cloths. Duplicating a cloth also duplicates its owned colliders.
- Directly edit particles, cloth bones, and colliders.
- Add particles, bones, capsule/sphere/plane colliders, and particle links.
- Inspect and edit supported particle-relationship values, including rest lengths, standard stiffness, bend ranges, bend stiffness, stretch stiffness, and local range data.
- Select a particle's active cloth colliders through Colliders instead of manually constructing its collision bitmask.
- Move, rotate, scale, mirror, copy, paste, and X-flipped paste viewport items.
- Run the built-in preview simulation with optional wind. It never writes simulated motion back into the file.
- Export Wii U or Switch HKCL, JSON, or a BotW BPHYSICS sidecar.
- Merge complete native BPHCL cloth packages, including their paired skeleton, particles, constraints, referenced colliders, AAMP registration, object references, and required TYPE metadata.
- Remove unused cloth packages and compact their native data when the file layout permits it.
- Directly edit supported particles, bones, colliders, triangles, and numeric constraint values.
- Duplicate, rename, and mirror cloth geometry. Mirroring follows the BPHCL native payloads, not HKCL serialization.
- Use the same viewport editing tools as HKCL for supported BPHCL data.
PhysicsTool calls each independent connected motion graph a driver group. A driver group contains the driver bone or bones that provide motion input, the curves and outputs that transform that motion, and the driven bones affected by the result. A group can have multiple drivers when their outputs converge on the same driven graph.
- Browse BPHHB and BPHYSSB files as indexed driver groups rather than one indivisible configuration.
- View each group's motion-input bones and affected bones in the right pane.
- Double-click a group, press
Enter, or use Editor to open the existing bone editor scoped to that group. - Open a same-format donor and merge one selected driver group. PhysicsTool remaps bone references, curves, outputs, poses, and native table indices into the target graph.
- Use Create Support on an affected bone to clone its known-good driven setup onto a new or existing target bone name. This retains the current driver relationship instead of creating an empty, disconnected record.
- Edit supported bone names and base transforms, duplicate records, and reorder records.
- Use Mirror Group to reflect every input and affected base pose in the selected driver group across X, including its aim/up directions, and swap recognized left/right name tokens.
- Convert BPHHB and BPHYSSB in either direction while preserving the graph structure represented by both formats.
Driver-group merging is currently same-format: BPHHB into BPHHB or BPHYSSB into BPHYSSB. Convert a donor first when moving a group between games.
- Use Load FBX in any direct editor to place a visual-only model behind cloth, skeleton, collider, ragdoll, or support/helper-bone data.
- The loaded model remains available while switching physics tabs and driver groups.
- Autodesk FBX SDK bakes node and geometric transforms into the displayed geometry, converts the file's declared units to meters, and normalizes its axis system for the Havok view.
- Albedo, SPM, normal, and ambient-occlusion textures can come from embedded FBX media or external image files. For stale absolute paths, PhysicsTool also looks for the same texture filename beside the FBX and in its subfolders.
- Meshes without a readable texture use a neutral checker material and still load normally.
- Model controls visibility, textures, wireframe display, opacity, X mirroring, uniform scale, XYZ offset, and XYZ rotation.
- Materials edits each mesh independently. Every texture slot can use its own FBX UV set; shader family, SPM metal and smoothness channels, map strengths, AO, normal strength, auxiliary maps, and tint can also be adjusted. The preview decodes color and packed material maps in the same color spaces used by the reference Blender shaders and detects hard alpha cutouts automatically.
- Import .anim loads a Maya ASCII
.animfile into memory for visual playback on the FBX skeleton. Play/Pause loops the source frame range at its declared frame rate, and Reset Pose restores the original FBX pose. Animation remains visual-only. - In a support/helper-bone driver-group editor, the preview bones snap to the animated FBX skeleton when every driver and affected bone in that group can be matched by name. Partial matches are rejected so the graph cannot be shown in a misleading half-snapped pose.
- Eye materials use the packaged glint overlay by default. Materials can disable it or adjust its strength. Eye tint and sketch-line resources are shipped beside the Release executable for future/custom material layouts.
- Legacy neighboring
<model>.materials.jsonlayouts and older per-model presets are migrated automatically. Save Preset now stores every model profile in one shared%LocalAppData%\PhysicsTool\presets.jsondatabase; matching mesh and texture names load automatically. - The FBX and animation are session-only reference data. They are never written into HKCL, BPHCL, HKRG, BPHHB, or BPHYSSB files.
- Inspect the full reference-pose skeleton and the smaller ragdoll skeleton separately.
- Edit supported model bones, ragdoll bones, and rigid-body capsule transforms/radii in the viewport.
- Bind a selected bone or rigid body to the position of another supported bone without changing its ownership mapping.
- Inspect and edit supported ragdoll and hinge constraints.
- Preview the ragdoll simulation without modifying the saved pose.
The Convert button on a BPHCL file creates one new Wii U HKCL document containing every BPHCL cloth unit. It does not need an open HKCL donor or template. This path has been tested against matched vanilla files and custom in-game conversions, but unusual layouts should still be verified in-game.
The conversion-scale dialog is important:
- The selected scale multiplies dynamic particle mass.
- Inverse mass is regenerated as
1 / mass; TotK's stored inverse mass is not copied directly. Constraint Scalestarts at the same suggested value and controls the soft coefficients verified in matched files: standard-link stiffness, bend-link bend/stretch stiffness, and bend-stiffness coefficients. It can be lowered independently for an experimental cloth. Hard stretch-link stiffness, rest lengths, particle positions, masks, and local ranges are preserved rather than scaled. PhysicsTool also applies a few narrow, verified BotW constraint profiles: the repeatedHair_2and muffler families use an 80% bend minimum and omit TotK's bend-stiffness set;Belt_Auses a 0.3 hard-stretch coefficient. Unknown cloths keep their source constraint layout.
Exact mass-scale suggestions come from matched vanilla BPHCL/HKCL profiles when available. Otherwise PhysicsTool uses a structural fallback based on the cloth's simulation layout. This is a useful starting point, not a guarantee: a per-cloth in-game test is still required.
The matched files currently show the same gravity (0, -9.81, 0) and damping 0.001 in both games. Conversion differences observed so far are cloth-specific mass and soft-constraint normalization, not a universal gravity conversion.
The Convert button on an HKCL file creates a complete BPHCL through PhysicsTool's native writer. It is donor-free and writes the Havok graph, blend data, constraints, colliders, AAMP registration, and reflected TYPE metadata required by TotK. Multi-blend cloths are supported. Reopen and test unmatched layouts in-game because the two games can still use cloth-specific tuning.
The Convert button translates helper/support-bone sidecars in either direction. BPHHB to BPHYSSB writes BotW's separate main-bone, support-bone, curve, and output tables. BPHYSSB to BPHHB rebuilds TotK's driver, driven, pose, curve, and output graph. Both exporters reparse the saved file before reporting success.
Both directions are structurally verified against matched files, and the reverse BPHYSSB to BPHHB path has been confirmed in-game. Retain the original and configure BotW output through the appropriate BPHYSICS support-bone reference.
- Use Open Physics to load the target file.
- Use Open Donor to load the source file.
- Select the donor cloth or driver group.
- Choose Merge Selected or press
Min merge mode. - Read the preflight message, save, reopen the result, then test it in-game.
For BPHCL, preflight reports whether a merge can reuse existing TYPE layouts or needs source-only layouts. Both are supported beta paths; unusual reflected types can still require compatibility work.
- Select a cloth and press
Enter, double-click it, or use Editor. - Choose the Particles, Bones, or Colliders tab. HKRG has Bones, Ragdoll Bones, and Rigid Bodies instead.
- Select items in the viewport or list, then use
G,R, orSto transform them. - Confirm a transform with left click. Cancel with right click or
Esc. - Save with
Ctrl+S; keep the original until the changed file is confirmed in-game.
Shortcuts intentionally do not override an active text cell. Finish or cancel text editing first when a shortcut appears not to respond.
| Shortcut | Action |
|---|---|
Enter |
Open the selected cloth or driver group in the direct editor. |
Ctrl+S |
Save to the current path. |
Ctrl+Shift+S |
Save As. |
M |
Merge the selected donor cloth or same-format driver group in merge mode. |
Delete |
Remove the selected cloth in merge mode. |
| Right click a cloth | Rename or duplicate the selected cloth. |
| Shortcut / control | Action |
|---|---|
Ctrl+Z |
Undo the latest editor change. |
Ctrl+Shift+Z |
Redo the latest editor change. |
Ctrl+C |
Copy the selected editable HKCL item. |
Ctrl+V |
Paste the copied item in the active HKCL editor tab. |
Delete |
Delete the selected viewport item in direct-edit mode. A confirmation is shown. |
G |
Move the current selection. |
R |
Rotate the current selection. |
S |
Scale the current selection. Bone scaling changes bone length/position rather than the stored scale field. |
X, Y, Z during a transform |
Constrain movement, rotation, or scale to a world axis. |
Press X, Y, or Z twice during a bone/collider transform |
Use the selected bone's parent/bound local frame for that axis. |
Press S again while scaling a collider |
Scale its radius rather than its full shape. |
| Left click | Select an item or confirm an active transform. |
| Left-drag in empty viewport space | Box select. |
Shift + click |
Toggle an item in the selection. |
Shift + box select |
Add box contents to the selection. |
Ctrl + box select |
Remove box contents from the selection. |
| Middle mouse | Orbit the camera. |
Shift + middle mouse |
Pan the camera. |
| Mouse wheel | Zoom. |
Esc or right click during a transform |
Cancel the active transform. |
| Right click in the viewport | Mirror Global/Local, Copy, Paste, Paste X-Flipped, and Delete Selected. |
F |
Link exactly two or three selected HKCL particles. |
Space |
Run or stop HKCL preview simulation when the viewport has focus. |
| Load FBX | Load a session-only visual reference model into the active viewport. |
| Import .anim | Load a Maya ASCII .anim into memory for playback on the visual FBX. |
| Play/Pause | Start or pause the imported visual animation. |
| Reset Pose | Restore the original FBX pose without unloading the imported animation. |
| Clear Model | Remove the visual reference without changing physics data. |
| Model | Align the reference model and adjust texture, opacity, mirror, and wireframe display. |
| Materials | Assign per-texture UV sets and tune the visual material or save a reusable preset. |
The axis widget in the top-right corner of the viewport changes camera direction; its reset control restores the default camera framing.
Run Simulation is an editor-only approximation of HKCL cloth behavior. It is useful for checking particle relationships, wind, collisions, and bone-following visually, but it is not Nintendo's Havok runtime and does not change the loaded file.
- Wind toggles preview wind without stopping the preview.
- Options exposes wind direction, strength, gustiness, gravity scale, playback speed, and solver iterations.
- Leaving wind direction unselected enables a changing random breeze; selecting the active direction again returns it to random.
- Stopping the preview restores the loaded file pose.
- BPHCL merge, delete/compaction, direct editing, duplication, and conversion are working beta features. Keep original files and test every output in-game.
- BPHCL and HKCL use related Havok cloth concepts but do not share an identical binary layout or solver tuning. PhysicsTool keeps their native graphs and serializers separate.
- A successful open/save or reopen test does not prove a file works in-game.
- The preview simulation is not an authoritative replacement for Havok.
- JSON is retained as a diagnostic export, not as the primary authoring format.
- FBX textures appear only when the exporter embedded the image data or the referenced external image can be found. An FBX can contain material paths without containing the image bytes.
Requires the .NET 9 SDK.
dotnet build -c ReleaseRun:
PhysicsTool\bin\Release\PhysicsTool.exe
In Visual Studio, open PhysicsTool.sln and press F5.
PhysicsTool/
Editor/ Viewport, preview simulation, and editor-facing models
Formats/Bphcl/ Native BPHCL reader, writer, merge, compaction, TYPE, and AAMP code
Formats/Bphhb/ Native BPHHB helper-bone support
Formats/Bphyssb/ Native BPHYSSB support and BPHHB/BPHYSSB conversion
Formats/Bphysics/ BotW BPHYSICS sidecar export and runtime-profile catalog
Formats/Hkcl/ HKCL/HKRG reader, writer, conversion, and authoring support
Formats/Hkrg/ HKRG ragdoll editor support
UI/ Windows Forms interface and conversion dialogs
The checked-in PhysicsToolFbxBridge.dll is a self-contained x64 bridge built with Autodesk FBX SDK. To rebuild it, install Autodesk FBX SDK 2020.3.7 or newer for Windows and run:
PhysicsTool\NativeFbx\build-native.ps1 -Configuration ReleaseThe script uses the newest installed SDK by default. Pass -FbxSdkRoot to select a different compatible installation.
- banan039 / totkbits for foundational BPHCL reverse-engineering work.
- VelouriasMoon / HKCLTool for the original HKCLTool project this work grew from.
- HKX2 and Json.NET for supporting libraries.
- Autodesk FBX SDK for native FBX geometry, material, UV-set, texture, transform, and triangulation support.