Skip to main content

← Back to projects

Infinite Survival

Live

An 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.