Team up with friends in this intense multiplayer survival game. Gather resources, craft weapons, build defenses, and fight waves of zombies that grow stronger each night.

Latest Updates
v0.0.15LATEST
2026-01-03

⚡ Performance

  • Entity sorting optimization: Replaced O(n log n) sort with O(n) bucket sort using the 8 fixed Z-index layers - eliminates per-frame sorting comparisons for 50-200 entities
  • Darkness rendering optimization: Replaced ~2,500 individual fillRect calls with single ImageData + drawImage - eliminates per-tile string allocations and ~10,000 Math.round() calls per frame
v0.0.14
2026-01-03

✨ Features

  • Added IP-based connection limiting - players are now limited to 2 concurrent connections per IP address to prevent abuse from multiple browser tabs
v0.0.13
2026-01-03

⚡ Performance

  • Reduced network bandwidth by ~90% for field names - entity field names are now encoded as uint8 IDs instead of full strings (e.g. 'inputInventoryItem' 20 bytes → 1 byte)
v0.0.12
2026-01-01

⚡ Performance

  • Reduced memory usage by converting SpatialGrid to use sparse/lazy cell allocation - Maps are now only created for cells that contain entities instead of pre-allocating for the entire map
v0.0.11
2026-01-01

✨ Features

  • Campfires can now be crafted using 5 wood

🐛 Bug Fixes

  • Fixed wood and cloth not being pickable - items now properly go into inventory when collected instead of just disappearing
v0.0.10
2025-12-28

✨ Features

  • Torches now expire and get deleted after 2 minutes
  • Campfires now deal 2 damage per second to living entities that step on them
  • Added double barrel shotgun weapon - fires 2 pellets per shot instead of 3, uses the same shotgun ammo
  • Replaced heart icons with a health bar in the HUD - health now displays as a red progress bar with a heart icon, turning darker red when health drops below 30%
  • Mute button (N key or click) now only mutes background music while keeping sound effects playing - button icon changed from speaker to music note emoji

🐛 Bug Fixes

  • Fixed bear traps not damaging living entities - traps were triggering on non-living entities like items and failing to snare anyone
  • Fixed bear trap snare effect breaking player animations - snared entities now properly freeze in place for 1.5 seconds without animation glitches
v0.0.9
2025-12-27

🐛 Bug Fixes

  • Fixed arrows always pointing in the same direction instead of the direction they were shot

🔧 Refactoring

  • Centralized all entity sprite assets into single source of truth (assets-config.ts) - removed asset definitions from weapon-configs, item-configs, character-configs, environment-configs, projectile-configs, and decals-config
  • Added AssetKey enum for type-safe asset identifiers with IDE autocomplete support
  • Removed duplicate weapon entries from item-configs.ts - weapons now only store attachment config for positioning
  • AssetManager now generates asset map directly from ASSETS_CONFIG instead of iterating through entity registries
v0.0.8
2025-12-25

✨ Features

  • Players now spawn with randomized character skins - each player gets a unique visual appearance from 6 available skin variants
  • Added /coordinates command to display your current position in the game world
  • /tp command now supports teleporting to other players by name (e.g., /tp pepe) in addition to coordinates
  • Weapons now dynamically rotate to follow your aim direction, providing improved visual feedback and more responsive gameplay - ranged weapons (pistol, shotgun, ak47, bow, rifles, grenade launcher, flamethrower, grenades, molotovs) rotate smoothly with your cursor
  • Weapons now render behind the player when aiming upward and in front when aiming downward for proper visual layering
  • Added weapon recoil animation with spring physics - weapons now visually kick back when fired and smoothly return to rest position
  • Added subtle weapon sway during movement - weapons now move slightly while walking for more realistic feedback
  • Added muzzle flash particle effect for ranged weapons - bright flash appears at the weapon tip when firing

🐛 Bug Fixes

  • Fixed molotov cocktail crafting - molotov cocktails can now be crafted with 1 gasoline and 1 cloth
  • Fixed remote players not displaying correct facing direction - remote players now properly face the direction they're looking instead of using local player's facing
  • Fixed remote players not displaying correct character skin - each player's unique skin variant is now properly synchronized across all clients
  • Fixed bug where other players would sometimes appear as "Unknown" with incorrect skins - player names and skin indices are now properly deserialized from buffer updates
  • Fixed bow playing pistol sound when shooting - bow now correctly plays its bow_shot sound effect
  • Fixed grenades rendering as flamethrower ammo - grenade projectile asset key was conflicting with grenade item asset, causing wrong sprite to display

🔧 Refactoring

  • Centralized all crafting recipes into dedicated recipes-config.ts file - recipes are no longer scattered across item-configs.ts and weapon-configs.ts
v0.0.7
2025-12-24

✨ Features

  • /spawn command now accepts an optional amount parameter (e.g., /spawn wall 20) to spawn multiple entities at once, with a maximum limit of 100

