Pokemon RB: Add client tracking for tracker relevant events (#5495)

* Pokemon RB: Add client tracking for tracker relevant events

* Pokemon RB: Use list for tracker events

* Pokemon RB: Use correct bill event

* Pokemon RB: Add champion event tracking
This commit is contained in:
James White
2025-10-05 04:33:52 +01:00
committed by GitHub
parent f8f30f41b7
commit a2460b7fe7

View File

@@ -36,6 +36,26 @@ DATA_LOCATIONS = {
"CrashCheck4": (0x16DD, 1),
}
TRACKER_EVENT_FLAGS = [
0x77, # EVENT_BEAT_BROCK
0xbf, # EVENT_BEAT_MISTY
0x167, # EVENT_BEAT_LT_SURGE
0x1a9, # EVENT_BEAT_ERIKA
0x259, # EVENT_BEAT_KOGA
0x361, # EVENT_BEAT_SABRINA
0x299, # EVENT_BEAT_BLAINE
0x51, # EVENT_BEAT_VIRIDIAN_GYM_GIOVANNI
0x38, # EVENT_OAK_GOT_PARCEL
0x525, # EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
0x117, # EVENT_RESCUED_MR_FUJI
0x55c, # EVENT_GOT_SS_TICKET
0x78f, # EVENT_BEAT_SILPH_CO_GIOVANNI
0x901, # EVENT_BEAT_CHAMPION_RIVAL
]
assert len(TRACKER_EVENT_FLAGS) <= 32
location_map = {"Rod": {}, "EventFlag": {}, "Missable": {}, "Hidden": {}, "list": {}, "DexSanityFlag": {}}
location_bytes_bits = {}
for location in location_data:
@@ -61,6 +81,7 @@ class PokemonRBClient(BizHawkClient):
super().__init__()
self.auto_hints = set()
self.locations_array = None
self.tracker_bitfield = 0
self.disconnect_pending = False
self.set_deathlink = False
self.banking_command = None
@@ -236,6 +257,22 @@ class PokemonRBClient(BizHawkClient):
await ctx.send_msgs([{"cmd": "Bounce", "slots": [ctx.slot], "data": {"currentMap": data["CurrentMap"][0]}}])
self.current_map = data["CurrentMap"][0]
# TRACKER
tracker_bitfield = 0
for i, flag in enumerate(TRACKER_EVENT_FLAGS):
if data["EventFlag"][flag // 8] & (1 << (flag % 8)):
tracker_bitfield |= 1 << i
if tracker_bitfield != self.tracker_bitfield:
await ctx.send_msgs([{
"cmd": "Set",
"key": f"pokemon_rb_events_{ctx.team}_{ctx.slot}",
"default": 0,
"want_reply": False,
"operations": [{"operation": "or", "value": tracker_bitfield}],
}])
self.tracker_bitfield = tracker_bitfield
# VICTORY
if data["EventFlag"][280] & 1 and not ctx.finished_game: