Controls & HUD

Monsterion runs the same gameplay through two very different input layers: desktop (keyboard + mouse, RTS-style) and mobile/web touch (a virtual joystick + on-screen buttons).

MOBA controls

ActionDesktopMobile / web touch
MoveW A S DBottom-left virtual joystick
AttackSpaceBottom-right circular button (red X)
Skill 1 — SprintLightning button
Skill 2 — Battle CrySword button
Skill 3 — HealPlus / star button
Pan cameraClick + dragOne-finger drag
ZoomMouse wheel(locked at 3.0 on mobile MOBA)
Snap to heroRelease panTap joystick
Jump to map areaTap top-right minimap

Attack picks the nearest enemy within the attack-scan radius (220 units). With no enemy in range, desktop aims at the cursor; mobile fires nothing.

MobaControl merges WASD and joystick input each frame by max-magnitude, so neither source stomps the other when you switch between them.

Mobile MOBA HUD

When OS.has_feature("mobile_build") is true and the mode is MOBA, a touch HUD overlays the regular UI.

Virtual joystick

A bottom-left thumb pad (radius 95, knob 38), 60px from the bottom-left corner. It captures one touch index so you can hold the stick with one finger and tap actions with another. Pressing it also recenters the camera on your leader.

Attack button

A bottom-right round button (red X). Press → fires your normal attack at the nearest enemy in range.

Three universal ability buttons

An arc above-left of the attack button: Sprint, Battle Cry, Heal — universal, so every leader has them. See Skills & Abilities.

Camera

  • lock_zoom_at(3.0) pins the mobile MOBA camera at a fixed character-cam zoom.
  • A follow_target lerps the camera to your hero each frame; a user pan suspends follow, and releasing resumes it. The joystick's recenter snaps it straight back.

Layout overrides

On mobile the minimap and control cluster move to the top-right (150×150), the stats panel's inner detail panel is hidden, ability/inventory bars hug the bottom edge, the player's name label is hidden (HP bar moves up to sit above the head), and a gold readout sits under the FPS counter.

Multi-touch routing

Input flows through _unhandled_input so GUI controls that consume a touch never leak into gameplay. The joystick and attack button consume their own touches; everything else falls through to selection, movement, and the camera. The minimap uses MOUSE_FILTER_IGNORE so taps reach the handler and route to the minimap.

The mobile HUD is driven by raw _input for multi-touch, because emulate_mouse_from_touch only follows the primary finger — which would break hold-stick-and-tap-button play.