Split adjuster into own program
This commit is contained in:
		
							parent
							
								
									fca64f1177
								
							
						
					
					
						commit
						12222d5a4c
					
				
							
								
								
									
										138
									
								
								Adjuster.py
								
								
								
								
							
							
						
						
									
										138
									
								
								Adjuster.py
								
								
								
								
							| 
						 | 
				
			
			@ -4,9 +4,11 @@ import os
 | 
			
		|||
import logging
 | 
			
		||||
import textwrap
 | 
			
		||||
import sys
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
from Rom import Sprite, LocalRom, apply_rom_settings
 | 
			
		||||
from Utils import output_path
 | 
			
		||||
 | 
			
		||||
from AdjusterMain import adjust
 | 
			
		||||
from Rom import Sprite
 | 
			
		||||
 | 
			
		||||
class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter):
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,25 +53,127 @@ def main():
 | 
			
		|||
    parser.add_argument('--names', default='', type=str)
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    # ToDo: Validate files further than mere existance
 | 
			
		||||
    if not os.path.isfile(args.rom):
 | 
			
		||||
        input(
 | 
			
		||||
            'Could not find valid rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom)
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
    if args.sprite is not None and not os.path.isfile(args.sprite) and not Sprite.get_sprite_from_name(args.sprite):
 | 
			
		||||
        input('Could not find link sprite sheet at given location. \nPress Enter to exit.')
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
    # set up logger
 | 
			
		||||
    loglevel = {'error': logging.ERROR, 'info': logging.INFO, 'warning': logging.WARNING, 'debug': logging.DEBUG}[
 | 
			
		||||
        args.loglevel]
 | 
			
		||||
    logging.basicConfig(format='%(message)s', level=loglevel)
 | 
			
		||||
    args, path = adjust(args=args)
 | 
			
		||||
    from Utils import persistent_store
 | 
			
		||||
    from Rom import Sprite
 | 
			
		||||
    if isinstance(args.sprite, Sprite):
 | 
			
		||||
        args.sprite = args.sprite.name
 | 
			
		||||
    persistent_store("adjuster", "last_settings_3", args)
 | 
			
		||||
 | 
			
		||||
    if not os.path.isfile(args.rom):
 | 
			
		||||
        adjustGUI()
 | 
			
		||||
    else:
 | 
			
		||||
        if args.sprite is not None and not os.path.isfile(args.sprite) and not Sprite.get_sprite_from_name(args.sprite):
 | 
			
		||||
            input('Could not find link sprite sheet at given location. \nPress Enter to exit.')
 | 
			
		||||
            sys.exit(1)
 | 
			
		||||
 | 
			
		||||
        args, path = adjust(args=args)
 | 
			
		||||
        from Utils import persistent_store
 | 
			
		||||
        if isinstance(args.sprite, Sprite):
 | 
			
		||||
            args.sprite = args.sprite.name
 | 
			
		||||
        persistent_store("adjuster", "last_settings_3", args)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def adjust(args):
 | 
			
		||||
    start = time.perf_counter()
 | 
			
		||||
    logger = logging.getLogger('Adjuster')
 | 
			
		||||
    logger.info('Patching ROM.')
 | 
			
		||||
    vanillaRom = args.baserom
 | 
			
		||||
    if os.path.splitext(args.rom)[-1].lower() == '.bmbp':
 | 
			
		||||
        import Patch
 | 
			
		||||
        meta, args.rom = Patch.create_rom_file(args.rom)
 | 
			
		||||
 | 
			
		||||
    if os.stat(args.rom).st_size in (0x200000, 0x400000) and os.path.splitext(args.rom)[-1].lower() == '.sfc':
 | 
			
		||||
        rom = LocalRom(args.rom, patch=False, vanillaRom=vanillaRom)
 | 
			
		||||
    else:
 | 
			
		||||
        raise RuntimeError(
 | 
			
		||||
            'Provided Rom is not a valid Link to the Past Randomizer Rom. Please provide one for adjusting.')
 | 
			
		||||
    palettes_options={}
 | 
			
		||||
    palettes_options['dungeon']=args.uw_palettes
 | 
			
		||||
 | 
			
		||||
    palettes_options['overworld']=args.ow_palettes
 | 
			
		||||
    palettes_options['hud']=args.hud_palettes
 | 
			
		||||
    palettes_options['sword']=args.sword_palettes
 | 
			
		||||
    palettes_options['shield']=args.shield_palettes
 | 
			
		||||
    # palettes_options['link']=args.link_palettesvera
 | 
			
		||||
    racerom = rom.read_byte(0x180213) > 0
 | 
			
		||||
 | 
			
		||||
    apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic,
 | 
			
		||||
                       args.sprite, palettes_options, reduceflashing=args.reduceflashing or racerom)
 | 
			
		||||
    path = output_path(f'{os.path.basename(args.rom)[:-4]}_adjusted.sfc')
 | 
			
		||||
    rom.write_to_file(path)
 | 
			
		||||
 | 
			
		||||
    logger.info('Done. Enjoy.')
 | 
			
		||||
    logger.debug('Total Time: %s', time.perf_counter() - start)
 | 
			
		||||
 | 
			
		||||
    return args, path
 | 
			
		||||
 | 
			
		||||
