Skip to content
Devlog

Rubble with weight, and rubble that stays

Broken concrete pieces from a collapse resting on the grass, September 29

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.

Provenance

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