🔧 Refactoring

  • Migration Phase 3: Removed dotenv dependency in favor of Bun's native .env file support
  • Environment variables now load automatically without external libraries
  • Migration Phase 4: Migrated from Vitest to Bun's native test runner
  • Removed vitest dependency and configuration files from game-server and game-client packages
  • Tests now use bun:test imports instead of vitest
  • Migration Phase 5: Replaced tsup with Bun's built-in bundler
  • All build scripts now use 'bun build' command for faster build times
  • Removed tsup and tsx dependencies in favor of native Bun tools
  • Migration Phase 6: Updated all Dockerfiles to use Bun 1.3.5 images
  • Created bunfig.toml for workspace hoisting configuration
  • Updated docker-compose.yml to work with Bun runtime
  • Migration Phase 7: Replaced uWebSockets.js with Bun's native WebSocket implementation
  • Created BunServerAdapter and BunSocketAdapter using Bun.serve() API
  • Removed uWebSockets.js dependency - game server now uses Bun's native WebSocket built on top of uWebSockets
  • Full backward compatibility maintained with existing IServerAdapter and ISocketAdapter interfaces

⚡ Performance

  • Reduced dependency count by removing dotenv, vitest, tsup, tsx, and uWebSockets.js packages
  • Faster test execution with Bun's native test runner
  • Significantly faster build times with Bun's native bundler (game-server builds in ~126ms, biome-editor-server in ~1033ms)
  • Native WebSocket implementation provides excellent performance while eliminating native module compilation
v0.0.6
2025-12-24

✨ Features

  • Crafting panel can now be toggled on/off by pressing the 'C' key with smooth fade in/out animations
  • Crafting panel can be closed with the ESC key
v0.0.5
2025-12-20

🔧 Refactoring

  • Unified animation system: All sprites now use AnimatedSpriteLayout<TAnimations> with type-safe animation names
  • Added Animator class for managing sprite animations with play(), update(), and frame tracking
  • Animation enums (PlayerAnimations, DirectionalAnimations) provide compile-time type safety
  • Helper functions: singleSprite(), stripSprite(), directionalExplicit(), createAnimatedLayout()
  • Animation specs support: frames, fps, loop, and flipFrom (for mirrored animations)
  • Simplified asset.ts to single createAssetsFromAnimatedLayout() function
v0.0.4
2025-12-20

🔧 Refactoring

  • Created unified sprite-layout.ts module with layout types: single, strip, directional-horizontal, directional-grid, directional-explicit, explicit
  • All entity registries now use SpriteLayout system exclusively
  • All config files updated to use helper functions: singleSprite(), stripSprite(), directionalHorizontal(), directionalGrid(), directionalExplicit(), explicitFrames()
  • Each sprite frame can have individual x, y, width, height dimensions
  • Simplified asset.ts by removing duplicate asset generation functions
v0.0.3
2025-12-13

✨ Features

  • Trees can now be destroyed by grenades, molotov cocktails, landmines, flamethrowers, fire, melee weapons, and other explosions
  • Trees drop wood when destroyed
  • Fire now spreads randomly 2-6 times in random directions
  • Destructible entities now vibrate when taking damage (trees, walls, crates, car, survivors, zombies)
  • Added hit sound effect that plays when any destructible entity receives damage
v0.0.2
2025-12-06

✨ Features

  • Added weighted random loot drop system - enemies, crates, gallon drums, and survivors now drop items based on configurable drop chances
  • Players now respawn at random grass positions across the map instead of fixed locations
v0.0.1
2025-11-23

✨ Features

  • Players now automatically respawn 2 seconds after death - game never ends
  • Players spawn and respawn with only a torch in their third inventory slot (removed initial knife, pistol, and bullets)
  • Removed game over condition when car is destroyed - game continues indefinitely
  • Replaced wave system with simple periodic zombie spawning - random zombie spawns every 30 seconds
  • Zombie spawn limit: maximum 10 zombies per player on the map
  • Implemented day/night cycle: Day lasts 10 minutes, Night lasts 5 minutes, repeating
  • Day/night cycle features smooth incremental darkness transitions instead of instant switches
  • Day/night cycle is synchronized across all players and persists across game restarts

🐛 Bug Fixes

  • Fixed pathfinding crash when collidablesLayer has undefined rows
  • Fixed bullet projectiles not being visible - bullets were being created with NaN positions due to incorrect position parameter handling
  • Fixed player getting stuck after shooting - recoil system now adds to current velocity instead of replacing it, and player input can override recoil to prevent getting stuck
  • Fixed mouse shooting bug where clicking once would cause continuous shooting until bullets ran out - added releaseFire() call on mouseup event

🔧 Refactoring

  • Removed car health bar UI component
  • Removed car repair feature and all associated event handling
  • Removed game over detection when all players die
  • Removed entire wave system (wave numbers, wave states, preparation phases, wave events)
  • Simplified game state to remove wave-related data
  • Cleaned up wave-related code from server, client, and shared packages
  • Removed merchant feature completely - deleted merchant entities, UI panels, event handlers, configs, and all related code
  • Removed coin system entirely - deleted coin entities, coin pickup events, coin UI panels, coin spawning from zombies, and coin tracking from ResourcesBag extension
  • Simplified player spawn inventory - players now spawn with only a torch instead of multiple items
v0.0.0
2025-11-23

🔧 Refactoring

  • Project forked from open source project 'Dust'