def adjustGUI():
 | 
			
		||||
    from tkinter import Checkbutton, OptionMenu, Toplevel, LabelFrame, PhotoImage, Tk, LEFT, RIGHT, BOTTOM, TOP, \
 | 
			
		||||
        StringVar, IntVar, Frame, Label, W, E, X, BOTH, Entry, Spinbox, Button, filedialog, messagebox, ttk
 | 
			
		||||
    from Gui import get_rom_options_frame, get_rom_frame
 | 
			
		||||
    from GuiUtils import set_icon
 | 
			
		||||
    from argparse import Namespace
 | 
			
		||||
    from Main import __version__ as MWVersion
 | 
			
		||||
    adjustWindow = Tk()
 | 
			
		||||
    adjustWindow.wm_title("Berserker's Multiworld %s LttP Adjuster" % MWVersion)
 | 
			
		||||
    set_icon(adjustWindow)
 | 
			
		||||
 | 
			
		||||
    rom_options_frame, rom_vars, set_sprite = get_rom_options_frame(adjustWindow)
 | 
			
		||||
 | 
			
		||||
    bottomFrame2 = Frame(adjustWindow)
 | 
			
		||||
 | 
			
		||||
    romFrame, romVar = get_rom_frame(adjustWindow)
 | 
			
		||||
 | 
			
		||||
    romDialogFrame = Frame(adjustWindow)
 | 
			
		||||
    baseRomLabel2 = Label(romDialogFrame, text='Rom to adjust')
 | 
			
		||||
    romVar2 = StringVar()
 | 
			
		||||
    romEntry2 = Entry(romDialogFrame, textvariable=romVar2)
 | 
			
		||||
 | 
			
		||||
    def RomSelect2():
 | 
			
		||||
        rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc", ".bmbp")), ("All Files", "*")])
 | 
			
		||||
        romVar2.set(rom)
 | 
			
		||||
    romSelectButton2 = Button(romDialogFrame, text='Select Rom', command=RomSelect2)
 | 
			
		||||
    romDialogFrame.pack(side=TOP, expand=True, fill=X)
 | 
			
		||||
    baseRomLabel2.pack(side=LEFT)
 | 
			
		||||
    romEntry2.pack(side=LEFT, expand=True, fill=X)
 | 
			
		||||
    romSelectButton2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    def adjustRom():
 | 
			
		||||
        guiargs = Namespace()
 | 
			
		||||
        guiargs.heartbeep = rom_vars.heartbeepVar.get()
 | 
			
		||||
        guiargs.heartcolor = rom_vars.heartcolorVar.get()
 | 
			
		||||
        guiargs.fastmenu = rom_vars.fastMenuVar.get()
 | 
			
		||||
        guiargs.ow_palettes = rom_vars.owPalettesVar.get()
 | 
			
		||||
        guiargs.uw_palettes = rom_vars.uwPalettesVar.get()
 | 
			
		||||
        guiargs.hud_palettes = rom_vars.hudPalettesVar.get()
 | 
			
		||||
        guiargs.sword_palettes = rom_vars.swordPalettesVar.get()
 | 
			
		||||
        guiargs.shield_palettes = rom_vars.shieldPalettesVar.get()
 | 
			
		||||
        guiargs.quickswap = bool(rom_vars.quickSwapVar.get())
 | 
			
		||||
        guiargs.disablemusic = bool(rom_vars.disableMusicVar.get())
 | 
			
		||||
        guiargs.reduceflashing = bool(rom_vars.disableFlashingVar.get())
 | 
			
		||||
        guiargs.rom = romVar2.get()
 | 
			
		||||
        guiargs.baserom = romVar.get()
 | 
			
		||||
        guiargs.sprite = rom_vars.sprite
 | 
			
		||||
        try:
 | 
			
		||||
            guiargs, path = adjust(args=guiargs)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logging.exception(e)
 | 
			
		||||
            messagebox.showerror(title="Error while adjusting Rom", message=str(e))
 | 
			
		||||
        else:
 | 
			
		||||
            messagebox.showinfo(title="Success", message="Rom patched successfully")
 | 
			
		||||
            from Utils import persistent_store
 | 
			
		||||
            from Rom import Sprite
 | 
			
		||||
            if isinstance(guiargs.sprite, Sprite):
 | 
			
		||||
                guiargs.sprite = guiargs.sprite.name
 | 
			
		||||
            persistent_store("adjuster", "last_settings_3", guiargs)
 | 
			
		||||
 | 
			
		||||
    adjustButton = Button(bottomFrame2, text='Adjust Rom', command=adjustRom)
 | 
			
		||||
    rom_options_frame.pack(side=TOP)
 | 
			
		||||
    adjustButton.pack(side=BOTTOM, padx=(5, 5))
 | 
			
		||||
 | 
			
		||||
    bottomFrame2.pack(side=BOTTOM, pady=(5, 5))
 | 
			
		||||
 | 
			
		||||
    adjustWindow.mainloop()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
| 
						 | 
				
			
			@ -1,41 +0,0 @@
 | 
			
		|||
import os
 | 
			
		||||
import time
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from Utils import output_path
 | 
			
		||||
from Rom import LocalRom, apply_rom_settings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def adjust(args):
 | 
			
		||||
    start = time.perf_counter()
 | 
			
		||||
    logger = logging.getLogger('Adjuster')
 | 
			
		||||
    logger.info('Patching ROM.')
 | 
			
		||||
    vanillaRom = args.baserom
 | 
			
		||||
    if os.path.splitext(args.rom)[-1].lower() == '.bmbp':
 | 
			
		||||
        import Patch
 | 
			
		||||
        meta, args.rom = Patch.create_rom_file(args.rom)
 | 
			
		||||
        
 | 
			
		||||
    if os.stat(args.rom).st_size in (0x200000, 0x400000) and os.path.splitext(args.rom)[-1].lower() == '.sfc':
 | 
			
		||||
        rom = LocalRom(args.rom, patch=False, vanillaRom=vanillaRom)
 | 
			
		||||
    else:
 | 
			
		||||
        raise RuntimeError(
 | 
			
		||||
            'Provided Rom is not a valid Link to the Past Randomizer Rom. Please provide one for adjusting.')
 | 
			
		||||
    palettes_options={}
 | 
			
		||||
    palettes_options['dungeon']=args.uw_palettes
 | 
			
		||||
    
 | 
			
		||||
    palettes_options['overworld']=args.ow_palettes
 | 
			
		||||
    palettes_options['hud']=args.hud_palettes
 | 
			
		||||
    palettes_options['sword']=args.sword_palettes
 | 
			
		||||
    palettes_options['shield']=args.shield_palettes
 | 
			
		||||
    # palettes_options['link']=args.link_palettesvera
 | 
			
		||||
    racerom = rom.read_byte(0x180213) > 0
 | 
			
		||||
    
 | 
			
		||||
    apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic,
 | 
			
		||||
                       args.sprite, palettes_options, reduceflashing=args.reduceflashing if not racerom else True)
 | 
			
		||||
    path = output_path(f'{os.path.basename(args.rom)[:-4]}_adjusted.sfc')
 | 
			
		||||
    rom.write_to_file(path)
 | 
			
		||||
 | 
			
		||||
    logger.info('Done. Enjoy.')
 | 
			
		||||
    logger.debug('Total Time: %s', time.perf_counter() - start)
 | 
			
		||||
 | 
			
		||||
    return args, path
 | 
			
		||||
							
								
								
									
										499
									
								
								Gui.py
								
								
								
								
							
							
						
						
									
										499
									
								
								Gui.py
								
								
								
								
							| 
						 | 
				
			
			@ -14,12 +14,11 @@ from concurrent.futures import ThreadPoolExecutor, as_completed
 | 
			
		|||
import ModuleUpdate
 | 
			
		||||
ModuleUpdate.update()
 | 
			
		||||
 | 
			
		||||
from AdjusterMain import adjust
 | 
			
		||||
from EntranceRandomizer import parse_arguments
 | 
			
		||||
from GuiUtils import ToolTips, set_icon, BackgroundTaskProgress
 | 
			
		||||
from Main import main, get_seed, __version__ as MWVersion
 | 
			
		||||
