Skip to content

Bot response to communication wheel commands (ForTheEmperor compat) #56

Description

@hummat

Context

Nexus user request: "Is it possible to make bots respond to For the Emperor?"

For the Emperor is a communication wheel expansion mod that adds configurable com wheel slots: "For the Emperor!" (battle cry VO), "Need Help" (with world markers), Yes/No, enemy/location pings, ammo/health requests, etc.

The ask is for bots to react to com wheel commands from the human player.

Possible bot reactions

Com wheel event Possible bot reaction
"For the Emperor!" (battle cry) Pop combat abilities aggressively (temporary aggression boost)
"Need Help" Prioritize converging on the player
"Enemy here" / threat ping Focus-fire tagged target (partially exists via #48 player-tag boost)
Location ping Move toward pinged location
"Need Ammo" / "Need Health" Deprioritize own ammo/health pickups in favor of player

Technical feasibility

Best detection point: Hook Vo.on_demand_vo_event — works in Solo Play, catches both vanilla and FTE wheel events. The function receives (player_unit, concept, trigger_id) where concept = "on_demand_com_wheel" and trigger_id maps to the specific wheel option (e.g. "com_cheer" for For the Emperor, "com_need_health", "location_enemy_there", etc.).

Full vanilla trigger ID table (from vo_query_constants.lua):

Trigger ID Wheel option
com_cheer For the Emperor
com_need_ammo Need Ammo
com_need_health Need Health
com_thank_you Thanks
location_enemy_there Enemy Over Here
location_this_way Let's Go This Way
location_over_here Over Here (attention)
answer_yes / answer_no Yes / No

What won't work: FTE's "Need Help" chat metadata (#need_help via VivoxManager._handle_event) only fires for remote senders — broken in Solo Play where there are no remote players.

Location pings (location_ping, location_attention, location_threat smart tags) carry a world position but no target unit. BetterBots has no infrastructure for location-based bot directives — this would need new pathfinding/movement integration.

Cross-mod detection: get_mod("ForTheEmperor") ~= nil for FTE-specific features. The Vo.on_demand_vo_event hook would work with vanilla com wheel too — no FTE dependency required.

Existing overlap

Scope considerations

  • The Vo.on_demand_vo_event hook is cheap and non-invasive — detection is easy.
  • The hard part is the response layer: translating "For the Emperor!" into meaningful bot behavior changes requires a temporary state modifier that overrides normal heuristic thresholds (e.g. "ignore cooldown caution for 5s").
  • Location-based commands (move here, go this way) require pathfinding integration that doesn't exist yet.
  • Risk of annoying behavior if bots blow cooldowns every time the player hits the battle cry button.

Priority

P3 — nice-to-have, community-requested. No existing infrastructure for most responses beyond enemy tagging.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3: backlogNice to have, no timelinearea: bot-behaviorGeneral bot behavior beyond ability activationenhancementNew feature or requestneeds-testingImplemented, awaiting in-game verification

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions