Pokemon Emerald: Send current map to trackers (#3726)

This commit is contained in:
Bryce Wilson 2024-08-23 17:51:52 -07:00 committed by GitHub
parent 5c5f2ffc94
commit d1a7fd7da1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 29 additions and 0 deletions

View File

@ -137,6 +137,8 @@ class PokemonEmeraldClient(BizHawkClient):
previous_death_link: float
ignore_next_death_link: bool
current_map: Optional[int]
def __init__(self) -> None:
super().__init__()
self.local_checked_locations = set()
@ -150,6 +152,7 @@ class PokemonEmeraldClient(BizHawkClient):
self.death_counter = None
self.previous_death_link = 0
self.ignore_next_death_link = False
self.current_map = None
async def validate_rom(self, ctx: "BizHawkClientContext") -> bool:
from CommonClient import logger
@ -243,6 +246,7 @@ class PokemonEmeraldClient(BizHawkClient):
sb1_address = int.from_bytes(guards["SAVE BLOCK 1"][1], "little")
sb2_address = int.from_bytes(guards["SAVE BLOCK 2"][1], "little")
await self.handle_tracker_info(ctx, guards)
await self.handle_death_link(ctx, guards)
await self.handle_received_items(ctx, guards)
await self.handle_wonder_trade(ctx, guards)
@ -403,6 +407,31 @@ class PokemonEmeraldClient(BizHawkClient):
# Exit handler and return to main loop to reconnect
pass
async def handle_tracker_info(self, ctx: "BizHawkClientContext", guards: Dict[str, Tuple[int, bytes, str]]) -> None:
# Current map
sb1_address = int.from_bytes(guards["SAVE BLOCK 1"][1], "little")
read_result = await bizhawk.guarded_read(
ctx.bizhawk_ctx,
[(sb1_address + 0x4, 2, "System Bus")],
[guards["SAVE BLOCK 1"]]
)
if read_result is None: # Save block moved
return
current_map = int.from_bytes(read_result[0], "big")
if current_map != self.current_map:
self.current_map = current_map
await ctx.send_msgs([{
"cmd": "Bounce",
"slots": [ctx.slot],
"tags": ["Tracker"],
"data": {
"type": "MapUpdate",
"mapId": current_map,
},
}])
async def handle_death_link(self, ctx: "BizHawkClientContext", guards: Dict[str, Tuple[int, bytes, str]]) -> None:
"""
Checks whether the player has died while connected and sends a death link if so. Queues a death link in the game