from Rom import Sprite
 | 
			
		||||
from Utils import is_bundled, local_path, output_path, open_file
 | 
			
		||||
from Utils import local_path, output_path, open_file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def guiMain(args=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +29,8 @@ def guiMain(args=None):
 | 
			
		|||
 | 
			
		||||
    notebook = ttk.Notebook(mainWindow)
 | 
			
		||||
    randomizerWindow = ttk.Frame(notebook)
 | 
			
		||||
    adjustWindow = ttk.Frame(notebook)
 | 
			
		||||
    customWindow = ttk.Frame(notebook)
 | 
			
		||||
    notebook.add(randomizerWindow, text='Randomize')
 | 
			
		||||
    notebook.add(adjustWindow, text='Adjust')
 | 
			
		||||
    notebook.add(customWindow, text='Custom Items')
 | 
			
		||||
    notebook.pack()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +54,8 @@ def guiMain(args=None):
 | 
			
		|||
    # randomizer controls
 | 
			
		||||
 | 
			
		||||
    topFrame = Frame(randomizerWindow)
 | 
			
		||||
    romFrame, romVar = get_rom_frame(topFrame)
 | 
			
		||||
 | 
			
		||||
    rightHalfFrame = Frame(topFrame)
 | 
			
		||||
    checkBoxFrame = Frame(rightHalfFrame)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -119,158 +118,9 @@ def guiMain(args=None):
 | 
			
		|||
    hintsCheckbutton.pack(expand=True, anchor=W)
 | 
			
		||||
    tileShuffleButton.pack(expand=True, anchor=W)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    romOptionsFrame = LabelFrame(rightHalfFrame, text="Rom options")
 | 
			
		||||
    romOptionsFrame.columnconfigure(0, weight=1)
 | 
			
		||||
    romOptionsFrame.columnconfigure(1, weight=1)
 | 
			
		||||
    for i in range(5):
 | 
			
		||||
        romOptionsFrame.rowconfigure(i, weight=1)
 | 
			
		||||
 | 
			
		||||
    disableMusicVar = IntVar()
 | 
			
		||||
    disableMusicCheckbutton = Checkbutton(romOptionsFrame, text="Disable music", variable=disableMusicVar)
 | 
			
		||||
    disableMusicCheckbutton.grid(row=0, column=0, sticky=E)
 | 
			
		||||
 | 
			
		||||
    disableFlashingVar = IntVar(value=1)
 | 
			
		||||
    disableFlashingCheckbutton = Checkbutton(romOptionsFrame, text="Disable flashing (anti-epilepsy)", variable=disableFlashingVar)
 | 
			
		||||
    disableFlashingCheckbutton.grid(row=6, column=0, sticky=E)
 | 
			
		||||
 | 
			
		||||
    spriteDialogFrame = Frame(romOptionsFrame)
 | 
			
		||||
    spriteDialogFrame.grid(row=0, column=1)
 | 
			
		||||
    baseSpriteLabel = Label(spriteDialogFrame, text='Sprite:')
 | 
			
		||||
 | 
			
		||||
    spriteNameVar = StringVar()
 | 
			
		||||
    sprite = None
 | 
			
		||||
    def set_sprite(sprite_param):
 | 
			
		||||
        nonlocal sprite
 | 
			
		||||
        if isinstance(sprite_param, str):
 | 
			
		||||
            sprite = sprite_param
 | 
			
		||||
            spriteNameVar.set(sprite_param)
 | 
			
		||||
        elif sprite_param is None or not sprite_param.valid:
 | 
			
		||||
            sprite = None
 | 
			
		||||
            spriteNameVar.set('(unchanged)')
 | 
			
		||||
        else:
 | 
			
		||||
            sprite = sprite_param
 | 
			
		||||
            spriteNameVar.set(sprite.name)
 | 
			
		||||
 | 
			
		||||
    set_sprite(None)
 | 
			
		||||
    spriteNameVar.set('(unchanged)')
 | 
			
		||||
    spriteEntry = Label(spriteDialogFrame, textvariable=spriteNameVar)
 | 
			
		||||
 | 
			
		||||
    def SpriteSelect():
 | 
			
		||||
        SpriteSelector(mainWindow, set_sprite)
 | 
			
		||||
 | 
			
		||||
    spriteSelectButton = Button(spriteDialogFrame, text='...', command=SpriteSelect)
 | 
			
		||||
 | 
			
		||||
    baseSpriteLabel.pack(side=LEFT)
 | 
			
		||||
    spriteEntry.pack(side=LEFT)
 | 
			
		||||
    spriteSelectButton.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    quickSwapVar = IntVar(value=1)
 | 
			
		||||
    quickSwapCheckbutton = Checkbutton(romOptionsFrame, text="L/R Quickswapping", variable=quickSwapVar)
 | 
			
		||||
    quickSwapCheckbutton.grid(row=1, column=0, sticky=E)
 | 
			
		||||
 | 
			
		||||
    fastMenuFrame = Frame(romOptionsFrame)
 | 
			
		||||
    fastMenuFrame.grid(row=1, column=1, sticky=E)
 | 
			
		||||
    fastMenuLabel = Label(fastMenuFrame, text='Menu speed')
 | 
			
		||||
    fastMenuLabel.pack(side=LEFT)
 | 
			
		||||
    fastMenuVar = StringVar()
 | 
			
		||||
    fastMenuVar.set('normal')
 | 
			
		||||
    fastMenuOptionMenu = OptionMenu(fastMenuFrame, fastMenuVar, 'normal', 'instant', 'double', 'triple', 'quadruple', 'half')
 | 
			
		||||
    fastMenuOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    heartcolorFrame = Frame(romOptionsFrame)
 | 
			
		||||
    heartcolorFrame.grid(row=2, column=0, sticky=E)
 | 
			
		||||
    heartcolorLabel = Label(heartcolorFrame, text='Heart color')
 | 
			
		||||
    heartcolorLabel.pack(side=LEFT)
 | 
			
		||||
    heartcolorVar = StringVar()
 | 
			
		||||
    heartcolorVar.set('red')
 | 
			
		||||
    heartcolorOptionMenu = OptionMenu(heartcolorFrame, heartcolorVar, 'red', 'blue', 'green', 'yellow', 'random')
 | 
			
		||||
    heartcolorOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    heartbeepFrame = Frame(romOptionsFrame)
 | 
			
		||||
    heartbeepFrame.grid(row=2, column=1, sticky=E)
 | 
			
		||||
    heartbeepLabel = Label(heartbeepFrame, text='Heartbeep')
 | 
			
		||||
    heartbeepLabel.pack(side=LEFT)
 | 
			
		||||
    heartbeepVar = StringVar()
 | 
			
		||||
    heartbeepVar.set('normal')
 | 
			
		||||
    heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    owPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    owPalettesFrame.grid(row=3, column=0, sticky=E)
 | 
			
		||||
    owPalettesLabel = Label(owPalettesFrame, text='Overworld palettes')
 | 
			
		||||
    owPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    owPalettesVar = StringVar()
 | 
			
		||||
    owPalettesVar.set('default')
 | 
			
		||||
    owPalettesOptionMenu = OptionMenu(owPalettesFrame, owPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    owPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    uwPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    uwPalettesFrame.grid(row=3, column=1, sticky=E)
 | 
			
		||||
    uwPalettesLabel = Label(uwPalettesFrame, text='Dungeon palettes')
 | 
			
		||||
    uwPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    uwPalettesVar = StringVar()
 | 
			
		||||
    uwPalettesVar.set('default')
 | 
			
		||||
    uwPalettesOptionMenu = OptionMenu(uwPalettesFrame, uwPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    uwPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    hudPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    hudPalettesFrame.grid(row=4, column=0, sticky=E)
 | 
			
		||||
    hudPalettesLabel = Label(hudPalettesFrame, text='HUD palettes')
 | 
			
		||||
    hudPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    hudPalettesVar = StringVar()
 | 
			
		||||
    hudPalettesVar.set('default')
 | 
			
		||||
    hudPalettesOptionMenu = OptionMenu(hudPalettesFrame, hudPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    hudPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    swordPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    swordPalettesFrame.grid(row=4, column=1, sticky=E)
 | 
			
		||||
    swordPalettesLabel = Label(swordPalettesFrame, text='Sword palettes')
 | 
			
		||||
    swordPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    swordPalettesVar = StringVar()
 | 
			
		||||
    swordPalettesVar.set('default')
 | 
			
		||||
    swordPalettesOptionMenu = OptionMenu(swordPalettesFrame, swordPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    swordPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    shieldPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    shieldPalettesFrame.grid(row=5, column=0, sticky=E)
 | 
			
		||||
    shieldPalettesLabel = Label(shieldPalettesFrame, text='Shield palettes')
 | 
			
		||||
    shieldPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    shieldPalettesVar = StringVar()
 | 
			
		||||
    shieldPalettesVar.set('default')
 | 
			
		||||
    shieldPalettesOptionMenu = OptionMenu(shieldPalettesFrame, shieldPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    shieldPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    romDialogFrame = Frame(romOptionsFrame)
 | 
			
		||||
    romDialogFrame.grid(row=7, column=0, columnspan=2, sticky=W+E)
 | 
			
		||||
 | 
			
		||||
    baseRomLabel = Label(romDialogFrame, text='Base Rom: ')
 | 
			
		||||
    romVar = StringVar(value="Zelda no Densetsu - Kamigami no Triforce (Japan).sfc")
 | 
			
		||||
    romEntry = Entry(romDialogFrame, textvariable=romVar)
 | 
			
		||||
 | 
			
		||||
    def RomSelect():
 | 
			
		||||
        rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")])
 | 
			
		||||
        import Patch
 | 
			
		||||
        try:
 | 
			
		||||
            Patch.get_base_rom_bytes(rom)  # throws error on checksum fail
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logging.exception(e)
 | 
			
		||||
            messagebox.showerror(title="Error while reading ROM", message=str(e))
 | 
			
		||||
        else:
 | 
			
		||||
            romVar.set(rom)
 | 
			
		||||
            romSelectButton['state'] = "disabled"
 | 
			
		||||
            romSelectButton["text"] = "ROM verified"
 | 
			
		||||
    romSelectButton = Button(romDialogFrame, text='Select Rom', command=RomSelect)
 | 
			
		||||
 | 
			
		||||
    baseRomLabel.pack(side=LEFT)
 | 
			
		||||
    romEntry.pack(side=LEFT, expand=True, fill=X)
 | 
			
		||||
    romSelectButton.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    checkBoxFrame.pack(side=TOP, anchor=W, padx=5, pady=10)
 | 
			
		||||
 | 
			
		||||
    romOptionsFrame, rom_vars, set_sprite = get_rom_options_frame(rightHalfFrame)
 | 
			
		||||
    romOptionsFrame.pack(expand=True, fill=BOTH, padx=3)
 | 
			
		||||
 | 
			
		||||
    drowDownFrame = Frame(topFrame)
 | 
			
		||||
| 
						 | 
				
			
			@ -567,9 +417,9 @@ def guiMain(args=None):
 | 
			
		|||
        guiargs.accessibility = accessibilityVar.get()
 | 
			
		||||
        guiargs.algorithm = algorithmVar.get()
 | 
			
		||||
        guiargs.shuffle = shuffleVar.get()
 | 
			
		||||
        guiargs.heartbeep = heartbeepVar.get()
 | 
			
		||||
        guiargs.heartcolor = heartcolorVar.get()
 | 
			
		||||
        guiargs.fastmenu = fastMenuVar.get()
 | 
			
		||||
        guiargs.heartbeep = rom_vars.heartbeepVar.get()
 | 
			
		||||
        guiargs.heartcolor = rom_vars.heartcolorVar.get()
 | 
			
		||||
        guiargs.fastmenu = rom_vars.fastMenuVar.get()
 | 
			
		||||
        guiargs.create_spoiler = bool(createSpoilerVar.get())
 | 
			
		||||
        guiargs.skip_playthrough = not bool(createSpoilerVar.get())
 | 
			
		||||
        guiargs.suppress_rom = bool(suppressRomVar.get())
 | 
			
		||||
| 
						 | 
				
			
			@ -579,14 +429,14 @@ def guiMain(args=None):
 | 
			
		|||
        guiargs.keyshuffle = {"on": True, "universal": "universal", "off": False}[keyshuffleVar.get()]
 | 
			
		||||
        guiargs.bigkeyshuffle = bool(bigkeyshuffleVar.get())
 | 
			
		||||
        guiargs.retro = bool(retroVar.get())
 | 
			
		||||
        guiargs.quickswap = bool(quickSwapVar.get())
 | 
			
		||||
        guiargs.disablemusic = bool(disableMusicVar.get())
 | 
			
		||||
        guiargs.reduceflashing = bool(disableFlashingVar.get())
 | 
			
		||||
        guiargs.ow_palettes = owPalettesVar.get()
 | 
			
		||||
        guiargs.uw_palettes = uwPalettesVar.get()
 | 
			
		||||
        guiargs.hud_palettes = hudPalettesVar.get()
 | 
			
		||||
        guiargs.sword_palettes = swordPalettesVar.get()
 | 
			
		||||
        guiargs.shield_palettes = shieldPalettesVar.get()
 | 
			
		||||
        guiargs.quickswap = bool(rom_vars.quickSwapVar.get())
 | 
			
		||||
        guiargs.disablemusic = bool(rom_vars.disableMusicVar.get())
 | 
			
		||||
        guiargs.reduceflashing = bool(rom_vars.disableFlashingVar.get())
 | 
			
		||||
        guiargs.ow_palettes = rom_vars.owPalettesVar.get()
 | 
			
		||||
        guiargs.uw_palettes = rom_vars.uwPalettesVar.get()
 | 
			
		||||
        guiargs.hud_palettes = rom_vars.hudPalettesVar.get()
 | 
			
		||||
        guiargs.sword_palettes = rom_vars.swordPalettesVar.get()
 | 
			
		||||
        guiargs.shield_palettes = rom_vars.shieldPalettesVar.get()
 | 
			
		||||
        guiargs.shuffleganon = bool(shuffleGanonVar.get())
 | 
			
		||||
        guiargs.hints = bool(hintsVar.get())
 | 
			
		||||
        guiargs.enemizercli = enemizerCLIpathVar.get()
 | 
			
		||||
| 
						 | 
				
			
			@ -646,7 +496,7 @@ def guiMain(args=None):
 | 
			
		|||
                                   int(rupoorcostVar.get()), int(triforceVar.get())]
 | 
			
		||||
        guiargs.rom = romVar.get()
 | 
			
		||||
        guiargs.create_diff = patchesVar.get()
 | 
			
		||||
        guiargs.sprite = sprite
 | 
			
		||||
        guiargs.sprite = rom_vars.sprite
 | 
			
		||||
        # get default values for missing parameters
 | 
			
		||||
        for k,v in vars(parse_arguments(['--multi', str(guiargs.multi)])).items():
 | 
			
		||||
            if k not in vars(guiargs):
 | 
			
		||||
| 
						 | 
				
			
			@ -694,153 +544,6 @@ def guiMain(args=None):
 | 
			
		|||
    enemizerFrame.pack(side=BOTTOM, fill=BOTH)
 | 
			
		||||
    shopframe.pack(side=BOTTOM, expand=True, fill=X)
 | 
			
		||||
 | 
			
		||||
    # Adjuster Controls
 | 
			
		||||
 | 
			
		||||
    topFrame2 = Frame(adjustWindow)
 | 
			
		||||
    rightHalfFrame2 = Frame(topFrame2)
 | 
			
		||||
    checkBoxFrame2 = Frame(rightHalfFrame2)
 | 
			
		||||
 | 
			
		||||
    quickSwapCheckbutton2 = Checkbutton(checkBoxFrame2, text="L/R Item quickswapping", variable=quickSwapVar)
 | 
			
		||||
    disableMusicCheckbutton2 = Checkbutton(checkBoxFrame2, text="Disable game music", variable=disableMusicVar)
 | 
			
		||||
    disableFlashingCheckbutton2 = Checkbutton(checkBoxFrame2, text="Disable flashing (anti-epilepsy)", variable=disableFlashingVar)
 | 
			
		||||
 | 
			
		||||
    quickSwapCheckbutton2.pack(expand=True, anchor=W)
 | 
			
		||||
    disableMusicCheckbutton2.pack(expand=True, anchor=W)
 | 
			
		||||
    disableFlashingCheckbutton2.pack(expand=True, anchor=W)
 | 
			
		||||
 | 
			
		||||
    fileDialogFrame2 = Frame(rightHalfFrame2)
 | 
			
		||||
 | 
			
		||||
    romDialogFrame2 = Frame(fileDialogFrame2)
 | 
			
		||||
    baseRomLabel2 = Label(romDialogFrame2, text='Rom to adjust')
 | 
			
		||||
    romVar2 = StringVar()
 | 
			
		||||
    romEntry2 = Entry(romDialogFrame2, textvariable=romVar2)
 | 
			
		||||
 | 
			
		||||
    def RomSelect2():
 | 
			
		||||
        rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc", ".bmbp")), ("All Files", "*")])
 | 
			
		||||
        romVar2.set(rom)
 | 
			
		||||
    romSelectButton2 = Button(romDialogFrame2, text='Select Rom', command=RomSelect2)
 | 
			
		||||
 | 
			
		||||
    baseRomLabel2.pack(side=LEFT)
 | 
			
		||||
    romEntry2.pack(side=LEFT)
 | 
			
		||||
    romSelectButton2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    spriteDialogFrame2 = Frame(fileDialogFrame2)
 | 
			
		||||
    baseSpriteLabel2 = Label(spriteDialogFrame2, text='Link Sprite')
 | 
			
		||||
    spriteEntry2 = Label(spriteDialogFrame2, textvariable=spriteNameVar)
 | 
			
		||||
 | 
			
		||||
    def SpriteSelectAdjuster():
 | 
			
		||||
        SpriteSelector(mainWindow, set_sprite, adjuster=True)
 | 
			
		||||
 | 
			
		||||
    spriteSelectButton2 = Button(spriteDialogFrame2, text='Select Sprite', command=SpriteSelectAdjuster)
 | 
			
		||||
 | 
			
		||||
    baseSpriteLabel2.pack(side=LEFT)
 | 
			
		||||
    spriteEntry2.pack(side=LEFT)
 | 
			
		||||
    spriteSelectButton2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    romDialogFrame2.pack()
 | 
			
		||||
    spriteDialogFrame2.pack()
 | 
			
		||||
 | 
			
		||||
    checkBoxFrame2.pack()
 | 
			
		||||
    fileDialogFrame2.pack()
 | 
			
		||||
 | 
			
		||||
    drowDownFrame2 = Frame(topFrame2)
 | 
			
		||||
    heartbeepFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    heartbeepOptionMenu2 = OptionMenu(heartbeepFrame2, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    heartbeepLabel2 = Label(heartbeepFrame2, text='Heartbeep sound rate')
 | 
			
		||||
    heartbeepLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    heartcolorFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    heartcolorOptionMenu2 = OptionMenu(heartcolorFrame2, heartcolorVar, 'red', 'blue', 'green', 'yellow', 'random')
 | 
			
		||||
    heartcolorOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    heartcolorLabel2 = Label(heartcolorFrame2, text='Heart color')
 | 
			
		||||
    heartcolorLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    fastMenuFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    fastMenuOptionMenu2 = OptionMenu(fastMenuFrame2, fastMenuVar, 'normal', 'instant', 'double', 'triple', 'quadruple', 'half')
 | 
			
		||||
    fastMenuOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    fastMenuLabel2 = Label(fastMenuFrame2, text='Menu speed')
 | 
			
		||||
    fastMenuLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    owPalettesFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    owPalettesOptionMenu2 = OptionMenu(owPalettesFrame2, owPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    owPalettesOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    owPalettesLabel2 = Label(owPalettesFrame2, text='Overworld palettes')
 | 
			
		||||
    owPalettesLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    uwPalettesFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    uwPalettesOptionMenu2 = OptionMenu(uwPalettesFrame2, uwPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    uwPalettesOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    uwPalettesLabel2 = Label(uwPalettesFrame2, text='Dungeon palettes')
 | 
			
		||||
    uwPalettesLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    hudPalettesFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    hudPalettesOptionMenu2 = OptionMenu(hudPalettesFrame2, hudPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    hudPalettesOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    hudPalettesLabel2 = Label(hudPalettesFrame2, text='HUD palettes')
 | 
			
		||||
    hudPalettesLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    swordPalettesFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    swordPalettesOptionMenu2 = OptionMenu(swordPalettesFrame2, swordPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    swordPalettesOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    swordPalettesLabel2 = Label(swordPalettesFrame2, text='Sword palettes')
 | 
			
		||||
    swordPalettesLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    shieldPalettesFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    shieldPalettesOptionMenu2 = OptionMenu(shieldPalettesFrame2, shieldPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    shieldPalettesOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    shieldPalettesLabel2 = Label(shieldPalettesFrame2, text='Shield palettes')
 | 
			
		||||
    shieldPalettesLabel2.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    heartbeepFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    heartcolorFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    fastMenuFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    owPalettesFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    uwPalettesFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    hudPalettesFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    swordPalettesFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
    shieldPalettesFrame2.pack(expand=True, anchor=E)
 | 
			
		||||
 | 
			
		||||
    bottomFrame2 = Frame(topFrame2)
 | 
			
		||||
 | 
			
		||||
    def adjustRom():
 | 
			
		||||
        guiargs = Namespace()
 | 
			
		||||
        guiargs.heartbeep = heartbeepVar.get()
 | 
			
		||||
        guiargs.heartcolor = heartcolorVar.get()
 | 
			
		||||
        guiargs.fastmenu = fastMenuVar.get()
 | 
			
		||||
        guiargs.ow_palettes = owPalettesVar.get()
 | 
			
		||||
        guiargs.uw_palettes = uwPalettesVar.get()
 | 
			
		||||
        guiargs.hud_palettes = hudPalettesVar.get()
 | 
			
		||||
        guiargs.sword_palettes = swordPalettesVar.get()
 | 
			
		||||
        guiargs.shield_palettes = shieldPalettesVar.get()
 | 
			
		||||
        guiargs.quickswap = bool(quickSwapVar.get())
 | 
			
		||||
        guiargs.disablemusic = bool(disableMusicVar.get())
 | 
			
		||||
        guiargs.reduceflashing = bool(disableFlashingVar.get())
 | 
			
		||||
        guiargs.rom = romVar2.get()
 | 
			
		||||
        guiargs.baserom = romVar.get()
 | 
			
		||||
        guiargs.sprite = sprite
 | 
			
		||||
        try:
 | 
			
		||||
            guiargs, path = adjust(args=guiargs)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logging.exception(e)
 | 
			
		||||
            messagebox.showerror(title="Error while adjusting Rom", message=str(e))
 | 
			
		||||
        else:
 | 
			
		||||
            messagebox.showinfo(title="Success", message="Rom patched successfully")
 | 
			
		||||
            from Utils import persistent_store
 | 
			
		||||
            from Rom import Sprite
 | 
			
		||||
            if isinstance(guiargs.sprite, Sprite):
 | 
			
		||||
                guiargs.sprite = guiargs.sprite.name
 | 
			
		||||
            persistent_store("adjuster", "last_settings_3", guiargs)
 | 
			
		||||
 | 
			
		||||
    adjustButton = Button(bottomFrame2, text='Adjust Rom', command=adjustRom)
 | 
			
		||||
 | 
			
		||||
    adjustButton.pack(side=LEFT, padx=(5, 0))
 | 
			
		||||
 | 
			
		||||
    drowDownFrame2.pack(side=LEFT, pady=(0, 40))
 | 
			
		||||
    rightHalfFrame2.pack(side=RIGHT)
 | 
			
		||||
    topFrame2.pack(side=TOP, pady=70)
 | 
			
		||||
    bottomFrame2.pack(side=BOTTOM, pady=(180, 0))
 | 
			
		||||
 | 
			
		||||
    # Custom Controls
 | 
			
		||||
 | 
			
		||||
    topFrame3 = Frame(customWindow)
 | 
			
		||||
| 
						 | 
				
			
			@ -1498,9 +1201,9 @@ def guiMain(args=None):
 | 
			
		|||
        keyshuffleVar.set(args.keyshuffle)
 | 
			
		||||
        bigkeyshuffleVar.set(args.bigkeyshuffle)
 | 
			
		||||
        retroVar.set(args.retro)
 | 
			
		||||
        quickSwapVar.set(int(args.quickswap))
 | 
			
		||||
        disableMusicVar.set(int(args.disablemusic))
 | 
			
		||||
        disableFlashingVar.set(int(args.reduceflashing))
 | 
			
		||||
        rom_vars.quickSwapVar.set(int(args.quickswap))
 | 
			
		||||
        rom_vars.disableMusicVar.set(int(args.disablemusic))
 | 
			
		||||
        rom_vars.disableFlashingVar.set(int(args.reduceflashing))
 | 
			
		||||
        if args.count:
 | 
			
		||||
            countVar.set(str(args.count))
 | 
			
		||||
        if args.seed:
 | 
			
		||||
| 
						 | 
				
			
			@ -1521,10 +1224,10 @@ def guiMain(args=None):
 | 
			
		|||
        crystalsGanonVar.set(args.crystals_ganon)
 | 
			
		||||
        algorithmVar.set(args.algorithm)
 | 
			
		||||
        shuffleVar.set(args.shuffle)
 | 
			
		||||
        heartbeepVar.set(args.heartbeep)
 | 
			
		||||
        fastMenuVar.set(args.fastmenu)
 | 
			
		||||
        rom_vars.heartbeepVar.set(args.heartbeep)
 | 
			
		||||
        rom_vars.fastMenuVar.set(args.fastmenu)
 | 
			
		||||
        logicVar.set(args.logic)
 | 
			
		||||
        romVar.set(args.rom)
 | 
			
		||||
        rom_vars.romVar.set(args.rom)
 | 
			
		||||
        shuffleGanonVar.set(args.shuffleganon)
 | 
			
		||||
        hintsVar.set(args.hints)
 | 
			
		||||
        if args.sprite is not None:
 | 
			
		||||
| 
						 | 
				
			
			@ -1532,11 +1235,165 @@ def guiMain(args=None):
 | 
			
		|||
 | 
			
		||||
    mainWindow.mainloop()
 | 
			
		||||
 | 
			
		||||
def get_rom_frame(parent=None):
 | 
			
		||||
    romFrame = Frame(parent)
 | 
			
		||||
    baseRomLabel = Label(romFrame, text='LttP Base Rom: ')
 | 
			
		||||
    romVar = StringVar(value="Zelda no Densetsu - Kamigami no Triforce (Japan).sfc")
 | 
			
		||||
    romEntry = Entry(romFrame, textvariable=romVar)
 | 
			
		||||
 | 
			
		||||
    def RomSelect():
 | 
			
		||||
        rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")])
 | 
			
		||||
        import Patch
 | 
			
		||||
        try:
 | 
			
		||||
            Patch.get_base_rom_bytes(rom)  # throws error on checksum fail
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logging.exception(e)
 | 
			
		||||
            messagebox.showerror(title="Error while reading ROM", message=str(e))
 | 
			
		||||
        else:
 | 
			
		||||
            romVar.set(rom)
 | 
			
		||||
            romSelectButton['state'] = "disabled"
 | 
			
		||||
            romSelectButton["text"] = "ROM verified"
 | 
			
		||||
    romSelectButton = Button(romFrame, text='Select Rom', command=RomSelect)
 | 
			
		||||
 | 
			
		||||
    baseRomLabel.pack(side=LEFT)
 | 
			
		||||
    romEntry.pack(side=LEFT, expand=True, fill=X)
 | 
			
		||||
    romSelectButton.pack(side=LEFT)
 | 
			
		||||
    romFrame.pack(side=TOP, expand=True, fill=X)
 | 
			
		||||
 | 
			
		||||
    return romFrame, romVar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_rom_options_frame(parent=None):
 | 
			
		||||
    romOptionsFrame = LabelFrame(parent, text="Rom options")
 | 
			
		||||
    romOptionsFrame.columnconfigure(0, weight=1)
 | 
			
		||||
    romOptionsFrame.columnconfigure(1, weight=1)
 | 
			
		||||
    for i in range(5):
 | 
			
		||||
        romOptionsFrame.rowconfigure(i, weight=1)
 | 
			
		||||
    vars = Namespace()
 | 
			
		||||
 | 
			
		||||
    vars.disableMusicVar = IntVar()
 | 
			
		||||
    disableMusicCheckbutton = Checkbutton(romOptionsFrame, text="Disable music", variable=vars.disableMusicVar)
 | 
			
		||||
    disableMusicCheckbutton.grid(row=0, column=0, sticky=E)
 | 
			
		||||
 | 
			
		||||
    vars.disableFlashingVar = IntVar(value=1)
 | 
			
		||||
    disableFlashingCheckbutton = Checkbutton(romOptionsFrame, text="Disable flashing (anti-epilepsy)", variable=vars.disableFlashingVar)
 | 
			
		||||
    disableFlashingCheckbutton.grid(row=6, column=0, sticky=E)
 | 
			
		||||
 | 
			
		||||
    spriteDialogFrame = Frame(romOptionsFrame)
 | 
			
		||||
    spriteDialogFrame.grid(row=0, column=1)
 | 
			
		||||
    baseSpriteLabel = Label(spriteDialogFrame, text='Sprite:')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    vars.spriteNameVar = StringVar()
 | 
			
		||||
    vars.sprite = None
 | 
			
		||||
    def set_sprite(sprite_param):
 | 
			
		||||
        nonlocal vars
 | 
			
		||||
        if isinstance(sprite_param, str):
 | 
			
		||||
            vars.sprite = sprite_param
 | 
			
		||||
            vars.spriteNameVar.set(sprite_param)
 | 
			
		||||
        elif sprite_param is None or not sprite_param.valid:
 | 
			
		||||
            vars.sprite = None
 | 
			
		||||
            vars.spriteNameVar.set('(unchanged)')
 | 
			
		||||
        else:
 | 
			
		||||
            vars.sprite = sprite_param
 | 
			
		||||
            vars.spriteNameVar.set(vars.sprite.name)
 | 
			
		||||
 | 
			
		||||
    set_sprite(None)
 | 
			
		||||
    vars.spriteNameVar.set('(unchanged)')
 | 
			
		||||
    spriteEntry = Label(spriteDialogFrame, textvariable=vars.spriteNameVar)
 | 
			
		||||
 | 
			
		||||
    def SpriteSelect():
 | 
			
		||||
        SpriteSelector(parent, set_sprite)
 | 
			
		||||
 | 
			
		||||
    spriteSelectButton = Button(spriteDialogFrame, text='...', command=SpriteSelect)
 | 
			
		||||
 | 
			
		||||
    baseSpriteLabel.pack(side=LEFT)
 | 
			
		||||
    spriteEntry.pack(side=LEFT)
 | 
			
		||||
    spriteSelectButton.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    vars.quickSwapVar = IntVar(value=1)
 | 
			
		||||
    quickSwapCheckbutton = Checkbutton(romOptionsFrame, text="L/R Quickswapping", variable=vars.quickSwapVar)
 | 
			
		||||
    quickSwapCheckbutton.grid(row=1, column=0, sticky=E)
 | 
			
		||||
 | 
			
		||||
    fastMenuFrame = Frame(romOptionsFrame)
 | 
			
		||||
    fastMenuFrame.grid(row=1, column=1, sticky=E)
 | 
			
		||||
    fastMenuLabel = Label(fastMenuFrame, text='Menu speed')
 | 
			
		||||
    fastMenuLabel.pack(side=LEFT)
 | 
			
		||||
    vars.fastMenuVar = StringVar()
 | 
			
		||||
    vars.fastMenuVar.set('normal')
 | 
			
		||||
    fastMenuOptionMenu = OptionMenu(fastMenuFrame, vars.fastMenuVar, 'normal', 'instant', 'double', 'triple', 'quadruple', 'half')
 | 
			
		||||
    fastMenuOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    heartcolorFrame = Frame(romOptionsFrame)
 | 
			
		||||
    heartcolorFrame.grid(row=2, column=0, sticky=E)
 | 
			
		||||
    heartcolorLabel = Label(heartcolorFrame, text='Heart color')
 | 
			
		||||
    heartcolorLabel.pack(side=LEFT)
 | 
			
		||||
    vars.heartcolorVar = StringVar()
 | 
			
		||||
    vars.heartcolorVar.set('red')
 | 
			
		||||
    heartcolorOptionMenu = OptionMenu(heartcolorFrame, vars.heartcolorVar, 'red', 'blue', 'green', 'yellow', 'random')
 | 
			
		||||
    heartcolorOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    heartbeepFrame = Frame(romOptionsFrame)
 | 
			
		||||
    heartbeepFrame.grid(row=2, column=1, sticky=E)
 | 
			
		||||
    heartbeepLabel = Label(heartbeepFrame, text='Heartbeep')
 | 
			
		||||
    heartbeepLabel.pack(side=LEFT)
 | 
			
		||||
    vars.heartbeepVar = StringVar()
 | 
			
		||||
    vars.heartbeepVar.set('normal')
 | 
			
		||||
    heartbeepOptionMenu = OptionMenu(heartbeepFrame, vars.heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    owPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    owPalettesFrame.grid(row=3, column=0, sticky=E)
 | 
			
		||||
    owPalettesLabel = Label(owPalettesFrame, text='Overworld palettes')
 | 
			
		||||
    owPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    vars.owPalettesVar = StringVar()
 | 
			
		||||
    vars.owPalettesVar.set('default')
 | 
			
		||||
    owPalettesOptionMenu = OptionMenu(owPalettesFrame, vars.owPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    owPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    uwPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    uwPalettesFrame.grid(row=3, column=1, sticky=E)
 | 
			
		||||
    uwPalettesLabel = Label(uwPalettesFrame, text='Dungeon palettes')
 | 
			
		||||
    uwPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    vars.uwPalettesVar = StringVar()
 | 
			
		||||
    vars.uwPalettesVar.set('default')
 | 
			
		||||
    uwPalettesOptionMenu = OptionMenu(uwPalettesFrame, vars.uwPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    uwPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    hudPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    hudPalettesFrame.grid(row=4, column=0, sticky=E)
 | 
			
		||||
    hudPalettesLabel = Label(hudPalettesFrame, text='HUD palettes')
 | 
			
		||||
    hudPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    vars.hudPalettesVar = StringVar()
 | 
			
		||||
    vars.hudPalettesVar.set('default')
 | 
			
		||||
    hudPalettesOptionMenu = OptionMenu(hudPalettesFrame, vars.hudPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    hudPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    swordPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    swordPalettesFrame.grid(row=4, column=1, sticky=E)
 | 
			
		||||
    swordPalettesLabel = Label(swordPalettesFrame, text='Sword palettes')
 | 
			
		||||
    swordPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    vars.swordPalettesVar = StringVar()
 | 
			
		||||
    vars.swordPalettesVar.set('default')
 | 
			
		||||
    swordPalettesOptionMenu = OptionMenu(swordPalettesFrame, vars.swordPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    swordPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    shieldPalettesFrame = Frame(romOptionsFrame)
 | 
			
		||||
    shieldPalettesFrame.grid(row=5, column=0, sticky=E)
 | 
			
		||||
    shieldPalettesLabel = Label(shieldPalettesFrame, text='Shield palettes')
 | 
			
		||||
    shieldPalettesLabel.pack(side=LEFT)
 | 
			
		||||
    vars.shieldPalettesVar = StringVar()
 | 
			
		||||
    vars.shieldPalettesVar.set('default')
 | 
			
		||||
    shieldPalettesOptionMenu = OptionMenu(shieldPalettesFrame, vars.shieldPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke')
 | 
			
		||||
    shieldPalettesOptionMenu.pack(side=LEFT)
 | 
			
		||||
 | 
			
		||||
    return romOptionsFrame, vars, set_sprite
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SpriteSelector():
 | 
			
		||||
    def __init__(self, parent, callback, adjuster=False):
 | 
			
		||||
        if is_bundled():
 | 
			
		||||
            self.deploy_icons()
 | 
			
		||||
        self.deploy_icons()
 | 
			
		||||
        self.parent = parent
 | 
			
		||||
        self.window = Toplevel(parent)
 | 
			
		||||
        self.callback = callback
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ class BackgroundTask(object):
 | 
			
		|||
    def stop(self):
 | 
			
		||||
        self.running = False
 | 
			
		||||
 | 
			
		||||
    #safe to call from worker
 | 
			
		||||
    # safe to call from worker
 | 
			
		||||
    def queue_event(self, event):
 | 
			
		||||
        self.queue.put(event)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								Utils.py
								
								
								
								
							
							
						
						
									
										4
									
								
								Utils.py
								
								
								
								
							| 
						 | 
				
			
			@ -343,8 +343,8 @@ def get_adjuster_settings(romfile: str) -> typing.Tuple[str, bool]:
 | 
			
		|||
                                  f"Enter yes, no or never: ")
 | 
			
		||||
        if adjust_wanted and adjust_wanted.startswith("y"):
 | 
			
		||||
            adjusted = True
 | 
			
		||||
            import AdjusterMain
 | 
			
		||||
            _, romfile = AdjusterMain.adjust(adjuster_settings)
 | 
			
		||||
            import Adjuster
 | 
			
		||||
            _, romfile = Adjuster.adjust(adjuster_settings)
 | 
			
		||||
        elif adjust_wanted and "never" in adjust_wanted:
 | 
			
		||||
            persistent_store("adjuster", "never_adjust", True)
 | 
			
		||||
            return romfile, False
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								setup.py
								
								
								
								
							
							
						
						
									
										7
									
								
								setup.py
								
								
								
								
							| 
						 | 
				
			
			@ -48,8 +48,8 @@ def manifest_creation():
 | 
			
		|||
            path = os.path.join(dirpath, filename)
 | 
			
		||||
            hashes[os.path.relpath(path, start=buildfolder)] = pool.submit(_threaded_hash, path)
 | 
			
		||||
    import json
 | 
			
		||||
    manifest = {"buildtime": buildtime.isoformat(sep=" ", timespec="seconds")}
 | 
			
		||||
    manifest["hashes"] = {path: hash.result() for path, hash in hashes.items()}
 | 
			
		||||
    manifest = {"buildtime": buildtime.isoformat(sep=" ", timespec="seconds"),
 | 
			
		||||
                "hashes": {path: hash.result() for path, hash in hashes.items()}}
 | 
			
		||||
    json.dump(manifest, open(manifestpath, "wt"), indent=4)
 | 
			
		||||
    print("Created Manifest")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,8 @@ scripts = {"MultiClient.py": "BerserkerMultiClient",
 | 
			
		|||
           "MultiMystery.py": "BerserkerMultiMystery",
 | 
			
		||||
           "MultiServer.py": "BerserkerMultiServer",
 | 
			
		||||
           "gui.py": "BerserkerMultiCreator",
 | 
			
		||||
           "Mystery.py": "BerserkerMystery"}
 | 
			
		||||
           "Mystery.py": "BerserkerMystery",
 | 
			
		||||
           "Adjuster.py": "BerserkerLttPAdjuster"}
 | 
			
		||||
 | 
			
		||||
exes = []
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue