mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Move cmd entry point to EntranceRandomizer.py. Add very barebones tkinter Gui.
This commit is contained in:
215
Gui.py
Normal file
215
Gui.py
Normal file
@@ -0,0 +1,215 @@
|
||||
from Main import main, __version__ as ESVersion
|
||||
from argparse import Namespace
|
||||
import random
|
||||
|
||||
from tkinter import Checkbutton, OptionMenu, Tk, LEFT, RIGHT, BOTTOM, TOP, StringVar, IntVar, Frame, Label, W, E, Entry, Spinbox, Button, filedialog, messagebox
|
||||
|
||||
|
||||
def guiMain(args=None):
|
||||
mainWindow = Tk()
|
||||
mainWindow.wm_title("Entrance Shuffle %s" % ESVersion)
|
||||
|
||||
topFrame = Frame(mainWindow)
|
||||
rightHalfFrame = Frame(topFrame)
|
||||
checkBoxFrame = Frame(rightHalfFrame)
|
||||
|
||||
createSpoilerVar = IntVar()
|
||||
createSpoilerCheckbutton = Checkbutton(checkBoxFrame, text="Create Spoiler Log", variable=createSpoilerVar)
|
||||
suppressRomVar = IntVar()
|
||||
suppressRomCheckbutton = Checkbutton(checkBoxFrame, text="Do not create patched Rom", variable=suppressRomVar)
|
||||
quickSwapVar = IntVar()
|
||||
quickSwapCheckbutton = Checkbutton(checkBoxFrame, text="Enabled L/R Item quickswapping", variable=quickSwapVar)
|
||||
dungeonItemsVar = IntVar()
|
||||
dungeonItemsCheckbutton = Checkbutton(checkBoxFrame, text="Place Dungeon Items (Compasses/Maps)", onvalue=0, offvalue=1, variable=dungeonItemsVar)
|
||||
beatableOnlyVar = IntVar()
|
||||
beatableOnlyCheckbutton = Checkbutton(checkBoxFrame, text="Only ensure seed is beatable, not all items must be reachable", variable=beatableOnlyVar)
|
||||
|
||||
createSpoilerCheckbutton.pack(expand=True, anchor=W)
|
||||
suppressRomCheckbutton.pack(expand=True, anchor=W)
|
||||
quickSwapCheckbutton.pack(expand=True, anchor=W)
|
||||
dungeonItemsCheckbutton.pack(expand=True, anchor=W)
|
||||
beatableOnlyCheckbutton.pack(expand=True, anchor=W)
|
||||
|
||||
fileDialogFrame = Frame(rightHalfFrame)
|
||||
|
||||
romDialogFrame = Frame(fileDialogFrame)
|
||||
baseRomLabel = Label(romDialogFrame, text='Base Rom')
|
||||
romVar = StringVar()
|
||||
romEntry = Entry(romDialogFrame, textvariable=romVar)
|
||||
def RomSelect():
|
||||
rom = filedialog.askopenfilename()
|
||||
romVar.set(rom)
|
||||
romSelectButton = Button(romDialogFrame, text='Select Rom', command=RomSelect)
|
||||
|
||||
baseRomLabel.pack(side=LEFT)
|
||||
romEntry.pack(side=LEFT)
|
||||
romSelectButton.pack(side=LEFT)
|
||||
|
||||
spriteDialogFrame = Frame(fileDialogFrame)
|
||||
baseSpriteLabel = Label(spriteDialogFrame, text='Link Sprite')
|
||||
spriteVar = StringVar()
|
||||
spriteEntry = Entry(spriteDialogFrame, textvariable=spriteVar)
|
||||
|
||||
def SpriteSelect():
|
||||
sprite = filedialog.askopenfilename()
|
||||
spriteVar.set(sprite)
|
||||
|
||||
spriteSelectButton = Button(spriteDialogFrame, text='Select Sprite', command=SpriteSelect)
|
||||
|
||||
baseSpriteLabel.pack(side=LEFT)
|
||||
spriteEntry.pack(side=LEFT)
|
||||
spriteSelectButton.pack(side=LEFT)
|
||||
|
||||
romDialogFrame.pack()
|
||||
spriteDialogFrame.pack()
|
||||
|
||||
checkBoxFrame.pack()
|
||||
fileDialogFrame.pack()
|
||||
|
||||
drowDownFrame = Frame(topFrame)
|
||||
|
||||
modeFrame = Frame(drowDownFrame)
|
||||
modeVar = StringVar()
|
||||
modeVar.set('standard')
|
||||
modeOptionMenu = OptionMenu(modeFrame, modeVar, 'standard', 'open', 'swordless')
|
||||
modeOptionMenu.pack(side=RIGHT)
|
||||
modeLabel = Label(modeFrame, text='Game Mode')
|
||||
modeLabel.pack(side=LEFT)
|
||||
|
||||
logicFrame = Frame(drowDownFrame)
|
||||
logicVar = StringVar()
|
||||
logicVar.set('noglitches')
|
||||
logicOptionMenu = OptionMenu(logicFrame, logicVar, 'noglitches', 'minorglitches')
|
||||
logicOptionMenu.pack(side=RIGHT)
|
||||
logicLabel = Label(logicFrame, text='Game logic')
|
||||
logicLabel.pack(side=LEFT)
|
||||
|
||||
goalFrame = Frame(drowDownFrame)
|
||||
goalVar = StringVar()
|
||||
goalVar.set('ganon')
|
||||
goalOptionMenu = OptionMenu(goalFrame, goalVar, 'ganon', 'pedestal', 'dungeons', 'starhunt', 'triforcehunt')
|
||||
goalOptionMenu.pack(side=RIGHT)
|
||||
goalLabel = Label(goalFrame, text='Game goal')
|
||||
goalLabel.pack(side=LEFT)
|
||||
|
||||
difficultyFrame = Frame(drowDownFrame)
|
||||
difficultyVar = StringVar()
|
||||
difficultyVar.set('normal')
|
||||
difficultyOptionMenu = OptionMenu(difficultyFrame, difficultyVar, 'normal', 'timed', 'timed-ohko', 'timed-countdown')
|
||||
difficultyOptionMenu.pack(side=RIGHT)
|
||||
difficultyLabel = Label(difficultyFrame, text='Game difficulty')
|
||||
difficultyLabel.pack(side=LEFT)
|
||||
|
||||
algorithmFrame = Frame(drowDownFrame)
|
||||
algorithmVar = StringVar()
|
||||
algorithmVar.set('restrictive')
|
||||
algorithmOptionMenu = OptionMenu(algorithmFrame, algorithmVar, 'freshness', 'flood', 'vt21', 'vt22', 'restrictive')
|
||||
algorithmOptionMenu.pack(side=RIGHT)
|
||||
algorithmLabel = Label(algorithmFrame, text='Item distribution algorithm')
|
||||
algorithmLabel.pack(side=LEFT)
|
||||
|
||||
shuffleFrame = Frame(drowDownFrame)
|
||||
shuffleVar = StringVar()
|
||||
shuffleVar.set('full')
|
||||
shuffleOptionMenu = OptionMenu(shuffleFrame, shuffleVar, 'vanilla', 'simple', 'restricted', 'full', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple')
|
||||
shuffleOptionMenu.pack(side=RIGHT)
|
||||
shuffleLabel = Label(shuffleFrame, text='Entrance shuffle algorithm')
|
||||
shuffleLabel.pack(side=LEFT)
|
||||
|
||||
heartbeepFrame = Frame(drowDownFrame)
|
||||
heartbeepVar = StringVar()
|
||||
heartbeepVar.set('normal')
|
||||
heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'normal', 'half', 'quarter', 'off')
|
||||
heartbeepOptionMenu.pack(side=RIGHT)
|
||||
heartbeepLabel = Label(heartbeepFrame, text='Heartbeep sound rate')
|
||||
heartbeepLabel.pack(side=LEFT)
|
||||
|
||||
modeFrame.pack(expand=True, anchor=E)
|
||||
logicFrame.pack(expand=True, anchor=E)
|
||||
goalFrame.pack(expand=True, anchor=E)
|
||||
difficultyFrame.pack(expand=True, anchor=E)
|
||||
algorithmFrame.pack(expand=True, anchor=E)
|
||||
shuffleFrame.pack(expand=True, anchor=E)
|
||||
heartbeepFrame.pack(expand=True, anchor=E)
|
||||
|
||||
bottomFrame = Frame(mainWindow)
|
||||
|
||||
seedLabel = Label(bottomFrame, text='Seed #')
|
||||
seedVar = StringVar()
|
||||
seedEntry = Entry(bottomFrame, textvariable=seedVar)
|
||||
countLabel = Label(bottomFrame, text='Count')
|
||||
countVar = StringVar()
|
||||
countSpinbox = Spinbox(bottomFrame, from_=1, to=100, textvariable=countVar)
|
||||
|
||||
def generateRom():
|
||||
guiargs = Namespace
|
||||
guiargs.seed = int(seedVar.get()) if seedVar.get() else None
|
||||
guiargs.count = int(countVar.get()) if countVar.get() != '1' else None
|
||||
guiargs.mode = modeVar.get()
|
||||
guiargs.logic = logicVar.get()
|
||||
guiargs.goal = goalVar.get()
|
||||
guiargs.difficulty = difficultyVar.get()
|
||||
guiargs.algorithm = algorithmVar.get()
|
||||
guiargs.shuffle = shuffleVar.get()
|
||||
guiargs.heartbeep = heartbeepVar.get()
|
||||
guiargs.create_spoiler = bool(createSpoilerVar.get())
|
||||
guiargs.suppress_rom = bool(suppressRomVar.get())
|
||||
guiargs.nodungeonitems = bool(dungeonItemsVar.get())
|
||||
guiargs.beatableonly = bool(beatableOnlyVar.get())
|
||||
guiargs.quickswap = bool(quickSwapVar.get())
|
||||
guiargs.rom = romVar.get()
|
||||
guiargs.sprite = spriteVar.get() if spriteVar.get() else None
|
||||
try:
|
||||
if guiargs.count is not None:
|
||||
seed = guiargs.seed
|
||||
for i in range(guiargs.count):
|
||||
main(seed=seed, args=guiargs)
|
||||
seed = random.randint(0, 999999999)
|
||||
else:
|
||||
main(seed=guiargs.seed, args=guiargs)
|
||||
except Exception as e:
|
||||
messagebox.showerror(title="Error while creating seed", message=str(e))
|
||||
else:
|
||||
messagebox.showinfo(title="Success", message="Rom patched successfully")
|
||||
|
||||
generateButton = Button(bottomFrame, text='Generate Patched Rom', command=generateRom)
|
||||
|
||||
seedLabel.pack(side=LEFT)
|
||||
seedEntry.pack(side=LEFT)
|
||||
countLabel.pack(side=LEFT)
|
||||
countSpinbox.pack(side=LEFT)
|
||||
generateButton.pack(side=LEFT)
|
||||
|
||||
drowDownFrame.pack(side=LEFT)
|
||||
rightHalfFrame.pack(side=RIGHT)
|
||||
topFrame.pack(side=TOP)
|
||||
bottomFrame.pack(side=BOTTOM)
|
||||
|
||||
if args is not None:
|
||||
# load values from commandline args
|
||||
createSpoilerVar.set(int(args.create_spoiler))
|
||||
suppressRomVar.set(int(args.suppress_rom))
|
||||
if args.nodungeonitems:
|
||||
dungeonItemsVar.set(int(not args.nodungeonitems))
|
||||
beatableOnlyVar.set(int(args.beatableonly))
|
||||
quickSwapVar.set(int(args.quickswap))
|
||||
if args.count:
|
||||
countVar.set(str(args.count))
|
||||
if args.seed:
|
||||
seedVar.set(str(args.seed))
|
||||
modeVar.set(args.mode)
|
||||
difficultyVar.set(args.difficulty)
|
||||
goalVar.set(args.goal)
|
||||
algorithmVar.set(args.algorithm)
|
||||
shuffleVar.set(args.shuffle)
|
||||
heartbeepVar.set(args.heartbeep)
|
||||
logicVar.set(args.logic)
|
||||
romVar.set(args.rom)
|
||||
if args.sprite is not None:
|
||||
spriteVar.set(args.sprite)
|
||||
|
||||
mainWindow.mainloop()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
guiMain()
|
Reference in New Issue
Block a user