diff --git a/docs/rewards-learning.md b/docs/rewards-learning.md index b5869db..63b0d54 100644 --- a/docs/rewards-learning.md +++ b/docs/rewards-learning.md @@ -121,7 +121,8 @@ Indigo Plateau's rooms. Not the forest, a cave, the Underground Path or Vermilio 1. *the fly opened*: on the last sample before the font bit (`wFontLoaded` bit 0) rose, the fly had the joypad -- no `wJoyIgnore`, no simulated input, no scripted movement -- was standing still (`wWalkCounter` zero, the only state the overworld reads A in) and stood where it stands now. A - script's text opens with the joypad taken, or on the frame a step onto a trigger tile ends; + script's text usually opens with the joypad taken; one opened by a map script the frame after a + step ends can still look opened by the fly, and is then held to rule 2 (below); 2. *is with the thing in front of it*: `DisplayTextID` copies its argument into `wSpriteIndex` -- a sprite slot up to `wNumSprites`, or a text id -- and the sprite must stand on the tile the player faces (or one further, across a counter, on a tileset that has counter tiles, which is @@ -281,7 +282,12 @@ press. Nothing in the adapter presses A, chooses when, or tells the fly who is t read out of WRAM after a conversation the fly's own buttons -- or the macro the mushroom body chose -- opened and finished, and it is once per person or sign for the life of the run, so the thing that is learned is "the people in a building are worth a visit", not "press A". It is also why the -rule demands evidence that the fly opened the box: text a script started pays nothing. +rule demands evidence that the fly opened the box. That evidence is not proof: a map script runs +one frame after a step ends and may open text while the fly is still, controllable and on the same +tile. Such text pays only if it names the person or sign the fly is facing, once per key; in the +early game none can (checked: the museum ticket man, the Route 22 and Route 5 guards, Viridian +Mart, Oak's Lab), and a few late ones can once each (the Fighting Dojo master, the Elite Four +after their battles). Review of 2026-09-23. The catalog also includes catches. The honesty panel's copy is not data-driven from the catalog -- `apps/stage/src/lib/schedule.ts`'s rotating card is four written lines and lists no kinds -- so diff --git a/services/flysim/crates/flybrain-gb/src/pokemon_red/engage.rs b/services/flysim/crates/flybrain-gb/src/pokemon_red/engage.rs index cb42906..8d2acc7 100644 --- a/services/flysim/crates/flybrain-gb/src/pokemon_red/engage.rs +++ b/services/flysim/crates/flybrain-gb/src/pokemon_red/engage.rs @@ -148,8 +148,10 @@ impl TalkWatch { /// (`wFontLoaded` bit 0 rising) the fly had the joypad -- no ignored buttons, no simulated /// input, no scripted movement ([`state::controllable`]) -- was standing still /// (`wWalkCounter` zero, which is the only state the overworld reads A in) and stood on the - /// tile it is on now. A script's text opens with the joypad already taken, or on the frame - /// a step onto a trigger tile ends; neither is `ready`. + /// tile it is on now. Most script text opens with the joypad already taken, and is not + /// `ready`; a map script that runs the frame after a step ends can open text while the fly + /// is still `ready`, so it pays only if rule 2 names the thing in front (none in the early + /// game; the Fighting Dojo master and the Elite Four once each). /// 2. **It is with the thing in front of the fly.** `DisplayTextID` copies its argument into /// `wSpriteIndex` once the font is loaded ([`ARGUMENT_SETTLED`] has the timing, and why /// the byte is read only once it has changed or settled), in the bottom dialogue box --