Добавить первую волну мира Physics

This commit is contained in:
2026-08-19 15:53:13 +03:00
parent f53e068cb1
commit 243da9185e
21 changed files with 647 additions and 28 deletions
+72
View File
@@ -683,6 +683,78 @@ LevelID="foundations.foundation-final", WorldID="foundations"
corpse bridge, pressure, toggle-controlled ferry, timed AND-door и collectible;
каждая смерть и реальная опора на moving platform наблюдаются ботом.
## Уровень 31 — `Weight Class`
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения;
после них restart возвращает сдвинутый объект и Door в исходное состояние.
**Ожидаемые и доказанные смерти:** `0`.
```text
LevelID="physics.mass-basics", WorldID="physics"
→ игрок толкает COUNTERWEIGHT mass=3 с x=650 на pressure x=940..1190
→ requiredMass=3 открывает mass-door без присутствия игрока на плите
→ input отпускается, Door остаётся открытой только массой объекта
→ игрок перепрыгивает противовес, забирает cache x=1580
→ проходит Door x=1370 и достигает goal без смертей
→ restart возвращает object x=650,y=780, закрытую Door и чистый input/cache
```
**Контракт:** это первый production-уровень Physics и отдельное обучение
`weighted-object`; pressure resolver не различает player/corpse/object по типу.
## Уровень 32 — `Stack Order`
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
**Ожидаемые и доказанные смерти:** `0`.
```text
LevelID="physics.stack-order", WorldID="physics"
→ BOX x=650,y=800 поддерживает ROCK x=700,y=720
→ ROCK поддерживает ICE_BLOCK x=760,y=640; solver сохраняет обе опоры
→ игрок отдельными jump edge поднимается на нижний и верхний объекты
→ со стопки прыгает на gallery x=1030,y=600 и забирает cache x=900,y=555
→ по верхней галерее достигает goal x=2260,y=490 без смертей
```
**Контракт:** vertical object/object contact выбирает первую пересечённую опору
снизу, не телепортирует восходящие или не пересекающиеся объекты и не меняет
существующую player physics.
## Уровень 33 — `Launch Window`
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
**Ожидаемые и доказанные смерти:** `1`; saw launch сохраняет одно тело.
```text
LevelID="physics.launch-window", WorldID="physics"
→ первый доброволец входит в saw x=600 и получает impulse (700,-420)
→ следующий начинает прыжок до saw и отдельным edge очищает доставленное тело
→ у нижней фазы садится на lift x=1350,y≈790
→ snapshot подтверждает реальную moving-platform support
→ едет до y≤430 и прыгает на gallery x=1750,y=500
→ забирает cache x=2050 и достигает верхнего goal с deaths=1, corpses=1
```
**Контракт:** уровень сочетает уже обученный saw-launch с вертикальной движущейся
опорой; бот наблюдает смерть, доставленное тело, посадку и верхнюю фазу отдельно.
## Уровень 34 — `Press Cycle`
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
**Ожидаемые и доказанные смерти:** `1`; crushed body сохраняется на pressure.
```text
LevelID="physics.crusher-rhythm", WorldID="physics"
→ первый доброволец погибает в CRUSHER x=680..850
→ crushed body становится низкой retained mass на pressure x=650..880
→ следующий наблюдает active и inactive фазы полного 4.5 s цикла
→ одним новым jump edge пересекает resting press без второй смерти
→ забирает cache x=1320 и достигает goal с deaths=1, corpses=1
```
**Контракт:** pressure фиксирует результат жертвы, а timing остаётся обязательным:
каждый шаг fail-fast отклоняет вторую смерть и не перезапускает цикл.
## Проверки, следующие из графов
1. Сохранять полный integrated device-regression: intended route принятых уровней по три раза и отдельный recovery route уровня 8.