From a3f67a39ab437b683e2700bbc1e63da202dcd412 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sat, 24 Jan 2026 20:51:48 -0600 Subject: [PATCH] Version/romnaming refactor --- BaseClasses.py | 13 +++-- DungeonRandomizer.py | 2 +- Gui.py | 7 ++- Main.py | 17 ++---- OverworldShuffle.py | 6 --- Plando.py | 4 +- Rom.py | 36 +++++++------ Versions.py | 3 ++ build-app_version.py | 5 -- resources/app/cli/lang/en.json | 2 +- source/classes/appversion.py | 17 ------ source/classes/diags.py | 84 ++++++++++++++---------------- source/gui/randomize/generation.py | 6 +-- uv.lock | 2 +- 14 files changed, 84 insertions(+), 120 deletions(-) create mode 100644 Versions.py delete mode 100644 build-app_version.py delete mode 100644 source/classes/appversion.py diff --git a/BaseClasses.py b/BaseClasses.py index 0b044a49..30885a35 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -17,6 +17,8 @@ from RoomData import Room from source.dungeon.RoomObject import RoomObject from source.overworld.EntranceData import door_addresses +from Versions import ORVersion, DRVersion, GKVersion + class World(object): @@ -3078,12 +3080,9 @@ class Spoiler(object): self.doorTypes[(doorNames, player)] = OrderedDict([('player', player), ('doorNames', doorNames), ('type', type)]) def parse_meta(self): - from Main import __version__ as ERVersion - from OverworldShuffle import __version__ as ORVersion - self.startinventory = list(map(str, self.world.precollected_items)) - self.metadata = {'version': ERVersion, - 'versions': {'Door':ERVersion, 'Overworld':ORVersion}, + self.metadata = {'version': GKVersion, + 'versions': {'Door': DRVersion, 'Overworld': ORVersion}, 'logic': self.world.logic, 'mode': self.world.mode, 'bombbag': self.world.bombbag, @@ -3300,7 +3299,7 @@ class Spoiler(object): self.parse_meta() with open(filename, 'w') as outfile: line_width = 35 - outfile.write('ALttP Overworld Randomizer - Seed: %s\n\n' % (self.world.seed)) + outfile.write('ALttP GwaaKiwi Randomizer - Seed: %s\n\n' % (self.world.seed)) for k,v in self.metadata["versions"].items(): outfile.write((k + ' Version:').ljust(line_width) + '%s\n' % v) for player in range(1, self.world.players + 1): @@ -3315,7 +3314,7 @@ class Spoiler(object): self.parse_meta() with open(filename, 'w') as outfile: line_width = 35 - outfile.write('ALttP Overworld Randomizer - Seed: %s\n\n' % (self.world.seed)) + outfile.write('ALttP GwaaKiwi Randomizer - Seed: %s\n\n' % (self.world.seed)) for k,v in self.metadata["versions"].items(): outfile.write((k + ' Version:').ljust(line_width) + '%s\n' % v) if self.metadata['user_notes']: diff --git a/DungeonRandomizer.py b/DungeonRandomizer.py index ba7f30af..4bf58f2a 100755 --- a/DungeonRandomizer.py +++ b/DungeonRandomizer.py @@ -12,7 +12,7 @@ from source.classes.BabelFish import BabelFish import source.classes.diags as diagnostics from CLI import parse_cli, get_args_priority -from Main import main, EnemizerError, __version__ +from Main import main, EnemizerError from Rom import get_sprite_from_name from Utils import is_bundled, close_console from Fill import FillError diff --git a/Gui.py b/Gui.py index bbb3eada..b422a7f2 100755 --- a/Gui.py +++ b/Gui.py @@ -23,8 +23,7 @@ from source.gui.randomize.gameoptions import gameoptions_page from source.gui.randomize.generation import generation_page from source.gui.bottom import bottom_frame, create_guiargs from GuiUtils import set_icon -from Main import __version__ as ESVersion -from OverworldShuffle import __version__ as ORVersion +from Versions import DRVersion, ORVersion, GKVersion from source.classes.BabelFish import BabelFish from source.classes.Empty import Empty @@ -34,7 +33,7 @@ def check_python_version(fish): import sys version = sys.version_info if version.major < 3 or version.minor < 7: - messagebox.showinfo("Overworld Shuffle %s (DR %s)" % (ORVersion, ESVersion), fish.translate("cli","cli","old.python.version") % sys.version) + messagebox.showinfo("GwaaKiwi Randomizer %s (OR %s, DR %s)" % (GKVersion, ORVersion, DRVersion), fish.translate("cli","cli","old.python.version") % sys.version) # Save settings to file @@ -83,7 +82,7 @@ def guiMain(args=None): mainWindow = Tk() self = mainWindow - mainWindow.wm_title("Overworld Shuffle %s (DR %s)" % (ORVersion, ESVersion)) + mainWindow.wm_title("GwaaKiwi Randomizer %s (OR %s, DR %s)" % (GKVersion, ORVersion, DRVersion)) mainWindow.protocol("WM_DELETE_WINDOW", guiExit) # intercept when user clicks the X # set program icon diff --git a/Main.py b/Main.py index 2e99b625..88f7bf64 100644 --- a/Main.py +++ b/Main.py @@ -40,10 +40,7 @@ from source.enemizer.DamageTables import DamageTable from source.enemizer.Enemizer import randomize_enemies from source.rom.DataTables import init_data_tables -version_number = '1.5.0' -version_branch = '-u' -__version__ = f'{version_number}{version_branch}' - +from Versions import ORVersion, DRVersion, GKVersion from source.classes.BabelFish import BabelFish @@ -122,15 +119,13 @@ def main(args, seed=None, fish=None): world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)} world.finish_init() - from OverworldShuffle import __version__ as ORVersion logger.info( world.fish.translate("cli","cli","app.title") + "\n", - ORVersion, + GKVersion, "%s (%s)" % (world.seed, str(args.outputname)) if str(args.outputname).startswith('M') else world.seed, - Settings.make_code(world, 1) if world.players == 1 else '' ) - for k,v in {"DR":__version__,"OR":ORVersion}.items(): + for k,v in {"GK": GKVersion, "OR": ORVersion, "DR": DRVersion}.items(): logger.info((k + ' Version:').ljust(16) + '%s' % v) parsed_names = parse_player_names(args.names, world.players, args.teams) @@ -421,15 +416,13 @@ def export_yaml(args, fish): if args.seed and int(args.seed) > 0: world.seed = int(args.seed) - from OverworldShuffle import __version__ as ORVersion logger.info( world.fish.translate("cli","cli","app.title") + "\n", - ORVersion, + GKVersion, "(%s)" % outfilebase, - Settings.make_code(world, 1) if world.players == 1 else '' ) - for k,v in {"DR":__version__,"OR":ORVersion}.items(): + for k,v in {"GK": GKVersion, "OR": ORVersion, "DR": DRVersion}.items(): logger.info((k + ' Version:').ljust(16) + '%s' % v) for player in range(1, world.players + 1): diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 616a85a2..9dd2583b 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -8,12 +8,6 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.6.1.7' -# branch indicator is intentionally different across branches -version_branch = '' - -__version__ = '%s%s' % (version_number, version_branch) - parallel_links_new = None # needs to be globally available, reset every new generation/player def link_overworld(world, player): diff --git a/Plando.py b/Plando.py index 25003f24..f8d47aaf 100755 --- a/Plando.py +++ b/Plando.py @@ -18,7 +18,7 @@ from Items import ItemFactory from ItemList import difficulties from Main import create_playthrough -__version__ = '0.2-dev' +PlandoVersion = '0.2-dev' def main(args): start_time = time.process_time() @@ -36,7 +36,7 @@ def main(args): random.seed(world.seed) - logger.info('ALttP Plandomizer Version %s - Seed: %s\n\n', __version__, args.plando) + logger.info('ALttP Plandomizer Version %s - Seed: %s\n\n', PlandoVersion, args.plando) world.difficulty_requirements[1] = difficulties[world.difficulty[1]] diff --git a/Rom.py b/Rom.py index 70ec5eb4..81484e10 100644 --- a/Rom.py +++ b/Rom.py @@ -34,6 +34,7 @@ from source.overworld.EntranceShuffle2 import exit_ids from OverworldShuffle import default_flute_connections, flute_data from InitialSram import InitialSram from DamageTable import DamageTable +from Versions import DRVersion, GKVersion, ORVersion from source.classes.SFX import randomize_sfx, randomize_sfxinstruments, randomize_songinstruments from source.item.FillUtil import valid_pot_items @@ -1853,30 +1854,33 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): # set rom name # 21 bytes - from Main import __version__ - from OverworldShuffle import __version__ as ORVersion if rom_header: if len(rom_header) > 21: raise Exception('ROM header too long. Max 21 bytes, found %d bytes.' % len(rom_header)) - elif '|' in rom_header: - gen, seedstring = rom_header.split('|', 1) - gen = f'{gen:<3}' - seedstring = f'{int(seedstring):09}' if seedstring.isdigit() else seedstring[:9] - rom.name = bytearray(f'OR{gen}_{team+1}_{player}_{seedstring}\0', 'utf8')[:21] - elif len(rom_header) <= 9: - seedstring = f'{int(rom_header):09}' if rom_header.isdigit() else rom_header - rom.name = bytearray(f'OR{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{seedstring}\0', 'utf8')[:21] - else: - rom.name = bytearray(rom_header, 'utf8')[:21] - else: - seedstring = f'{world.seed:09}' if isinstance(world.seed, int) else world.seed - rom.name = bytearray(f'OR{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{seedstring}\0', 'utf8')[:21] + if world.players > 1 and world.teams > 1 and len(rom_header) <= 12: + rom.name = bytearray(f"GK_{rom_header}_{team + 1}_{player}", 'utf8') + elif world.players > 1 and len(rom_header) <= 15: + rom.name = bytearray(f"GK_{rom_header}_{player}", 'utf8') + elif len(rom_header) <= 18: + rom.name = bytearray(f"GK_{rom_header}", 'utf8') + else: + rom.name = bytearray(rom_header, 'utf8') + else: + if world.players > 1 and world.teams > 1: + rom.name = bytearray(f'GK_{world.seed}_{team + 1}_{player}', 'utf8') + elif world.players > 1: + rom.name = bytearray(f'GK_{world.seed}_{player}', 'utf8') + else: + rom.name = bytearray(f'GK_{world.seed}', 'utf8') + + rom.name = rom.name[:21] rom.name.extend([0] * (21 - len(rom.name))) rom.write_bytes(0x7FC0, rom.name) - rom.write_bytes(0x138010, bytearray(__version__, 'utf8')) + rom.write_bytes(0x138010, bytearray(DRVersion, 'utf8')) rom.write_bytes(0x150010, bytearray(ORVersion, 'utf8')) + rom.write_bytes(0x1CEEF0, bytearray(GKVersion, 'utf8')) # set player names for p in range(1, min(world.players, 255) + 1): diff --git a/Versions.py b/Versions.py new file mode 100644 index 00000000..639ac093 --- /dev/null +++ b/Versions.py @@ -0,0 +1,3 @@ +GKVersion = '1.0.0' +ORVersion = '0.6.1.7' +DRVersion = '1.5.0-u' diff --git a/build-app_version.py b/build-app_version.py deleted file mode 100644 index 69332cba..00000000 --- a/build-app_version.py +++ /dev/null @@ -1,5 +0,0 @@ -from OverworldShuffle import __version__ as OWVersion -import os - -with(open(os.path.join("resources","app","meta","manifests","app_version.txt"),"w+")) as f: - f.write(OWVersion) diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index c8b427b6..fa4f015e 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -2,7 +2,7 @@ "cli": { "yes": "Yes", "no": "No", - "app.title": "ALttP Overworld Randomizer Version %s : --seed %s --code %s", + "app.title": "ALttP GwaaKiwi Randomizer Version %s : --seed %s", "version": "Version", "seed": "Seed", "player": "Player", diff --git a/source/classes/appversion.py b/source/classes/appversion.py deleted file mode 100644 index 3d677d1e..00000000 --- a/source/classes/appversion.py +++ /dev/null @@ -1,17 +0,0 @@ -import os - -from OverworldShuffle import __version__ -OWR_VERSION = __version__ - -def write_appversion(): - APP_VERSION = OWR_VERSION - if "-" in APP_VERSION: - APP_VERSION = APP_VERSION[:APP_VERSION.find("-")] - APP_VERSION_FILE = os.path.join(".","resources","app","meta","manifests","app_version.txt") - with open(APP_VERSION_FILE,"w") as f: - f.seek(0) - f.truncate() - f.write(APP_VERSION) - -if __name__ == "__main__": - write_appversion() diff --git a/source/classes/diags.py b/source/classes/diags.py index e26c4e43..9d2abb82 100644 --- a/source/classes/diags.py +++ b/source/classes/diags.py @@ -5,56 +5,50 @@ except ModuleNotFoundError as e: pass import datetime -from Main import __version__ -DR_VERSION = __version__ - -from OverworldShuffle import __version__ -OWR_VERSION = __version__ - -PROJECT_NAME = "ALttP Overworld Randomizer" +from Versions import DRVersion, GKVersion, ORVersion def diagpad(str): - return str.ljust(len(f"{PROJECT_NAME} Version") + 5,'.') + return str.ljust(40, '.') def output(): - lines = [ - f"{PROJECT_NAME} Diagnostics", - "=================================", - diagpad("UTC Time") + str(datetime.datetime.now(datetime.UTC))[:19], - diagpad("ALttP Door Randomizer Version") + DR_VERSION, - diagpad(f"{PROJECT_NAME} Version") + OWR_VERSION, - diagpad("Python Version") + platform.python_version() - ] - lines.append(diagpad("OS Version") + "%s %s" % (platform.system(), platform.release())) - if hasattr(sys, "executable"): - lines.append(diagpad("Executable") + sys.executable) - lines.append(diagpad("Build Date") + platform.python_build()[1]) - lines.append(diagpad("Compiler") + platform.python_compiler()) - if hasattr(sys, "api_version"): - lines.append(diagpad("Python API") + str(sys.api_version)) - if hasattr(os, "sep"): - lines.append(diagpad("Filepath Separator") + os.sep) - if hasattr(os, "pathsep"): - lines.append(diagpad("Path Env Separator") + os.pathsep) - lines.append("") - lines.append("Packages") - lines.append("--------") - ''' - #this breaks when run from the .exe - reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']) - installed_packages = [r.decode() for r in reqs.split()] - for pkg in installed_packages: - pkg = pkg.split("==") - lines.append(diagpad(pkg[0]) + pkg[1]) - ''' - installed_packages = [] - installed_packages = [str(d) for d in pkg_resources.working_set] #this doesn't work from the .exe either, but it doesn't crash the program - installed_packages.sort() - for pkg in installed_packages: - pkg = pkg.split(' ') - lines.append(diagpad(pkg[0]) + pkg[1]) + lines = [ + "ALttP GwaaKiwi Randomizer Diagnostics", + "=====================================", + diagpad("UTC Time") + str(datetime.datetime.now(datetime.UTC))[:19], + diagpad("ALttP Door Randomizer Version") + DRVersion, + diagpad("ALttP Overworld Randomizer Version") + ORVersion, + diagpad("ALttP GwaaKiwi Randomizer Version") + GKVersion, + diagpad("Python Version") + platform.python_version(), + ] + lines.append(diagpad("OS Version") + "%s %s" % (platform.system(), platform.release())) + if hasattr(sys, "executable"): + lines.append(diagpad("Executable") + sys.executable) + lines.append(diagpad("Build Date") + platform.python_build()[1]) + lines.append(diagpad("Compiler") + platform.python_compiler()) + if hasattr(sys, "api_version"): + lines.append(diagpad("Python API") + str(sys.api_version)) + if hasattr(os, "sep"): + lines.append(diagpad("Filepath Separator") + os.sep) + if hasattr(os, "pathsep"): + lines.append(diagpad("Path Env Separator") + os.pathsep) + lines.append("") - return lines + lines.append("Packages") + lines.append("--------") + reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']) + installed_packages = [r.decode() for r in reqs.split()] + for pkg in installed_packages: + pkg = pkg.split("==") + lines.append(diagpad(pkg[0]) + pkg[1]) + + installed_packages = [] + installed_packages = [str(d) for d in pkg_resources.working_set] + installed_packages.sort() + for pkg in installed_packages: + pkg = pkg.split(' ') + lines.append(diagpad(pkg[0]) + pkg[1]) + + return lines if __name__ == "__main__": raise AssertionError(f"Called main() on utility library {__file__}") diff --git a/source/gui/randomize/generation.py b/source/gui/randomize/generation.py index 868402e4..f67e48e7 100644 --- a/source/gui/randomize/generation.py +++ b/source/gui/randomize/generation.py @@ -5,7 +5,7 @@ import json import os from functools import partial from source.classes.Empty import Empty -from Main import __version__ +from Versions import DRVersion def generation_page(parent,settings): # Generation Setup @@ -148,9 +148,9 @@ def generation_page(parent,settings): "width": 120, "height": 50 } - } + } diag = Tk() - diag.title("Door Shuffle " + __version__) + diag.title("Door Shuffle " + DRVersion) diag.geometry(str(dims["window"]["width"]) + 'x' + str(dims["window"]["height"])) text = Text(diag, width=dims["textarea.characters"]["width"], height=dims["textarea.characters"]["height"]) text.pack() diff --git a/uv.lock b/uv.lock index 5bb90917..81ab815b 100644 --- a/uv.lock +++ b/uv.lock @@ -43,7 +43,7 @@ wheels = [ [[package]] name = "alttpr-python" -version = "0.1.0" +version = "1.0.0" source = { virtual = "." } dependencies = [ { name = "aenum" },