Snarky's
LOADING
WASDMoveMouseAim / lookLeft clickFireSpaceJump (double-jump)ESwitch weaponEscapeRelease the cursor
shooter#fps#shooter#arena#arcade#godot#kenney

Clear the floating arena before it clears you.

A fast arcade FPS: blast four flying robot sentries out of the sky across a cluster of floating platforms before they whittle down your health. Made by Kenney as an open-source Godot starter kit with CC0 art.

0 plays0 players0 remixesPublished 2d ago
Open source

Made by Kenney (kenney.nl). Released under the MIT (code), CC0 (assets) license — original source.

Changes for this platform: Renderer switched from Forward+ to Compatibility (GL Compatibility) so it runs in browsers: project.godot now sets renderer/rendering_method(.mobile)="gl_compatibility", config/features updated, and the Forward+-only screen_space_aa setting was dropped (kept msaa_3d). Exported with Godot 4.6.3 as a single-threaded web build (thread_support=false, extensions_support=false); the engine runtime is served from the platform's shared /engine/godot/4.6.3/ instead of being bundled, and the default HTML shell was replaced with the platform's launcher (animated loading backdrop, calls ArcadeSDK.ready()). Disabled input_devices/pointing/emulate_mouse_from_touch so the new virtual touch controls and the kit's own mouse-look never both fire from one touch. objects/enemy.gd: added an enemy_destroyed signal (emitted in destroy()) so score/win tracking doesn't need to poll. objects/player.gd: removed the kit's original unconditional Input.mouse_mode=CAPTURED in _ready() (it force-locked the pointer before any user gesture); added a game_started gate (input/physics stay idle until the title screen's Start button fires start_playing()); added an is_dead flag and a died signal so damage() stops the run at 0 health and hands off to main.gd instead of silently calling reload_current_scene(); the off-arena fall safety now goes through that same damage()/died path instead of a silent reload. Pointer lock itself is requested with a hand-written JavaScriptBridge.eval() call to canvas.requestPointerLock().catch(...) rather than Godot's Input.mouse_mode=CAPTURED: verified directly against Chromium that the platform's sandboxed game frame (an opaque-origin iframe, sandbox="allow-scripts allow-pointer-lock" with no allow-same-origin) always rejects requestPointerLock() there ("The root document of this element is not valid for pointer lock"), independent of Godot and independent of a genuine user gesture; Godot's own mouse-mode path does not catch that rejection and it surfaces as an uncaught page error, which would fail the platform's no-console-errors check. Mouse-look is unaffected by the lock failing, since it reads raw relative mouse-motion gated on the script's own mouse_captured flag rather than on the OS lock succeeding; a host that does permit the lock gets a hidden/confined cursor for free with no code changes. Added scripts/main.gd: a title/score/win/game-over state machine that counts the 4 nodes under Enemies, awards 10 points per kill, calls it a win when all are cleared, ends the run on player death, reports to ArcadeSDK.score/gameOver/submitScore guarded exactly like kenney-city-builder's _sdk_storage() pattern, and releases any synthesized touch-input actions on start/restart. Rewrote scripts/hud.gd to add (procedurally, no new scene/theme assets) a title screen (click/tap or Enter/Space to start), a score readout, and a win/lose overlay with a Restart button reachable by mouse, touch and keyboard; also builds the native (touch.scheme) touch controls: a hand-written left-side virtual joystick (scripts/touch_joystick.gd, new) driving the kit's existing move_* input actions with analog strength, a hand-written right-side look-drag region (scripts/touch_look.gd, new) that feeds synthetic relative mouse-motion through the kit's own mouse-look code, and FIRE/JUMP as anchored Control Buttons (Godot's BaseButton handles touch natively) wired to the kit's existing shoot/jump actions. Repositioned the kit's original Health label, which was pinned at fixed pixel coordinates that collided with the new joystick, to the top-left corner. scenes/main.tscn: attached scripts/main.gd to the Main node (one new ext_resource, one script= line); no other scene changes. All original models, textures, sounds, weapon balance and level layout are unchanged.

Comments 0

Log in to comment.

  • Loading…