Version/romnaming refactor

This commit is contained in:
2026-01-24 20:51:48 -06:00
parent 1d4c5f1884
commit a3f67a39ab
14 changed files with 84 additions and 120 deletions

View File

@@ -17,6 +17,8 @@ from RoomData import Room
from source.dungeon.RoomObject import RoomObject from source.dungeon.RoomObject import RoomObject
from source.overworld.EntranceData import door_addresses from source.overworld.EntranceData import door_addresses
from Versions import ORVersion, DRVersion, GKVersion
class World(object): class World(object):
@@ -3078,12 +3080,9 @@ class Spoiler(object):
self.doorTypes[(doorNames, player)] = OrderedDict([('player', player), ('doorNames', doorNames), ('type', type)]) self.doorTypes[(doorNames, player)] = OrderedDict([('player', player), ('doorNames', doorNames), ('type', type)])
def parse_meta(self): 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.startinventory = list(map(str, self.world.precollected_items))
self.metadata = {'version': ERVersion, self.metadata = {'version': GKVersion,
'versions': {'Door':ERVersion, 'Overworld':ORVersion}, 'versions': {'Door': DRVersion, 'Overworld': ORVersion},
'logic': self.world.logic, 'logic': self.world.logic,
'mode': self.world.mode, 'mode': self.world.mode,
'bombbag': self.world.bombbag, 'bombbag': self.world.bombbag,
@@ -3300,7 +3299,7 @@ class Spoiler(object):
self.parse_meta() self.parse_meta()
with open(filename, 'w') as outfile: with open(filename, 'w') as outfile:
line_width = 35 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(): for k,v in self.metadata["versions"].items():
outfile.write((k + ' Version:').ljust(line_width) + '%s\n' % v) outfile.write((k + ' Version:').ljust(line_width) + '%s\n' % v)
for player in range(1, self.world.players + 1): for player in range(1, self.world.players + 1):
@@ -3315,7 +3314,7 @@ class Spoiler(object):
self.parse_meta() self.parse_meta()
with open(filename, 'w') as outfile: with open(filename, 'w') as outfile:
line_width = 35 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(): for k,v in self.metadata["versions"].items():
outfile.write((k + ' Version:').ljust(line_width) + '%s\n' % v) outfile.write((k + ' Version:').ljust(line_width) + '%s\n' % v)
if self.metadata['user_notes']: if self.metadata['user_notes']:

View File

@@ -12,7 +12,7 @@ from source.classes.BabelFish import BabelFish
import source.classes.diags as diagnostics import source.classes.diags as diagnostics
from CLI import parse_cli, get_args_priority 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 Rom import get_sprite_from_name
from Utils import is_bundled, close_console from Utils import is_bundled, close_console
from Fill import FillError from Fill import FillError

7
Gui.py
View File

@@ -23,8 +23,7 @@ from source.gui.randomize.gameoptions import gameoptions_page
from source.gui.randomize.generation import generation_page from source.gui.randomize.generation import generation_page
from source.gui.bottom import bottom_frame, create_guiargs from source.gui.bottom import bottom_frame, create_guiargs
from GuiUtils import set_icon from GuiUtils import set_icon
from Main import __version__ as ESVersion from Versions import DRVersion, ORVersion, GKVersion
from OverworldShuffle import __version__ as ORVersion
from source.classes.BabelFish import BabelFish from source.classes.BabelFish import BabelFish
from source.classes.Empty import Empty from source.classes.Empty import Empty
@@ -34,7 +33,7 @@ def check_python_version(fish):
import sys import sys
version = sys.version_info version = sys.version_info
if version.major < 3 or version.minor < 7: 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 # Save settings to file
@@ -83,7 +82,7 @@ def guiMain(args=None):
mainWindow = Tk() mainWindow = Tk()
self = mainWindow 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 mainWindow.protocol("WM_DELETE_WINDOW", guiExit) # intercept when user clicks the X
# set program icon # set program icon

17
Main.py
View File

@@ -40,10 +40,7 @@ from source.enemizer.DamageTables import DamageTable
from source.enemizer.Enemizer import randomize_enemies from source.enemizer.Enemizer import randomize_enemies
from source.rom.DataTables import init_data_tables from source.rom.DataTables import init_data_tables
version_number = '1.5.0' from Versions import ORVersion, DRVersion, GKVersion
version_branch = '-u'
__version__ = f'{version_number}{version_branch}'
from source.classes.BabelFish import BabelFish 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.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)}
world.finish_init() world.finish_init()
from OverworldShuffle import __version__ as ORVersion
logger.info( logger.info(
world.fish.translate("cli","cli","app.title") + "\n", 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, "%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) logger.info((k + ' Version:').ljust(16) + '%s' % v)
parsed_names = parse_player_names(args.names, world.players, args.teams) 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: if args.seed and int(args.seed) > 0:
world.seed = int(args.seed) world.seed = int(args.seed)
from OverworldShuffle import __version__ as ORVersion
logger.info( logger.info(
world.fish.translate("cli","cli","app.title") + "\n", world.fish.translate("cli","cli","app.title") + "\n",
ORVersion, GKVersion,
"(%s)" % outfilebase, "(%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) logger.info((k + ' Version:').ljust(16) + '%s' % v)
for player in range(1, world.players + 1): for player in range(1, world.players + 1):

View File

@@ -8,12 +8,6 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType
from OverworldGlitchRules import create_owg_connections from OverworldGlitchRules import create_owg_connections
from Utils import bidict 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 parallel_links_new = None # needs to be globally available, reset every new generation/player
def link_overworld(world, player): def link_overworld(world, player):

View File

@@ -18,7 +18,7 @@ from Items import ItemFactory
from ItemList import difficulties from ItemList import difficulties
from Main import create_playthrough from Main import create_playthrough
__version__ = '0.2-dev' PlandoVersion = '0.2-dev'
def main(args): def main(args):
start_time = time.process_time() start_time = time.process_time()
@@ -36,7 +36,7 @@ def main(args):
random.seed(world.seed) 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]] world.difficulty_requirements[1] = difficulties[world.difficulty[1]]

36
Rom.py
View File

@@ -34,6 +34,7 @@ from source.overworld.EntranceShuffle2 import exit_ids
from OverworldShuffle import default_flute_connections, flute_data from OverworldShuffle import default_flute_connections, flute_data
from InitialSram import InitialSram from InitialSram import InitialSram
from DamageTable import DamageTable from DamageTable import DamageTable
from Versions import DRVersion, GKVersion, ORVersion
from source.classes.SFX import randomize_sfx, randomize_sfxinstruments, randomize_songinstruments from source.classes.SFX import randomize_sfx, randomize_sfxinstruments, randomize_songinstruments
from source.item.FillUtil import valid_pot_items 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 # set rom name
# 21 bytes # 21 bytes
from Main import __version__
from OverworldShuffle import __version__ as ORVersion
if rom_header: if rom_header:
if len(rom_header) > 21: if len(rom_header) > 21:
raise Exception('ROM header too long. Max 21 bytes, found %d bytes.' % len(rom_header)) 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.name.extend([0] * (21 - len(rom.name)))
rom.write_bytes(0x7FC0, 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(0x150010, bytearray(ORVersion, 'utf8'))
rom.write_bytes(0x1CEEF0, bytearray(GKVersion, 'utf8'))
# set player names # set player names
for p in range(1, min(world.players, 255) + 1): for p in range(1, min(world.players, 255) + 1):

3
Versions.py Normal file
View File

@@ -0,0 +1,3 @@
GKVersion = '1.0.0'
ORVersion = '0.6.1.7'
DRVersion = '1.5.0-u'

View File

@@ -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)

View File

@@ -2,7 +2,7 @@
"cli": { "cli": {
"yes": "Yes", "yes": "Yes",
"no": "No", "no": "No",
"app.title": "ALttP Overworld Randomizer Version %s : --seed %s --code %s", "app.title": "ALttP GwaaKiwi Randomizer Version %s : --seed %s",
"version": "Version", "version": "Version",
"seed": "Seed", "seed": "Seed",
"player": "Player", "player": "Player",

View File

@@ -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()

View File

@@ -5,25 +5,20 @@ except ModuleNotFoundError as e:
pass pass
import datetime import datetime
from Main import __version__ from Versions import DRVersion, GKVersion, ORVersion
DR_VERSION = __version__
from OverworldShuffle import __version__
OWR_VERSION = __version__
PROJECT_NAME = "ALttP Overworld Randomizer"
def diagpad(str): def diagpad(str):
return str.ljust(len(f"{PROJECT_NAME} Version") + 5,'.') return str.ljust(40, '.')
def output(): def output():
lines = [ lines = [
f"{PROJECT_NAME} Diagnostics", "ALttP GwaaKiwi Randomizer Diagnostics",
"=================================", "=====================================",
diagpad("UTC Time") + str(datetime.datetime.now(datetime.UTC))[:19], diagpad("UTC Time") + str(datetime.datetime.now(datetime.UTC))[:19],
diagpad("ALttP Door Randomizer Version") + DR_VERSION, diagpad("ALttP Door Randomizer Version") + DRVersion,
diagpad(f"{PROJECT_NAME} Version") + OWR_VERSION, diagpad("ALttP Overworld Randomizer Version") + ORVersion,
diagpad("Python Version") + platform.python_version() diagpad("ALttP GwaaKiwi Randomizer Version") + GKVersion,
diagpad("Python Version") + platform.python_version(),
] ]
lines.append(diagpad("OS Version") + "%s %s" % (platform.system(), platform.release())) lines.append(diagpad("OS Version") + "%s %s" % (platform.system(), platform.release()))
if hasattr(sys, "executable"): if hasattr(sys, "executable"):
@@ -37,18 +32,17 @@ def output():
if hasattr(os, "pathsep"): if hasattr(os, "pathsep"):
lines.append(diagpad("Path Env Separator") + os.pathsep) lines.append(diagpad("Path Env Separator") + os.pathsep)
lines.append("") lines.append("")
lines.append("Packages") lines.append("Packages")
lines.append("--------") lines.append("--------")
'''
#this breaks when run from the .exe
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']) reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode() for r in reqs.split()] installed_packages = [r.decode() for r in reqs.split()]
for pkg in installed_packages: for pkg in installed_packages:
pkg = pkg.split("==") pkg = pkg.split("==")
lines.append(diagpad(pkg[0]) + pkg[1]) lines.append(diagpad(pkg[0]) + pkg[1])
'''
installed_packages = [] 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 = [str(d) for d in pkg_resources.working_set]
installed_packages.sort() installed_packages.sort()
for pkg in installed_packages: for pkg in installed_packages:
pkg = pkg.split(' ') pkg = pkg.split(' ')

View File

@@ -5,7 +5,7 @@ import json
import os import os
from functools import partial from functools import partial
from source.classes.Empty import Empty from source.classes.Empty import Empty
from Main import __version__ from Versions import DRVersion
def generation_page(parent,settings): def generation_page(parent,settings):
# Generation Setup # Generation Setup
@@ -150,7 +150,7 @@ def generation_page(parent,settings):
} }
} }
diag = Tk() diag = Tk()
diag.title("Door Shuffle " + __version__) diag.title("Door Shuffle " + DRVersion)
diag.geometry(str(dims["window"]["width"]) + 'x' + str(dims["window"]["height"])) 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 = Text(diag, width=dims["textarea.characters"]["width"], height=dims["textarea.characters"]["height"])
text.pack() text.pack()

2
uv.lock generated
View File

@@ -43,7 +43,7 @@ wheels = [
[[package]] [[package]]
name = "alttpr-python" name = "alttpr-python"
version = "0.1.0" version = "1.0.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "aenum" }, { name = "aenum" },