
Hey fellow game developers!
For OBOL: The Cursed Coin Pusher, we took on an unusual engineering challenge: shipping the exact same 1890s occult coin-pusher roguelike with 1:1 deterministic physics, camera, shader, and procedural audio parity across three engines: Three.js WebGL 2, Godot 4.7.2 (Vulkan Forward+), and Unity 6 (URP + PhysX).
1. Solving Multi-Layer Coin Stacking at 240Hz (dt = 1/240s)
At standard 60Hz, a reciprocating hydraulic shelf shoving 85+ overlapping cylinder tokens against a back stopper wall causes severe Baumgarte popcorning and tunneling. By stepping all three physics engines at a fixed 240Hz substep (Time.fixedDeltaTime = 1f/240f in Unity 6; physics_ticks_per_second = 240 in Godot 4.7; 4x substep impulse solver in WebGL 2) with 3-layer overburden friction damping, coins hang up to 55% over the front brass lip before cascading.
2. 25-Category Zero-Sample Circular Plate Modal Synthesizer
Instead of bundling megabytes of static .wav files that comb-filter during 40-coin avalanches, we synthesize all 25 metallic & mechanical foley categories in real time using 4-mode Chladni circular plate eigenfrequencies (f0 * [1.00, 2.14, 3.41, 4.92]) routed through an iron-booth convolution impulse response.
Live Builds & Technical Breakdown
- Itch.io Devlog & Project Page: /blog/1764796/obol-the-cursed-coin-pusher-official-v10-launch-devlog-1-5-diegetic-1890s-camera-views-3d-finger-guillotine (https://ankh-studio.itch.io/ankh-browser-desktop-shipping-kit)
- Instant Browser Reference Build (WebGL 2): https://saaalahy933-blip.github.io/obol-cursed-coin-pusher/
- 3-Engine Code & Shader Architecture Gist: https://gist.github.com/saaalahy933-blip/1422a2780747bb343c74dada8b212c88
Which engine stack are you targeting for your current project, and how do you handle deterministic physics across web and desktop builds?