Level Editor - CheMiguel23/SMB3-Bank12 GitHub Wiki
Last updated: 2026-04-05
The Level Editor is the main workspace for building and editing SMB3 rooms. It consists of:
-
Level Tree- Allows you to see all levels in the project and open them. -
Canvas Toolbar- Canvas settings and preferences. -
Level Canvas- The main working space and representation of the currently selected level. -
Level Palette- Allows you to select entries to place on the canvas. -
Right Panel- Contains 4 tabs: level-wide settingsHeader, selected-entryInspector, room links /Junctions, and list of placedEntries.
๐ก Tip: Use Alt+1 for quick access to the editor!
Level Tree is a list of all rooms available in the project, including:
-
World-slot levels- Normal rows tied to a worldnormal nodes, e.g.W1_03. -
Alt rooms- Linked child rooms in the same family, e.g.W1_03 [d1]. -
Common Levels- Shared rooms used by the game in many places, such as Generic Exit rooms, Big[?] Blockbonus rooms, Coin Ship rooms, White Toad House rooms, Warp Whistle House rooms, and airship room families. -
Unassigned Levels- Project-owned rooms not bound to a world slot and therefore don't take any bank memory, meaning you can store as many as you want and swap levels freely! See the Memory Management page for more info.
Level Tree context menu includes:
-
Rename- Change the visible name of the room -
Unassign- Available for world-map root levels and removes the selected world-map assignment without deleting the level. The level then appears under Unassigned Levels. -
Delete- Available for world-map and unassigned levels, including alt levels.- Deleting a level shows a confirmation prompt and permanently removes that level file from the project.
- If the deleted level is part of an alt chain, the remaining chain is repaired automatically.
- If a main assigned level is deleted and it has an alt, the first alt is promoted into its place.
- Any world-map and object-source references to the deleted level are cleared automatically to avoid broken references.
The tree consists of 3 columns:
-
Level Name- Name for display purposes. Internally, rooms are handled by their ID. -
Tileset- The level's rendering tileset. This column can be hidden in Settings. -
Screens- The number of screens the level consists of. This column can be hidden in Settings.
Alt levels (or sub-levels) are displayed directly under their parent room.
Canvas Toolbar is located on top of the Canvas window and provides controls for undo/redo, level clearing, toggling visual aids, and adding/removing screens as well as zoom controls.
Available controls from left to right:
Animation and P-Switch toggles |
-
Undo(Ctrl+Z) - Undo last action (up to 500), individual history for each opened level. -
Redo(Ctrl+Y / Ctrl+Shift+Z) - Redo last action. -
Clear- Clears the level, removing all tiles and objects (undoable). -
Tiles(Ctrl+T) - Display allmetatilesavailable for the selectedLevel Tileset. -
P-Switch- Mimics the game P-Switch. -
Animation- Toggles tile animations as they appear in-game. -
Grid Lines- Toggles grid lines and row numbers on/off. Color and width can be configured inSettings > Canvases. -
Screen Boundaries- Toggles screen boundary lines (every 16 columns) and screen numbers on/off. Color and width can be configured inSettings > Canvases. -
Overlays- Toggles semi-transparent overlays and tile indicators on/off. Colors can be configured inSettings > Canvases. -
Viewport- Shows visible vertical area (WIP). -
-
Remove/Add Screen- Removes the last screen or adds an empty screen to the end of the level. The number of screens is shown between the two buttons. -
Zoom- Allows you to control the zoom level, including by entering a value manually.
โน๏ธ A level can have a maximum of 16 screens (256 tile columns).
โ ๏ธ Important: Someobjects, e.g. all types ofCannon fire, are not rendered and are represented as a solid red tile. TurningOverlaysoff will hide them completely from the canvas.
Your main working area for editing rooms. Generators and Objects are placed and arranged here to build the level layout.
๐ก Tabs: The editor supports multiple open levels at once. Tabs can be rearranged, and closed via Ctrl+W, middle-click, or the ร button. Tab names mirror the level name.
โน๏ธ Info: Glossary used throughout this wiki:
Varmeans variable generator. These entries have extra parameters, and many of them are resizable in the editor. Ground runs, rectangles, slopes, pipes, and other shape-driven terrain pieces often live here. In theInspector, aVarentry can expose width, height, or other generator parameters.Fixedmeans fixed generator. These are still layout-side entries, but they place a predefined structure with no user-editable size parameters.Objectsuse object-specific fields instead of generator parameters (mostly enemies).Entries- Any of the type above.
Available controls:
- Multi-select via Ctrl+Click or by drawing a bounding box.
-
Panusing the middle mouse button, scrollbars, or the mouse wheel.- Default: scroll horizontally. Hold Shift + mouse wheel to scroll vertically. Can be configured in
Settings.
- Default: scroll horizontally. Hold Shift + mouse wheel to scroll vertically. Can be configured in
-
Zoomusing Ctrl+mouse wheel. Scroll direction can be inverted inSettings. -
Drag and Dropany entry on the canvas to reposition it. -
Moveselected entry one tile at a time using arrow keys, or 4 tiles at a time using Ctrl+arrow keys. -
Copyvia Ctrl+C or right-click > Copy.Pastevia Ctrl+V at the current mouse position. - Alt+Click an entry on the canvas to pick it up as an active placement - the same as selecting it from the
Palette, ready to be placed anywhere on the canvas. -
Duplicateselected entry instantly via Ctrl+D. -
Deletevia Del key or right-click > Delete. -
Flip Horizontalvia H key.Flip Verticalvia V key. -
Move to Backvia[orMove to Frontvia](Ctrl+]/[ - to move all the way front back). -
Vargenerators can be resized by dragging their resize handles on the bounding box.
๐ก Tip: All shortcuts can be modified in
Settings.
The right-click context menu also includes:
-
Delete all of type- Removes ALL instances of that entry from the level. -
Save as Prefab- Saves the selected entries as a custom prefab (more details below). -
Lock- Prevents the entry from being selected on the canvas. -
Hide- Hides the entry from rendering on the canvas completely.
๐ก To unlock or unhide entries, use the
Entriespanel.
Press Ctrl+Space to open a quick search field in the center of the canvas. Type to search any entry by name or ID, navigate results with arrow keys, and press Enter (or use mouse) to select - without ever leaving the canvas.
The Palette is located at the bottom of the editor and provides access to all placeable entries, organized into tabs:
-
Var- Variable generators. -
Fixed- Fixed generators. -
Objects- Object entries. -
Recent- Your last 20 single-entry picks. -
Fav- Saved favorites. -
Prefab- Saved multi-entry stamps.
A filter field above the tabs allows you to search entries by name or ID.
To place an entry on the canvas:
- Drag and drop from the Palette directly onto the canvas, released at the target position.
- Or select an entry in the Palette - it becomes active for placement. Click the canvas to place it.
- To place multiple instances, hold Shift and click the canvas repeatedly.
- Press Esc to deselect the active entry.
Saving and placing a prefab |
A personal shortlist of frequently used entries. Right-click any entry in the Palette and select Add to Favorites to save it here. There is no limit on the number of favorites. Favorites can be removed but cannot be reordered - they appear in the order they were added.
A prefab is a saved multi-entry stamp created from a canvas selection. When placed, Bank12 expands the saved bundle back into individual generators and objects at the new location.
To save a prefab: right-click an entry on the canvas and select Save as Prefab, provide a name and click OK. Saved prefabs can be renamed or deleted via right-click in the Prefab tab.
๐ก Both
FavandPrefabsare app-level and shared across all your projects.
Right panel consists of:
-
Inspector- Empty if no entry onCanvasis currently selected -
Header- Level-wide settings -
Junctions- Alt levels management -
Entries- List of entries present on the level
Inspector main fields in action |
Displays fields for the currently selected entry on the canvas. Empty when nothing is selected.
Fields shown for all entry types:
-
Type- Entry type:Var,Fixed, orObject. -
ID- Internal entry ID. -
Name- Display name, without ID. -
X- Absolute tile column (spinbox). -
Y- Tile row from the top of the level (spinbox). 0 is the top row, 26 is the bottom - valid for regular horizontal levels. Vertical levels follow different logic.
Var generators also expose:
-
Height- Generator height in tiles. -
Width- Generator width in tiles. Maximum is 255 (16 screens ร 16 columns).
Fixed generators have no additional parameters beyond coordinates.
At the bottom of the Inspector, two buttons mirror the Move to Back / Move to Front bracket functionality. Ctrl+clicking either button moves the entry all the way to the back or front.
Objects may additionally expose:
-
Variantsdropdown - Available on some enemies, allows swapping the selected entry with another from the same family (e.g. swap Green Troopa for a red Troopa). - Special parameters - A small number of non-enemy objects expose highly specific additional fields. See individual object pages for details.
Header panel |
Level-wide settings, organized into sections.
Identity
-
Level Tileset- Defines the level's rendering tileset - determines whichVarandFixedentries are available and which bank the level is stored in. -
Sub-level Tileset- Same as above, applied to the level's alt (sub) levels.
Atmosphere
-
Music- Background music track. -
Time- Time limit for the level.
Layout
-
Scrolling- Controls vertical camera behavior. Lock (low): camera stays locked to rows 15โ26, follows the player up only if they climb above row 15. Free: camera always follows vertically. Lock: camera never follows above row 15. -
Vertical- Defines the level's orientation. Changes Y coordinate logic throughout.
Visuals
-
BG Tiles- Background tile art. Entries compatible with the current tileset are marked. Others can still be selected. -
BG Colors- Color applied to background tiles. -
Sprite Colors- Color palette applied to enemies and objects.
Spawn
Defines where Mario (or Luigi - co-op is real) enters the level. Applies to the first screen. Not applicable to alt levels unless the alt level is started as a main level.
-
Entry- Entry animation played when the level starts. Not used when the level is entered as an alt level. -
Spawn Height- Row on which the player spawns. -
Spawn Side- Column from which the player enters.
๐ก You can also drag and drop the player spawn marker directly on the canvas to set the entry position visually.
Behavior
-
Pipes to Map- When enabled, pipes leading to alt levels redirect to the world map instead. Map destination is defined by aPipe Controllerobject (settings out of scope for this page). -
2 Player VS- Enables 2-player VS mode. This setting exists and can be modified, but is not supported by Bank12 - behavior is undefined.
Bonus
White Toad House - When enabled, a Bonus Controller (0xD4) object is automatically placed on the canvas. All bonus settings are managed from this section - the object itself has no additional Inspector fields.
Required Coins - Number of coins that must be collected in the level to spawn the White Toad House on the world map after completion.
Manages the alt level assignment and defines how entries (pipes, doors) connect the current level to its alt level. For a full guide on creating alt levels and map exits, see Alt Levels (page doesn't exist yet).
โ ๏ธ Important: Common Exit rooms or Big[?] Blockrooms are not the same as alt levels - they don't require separate assignment - but they still require a defined junction.
Shows the alt level currently assigned to this level.
If no alt level is assigned:
Relationship displays None. One button is available:
-
Assign...- Opens a list of all levels in the Level Tree. Click any level and confirm to assign it as the alt level.
If an alt level is assigned:
Relationship displays the alt level's name. Three buttons are available:
-
Open Linked- Opens the alt level in a new tab. -
Assign...- Replaces the current alt level with a newly selected one. -
Remove- Unlinks the alt level.
๐ก When an alt level is assigned,
Sub-level Tilesetin theHeaderis automatically updated to match the alt level's tileset. A warning is shown if the two tilesets mismatch.
Main level โ ๐ด Junction 0 (screen 0) and its settings ยท ๐ต Junction 3 (screen 3) and its settings ยท ๐ข Alt level tab and Sub Level relationship |
Alt level โ ๐ด Junction 0 entry (screen 0) and Mario's spawn (J0 ยท Door) ยท ๐ต Junction 3 entry (screen 5) and Mario's spawn (J3 ยท Up โ) |
Cards define how entry points (pipes and doors) on the main level connect to landing positions in the alt level.
โ ๏ธ Placing a pipe or door on the canvas does not automatically create a junction card. Cards must be added manually using the + Add Junction button at the bottom of the panel.
A level can have up to 16 junction cards - one per screen. All entry points on the same screen share the same card.
Each card contains:
-
Junction Name- Junction + screen index (e.g. Junction 3). -
Index- The screen number this junction affects. Must match the screen where the pipe or door is placed - a mismatched index will not work. -
Entry Style- Defines how Mario arrives in the alt level (e.g. up, down - simulating pipe entry). A directional hint marker is shown on Mario in the alt level. -
Dest. Screen- Screen in the alt level where Mario spawns (0โ15). A warning is shown if the value exceeds the alt level's actual screen count. -
Dest. Row- Row where Mario spawns in the alt level. -
Dest. Col- Column where Mario spawns in the alt level. -
Vert. Dest.- Checkbox. Enable if the destination alt level is vertical.
โ ๏ธ When a level is assigned as an alt level to any main level, the regular spawn position defined inHeader > Spawnis suppressed - alt level entry rules take over. Mario's position is rendered in the alt level at the destination coordinates.
Cards can be removed via the ร button in the top-right corner of each card.
๐ก Auto-sync: If a pipe or door is moved from one screen to another, and a card exists with a matching index for that screen, the junction index updates automatically. If multiple pipes or cards are present on the same screen, auto-sync may fail - verify and correct manually.
Entries panel |
A full list of every entry placed on the current level, organized by screen.
A filter field at the top allows searching by name or type.
Tree structure: each screen appears as a root node, with its entries listed beneath in the following format:
[Type] Name X: column, Y: row
Columns visible per entry:
-
View- checkbox to toggle visibility. Hidden entries can be unhidden from here. -
Lock- checkbox to toggle lock state. Locked entries can be unlocked from here.
๐ก If you can't find or select an entry on the canvas, check here - it may be hidden or locked.
Render order - Within each screen, Var and Fixed entries are listed exactly in their render order: entries higher in the list render behind those below them. This order is independent of position and mirrors what you control with Move to Back / Move to Front on the canvas.
Object entries are always listed last within each screen and maintain their own order among themselves.
Selection sync - Clicking an entry selects it on the canvas. Double-clicking selects it and moves the canvas to that screen. Entries selected on the canvas are highlighted here as well.
Changelog
2026-04-05 Added screenshots and gifs; updated formatting
2026-04-04 Initial commit