feat: module 09 turn pipeline
Module 9 lesson, scenarios, tests (8, both tracks), reference engines (TURN phase list, conversion, content-registered hazards, win/lost), WEAK Expansion Drop, harness.md M9 semantics, research notes (WEAK page, baba-is-auto Game::MovePlayer, X IS NOT X placement reading). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e339788e64
commit
1f3359cfe2
68 files changed
+7642
No files matched your search
@@ -27,6 +27,7 @@ Researched 2026-10-28. Every behavioral claim below cites a page that was actual
|
||||
- `FLOAT` row: "Partial | Separates `OPEN`/`SHUT` interactions by float layer. It is not applied to the other overlap/effect properties." (This differs from the official game. See g.)
|
||||
- ARCHITECTURE.md: "Parse horizontal and vertical `NOUN IS NOUN/PROPERTY` rules from text tiles." / "Text tiles are movable blockers during movement checks, even when they do not have an explicit `PUSH` rule." / "Rules are rebuilt after every move, so moving text can immediately change the active rule set."
|
||||
- Also loaded (2026-10-29, for Module 8): `Sources/baba-is-auto/Games/Game.cpp` at commit 2305a3d (raw). Movement is two-phase. `Game::CanMove` (line 1756) checks the move recursively before anything changes: "// Check boundary" returns false off the map, then STOP, then whether the pushed objects can move. `Game::ProcessMove` (line 1865) and `Game::ProcessPush` (line 1910) then move the objects. PUSH, STOP, text and OPEN/SHUT are branches inside `CanMove`.
|
||||
- Also loaded (2026-10-29, for Module 9): the same `Game.cpp` at commit 2305a3d (raw). `Game::MovePlayer` (line 495) is the whole turn as a fixed list of calls: `ProcessPlayerMove(dir)`, `ParseRules()`, `ProcessDirectionProperties()`, `ProcessMoveProperty()`, `ParseRules()`, `ProcessTransformations()`, `ParseRules()`, then `ProcessSink()`, `ProcessWeak()`, `ProcessHotMelt()`, `ProcessDefeat()`, `ProcessOpenShut()`, then `CheckPlayState()` and a last `ParseRules()`. Each hazard function collects ids over the whole map and removes them after the scan. `CheckPlayState` (line 2160) sets `PlayState::WON` when a YOU instance stands on a tile with a WIN property, and `PlayState::LOST` when no YOU instance is found. None of the hazard functions checks FLOAT, consistent with its `rule-language.md` FLOAT row.
|
||||
- **Course use:** a good example of how to represent rules as data and pin behavior with tests. Do **not** use it as an authority on official game semantics. It does not implement IS NOT for properties or nouns, it hard-codes text as pushable, and its FLOAT is partial.
|
||||
|
||||
### 2. Game Developer: "Designing Baba Is You's delightfully innovative rule-writing system"
|
||||
@@ -98,6 +99,7 @@ All pages were loaded as wikitext via `https://babaiswiki.fandom.com/api.php?act
|
||||
| SINK | loaded | "SINK is a property that causes an object to destroy all overlapping same-float objects along with itself when there is at least one overlapping object." / "A stack of two or more SINK objects will mutually SINK each other." / "SINKing order: Overlapping objects are destroyed (unless SAFE) in priority order, then the SINK object itself." / "SINK has no movement check, only an overlap check." |
|
||||
| DEFEAT | loaded | "If a DEFEAT object intersects with or is a YOU (or YOU2 or 3D), the YOU object will be destroyed." / "If an object is both WIN and DEFEAT, then DEFEAT takes priority and the YOU object is destroyed." / "if a square contains both a WIN object and a separate DEFEAT object, then DEFEAT takes priority." |
|
||||
| WIN | loaded | "WIN is a property that causes the level to be won if a same-float YOU YOU2 3D object overlaps the object." / "If an object is both WIN and YOU YOU2 3D, the level is won." / "WIN is checked very late in the process: any other removal of either object involved will occur first and prevent WIN from WINning." |
|
||||
| WEAK (loaded 2026-10-29, for Module 9) | loaded | "WEAK is a property that makes an object be destroyed if it overlaps any same-float object or collides with any object." / "If a WEAK object overlaps any same-float object, it is destroyed. ** Multiple same-float WEAK objects overlapping each other are all destroyed. ** Destruction by WEAK happens after SINK BOOM, but before other overlap checks." / "If a WEAK object attempts to move into a solid object and fails (e.g. STOP PULL or blocked PUSH), regardless of float levels, it is destroyed." / "If an object attempts to move into a same-float WEAK solid object that is not PUSHable, the movement is not blocked." |
|
||||
| FLOAT | loaded | "EAT and properties BONUS BOOM DEFEAT END HOLD HOT MELT OPEN SHUT SHIFT SINK TELE WEAK WIN require that the interacting objects are both FLOAT or both not FLOAT." / "FLOAT has no effect on collision-check properties such as STOP PUSH PULL SWAP, except OPEN SHUT." / "Whether an object is FLOATing or not updates once per turn, or at object creation (including transforms)." |
|
||||
| Float levels | loaded | "It does not affect ON or collision checks from PULL PUSH STOP SWAP." |
|
||||
| NOT | loaded | "When added after a verb it makes the corresponding rule not apply, overriding other instances of the rule it disables. ** ROCK IS NOT PUSH makes ROCK NOT PUSHable, even if ROCK IS PUSH exists elsewhere." / "ROCK IS NOT GRASS disables ROCK IS GRASS." / "X IS NOT X makes an object disappear, similarly to X IS EMPTY but with particles. ... As it negates X IS X, it enables other X IS Y rules, which can result in transformation in addition to the disappearance." / "NOT negates itself before negating anything else, so ROCK IS NOT NOT PUSH makes ROCK IS PUSH" |
|
||||
@@ -160,6 +162,7 @@ Inference status: this follows directly from the documented order. The wiki give
|
||||
- It removes X: "makes an object disappear".
|
||||
- It negates X IS X: "As it negates X IS X, it enables other X IS Y rules, which can result in transformation in addition to the disappearance."
|
||||
- **X IS NOT Y** blocks only the specific conversion X IS Y.
|
||||
- **When X IS NOT X removes X (reading, added 2026-10-29 for Module 9).** No source read gives X IS NOT X its own place in the turn. The Order of Operations page lists "object transformations via IS" in the conversion step, and the NOT page ties the disappearance to the transformation it enables ("which can result in transformation in addition to the disappearance"). The course deletes X in its conversion step, with the conversions.
|
||||
|
||||
### d. TEXT IS PUSH
|
||||
- **Yes, it is a built-in base rule.** Rule page: "The following rules are enabled by default, even though there isn't any text saying so. TEXT IS PUSH, LEVEL IS STOP, CURSOR IS SELECT". The PUSH and TEXT pages say the same.
|
||||
|
||||
Reference in new issue
Block a user