Entry 317
Ryu Books begun, a voice row outside its table, condition effects on the flute and on a foe struck with the party gone
Revisited later. Something claimed here was corrected by "A Ryu Book was never opened: its use was a bare request, and the Key Items refuse books outside towns".
This entry answers the question left open by Party members' skill words: not reproduced, the port's path is the game's.
Filescrates/piney-fieldui/src/book/mod.rscrates/piney-fieldui/src/book/pages.rscrates/piney-data/src/tables/book.rscrates/piney-audio/src/driver.rscrates/piney-battle/src/enemy_motion.rscrates/piney-world/src/combat/mod.rscrates/piney-game/src/area.rscrates/piney-game/src/world.rs
This was the first chunk of the sweep of open questions left by the week's fixes. The agent working on it stopped partway (an account limit). The rest was finished by hand to a state that builds and passes, and is recorded here as it stands. All addresses are INF.
A skill's word outside its table (300)
skillVoicePlay (main 0x0017e350) reads its row from the character's table
with no bound. A row past the table reads whatever lies there in the
executable's memory, sends it, and empties the queue.
The port kept the word queued, so after one such skill nobody spoke again, Kite included.
The port now holds the memory the game reads from (skill_memory: every
table and the rows within reach, ids 0-303, as VOICE_DATA). A row
outside a table sends what lies there and empties the queue. A row of -1
still leaves the queue for the next frame. Test:
a_word_outside_its_table_does_not_stick.
Condition effects (310's three paths)
- The Grunty Flute.
ccClearConditionAllEnemy(gcmn 0x0042e4f0) clears the enemies on the list, in its order, withobjFlagset andfreezeFlagclear: the onesccCheckActiveEnemycounts. Each one's condition effect now ends. Test:the_flute_ends_the_foes_sparks. - A foe struck by a foe with none of the party left.
affectEnemy'sselectTarget()on the struck foe clears its target (gcmn 0x00436d78-0x00436d84). TheClearConditionEffectit raises is the struck foe's own. The port handed it to the striker's frame, ending the wrong foe's effect, so the struck one kept its sparks. Outputs from a rule run outside an enemy's own frame are now kept per enemy and flushed after the frame's own. Test:a_blow_with_the_party_down_ends_the_sparks. - The
EnemyRetargetflush, and the attack cursor's scale (gcmn 0x0051f21c): not settled in this chunk.
The Ryu Books, in part
What is in:
ccThBook's steps in the item use (crates/piney-fieldui/src/book):- the fade to black;
- the cover stream, stream 112 + the book;
- the book's pages opened once the stream ends.
Request::BookStream(Some(book))and(None)are now answered in fields (the drain movie's player,AreaMode::start_movie) and in towns (the scripts' stream player, stepped a menu frame at a time). Before, nothing played the cover, and a book would have waited for it forever.- The
BOOKclass's tables are in the build (piney-datatables/book.rs, the manifest; data version 22). - Pages, rows and reward checks are ported for books 1-3 (
type0-2:Disp01-03,PadControl,CheckItemGet).PadControlis also ported for types 5 and 6.
What is not:
- Books 4-8 (
type3-7): theirDispNNandCheckItemGetNN, and the reward tablesT40on. - The cover's palette from the second book on (
bookItem'sstream_cluts). - A session test that reads a Ryu Book end to end.
- Books 4-8's pages and rewards (
BOOK::Draw,PadControl,CheckItemGetfor types 3-7; INF gcmn 0x0040c570-0x00410400) are not ported. - The second book on: the cover's palette is not swapped. - No test reads a book through. - TheEnemyRetargetflush and the attack cursor's scale (0x0051f21c) were not checked.