SM and SMZ3 apworld support (#1677)

This commit is contained in:
lordlou
2023-04-08 16:52:34 -04:00
committed by GitHub
parent f4035b8621
commit 84402a1b55
86 changed files with 522 additions and 445 deletions

View File

@@ -7,6 +7,9 @@ import threading
import base64
from typing import Any, Dict, Iterable, List, Set, TextIO, TypedDict
from BaseClasses import Region, Entrance, Location, MultiWorld, Item, ItemClassification, CollectionState, Tutorial
from worlds.AutoWorld import World, AutoLogicRegister, WebWorld
logger = logging.getLogger("Super Metroid")
from .Regions import create_regions
@@ -16,20 +19,18 @@ from .Client import SMSNIClient
from .Rom import get_base_rom_path, SM_ROM_MAX_PLAYERID, SM_ROM_PLAYERDATA_COUNT, SMDeltaPatch, get_sm_symbols
import Utils
from BaseClasses import Region, Entrance, Location, MultiWorld, Item, ItemClassification, CollectionState, Tutorial
from ..AutoWorld import World, AutoLogicRegister, WebWorld
from worlds.sm.variaRandomizer.logic.smboolmanager import SMBoolManager
from worlds.sm.variaRandomizer.graph.vanilla.graph_locations import locationsDict
from worlds.sm.variaRandomizer.graph.graph_utils import getAccessPoint
from worlds.sm.variaRandomizer.rando.ItemLocContainer import ItemLocation
from worlds.sm.variaRandomizer.rando.Items import ItemManager
from worlds.sm.variaRandomizer.utils.parameters import *
from worlds.sm.variaRandomizer.logic.logic import Logic
from worlds.sm.variaRandomizer.randomizer import VariaRandomizer
from worlds.sm.variaRandomizer.utils.doorsmanager import DoorsManager
from worlds.sm.variaRandomizer.rom.rom_patches import RomPatches
from worlds.sm.variaRandomizer.graph.graph_utils import GraphUtils
from .variaRandomizer.logic.smboolmanager import SMBoolManager
from .variaRandomizer.graph.vanilla.graph_locations import locationsDict
from .variaRandomizer.graph.graph_utils import getAccessPoint
from .variaRandomizer.rando.ItemLocContainer import ItemLocation
from .variaRandomizer.rando.Items import ItemManager
from .variaRandomizer.utils.parameters import *
from .variaRandomizer.utils.utils import openFile
from .variaRandomizer.logic.logic import Logic
from .variaRandomizer.randomizer import VariaRandomizer
from .variaRandomizer.utils.doorsmanager import DoorsManager
from .variaRandomizer.rom.rom_patches import RomPatches
from .variaRandomizer.graph.graph_utils import GraphUtils
class SMCollectionState(metaclass=AutoLogicRegister):
@@ -279,14 +280,14 @@ class SMWorld(World):
# first apply the sm multiworld code patch named 'basepatch' (also has empty tables that we'll overwrite),
# + apply some patches from varia that we want to be always-on.
# basepatch and variapatches are both generated from https://github.com/lordlou/SMBasepatch
romPatcher.applyIPSPatch(os.path.join(os.path.dirname(__file__),
"data", "SMBasepatch_prebuilt", "multiworld-basepatch.ips"))
romPatcher.applyIPSPatch(os.path.join(os.path.dirname(__file__),
"data", "SMBasepatch_prebuilt", "variapatches.ips"))
romPatcher.applyIPSPatch("/".join((os.path.dirname(self.__file__),
"data", "SMBasepatch_prebuilt", "multiworld-basepatch.ips")))
romPatcher.applyIPSPatch("/".join((os.path.dirname(self.__file__),
"data", "SMBasepatch_prebuilt", "variapatches.ips")))
def APPostPatchRom(self, romPatcher):
symbols = get_sm_symbols(os.path.join(os.path.dirname(__file__),
"data", "SMBasepatch_prebuilt", "sm-basepatch-symbols.json"))
symbols = get_sm_symbols("/".join((os.path.dirname(self.__file__),
"data", "SMBasepatch_prebuilt", "sm-basepatch-symbols.json")))
# gather all player ids and names relevant to this rom, then write player name and player id data tables
playerIdSet: Set[int] = {0} # 0 is for "Archipelago" server
@@ -376,7 +377,7 @@ class SMWorld(World):
idx = 0
offworldSprites: List[ByteEdit] = []
for itemSprite in itemSprites:
with open(os.path.join(os.path.dirname(__file__), "data", "custom_sprite", itemSprite["fileName"]), 'rb') as stream:
with openFile("/".join((os.path.dirname(self.__file__), "data", "custom_sprite", itemSprite["fileName"])), 'rb') as stream:
buffer = bytearray(stream.read())
offworldSprites.append({"sym": symbols[itemSprite["paletteSymbolName"]],
"offset": 0,