Layout, shortcuts, auto-save, and workflow tips.
Interface Guide
Layout#
The Studio has two layout layers that matter:
- App shell — a left navigation sidebar for switching sections like Maps, World, Items, and Settings
- Map editor workspace — the default screen, with a top menu bar (File · Edit · View · Game · Tools · Help), a left map browser, a center canvas, a right context panel, and a bottom status bar
- Pages and modals — content editors open as dedicated pages from the app nav, while tools like Database, Plugins, Build, and Settings open from the editor menu bar

Keyboard Shortcuts#
Press ? (Shift + /) at any time inside the zone editor to open the in-editor shortcut overlay. It lists the live set of bindings for the current mode.
Map Edit Mode — Tools#
| Key | Action |
|---|---|
| H | Hand tool (pan the view) |
| P | Pencil tool (paint tiles) |
| R | Rectangle tool |
| C | Circle tool |
| F | Flood fill tool |
| E | Eraser tool (Shift + E while a Diorama map is tilted) |
| I | Eye dropper (sample tile from map) |
| S | Select tool |
| G | Toggle grid |
| V | Switch between the flat view and the Diorama view (projects with Diorama on) |
| Q / E | Diorama view: turn the view a quarter turn left / right |
| N | Diorama view: back to north up and the project's tilt |
| Shift + middle-drag | Diorama view: tilt your view (Shift + Alt + drag too) |
| Alt + drag | Diorama view: turn the view, snapping to quarter turns (in the flat view Alt + drag still pans) |
| Double middle-click | Diorama view: reset to the map's camera (centred, north up, Std, the map's zoom) |
| Space (quick press) | Diorama view: Top, and the next press back to your view |
| Hold Space (Floor brush) | Diorama view: show Top while held; Space + drag still pans |
| [ / ] | Decrease / increase brush size |
Event Mode — Tools#
| Key | Action |
|---|---|
| S | Select event |
| E | Erase event |
| G | Toggle grid |
| V | Switch between the flat view and the Diorama view (projects with Diorama on) |
| Double-click | Create a new event (empty tile) or open the event editor (existing event) |
Editing & Clipboard#
| Key | Action |
|---|---|
| Ctrl+S | Save the map you are editing |
| Ctrl+Shift+S | Save all maps with unsaved changes (also File → Save All Maps) |
| Ctrl+Z | Undo — tiles, objects, walls and map events (create, move, edit, delete, paste) share one history |
| Ctrl+Y or Ctrl+Shift+Z | Redo |
| Ctrl+C | Copy the active selection (tile stack or event) |
| Ctrl+V | Paste the clipboard at the cursor |
| Delete / Backspace | Delete the selected object or event, or erase the selected tile region |
| Escape | Clear selection, cancel marquee, or close a modal |
On a Mac, Cmd works everywhere Ctrl is listed.
Map shortcuts pause while you type in a field or while a dialog, tour or editor window covers the map — pressing Ctrl+Z inside the Items editor never undoes a tile behind it.
The save pill in the toolbar reads Unsaved changes whenever any open map has edits that are not saved yet, and Up to date only when every map is saved. When you press Ctrl+S with other maps still unsaved, the confirmation tells you how many; autosave or Save All Maps takes care of them. Closing or reloading the tab while anything is unsaved asks you first.
There is deliberately no select-all shortcut: drag with the Select tool (S) to choose a region. Ctrl+A used to wash the entire map in the purple selection tint, which is one stray Delete away from erasing everything.
View & Navigation#
| Key | Action |
|---|---|
| Space + drag | Pan the view |
| Middle-click + drag / two-finger swipe | Pan |
| Scroll wheel / trackpad pinch | Zoom |
| Arrow keys | Pan the view |
| + (or =) / − | Zoom in / out |
| 0 | Reset zoom to 100% |
| Home | Center the view on the map |
| Shift+D | Toggle the autotile direction compass |
| Right-click | Pick the tile under the cursor |
Player Controls & Loadouts#
The included game client supports multiple control styles instead of forcing a single MMO layout.
Control Presets#
Projects can ship with presets for:
- Point-and-click — classic click-to-move MMO controls
- Hybrid — click movement plus direct-combat hotkeys
- WASD — direct movement with action bindings
- Keyboard-only — no mouse requirement for core movement/actions
- Controller — gamepad-aware movement and camera rotation support
- Touch — tap-to-move and virtual joystick options for mobile play
Binding Coverage#
The runtime control config can bind actions across these categories:
- Movement — click move, directional movement, run modifier
- Camera — rotate left/right, face cursor
- Combat — primary attack, auto-attack, Stop (default Z — cancels auto-attack, the walk into range, and any cast in progress), equipment-derived abilities, and hotbar slots
- Interaction — interact and contextual world actions
- Panels — inventory, character, skills, abilities, quests, market, pets, breeding, build, world map, and store
- Social / System — guild, friends, close, keybind reference, and admin actions
Inside the client, players can open a Control Bindings panel to see the active mapping for the current preset.
Aiming & casting#
How a press turns into a cast. Three modes, because each is wrong for some ability:
| Mode | What pressing an ability does |
|---|---|
| Instant (quick cast) | Fires immediately at the cursor. Fastest, but you can't see where a skill shot will land before spending it |
| Hold to aim, release to fire | Press shows the ground indicator; release fires. The default. A quick tap behaves exactly like Instant, so nothing gets slower — holding is what buys you the preview |
| Press to aim, click to fire | The indicator stays up; left-click fires, right-click or Escape cancels. The safe mode: nothing is spent until you commit |
Abilities that must be aimed — skill shots, and anything that drops an area on the ground — always show their indicator regardless, because the only other way to learn where one lands is to spend it and watch. Targeted spells already know where they're going, so they keep tab-target's snap. Aim targeted abilities turns the preview on for those too.
Aiming on a phone#
On a touch screen there's no cursor to aim with, so an ability button aims by drag:
- Press and hold an ability button — the ground indicator appears.
- Drag your thumb in the direction you want it. The indicator swings from your character, so you steer it without your finger ever needing to be on the target.
- Release to fire — or drag onto the ✕ that appears on the right while you aim, and release there to put the ability away unspent.
A quick tap still just casts, so nothing slows down. A tap on an ability that aims fires it at your target if they're in reach, otherwise at the nearest enemy in reach, otherwise straight ahead — it never walks you off after someone out of range. Abilities that charge wind up while you hold and release at whatever strength they reached, exactly as on desktop.
The drag is a direction, not a place. Your thumb sits on a button in the corner of the screen — if the game aimed where your finger actually was, every skill shot would land on your own hotbar. So the game reads which way you dragged and how far, and aims out from your character. A small drag aims close; a longer one reaches further, up to the ability's range.
A tiny drag does nothing at all (that's the deadzone — a tap is never perfectly still, and without it the smallest tremor would swing your aim). Dragging right off the button keeps working, so you can pull well past its edge to aim.
Which buttons aim this way: the on-screen touch buttons and the equipment ability slots. On phones the touch buttons normally are the hotbar — see the Phone layout page.
The action bar on a phone#
On a phone, pressing a slot is using it — so by default, reading it and changing it sit on gestures that never use it:
| Gesture | What it does by default |
|---|---|
| Tap | Uses the slot — casts the ability or uses the item, exactly like pressing its key |
| Hold (and drag) | Aims or charges the ability, then fires on release (see Aiming on a phone above) |
| Double tap | Shows the slot's details (its tooltip). They stay up until your next touch anywhere |
| Double tap and hold | Opens the picker to change what's in the slot (numbered hotbar slots) |
| Tap an empty slot | Opens the picker straight away — there's nothing to use yet. This one can't be reassigned |
You can reassign all four — see Changing the action bar gestures below.
- The first tap of a double tap still counts as a tap. If it armed a skill shot (Click mode, the touch default), the double tap puts it away again, so reading or changing a slot never leaves a spell waiting to fire on your next touch. If it cast something or used an item (Hold or Instant mode, an ability that needs no aiming, a potion), that has happened.
- Holding a slot never shows its details unless you put Show its details on Hold. By default a hold is aiming or charging, not a question.
- The equipment slots can't be changed from the bar — they follow what you have equipped — so whichever gesture changes a slot does nothing on them.
- With a mouse nothing changes — hover shows the tooltip, and clicking a numbered slot opens its picker. The gestures only apply to the phone layout.
Changing the action bar gestures#
Where: World → Player Controls → Touch → Action bar gestures sets your world's default. Players can pick their own in the game under Settings → Controls → Action bar on a touch screen (shown on phones only), as long as Allow player-side overrides is on (World → Player Controls → Movement).
- Open World → Player Controls and switch to the Touch tab. Touch controls must be enabled for the gestures to be editable.
- Under Action bar gestures, pick what each of the four gestures does.
- Save the world. Players get the new default on their next visit. A player who picked their own gestures keeps them until they choose Use this world's or reset their controls.
Each gesture can be set to one of:
| Action | What it does |
|---|---|
| Use it | Casts the ability or uses the item, like pressing the slot's key. On Hold or Double tap and hold it reads aim or charge while held: the key stays down while the finger does, and lifting fires |
| Show its details | Opens the slot's tooltip |
| Change what's in it | Opens the picker (numbered hotbar slots only) |
| Nothing | The gesture does nothing on a slot |
How the timing works:
- When Tap and Hold both use the slot (the default), the slot's key goes down the instant a finger lands, just like a key press, so a tap casts with no delay and holding simply keeps it down to aim. The same goes for Double tap and Double tap and hold together.
- Otherwise a tap acts when the finger lifts and a hold after about half a second, so the game can tell them apart. Say you put Change what's in it on Hold: a tap still casts (on the lift), holding opens the picker instead of casting, and in Click mode a tap still arms a skill shot for a second tap to fire. What you lose is aiming by holding the slot.
- A tap that uses the slot never waits to see whether a double tap follows, because that delay would be on every cast. A tap that only shows details or changes the slot does wait a moment, so a double tap can replace it.
- Leave both double-tap gestures on Nothing and quick taps are all casts. Spamming a slot then never turns into a double tap.
Gotchas:
- Show its details and Change what's in it can each sit on only one gesture. Picking one that is already taken moves it, and the gesture that had it is left doing Nothing, the same way a rebound key moves.
- Something must use the slot. The last gesture set to Use it can't be changed; the editor greys out the other choices. A stored map that uses nothing (edited by hand, say) is reset to the default when it loads.
- With no gesture set to Change what's in it, a player on a phone can only fill an empty slot from the action bar — but the Abilities panel always works: tap a learned ability, then tap a hotbar slot. That path needs no gesture and no drag, so a player is never locked out of setting up their bar.
- Turning off Allow player-side overrides applies your gestures to everyone at once. Players' own choices are kept, not deleted, so turning it back on restores them.
Hotbar & Loadouts#
- The action bar includes equipment-driven combat slots plus 4 player-configurable hotbar slots
- Abilities and supported consumables can be assigned to those hotbar slots — drag one onto a slot with a mouse, or tap the ability then tap the slot, which is how it works on a phone
- Named loadouts can be saved and switched to restore hotbar setups quickly
- Loadout switching is persisted through the game server, so it is part of the runtime, not just a local mockup
Auto-Save#
The map editor supports configurable auto-save intervals:
- Off
- Every 5 minutes
- Every 10 minutes
- Every 15 minutes
Change this from the File → Autosave menu (Off / 5 / 10 / 15 min) — it lives in the editor menu bar, not the Settings modal.
Auto-save is off until you turn it on, so nothing is written until you save (Ctrl+S). Your choice is remembered in this browser, so once you pick an interval it stays on the next time you open the editor.
Staying Connected (Browser Editor)#
In the browser, opening a project from your account dashboard connects that tab to the project for 24 hours of inactivity. The clock resets every time you do something — saving, switching zones, opening a Database section — so a long editing session never gets interrupted. Leave the tab alone for a full day and the connection lapses; you land back on the dashboard, and clicking the project reconnects you.
Signing in is separate and much longer-lived, so a lapsed project connection is a single click to fix, not a fresh login.
Grid Display#
- Toggle grid visibility in the map editor toolbar
- Grid snaps to tile boundaries for precise placement
- Adjustable grid scale for different zoom levels
Undo/Redo#
The map editor maintains a full undo/redo stack for:
- Terrain painting
- Object placement
- Object deletion
- Layer changes
Each undo step records exactly which tiles changed, so even large fill operations can be fully reversed.
Play Testing#
Launch Game → Playtest (Ctrl+P) from the menu bar to instantly open a game client connected to the embedded server.
On the desktop app, Playtest signs you straight into the world — no login screen, no character select. Each project gets its own dedicated Playtester account: your first launch creates its character, and every later launch resumes it, so your playtest inventory and progress persist between sessions. Turning this on also enables the embedded server's local email/password accounts, so your game's login screen gains a sign-in form alongside guest play — useful when you want to test with a second, separate account. If a Playtest ever drops you on the login screen instead of in the world, restart the game server from the Server tools and launch again.
Every Playtest launch publishes your authored content to the embedded server first, then opens the client. On the desktop app the editor and the game server keep separate copies of your project database, so this step is what guarantees the character templates, items, mobs and maps you just saved are the ones you play against. Large projects take a few extra seconds on launch while that runs; if it can't finish, the client still opens and the editor warns you that you may be playing slightly stale content.
Some changes (like new plugins) additionally require a server restart, which you can do from the Server tools.
Playtesting is also where you can verify player-facing systems that are easy to miss from the editor alone, such as:
- active control preset behavior
- keybind reference display
- hotbar assignment and named loadouts
- touch controls and mobile-oriented overlays when enabled
Content Lists#
All content editors (Items, Mobs, NPCs, Quests, etc.) share a common pattern:
- A searchable list showing all records
- Click any record to open its edit form
- A Create button to add new records
- Delete with confirmation
Most editors also feature tabbed forms to organize settings. For example, the Item editor has tabs for Stats, Combat, and Crafting configuration.
Finding Things Fast — the Command Palette#
Press Ctrl+K (Cmd+K on Mac), or pick Tools → Command Palette…, and type what you're looking for. The palette searches every tool, every Database section, every standalone editor page and every menu command in one list — and it understands older names, so typing "enemy" finds Mobs, "zone" finds Maps and "config" finds Studio Settings.
- Press Ctrl+K.
- Type a few letters of the section or command.
- Use ↑ / ↓ (or Home / End) to pick a result and press Enter — or Esc to close.
| Gotcha | What happens |
|---|---|
| You're typing in a field | Ctrl+K is ignored so it can't steal your keystroke — click outside the field first. |
| You have unsaved edits | Jumping away asks before discarding them, exactly like switching sections from the menu. |
| You can't find an editor | Every editor lives in a menu. Most are Database sections; the rest are tabs of another editor — Affixes (Items), Classes (Characters), Accounts (Players), Notifications (UI / HUD Editor), Game Sounds and Audio Engine (Asset Manager). The palette finds all of them. |
Where things live now#
| Menu entry | What it opens |
|---|---|
| File → Studio Settings | Ports, database mode and other app settings (was "Settings"). |
| Tools → Database | Every content section (Database appears only under Tools). Encounters sits under Game Data; Common Events, Cinematics and Housing under Content; Anti-cheat and AI Usage under System. |
| Tools → World Settings | World-wide rules — the map tree, weather, calendar, PvP. |
| Tools → Asset Manager (Ctrl+Shift+A) | Media, sprites, fonts and sounds — the old separate Media Manager entry is folded into its Library. |
| Maps (left navigation) | The map editor (was "Zones"). The Database section formerly called "Settings" is now Server Settings. |
| Database → System → AI Usage | Your AI credits, what this project generated, and what each image model costs (was "AI Pricing"). Prices are set by the platform, the same for every project, and can't be edited here. Pause AI in this project stops your team generating until you resume it. |
| Database → Players → Accounts | Player accounts: staff roles, bans and mutes (was the "Users" page). Characters and Accounts are the two views of Players. Only the project owner can grant or remove superadmin; view-only collaborators can't change roles. Players who sign in with Supabase accounts are listed from their first sign-in on an up-to-date game server, so after updating, a player who has not signed in since won't appear yet. |
| Tools → UI / HUD Editor → Notifications | The skill-up, discovery and boss cards. |
| Tools → Asset Manager → Game Sounds / Audio Engine | Which audio plays for each engine sound, and the audio middleware (was Database → Sounds and the Audio Engine page). |
Safety Nets in Every Content Editor#
| You see | What it means |
|---|---|
| "Couldn't load X — Retry" | The list failed to load (database unreachable, timeout). It is not empty — press Retry instead of re-creating records. |
| "Discard unsaved changes?" | You're switching section, closing the Database or leaving the page with edits you haven't saved. Cancel to go back and save. |
| "Used by N …" on delete | Deleting an item, ability, status effect, mob, NPC, recipe, loot table, achievement, character template or Gold Store tier first counts what still points at it (drops, quests, spawns, shops…). The button then reads Delete anyway. |
| Red text under a field | That field is invalid. Saving jumps to the tab holding the first bad field, and the footer says "Fix N highlighted fields". |
| Saves go live / Saves wait for Publish | The note in every editor footer says whether a save reaches the running world immediately or waits for your next Publish. A save that goes live reaches players already online too: a renamed item, an ability's new cost or a status effect's new icon shows in their bag, hotbar and tooltips without relogging. |
| Plain-language errors | Database errors are translated (for example "Something else still uses this record"). The original error is written to the browser console for bug reports. |
Long lists (Items, Abilities, Mobs, Recipes) are paged; an empty list tells you how to create your first record, and a filtered list with no matches offers to clear the filters.