Entry 277
Spoken to while running: the greeting's stop reaches the member; the field's talk target and the town's faces
Filescrates/piney-world/src/combat/mod.rscrates/piney-game/src/area.rscrates/piney-game/src/world.rscrates/piney-game/src/session.rs
Three play-test reports about Infection's party members, each found and held by a test.
A member runs off while spoken to
The report: talking to a town NPC or a party member, and after a few
seconds they run off. A pad log (--pad-log, with the card saved beside
it) replayed headless (--replay) reproduced the run exactly. BlackRose,
on her own route through Mac Anu, is spoken to at frame 754. The menu's
EntryAffect 14 reaches her, and her AI's talkFlag is set, so Brains
returns early. Yet she stays in act 5 (running) with moveFlag and
runFlag set (flags 0x2a). She runs about 780 on her old heading until a
wall stops her, with her menu still open.
The cause is where ccAI::Greeting writes. It clears moveFlag and
runFlag in the members' records (Crew::spc). The town's frame runs the
menus' lines (Combat::drain_chats) before the members' frames. Each
member's frame begins with fellow::sync_in, which copies the
character's flags into those records. The greeting's clears were never
written to the character, so they were read back over. drain_chats now
writes each member's record to its character (fellow::sync_out) after
the lines, as a member's own frame does after it runs.
The fix applies to fields too, which use the same drain_chats.
piros_stops_when_spoken_to_while_running holds it: Piros running
through Mac Anu on his own, spoken to, stands where he is. The test fails
without the write.
A walking PC (ccRtownPC) was not seen to run off.
a_walker_stands_through_its_talk keeps one standing, facing Kite,
through a talk left open ten seconds. The report's "any NPC" may have
been the party members.
A member spoken to in a field
Talk said nothing, Trade found nothing, and Gift said "received" with no
name, kept the item with Kite, and at the holy ground opened a garbled
window. The talk menus read the one spoken to from the UI's TalkTarget
(cmndTargetPrev->base). The town sets it when a member's menu (21), an
administrator (23), a breeder (27), a dog (44) or a Grunty (45, 46) is
asked for. The field did not, so base_of answered nothing, and the
menus fell back to id 0 with no name.
AreaMode::talk now sets it the same way:
- a member is
(1 << 24 | id, Speaker::Spc(id)); - an event NPC's stand-in is
(2 << 24 | scene index), with itsnpcTblrow fromCombat::npcs.
event_11_blackrose_spoken_to_on_the_holy_ground holds it.
The party panel's faces in town
After a Gate Out mid-event, BlackRose's panel had no face. The town's
constructor set only slot 0 (Kite). ccCheckMenuFaceNameParty (gcmn
0x0056a930) is not a stored face: it reads memberID[slot] whenever it
is asked. The town now sets every slot's face from the party the last
area left (WorldMode::set_spcs). event_11_gate_out_keeps_blackrose
holds it, along with her staying in the party and the registry.
- Whether a walking PC can run off in some case the tests do not cover. The play test named "any NPC", but only a member's run was caught in a log. - BlackRose's own lines at the holy ground (the "optional event" of the report) were not checked once her talk target was right.