Infinite Survival
LiveAn endless wave-survival game written from scratch in C using Raylib, compiled to WebAssembly so it runs directly in the browser. Built as a way to internalise the systems most modern game engines hide.
- Role
- Solo developer & designer
- Timeline
- 2024 – present
- Stack
- C
- Raylib
- WebAssembly
- Game Dev
Play it in your browser
Embedded WebAssembly build. Click into the canvas to focus, then use the keyboard or gamepad to play. First load may take a few seconds while the WASM downloads.
The problem
Working in Unity and Unreal makes it easy to ship games without ever touching the layer that actually moves pixels around. I wanted a project where every line of code — input, physics, rendering, audio, memory — was something I had to design and own.
The approach
I picked Raylib because it gives you windowing, input, and a draw API but nothing else. From there I built up an entity system, a tick-based update loop, a simple AABB collision pass, asset loading, and a wave spawner. I deliberately kept dependencies minimal so I'd hit every fundamental issue myself.
Implementation highlights
- Hand-rolled entity update + render loop with delta-time scaling.
- Custom AABB collision pass and spatial partitioning for many enemies on-screen.
- Wave-spawner driven by a simple difficulty curve so runs scale up over time.
- Cross-compiled to WebAssembly via Emscripten for the embed on this site.
Outcome & lessons
The biggest takeaway was how much engines paper over: I now understand things like the game loop, fixed-vs-variable timesteps, and asset budgets at a level I never did before. The build is playable on the case-study page itself, and the codebase is the launchpad for future from-scratch experiments.
Want to chat about this work, collaborate, or just say hi? Reach out.