Initial custom header implementation

This commit is contained in:
hiimcody1
2025-10-20 17:53:34 -04:00
committed by codemann8
parent 6cb05f18ca
commit cf488fda36
4 changed files with 23 additions and 7 deletions

View File

@@ -290,7 +290,7 @@ def main(args, seed=None, fish=None):
for player in range(1, world.players + 1):
rom = JsonRom() if args.jsonout else LocalRom(args.rom)
patch_rom(world, rom, player, team, bool(args.mystery))
patch_rom(world, rom, player, team, bool(args.mystery), str(args.rom_header) if args.rom_header else None)
if args.race:
patch_race_rom(rom)

View File

@@ -74,7 +74,7 @@ def main(args):
logger.info('Patching ROM.')
rom = LocalRom(args.rom)
patch_rom(world, rom, 1, 1, False)
patch_rom(world, rom, 1, 1, False, str(args.rom_header) if args.rom_header else None)
apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic, args.sprite, args.ow_palettes, args.uw_palettes)

17
Rom.py
View File

@@ -418,7 +418,7 @@ def handle_native_dungeon(location, itemid):
return itemid
def patch_rom(world, rom, player, team, is_mystery=False):
def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None):
random.seed(world.rom_seeds[player])
# progressive bow silver arrow hint hack
@@ -1744,8 +1744,23 @@ def patch_rom(world, rom, player, team, is_mystery=False):
# 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'{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]
rom.name.extend([0] * (21 - len(rom.name)))
rom.write_bytes(0x7FC0, rom.name)

View File

@@ -641,5 +641,6 @@
},
"outputname": {},
"notes": {},
"code": {}
"code": {},
"rom_header" : {}
}