Rubble with weight, and rubble that stays

The lesson from the first attempt
In the earlier version of this game, rubble did not interact properly with the structures around it. It did not load them by weight, hit them with impact force, or crush what was under it. A lot of time had gone into chasing that. When Stage 1 of the engine closed on September 29, we put rubble weight into the next milestone, ahead of the work on running well on a throttled Mac. The plan was to write the tests that define weight first.
The engine at that point had a gap. A building’s load model took no outside loads. Standing pieces were fixed bodies that never felt debris landing on them. A cap added to stop fragments falling through the ground also made light rubble stronger than it is.
What weight means, as tests
The tests use a two-bay office whose floor slabs are designed to run at 35% of their capacity when the building is intact. Utilization is the share of capacity a piece is using.
| Test | Result |
|---|---|
| A 2 t pile on a slab, or a 65 kg drop | The slab stands |
| A 150 t pile on a slab | The slab breaks |
| 11 t of resting rubble | Raises the slab’s utilization by about half |
| A 30 t drop from 10 m | Breaks the floor |
| A roof bay falling onto the floor below | Takes that floor with it |
They were written before the weight code and all pass.
How weight reaches the structure
Resting bodies pass their weight down through the pile into the members under it, as outside loads in the structure’s load graph. An impact becomes a force on the member it hits, applied for one load wave (1/60 s). Crushing covers small pieces. A body ten or more times heavier than a fragment it lands on crushes that fragment to chips and dust once the force over 1/60 s exceeds the fragment’s compressive strength. In the tests, 20 t landing from 2 m crushes a 65 kg concrete fragment, and 1 t set down on it does not.
With weight on, scene 8’s office collapse brought down 834 members by 30 s, against 678 without it.
Rubble that stays
Debris disappeared from the viewer when the body count got high, so rubble looked temporary instead of part of the scene. The engine had been retiring small pieces after 3 s at rest, and the oldest resting pieces past a cap of 2,000 bodies at the high tier, 1,200 at medium and 600 at low. Small pieces are no longer retired at rest, and the caps became safety limits of 30,000, 20,000 and 12,000.
Keeping that many pieces is affordable only if resting pieces are nearly free, and they are not free by default. The physics library puts a pile to sleep only as a whole, and one rocking piece kept 450 bodies awake 25 s after the last detach in scene 8. The settler now freezes a body that has stayed within 1 cm and 0.005 rad for 2 s at the high tier, 1.5 s at medium and 1 s at low. A frozen body becomes immovable where it lies. A blast or a charge in its reach thaws it.
A frozen pile still presses on what it rests on, so it keeps its weight on the floors. The high tier’s collapse ran 36 s from first charge to last detach against 16.5 s, and brought down 1,234 members against 760.
What keeping it costs
| Measure | Result |
|---|---|
| Low tier, scene 10, every piece kept (323) against 10 live and 313 retired | 0.3 ms more graphics time at rest (3.99 against 3.70 ms p50), no physics cost |
| High tier, collapse window graphics, kept against retired | 5.32 against 5.39 ms p50, 5.94 against 6.78 ms p95 |
| 6,000 frozen pieces under 600 moving ones | About 0.13 ms more physics per step (0.344 against 0.215 ms p50) |
All three comparisons were run at full power. p50 is the typical step and p95 is the slow end, where 95% of steps are faster.
Pieces can still turn to dust. Fragments too small to matter are made as dust, and crushed fragments become chips. Every fragment the engine creates is tracked in a ledger that has to balance: created pieces equal live, chipped, consumed, retired and lost. Retirement now happens only past the safety limits.
How this post was made
- Drafted by
- A Claude Code session in the trilithon.games repository, October 10, 2026, working from the game's changelog, docs and tracker.
- What it did
- Drafted this post from the changelog, the brief and the architecture notes, and checked each number against them.
- Reviewed by
- Alex van Rossum,
On the roadmap: First collapse
Linear MIP2-154, MIP2-206, MIP2-223