Repository navigation
Releases: GuillermoOM/HODEditorJS
Releases · GuillermoOM/HODEditorJS
Release list
Version 1.2.11
- Animation duration is now editable after creation: click the duration badge in the Animations tab (Enter/blur commits, Esc cancels, min 0.1s). Shortening past placed keyframes asks for confirmation and clamps them to the new duration; lengthening leaves keyframes untouched; invalid input is rejected
Version 1.2.10
- DAE import now parses dock paths (DOCK/SEG nodes) instead of dropping them and leaking them into the joint hierarchy
- Fixed in-game access violation on DAE-sourced files (game-tested): file version is now 512 as HODOR writes (was 1400), mesh/texture pool streams are always XPress-compressed, COLD collision chunk matches HODOR's exact layout, and navlight style comes from _Type (was _Flags, unknown styles crashed the engine at match start)
- New validate_hod structural validator binary: re-walks raw HOD chunks without the loader's silent repairs and reports engine-unsafe constructs before in-game testing
Version 1.2.9
- Correct per-shader texture slots from SHADERS.MAP ground truth: ship/matte/badge/bay keep 4 slots (REFL is a channel packed inside the glow texture, not a texture; SPEC on ship is likewise a glow channel), shipglow/badgeglow restored to 5 slots in real order (diffuse, spec, glow, team, normal) so texture-group changes no longer silently drop SPEC/TEAM/NORM on save, badge restored to 4 slots
- Thruster off-state textures keep canonical HOD names ($diffuseOff/$glowOff); removed the invented $specular param name
- Background shader families (bg_planet/planetmelt/moon/cosmic, fx, dust, nis) now expose their real slots; thruster DIFX/GLOX and bg CLD1/WARP/PROG/MASK suffixes recognized
- Viewport preview keeps thruster ON-state textures visible and no longer misroutes SPEC maps
- If a shipglow/badge material lost SPEC/TEAM/NORM bindings in a previously saved file, reload the original HOD and re-apply the texture group
v1.2.8 - HOD Shader Alias Resolution
HOD Shader Alias Resolution
- Shader discovery now reads
hod_alias.manifestandmod_alias.manifest, so HOD shader aliases such asmatteScissorresolve to their backing programs. - Alias names now appear in the material shader selector, and aliases reuse the backing program's texture slots.
- The Inspector keeps shader names already assigned to loaded materials selectable while preserving their original casing.
- Matte fallback texture slots now include Diffuse, Glow, Team, and Normal maps.
Verification
npm run buildpassed.cargo test --manifest-path src-tauri/Cargo.toml --libpassed (3/3).- HWRM probe resolved
mattescissorwithDiff,Glow,Team,Norm,Env0,Env1, andShadow. - User confirmed
testing/meg_bentus_ruined.hodworks correctly in the editor.
No parser or serialization changes, so verify_lossless was not applicable.
v1.2.7 - Mesh MTL Import, Add Node & Engine Nozzle Fixes
Mesh OBJ imports now bring their materials with them, and hierarchy editing fixes cover auto-named node types and engine nozzles.
Mesh OBJ/MTL import
usemtlgroups in imported OBJ files are preserved as separate mesh parts. Existing HOD materials are reused by name; otherwise a placeholder material is created.- Added Import MTL Materials to the mesh inspector. It matches
newmtlnames to HOD materials and resolves eachmap_Kdpath by filename against textures already loaded in the HOD, ignoring folders, extensions,_DIFF, and compression suffixes. - MTL import never reads image files from disk. If no loaded texture matches, the existing material texture assignment is kept and the missing texture is listed in the import report.
Hierarchy fixes
- Add Node is now enabled for auto-named node types (
collision,engine_nozzle, and the repair/capture/salvage point templates), which hide the Node Name field. - Deleting an engine nozzle row now removes its backing joint and the attached burn, glow, shape, and nav-light data instead of leaving the model unchanged.
v1.2.6 - HOD 2.0 Large POOL Load Fix
Fixes a HOD 2.0 load failure for files with large compressed texture pools.
- Fixed
IFF boundary read error: failed to fill whole bufferwhen loading HOD 2.0 files whosePOOLchunk exceeds 16 MB (e.g.bst_mothership.hod, ~32 MBPOOL). Chunk size endianness is now resolved by testing whether the big-endian size fits the bytes remaining in the stream, falling back to little-endian only for the documentedNRML BMSHvariant, instead of a fixed 16 MB heuristic that could flip valid big-endian sizes. - Verified with
cargo test --lib(32 tests),verify_lossless, and a 505-file HOD corpus sweep: zero chunk-read errors.bst_mothership.hodnow loads with all 39 meshes, 193 joints, 53 textures, materials, navlights, markers, glows, dockpaths, and its collision mesh.
Manual test: testing/bst_mothership/bst_mothership.hod loads correctly in the editor (textures, meshes, collision, and nodes all verified).
v1.2.5 - HOD 1.0 Classic Parsing Fixes
What's Changed
Classic HW2 (HOD 1.0) Parsing Fixes
- Generic STAT Shader Parameters: Materials in classic HW2 HODs now parse arbitrary
param_type / value_size / valuerecords with optional names. Texture slots are bound from everyparam_type == 5record, and material parameters round-trip through save. This fixes crashes on files likebullet_splash.hodand dropped material maps onasteroid4.hod. - Texture Name Collision Fix: Layer selectors like
fth_export.psd[1]now keep their[N]suffix (fth_export[1]DXT5) instead of colliding with the base name. Previously the DIFF and GLOW maps of a material could collapse into one texture slot, making models render blue with the glow map bound as the diffuse.
Developer Experience
- Parser modularized: the monolithic
hod.rsis now 16 focused modules (types,math,texture_codec,animation,model_methods,engine_nozzles,parse,serialize, ...) with the public API unchanged. Parser unit tests grew from 14 to 28. - Machine-local configuration:
verify_losslessnow resolves its fixture paths from an untracked local-environment file (docs/local-environment.mdexplains the convention), so a fresh clone works withcargo testout of the box. - Repository cleanup: one-off scratch scripts removed, testing fixtures documented instead of tracked, and docs updated for generic (non-machine-specific) development.
v1.2.4 - Docking Path Bugfix
What's Changed
- Docking Path Creation Fix: Fixed failure when saving a HOD with a docking path (#1)
v1.2.3 - Viewport Gizmo Dragging and Bugfixes
What's Changed
- Viewport Gizmo Dragging: Added the ability to seamlessly move and rotate joints directly in the 3D viewport using a visual gizmo.
- Animations Gizmo Dragging: Dragging of keyframed joints in the viewport for improved animation editing experience.
- New Weapon Assembly: Improved weapon assembly following the weapon structure standards for HWRM. Following this structure: Position -> [Direction, Latitude -> [Muzzle], Rest]
- Texture Group inspector fixes: Fixed some small bugs on changing types, now will properly load all existing types from shaders in the directory path linked in config.
- And other minor visual adjustments...
Current Issues
- Saving HOD from Imported DAE: Importing a DAE and saving directly as HOD will make a broken HOD file that will crash the game. I recommend importing the DAE file and exporting the nodes as JSON, exporting OBJ and Materials then creating a new HOD with everything imported back (not DAE).
v1.2.2 - Dynamic Shader Parameters
Features and Fixes
- Added dynamic parsing of shader parameters from HWRM pipelines (.prog / .fx files).
- Now you can link the shader directory from HWRM and your mod for the editor to dynamically read all available shaders to use on materials, as well as all texture mapping types.
- The Texture Group assignments dynamically inject expected textures (like _SCORCHED, _ENV0, _MASK) seamlessly.
- Fixed the shader path directory selection.