New Features
Undockable Rollouts
All tool panels in the NeoDex Manager can now be undocked into standalone floating windows and docked back. This allows working with multiple tools side by side or on a second monitor. An Undock/Dock button has been added to every rollout. Closing the window or clicking Dock returns the panel to its original position. Fully localized in all six languages.
MPQ Archive Support (Classic v800)
NeoDex can now read textures and models directly from Warcraft III MPQ archives. Supported formats include .mpq, .w3mod, .w3x, .w3m, and .mix. Full encryption support is included. The C# helper DLL is auto-compiled on first use with no external dependencies. Compatible with 3ds Max 2022–2026.
MPQ Texture Search
When textures are not found locally, NeoDex can now automatically search MPQ archives as a fallback. Search order: local folder → subfolders → MPQ archives → fallback path. BLP textures are extracted from MPQ and converted to TGA automatically. Results are cached to avoid redundant extraction. Can be enabled or disabled via a checkbox in the Classic importer rollout.
MPQ Model Browser
Browse and search all MDX models inside MPQ archives with live filtering across 2,000+ models. Double-click or use the import button to extract and import directly. Accessible via the "Browse MPQ" button in the importer load dialog.
Settings — MPQ Directory
New "MPQ Archives (Classic v800)" section in NeoDex Settings. Browse for the Warcraft III game data folder with a status indicator showing whether MPQ files were found. The path is saved persistently across sessions.
CASC Archive Support (Reforged v1200)
NeoDex can now import models directly from Warcraft III Reforged game files. No more manual extraction with external tools — browse, select, import.
CASC Model Browser
Shows all ~7,300 MDX models from the Reforged game archive. HD and SD variants are clearly labeled, with search and All/SD/HD filtering. Initializes in under one second.
CASC Texture Handling
DDS textures (Reforged HD) are extracted and applied automatically. BLP textures (Classic SD) are converted to TGA as before. When the CASC texture checkbox is enabled, missing textures are searched in the game archive.
Settings — CASC Directory
New "CASC Archives (Reforged v1200)" section in NeoDex Settings. Select the Warcraft III Reforged installation folder. Path is saved and remembered between sessions.
Improved Importer Load Dialog
Redesigned layout with labeled sections, "Custom import" and "Import from game files" separators, and full-width buttons for better usability.
Playback Rate Spinner for IFL Textures
The Playback Rate of IFL textures was previously only set internally and never visible in the plugin UI. A new spinner has been added to the SEQ Anim(Many) panel that displays and allows editing the current playback rate in real time. Global Sequences update automatically when the value changes.
W Offset Parameter (3rd UV Component)
Added a new animatable W Offset parameter to the Warcraft 3 material plugin with a UI spinner. The third UV translation component is now preserved through import and export and can be edited in the Material Editor and Curve Editor.
Bug Fixes
Animation & Export
- Link Constraint export produces no keyframes — Bones with a Link Constraint following an animated target were exported with no animation. Dense sampling now always runs for Link Constrained bones.
- Reforged v1200 imports all bones as Helpers — Importing Reforged v1200 models classified every bone as a Helper. Now uses the node type flag from the MDX header instead.
- Animated Particle2 rotation export broken — Animated BlizzParticle2 objects with a rest rotation exported with wrong rotation or no rotation at all. The fix creates a temporary copy for re-sampling without modifying the original scene. Special handling for TCB controllers to avoid destroying interpolation.
- Texture rotation animation (W_Angle) broken — A 360° linear texture rotation exported as only ~6° of movement. Fixed a double degree-to-radian conversion and added automatic intermediate keys every 120° so full rotations export correctly.
- Biped rotation reference read at wrong time — The reference rotation for Biped bones was read at the current slider position instead of frame 0. When the slider was not at frame 0, all Biped bone rotations exported as identity quaternions, losing all orientation data.
- Biped position reference read at wrong time — The reference position for the root bone was read at the current slider time, causing position offsets depending on slider position at export time.
- Biped IK solutions lost between keyframes — Rotation was only sampled at the bone's own keyframe times. Biped IK-solved rotations between keys were not captured, causing feet to slide through the floor. Now uses smart-sampling from the entire parent chain plus intermediate samples every 2 frames.
- Biped pivot read at wrong time — The pivot point for Biped bones was read at the current slider time instead of the rest position at frame 0, shifting all bone positions.
- Hybrid bone position axes swapped — The correction quaternion double-applied the parent's rotation for Biped parents, causing axes to swap (e.g. forward motion became sideways motion).
- Hybrid bone rotation ignores Biped parent T-pose offset — Rotation was computed relative to the Biped parent's local coordinate system including the T-pose orientation, causing a ~90° offset on cape and cloth bones.
- Biped with Dummy/Bone parent — 90° rotation export bug — Models with a Biped parented under a rotated Dummy or Bone were exported rotated 90° in the wrong direction. Added dedicated handling for this case.
- Biped with Dummy/Bone parent — position axis mismatch — Position animation was exported on the wrong axis (e.g. moving up resulted in moving backward).
- Biped with Dummy/Bone parent — rotation axis mismatch — Rotation was mirrored (e.g. turning left resulted in turning right).
- Link Constraint objects — wrong pivot position — Objects with a Link Constraint were exported displaced from the model because the local offset was used instead of the actual world position.
- Children of Link Constrained parents — wrong base rotation — Helpers, bones, dummies, and particles parented under a Link Constrained object were exported with incorrect base orientation.
- PE2 rotation Global Sequence fix — Particle Emitter 2 nodes with constant rotation on Global Sequences now export their rotation correctly. Previously the rotation was lost.
- PE2 rotation fix skip — The PE2 rotation fix no longer modifies constant rotation animations. Only actually animated rotations are processed.
- IFL texture playback speed — Fixed playback speed of IFL textures not being preserved when making them shorter or longer.
- Time conversion rounding fix — Fixed frame-to-millisecond conversion losing 1ms on certain values (e.g. 667ms became 666ms). All time conversions now round correctly.
Extents Calculation
- Zero extents on high precision settings — When Extents Precision was set to high values (8–10), the extent calculation could produce all-zero min/max values for short animation sequences. The internal step size became zero, causing the calculation loop to never execute. Added a safety clamp to ensure the step size is always at least 1.
- Extents Calculation type setting ignored — The "Animation Dependent / Global" radio button in the exporter had no effect. The wrong setting was being passed internally, so the exporter always used Animation Dependent regardless of the user's choice. Both options now work as intended.
Materials & Textures
- Additive transparency in viewport — Additive textures (glow effects on black background) were displayed as solid black or white surfaces in the viewport. Fixed opacity type, base colors, and tiling for correct transparent glow display. No impact on export.
- Additive/Modulate FilterMode fix — Corrected viewport opacity type mapping for Additive (now uses additive blending with self-illumination) and Modulate (now uses filter/multiply) filter modes.
- Team Color viewport display — Team Color was not showing correctly in the viewport. Now uses a Mix map with separate alpha copy for proper WC3 compositing. Mesh stays fully opaque.
- Team Color composite flatten — 2-layer Team Color + Texture composites are flattened to a single Warcraft 3 material on import for correct viewport display. Non-TC multi-layer materials still use the Composite Material path.
- Team Color export split — Flattened TC materials are split back into 2 layers on export for correct WC3 MDX structure. All layer fields are explicitly initialized to prevent errors.
- BLP Unicode path fix — BLP files in folders with Chinese, Russian, or other non-ASCII characters are now correctly converted. Files are copied to an ASCII-safe temp path before processing.
- Texture search improvements — Textures are now found more reliably. The original MDX relative path is tried first, subdirectories are searched recursively, and a faster file search is used.
- Texture wrap flag fix — Wrap flags (WrapWidth/WrapHeight) were incorrectly set to true on all textures during import. The material plugin handler was overwriting correct values with defaults. Wrap flags are now re-applied from the original MDX data after texture assignment. Also fixes texture deduplication creating duplicate entries for the same texture with different wrap flags.
- Material preview set to Box — After import, materials are now displayed as cubes in the Material Editor instead of spheres, which is more useful for Warcraft 3 materials with glow and particle effects.
Import & Export Pipeline
- Import crash on models with empty texture slots — The WC3 format uses a special value for material layers with no texture. This caused an array out-of-bounds crash during import. Invalid indices are now handled gracefully.
- Follow-up crash after empty texture slot fix — After the previous fix set invalid texture references to undefined, the scene rebuilder tried to read properties on undefined values. Layers with undefined textures are now skipped.
- Relinker bounds check — Added a safety check for out-of-range texture animation indices. Prevents crashes on malformed models and falls back to the first available entry with a warning.
- Batch BLP conversion — All BLP files in the model directory are now converted in parallel (up to 8 simultaneous processes) before import starts, significantly reducing import time.
- Global Sequence boundary key fix — Visibility and Layer Alpha animations on Global Sequences no longer get incorrect sequence boundary keys inserted during import. This fixes wrong Global Sequence durations appearing after export.
UI & Tools
- Sequence Manager crash when creating new sequence — The "New Sequence" dialog crashed when changing the start or end frame spinner. Replaced broken handlers with simple validation logic.
- Sequence ignore filter not working before opening Sequence Manager — Sequences marked as "ignored" were still exported if the Sequence Manager UI had not been opened at least once in the current session. The ignore list is now loaded automatically before export.
Rendering & Viewport
- Ribbon emitter mesh generation — The position tracking variable in ribbon mesh generation was never updated, causing the duplicate-position check to always pass. Stationary ribbons generated degenerate overlapping geometry instead of a clean mesh.
MDL Output
- MDL header writes wrong event count — The header wrote the collision shapes count as the events count. The actual events count and collision shapes count were never written. Both now write from their correct sources.
- MDL writer crash on Reforged v1200 models — A required property was used but never declared, causing a crash that produced 0-byte MDL output for Reforged models.