A modern, web-based toolkit for inspecting and editing MU Online client files. Built with TypeScript, Three.js, and Vite, it provides interactive 3D viewers for .bmd models and terrain, alongside data browsers for items, skills, GFx UI, and sound assets.
Version 1.1.0 | License ISC
- Model Viewer: Load and inspect
.bmd3D models with drag-and-drop support. Browse entire folders of models with auto-generated thumbnails. Automatic texture search in Electron. - Character Viewer: Preview character models with customizable equipment (helm, armor, pants, gloves, boots, left/right hand weapons, wings), item effects (level +0 to +15, Excellent, Ancient), 15+ character classes across all tiers, animation control, and presets.
- World/Terrain Viewer: Load and explore MU Online world terrain with interactive camera, object selection with transform gizmo (move/rotate), object isolation, object overrides (persisted to JSON), minimap navigation, bookmarks, and OBJ export.
- Items Browser: Parse and explore
items.bmdfiles with equipment stats, search, and item kind filtering (Weapon, Armor, Potion, Jewel). - Skills Browser: Parse and explore
skill.bmdfiles with skill statistics, search, and type filtering (Attack, Buff, De-Buff, Friendly). - ATT Inspector: Inspect terrain attribute data (
.attfiles) with interactive map canvas, flag layer toggles, and per-tile tooltips. - OZJ/OZT Browser: Browse
.ozjand.ozttexture files with thumbnail grid, full-size preview, navigation, search, and format filtering. - GFx Browser: Load and render
.ozg,.gfx,.swfUI files on a zoomable/pannable stage canvas. View embedded bitmaps in a gallery, browse SWF tag tables, and load.ozdtexture galleries with DDS decoding. - Sound Browser: Browse and play
.ogg,.wav,.mp3sound files from a folder with playback controls, volume slider, and filename search.
- Texture Support: Apply various texture formats including
.jpg,.png,.tga,.ozj,.oztwith automatic blend-mode detection. - Renderer Backend: Choose between Auto (prefer WebGPU), WebGPU, or WebGL renderer per viewer. Automatic fallback when WebGPU is unavailable.
- Animation Playback: View all embedded animations with adjustable playback speed and enable/disable toggle.
- External Animations: Load bone animations from a different
.bmdfile. - Attachment System: Attach a secondary
.bmdmodel to any bone of the main model with bone selection via dropdown or slider. - Frame Lock: Lock the animation on a specific frame with "Set Current" convenience button.
- Viewport Helpers: Toggle wireframe, skeleton, bounding box, axes, and vertex normals visibility.
- Scene Controls: Adjust model scale, scene brightness, and background color. Auto-rotate toggle.
- Mesh Blending: Fine-tune texture blending mode and alpha threshold per mesh when automatic material detection needs correction.
- GIF Export: Export model animations as
.gifwith configurable resolution, frame delay, and smoothness multiplier. - GLB Export: Export models and animations to
.glbformat (standard or AI-baked with skinned mesh pre-bake). - Texture Export: Export all applied textures to
.pngformat. - Model Folder Browser: Load a folder of
.bmdfiles and browse them with auto-generated 3D thumbnail previews and lazy rendering. - Diagnostics Panel: View real-time info about the loaded model - mesh vertices, bone count, animation clips, key count, current frame, and FPS.
- Full equipment slot system (helm, armor, pants, gloves, boots, left/right hand, wings).
- Item level (+0 to +15) with Excellent and Ancient modifier flags.
- Excellent glow intensity control.
- Character presets (save and restore class, gear, and render state).
- Per-viewer renderer backend, viewport helpers, and GIF export.
- Load entire
Datafolder and select world by index. - Minimap with camera position tracking.
- Jump-to-coordinate navigation.
- Terrain object selection with focus, isolate, and "Open in Model Viewer" actions.
- Object transform gizmo (translate/rotate) with apply/reset.
- Object editor panel with position, scale, and per-type material overrides.
- ATT attribute overlay with TWFlags visualization.
- Bookmarks (save/restore camera positions).
- Export world geometry as OBJ.
- Terrain object overrides persisted to
terrain-object-overrides.json. - Wireframe, animations, sun light, and object draw-distance controls.
- Presentation Mode: Hide all UI for clean model viewing and screenshots.
- Panel Resizing: Drag to resize sidebar and log bar; reset layout button.
- Crypto Engine: Built-in decryptors for encrypted game assets (CAST5, IDEA, GOST, LEA256, MARS, RC5, RC6, TEA, ThreeWay, modulus).
- Log Bar: Real-time log output with per-viewer status indicators.
The desktop version provides additional capabilities not available in the browser:
- Native file dialogs for opening files and directories.
- Automatic texture search in nearby folders when loading a model.
- Direct file system access for loading world data and terrain objects.
- Terrain object overrides read/write to user data directory.
- Cross-platform builds: Windows (NSIS installer, x64), Linux (AppImage, x64), macOS (DMG).
- Language: TypeScript (strict mode)
- 3D Engine: Three.js (with WebGPU + WebGL renderer support)
- Build: Vite with code-splitting (Rolldown)
- Desktop: Electron with electron-builder
- Test: Jest with ts-jest
- CI/CD: GitHub Actions - auto-deploy to GitHub Pages, build Electron installers on push to main
- Clone the repository or download the source code.
- Open a terminal in the project directory.
- Install the required dependencies:
npm installWeb (browser):
npm run devOpens at http://localhost:5173 with hot-reloading.
Electron (desktop):
npm run electronStarts Vite dev server and launches the Electron shell once ready.
Web:
npm run buildOutput goes to dist/. Set VITE_BASE_PATH for custom base paths (e.g. GitHub Pages).
Electron desktop app:
npm run electron:buildGenerates installers in release/. Supports --win and --linux flags.
npm testJest suite with ts-jest, running in Node environment. Tests cover loaders, parsers, terrain utilities, crypto ciphers, and UI components.
The application uses a tabbed interface with 9 workspaces:
| Tab | Purpose |
|---|---|
| Model | View .bmd 3D models with textures, animations, and attachments |
| Character | Preview characters with customizable class, equipment, and effects |
| World | Explore terrain with interactive camera and object editing |
| ATT | Analyze terrain attribute files with color-coded TWFlags map |
| OZJ | Browse .ozj/.ozt texture files with grid and preview |
| Items | Search and inspect item definitions from items.bmd |
| Skills | Search and inspect skill definitions from skill.bmd |
| GFx | Render .ozg/.gfx/.swf UI files and browse .ozd textures |
| Sound | Browse and play .ogg/.wav/.mp3 sound files |
- Load a Model: Drag and drop a
.bmdfile onto the drop zone, or click to open the file selector. In Electron, native file dialog is used automatically. - Browse a Folder: Drop or select a folder of
.bmdfiles to browse models with thumbnail previews. - Apply Textures: Once the model is loaded, the viewer shows required textures. Drop the corresponding texture files (
.jpg,.tga,.ozj,.ozt). In Electron, textures are searched automatically. - Control Animations: Use the animation buttons to play different clips, adjust speed, enable/disable, or lock a specific frame.
- Attach Models: Drop an attachment
.bmdand select a bone to attach it to. - Adjust Viewport: Toggle wireframe, skeleton, bounding box, axes, normals; change background color and brightness; switch renderer backend.
- Export: Use export buttons for GLB, AI GLB (baked), textures (PNG), or GIF.
- Load Game Data: Drop the game
Datafolder to populate class and equipment lists. - Choose a Class: Select a character class from the dropdown (15+ classes across all tiers).
- Equip Items: Set helm, armor, pants, gloves, boots, weapons, and wings.
- Adjust Item Effects: Set item level (+0 to +15), toggle Excellent/Ancient, adjust glow intensity.
- Save Presets: Save and restore the current configuration.
- Export: Record a GIF of the character.
- Load Game Data: Drop the
Datafolder and select a world to load. - Navigate: Use the minimap or jump to coordinates. Save bookmarks for quick access.
- Inspect ATT: Toggle ATT overlay to visualize terrain flags; use the ATT Inspector tab for detailed per-tile lookup.
- Select Objects: Click objects in the scene; use the gizmo to move or rotate them. Right-click for the object editor panel.
- Edit Objects: Adjust position, scale, and material overrides. Settings persist to
terrain-object-overrides.json. - Export: Export world geometry as OBJ.
- Load Files: Drag and drop
items.bmd,skill.bmd,.att,.ozj/.ozt,.ozg/.gfx/.swf/.ozd, or sound folders into the respective browser tabs. - Search: Use the search bar to find specific entries by name, index, or ID.
- Filter: Use type/kind/format filters to narrow down results.
- View Details: Click any row to see detailed information in the detail panel.
- Terrain Bookmarks: Save camera positions in the World viewer for quick navigation.
- Character Presets: Save and manage character class, equipment, and render state configurations.
src/
main.ts # Model viewer app entry point
character-test-scene.ts # Character viewer scene
terrain-scene.ts # World/terrain viewer scene
bmd-loader.ts # BMD format parser
ozj-loader.ts # OZJ texture decoder
app/ # Explorer shell and state management
att-inspector/ # ATT file inspector
bmd-writer/ # BMD writer (placeholder)
control-menu/ # Sidebar control menu system
crypto/ # Cipher implementations (CAST5, IDEA, GOST, etc.)
explorer-state/ # Persistent state store
gfx-browser/ # GFx/OZG/SWF/OZD browser
helpers/ # Three.js helper utilities
item-bmd-browser/ # Items BMD data browser
ozj-browser/ # OZJ/OZT texture browser
rendering/ # WebGPU/WebGL renderer backend abstraction
skill-bmd-browser/ # Skills BMD data browser
sound-browser/ # Sound file browser and player
terrain/ # Terrain loaders, mesh, objects, culling, texturing
utils/ # File validation, texture matching, blend heuristics, etc.
styles/ # CSS stylesheets
electron/
main.js # Electron main process
preload.js # Preload script for IPC bridge
tests/ # Jest test suite
docs/ # Documentation and plans
GitHub Actions workflow (.github/workflows/deploy.yml) runs on pushes to main:
- Web build: Builds Vite app and deploys to GitHub Pages (under
/app/path). - Linux build: Creates an AppImage artifact.
- Windows build: Creates an NSIS installer artifact.
- Release: Uploads desktop builds to a GitHub Release with auto-generated tag.