🎲

Board Game Chaos Lab

Tabletop Physics
Preset:
Place:
πŸ’‘ Direct Action: Click & drag any meeple to launch them, or select a Place tool & click the felt. Status: Engine Active
πŸ”¬ Game Design Lesson & Causal Mechanics Modular Physics

These fictional layouts combine rigid-body tokens with driven spinners, random forces and sensors. Compare one input at a time. The chaos and motion indices summarize authored formulas; they do not measure game balance, physical entropy or a commercial game’s rules.

Treat the board as a model, then test one change

Which patterns come from the authored rules, and which measurements would you need for a real board game?

Compare three fictional layouts, change the bounce and gravity inputs, apply random dice forces, and place a spinner, spike or booster. The circular tokens use Matter.js rigid-body dynamics with authored dimensions and parameters. Character roles and the dungeon theme are decorative fixtures, not rules or gameplay reproduced from a named commercial game.

The displayed chaos and motion values are authored indices, not physical entropy or momentum. Density weights are not kilograms, and gravity inputs are not calibrated Earth-g units. Random forces, viewport geometry, simulation timing and manually driven obstacles affect outcomes. This sandbox does not establish game balance, catch-up fairness, real material properties or a winning strategy.

Try a worked example

The Scout’s stored restitution is 0.9. At chaos 0.85, its restitution is min(1, 0.9 Γ— 0.85) = 0.765; at chaos 0.1 it is 0.09. The engine combines a contacting pair using the larger restitution. For a hypothetical one-second snapshot with total token speed 10, two collision-start pairs and chaos 0.85, the chaos index is 10 Γ— 0.15 + 2 Γ— 0.4 Γ— 0.85 = 2.18 and the motion index is 10 Γ— 2.8 = 28.0. These are demonstration formulas.

Separate engine parameters from physical units

Matter.js 0.19.0 derives body mass from density and polygon area. This app passes density = 0.002 Γ— the role’s stored weight; it does not directly assign that weight as body mass. Different token radii also change area. The engine source documents restitution and friction as body parameters; values here are assumed rather than measured materials. Matter.js 0.19.0: body source

The app sets gravity direction y from the slider and scale to 0.001. The pinned engine treats direction and magnitude as separate components. Without a length/time calibration, the slider does not report an acceleration in Earth-g units. Spinners are rotated directly each engine update, while spikes apply random force and boosters set velocity; this is an actively driven sandbox. Matter.js 0.19.0: engine source

Read the displayed indices honestly

Each one-second UI refresh sums token speed. Chaos index = 0.15 Γ— summed speed + 0.4 Γ— collision-start pair count Γ— chaos input. Motion index = 2.8 Γ— summed speed. The collision value counts newly starting pairs in the last refresh interval, not individual impacts or all persistent contacts. The FPS badge is a status label, not a measured frame-rate counter.

Physical linear momentum uses mass and velocity and has direction. Multiplying an unweighted sum of speeds by 2.8 does not compute that quantity. Use the textbook reference to compare the physical definition with this intentionally simple motion index; do not interpret it as kgΒ·m/s or a conserved total. OpenStax: linear momentum

Know what changes and what stays

Changing chaos updates existing token restitution and the displayed index weight. The initial chaotic preset’s spinner speed is set when the board loads; changing chaos alone does not update that spinner speed. Dice applies random forces to tokens that have not escaped. Reaching the goal sensor marks a token escaped but does not remove it or prevent dragging. Any token touching the dungeon switch can open the gate; no role-specific cooperation rule is implemented.

Reset Meeples replaces the four tokens while retaining the layout, custom objects, slider values and collision history. Selecting a preset rebuilds the layout and removes custom objects while retaining slider values and accumulated collision history. Resizing the board width by more than 20 pixels also reloads the current preset. Clearing the ledger changes visible messages, not the engine or lifetime collision total.

Use the export as a snapshot

Export samples the current positions, velocities, escaped flags, preset, input values and accumulated collision-start pair count. The tracked obstacle count includes unique live custom objects, spinners and gates; it is not a count of every ramp, wall, bumper, sensor or body in the world. A custom spinner must count once, and a cleared custom object must disappear from that count.

Opening the modal freezes the JSON snapshot while physics continues. Copy and Download use that same text even if tokens have moved. Reopen it for a new sample. It omits custom-object coordinates, the full board geometry, dice outcomes, event messages and entropy/motion indices. It cannot restore a complete session or reproduce a random run.

Sources and further reading
Super generates helpful tools and automates fact-checking across the internet proactively. If you enjoyed this tool, build your own with Super and share it with a friend.