Decoy drop and decoy hit events #36
Labels
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
Depends on
#49 JSON Schema for the game-state feed
mintopia/blur
#35 Feed: use and collect events, per-racer totals
mintopia/blur
Reference
mintopia/blur#36
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Decoy_Dropmod: a fake pickup is dropped on the track; racers driving into it take a decoy hit (strings:PickupPositionDecoy,DiscardDecoyPickup,ScoringEvent_Decoy,PlayersHitwithDecoys).Spike
Hook
0x535770logging all channels while a racer withDecoy_Drop(LAN scenario) discards pickups and others hit the decoys. Record the events/fields in an ADR.Acceptance
decoy_drop{racer, powerup, serial}anddecoy_hit{victim, attacker, powerup, serial}(separate fromhit).totalsgaindecoys_dropped,decoy_hits_dealt,decoy_hits_taken.Rules
docs/decisions/0019-feed-message-contract.md). Repo data/tools: ADR 0020.BLUR_ENGINE=recomponly.docs/state-websocket.mdandexamples/live-timingfor any feed change.scripts/scenarios (windowed, low settings) once #33 exists.Research findings (static: Blur.exe strings + current src), 2026-10-20.
Decoy_Drop, not a powerup kind: the kind enum stays 0..7. Each pickup kind has a decoy model (models\perks\pickups\<kind>pickupdecoy.model,...decoyhit.model, incl. xp/shieldsuper), sopowerupon decoy events is the disguised kind.PickupPositionDecoy,StartDecoyActionIn,DiscardDecoyPickup/...ActionIn,HitVehicleSpecialFXDecoy, tweaksMultiplayer.Upgrades.DecoyDrop.{DroppedDecoysTimer,Bob*,Rotation*,FlipGraphic*}, scoringScoringEvent_Decoy,SCR_NEW_AMAX_SCORING_DECOY_HIT,DecoyHitScore, award statPlayersHitwithDecoys.DroppedDecoysTimer, and a decoy hit scores for the dropper.ScoringEvent_Decoy/PlayersHitwithDecoysare alternative hook points if channel 9 shows nothing.examples/live-timing/sample-race.jsonlhasDecoy_Drop.Task 32 spike progress (no code committed). Built blurhost in a worktree and regenerated recomp with the current HOOKS (the shared work/recomp/m3/gen is stale: it predates the 0x535770 hook, so any worktree build using it gets no hit/use events; regenerate with emit.py+shard.py into a private dir and pass -DRECOMP_GEN_DIR). Logged every 0x535770 call (channel/event/payload) on 2-instance LAN with Decoy_Drop on both. Tried bot presses A, B, X (0.5s hold), then cycling LB/RB/X/B/A/Back/Start across a full race: no new channel-9 event ids appeared (only the known 0,2,10,11,12,14 and hit 4), and no decoy-like events on other channels, so decoy drop/hit is not on channel 9 and the discard binding was never found. Blocked: need the controller/keyboard binding that discards a held pickup (CMN_OPT_CNT_DISCARD_PERK), or a decision to hook ScoringEvent_Decoy / PlayersHitwithDecoys instead. Spike patch (event logger + BLUR_BOT_CYCLE/PULSE bot env) saved at /tmp/t32-spike.diff.
Done (commit 0d0d401, ADR 0026). Discard binding is Y (pad 0x8000); first spike never pressed it as discard. Findings: decoy hit = ch9 event 4 with +0x20 == 4 (real hits 0/2), no game event for a drop. New feed: decoy_hit {victim,attacker,powerup,serial} (instead of hit), decoy_drop {racer,powerup,serial} (inferred from held-queue removal with no use, Decoy_Drop racers only; serial = join_ref<<24 + nth drop), totals decoys_dropped/decoy_hits_dealt/decoy_hits_taken. docs/state-websocket.md + live-timing tooltip updated. Verified on 2-instance recomp LAN: 3 decoy_hit with identical serials on both instances, each matching a decoy_drop serial; totals agree. Caveats: decoy_drop count differs per instance (17 vs 13, remote 5Hz view merges), RB not run, drop serial only exact for racers that never fire.
Completed and merged by Harmonic (task 32).