A fast, friendly multiplayer laser-tag arena FPS built with Godot 4 (.NET/C#). No gore, no drama — get zapped, respawn, drop back in.
- Charge-up lasers: hold the trigger to spin up your energy weapon — the longer the charge, the faster, bigger, & meaner the bolt (blue → red). Release to fire a visible laser burst that travels (with a little drop), so shots can be dodged.
- Punching: with fists out (slot 1), left-click for close-range brawling. Getting punched blurs your screen for a bit.
- Full-auto ability: press F for 3 seconds of low-damage rapid fire (15 s cooldown).
- Difficulty handicap: pick Beginner / Intermediate / Expert when you join. Lower tiers get bigger health pools and hit higher tiers harder, so mixed-skill lobbies stay fair.
- Spawn armor: 5 seconds of invulnerability after every spawn (white glow). Firing or punching cancels it.
- Spawn room: you respawn in a room above the arena & drop back in when you're ready.
- Slingshot universal ammo: with the slingshot out & empty, walking onto any world item loads it instead of collecting it — a dropped laser, the boomerang, someone's bread, even the paper airplane. Slung items fly the slingshot's draw-scaled arc & become ordinary pickups again wherever they land.
- The paper airplane: exactly one in the arena, in slot 6. Thrown, it locks onto whoever was under your crosshair & glides after them — their screen fills with a red ring beeping faster & faster, then they catch fire & pop, strictly single-target, nobody near them harmed. Punch it out of the air to catch it & throw it back. A glide that never lands its target comes down armed: a landmine that picks whoever steps on it, or slingshot ammo for anyone with a slingshot out.
- The bread ritual: your one-per-life loaf is slot 7. Left-click to eat & you're healed to full — after standing perfectly still for three seconds, rooted, with a reverse meter draining on your screen, the loaf raised to your face, crumbs falling, & a tag over your name telling the whole arena what you're doing. You can't cancel it; anyone who lands a hit on you can, & the loaf is wasted.
- Death drops everything: weapons, your uneaten bread, & whatever's nocked in your slingshot all land where you fell.
- Leaderboard, streak & zap messages with appropriately dry humor, low-health vignette, & more.
Full reference: docs/CONTROLS.md (movement, all 7 weapon slots, abilities, music voting, & hidden mechanics).
| Input | Action |
|---|---|
| W A S D / Mouse / Space | Move, look, jump |
| Left mouse | Use selected weapon — punch with fists, hold to charge laser / draw slingshot (fires whatever the slingshot is loaded with) |
| Right mouse | Unbound (reserved) |
| Mouse wheel (up = prev, down = next) / Q / E | Cycle carried weapons |
| 1-7 | Fists, laser, banana, boomerang, slingshot, paper airplane, bread |
| Shift / C / V | Slide, crouch, first-/third-person |
| F / G | Full-auto burst, dance |
| Tab | Message history |
| . / , | Music vote up / down |
| Esc | Quit dialog |
The easiest way to play: Join Game — the official dedicated server address is pre-filled, so just pick a name & difficulty and jump in. (Releases deploy to the official server automatically when deploy credentials are configured.)
Prefer to host your own? Host from the main menu — UPnP discovers your address; enable UPnP on your router or forward UDP port 55556.
Grab the latest build from Releases — macOS builds are signed & notarized.
- Engine: Godot 4.7.1 (.NET), C# / net9.0
- Build:
dotnet build - Unit tests (gdUnit4):
GODOT_BIN=<godot binary> ./addons/gdUnit4/runtest.sh -a tests - Automated multiplayer playtest (headless host + 2 clients exercising the full gameplay loop):
GODOT_BIN=<godot binary> ./tests/playtest/run-playtest.sh
CI runs both suites on every push/PR; tagging v* builds, signs, notarizes, & publishes releases automatically.