Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

[Devlog] Building a 240Hz Rigid-Body Coin Pusher + Zero-Sample Brass Plate Audio Synth (OBOL)

A topic by ANKH Studio created 3 days ago Views: 74
Viewing posts 1 to 1

240Hz Overhang Cascades & 5 Secret Board Fusions

Hey fellow devs!

While building OBOL: The Cursed Coin Pusher (an 1890s occult debt-rigging roguelike where you rig a mechanical coin pusher to pay off an animatronic Collector before a 3D Finger Guillotine takes your digits), we had to solve two gnarly technical problems:

  1. How do you make stacked coins hang 45% off a brass lip without jittering or sliding like hockey pucks?
  2. How do you play 70 metallic coin collisions per second during a cascade without .wav sample machine-gunning?

Here is a breakdown of how we solved both across our WebGL 2, Godot 4.7.2, and Unity 6 builds!

1. Why Coin Pushers Need a 240Hz Sub-Stepped Solver (dt = 1/240s)

  • Ratcheted Shelf-to-Pusher Friction: Coins on the upper shelf inherit 100% of the pusher bar's forward stroke while asymmetric friction (mu_pusher = 0.52 vs mu_shelf = 0.28) compresses the bed on the backstroke.
  • Overhang Torque Counter-Balance (Z = +3.35): Downward normal weight from overlapping rear coins counteracts tipping torque at the lip-allowing multi-coin overhang bridges to teeter on the edge.
  • Live On-Board Mythic Fusions: When 3 matching tokens cluster within d < 1.15 on the moving shelf for 0.65s, lightning merges them live into a giant 1.45x-radius Mythic Medallion.

2. Zero-Sample Euler-Bernoulli Brass Plate Synthesis

Zero-Sample Physical-Modeling Metal Plate Synthesis

Instead of shipping .wav files, OBOL uses 0 external audio samples. All 25 sound categories are generated procedurally using inharmonic circular plate modes ([1.00, 2.08, 3.41, 4.96, 6.72]) scaled by coin mass and collision velocity from the 240Hz solver.

Test the Solver & Synth in Your Browser

Happy to answer any questions about the 240Hz constraint solver, WebAudio/PCM modal synthesis, or how we kept 100% mechanical parity across WebGL 2, Godot 4.7, and Unity 6!