Core: move output file name logic into core (#1066)
* move output file name logic into core I see the same logic with small variations in each different world implementation. It seems to me, it would be better in the core to keep it consistent. * missed a few * remove review comment * + smw * double quote strings Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * revert change to DS3 output file name Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
This commit is contained in:
parent
b8e467fbb8
commit
fdd7ffb089
|
@ -300,6 +300,13 @@ class MultiWorld():
|
||||||
def get_file_safe_player_name(self, player: int) -> str:
|
def get_file_safe_player_name(self, player: int) -> str:
|
||||||
return ''.join(c for c in self.get_player_name(player) if c not in '<>:"/\\|?*')
|
return ''.join(c for c in self.get_player_name(player) if c not in '<>:"/\\|?*')
|
||||||
|
|
||||||
|
def get_out_file_name_base(self, player: int) -> str:
|
||||||
|
""" the base name (without file extension) for each player's output file for a seed """
|
||||||
|
return f"AP_{self.seed_name}_P{player}" \
|
||||||
|
+ (f"_{self.get_file_safe_player_name(player).replace(' ', '_')}"
|
||||||
|
if (self.player_name[player] != f"Player{player}")
|
||||||
|
else '')
|
||||||
|
|
||||||
def initialize_regions(self, regions=None):
|
def initialize_regions(self, regions=None):
|
||||||
for region in regions if regions else self.regions:
|
for region in regions if regions else self.regions:
|
||||||
region.world = self
|
region.world = self
|
||||||
|
|
|
@ -400,11 +400,7 @@ class ALTTPWorld(World):
|
||||||
deathlink=world.death_link[player],
|
deathlink=world.death_link[player],
|
||||||
allowcollect=world.allow_collect[player])
|
allowcollect=world.allow_collect[player])
|
||||||
|
|
||||||
outfilepname = f'_P{player}'
|
rompath = os.path.join(output_directory, f"{self.world.get_out_file_name_base(self.player)}.sfc")
|
||||||
outfilepname += f"_{world.get_file_safe_player_name(player).replace(' ', '_')}" \
|
|
||||||
if world.player_name[player] != 'Player%d' % player else ''
|
|
||||||
|
|
||||||
rompath = os.path.join(output_directory, f'AP_{world.seed_name}{outfilepname}.sfc')
|
|
||||||
rom.write_to_file(rompath)
|
rom.write_to_file(rompath)
|
||||||
patch = LttPDeltaPatch(os.path.splitext(rompath)[0]+LttPDeltaPatch.patch_file_ending, player=player,
|
patch = LttPDeltaPatch(os.path.splitext(rompath)[0]+LttPDeltaPatch.patch_file_ending, player=player,
|
||||||
player_name=world.player_name[player], patched_path=rompath)
|
player_name=world.player_name[player], patched_path=rompath)
|
||||||
|
|
|
@ -146,11 +146,7 @@ class DKC3World(World):
|
||||||
|
|
||||||
self.active_level_list.append(LocationName.rocket_rush_region)
|
self.active_level_list.append(LocationName.rocket_rush_region)
|
||||||
|
|
||||||
outfilepname = f'_P{player}'
|
rompath = os.path.join(output_directory, f"{self.world.get_out_file_name_base(self.player)}.sfc")
|
||||||
outfilepname += f"_{world.player_name[player].replace(' ', '_')}" \
|
|
||||||
if world.player_name[player] != 'Player%d' % player else ''
|
|
||||||
|
|
||||||
rompath = os.path.join(output_directory, f'AP_{world.seed_name}{outfilepname}.sfc')
|
|
||||||
rom.write_to_file(rompath)
|
rom.write_to_file(rompath)
|
||||||
self.rom_name = rom.name
|
self.rom_name = rom.name
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ class MinecraftWorld(World):
|
||||||
|
|
||||||
def generate_output(self, output_directory: str):
|
def generate_output(self, output_directory: str):
|
||||||
data = self._get_mc_data()
|
data = self._get_mc_data()
|
||||||
filename = f"AP_{self.world.seed_name}_P{self.player}_{self.world.get_file_safe_player_name(self.player)}.apmc"
|
filename = f"{self.world.get_out_file_name_base(self.player)}.apmc"
|
||||||
with open(os.path.join(output_directory, filename), 'wb') as f:
|
with open(os.path.join(output_directory, filename), 'wb') as f:
|
||||||
f.write(b64encode(bytes(json.dumps(data), 'utf-8')))
|
f.write(b64encode(bytes(json.dumps(data), 'utf-8')))
|
||||||
|
|
||||||
|
|
|
@ -819,7 +819,7 @@ class OOTWorld(World):
|
||||||
# Seed hint RNG, used for ganon text lines also
|
# Seed hint RNG, used for ganon text lines also
|
||||||
self.hint_rng = self.world.slot_seeds[self.player]
|
self.hint_rng = self.world.slot_seeds[self.player]
|
||||||
|
|
||||||
outfile_name = f"AP_{self.world.seed_name}_P{self.player}_{self.world.get_file_safe_player_name(self.player)}"
|
outfile_name = self.world.get_out_file_name_base(self.player)
|
||||||
rom = Rom(file=get_options()['oot_options']['rom_file'])
|
rom = Rom(file=get_options()['oot_options']['rom_file'])
|
||||||
if self.hints != 'none':
|
if self.hints != 'none':
|
||||||
buildWorldGossipHints(self)
|
buildWorldGossipHints(self)
|
||||||
|
|
|
@ -505,10 +505,8 @@ class SMWorld(World):
|
||||||
romPatcher.writeRandoSettings(self.variaRando.randoExec.randoSettings, itemLocs)
|
romPatcher.writeRandoSettings(self.variaRando.randoExec.randoSettings, itemLocs)
|
||||||
|
|
||||||
def generate_output(self, output_directory: str):
|
def generate_output(self, output_directory: str):
|
||||||
outfilebase = 'AP_' + self.world.seed_name
|
outfilebase = self.world.get_out_file_name_base(self.player)
|
||||||
outfilepname = f'_P{self.player}'
|
outputFilename = os.path.join(output_directory, f"{outfilebase}.sfc")
|
||||||
outfilepname += f"_{self.world.get_file_safe_player_name(self.player).replace(' ', '_')}"
|
|
||||||
outputFilename = os.path.join(output_directory, f'{outfilebase}{outfilepname}.sfc')
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.variaRando.PatchRom(outputFilename, self.APPrePatchRom, self.APPostPatchRom)
|
self.variaRando.PatchRom(outputFilename, self.APPrePatchRom, self.APPostPatchRom)
|
||||||
|
|
|
@ -173,7 +173,7 @@ class SM64World(World):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
filename = f"AP_{self.world.seed_name}_P{self.player}_{self.world.get_file_safe_player_name(self.player)}.apsm64ex"
|
filename = f"{self.world.get_out_file_name_base(self.player)}.apsm64ex"
|
||||||
with open(os.path.join(output_directory, filename), 'w') as f:
|
with open(os.path.join(output_directory, filename), 'w') as f:
|
||||||
json.dump(data, f)
|
json.dump(data, f)
|
||||||
|
|
||||||
|
|
|
@ -153,11 +153,7 @@ class SMWWorld(World):
|
||||||
rom = LocalRom(get_base_rom_path())
|
rom = LocalRom(get_base_rom_path())
|
||||||
patch_rom(self.world, rom, self.player, self.active_level_dict)
|
patch_rom(self.world, rom, self.player, self.active_level_dict)
|
||||||
|
|
||||||
outfilepname = f'_P{player}'
|
rompath = os.path.join(output_directory, f"{self.world.get_out_file_name_base(self.player)}.sfc")
|
||||||
outfilepname += f"_{world.player_name[player].replace(' ', '_')}" \
|
|
||||||
if world.player_name[player] != 'Player%d' % player else ''
|
|
||||||
|
|
||||||
rompath = os.path.join(output_directory, f'AP_{world.seed_name}{outfilepname}.sfc')
|
|
||||||
rom.write_to_file(rompath)
|
rom.write_to_file(rompath)
|
||||||
self.rom_name = rom.name
|
self.rom_name = rom.name
|
||||||
|
|
||||||
|
|
|
@ -426,11 +426,9 @@ class SMZ3World(World):
|
||||||
base_combined_rom[addr + offset] = byte
|
base_combined_rom[addr + offset] = byte
|
||||||
offset += 1
|
offset += 1
|
||||||
|
|
||||||
outfilebase = 'AP_' + self.world.seed_name
|
outfilebase = self.world.get_out_file_name_base(self.player)
|
||||||
outfilepname = f'_P{self.player}'
|
|
||||||
outfilepname += f"_{self.world.get_file_safe_player_name(self.player).replace(' ', '_')}" \
|
|
||||||
|
|
||||||
filename = os.path.join(output_directory, f'{outfilebase}{outfilepname}.sfc')
|
filename = os.path.join(output_directory, f"{outfilebase}.sfc")
|
||||||
with open(filename, "wb") as binary_file:
|
with open(filename, "wb") as binary_file:
|
||||||
binary_file.write(base_combined_rom)
|
binary_file.write(base_combined_rom)
|
||||||
patch = SMZ3DeltaPatch(os.path.splitext(filename)[0]+SMZ3DeltaPatch.patch_file_ending, player=self.player,
|
patch = SMZ3DeltaPatch(os.path.splitext(filename)[0]+SMZ3DeltaPatch.patch_file_ending, player=self.player,
|
||||||
|
|
|
@ -333,8 +333,7 @@ class SoEWorld(World):
|
||||||
switches.extend(('--available-fragments', str(self.available_fragments),
|
switches.extend(('--available-fragments', str(self.available_fragments),
|
||||||
'--required-fragments', str(self.required_fragments)))
|
'--required-fragments', str(self.required_fragments)))
|
||||||
rom_file = get_base_rom_path()
|
rom_file = get_base_rom_path()
|
||||||
out_base = output_path(output_directory, f'AP_{self.world.seed_name}_P{self.player}_'
|
out_base = output_path(output_directory, self.world.get_out_file_name_base(self.player))
|
||||||
f'{self.world.get_file_safe_player_name(self.player)}')
|
|
||||||
out_file = out_base + '.sfc'
|
out_file = out_base + '.sfc'
|
||||||
placement_file = out_base + '.txt'
|
placement_file = out_base + '.txt'
|
||||||
patch_file = out_base + '.apsoe'
|
patch_file = out_base + '.apsoe'
|
||||||
|
|
|
@ -91,6 +91,6 @@ class V6World(World):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
filename = f"AP_{self.world.seed_name}_P{self.player}_{self.world.get_file_safe_player_name(self.player)}.apv6"
|
filename = f"{self.world.get_out_file_name_base(self.player)}.apv6"
|
||||||
with open(os.path.join(output_directory, filename), 'w') as f:
|
with open(os.path.join(output_directory, filename), 'w') as f:
|
||||||
json.dump(data, f)
|
json.dump(data, f)
|
||||||
|
|
Loading…
Reference in New Issue