Indoor Map Builder User Guide - OpenKotOR/PyKotor GitHub Wiki
The Indoor Map Builder is a visual editor for creating indoor modules (areas) for Knights of the Old Republic. It allows you to place room components, connect them with doors, and build complete playable modules without manually editing game files.
- Launch Holocron Toolset
- Navigate to Tools -> Indoor Map Builder
- Select your game installation when prompted
- Click file -> New (or press
Ctrl+N) - Configure your module settings:
-
Module ID: The warp code used in-game (e.g.,
test01) - Name: Display name for the module
- Lighting: Ambient lighting color
- Skybox: Optional skybox model
-
Module ID: The warp code used in-game (e.g.,
- Click OK to start building
- Click file -> Open (or press
Ctrl+O) - Select a
.indoorfile - The map will load with all rooms and connections
- Preview: Shows a preview image of the selected component
- Kits: Traditional kit-based components (deprecated, use Modules instead)
- Modules: Components extracted from game modules (recommended)
- Options: Grid and snap settings
- walkmesh Painter: material painting tools
The bottom status bar now mirrors the Module Designer style and updates live as you work:
- Coords: World X/Y under the cursor
- Hover: Room under the cursor (if any)
- Selected: Hook details when a hook is selected, otherwise the count of selected rooms
- Keys/Buttons: Currently held keyboard modifiers and mouse buttons
- Status: Paint mode/material, colorization, and active snap modes (grid/hook)
The central area where you place and arrange rooms. Use mouse and keyboard controls to navigate and edit.
-
From Modules (Recommended):
- Expand the Modules section
- Select a module from the dropdown
- Choose a component from the list
- Click on the canvas to place it
-
From Kits (Legacy):
- Expand the Kits section
- Select a kit from the dropdown
- Choose a component from the list
- Click on the canvas to place it
- Click and drag a room to move it
- Shift + Click to select multiple rooms
- Ctrl + Drag to pan the camera instead
- Scroll wheel (without Ctrl) to rotate the selected component
- Right-click -> Rotate -> Choose angle (90°, 180°, 270°)
- R key to rotate selected rooms by the rotation snap amount
- Right-click -> Flip -> Flip Horizontal or Flip Vertical
- F key to quickly flip selected rooms horizontally
Rooms automatically connect when their hooks (red/green circles) are close together:
- Red hooks: Unconnected
- Green hooks: Connected to another room
- Blue hooks: Currently selected
Hooks snap together when you move rooms near each other (if Snap to Hooks is enabled).
- Click a room to select it
- Shift + Click to add to selection
- Ctrl + A to select all rooms
- Escape to deselect all
- double-click a room to select all connected rooms
- Select room(s) and press Delete
- Or right-click -> Delete
- Select room(s) and press Ctrl+D
- Or right-click -> Duplicate
You can combine 2 or more rooms into a single merged room:
- Select multiple rooms (Shift+Click or Ctrl+A)
- Right-click on the selection -> Merge Rooms
- The selected rooms will be replaced with a single new room at their average position
What happens when you merge:
- Walkmeshes combined: All room walkmeshes are merged into a single walkmesh (collision + pathfinding)
- Internal hooks removed: Hooks that connected the merged rooms to each other are removed (no longer needed)
- External hooks preserved: Hooks that connected to other rooms outside the merge are kept
- Visual model: The first room's MDL/MDX model is used for rendering. The merged walkmesh (BWM) correctly combines all collision geometry from all rooms.
- Undo/Redo supported: You can undo/redo the merge operation without data loss
When to use merging:
- Simplify complex layouts by combining multiple small rooms into one large room
- Reduce room count for performance (fewer rooms = less overhead)
- Create custom room shapes not available in existing kits
Technical note: Merged rooms are stored as "embedded components" in the .indoor file, which means they persist correctly when you save and reload your map.
- Middle Mouse Button + Drag: Pan camera
- Ctrl + Left Mouse Button + Drag: Pan camera
- Ctrl + Right Mouse Button + Drag: Rotate camera
- Ctrl + Scroll Wheel: Zoom in/out
- Home: Reset view to origin
- F: Center view on selected rooms
- Toggle: Press G or check Snap to Grid (G)
- Grid size: Adjust in Options panel
- Snaps room positions to grid lines
- Toggle: Press H or check Snap to Hooks (H)
- Automatically aligns room hooks when placing or moving
- Soft snapping: Hooks disconnect if you drag far enough away
- Set in Options -> rotation Snap
- Default: 15°
- Scroll wheel rotation uses this increment
walkmesh Painting
The walkmesh painter allows you to change surface materials (walkable/non-walkable areas) on room walkmeshes.
- Expand walkmesh Painter section
- Check Enable Painting (P) (or press P)
- Select a material from the list
Painting materials
- Shift + Left-click and drag on walkmesh faces to paint (prevents accidental dragging/selection)
- materials are colorized by default (toggle with Colorize materials)
- Each material has a distinct color for easy identification
Resetting walkmesh
- Select room(s) with modified walkmeshes
- Click Reset Selected to revert to original materials
material types
- Walkable: Dirt, Grass, Stone, Wood, Water, Carpet, Metal, etc.
- Non-walkable: Obscuring, Non-walk, Transparent, Lava, Bottomless Pit, etc.
- Special: Door, Trigger
The green crosshair indicates where players spawn when entering the module.
- Right-click -> Set Warp Point Here
- Click and drag the warp point to move it
- Grid snap applies if enabled
Hooks are connection points between rooms. You can edit them:
- Right-click on hook -> Select Hook to select it
- Right-click on hook -> Delete Hook to remove it
- Right-click on hook -> Duplicate Hook to copy it
- Right-click on empty space -> Add Hook Here to create a new hook
- Click and drag a selected hook to move it
- Delete / Ctrl+D act on the selected hook if one is selected; otherwise they act on selected rooms
- Click and drag on empty space to create a selection box
- All rooms within the box will be selected
- Shift + Drag to add to existing selection
| Shortcut | Action |
|---|---|
Ctrl+N |
New map |
Ctrl+O |
Open map |
Ctrl+S |
Save map |
Ctrl+Shift+S |
Save as |
Ctrl+B |
Build module |
Ctrl+Z |
Undo |
Ctrl+Y |
Redo |
Ctrl+X |
Cut |
Ctrl+C |
Copy |
Ctrl+V |
Paste |
Ctrl+D |
Duplicate |
Ctrl+A |
Select all |
Escape |
Deselect all |
Delete |
Delete selected |
G |
Toggle grid snap |
H |
Toggle hook snap |
P |
Toggle paint mode |
R |
Rotate selected |
F |
Flip selected / Center on selection |
Home |
Reset view |
F1 |
Help |
Once your map is complete:
- Click file -> Build Module (or press
Ctrl+B) - Wait for the build process to complete
- The module will be saved to your installation's modules folder
- You can warp to it in-game using:
warp <module_id>
The build process creates:
-
Module file (
.mod): Contains all resources needed for the module, for example: -
layout files (
.lyt): Room positions and door connections -
visibility files (
.vis): Room visibility relationships -
area files (
.are): area properties and settings -
Game Info file (
.git): Doors and placeables -
module info file (
.ifo): Module metadata
-
Use Modules instead of Kits: The Modules system extracts components directly from game modules, ensuring compatibility and accuracy.
-
Snap to Hooks: Keep this enabled when connecting rooms to ensure proper door placement.
-
Check Connections: Green hooks indicate successful connections. Red hooks need to be connected.
-
Test Walkability: Use the walkmesh painter to mark non-walkable areas (lava, pits, etc.) before building.
-
Organize Your Layout: Use the grid to keep rooms aligned and organized.
-
Save Frequently: The editor supports undo/redo, but saving regularly prevents data loss.
-
Test in Game: Always test your module in-game after building to verify connections and walkability.
- Ensure hooks are close together (within ~1.5 units)
- Check that Snap to Hooks is enabled
- Verify both rooms have compatible door types
If the player cannot move between rooms, the issue is usually roomlinks / transition IDs on walkmesh edges, LYT room order, or VIS, not the 3D hook placement alone. See:
- If a module component is missing, the module may be corrupted or incomplete
- Try using a different module or component
- Check the error messages in the status bar
- Ensure all rooms have valid walkmeshes
- Check that module ID is valid (alphanumeric, no spaces)
- Verify installation path is correct
- Large maps with many rooms may be slow
- Disable material colorization for better performance
- Close other applications to free up memory
- Indoor Map Builder - Implementation Guide - Technical details for developers
- LYT File Format - layout files structure
- BWM File Format - walkmesh file structure