ZomboidWeb / History

Progress history

From 6 to 57 frames per second

The port started on CheerpJ, a Java runtime for the browser, then moved to ahead-of-time WebAssembly. Numbers are from the development PC (RTX 5090) in headless Chromium; early and late runs used different scenes, so treat them as orders of magnitude.

In-world frame rate

10-14 CheerpJ6 10-15 CheerpJ10 10-16 WebAssembly43 10-17 WebAssembly57
CheerpJ (Java runtime in the browser)WebAssembly (TeaVM)

World load time

10-14 CheerpJ430 s 10-15 CheerpJ240 s 10-15 WebAssembly85 s

Milestones

  1. The real game reaches its main menu and a world in the browser

    CheerpJ runs the game's Java. Native libraries replaced: lighting ported to JavaScript, the population manager to Java, polygon clipping bridged to WebAssembly libraries, SQLite on sqlite-wasm, OpenGL translated to WebGL 2. About 6 fps in the world.

  2. CheerpJ tuned, then the WebAssembly build

    A pathfinder rebuilt every frame was the biggest CheerpJ cost: 9 to 10 fps, world load down from about 430 to 240 seconds. The same game compiled ahead of time with TeaVM loads a world in 85 seconds and draws about five times as many frames, and becomes the default.

  3. Bug pass

    Frozen characters (a missing text-collation class stopped every animation group loading), a hang when quitting to the menu, saves that never stored the player, a 55-second freeze at start-up (first screen after 30 to 48 seconds instead of 101 to 124), sitting and resting, and starts from other computers.

  4. Frame-rate pass

    The interface was redrawn every frame; it now redraws 20 times a second, the frame cap rose from 60 to 240, and string comparisons got faster. Walking went from 45 to 57 fps, standing from 54 to 75.