Fast-paced multiplayer top-down shooting game for js13k 2022 competition
Select room, share the link and wait friends to play:
- Move Mouse to aim and look around
- Push Mouse button to shoot
- Use
W A S D
/↑ ← ↓ →
to move - Hold
Shift
to slow down moving - Press
E
to drop the weapon - Press
Space
to jump
- Use Left Joystick to walk-run-jump
- Use Right Joystick to aim-shoot (Move around aim-shoot zones to trigger some weapons like Pistol)
- Use
DROP
button to drop the weapon
At spawn each Player or NPC has 10 hit points.
- Player kills neutral NPC to gain +1 score.
- Player kills another Player to gain +10 scores.
Kill opponents 💀 | 👹 | 🤡 | 🤖 | 🎃 | 🦝 | 🐙 | 🐰 | 🦌 | 🐺 | 🐵 | 🦊 | 🐭 | 🦍 to gain scores
Kill NPC 🍅 | 😐 | 🐷 to get scores
Destroy objects 🛢 | 📦 | 🪦 to get items
- ❤️ Heart: pick to restore 1
hp
- 🔪 Knife (melee)
- 🪓 Axe (melee)
- 🔫 Pistol (trigger)
- 🖊 Machine-gun (auto)
- ️✏️ Heavy machine-gun (auto)
- 🪥 Shotgun (bouncing, scatter)
- ⛏ Crossbow (high velocity)
- 🔌 Plasma-gun (bouncing, auto)
- 🧵 Rail-gun (piercing)
- Good, low-latency network connection is required for each playing client
- Fast mobile device or desktop to not lag other clients
NodeJS
16 or higher is required for server- WebAudio
AudioContext
support is required (available from Safari iOS 14.5, April 2021) - WebGL context and instanced arrays ANGLE extension are required
- Modern JS syntax support
- Checked in the latest Chrome, Safari, Firefox on iOS, Android and Mac.
Code for Music generation in runtime created by author. Some instrument samples are picked from ZzFXM example song Depp
Emoji Font Twemoji Mozilla is used for cross-platform emoji rendering. Game is able to work without e.ttf
file, but some icons are incorrect rotation angle, or different at all. But game should be playable anyway.
2D graphics rendering is started from js13k-2d and highly rewritten for what I need.
Sound Effects - ZZFX.
Shaders are minified in TypeScript source code by GLSLX - online minifier
- html-minifier minifies
index.html
- esbuild creates bundle from TypeScript source-code
- Merge and rename properties which are non-overlapping in scope of Type.
- terser is used to minify and mangle javascript files
- Rehash properties for selected Web API classes (
WebGLRenderingContext
,CanvasRenderingContext2D
,AudioContext
, etc) - Pack client with RoadRoller is used for final compression
- Zip with AdvanceCOMP
npm i
npm run build --zip
npm run start
Navigate to localhost:8080
Use npm run build --debug
to generate debug.js
and index4.html
/ debug4.html
to enable testing 4-players on a page.