Level Editor - CheMiguel23/SMB3-Bank12 GitHub Wiki

Last updated: 2026-04-05

Overview

Level Editor

The Level Editor is the main workspace for building and editing SMB3 rooms. It consists of:

  1. Level Tree - Allows you to see all levels in the project and open them.
  2. Canvas Toolbar - Canvas settings and preferences.
  3. Level Canvas - The main working space and representation of the currently selected level.
  4. Level Palette - Allows you to select entries to place on the canvas.
  5. Right Panel - Contains 4 tabs: level-wide settings Header, selected-entry Inspector, room links / Junctions, and list of placed Entries.

๐Ÿ’ก Tip: Use Alt+1 for quick access to the editor!

Level Tree

Level Tree

Level Tree is a list of all rooms available in the project, including:

  • World-slot levels - Normal rows tied to a world normal 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 [?] Block bonus 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.

Columns

The tree consists of 3 columns:

  1. Level Name - Name for display purposes. Internally, rooms are handled by their ID.
  2. Tileset - The level's rendering tileset. This column can be hidden in Settings.
  3. 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

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.

Canvas Toolbar

Available controls from left to right:

Anim+P-Switch
Animation and P-Switch toggles
  • Undo Undo (Ctrl+Z) - Undo last action (up to 500), individual history for each opened level.
  • Redo Redo (Ctrl+Y / Ctrl+Shift+Z) - Redo last action.
  • Clear Clear - Clears the level, removing all tiles and objects (undoable).
  • Tiles Tiles (Ctrl+T) - Display all metatiles available for the selected Level Tileset.
  • P-Switch P-Switch - Mimics the game P-Switch.
  • Animation Animation - Toggles tile animations as they appear in-game.
  • Grid LinesGrid Lines Off Grid Lines - Toggles grid lines and row numbers on/off. Color and width can be configured in Settings > Canvases.
  • Screen Boundaries Screen Boundaries - Toggles screen boundary lines (every 16 columns) and screen numbers on/off. Color and width can be configured in Settings > Canvases.
  • Overlays Overlays - Toggles semi-transparent overlays and tile indicators on/off. Colors can be configured in Settings > Canvases.
  • Viewport Viewport - Shows visible vertical area (WIP).
  • Remove ScreenAdd Screen - 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: Some objects, e.g. all types of Cannon fire, are not rendered and are represented as a solid red tile. Turning Overlays off will hide them completely from the canvas.

Level 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.

Anim+P-Switch

โ„น๏ธ Info: Glossary used throughout this wiki:

  • Var means 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 the Inspector, a Var entry can expose width, height, or other generator parameters.
  • Fixed means fixed generator. These are still layout-side entries, but they place a predefined structure with no user-editable size parameters.
  • Objects use 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.
  • Pan using the middle mouse button, scrollbars, or the mouse wheel.
    • Default: scroll horizontally. Hold Shift + mouse wheel to scroll vertically. Can be configured in Settings.
  • Zoom using Ctrl+mouse wheel. Scroll direction can be inverted in Settings.
  • Drag and Drop any entry on the canvas to reposition it.
  • Move selected entry one tile at a time using arrow keys, or 4 tiles at a time using Ctrl+arrow keys.
  • Copy via Ctrl+C or right-click > Copy. Paste via 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.
  • Duplicate selected entry instantly via Ctrl+D.
  • Delete via Del key or right-click > Delete.
  • Flip Horizontal via H key. Flip Vertical via V key.
  • Move to Back via [ or Move to Front via ] (Ctrl+]/[ - to move all the way front back).
  • Var generators 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 Entries panel.

Command Palette

Level Palette

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.

Level Palette

Level Palette

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.

Fav

Saving and placing a prefab
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.

Prefabs

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 Fav and Prefabs are app-level and shared across all your projects.

Right panel tabs

Right panel consists of:

  • Inspector - Empty if no entry on Canvas is currently selected
  • Header - Level-wide settings
  • Junctions - Alt levels management
  • Entries - List of entries present on the level

Inspector

Inspector main fields in action
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, or Object.
  • 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:

  • Variants dropdown - 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

Header panel
Header panel

Level-wide settings, organized into sections.

Identity

  • Level Tileset - Defines the level's rendering tileset - determines which Var and Fixed entries 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 a Pipe Controller object (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.

Junctions

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 [?] Block rooms are not the same as alt levels - they don't require separate assignment - but they still require a defined junction.

Sub Level

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 Tileset in the Header is automatically updated to match the alt level's tileset. A warning is shown if the two tilesets mismatch.

Junction Cards

Main Level Junction
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
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 in Header > Spawn is 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

Entries panel
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
โš ๏ธ **GitHub.com Fallback** โš ๏ธ