From afc9c772be12241b0559511b47063ff7dfae2030 Mon Sep 17 00:00:00 2001 From: lordlou <87331798+lordlou@users.noreply.github.com> Date: Sat, 30 Jul 2022 12:42:02 -0400 Subject: [PATCH] Sm broken start location fix (#841) * - fixed basepatches application order breaking (at least) starting location --- worlds/sm/__init__.py | 6 ++++-- worlds/sm/variaRandomizer/randomizer.py | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index 1de31626..bdb4b11e 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -271,7 +271,7 @@ class SMWorld(World): data.append(w1) return data - def APPatchRom(self, romPatcher): + def APPrePatchRom(self, romPatcher): # 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 @@ -279,6 +279,8 @@ class SMWorld(World): "data", "SMBasepatch_prebuilt", "multiworld-basepatch.ips")) romPatcher.applyIPSPatch(os.path.join(os.path.dirname(__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")) multiWorldLocations = [] @@ -504,7 +506,7 @@ class SMWorld(World): outputFilename = os.path.join(output_directory, f'{outfilebase}{outfilepname}.sfc') try: - self.variaRando.PatchRom(outputFilename, self.APPatchRom) + self.variaRando.PatchRom(outputFilename, self.APPrePatchRom, self.APPostPatchRom) self.write_crc(outputFilename) self.rom_name = self.romName except: diff --git a/worlds/sm/variaRandomizer/randomizer.py b/worlds/sm/variaRandomizer/randomizer.py index ebb87c52..3f6a9cc5 100644 --- a/worlds/sm/variaRandomizer/randomizer.py +++ b/worlds/sm/variaRandomizer/randomizer.py @@ -697,7 +697,7 @@ class VariaRandomizer: #if args.patchOnly == False: # randoExec.postProcessItemLocs(itemLocs, args.hideItems) - def PatchRom(self, outputFilename, customPatchApply = None): + def PatchRom(self, outputFilename, customPrePatchApply = None, customPostPatchApply = None): args = self.args optErrMsgs = self.optErrMsgs @@ -749,6 +749,9 @@ class VariaRandomizer: else: romPatcher = RomPatcher(magic=args.raceMagic) + if customPrePatchApply != None: + customPrePatchApply(romPatcher) + if args.hud == True or args.majorsSplit == "FullWithHUD": args.patches.append("varia_hud.ips") if args.patchOnly == False: @@ -767,8 +770,8 @@ class VariaRandomizer: # don't color randomize custom ships args.shift_ship_palette = False - if customPatchApply != None: - customPatchApply(romPatcher) + if customPostPatchApply != None: + customPostPatchApply(romPatcher) # we have to write ips to ROM before doing our direct modifications which will rewrite some parts (like in credits), # but in web mode we only want to generate a global ips at the end