diff --git a/crates/benilla-app/src/target/cursor_mode.rs b/crates/benilla-app/src/target/cursor_mode.rs index 15d71927..028a1550 100644 --- a/crates/benilla-app/src/target/cursor_mode.rs +++ b/crates/benilla-app/src/target/cursor_mode.rs @@ -372,7 +372,12 @@ pub(crate) fn mouseover_eligible( overrides: GoOverrides, ) -> bool { match type_id { - GO_TYPE_TRANSPORT | GO_TYPE_MAP_OBJECT | GO_TYPE_MO_TRANSPORT => false, + // TRAP's `+0xc` is constant false, like the transports': a trap is proximity-triggered and + // never clicked, so it never becomes the mouseover. Arathi Basin's visual-only aura + // GameObjects (180100-180102, type 6, faction 114 hostile-to-all) would otherwise stay + // eligible through the inverted TRAP term and take the pick from the node banner behind + // them — the banner is what the capture needs, the aura is decoration. + GO_TYPE_TRAP | GO_TYPE_TRANSPORT | GO_TYPE_MAP_OBJECT | GO_TYPE_MO_TRANSPORT => false, GO_TYPE_SPELL_FOCUS | GO_TYPE_DUEL_ARBITER | GO_TYPE_FISHINGHOLE @@ -947,7 +952,10 @@ mod tests { Some(4), GoOverrides::default() )); - assert!(mouseover_eligible( + // A TRAP never becomes the mouseover, hostile or not: it is proximity-triggered and never + // clicked, so its `+0xc` slot is constant false. This is what keeps a battleground's + // visual-only aura GO (type 6, hostile-to-all) off the pick over the node banner. + assert!(!mouseover_eligible( GO_TYPE_TRAP, 0, 0, diff --git a/crates/benilla-app/src/target/hover.rs b/crates/benilla-app/src/target/hover.rs index 36c49503..aa67ec59 100644 --- a/crates/benilla-app/src/target/hover.rs +++ b/crates/benilla-app/src/target/hover.rs @@ -554,13 +554,19 @@ pub(super) fn update_hovered_object( // Transports (TRANSPORT 11, MAP_OBJECT 14, MO_TRANSPORT 15) never join: the reference's model // resolver `0x5f80e0` gives them no pick geometry and their interaction predicates are // constant false, so a ship's hull never swallows the pick of an NPC on deck. + // + // TRAP (6) never joins either: a trap is proximity-triggered, never clicked, so the reference + // registers no mouse geometry for one. Arathi Basin's visual-only aura GameObjects + // (180100-180102, type 6) otherwise sit at the node banner's centre and win the pick from it — + // their faction is hostile to everyone, so the inverted TRAP term keeps them highlightable and + // the banner is never reached, whatever the battleground gate does. if removed_parts.read().next().is_some() || !added_parts.is_empty() { pickable.clear(); pickable.extend(go_parts.iter().filter(|&e| { // Through the hit's own resolver, so a card and its mesh siblings agree. !stores .get(resolve_net(e)) - .is_ok_and(|s| matches!(s.0.gameobject_type_id(), 11 | 14 | 15)) + .is_ok_and(|s| matches!(s.0.gameobject_type_id(), 6 | 11 | 14 | 15)) })); } hovered.target = None;