Skip to content

The fight driver stands still under Stop: Brainpan's Smirk leaves the party with no plan for 600+ ticks #224

Description

@mtklein

Found by the #221 fc_alcove lab, and it is one of that segment's four deaths rather than a theoretical hole.

Brainpan's $EF Special is Smirk, which inflicts Stop. tools/tests/fcalcovelab/stop_stalls.py over the lab's 12 control seeds counts 19 Stop landings, 11 of which left the party with no plan for 600+ ticks. In control seed 0 the battle sat 2,276 ticks with nobody acting while SHADOW fell 1050 -> 0.

The cause looks like lib/ot6.lua's #187 assumption that when a command window goes away the engine is about to take it — under Stop the window goes away and does not come back for that actor, and the driver waits on it instead of driving the actors who can still act. A Stopped member is not a denied turn; it is a member who will be back, and the rest of the party has turns in the meantime.

What a person does under Stop is keep fighting with everyone else, and heal the member who cannot move.

Fix the class, not the fight: the driver should notice a Stopped (and by the same argument Sleep / Petrify / Frozen) actor, stop waiting on that actor's window, and keep planning for the others. M.turnDenied / M.statusCure (#187) are the existing surface. The lab's retained logs are under build/lab/fc-alcove/ and stop_stalls.py prints the stalls per seed.

Related: #187 (turn denial), #190 (Zombie / Vanish / Condemned in the fight lib) — the same family of "a status the driver does not model" bugs.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingharnessTest harness, audits, runner, graph

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions