Controls

All keyboard and mouse bindings, as found in the source code.

Movement (during gameplay)

KeyAlternateActionSource
↑ ArrowWMove forward (along facing direction)Blupi.cpp:171
↓ ArrowSMove backwardBlupi.cpp:172
← ArrowQRotate left (turn)Blupi.cpp:161
→ ArrowERotate right (turn)Blupi.cpp:162
AStrafe left (move perpendicular, no rotation)Blupi.cpp:175
DStrafe rightBlupi.cpp:176
SpaceJump (only when on ground)Blupi.cpp:186

Game Controls

KeyContextAction
ESCInit phaseQuit the game
ESCPlay phaseOpen pause menu
ESCPause phaseResume gameplay
ESCSettingsReturn to previous screen
1Init phaseSelect gamer slot 1
2Init phaseSelect gamer slot 2
3Init phaseSelect gamer slot 3
SInit / PauseOpen settings screen
SSettingsToggle sound on/off
Space / EnterWin / LostContinue (advance or reset)
Mouse left clickWin / LostContinue
F1AnyToggle debug geometry overlay

Source Reference

Input is read each frame through Urho3D::Input subsystem:

// Example from Blupi.cpp — movement input
if (input->GetKeyDown(KEY_UP) || input->GetKeyDown(KEY_W))
    forwardInput = 1.0f;
if (input->GetKeyDown(KEY_DOWN) || input->GetKeyDown(KEY_S))
    forwardInput = -1.0f;

// Jump (one-shot with GetKeyPress, not GetKeyDown)
if (onGround_ && input->GetKeyPress(KEY_SPACE))
    vel_.y_ = kJumpSpeed;

Note: GetKeyDown is used for held movement; GetKeyPress is used for one-shot actions like jump and phase transitions. See Input System for more detail.

Known Limitations