diff --git a/__init__.py b/__init__.py index fa80708..363d253 100644 --- a/__init__.py +++ b/__init__.py @@ -135,7 +135,8 @@ def fill_slot_data(self) -> Dict[str, Any]: "heatruns": self.options.heatruns_lavadives.value, "walljump_logic": self.options.walljumps_in_logic.value, "tricky_shinesparks": self.options.tricky_shinesparks.value, - "death_link": self.options.death_link.value + "death_link": self.options.death_link.value, + "remote_items": self.options.remote_items.value, } def get_filler_item_name(self) -> str: diff --git a/client.py b/client.py index fa6930a..df27e32 100644 --- a/client.py +++ b/client.py @@ -4,17 +4,18 @@ from __future__ import annotations +import asyncio import itertools import struct -from typing import TYPE_CHECKING, Dict, Iterator, List +from typing import TYPE_CHECKING, Counter, Dict, Iterable, Iterator, List, NamedTuple, Optional, Set, Tuple -from NetUtils import ClientStatus +from NetUtils import ClientStatus, NetworkItem import Utils import worlds._bizhawk as bizhawk from worlds._bizhawk.client import BizHawkClient from .data import encode_str, get_symbol -from .items import AP_MZM_ID_BASE +from .items import AP_MZM_ID_BASE, ItemID, ItemType, item_data_table from .locations import (brinstar_location_table, kraid_location_table, norfair_location_table, ridley_location_table, tourian_location_table, crateria_location_table, chozodia_location_table) @@ -51,12 +52,17 @@ def write32(address: int, value: int): return write(address, value.to_bytes(4, "little"), align=4) +guard = write guard8 = write8 guard16 = write16 +def get_int(b: bytes) -> int: + return int.from_bytes(b, "little") + + def next_int(iterator: Iterator[bytes]) -> int: - return int.from_bytes(next(iterator), "little") + return get_int(next(iterator)) # itertools.batched from Python 3.12 @@ -96,6 +102,9 @@ def batched(iterable, n): ] +TERMINATOR_CHAR = 0xFF00.to_bytes(2, "little") + + def cmd_deathlink(self): """Toggle death link from client. Overrides default setting.""" @@ -123,6 +132,13 @@ def __str__(self): return repr(self) +class TankList(NamedTuple): + energy: int + missile: int + super_missile: int + power_bomb: int + + class ZMConstants: # Constants GM_INGAME = 4 @@ -133,31 +149,60 @@ class ZMConstants: SUB_GAME_MODE_DYING = 5 AREA_MAX = 7 ITEM_NONE = 0xFF + SUIT_FULLY_POWERED = 1 + SUIT_SUITLESS = 2 # Structs Equipment = " None: super().__init__() - self.local_checked_locations = [] + self.remote_items_acquired = None + self.received_items = ItemCollection([], [], []) + self.local_checked_locations = set() self.local_set_events = {flag: False for flag in TRACKER_EVENT_FLAGS} self.local_area = 0 + self.queued_item = None self.rom_slot_name = None async def validate_rom(self, client_ctx: BizHawkClientContext) -> bool: @@ -199,7 +247,7 @@ async def validate_rom(self, client_ctx: BizHawkClientContext) -> bool: return False client_ctx.game = self.game - client_ctx.items_handling = 0b001 + client_ctx.items_handling = 0b111 client_ctx.want_slot_data = True try: client_ctx.seed_name = seed_name_bytes.decode("utf-8") @@ -233,47 +281,24 @@ def is_state_read_safe(main_game_mode: int, game_mode_sub: int): return True return (main_game_mode, game_mode_sub) == (ZMConstants.GM_INGAME, ZMConstants.SUB_GAME_MODE_DYING) - async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: - if self.dc_pending: - await client_ctx.disconnect() - return - - if client_ctx.server is None or client_ctx.server.socket.closed or client_ctx.slot_data is None: - return - - if self.death_link.update_pending: - await client_ctx.update_death_link(self.death_link.enabled) - self.death_link.update_pending = False - + async def send_game_state(self, client_ctx: BizHawkClientContext, gameplay_state: Tuple[int, int]): bizhawk_ctx = client_ctx.bizhawk_ctx try: read_result = iter(await bizhawk.read(bizhawk_ctx, [ - read16(ZMConstants.gMainGameMode), - read16(ZMConstants.gGameModeSub1), - read16(ZMConstants.gPreventMovementTimer), read8(ZMConstants.gCurrentArea), read(ZMConstants.gEventsTriggered, 4 * 3), read(ZMConstants.gRandoLocationBitfields, 4 * ZMConstants.AREA_MAX), - read8(ZMConstants.gMultiworldItemCount) ])) except bizhawk.RequestFailedError: return - gMainGameMode = next_int(read_result) - gGameModeSub1 = next_int(read_result) - gPreventMovementTimer = next_int(read_result) + gMainGameMode = gameplay_state[0] gCurrentArea = next_int(read_result) gEventsTriggered = struct.unpack(f"<3I", next(read_result)) gRandoLocationBitfields = struct.unpack(f"<{ZMConstants.AREA_MAX}I", next(read_result)) - gMultiworldItemCount = next_int(read_result) - - gameplay_state = (gMainGameMode, gGameModeSub1) - if not self.is_state_read_safe(gMainGameMode, gGameModeSub1): - return - - checked_locations = [] + checked_locations = set() set_events = {flag: False for flag in TRACKER_EVENT_FLAGS} if gMainGameMode == ZMConstants.GM_INGAME: @@ -285,7 +310,7 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: ): for location in location_table.values(): if location_flags & 1: - checked_locations.append(location.code) + checked_locations.add(location.code) location_flags >>= 1 # Deorem flags are in a weird arrangement, but he also drops Charge Beam so whatever just look for that check @@ -300,9 +325,10 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: if self.local_checked_locations != checked_locations: self.local_checked_locations = checked_locations + self.received_items = self.create_collection(client_ctx) await client_ctx.send_msgs([{ "cmd": "LocationChecks", - "locations": checked_locations + "locations": list(checked_locations) }]) if ((set_events["EVENT_ESCAPED_CHOZODIA"] or gMainGameMode in (ZMConstants.GM_CHOZODIA_ESCAPE, ZMConstants.GM_CREDITS)) @@ -313,6 +339,7 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: }]) if self.local_set_events != set_events and client_ctx.slot is not None: + self.local_set_events = set_events event_bitfield = 0 for i, flag in enumerate(TRACKER_EVENT_FLAGS): if set_events[flag]: @@ -324,9 +351,9 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: "want_reply": False, "operations": [{"operation": "or", "value": event_bitfield}] }]) - self.local_set_events = set_events if self.local_area != gCurrentArea and client_ctx.slot is not None: + self.local_area = gCurrentArea await client_ctx.send_msgs([{ "cmd": "Set", "key": f"mzm_area_{client_ctx.team}_{client_ctx.slot}", @@ -335,6 +362,206 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: "operations": [{"operation": "replace", "value": gCurrentArea}] }]) + async def handle_received_items(self, client_ctx: BizHawkClientContext, received_items: ItemCollection): + bizhawk_ctx = client_ctx.bizhawk_ctx + + try: + read_result = iter(await bizhawk.read(bizhawk_ctx, [read8(ZMConstants.gMultiworldItemCount)])) + except bizhawk.RequestFailedError: + return + + gMultiworldItemCount = next_int(read_result) + + if (self.remote_items_acquired is None): + self.remote_items_acquired = list(itertools.islice(received_items.remote, gMultiworldItemCount)) + + if self.queued_item is not None and gMultiworldItemCount > self.queued_item.index: + self.remote_items_acquired.extend(self.queued_item.network_items) + self.queued_item = None + + if self.queued_item is None and len(self.remote_items_acquired) < len(received_items.remote): + new_items = Counter(item.item for item in received_items.remote) - Counter(item.item for item in self.remote_items_acquired) + next_item, next_item_count = next(iter(new_items.items())) + copies = list(itertools.islice(filter(lambda item: item.item == next_item, reversed(received_items.remote)), next_item_count)) + copies.reverse() + self.queued_item = QueuedItem(copies, len(self.remote_items_acquired)) + + if gMultiworldItemCount > len(received_items.remote): + self.remote_items_acquired = received_items.remote + + async def update_equipment(self, client_ctx: BizHawkClientContext, gameplay_state: Tuple[int, int], items: Iterable[NetworkItem]): + bizhawk_ctx = client_ctx.bizhawk_ctx + + try: + read_result = iter(await bizhawk.read(bizhawk_ctx, [ + read8(ZMConstants.gMultiworldItemCount), + read8(ZMConstants.gDifficulty), + ])) + except bizhawk.RequestFailedError: + return + + gMainGameMode, gGameModeSub1 = gameplay_state + gMultiworldItemCount = next_int(read_result) + gDifficulty = next_int(read_result) + + guard_list = [ + # Ensure game state hasn't changed + guard16(ZMConstants.gMainGameMode, gMainGameMode), + guard16(ZMConstants.gGameModeSub1, gGameModeSub1), + guard8(ZMConstants.gPreventMovementTimer, 0) + ] + acquired_items = Counter(item_data_table[client_ctx.item_names.lookup_in_game(item.item)] for item in items) + try: + read_result = await bizhawk.guarded_read( + bizhawk_ctx, + [read(ZMConstants.gEquipment + 12, 4), + read8(ZMConstants.gEquipment + 18)], + guard_list) + except bizhawk.RequestFailedError: + return + if not read_result: + return + beams, beam_activation, majors, major_activation = read_result[0] + beam_deactivation = beams ^ beam_activation + major_deactivation = majors ^ major_activation + beams = majors = 0 + current_suit = new_suit = read_result[1][0] + if current_suit == ZMConstants.SUIT_SUITLESS: + return + for item, count in acquired_items.items(): + if item.type == ItemType.tank: + max_offset, current_offset = ((0, 6), (2, 8), (4, 10), (5, 11))[item.id] + new_capacity = ZMConstants.sStartingHealthAmmo[item.id] + count * ZMConstants.sTankIncreaseAmount[gDifficulty][item.id] + def read_amounts(size): + return bizhawk.guarded_read( + bizhawk_ctx, + [read(ZMConstants.gEquipment + max_offset, size // 8), + read(ZMConstants.gEquipment + current_offset, size // 8)], + guard_list + ) + def write_amounts(size, max, current, expect_current=None): + return bizhawk.guarded_write( + bizhawk_ctx, + [write(ZMConstants.gEquipment + max_offset, max.to_bytes(size // 8, 'little')), + write(ZMConstants.gEquipment + current_offset, current.to_bytes(size // 8, 'little'))], + (guard_list + [guard(ZMConstants.gEquipment + current_offset, expect_current.to_bytes(size // 8, 'little'))]) + if expect_current is not None else guard_list + ) + try: + if item.id == ItemID.EnergyTank: + read_result = await read_amounts(size) + if read_result is None: + continue + capacity, current = map(get_int, read_result) + if new_capacity > capacity: + await write_amounts(16, new_capacity, new_capacity) + else: + size = 16 if item.id == ItemID.MissileTank else 8 + read_result = await read_amounts(size) + if read_result is None: + continue + capacity, current = map(get_int, read_result) + consumed = capacity - current + await write_amounts(size, new_capacity, max(new_capacity - consumed, 0), current) + except bizhawk.RequestFailedError: + return + unknown_items = client_ctx.slot_data["unknown_items"] or self.local_set_events["EVENT_FULLY_POWERED_SUIT_OBTAINED"] + if item.type == ItemType.beam: + beams |= item.bits + if item.id != ItemID.PlasmaBeam or unknown_items: + beam_activation |= item.bits + if item.type == ItemType.major: + majors |= item.bits + if item.id not in (ItemID.SpaceJump, ItemID.GravitySuit) or unknown_items: + major_activation |= item.bits + if item.id in (ItemID.VariaSuit, ItemID.GravitySuit) and unknown_items: + new_suit = ZMConstants.SUIT_FULLY_POWERED + major_activation &= ~major_deactivation & 0xFF + beam_activation &= ~beam_deactivation & 0xFF + try: + await bizhawk.guarded_write( + bizhawk_ctx, + [write(ZMConstants.gEquipment + 12, bytes((beams, beam_activation, majors, major_activation))), + write8(ZMConstants.gEquipment + 18, new_suit)], + guard_list + [guard(ZMConstants.gEquipment + 18, current_suit)]) + await bizhawk.guarded_write( + bizhawk_ctx, + [write16(ZMConstants.gMultiworldItemCount, len(self.remote_items_acquired))], + guard_list + [guard16(ZMConstants.gMultiworldItemCount, gMultiworldItemCount)]) + except bizhawk.RequestFailedError: + return + + async def write_received_item(self, client_ctx: BizHawkClientContext, gameplay_state: Tuple[int, int]): + bizhawk_ctx = client_ctx.bizhawk_ctx + + try: + read_result = iter(await bizhawk.read(bizhawk_ctx, [read8(ZMConstants.gMultiworldItemCount)])) + except bizhawk.RequestFailedError: + return + + gMainGameMode, gGameModeSub1 = gameplay_state + gMultiworldItemCount = next_int(read_result) + + guard_list = [ + guard16(ZMConstants.gMainGameMode, gMainGameMode), + guard16(ZMConstants.gGameModeSub1, gGameModeSub1), + guard8(ZMConstants.gIncomingItemId, ZMConstants.ITEM_NONE), + guard16(ZMConstants.gMultiworldItemCount, gMultiworldItemCount), + ] + + if gMultiworldItemCount > self.queued_item.index: + return + + next_item = self.queued_item.network_items[0] + item_data = item_data_table[client_ctx.item_names.lookup_in_game(next_item.item)] + copies = len(self.queued_item.network_items) + if next_item.player == client_ctx.slot: + sender = TERMINATOR_CHAR + else: + sender = encode_str(client_ctx.player_names[next_item.player]) + TERMINATOR_CHAR + + try: + await bizhawk.guarded_write( + bizhawk_ctx, + [write8(ZMConstants.gIncomingItemId, item_data.id), + write8(ZMConstants.gIncomingItemCount, copies), + write(ZMConstants.gMultiworldItemSenderName, sender)], + guard_list) + except bizhawk.RequestFailedError: + return + + async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: + if self.dc_pending: + await client_ctx.disconnect() + return + + if client_ctx.server is None or client_ctx.server.socket.closed or client_ctx.slot_data is None: + return + + if self.death_link.update_pending: + await client_ctx.update_death_link(self.death_link.enabled) + self.death_link.update_pending = False + + bizhawk_ctx = client_ctx.bizhawk_ctx + + try: + read_result = iter(await bizhawk.read(bizhawk_ctx, [ + read16(ZMConstants.gMainGameMode), + read16(ZMConstants.gGameModeSub1), + ])) + except bizhawk.RequestFailedError: + return + + gMainGameMode = next_int(read_result) + gGameModeSub1 = next_int(read_result) + + gameplay_state = (gMainGameMode, gGameModeSub1) + + if not self.is_state_read_safe(gMainGameMode, gGameModeSub1): + return + + await self.send_game_state(client_ctx, gameplay_state) + if self.death_link.enabled: if (gameplay_state == (ZMConstants.GM_INGAME, ZMConstants.SUB_GAME_MODE_DYING) or gMainGameMode == ZMConstants.GM_GAMEOVER): @@ -349,40 +576,42 @@ async def game_watcher(self, client_ctx: BizHawkClientContext) -> None: if not self.is_state_write_safe(gMainGameMode, gGameModeSub1): return - write_list = [] guard_list = [ # Ensure game state hasn't changed guard16(ZMConstants.gMainGameMode, gMainGameMode), guard16(ZMConstants.gGameModeSub1, gGameModeSub1), ] - if gameplay_state == (ZMConstants.GM_INGAME, ZMConstants.SUB_GAME_MODE_PLAYING): - if (gPreventMovementTimer != 0): - return - guard_list.append(guard16(ZMConstants.gPreventMovementTimer, 0)) - # Receive death link if self.death_link.enabled and self.death_link.pending: self.death_link.sent_this_death = True - write_list.append(write8(ZMConstants.gEquipment + 6, 0)) # gEquipment.currentEnergy + try: + await bizhawk.guarded_write(bizhawk_ctx, [write8(ZMConstants.gEquipment + 6, 0)], guard_list) + except bizhawk.RequestFailedError: + return - if gMultiworldItemCount < len(client_ctx.items_received): - next_item = client_ctx.items_received[gMultiworldItemCount] - next_item_id = next_item.item - AP_MZM_ID_BASE - next_item_sender = encode_str(client_ctx.player_names[next_item.player]) + 0xFF00.to_bytes(2, "little") + received_items = self.received_items + if not client_ctx.slot_data["remote_items"]: + remote_items = [item for item in received_items.remote if item.player != client_ctx.slot or item.location <= 0] + received_items = self.received_items._replace(remote=remote_items) - write_list += [ - write8(ZMConstants.gIncomingItemId, next_item_id), - write(ZMConstants.gMultiworldItemSenderName, next_item_sender), - ] - guard_list += [ - guard8(ZMConstants.gIncomingItemId, ZMConstants.ITEM_NONE), - ] + await self.handle_received_items(client_ctx, received_items) - try: - await bizhawk.guarded_write(bizhawk_ctx, write_list, guard_list) - except bizhawk.RequestFailedError: - return + acquired_items = itertools.chain(received_items.starting, received_items.local, self.remote_items_acquired) + await self.update_equipment(client_ctx, gameplay_state, acquired_items) + + if self.queued_item is not None: + await self.write_received_item(client_ctx, gameplay_state) + + def create_collection(self, ctx: BizHawkClientContext): + def is_local(item: NetworkItem): + return item.player == ctx.slot and item.location in self.local_checked_locations + + starting = itertools.takewhile(lambda item: item.location == -2, ctx.items_received) + t1, t2 = itertools.tee(itertools.dropwhile(lambda item: item.location == -2, ctx.items_received)) + remote = itertools.filterfalse(is_local, t1) + local = filter(is_local, t2) + return ItemCollection(list(starting), list(local), list(remote)) def on_package(self, ctx: BizHawkClientContext, cmd: str, args: dict) -> None: if cmd == "Connected": @@ -393,7 +622,9 @@ def on_package(self, ctx: BizHawkClientContext, cmd: str, args: dict) -> None: if ctx.seed_name and ctx.seed_name != args["seed_name"]: # CommonClient's on_package displays an error to the user in this case, but connection is not cancelled. self.dc_pending = True + if cmd == "ReceivedItems": + self.received_items = self.create_collection(ctx) if cmd == "Bounced": tags = args.get("tags", []) - if "DeathLink" in tags and args["data"]["source"] != ctx.auth: + if "DeathLink" in tags: self.death_link.pending = True diff --git a/data/basepatch.bsdiff b/data/basepatch.bsdiff index f0ce30e..db3ad35 100644 Binary files a/data/basepatch.bsdiff and b/data/basepatch.bsdiff differ diff --git a/data/extracted_symbols.json b/data/extracted_symbols.json index ecdd10e..90cd8b4 100644 --- a/data/extracted_symbols.json +++ b/data/extracted_symbols.json @@ -1 +1 @@ -{"ewram": {"gClipdataCollisionTypes": 33562624, "gClipdataCollisionTypes_Tilemap": 33563648, "gClipdataBehaviorTypes": 33566720, "gClipdataBehaviorTypes_Tilemap": 33568768, "gTilemap": 33570816, "gCommonTilemap": 33579008, "gDecompBg3Map": 33583104, "gHazeValues": 33710848, "gPreviousHazeValues": 33713408, "gCurrentCharacterGfx": 33715968, "gMakeSolidBlocks": 33716096, "gDecompClipdataMap": 33716224, "gDecompBg0Map": 33728512, "gDecompBg1Map": 33740800, "gDecompBg2Map": 33753088, "gMinimapTilesWithObtainedItems": 33765376, "gDecompressedMinimapVisitedTiles": 33767424, "gDecompressedMinimapData": 33769472, "unk_02035400": 33772544, "gNeverReformBlocks": 33774592, "gItemsCollected": 33778688, "gVisitedMinimapTiles": 33780736, "gHatchesOpened": 33782784, "gEventsTriggered": 33783296, "gMinimapTilesGfx": 33783328, "gSram": 33783808, "gSramDemoInputData": 33812608, "gSramDemoInputDuration": 33813120}, "iwram": {"gDebugFlag": 50331648, "gSramErrorFlag": 50331649, "gFrameCounter16Bit": 50331650, "gStereoFlag": 50331652, "gSubGameModeStage": 50331653, "gWrittenToBLDALPHA": 50331654, "gWrittenToBLDCNT_Internal": 50331656, "gWrittenToDISPCNT": 50331658, "gWrittenToWININ_H": 50331662, "gWrittenToWINOUT_L": 50331663, "gBackdropColor": 50331664, "gWrittenToBLDY": 50331666, "gFileScreenOptionsUnlocked": 50331668, "gLanguage": 50331680, "gGameCompletion": 50331684, "gCompletedGameFlagCopy": 50331688, "gMonochromeBgFading": 50331689, "gWhichBGPositionIsWrittenToBG3OFS": 50331690, "gSamusOnTopOfBackgrounds": 50331691, "gDifficulty": 50331692, "gUseMotherShipDoors": 50331693, "gTimeAttackFlag": 50331694, "gCutsceneToSkip": 50331695, "gMusicTrackInfo": 50331696, "gCurrentDemo": 50331704, "gResetGame": 50331708, "gDisableScrolling": 50331709, "gSlowScrollingTimer": 50331710, "gSkipDoorTransition": 50331714, "gDisableSoftreset": 50331715, "gCollectingTank": 50331716, "gDisableAnimatedGraphicsTimer": 50331717, "gAnimatedGraphicsToUpdate": 50331718, "gDisableDoorAndTanks": 50331720, "gDisablePause": 50331721, "gHideHud": 50331722, "gShipLandingFlag": 50331723, "gDisableClipdataChangingTransparency": 50331724, "gDisableAnimatedPalette": 50331725, "gInGameCutscenesTriggered": 50331728, "gCurrentArea": 50331732, "gCurrentRoom": 50331733, "gLastDoorUsed": 50331734, "gLastDoorProperties": 50331735, "gDisplayLocationText": 50331736, "gMinimapX": 50331737, "gMinimapY": 50331738, "gNumberOfNeverReformBlocks": 50331739, "gNumberOfItemsCollected": 50331747, "gCurrentHazeValue": 50331755, "gEffectYPosition": 50331756, "gEffectYPositionOffset": 50331758, "gScreenShakeXOffset": 50331761, "gScreenShakeYOffset": 50331762, "gScreenShakeRelated": 50331764, "gDISPCNTBackup": 50331766, "gSpriteset": 50331768, "gCurrentClipdataAffectingAction": 50331769, "gSpritesetEntryUsed": 50331770, "gDoorUnlockTimer": 50331771, "gDisableDrawingSprites": 50331772, "gCurrentCutscene": 50331773, "gTourianEscapeCutsceneStage": 50331774, "gFreeMovementLockCamera": 50331775, "gHazeInfo": 50331776, "gIoRegistersBackup": 50331784, "gBgPointersAndDimensions": 50331804, "gCurrentRoomEntry": 50331836, "gCurrentAffectingClipdata": 50331868, "gBackgroundPositions": 50331876, "gWaitingSpacePiratesPosition": 50331896, "gBg2Movement": 50331900, "gLockScreen": 50331904, "gSuitFlashEffect": 50331912, "gScreenShakeY": 50331920, "gScreenShakeX": 50331924, "gCurrentScrolls": 50331928, "gCurrentPowerBomb": 50331952, "gCamera": 50331972, "gMaxInGameTimerFlag": 50331980, "gInGameTimer": 50331984, "gBestCompletionTimes": 50331988, "gInGameTimerAtBosses": 50332036, "gLastElevatorUsed": 50332056, "gInGameCutscene": 50332060, "gAlarmTimer": 50332072, "gSpriteData": 50332076, "gSpritesetSpritesID": 50333420, "gSpritesetGfxSlots": 50333435, "gSubSpriteData1": 50333452, "gSubSpriteData2": 50333472, "gParasiteRelated": 50333492, "gCurrentSprite": 50333496, "gSpriteDebris": 50333552, "gPreviousVerticalCollisionCheck": 50333680, "gPreviousCollisionCheck": 50333681, "gIgnoreSamusAndSpriteCollision": 50333682, "gSpriteDrawOrder": 50333683, "gBossWork": 50333708, "gSpriteRng": 50333756, "gParticleEffects": 50333760, "gMissileHighlightStatus": 50333952, "gPowerBombHighlightStatus": 50333953, "gSuperMissileHighlightStatus": 50333954, "gUpdateMinimapFlag": 50333955, "gEnergyDigits": 50333956, "gMaxEnergyDigits": 50333960, "gMissileDigits": 50333964, "gPowerBombDigits": 50333968, "gSuperMissileDigits": 50333972, "gCurrentParticleEffectOamFramePointer": 50333976, "gAmmoDigitsGfx": 50333980, "gCurrentEscapeStatus": 50334044, "gEscapeTimerCounter": 50334045, "gEscapeTimerDigits": 50334046, "gParticleEscapeOamFrames": 50334052, "gEnergyRefillAnimation": 50334102, "gMissileRefillAnimation": 50334103, "gSuperMissileRefillAnimation": 50334104, "gPowerBombRefillAnimation": 50334105, "gParticleSamusReflectionOamFrames": 50334106, "gProjectileData": 50334252, "gArmCannonY": 50334700, "gArmCannonX": 50334702, "gPauseScreenFlag": 50334704, "gAreaBeforeTransition": 50334705, "gCurrentItemBeingAcquired": 50334706, "gOptionsOptionSelected": 50334707, "gBg0HOFS_NonGameplay": 50334708, "gBg0VOFS_NonGameplay": 50334710, "gBg1HOFS_NonGameplay": 50334712, "gBg1VOFS_NonGameplay": 50334714, "gBg2HOFS_NonGameplay": 50334716, "gBg2VOFS_NonGameplay": 50334718, "gBg3HOFS_NonGameplay": 50334720, "gBg3VOFS_NonGameplay": 50334722, "gCurrentOamRotation": 50334724, "gCurrentOamScaling": 50334726, "gLastAreaNameVisited": 50334728, "gCurrentMessage": 50334732, "gSramCorruptFlag": 50334748, "gIsLoadingFile": 50334749, "gMostRecentSaveFile": 50334750, "gHasSaved": 50334751, "gUnk_3000c20": 50334752, "gSramOperationStage": 50334753, "gSaveFilesInfo": 50334756, "gStartingInfo": 50334828, "gMainGameMode": 50334832, "gGameModeSub1": 50334834, "gGameModeSub2": 50334836, "gGameModeSub3": 50334837, "gVblankActive": 50334838, "gFrameCounter8Bit": 50334839, "gVBlankRequestFlag": 50334840, "gInterruptCode": 50334844, "gOamData": 50335356, "gButtonInput": 50336636, "gPreviousButtonInput": 50336638, "gChangedInput": 50336640, "gNextOamSlot": 50336642, "gWrittenToBG2X": 50336660, "gWrittenToBG2Y": 50336664, "gWrittenToMOSAIC_H": 50336668, "gWrittenToMOSAIC_L": 50336670, "gBg2Scaling": 50336672, "gUnk_30013a2": 50336674, "gBg2Rotation": 50336676, "gWrittenToBG2PA": 50336678, "gWrittenToBG2PB": 50336680, "gWrittenToBG2PC": 50336682, "gWrittenToBG2PD": 50336684, "gWrittenToBLDY_NonGameplay": 50336686, "gWrittenToBLDALPHA_L": 50336688, "gWrittenToBLDALPHA_H": 50336690, "gBg0XPosition": 50336692, "gBg0YPosition": 50336694, "gBg1XPosition": 50336696, "gBg1YPosition": 50336698, "gBg2XPosition": 50336700, "gBg2YPosition": 50336702, "gBg3XPosition": 50336704, "gBg3YPosition": 50336706, "gDemoState": 50336722, "gSamusData": 50336724, "gSamusDataCopy": 50336756, "gSamusWeaponInfo": 50336788, "gSamusEcho": 50336796, "gScrewSpeedAnimation": 50337064, "gEquipment": 50337072, "gSamusHazardDamage": 50337092, "gSamusEnvironmentalEffects": 50337100, "gSamusPhysics": 50337160, "gPreviousXPosition": 50337280, "gPreviousYPosition": 50337282, "gEndingFlags": 50337284, "gPreventMovementTimer": 50337286, "gDisableDrawingSamusAndScrolling": 50337288, "gTimeAttackData": 50337292, "gButtonAssignments": 50337420, "gTimeAttackRecord": 50337428, "gNonGameplayRAM": 50337476, "gVBlankCallback": 50339052, "gHBlankCallback": 50339056, "gVCountCallback": 50339060, "gSerialCommunicationCallback": 50339064, "gTimer3Callback": 50339068, "gMusicInfo": 50339072, "gUnk_300376c": 50345836, "gPsgSounds": 50345876, "gSoundChannelBackup": 50346036, "gSoundChannelTrack2Backup": 50346428, "gSoundQueue": 50346820, "gSoundCodeAPointer": 50346892, "gSoundCodeA": 50346896, "gSoundCodeBPointer": 50348520, "gSoundCodeB": 50348524, "gSoundCodeCPointer": 50348688, "gSoundCodeC": 50348692, "gTrack0Variables": 50348872, "gTrack1Variables": 50349832, "gTrack2Variables": 50350632, "gTrack3Variables": 50350792, "gTrack4Variables": 50350952, "gTrack5Variables": 50351112, "gTrack6Variables": 50351272, "gTrack7Variables": 50351512, "gTrack8Variables": 50351592, "gUnk_03004fc9": 50352073, "gDemoInputData": 50352074, "gDemoInputDuration": 50352586, "gDemoInputNumber": 50353098, "gDemoInputTimer": 50353100, "gDemoInput": 50353102, "gNotPressingUp": 50353104, "gSamusPalette": 50353120, "gSamusPaletteSize": 50353216, "gWrittenToWIN1H": 50353224, "gWrittenToWIN1V": 50353226, "gWrittenToBLDCNT": 50353228, "gTilemapAndClipPointers": 50353232, "gHatchData": 50353244, "gNumberOfValidHatchesInRoom": 50353372, "gDoorPositionStart": 50353376, "gHatchesState": 50353380, "gBg3Movement": 50353388, "gBg0Movement": 50353396, "gTilesetTransparentColor": 50353404, "gUnusedStruct_3005504": 50353412, "gSamusDoorPositionOffset": 50353420, "gDestinationRoom": 50353422, "gBg3CntDuringDoorTransition": 50353424, "gBg1CntDuringDoorTransition": 50353426, "gUnk_3005514": 50353428, "gScreenYOffset": 50353429, "gScreenXOffset": 50353430, "gRainSoundEffect": 50353432, "gWaterMovement": 50353436, "gColorFading": 50353440, "gBrokenBlocks": 50353448, "gLastTankCollected": 50353832, "gBombChains": 50353836, "gActiveBombChainTypes": 50353852, "gTransparencyRelated": 50353856, "gDefaultTransparency": 50353860, "gBldalphaData1": 50353868, "gBldalphaData2": 50353876, "gBLDYData1": 50353884, "gBLDYData2": 50353892, "gAnimatedPaletteTiming": 50353900, "gHatchFlashingAnimation": 50353904, "gAnimatedGraphicsEntry": 50353908, "gBackgroundEffect": 50353912, "gScrollCounter": 50353920, "gClipdataCodePointer": 50353924, "gCurrentRoomScrollDataPointer": 50353928, "gScrollingVelocityCaps": 50353940, "gHazeLoops": 50353948, "gUnk_3005728": 50353960, "gUnk_3005729": 50353961, "gHazeProcessCodePointer": 50353964, "gAnimatedGraphicsData": 50353968, "gTankAnimations": 50354160, "gMaintainedInputData": 50354176, "gUnk_3005804": 50354180, "gOamXOffset_NonGameplay": 50354182, "gOamYOffset_NonGameplay": 50354183, "gIoTransferInfo": 50354184, "gMultiBootParamData": 50354208, "gDataSentPointer": 50354284, "gDataSentSize": 50354288, "gUnk_3005874": 50354292, "gUnk_3005880": 50354304, "gUnk_3005884": 50354308, "gUnk_3005888": 50354312, "gUnk_3005890": 50354320, "gUnk_30058a8": 50354344, "gUnk_30058aa": 50354346, "gUnk_30058ac": 50354348, "gUnk_30058ae": 50354350, "gUnk_30058af": 50354351, "gUnk_30058b0": 50354352, "gUnk_30058b1": 50354353, "gRegIme_Backup": 50354354, "gRegIe_Backup": 50354356, "gRegTm3Cnt_H_Backup": 50354358, "gRegSiocnt_Backup": 50354360, "gRegRcnt_Backup": 50354362, "gErrorFlag": 50354364, "gUnk_30058c0": 50354368, "gUnk_30058c4": 50354372, "gUnk_30058cc": 50354380, "gUnk_30058cd": 50354381, "gUnk_30058ce": 50354382, "gUnk_30058cf": 50354383, "gUnk_30058d0": 50354384, "gUnk_30058d2": 50354386, "gUnk_30058d3": 50354387, "gUnk_30058d5": 50354389, "gUnk_30058d6": 50354390, "gUnk_30058d8": 50354392, "gUnk_30058da": 50354394, "gTrackData8": 50354448, "gTrackData3": 50354512, "gTrackData1": 50354576, "gTrackData6": 50354640, "gTrackData4": 50354704, "gTrackData0": 50354768, "gTrackData7": 50354832, "gTrackData2": 50354896, "gTrackData5": 50354960, "gUnk_3005b50": 50355024, "gUnk_3005b54": 50355028, "gCableLinkInfo": 50355040, "gRandoLocationBitfields": 50355460, "gIncomingItemId": 50355488, "gReceivingFromMultiworld": 50355489, "gMultiworldItemCount": 50355490, "gMultiworldItemSenderName": 50355492, "gDynamicMessageBuffer": 50355564, "sp_sys": 50364000, "sp_irq": 50364320, "gInterruptCheckFlag": 50364408, "gIntrCodePointer": 50364412, "intr_vector": 50364412}, "rom": {"sMorphBallGfx": 137050796, "sMorphBallPal": 137051468, "sMorphBallOam_Idle_Frame0": 137051500, "sMorphBallOam_Idle_Frame1": 137051508, "sMorphBallOam_Idle_Frame2": 137051516, "sMorphBallOutsideOam_Idle_Frame0": 137051524, "sMorphBallOutsideOam_Idle_Frame1": 137051532, "sMorphBallOutsideOam_Idle_Frame2": 137051540, "sMorphBallOutsideOam_Idle_Frame3": 137051548, "sMorphBallOutsideOam_Idle_Frame4": 137051556, "sMorphBallOam_Idle": 137051564, "sMorphBallOutsideOam_Idle": 137051604, "sPowerGripGfx": 137051652, "sPowerGripPal": 137052768, "sPowerGripOAM_Idle_Frame0": 137052832, "sPowerGripOAM_Idle_Frame1": 137052840, "sPowerGripOAM_Idle_Frame2": 137052848, "sPowerGripGlowOAM_Idle_Frame0": 137052856, "sPowerGripGlowOAM_Idle_Frame2": 137052876, "sPowerGripGlowOAM_Idle_Frame4": 137052896, "sPowerGripGlowOAM_Idle_Frame6": 137052916, "sPowerGripGlowOAM_Idle_Frame1": 137052936, "sPowerGripOAM_Idle": 137052944, "sPowerGripGlowOAM_Idle": 137052984, "sChargeBeamIdleYMovement": 137053104, "sChargeBeamGfx": 137053236, "sChargeBeamPal": 137054208, "sChargeBeamOAM_Visible_Frame0": 137054240, "sChargeBeamOAM_Visible_Frame1": 137054248, "sChargeBeamOAM_Visible_Frame2": 137054256, "sChargeBeamGlowOAM_Idle_Frame0": 137054270, "sChargeBeamGlowOAM_Idle_Frame2": 137054290, "sChargeBeamGlowOAM_Idle_Frame4": 137054310, "sChargeBeamGlowOAM_Idle_Frame6": 137054330, "sChargeBeamGlowOAM_Idle_Frame1": 137054350, "sChargeBeamOAM_Spawning_Frame0": 137054358, "sChargeBeamOAM_Spawning_Frame1": 137054384, "sChargeBeamOAM_Spawning_Frame2": 137054440, "sChargeBeamOAM_Spawning_Frame3": 137054496, "sChargeBeamOAM_Spawning_Frame4": 137054576, "sChargeBeamOAM_Spawning_Frame8": 137054662, "sChargeBeamOAM_Spawning_Frame9": 137054760, "sChargeBeamOAM_Spawning_Frame10": 137054858, "sChargeBeamOAM_Spawning_Frame11": 137054962, "sChargeBeamOAM_Visible": 137054972, "sChargeBeamOAM_Spawning": 137055012, "sChargeBeamGlowOAM_Idle": 137055116, "sChozoStatueMultiSpriteData_Standing_Frame0": 137055236, "sChozoStatueMultiSpriteData_Sitting_Frame0": 137055266, "sChozoStatueMultiSpriteData_Sitting_Frame1": 137055296, "sChozoStatueMultiSpriteData_Sitting_Frame2": 137055326, "sChozoStatueMultiSpriteData_Sitting_Frame3": 137055356, "sChozoStatueMultiSpriteData_Sitting_Frame5": 137055386, "sChozoStatueMultiSpriteData_Sitting_Frame6": 137055416, "sChozoStatueMultiSpriteData_Sitting_Frame7": 137055446, "sChozoStatueMultiSpriteData_Sitting_Frame8": 137055476, "sChozoStatueMultiSpriteData_Sitting_Frame9": 137055506, "sChozoStatueMultiSpriteData_Seated_Frame0": 137055536, "sChozoStatueMultiSpriteData_Standing": 137055568, "sChozoStatueMultiSpriteData_Sitting": 137055584, "sChozoStatueMultiSpriteData_Seated": 137055672, "sChozoStatueFlashingPaletteRows": 137055688, "sChozoStatueLongBeamGfx": 137055692, "sChozoStatueLongBeamPal": 137061032, "sChozoStatuePartOAM_LegStanding_Frame0": 137061192, "sChozoStatuePartOAM_LegSitting_Frame0": 137061224, "sChozoStatuePartOAM_LegSitting_Frame1": 137061256, "sChozoStatuePartOAM_LegSitting_Frame2": 137061288, "sChozoStatuePartOAM_LegSitting_Frame3": 137061320, "sChozoStatuePartOAM_LegSitting_Frame5": 137061352, "sChozoStatuePartOAM_LegSitting_Frame6": 137061378, "sChozoStatuePartOAM_LegSitting_Frame7": 137061410, "sChozoStatuePartOAM_LegSitting_Frame8": 137061442, "sChozoStatuePartOAM_LegSeated_Frame0": 137061474, "sChozoStatueOAM_Idle_Frame0": 137061512, "sChozoStatuePartOAM_EyeClosing_Frame0": 137061538, "sChozoStatuePartOAM_EyeClosing_Frame1": 137061546, "sChozoStatuePartOAM_EyeClosed_Frame0": 137061554, "sChozoStatuePartOAM_ArmIdle_Frame0": 137061562, "sChozoStatuePartOAM_ArmGlow_Frame1": 137061588, "sChozoStatuePartOAM_ArmGlow_Frame2": 137061626, "sChozoStatuePartOAM_ArmGlow_Frame3": 137061664, "sChozoStatuePartOAM_ArmGlow_Frame4": 137061702, "sChozoStatuePartOAM_ArmSamusGrabbed_Frame0": 137061740, "sChozoBallOam_NormalClosed_Frame0": 137061766, "sChozoBallOam_NormalClosed_Frame1": 137061786, "sChozoBallOam_NormalClosed_Frame3": 137061806, "sChozoBallOam_NormalRevealing_Frame0": 137061826, "sChozoBallOam_NormalRevealing_Frame1": 137061858, "sChozoBallOam_NormalRevealing_Frame2": 137061890, "sChozoBallOam_NormalRevealed_Frame0": 137061922, "sChozoBallOam_NormalRevealed_Frame1": 137061936, "sChozoBallOam_NormalRevealed_Frame2": 137061950, "sChozoStatueRefillOAM_Frame0": 137061964, "sChozoStatueRefillOAM_Frame2": 137061990, "sChozoStatueRefillOAM_Frame4": 137062016, "sChozoStatueRefillOAM_Frame10": 137062042, "sChozoStatueRefillOAM_Frame12": 137062068, "sChozoStatueRefillOAM_Frame18": 137062094, "sChozoStatueRefillOAM_Frame20": 137062120, "sChozoStatueRefillOAM_Frame26": 137062146, "sChozoStatueRefillOAM_Frame28": 137062172, "sChozoStatueRefillOAM_Frame34": 137062198, "sChozoStatuePartOAM_EyeOpened_Frame0": 137062224, "sChozoStatuePartOAM_GlowIdle_Frame0": 137062232, "sChozoStatuePartOAM_GlowIdle_Frame4": 137062246, "sChozoStatuePartOAM_GlowIdle_Frame8": 137062272, "sChozoStatuePartOAM_GlowIdle_Frame12": 137062310, "sChozoStatuePartOAM_GlowIdle_Frame16": 137062360, "sChozoStatuePartOAM_GlowIdle_Frame20": 137062422, "sChozoStatuePartOAM_GlowIdle_Frame24": 137062496, "sChozoStatuePartOAM_GlowIdle_Frame28": 137062570, "sChozoStatuePartOAM_GlowIdle_Frame32": 137062632, "sChozoStatuePartOAM_GlowIdle_Frame36": 137062682, "sChozoStatuePartOAM_LegStanding": 137062708, "sChozoStatuePartOAM_LegSitting": 137062724, "sChozoStatuePartOAM_LegSeated": 137062804, "sChozoStatueOAM_Idle": 137062820, "sChozoStatuePartOAM_EyeOpened": 137062836, "sChozoStatuePartOAM_EyeClosing": 137062852, "sChozoStatuePartOAM_EyeOpening": 137062876, "sChozoStatuePartOAM_EyeClosed": 137062900, "sChozoStatuePartOAM_ArmIdle": 137062916, "sChozoStatuePartOAM_ArmGlow": 137062932, "sChozoStatuePartOAM_ArmSamusGrabbed": 137063004, "sChozoBallOam_NormalClosed": 137063020, "sChozoBallOam_NormalRevealing": 137063060, "sChozoBallOam_NormalRevealed": 137063092, "sChozoStatueRefillOAM": 137063132, "sChozoStatuePartOAM_GlowIdle": 137063460, "sChozoStatueIceBeamGfx": 137063788, "sChozoStatueIceBeamPal": 137069128, "sChozoStatueWaveBeamGfx": 137069288, "sChozoStatueWaveBeamPal": 137074628, "sChozoStatueBombsGfx": 137074788, "sChozoStatueBombsPal": 137080144, "sChozoStatueSpeedboosterGfx": 137080304, "sChozoStatueSpeedboosterPal": 137085672, "sChozoStatueHighJumpGfx": 137085832, "sChozoStatueHighJumpPal": 137091320, "sChozoStatueScrewAttackGfx": 137091480, "sChozoStatueScrewAttackPal": 137096992, "sChozoStatueVariaGfx": 137097152, "sChozoStatueVariaPal": 137102544, "sUnknownItemChozoStatueMultiSpriteData_Standing_Frame0": 137102704, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame0": 137102734, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame1": 137102764, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame2": 137102794, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame3": 137102824, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame5": 137102854, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame6": 137102884, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame7": 137102914, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame8": 137102944, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame9": 137102974, "sUnknownItemChozoStatueMultiSpriteData_Seated_Frame0": 137103004, "sUnknownItemChozoStatueMultiSpriteData_Standing": 137103036, "sUnknownItemChozoStatueMultiSpriteData_Sitting": 137103052, "sUnknownItemChozoStatueMultiSpriteData_Seated": 137103140, "sUnknownItemChozoStatueFlashingPaletteRows": 137103156, "sChozoStatueSpaceJumpGfx": 137103160, "sChozoStatueSpaceJumpPal": 137108572, "sUnknownItemChozoStatuePartOAM_LegStanding_Frame0": 137108732, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame0": 137108764, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame1": 137108796, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame2": 137108828, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame3": 137108860, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame5": 137108892, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame6": 137108918, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame7": 137108950, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame8": 137108982, "sUnknownItemChozoStatuePartOAM_LegSeated_Frame0": 137109014, "sUnknownItemChozoStatueOAM_Idle_Frame0": 137109064, "sUnknownItemChozoStatuePartOAM_EyeClosing_Frame0": 137109096, "sUnknownItemChozoStatuePartOAM_EyeClosing_Frame1": 137109104, "sUnknownItemChozoStatuePartOAM_EyeClosed_Frame0": 137109112, "sUnknownItemChozoStatuePartOAM_ArmIdle_Frame0": 137109120, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame1": 137109176, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame2": 137109244, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame3": 137109312, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame4": 137109380, "sUnknownItemChozoStatuePartOAM_ArmSamusGrabbed_Frame0": 137109448, "sChozoBallOam_UnknownClosed_Frame0": 137109504, "sChozoBallOam_UnknownClosed_Frame1": 137109524, "sChozoBallOam_UnknownClosed_Frame3": 137109544, "sChozoBallOam_UnknownRevealing_Frame0": 137109564, "sChozoBallOam_UnknownRevealing_Frame1": 137109596, "sChozoBallOam_UnknownRevealing_Frame2": 137109634, "sChozoBallOam_UnknownRevealed_Frame0": 137109672, "sChozoBallOam_UnknownRevealed_Frame1": 137109686, "sChozoBallOam_UnknownRevealed_Frame2": 137109700, "sUnknownItemChozoStatueRefillOAM_Frame0": 137109714, "sUnknownItemChozoStatueRefillOAM_Frame2": 137109740, "sUnknownItemChozoStatueRefillOAM_Frame4": 137109766, "sUnknownItemChozoStatueRefillOAM_Frame10": 137109792, "sUnknownItemChozoStatueRefillOAM_Frame12": 137109818, "sUnknownItemChozoStatueRefillOAM_Frame18": 137109844, "sUnknownItemChozoStatueRefillOAM_Frame20": 137109870, "sUnknownItemChozoStatueRefillOAM_Frame26": 137109896, "sUnknownItemChozoStatueRefillOAM_Frame28": 137109922, "sUnknownItemChozoStatueRefillOAM_Frame34": 137109948, "sUnknownItemChozoStatuePartOAM_EyeOpened_Frame0": 137109974, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame0": 137109982, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame4": 137109996, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame8": 137110022, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame12": 137110060, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame16": 137110110, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame20": 137110172, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame24": 137110246, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame28": 137110320, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame32": 137110382, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame36": 137110432, "sUnknownItemChozoStatuePartOAM_LegStanding": 137110460, "sUnknownItemChozoStatuePartOAM_LegSitting": 137110476, "sUnknownItemChozoStatuePartOAM_LegSeated": 137110556, "sUnknownItemChozoStatueOAM_Idle": 137110572, "sUnknownItemChozoStatuePartOAM_EyeOpened": 137110588, "sUnknownItemChozoStatuePartOAM_EyeClosing": 137110604, "sUnknownItemChozoStatuePartOAM_EyeOpening": 137110628, "sUnknownItemChozoStatuePartOAM_EyeClosed": 137110652, "sUnknownItemChozoStatuePartOAM_ArmIdle": 137110668, "sUnknownItemChozoStatuePartOAM_ArmGlow": 137110684, "sUnknownItemChozoStatuePartOAM_ArmSamusGrabbed": 137110756, "sChozoBallOam_UnknownClosed": 137110772, "sChozoBallOam_UnknownRevealing": 137110812, "sChozoBallOam_UnknownRevealed": 137110844, "sUnknownItemChozoStatueRefillOAM": 137110884, "sUnknownItemChozoStatuePartOAM_GlowIdle": 137111212, "sChozoStatueGravitySuitGfx": 137111540, "sChozoStatueGravitySuitPal": 137116968, "sChozoStatuePlasmaBeamGfx": 137117128, "sChozoStatuePlasmaBeamPal": 137122552, "sHatchTypeTable": 137761588, "sHatchLockEventsBrinstar": 137761596, "sHatchLockEventsKraid": 137761604, "sHatchLockEventsCrateria": 137761612, "sHatchLockEventsChozodia": 137761644, "sEventBasedConnections": 137761772, "sAreaConnections": 137761936, "sHatchesAnimationDurationCounter": 137762014, "sHatchesTilemapValues": 137762020, "sNumberOfHatchLockEventsPerArea": 137762036, "sProcessProjectileFunctionPointers": 141955272, "sProcessParticleFunctionPointers": 141955336, "sAreaDoorsPointers": 141955580, "sAreaRoomEntryPointers": 141955608, "sAreaScrollPointers": 141956220, "sWaterLoopCounterArray": 141956264, "sNonReformDestroyFunctionPointers": 141956280, "sColorFadingSubroutinePointers": 141956300, "sHazeData": 141956316, "sBackgroundEffectBehaviorPointers": 141956368, "sHatchLockEventsPointers": 141956404, "sDemoRamDataPointers": 141956432, "sTourianEscapeFunctionPointers": 141956496, "sCutsceneScreenShakeOffsets_Set0": 141956504, "sCutsceneScreenShakeOffsetSetPointers": 141956508, "sCutsceneScreenShakeOffsetSetSizes": 141956524, "sRandoSeed": 142577468, "sRandoStartingInventory": 142577608, "sPlacedItems": 142577616, "sRandoLongBeamGfx": 142578816, "sRandoChargeBeamGfx": 142579328, "sRandoPlasmaBeamGfx": 142579840, "sRandoIceBeamGfx": 142580352, "sRandoWaveBeamGfx": 142580864, "sRandoMorphBallGfx": 142581376, "sRandoBombGfx": 142581888, "sRandoVariaSuitGfx": 142582400, "sRandoGravitySuitGfx": 142582912, "sRandoSpeedBoosterGfx": 142583424, "sRandoHiJumpGfx": 142583936, "sRandoScrewAttackGfx": 142584448, "sRandoSpaceJumpGfx": 142584960, "sRandoPowerGripGfx": 142585472, "sRandoNothingGfx": 142585984, "sRandoAPLogoGfx": 142586496, "sRandoSpazerBeamGfx": 142588032, "sRandoGrappleBeamGfx": 142588544, "sRandoSpringBallGfx": 142589056, "sRandoXRayScopeGfx": 142589568, "sRandoReserveTankGfx": 142590080, "sRandoPowerBeamGfx": 142590592, "sRandoSpiderBallGfx": 142591104, "sRandoPlasmaBeamPal": 142591616, "sRandoGrappleBeamPal": 142591648, "sRandoSpringBallPal": 142591680, "sRandoGravitySuitPal": 142591712, "sRandoSpaceJumpPal": 142591744, "sRandoNothingPal": 142591776, "sRandoAPLogoPal": 142591808, "sRandoSpazerBeamPal": 142591840, "sRandoXRayScopePal": 142591872, "sRandoReserveTankPal": 142591904, "sRandoWallJumpPal": 142591936, "sRandoPowerBeamPal": 142591968, "sRandoSpiderBallPal": 142592000, "sItemGfxPointers": 142592032, "sStartingLocationCamera": 142592272, "sRandoMultiworldDangerousSpritesets": 142592280, "sRandoMultiworldDangerousRooms": 142592296, "sRandoChozodiaSaveAndMapRooms": 142592332, "sRandoDisallowedSamusPoses": 142592340, "sItemMessages": 142592344, "sRandoItemAcquisitionSfx": 142592374, "sRegionLocationOffsets": 142592442, "sRoomItemsBrinstar": 142592450, "sRoomItemsKraid": 142592478, "sRoomItemsNorfair": 142592500, "sRoomItemsRidley": 142592536, "sRoomItemsTourian": 142592574, "sRoomItemsCrateria": 142592578, "sRoomItemsChozodia": 142592590, "sRandoAreaItemLists": 142592632, "sRandoAreaItemListLengths": 142592660, "sRandoItemToTankTilemap": 142592667, "sRandoAnimatedTileGaps": 142592671, "sRandoPaletteSlots": 142592679, "sRandoItemAndPlayerNames": 142592840}} \ No newline at end of file +{"ewram": {"gClipdataCollisionTypes": 33562624, "gClipdataCollisionTypes_Tilemap": 33563648, "gClipdataBehaviorTypes": 33566720, "gClipdataBehaviorTypes_Tilemap": 33568768, "gTilemap": 33570816, "gCommonTilemap": 33579008, "gDecompBg3Map": 33583104, "gHazeValues": 33710848, "gPreviousHazeValues": 33713408, "gCurrentCharacterGfx": 33715968, "gMakeSolidBlocks": 33716096, "gDecompClipdataMap": 33716224, "gDecompBg0Map": 33728512, "gDecompBg1Map": 33740800, "gDecompBg2Map": 33753088, "gMinimapTilesWithObtainedItems": 33765376, "gDecompressedMinimapVisitedTiles": 33767424, "gDecompressedMinimapData": 33769472, "unk_02035400": 33772544, "gNeverReformBlocks": 33774592, "gItemsCollected": 33778688, "gVisitedMinimapTiles": 33780736, "gHatchesOpened": 33782784, "gEventsTriggered": 33783296, "gMinimapTilesGfx": 33783328, "gSram": 33783808, "gSramDemoInputData": 33812608, "gSramDemoInputDuration": 33813120}, "iwram": {"gDebugFlag": 50331648, "gSramErrorFlag": 50331649, "gFrameCounter16Bit": 50331650, "gStereoFlag": 50331652, "gSubGameModeStage": 50331653, "gWrittenToBLDALPHA": 50331654, "gWrittenToBLDCNT_Internal": 50331656, "gWrittenToDISPCNT": 50331658, "gWrittenToWININ_H": 50331662, "gWrittenToWINOUT_L": 50331663, "gBackdropColor": 50331664, "gWrittenToBLDY": 50331666, "gFileScreenOptionsUnlocked": 50331668, "gLanguage": 50331680, "gGameCompletion": 50331684, "gCompletedGameFlagCopy": 50331688, "gMonochromeBgFading": 50331689, "gWhichBGPositionIsWrittenToBG3OFS": 50331690, "gSamusOnTopOfBackgrounds": 50331691, "gDifficulty": 50331692, "gUseMotherShipDoors": 50331693, "gTimeAttackFlag": 50331694, "gCutsceneToSkip": 50331695, "gMusicTrackInfo": 50331696, "gCurrentDemo": 50331704, "gResetGame": 50331708, "gDisableScrolling": 50331709, "gSlowScrollingTimer": 50331710, "gSkipDoorTransition": 50331714, "gDisableSoftreset": 50331715, "gCollectingTank": 50331716, "gDisableAnimatedGraphicsTimer": 50331717, "gAnimatedGraphicsToUpdate": 50331718, "gDisableDoorAndTanks": 50331720, "gDisablePause": 50331721, "gHideHud": 50331722, "gShipLandingFlag": 50331723, "gDisableClipdataChangingTransparency": 50331724, "gDisableAnimatedPalette": 50331725, "gInGameCutscenesTriggered": 50331728, "gCurrentArea": 50331732, "gCurrentRoom": 50331733, "gLastDoorUsed": 50331734, "gLastDoorProperties": 50331735, "gDisplayLocationText": 50331736, "gMinimapX": 50331737, "gMinimapY": 50331738, "gNumberOfNeverReformBlocks": 50331739, "gNumberOfItemsCollected": 50331747, "gCurrentHazeValue": 50331755, "gEffectYPosition": 50331756, "gEffectYPositionOffset": 50331758, "gScreenShakeXOffset": 50331761, "gScreenShakeYOffset": 50331762, "gScreenShakeRelated": 50331764, "gDISPCNTBackup": 50331766, "gSpriteset": 50331768, "gCurrentClipdataAffectingAction": 50331769, "gSpritesetEntryUsed": 50331770, "gDoorUnlockTimer": 50331771, "gDisableDrawingSprites": 50331772, "gCurrentCutscene": 50331773, "gTourianEscapeCutsceneStage": 50331774, "gFreeMovementLockCamera": 50331775, "gHazeInfo": 50331776, "gIoRegistersBackup": 50331784, "gBgPointersAndDimensions": 50331804, "gCurrentRoomEntry": 50331836, "gCurrentAffectingClipdata": 50331868, "gBackgroundPositions": 50331876, "gWaitingSpacePiratesPosition": 50331896, "gBg2Movement": 50331900, "gLockScreen": 50331904, "gSuitFlashEffect": 50331912, "gScreenShakeY": 50331920, "gScreenShakeX": 50331924, "gCurrentScrolls": 50331928, "gCurrentPowerBomb": 50331952, "gCamera": 50331972, "gMaxInGameTimerFlag": 50331980, "gInGameTimer": 50331984, "gBestCompletionTimes": 50331988, "gInGameTimerAtBosses": 50332036, "gLastElevatorUsed": 50332056, "gInGameCutscene": 50332060, "gAlarmTimer": 50332072, "gSpriteData": 50332076, "gSpritesetSpritesID": 50333420, "gSpritesetGfxSlots": 50333435, "gSubSpriteData1": 50333452, "gSubSpriteData2": 50333472, "gParasiteRelated": 50333492, "gCurrentSprite": 50333496, "gSpriteDebris": 50333552, "gPreviousVerticalCollisionCheck": 50333680, "gPreviousCollisionCheck": 50333681, "gIgnoreSamusAndSpriteCollision": 50333682, "gSpriteDrawOrder": 50333683, "gBossWork": 50333708, "gSpriteRng": 50333756, "gParticleEffects": 50333760, "gMissileHighlightStatus": 50333952, "gPowerBombHighlightStatus": 50333953, "gSuperMissileHighlightStatus": 50333954, "gUpdateMinimapFlag": 50333955, "gEnergyDigits": 50333956, "gMaxEnergyDigits": 50333960, "gMissileDigits": 50333964, "gPowerBombDigits": 50333968, "gSuperMissileDigits": 50333972, "gCurrentParticleEffectOamFramePointer": 50333976, "gAmmoDigitsGfx": 50333980, "gCurrentEscapeStatus": 50334044, "gEscapeTimerCounter": 50334045, "gEscapeTimerDigits": 50334046, "gParticleEscapeOamFrames": 50334052, "gEnergyRefillAnimation": 50334102, "gMissileRefillAnimation": 50334103, "gSuperMissileRefillAnimation": 50334104, "gPowerBombRefillAnimation": 50334105, "gParticleSamusReflectionOamFrames": 50334106, "gProjectileData": 50334252, "gArmCannonY": 50334700, "gArmCannonX": 50334702, "gPauseScreenFlag": 50334704, "gAreaBeforeTransition": 50334705, "gCurrentItemBeingAcquired": 50334706, "gOptionsOptionSelected": 50334707, "gBg0HOFS_NonGameplay": 50334708, "gBg0VOFS_NonGameplay": 50334710, "gBg1HOFS_NonGameplay": 50334712, "gBg1VOFS_NonGameplay": 50334714, "gBg2HOFS_NonGameplay": 50334716, "gBg2VOFS_NonGameplay": 50334718, "gBg3HOFS_NonGameplay": 50334720, "gBg3VOFS_NonGameplay": 50334722, "gCurrentOamRotation": 50334724, "gCurrentOamScaling": 50334726, "gLastAreaNameVisited": 50334728, "gCurrentMessage": 50334732, "gSramCorruptFlag": 50334748, "gIsLoadingFile": 50334749, "gMostRecentSaveFile": 50334750, "gHasSaved": 50334751, "gUnk_3000c20": 50334752, "gSramOperationStage": 50334753, "gSaveFilesInfo": 50334756, "gStartingInfo": 50334828, "gMainGameMode": 50334832, "gGameModeSub1": 50334834, "gGameModeSub2": 50334836, "gGameModeSub3": 50334837, "gVblankActive": 50334838, "gFrameCounter8Bit": 50334839, "gVBlankRequestFlag": 50334840, "gInterruptCode": 50334844, "gOamData": 50335356, "gButtonInput": 50336636, "gPreviousButtonInput": 50336638, "gChangedInput": 50336640, "gNextOamSlot": 50336642, "gWrittenToBG2X": 50336660, "gWrittenToBG2Y": 50336664, "gWrittenToMOSAIC_H": 50336668, "gWrittenToMOSAIC_L": 50336670, "gBg2Scaling": 50336672, "gUnk_30013a2": 50336674, "gBg2Rotation": 50336676, "gWrittenToBG2PA": 50336678, "gWrittenToBG2PB": 50336680, "gWrittenToBG2PC": 50336682, "gWrittenToBG2PD": 50336684, "gWrittenToBLDY_NonGameplay": 50336686, "gWrittenToBLDALPHA_L": 50336688, "gWrittenToBLDALPHA_H": 50336690, "gBg0XPosition": 50336692, "gBg0YPosition": 50336694, "gBg1XPosition": 50336696, "gBg1YPosition": 50336698, "gBg2XPosition": 50336700, "gBg2YPosition": 50336702, "gBg3XPosition": 50336704, "gBg3YPosition": 50336706, "gDemoState": 50336722, "gSamusData": 50336724, "gSamusDataCopy": 50336756, "gSamusWeaponInfo": 50336788, "gSamusEcho": 50336796, "gScrewSpeedAnimation": 50337064, "gEquipment": 50337072, "gSamusHazardDamage": 50337092, "gSamusEnvironmentalEffects": 50337100, "gSamusPhysics": 50337160, "gPreviousXPosition": 50337280, "gPreviousYPosition": 50337282, "gEndingFlags": 50337284, "gPreventMovementTimer": 50337286, "gDisableDrawingSamusAndScrolling": 50337288, "gTimeAttackData": 50337292, "gButtonAssignments": 50337420, "gTimeAttackRecord": 50337428, "gNonGameplayRAM": 50337476, "gVBlankCallback": 50339052, "gHBlankCallback": 50339056, "gVCountCallback": 50339060, "gSerialCommunicationCallback": 50339064, "gTimer3Callback": 50339068, "gMusicInfo": 50339072, "gUnk_300376c": 50345836, "gPsgSounds": 50345876, "gSoundChannelBackup": 50346036, "gSoundChannelTrack2Backup": 50346428, "gSoundQueue": 50346820, "gSoundCodeAPointer": 50346892, "gSoundCodeA": 50346896, "gSoundCodeBPointer": 50348520, "gSoundCodeB": 50348524, "gSoundCodeCPointer": 50348688, "gSoundCodeC": 50348692, "gTrack0Variables": 50348872, "gTrack1Variables": 50349832, "gTrack2Variables": 50350632, "gTrack3Variables": 50350792, "gTrack4Variables": 50350952, "gTrack5Variables": 50351112, "gTrack6Variables": 50351272, "gTrack7Variables": 50351512, "gTrack8Variables": 50351592, "gUnk_03004fc9": 50352073, "gDemoInputData": 50352074, "gDemoInputDuration": 50352586, "gDemoInputNumber": 50353098, "gDemoInputTimer": 50353100, "gDemoInput": 50353102, "gNotPressingUp": 50353104, "gSamusPalette": 50353120, "gSamusPaletteSize": 50353216, "gWrittenToWIN1H": 50353224, "gWrittenToWIN1V": 50353226, "gWrittenToBLDCNT": 50353228, "gTilemapAndClipPointers": 50353232, "gHatchData": 50353244, "gNumberOfValidHatchesInRoom": 50353372, "gDoorPositionStart": 50353376, "gHatchesState": 50353380, "gBg3Movement": 50353388, "gBg0Movement": 50353396, "gTilesetTransparentColor": 50353404, "gUnusedStruct_3005504": 50353412, "gSamusDoorPositionOffset": 50353420, "gDestinationRoom": 50353422, "gBg3CntDuringDoorTransition": 50353424, "gBg1CntDuringDoorTransition": 50353426, "gUnk_3005514": 50353428, "gScreenYOffset": 50353429, "gScreenXOffset": 50353430, "gRainSoundEffect": 50353432, "gWaterMovement": 50353436, "gColorFading": 50353440, "gBrokenBlocks": 50353448, "gLastTankCollected": 50353832, "gBombChains": 50353836, "gActiveBombChainTypes": 50353852, "gTransparencyRelated": 50353856, "gDefaultTransparency": 50353860, "gBldalphaData1": 50353868, "gBldalphaData2": 50353876, "gBLDYData1": 50353884, "gBLDYData2": 50353892, "gAnimatedPaletteTiming": 50353900, "gHatchFlashingAnimation": 50353904, "gAnimatedGraphicsEntry": 50353908, "gBackgroundEffect": 50353912, "gScrollCounter": 50353920, "gClipdataCodePointer": 50353924, "gCurrentRoomScrollDataPointer": 50353928, "gScrollingVelocityCaps": 50353940, "gHazeLoops": 50353948, "gUnk_3005728": 50353960, "gUnk_3005729": 50353961, "gHazeProcessCodePointer": 50353964, "gAnimatedGraphicsData": 50353968, "gTankAnimations": 50354160, "gMaintainedInputData": 50354176, "gUnk_3005804": 50354180, "gOamXOffset_NonGameplay": 50354182, "gOamYOffset_NonGameplay": 50354183, "gIoTransferInfo": 50354184, "gMultiBootParamData": 50354208, "gDataSentPointer": 50354284, "gDataSentSize": 50354288, "gUnk_3005874": 50354292, "gUnk_3005880": 50354304, "gUnk_3005884": 50354308, "gUnk_3005888": 50354312, "gUnk_3005890": 50354320, "gUnk_30058a8": 50354344, "gUnk_30058aa": 50354346, "gUnk_30058ac": 50354348, "gUnk_30058ae": 50354350, "gUnk_30058af": 50354351, "gUnk_30058b0": 50354352, "gUnk_30058b1": 50354353, "gRegIme_Backup": 50354354, "gRegIe_Backup": 50354356, "gRegTm3Cnt_H_Backup": 50354358, "gRegSiocnt_Backup": 50354360, "gRegRcnt_Backup": 50354362, "gErrorFlag": 50354364, "gUnk_30058c0": 50354368, "gUnk_30058c4": 50354372, "gUnk_30058cc": 50354380, "gUnk_30058cd": 50354381, "gUnk_30058ce": 50354382, "gUnk_30058cf": 50354383, "gUnk_30058d0": 50354384, "gUnk_30058d2": 50354386, "gUnk_30058d3": 50354387, "gUnk_30058d5": 50354389, "gUnk_30058d6": 50354390, "gUnk_30058d8": 50354392, "gUnk_30058da": 50354394, "gTrackData8": 50354448, "gTrackData3": 50354512, "gTrackData1": 50354576, "gTrackData6": 50354640, "gTrackData4": 50354704, "gTrackData0": 50354768, "gTrackData7": 50354832, "gTrackData2": 50354896, "gTrackData5": 50354960, "gUnk_3005b50": 50355024, "gUnk_3005b54": 50355028, "gCableLinkInfo": 50355040, "gRandoLocationBitfields": 50355460, "gIncomingItemId": 50355488, "gIncomingItemCount": 50355489, "gReceivingFromMultiworld": 50355490, "gMultiworldItemCount": 50355492, "gMultiworldItemSenderName": 50355494, "gDynamicMessageBuffer": 50355566, "sp_sys": 50364000, "sp_irq": 50364320, "gInterruptCheckFlag": 50364408, "gIntrCodePointer": 50364412, "intr_vector": 50364412}, "rom": {"sMorphBallGfx": 137051236, "sMorphBallPal": 137051908, "sMorphBallOam_Idle_Frame0": 137051940, "sMorphBallOam_Idle_Frame1": 137051948, "sMorphBallOam_Idle_Frame2": 137051956, "sMorphBallOutsideOam_Idle_Frame0": 137051964, "sMorphBallOutsideOam_Idle_Frame1": 137051972, "sMorphBallOutsideOam_Idle_Frame2": 137051980, "sMorphBallOutsideOam_Idle_Frame3": 137051988, "sMorphBallOutsideOam_Idle_Frame4": 137051996, "sMorphBallOam_Idle": 137052004, "sMorphBallOutsideOam_Idle": 137052044, "sPowerGripGfx": 137052092, "sPowerGripPal": 137053208, "sPowerGripOAM_Idle_Frame0": 137053272, "sPowerGripOAM_Idle_Frame1": 137053280, "sPowerGripOAM_Idle_Frame2": 137053288, "sPowerGripGlowOAM_Idle_Frame0": 137053296, "sPowerGripGlowOAM_Idle_Frame2": 137053316, "sPowerGripGlowOAM_Idle_Frame4": 137053336, "sPowerGripGlowOAM_Idle_Frame6": 137053356, "sPowerGripGlowOAM_Idle_Frame1": 137053376, "sPowerGripOAM_Idle": 137053384, "sPowerGripGlowOAM_Idle": 137053424, "sChargeBeamIdleYMovement": 137053544, "sChargeBeamGfx": 137053676, "sChargeBeamPal": 137054648, "sChargeBeamOAM_Visible_Frame0": 137054680, "sChargeBeamOAM_Visible_Frame1": 137054688, "sChargeBeamOAM_Visible_Frame2": 137054696, "sChargeBeamGlowOAM_Idle_Frame0": 137054710, "sChargeBeamGlowOAM_Idle_Frame2": 137054730, "sChargeBeamGlowOAM_Idle_Frame4": 137054750, "sChargeBeamGlowOAM_Idle_Frame6": 137054770, "sChargeBeamGlowOAM_Idle_Frame1": 137054790, "sChargeBeamOAM_Spawning_Frame0": 137054798, "sChargeBeamOAM_Spawning_Frame1": 137054824, "sChargeBeamOAM_Spawning_Frame2": 137054880, "sChargeBeamOAM_Spawning_Frame3": 137054936, "sChargeBeamOAM_Spawning_Frame4": 137055016, "sChargeBeamOAM_Spawning_Frame8": 137055102, "sChargeBeamOAM_Spawning_Frame9": 137055200, "sChargeBeamOAM_Spawning_Frame10": 137055298, "sChargeBeamOAM_Spawning_Frame11": 137055402, "sChargeBeamOAM_Visible": 137055412, "sChargeBeamOAM_Spawning": 137055452, "sChargeBeamGlowOAM_Idle": 137055556, "sChozoStatueMultiSpriteData_Standing_Frame0": 137055676, "sChozoStatueMultiSpriteData_Sitting_Frame0": 137055706, "sChozoStatueMultiSpriteData_Sitting_Frame1": 137055736, "sChozoStatueMultiSpriteData_Sitting_Frame2": 137055766, "sChozoStatueMultiSpriteData_Sitting_Frame3": 137055796, "sChozoStatueMultiSpriteData_Sitting_Frame5": 137055826, "sChozoStatueMultiSpriteData_Sitting_Frame6": 137055856, "sChozoStatueMultiSpriteData_Sitting_Frame7": 137055886, "sChozoStatueMultiSpriteData_Sitting_Frame8": 137055916, "sChozoStatueMultiSpriteData_Sitting_Frame9": 137055946, "sChozoStatueMultiSpriteData_Seated_Frame0": 137055976, "sChozoStatueMultiSpriteData_Standing": 137056008, "sChozoStatueMultiSpriteData_Sitting": 137056024, "sChozoStatueMultiSpriteData_Seated": 137056112, "sChozoStatueFlashingPaletteRows": 137056128, "sChozoStatueLongBeamGfx": 137056132, "sChozoStatueLongBeamPal": 137061472, "sChozoStatuePartOAM_LegStanding_Frame0": 137061632, "sChozoStatuePartOAM_LegSitting_Frame0": 137061664, "sChozoStatuePartOAM_LegSitting_Frame1": 137061696, "sChozoStatuePartOAM_LegSitting_Frame2": 137061728, "sChozoStatuePartOAM_LegSitting_Frame3": 137061760, "sChozoStatuePartOAM_LegSitting_Frame5": 137061792, "sChozoStatuePartOAM_LegSitting_Frame6": 137061818, "sChozoStatuePartOAM_LegSitting_Frame7": 137061850, "sChozoStatuePartOAM_LegSitting_Frame8": 137061882, "sChozoStatuePartOAM_LegSeated_Frame0": 137061914, "sChozoStatueOAM_Idle_Frame0": 137061952, "sChozoStatuePartOAM_EyeClosing_Frame0": 137061978, "sChozoStatuePartOAM_EyeClosing_Frame1": 137061986, "sChozoStatuePartOAM_EyeClosed_Frame0": 137061994, "sChozoStatuePartOAM_ArmIdle_Frame0": 137062002, "sChozoStatuePartOAM_ArmGlow_Frame1": 137062028, "sChozoStatuePartOAM_ArmGlow_Frame2": 137062066, "sChozoStatuePartOAM_ArmGlow_Frame3": 137062104, "sChozoStatuePartOAM_ArmGlow_Frame4": 137062142, "sChozoStatuePartOAM_ArmSamusGrabbed_Frame0": 137062180, "sChozoBallOam_NormalClosed_Frame0": 137062206, "sChozoBallOam_NormalClosed_Frame1": 137062226, "sChozoBallOam_NormalClosed_Frame3": 137062246, "sChozoBallOam_NormalRevealing_Frame0": 137062266, "sChozoBallOam_NormalRevealing_Frame1": 137062298, "sChozoBallOam_NormalRevealing_Frame2": 137062330, "sChozoBallOam_NormalRevealed_Frame0": 137062362, "sChozoBallOam_NormalRevealed_Frame1": 137062376, "sChozoBallOam_NormalRevealed_Frame2": 137062390, "sChozoStatueRefillOAM_Frame0": 137062404, "sChozoStatueRefillOAM_Frame2": 137062430, "sChozoStatueRefillOAM_Frame4": 137062456, "sChozoStatueRefillOAM_Frame10": 137062482, "sChozoStatueRefillOAM_Frame12": 137062508, "sChozoStatueRefillOAM_Frame18": 137062534, "sChozoStatueRefillOAM_Frame20": 137062560, "sChozoStatueRefillOAM_Frame26": 137062586, "sChozoStatueRefillOAM_Frame28": 137062612, "sChozoStatueRefillOAM_Frame34": 137062638, "sChozoStatuePartOAM_EyeOpened_Frame0": 137062664, "sChozoStatuePartOAM_GlowIdle_Frame0": 137062672, "sChozoStatuePartOAM_GlowIdle_Frame4": 137062686, "sChozoStatuePartOAM_GlowIdle_Frame8": 137062712, "sChozoStatuePartOAM_GlowIdle_Frame12": 137062750, "sChozoStatuePartOAM_GlowIdle_Frame16": 137062800, "sChozoStatuePartOAM_GlowIdle_Frame20": 137062862, "sChozoStatuePartOAM_GlowIdle_Frame24": 137062936, "sChozoStatuePartOAM_GlowIdle_Frame28": 137063010, "sChozoStatuePartOAM_GlowIdle_Frame32": 137063072, "sChozoStatuePartOAM_GlowIdle_Frame36": 137063122, "sChozoStatuePartOAM_LegStanding": 137063148, "sChozoStatuePartOAM_LegSitting": 137063164, "sChozoStatuePartOAM_LegSeated": 137063244, "sChozoStatueOAM_Idle": 137063260, "sChozoStatuePartOAM_EyeOpened": 137063276, "sChozoStatuePartOAM_EyeClosing": 137063292, "sChozoStatuePartOAM_EyeOpening": 137063316, "sChozoStatuePartOAM_EyeClosed": 137063340, "sChozoStatuePartOAM_ArmIdle": 137063356, "sChozoStatuePartOAM_ArmGlow": 137063372, "sChozoStatuePartOAM_ArmSamusGrabbed": 137063444, "sChozoBallOam_NormalClosed": 137063460, "sChozoBallOam_NormalRevealing": 137063500, "sChozoBallOam_NormalRevealed": 137063532, "sChozoStatueRefillOAM": 137063572, "sChozoStatuePartOAM_GlowIdle": 137063900, "sChozoStatueIceBeamGfx": 137064228, "sChozoStatueIceBeamPal": 137069568, "sChozoStatueWaveBeamGfx": 137069728, "sChozoStatueWaveBeamPal": 137075068, "sChozoStatueBombsGfx": 137075228, "sChozoStatueBombsPal": 137080584, "sChozoStatueSpeedboosterGfx": 137080744, "sChozoStatueSpeedboosterPal": 137086112, "sChozoStatueHighJumpGfx": 137086272, "sChozoStatueHighJumpPal": 137091760, "sChozoStatueScrewAttackGfx": 137091920, "sChozoStatueScrewAttackPal": 137097432, "sChozoStatueVariaGfx": 137097592, "sChozoStatueVariaPal": 137102984, "sUnknownItemChozoStatueMultiSpriteData_Standing_Frame0": 137103144, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame0": 137103174, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame1": 137103204, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame2": 137103234, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame3": 137103264, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame5": 137103294, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame6": 137103324, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame7": 137103354, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame8": 137103384, "sUnknownItemChozoStatueMultiSpriteData_Sitting_Frame9": 137103414, "sUnknownItemChozoStatueMultiSpriteData_Seated_Frame0": 137103444, "sUnknownItemChozoStatueMultiSpriteData_Standing": 137103476, "sUnknownItemChozoStatueMultiSpriteData_Sitting": 137103492, "sUnknownItemChozoStatueMultiSpriteData_Seated": 137103580, "sUnknownItemChozoStatueFlashingPaletteRows": 137103596, "sChozoStatueSpaceJumpGfx": 137103600, "sChozoStatueSpaceJumpPal": 137109012, "sUnknownItemChozoStatuePartOAM_LegStanding_Frame0": 137109172, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame0": 137109204, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame1": 137109236, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame2": 137109268, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame3": 137109300, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame5": 137109332, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame6": 137109358, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame7": 137109390, "sUnknownItemChozoStatuePartOAM_LegSitting_Frame8": 137109422, "sUnknownItemChozoStatuePartOAM_LegSeated_Frame0": 137109454, "sUnknownItemChozoStatueOAM_Idle_Frame0": 137109504, "sUnknownItemChozoStatuePartOAM_EyeClosing_Frame0": 137109536, "sUnknownItemChozoStatuePartOAM_EyeClosing_Frame1": 137109544, "sUnknownItemChozoStatuePartOAM_EyeClosed_Frame0": 137109552, "sUnknownItemChozoStatuePartOAM_ArmIdle_Frame0": 137109560, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame1": 137109616, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame2": 137109684, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame3": 137109752, "sUnknownItemChozoStatuePartOAM_ArmGlow_Frame4": 137109820, "sUnknownItemChozoStatuePartOAM_ArmSamusGrabbed_Frame0": 137109888, "sChozoBallOam_UnknownClosed_Frame0": 137109944, "sChozoBallOam_UnknownClosed_Frame1": 137109964, "sChozoBallOam_UnknownClosed_Frame3": 137109984, "sChozoBallOam_UnknownRevealing_Frame0": 137110004, "sChozoBallOam_UnknownRevealing_Frame1": 137110036, "sChozoBallOam_UnknownRevealing_Frame2": 137110074, "sChozoBallOam_UnknownRevealed_Frame0": 137110112, "sChozoBallOam_UnknownRevealed_Frame1": 137110126, "sChozoBallOam_UnknownRevealed_Frame2": 137110140, "sUnknownItemChozoStatueRefillOAM_Frame0": 137110154, "sUnknownItemChozoStatueRefillOAM_Frame2": 137110180, "sUnknownItemChozoStatueRefillOAM_Frame4": 137110206, "sUnknownItemChozoStatueRefillOAM_Frame10": 137110232, "sUnknownItemChozoStatueRefillOAM_Frame12": 137110258, "sUnknownItemChozoStatueRefillOAM_Frame18": 137110284, "sUnknownItemChozoStatueRefillOAM_Frame20": 137110310, "sUnknownItemChozoStatueRefillOAM_Frame26": 137110336, "sUnknownItemChozoStatueRefillOAM_Frame28": 137110362, "sUnknownItemChozoStatueRefillOAM_Frame34": 137110388, "sUnknownItemChozoStatuePartOAM_EyeOpened_Frame0": 137110414, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame0": 137110422, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame4": 137110436, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame8": 137110462, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame12": 137110500, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame16": 137110550, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame20": 137110612, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame24": 137110686, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame28": 137110760, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame32": 137110822, "sUnknownItemChozoStatuePartOAM_GlowIdle_Frame36": 137110872, "sUnknownItemChozoStatuePartOAM_LegStanding": 137110900, "sUnknownItemChozoStatuePartOAM_LegSitting": 137110916, "sUnknownItemChozoStatuePartOAM_LegSeated": 137110996, "sUnknownItemChozoStatueOAM_Idle": 137111012, "sUnknownItemChozoStatuePartOAM_EyeOpened": 137111028, "sUnknownItemChozoStatuePartOAM_EyeClosing": 137111044, "sUnknownItemChozoStatuePartOAM_EyeOpening": 137111068, "sUnknownItemChozoStatuePartOAM_EyeClosed": 137111092, "sUnknownItemChozoStatuePartOAM_ArmIdle": 137111108, "sUnknownItemChozoStatuePartOAM_ArmGlow": 137111124, "sUnknownItemChozoStatuePartOAM_ArmSamusGrabbed": 137111196, "sChozoBallOam_UnknownClosed": 137111212, "sChozoBallOam_UnknownRevealing": 137111252, "sChozoBallOam_UnknownRevealed": 137111284, "sUnknownItemChozoStatueRefillOAM": 137111324, "sUnknownItemChozoStatuePartOAM_GlowIdle": 137111652, "sChozoStatueGravitySuitGfx": 137111980, "sChozoStatueGravitySuitPal": 137117408, "sChozoStatuePlasmaBeamGfx": 137117568, "sChozoStatuePlasmaBeamPal": 137122992, "sHatchTypeTable": 137762028, "sHatchLockEventsBrinstar": 137762036, "sHatchLockEventsKraid": 137762044, "sHatchLockEventsCrateria": 137762052, "sHatchLockEventsChozodia": 137762084, "sEventBasedConnections": 137762212, "sAreaConnections": 137762376, "sHatchesAnimationDurationCounter": 137762454, "sHatchesTilemapValues": 137762460, "sNumberOfHatchLockEventsPerArea": 137762476, "sProcessProjectileFunctionPointers": 141956216, "sProcessParticleFunctionPointers": 141956280, "sAreaDoorsPointers": 141956524, "sAreaRoomEntryPointers": 141956552, "sAreaScrollPointers": 141957164, "sWaterLoopCounterArray": 141957208, "sNonReformDestroyFunctionPointers": 141957224, "sColorFadingSubroutinePointers": 141957244, "sHazeData": 141957260, "sBackgroundEffectBehaviorPointers": 141957312, "sHatchLockEventsPointers": 141957348, "sDemoRamDataPointers": 141957376, "sTourianEscapeFunctionPointers": 141957440, "sCutsceneScreenShakeOffsets_Set0": 141957448, "sCutsceneScreenShakeOffsetSetPointers": 141957452, "sCutsceneScreenShakeOffsetSetSizes": 141957468, "sRandoSeed": 142578428, "sRandoStartingInventory": 142578568, "sPlacedItems": 142578576, "sRandoLongBeamGfx": 142579776, "sRandoChargeBeamGfx": 142580288, "sRandoPlasmaBeamGfx": 142580800, "sRandoIceBeamGfx": 142581312, "sRandoWaveBeamGfx": 142581824, "sRandoMorphBallGfx": 142582336, "sRandoBombGfx": 142582848, "sRandoVariaSuitGfx": 142583360, "sRandoGravitySuitGfx": 142583872, "sRandoSpeedBoosterGfx": 142584384, "sRandoHiJumpGfx": 142584896, "sRandoScrewAttackGfx": 142585408, "sRandoSpaceJumpGfx": 142585920, "sRandoPowerGripGfx": 142586432, "sRandoNothingGfx": 142586944, "sRandoAPLogoGfx": 142587456, "sRandoSpazerBeamGfx": 142588992, "sRandoGrappleBeamGfx": 142589504, "sRandoSpringBallGfx": 142590016, "sRandoXRayScopeGfx": 142590528, "sRandoReserveTankGfx": 142591040, "sRandoPowerBeamGfx": 142591552, "sRandoSpiderBallGfx": 142592064, "sRandoPlasmaBeamPal": 142592576, "sRandoGrappleBeamPal": 142592608, "sRandoSpringBallPal": 142592640, "sRandoGravitySuitPal": 142592672, "sRandoSpaceJumpPal": 142592704, "sRandoNothingPal": 142592736, "sRandoAPLogoPal": 142592768, "sRandoSpazerBeamPal": 142592800, "sRandoXRayScopePal": 142592832, "sRandoReserveTankPal": 142592864, "sRandoWallJumpPal": 142592896, "sRandoPowerBeamPal": 142592928, "sRandoSpiderBallPal": 142592960, "sItemGfxPointers": 142592992, "sStartingLocationCamera": 142593232, "sRandoMultiworldDangerousSpritesets": 142593240, "sRandoMultiworldDangerousRooms": 142593256, "sRandoChozodiaSaveAndMapRooms": 142593292, "sRandoDisallowedSamusPoses": 142593300, "sItemMessages": 142593304, "sRandoItemAcquisitionSfx": 142593334, "sRegionLocationOffsets": 142593402, "sRoomItemsBrinstar": 142593410, "sRoomItemsKraid": 142593438, "sRoomItemsNorfair": 142593460, "sRoomItemsRidley": 142593496, "sRoomItemsTourian": 142593534, "sRoomItemsCrateria": 142593538, "sRoomItemsChozodia": 142593550, "sRandoAreaItemLists": 142593592, "sRandoAreaItemListLengths": 142593620, "sRandoItemToTankTilemap": 142593627, "sRandoAnimatedTileGaps": 142593631, "sRandoPaletteSlots": 142593639, "sRandoItemAndPlayerNames": 142593800}} \ No newline at end of file diff --git a/options.py b/options.py index dde15ae..bec7ee6 100644 --- a/options.py +++ b/options.py @@ -180,6 +180,17 @@ class JunkFillWeights(OptionDict): } +class RemoteItems(DefaultOnToggle): + """ + Indicates you get items sent from your own world, allowing co-op play of a world. + When enabled, you will not lose the items you've collected from your own world if you reset or game-over. + + Regardless of this setting, you can still play a single-player game without connecting to a server. + However, you will not benefit from your items being returned to you when you reload a save. + """ + display_name = "Remote Items" + + mzm_option_groups = [ OptionGroup("World", [ ChozodiaAccess, @@ -209,6 +220,7 @@ class JunkFillWeights(OptionDict): @dataclass class MZMOptions(PerGameCommonOptions): goal: Goal + remote_items: RemoteItems death_link: DeathLink chozodia_access: ChozodiaAccess skip_chozodia_stealth: SkipChozodiaStealth diff --git a/rom_data.py b/rom_data.py index b952bfd..9b9c102 100644 --- a/rom_data.py +++ b/rom_data.py @@ -427,7 +427,7 @@ def get_backgrounds(area, room): 0: [(None, 0x1AC)], 5: [(0xD5, 0x1AC)], 7: [(0x1C8, None)], - 9: [(0x3D, 0x92), ((0x1CA, 0x3B4))], + 9: [(0x3D, 0x92), (0x1CA, 0x3B4)], 14: [(0x46, 0xC0)], }, Area.CHOZODIA: {