Objective
Rewrite Twin Emperors healer-side support so dedicated side healers recover reliably, keep the correct focus targets during swap windows, and stop falling back to raid-healer mode from temporary ownership ambiguity.
Why this exists
The current healer routing is failing before the tank recovery ever stabilizes.
Observed locally:
tmp/Playerbots.log starts with immediate healer failures:
AQ40 event=movement_failure bot=iledori role=healer ... side=0 reason=outside_leash path=none
AQ40 event=movement_failure bot=paemin role=healer ... side=1 reason=outside_leash path=none
AQ40 event=movement_failure bot=gankuser role=healer ... side=1 reason=outside_leash path=none
AQ40 event=movement_failure bot=kesesha role=healer ... side=0 reason=outside_leash path=none
- Total healer-related routing failures in the run:
27.
- Once healers lose their side anchors, the encounter spirals into pickup failure and split collapse.
Current code hotspots
src/Ai/Raid/Aq40/Action/RaidAq40Actions_TwinEmperors.cpp
Aq40TwinEmperorsHealerSupportAction
Aq40TwinEmperorsPrePullStageAction
GetTwinRecoveryStepTowardAnchor
PrepareTwinRecoveryHold
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cpp
GetTwinDedicatedTankHealerSide
GetTwinHealerFocusTargets
IsTwinHealerOutsideSideLeash
- snapshot ownership checks used by healer fallback
kTwinTankHealersPerSide = 2
Required implementation
- Replace the current two-step healer recovery with a proper recovery ladder.
- Minimum routing ladder:
- direct move to side healer anchor
- staged step anchor toward side healer anchor
- center-to-side re-entry anchor when the healer is fully displaced
- local safe support anchor near the assigned side tank if direct healer anchor occupancy is impossible
- Healer routing must keep retrying within the encounter phase instead of logging
path=none and effectively giving up.
- Preserve deterministic healer-side assignment. Do not reshuffle dedicated tank-healers during ordinary swaps.
- Make healer fallback to raid-healer mode stricter:
- fallback is allowed for explicit
Degraded mode
- fallback is not allowed just because side ownership is temporarily unresolved during an otherwise supported pickup window
- Keep healer focus targets ordered around local tank reality:
- current owner
- expected owner
- reserve owner
- Ensure recovery movement remains compatible with strict Twin movement ownership and does not get overridden by generic movement.
Additional supported-comp contract
The pre-pull and opener contract for healers needs to be explicit for any implementing agent:
- supported Twin runs should start with exactly
2 dedicated tank healers on each side
- those dedicated tank healers should already be staged on their side anchors before pull
- they should not be solved from the center after combat starts unless the encounter has already degraded
- non-dedicated healers should remain central / raid-healer style in pre-pull and opener positioning unless a separate issue explicitly assigns them elsewhere
Reference patterns
Validation
- Supported comp test across at least 3 teleports.
- Success criteria:
- zero
movement_failure for Twin healers
- no
path=none healer routing failures
- side healers remain on their assigned side or re-enter it deterministically
- healer focus remains on the correct local tank targets during swap recovery
- each supported opener starts with
2 dedicated tank healers per side already staged correctly
- Degraded-mode test:
- after a tank death, confirm healer fallback happens only when the encounter explicitly enters
Degraded
Related
- Depends on
#2 phase and ownership work.
- Coordinate with
#6 so spell-driven swap timing can drive healer recovery windows correctly.
- Coordinate with
#8 for pre-pull healer staging and opener layout.
Objective
Rewrite Twin Emperors healer-side support so dedicated side healers recover reliably, keep the correct focus targets during swap windows, and stop falling back to raid-healer mode from temporary ownership ambiguity.
Why this exists
The current healer routing is failing before the tank recovery ever stabilizes.
Observed locally:
tmp/Playerbots.logstarts with immediate healer failures:27.Current code hotspots
src/Ai/Raid/Aq40/Action/RaidAq40Actions_TwinEmperors.cppAq40TwinEmperorsHealerSupportActionAq40TwinEmperorsPrePullStageActionGetTwinRecoveryStepTowardAnchorPrepareTwinRecoveryHoldsrc/Ai/Raid/Aq40/Util/RaidAq40Helpers.cppGetTwinDedicatedTankHealerSideGetTwinHealerFocusTargetsIsTwinHealerOutsideSideLeashkTwinTankHealersPerSide = 2Required implementation
path=noneand effectively giving up.DegradedmodeAdditional supported-comp contract
The pre-pull and opener contract for healers needs to be explicit for any implementing agent:
2dedicated tank healers on each sideReference patterns
#2363: ICC V2, Autogear BiS cmd mod-playerbots/mod-playerbots#2363Validation
movement_failurefor Twin healerspath=nonehealer routing failures2dedicated tank healers per side already staged correctlyDegradedRelated
#2phase and ownership work.#6so spell-driven swap timing can drive healer recovery windows correctly.#8for pre-pull healer staging and opener layout.