Repository navigation
Conversation
rvAIMedic::TakePatient makes the healer passive and blind to enemies, and State_Medic's approach stage ended only beside a patient it could see. A player it could see but never reach therefore held it in that stage for good, re-pathing in place; issue themuffinator#184 reports Tech Li standing at the edge of hangar1's lift until the player came back. The original Raven DropPatient already asked "what if they stay in this state?". ai_medicApproachTimeout (15 s, 0 disables) abandons an approach that sets no new best distance to the patient for that long, through the existing DropPatient and post-heal-script path, and holds back automatic heals for as long again. Movement alone is not progress: a medic shuffling beneath a patient it cannot reach moves constantly without closing in. A heal the player asks for (TalkTo) is not held back. The watchdog fields are transient and stay out of the save. SP and MP are identical, and ai_medic_approach_watchdog.py keeps them so. On hangar1, with Tech Li held beneath a player he could see but not reach, 0.14.000 left him in State_Medic for the full 81-second run; this build gave up after 15 s and he returned to his orders. A normal heal on the lift top, armor 10 with the player across the platform, still completes in about four seconds before he walks to his tether. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
themuffinator
left a comment
There was a problem hiding this comment.
Reviewed the current SP/MP diff and its integration with TakePatient, DropPatient and State_Medic. The timeout exits through the existing cleanup/post-heal path, the cooldown applies only to automatic patient acquisition, and the transient fields do not alter the save layout. I found no additional blocking source issue in this revision.
The reported Linux unreachable-patient and normal post-lift runs are useful scoped evidence. I have not independently run gameplay. Keep #184 open until its exact reported state or a supplied save confirms progression; the synthetic unreachable-patient test does not prove that report resolved.
CI run 39136341682 failed before platform validation at the unrelated clipboard test-double error. #190 is now merged and the subsequent atlas math include is repaired on main in 80060cc. I am updating this branch from main to obtain fresh checks. Merge remains pending completed CI; skipped platform jobs do not count as passes. Roadmap ownership: Q4-02.
…-patient # Conflicts: # docs/dev/release-completion.md
Refs #184.
Problem
Once a medic or tech picks the player to heal (
rvAIMedic::TakePatient), it becomes passive and ignores enemies, andState_Medic's approach stage only ends beside a patient it can see. If it can see the player but never reach them, it stays in that stage indefinitely, re-pathing in place. Combat can't break it out, and nothing times out. The original RavenDropPatientalready notes//FIXME: what if they stay in this state?.This matches #184: right after hangar1's lift, the script calls
$elgar.enableHeal()on Tech Li just before giving him his exit tether. A player with low armor (10 in the report's screenshot) becomes his patient.Fix (SP and MP, identical)
ai_medicApproachTimeout(default 15 s, 0 disables): an approach that sets no new best distance to the patient for that long is abandoned. The medic leaves through the existing bail-out path (StopMove,DropPatient, post-heal script) and logs a warning.TalkTo) isn't held back.Testing
Runtime on Linux x64 (Wayland, OpenGL, retail assets), hangar1:
noclipabout 90 units above the floor)State_Medicfor the whole 81 s runmedic 'elgar' made no progress toward 'player1' for 15 seconds (distance 92); giving up on the heal for now, thenState_Combat→State_Passivetools/tests/ai_medic_approach_watchdog.py(new, wired into both workflows andopenq4_validate.py) checks:It fails on
mainand passes here.validation_hardening.pypasses.Not verified
noclipplayer); I haven't found the exact spot that stranded Tech Li in Hangar Perimeter: Tech Li stalls after elevator, blocking progression #184. I've asked the reporter for a save to confirm the cause.Side note: on current
main, a startup+map …on the command line leaves the client at the main menu, while the samemapcommand run from a config file loads normally. I tested through+execinstead; that's unrelated to this change.🤖 Generated with Claude Code