Inspiration

The League WASM Game is born from a mix of classic MOBA aesthetics and modern survival roguelike mechanics.

  • League of Legends: The top-down isometric camera, character-centric combat, and aesthetic are heavily inspired by modern MOBAs.
  • Vampire Survivors: The "survive for a set time" mechanic and the escalating wave-based enemy spawns take cues from the popular "bullet heaven" or "horde survival" genre.
  • Bevy Engine: The project serves as a demonstration of the power of the ECS (Entity Component System) architecture in Bevy 0.15.

What it does

League WASM Game is a high-performance, browser-based survival game. Players select a character and must survive against waves of enemies for 5 minutes. It features:

  • Responsive top-down combat and movement.
  • Real-time 3D rendering using PBR (Physically Based Rendering) in the browser.
  • A seamless loading experience for 3D assets.

How we built it

The project is built using a modern Rust-based tech stack:

  • Bevy 0.15: A high-performance ECS-driven game engine.
  • Rust: For memory safety and performance.
  • WebAssembly (WASM): To run the game at near-native speeds in the browser.
  • Trunk: To manage the WASM build pipeline and asset bundling.
  • wasm-opt: To optimize the binary size and ensure compatibility with modern WASM features.
  • Nginx & Docker: For containerized deployment and efficient asset serving.

Challenges we ran into

  • WASM Feature Compatibility: Configuring wasm-opt to handle modern instructions like bulk memory operations and nontrapping float-to-int conversions emitted by the Rust compiler.
  • Asset Rendering: Ensuring PBR materials and GLTF models rendered correctly when using a minimal Bevy feature set to keep binary size small.
  • Visibility System: Navigating the changes in Bevy 0.15's visibility propagation system to ensure all 3D assets appeared as expected.

Accomplishments that we're proud of

  • Successfully deploying a Bevy 0.15 game to WASM with full PBR support.
  • Achieving a smooth frame rate in the browser using a pure Rust ECS.
  • Creating a robust build pipeline that handles complex WASM optimizations automatically.

What we learned

  • Deep understanding of the Bevy 0.15 API and its ECS architectural improvements.
  • Advanced configuration of the WASM toolchain, specifically wasm-opt and Trunk.
  • Best practices for serving large 3D assets efficiently over the web using Nginx and gzip.

What's next for League Wasm Game

  • More Characters & Abilities: Expanding the roster with unique playstyles.
  • Progression System: Adding in-game upgrades and experience points.
  • Enhanced Environment: Implementing more dynamic terrain and interactive map elements.
  • Sound & VFX: Adding immersive audio and particle effects.

Built With

Share this project:

Updates