168 lines
7.2 KiB
Python
Executable File
168 lines
7.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from argparse import Namespace
|
|
from glob import glob
|
|
import json
|
|
import logging
|
|
import random
|
|
import os
|
|
import shutil
|
|
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 urllib.parse import urlparse
|
|
from urllib.request import urlopen
|
|
|
|
from AdjusterMain import adjust
|
|
from DungeonRandomizer import parse_arguments
|
|
from gui.adjust.overview import adjust_page
|
|
from gui.custom.overview import custom_page
|
|
from gui.randomize.item import item_page
|
|
from gui.randomize.entrando import entrando_page
|
|
from gui.randomize.enemizer import enemizer_page
|
|
from gui.randomize.dungeon import dungeon_page
|
|
from gui.randomize.multiworld import multiworld_page
|
|
from gui.randomize.gameoptions import gameoptions_page
|
|
from gui.randomize.generation import generation_page
|
|
from gui.bottom import bottom_frame
|
|
from GuiUtils import ToolTips, set_icon, BackgroundTaskProgress
|
|
from Main import main, __version__ as ESVersion
|
|
from Rom import Sprite
|
|
from Utils import is_bundled, local_path, output_path, open_file
|
|
|
|
|
|
def guiMain(args=None):
|
|
mainWindow = Tk()
|
|
self = mainWindow
|
|
mainWindow.wm_title("Door Shuffle %s" % ESVersion)
|
|
|
|
set_icon(mainWindow)
|
|
|
|
notebook = ttk.Notebook(self)
|
|
self.randomizerWindow = ttk.Frame(notebook)
|
|
self.adjustWindow = ttk.Frame(notebook)
|
|
self.customWindow = ttk.Frame(notebook)
|
|
notebook.add(self.randomizerWindow, text='Randomize')
|
|
notebook.add(self.adjustWindow, text='Adjust')
|
|
notebook.add(self.customWindow, text='Custom')
|
|
notebook.pack()
|
|
|
|
# randomizer controls
|
|
|
|
# Randomize notebook page:
|
|
# make notebook pages: Item, Entrances, Enemizer, Dungeon Shuffle, Multiworld, Game Options, Generation Setup
|
|
# Item: Item Randomizer settings
|
|
# Entrances: Entrance Randomizer settings
|
|
# Enemizer: Enemy Randomizer settings
|
|
# Dungeon Shuffle: Dungeon Door Randomizer settings
|
|
# Multiworld: Multiworld settings
|
|
# Game Options: Cosmetic settings that don't affect logic/placement
|
|
# Generation Setup: Primarily one&done settings
|
|
self.randomizerNotebook = ttk.Notebook(self.randomizerWindow)
|
|
|
|
# Item Randomizer
|
|
self.itemWindow = item_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.itemWindow, text="Items")
|
|
|
|
# Entrance Randomizer
|
|
self.entrandoWindow = entrando_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.entrandoWindow, text="Entrances")
|
|
|
|
# Enemizer
|
|
self.enemizerWindow = enemizer_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.enemizerWindow, text="Enemizer")
|
|
|
|
# Dungeon Shuffle
|
|
self.dungeonRandoWindow = dungeon_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.dungeonRandoWindow, text="Dungeon Shuffle")
|
|
|
|
# Multiworld
|
|
self.multiworldWindow = multiworld_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.multiworldWindow, text="Multiworld")
|
|
|
|
# Game Options
|
|
self.gameOptionsWindow = gameoptions_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.gameOptionsWindow, text="Game Options")
|
|
|
|
# Generation Setup
|
|
self.generationSetupWindow = generation_page(self.randomizerNotebook)
|
|
self.randomizerNotebook.add(self.generationSetupWindow, text="Generation Setup")
|
|
|
|
# add randomizer notebook to main window
|
|
self.randomizerNotebook.pack()
|
|
|
|
# bottom of window: Open Output Directory, Open Documentation (if exists)
|
|
self.farBottomFrame = bottom_frame(self,self,None)
|
|
# set bottom frame to main window
|
|
self.farBottomFrame.pack(side=BOTTOM, fill=X, padx=5, pady=5)
|
|
|
|
# Adjuster Controls
|
|
self.adjustContent = adjust_page(self,self.adjustWindow)
|
|
# self.adjustContent,self.working_dirs = adjust_page(self,self.adjustWindow,self.working_dirs)
|
|
self.adjustContent.pack(side=TOP, fill=BOTH, expand=True)
|
|
|
|
# Custom Controls
|
|
self.customContent = custom_page(self,self.customWindow)
|
|
self.customContent.pack(side=TOP, pady=(17,0))
|
|
|
|
def validation(P):
|
|
if str.isdigit(P) or P == "":
|
|
return True
|
|
else:
|
|
return False
|
|
vcmd=(self.customContent.register(validation), '%P')
|
|
|
|
if args is not None:
|
|
for k,v in vars(args).items():
|
|
if type(v) is dict:
|
|
setattr(args, k, v[1]) # only get values for player 1 for now
|
|
# load values from commandline args
|
|
self.generationSetupWindow.createSpoilerVar.set(int(args.create_spoiler))
|
|
self.generationSetupWindow.suppressRomVar.set(int(args.suppress_rom))
|
|
self.dungeonRandoWindow.mapshuffleVar.set(args.mapshuffle)
|
|
self.dungeonRandoWindow.compassshuffleVar.set(args.compassshuffle)
|
|
self.dungeonRandoWindow.keyshuffleVar.set(args.keyshuffle)
|
|
self.dungeonRandoWindow.bigkeyshuffleVar.set(args.bigkeyshuffle)
|
|
self.itemWindow.retroVar.set(args.retro)
|
|
self.entrandoWindow.openpyramidVar.set(args.openpyramid)
|
|
self.gameOptionsWindow.quickSwapVar.set(int(args.quickswap))
|
|
self.gameOptionsWindow.disableMusicVar.set(int(args.disablemusic))
|
|
if args.multi:
|
|
self.multiworldWindow.worldVar.set(str(args.multi))
|
|
if args.count:
|
|
self.farBottomFrame.countVar.set(str(args.count))
|
|
if args.seed:
|
|
self.farBottomFrame.seedVar.set(str(args.seed))
|
|
self.itemWindow.modeVar.set(args.mode)
|
|
self.itemWindow.swordVar.set(args.swords)
|
|
self.itemWindow.difficultyVar.set(args.difficulty)
|
|
self.itemWindow.itemfunctionVar.set(args.item_functionality)
|
|
self.itemWindow.timerVar.set(args.timer)
|
|
self.itemWindow.progressiveVar.set(args.progressive)
|
|
self.itemWindow.accessibilityVar.set(args.accessibility)
|
|
self.itemWindow.goalVar.set(args.goal)
|
|
self.itemWindow.crystalsGTVar.set(args.crystals_gt)
|
|
self.itemWindow.crystalsGanonVar.set(args.crystals_ganon)
|
|
self.itemWindow.algorithmVar.set(args.algorithm)
|
|
self.entrandoWindow.shuffleVar.set(args.shuffle)
|
|
self.dungeonRandoWindow.doorShuffleVar.set(args.door_shuffle)
|
|
self.gameOptionsWindow.heartcolorVar.set(args.heartcolor)
|
|
self.gameOptionsWindow.heartbeepVar.set(args.heartbeep)
|
|
self.gameOptionsWindow.fastMenuVar.set(args.fastmenu)
|
|
self.itemWindow.logicVar.set(args.logic)
|
|
self.generationSetupWindow.romVar.set(args.rom)
|
|
self.entrandoWindow.shuffleGanonVar.set(args.shuffleganon)
|
|
self.gameOptionsWindow.hintsVar.set(args.hints)
|
|
self.enemizerWindow.enemizerCLIpathVar.set(args.enemizercli)
|
|
self.enemizerWindow.potShuffleVar.set(args.shufflepots)
|
|
self.enemizerWindow.enemyShuffleVar.set(args.shuffleenemies)
|
|
self.enemizerWindow.enemizerBossVar.set(args.shufflebosses)
|
|
self.enemizerWindow.enemizerDamageVar.set(args.enemy_damage)
|
|
self.enemizerWindow.enemizerHealthVar.set(args.enemy_health)
|
|
self.gameOptionsWindow.owPalettesVar.set(args.ow_palettes)
|
|
self.gameOptionsWindow.uwPalettesVar.set(args.uw_palettes)
|
|
# if args.sprite is not None:
|
|
# self.gameOptionsWindow.set_sprite(Sprite(args.sprite))
|
|
|
|
mainWindow.mainloop()
|
|
|
|
if __name__ == '__main__':
|
|
guiMain()
|