feat: make PKer bots actually land their spec combos #220

Merged
sickday merged 1 commit from feat/pker-spec-combos into main 2026-07-23 18:16:51 +00:00
Owner

PKers switched weapons at the right moments but almost never followed
through with the special attack, and when they did it was into a
full-HP target. Root causes and fixes:

  • Rushers had no spec decision at all: :rush_spec/:melee_spec existed
    in the decision type but nothing produced them, so a gmaul rusher
    froze, switched, and then just auto-attacked. Rushers now go
    :combo_ready once switched onto the frozen adjacent target, and
    instant specs (granite maul) stack a double toggle when energy
    covers both.
  • Hybrids never specced either, and their magic shortbow was a
    bar-only stub that burned 55 energy for nothing. Snap-Shot is now a
    full spec (two arrows, 1.43x accuracy, anim 1074, gfx/projectile
    249, per the reference handler) and hybrids fire it from the ranged
    stance inside the spec window.
  • Standard bots specced on attack cadence alone with no target-HP
    gate. New spec window: cheap dds-class specs open at 70% target HP
    (or on a full energy bar - full-bar energy is wasted pressure),
    expensive finishers hold for 50%. Energy costs now come from the
    SpecialAttack table instead of hand-copied config values that had
    drifted (gmaul 60 vs 50).
  • The combo executor equips and re-attacks in the same goal tick as
    the decision, re-arms into the dds double-spec while the window
    holds, restores the KO weapon (not the primary) when the target is
    still in KO range, never auto-restores for rushers/hybrids, and
    aborts when HP goes critical so eating outranks the spec chase.
    Fight-timeout now restores the primary like disengage does.
  • ScavengeAndRush toggled special unconditionally on every rush, so a
    still-armed spec from a previous chase was flipped back OFF - the
    second rush never specced. Arming is now conditional and re-fires
    each fight tick while energy lasts.
  • Loadouts that carry a real spec weapon without naming it in config
    (hybrid msb in range_gear, melee kits whose KO weapon has a spec)
    now infer it at init; the supply list dedupes by id so a spec
    weapon that doubles as the KO weapon is no longer bought twice.
  • decide/2 checks disengage before the combo, so a dead target no
    longer starts a spec sequence into empty air.

Live-verified with a two-bot probe: dds consumes 25 and doubles,
gmaul double-toggle burns 100 in one tick, Snap-Shot consumes 55 and
lands two arrows, and two goal-driven PKers engage, swap scim->dds
mid-fight, and spend their bars on their own.

PKers switched weapons at the right moments but almost never followed through with the special attack, and when they did it was into a full-HP target. Root causes and fixes: - Rushers had no spec decision at all: :rush_spec/:melee_spec existed in the decision type but nothing produced them, so a gmaul rusher froze, switched, and then just auto-attacked. Rushers now go :combo_ready once switched onto the frozen adjacent target, and instant specs (granite maul) stack a double toggle when energy covers both. - Hybrids never specced either, and their magic shortbow was a bar-only stub that burned 55 energy for nothing. Snap-Shot is now a full spec (two arrows, 1.43x accuracy, anim 1074, gfx/projectile 249, per the reference handler) and hybrids fire it from the ranged stance inside the spec window. - Standard bots specced on attack cadence alone with no target-HP gate. New spec window: cheap dds-class specs open at 70% target HP (or on a full energy bar - full-bar energy is wasted pressure), expensive finishers hold for 50%. Energy costs now come from the SpecialAttack table instead of hand-copied config values that had drifted (gmaul 60 vs 50). - The combo executor equips and re-attacks in the same goal tick as the decision, re-arms into the dds double-spec while the window holds, restores the KO weapon (not the primary) when the target is still in KO range, never auto-restores for rushers/hybrids, and aborts when HP goes critical so eating outranks the spec chase. Fight-timeout now restores the primary like disengage does. - ScavengeAndRush toggled special unconditionally on every rush, so a still-armed spec from a previous chase was flipped back OFF - the second rush never specced. Arming is now conditional and re-fires each fight tick while energy lasts. - Loadouts that carry a real spec weapon without naming it in config (hybrid msb in range_gear, melee kits whose KO weapon has a spec) now infer it at init; the supply list dedupes by id so a spec weapon that doubles as the KO weapon is no longer bought twice. - decide/2 checks disengage before the combo, so a dead target no longer starts a spec sequence into empty air. Live-verified with a two-bot probe: dds consumes 25 and doubles, gmaul double-toggle burns 100 in one tick, Snap-Shot consumes 55 and lands two arrows, and two goal-driven PKers engage, swap scim->dds mid-fight, and spend their bars on their own.
feat: make PKer bots actually land their spec combos
All checks were successful
ci / test (pull_request) Successful in 2m35s
7a79a190f0
PKers switched weapons at the right moments but almost never followed
through with the special attack, and when they did it was into a
full-HP target. Root causes and fixes:

- Rushers had no spec decision at all: :rush_spec/:melee_spec existed
  in the decision type but nothing produced them, so a gmaul rusher
  froze, switched, and then just auto-attacked. Rushers now go
  :combo_ready once switched onto the frozen adjacent target, and
  instant specs (granite maul) stack a double toggle when energy
  covers both.
- Hybrids never specced either, and their magic shortbow was a
  bar-only stub that burned 55 energy for nothing. Snap-Shot is now a
  full spec (two arrows, 1.43x accuracy, anim 1074, gfx/projectile
  249, per the reference handler) and hybrids fire it from the ranged
  stance inside the spec window.
- Standard bots specced on attack cadence alone with no target-HP
  gate. New spec window: cheap dds-class specs open at 70% target HP
  (or on a full energy bar - full-bar energy is wasted pressure),
  expensive finishers hold for 50%. Energy costs now come from the
  SpecialAttack table instead of hand-copied config values that had
  drifted (gmaul 60 vs 50).
- The combo executor equips and re-attacks in the same goal tick as
  the decision, re-arms into the dds double-spec while the window
  holds, restores the KO weapon (not the primary) when the target is
  still in KO range, never auto-restores for rushers/hybrids, and
  aborts when HP goes critical so eating outranks the spec chase.
  Fight-timeout now restores the primary like disengage does.
- ScavengeAndRush toggled special unconditionally on every rush, so a
  still-armed spec from a previous chase was flipped back OFF - the
  second rush never specced. Arming is now conditional and re-fires
  each fight tick while energy lasts.
- Loadouts that carry a real spec weapon without naming it in config
  (hybrid msb in range_gear, melee kits whose KO weapon has a spec)
  now infer it at init; the supply list dedupes by id so a spec
  weapon that doubles as the KO weapon is no longer bought twice.
- decide/2 checks disengage before the combo, so a dead target no
  longer starts a spec sequence into empty air.

Live-verified with a two-bot probe: dds consumes 25 and doubles,
gmaul double-toggle burns 100 in one tick, Snap-Shot consumes 55 and
lands two arrows, and two goal-driven PKers engage, swap scim->dds
mid-fight, and spend their bars on their own.
sickday force-pushed feat/pker-spec-combos from 7a79a190f0
All checks were successful
ci / test (pull_request) Successful in 2m35s
to dda86cd2ab
All checks were successful
ci / test (pull_request) Successful in 2m34s
2026-07-23 18:07:30 +00:00
Compare
Sign in to join this conversation.
No description provided.