Skip to main content

Navigation & Controls

DDDBrowser provides first-person navigation controls for exploring 3D scenes. The exact controls depend on the scene's gameType setting.

Movement Controls​

Basic Movement (FPS gameType)​

When a scene has "gameType": "FPS", you can move using:

  • W: Move forward
  • S: Move backward
  • A: Move left (strafe)
  • D: Move right (strafe)
  • Mouse: Look around (first-person camera)
  • Space: Jump
  • Shift: Sprint (hold to run faster)
  • Ctrl: Crouch (hold to crouch)
  • Z: Prone (hold to go prone)
  • Alt: Slow move (hold to move slowly)

Free Look / Exploration (NONE gameType)​

When a scene has "gameType": "NONE" (or no FPS controller), WASD fly-cam exploration is enabled:

  • WASD: Fly the camera through the scene
  • Mouse: Look around
  • Interact with objects (if scripts allow)

Use "gameType": "FPS" when you want physics-driven grounded movement instead.

Interaction Controls​

  • E or F: Interact with objects
    • Triggers on_interact callbacks in scripts
    • Used for portals, interactive objects, etc.
  • Enter: Confirm interaction (for menus, dialogs)
  • F: Special interaction (context-dependent)

Available Input Actions​

DDDBrowser supports many input actions that can be bound to keys:

Movement Actions​

  • MoveForward - Move forward
  • MoveBackward - Move backward
  • MoveLeft - Strafe left
  • MoveRight - Strafe right
  • Jump - Jump
  • Sprint - Sprint
  • Crouch - Crouch
  • Prone - Go prone
  • SlowMove - Move slowly

Interaction Actions​

  • Interact - Generic interact / on_interact (E)
  • ConfirmInteract - Confirm / talk / menu-style interact (Enter)
  • SpecialInteract - Special interact / same on_interact path (F)

System Actions​

  • TerminalToggle - Toggle in-app terminal/console (Luau evalConsole when scene is Active)

Terminal / evalConsole footgun: The console evaluates Luau with the full Engine API. Without a script entity caller, mutate/destroy only affects console-owned spawns (per-caller ownership). It is still powerful—treat it as a trusted debug tool, not a sandboxed guest script. Getters remain open-read (see Engine API).

  • FullscreenToggle - Toggle fullscreen (Alt+Enter)

Reserved combat/inventory keybinding names (PrimaryAttack, Reload, slots, etc.) may appear in settings but have no gameplay systems in the browser runtime.

Default Keybindings​

The default keybindings are:

ActionDefault Key
Move ForwardW
Move BackwardS
Move LeftA
Move RightD
JumpSpace
SprintShift
CrouchCtrl
ProneZ
InteractE
Confirm InteractEnter
Special InteractF

Customizing Keybindings​

You can customize keybindings in Settings:

  1. Press Esc → Settings → Change Keybindings
  2. Go to the Keybindings tab
  3. Click on an action to rebind it
  4. Press the key(s) you want to use
  5. Save your changes

Keybindings support:

  • Modifier keys: Shift, Ctrl, Alt
  • Mouse buttons: Left click, Right click
  • Multiple bindings: One action can have multiple key combinations

Keybindings are saved to %LOCALAPPDATA%\DDDBrowser\keybindings.json.

Camera Controls​

The camera is controlled by mouse movement:

  • Mouse movement: Rotate view (first-person)
  • Mouse sensitivity: Controlled by your system mouse settings

The camera follows standard first-person shooter conventions:

  • Mouse up: Look up
  • Mouse down: Look down
  • Mouse left: Turn left
  • Mouse right: Turn right

Interaction System​

When you press the Interact key (E or F), DDDBrowser:

  1. Performs a raycast from the camera forward
  2. Checks for interactive objects within range
  3. Calls the on_interact method on matching script components

Interactive objects are determined by:

  • Script components attached to instances
  • The bounding radius of the entity
  • The distance from the camera

Scripts can use Engine.consumeAction("interact") to prevent multiple triggers from a single interaction.

Next Steps​