From 1059c9b40a3b8f1b2316acc9f9340152c42aa887 Mon Sep 17 00:00:00 2001 From: "Mike A. Trethewey" Date: Sat, 8 Feb 2020 11:00:51 -0800 Subject: [PATCH] Sort Item Randomizer --- Gui.py | 172 +++++++----------------------------------- gui/randomize/item.py | 139 ++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 144 deletions(-) create mode 100644 gui/randomize/item.py diff --git a/Gui.py b/Gui.py index af6772a3..b4f60fd2 100755 --- a/Gui.py +++ b/Gui.py @@ -12,6 +12,7 @@ from urllib.request import urlopen from AdjusterMain import adjust from DungeonRandomizer import parse_arguments +from gui.randomize.item import item_page from GuiUtils import ToolTips, set_icon, BackgroundTaskProgress from Main import main, __version__ as ESVersion from Rom import Sprite @@ -69,7 +70,7 @@ def guiMain(args=None): randomizerNotebook = ttk.Notebook(randomizerWindow) # Item Randomizer - itemWindow = ttk.Frame(randomizerNotebook) + itemWindow = item_page(randomizerNotebook) randomizerNotebook.add(itemWindow, text="Items") # Entrance Randomizer @@ -119,8 +120,6 @@ def guiMain(args=None): keyshuffleCheckbutton = Checkbutton(mcsbshuffleFrame, text="Keys", variable=keyshuffleVar) bigkeyshuffleVar = IntVar() bigkeyshuffleCheckbutton = Checkbutton(mcsbshuffleFrame, text="BigKeys", variable=bigkeyshuffleVar) - retroVar = IntVar() - retroCheckbutton = Checkbutton(checkBoxFrame, text="Retro mode (universal keys)", variable=retroVar) shuffleGanonVar = IntVar() shuffleGanonVar.set(1) #set default shuffleGanonCheckbutton = Checkbutton(checkBoxFrame, text="Include Ganon's Tower and Pyramid Hole in shuffle pool", variable=shuffleGanonVar) @@ -139,7 +138,6 @@ def guiMain(args=None): compassshuffleCheckbutton.grid(row=0, column=2) keyshuffleCheckbutton.grid(row=0, column=3) bigkeyshuffleCheckbutton.grid(row=0, column=4) - retroCheckbutton.pack(expand=True, anchor=W) shuffleGanonCheckbutton.pack(expand=True, anchor=W) hintsCheckbutton.pack(expand=True, anchor=W) customCheckbutton.pack(expand=True, anchor=W) @@ -252,102 +250,6 @@ def guiMain(args=None): drowDownFrame = Frame(topFrame) - modeFrame = Frame(drowDownFrame) - modeVar = StringVar() - modeVar.set('open') - modeOptionMenu = OptionMenu(modeFrame, modeVar, 'standard', 'open', 'inverted') - 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', 'nologic') - 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', 'triforcehunt', 'crystals') - goalOptionMenu.pack(side=RIGHT) - goalLabel = Label(goalFrame, text='Game goal') - goalLabel.pack(side=LEFT) - - crystalsGTFrame = Frame(drowDownFrame) - crystalsGTVar = StringVar() - crystalsGTVar.set('7') - crystalsGTOptionMenu = OptionMenu(crystalsGTFrame, crystalsGTVar, '0', '1', '2', '3', '4', '5', '6', '7', 'random') - crystalsGTOptionMenu.pack(side=RIGHT) - crystalsGTLabel = Label(crystalsGTFrame, text='Crystals to open Ganon\'s Tower') - crystalsGTLabel.pack(side=LEFT) - - crystalsGanonFrame = Frame(drowDownFrame) - crystalsGanonVar = StringVar() - crystalsGanonVar.set('7') - crystalsGanonOptionMenu = OptionMenu(crystalsGanonFrame, crystalsGanonVar, '0', '1', '2', '3', '4', '5', '6', '7', 'random') - crystalsGanonOptionMenu.pack(side=RIGHT) - crystalsGanonLabel = Label(crystalsGanonFrame, text='Crystals to fight Ganon') - crystalsGanonLabel.pack(side=LEFT) - - swordFrame = Frame(drowDownFrame) - swordVar = StringVar() - swordVar.set('random') - swordOptionMenu = OptionMenu(swordFrame, swordVar, 'random', 'assured', 'swordless', 'vanilla') - swordOptionMenu.pack(side=RIGHT) - swordLabel = Label(swordFrame, text='Sword availability') - swordLabel.pack(side=LEFT) - - difficultyFrame = Frame(drowDownFrame) - difficultyVar = StringVar() - difficultyVar.set('normal') - difficultyOptionMenu = OptionMenu(difficultyFrame, difficultyVar, 'normal', 'hard', 'expert') - difficultyOptionMenu.pack(side=RIGHT) - difficultyLabel = Label(difficultyFrame, text='Difficulty: item pool') - difficultyLabel.pack(side=LEFT) - - itemfunctionFrame = Frame(drowDownFrame) - itemfunctionVar = StringVar() - itemfunctionVar.set('normal') - itemfunctionOptionMenu = OptionMenu(itemfunctionFrame, itemfunctionVar, 'normal', 'hard', 'expert') - itemfunctionOptionMenu.pack(side=RIGHT) - itemfunctionLabel = Label(itemfunctionFrame, text='Difficulty: item functionality') - itemfunctionLabel.pack(side=LEFT) - - timerFrame = Frame(drowDownFrame) - timerVar = StringVar() - timerVar.set('none') - timerOptionMenu = OptionMenu(timerFrame, timerVar, 'none', 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown') - timerOptionMenu.pack(side=RIGHT) - timerLabel = Label(timerFrame, text='Timer setting') - timerLabel.pack(side=LEFT) - - progressiveFrame = Frame(drowDownFrame) - progressiveVar = StringVar() - progressiveVar.set('on') - progressiveOptionMenu = OptionMenu(progressiveFrame, progressiveVar, 'on', 'off', 'random') - progressiveOptionMenu.pack(side=RIGHT) - progressiveLabel = Label(progressiveFrame, text='Progressive equipment') - progressiveLabel.pack(side=LEFT) - - accessibilityFrame = Frame(drowDownFrame) - accessibilityVar = StringVar() - accessibilityVar.set('items') - accessibilityOptionMenu = OptionMenu(accessibilityFrame, accessibilityVar, 'items', 'locations', 'none') - accessibilityOptionMenu.pack(side=RIGHT) - accessibilityLabel = Label(accessibilityFrame, text='Item accessibility') - accessibilityLabel.pack(side=LEFT) - - algorithmFrame = Frame(drowDownFrame) - algorithmVar = StringVar() - algorithmVar.set('balanced') - algorithmOptionMenu = OptionMenu(algorithmFrame, algorithmVar, 'freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced') - algorithmOptionMenu.pack(side=RIGHT) - algorithmLabel = Label(algorithmFrame, text='Item distribution algorithm') - algorithmLabel.pack(side=LEFT) - shuffleFrame = Frame(drowDownFrame) shuffleVar = StringVar() shuffleVar.set('vanilla') @@ -364,24 +266,6 @@ def guiMain(args=None): doorShuffleLabel = Label(doorShuffleFrame, text='Door shuffle algorithm') doorShuffleLabel.pack(side=LEFT) - logicFrame.pack(expand=True, anchor=E) - accessibilityFrame.pack(expand=True, anchor=E) - - goalFrame.pack(expand=True, anchor=E) - crystalsGTFrame.pack(expand=True, anchor=E) - crystalsGanonFrame.pack(expand=True, anchor=E) - - modeFrame.pack(expand=True, anchor=E) - shuffleFrame.pack(expand=True, anchor=E) - doorShuffleFrame.pack(expand=True, anchor=E) - - difficultyFrame.pack(expand=True, anchor=E) - itemfunctionFrame.pack(expand=True, anchor=E) - timerFrame.pack(expand=True, anchor=E) - progressiveFrame.pack(expand=True, anchor=E) - accessibilityFrame.pack(expand=True, anchor=E) - algorithmFrame.pack(expand=True, anchor=E) - enemizerFrame = LabelFrame(sortWindow, text="Enemizer", padx=5, pady=2) enemizerFrame.columnconfigure(0, weight=1) enemizerFrame.columnconfigure(1, weight=1) @@ -463,19 +347,19 @@ def guiMain(args=None): guiargs.names = namesVar.get() 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.mode = itemWindow.modeVar.get() + guiargs.logic = itemWindow.logicVar.get() - guiargs.goal = goalVar.get() - guiargs.crystals_gt = crystalsGTVar.get() - guiargs.crystals_ganon = crystalsGanonVar.get() - guiargs.swords = swordVar.get() - guiargs.difficulty = difficultyVar.get() - guiargs.item_functionality = itemfunctionVar.get() - guiargs.timer = timerVar.get() - guiargs.progressive = progressiveVar.get() - guiargs.accessibility = accessibilityVar.get() - guiargs.algorithm = algorithmVar.get() + guiargs.goal = itemWindow.goalVar.get() + guiargs.crystals_gt = itemWindow.crystalsGTVar.get() + guiargs.crystals_ganon = itemWindow.crystalsGanonVar.get() + guiargs.swords = itemWindow.swordVar.get() + guiargs.difficulty = itemWindow.difficultyVar.get() + guiargs.item_functionality = itemWindow.itemfunctionVar.get() + guiargs.timer = itemWindow.timerVar.get() + guiargs.progressive = itemWindow.progressiveVar.get() + guiargs.accessibility = itemWindow.accessibilityVar.get() + guiargs.algorithm = itemWindow.algorithmVar.get() guiargs.shuffle = shuffleVar.get() guiargs.door_shuffle = doorShuffleVar.get() guiargs.heartbeep = heartbeepVar.get() @@ -489,7 +373,7 @@ def guiMain(args=None): guiargs.compassshuffle = bool(compassshuffleVar.get()) guiargs.keyshuffle = bool(keyshuffleVar.get()) guiargs.bigkeyshuffle = bool(bigkeyshuffleVar.get()) - guiargs.retro = bool(retroVar.get()) + guiargs.retro = bool(itemWindow.retroVar.get()) guiargs.quickswap = bool(quickSwapVar.get()) guiargs.disablemusic = bool(disableMusicVar.get()) guiargs.ow_palettes = owPalettesVar.get() @@ -1273,7 +1157,7 @@ def guiMain(args=None): compassshuffleVar.set(args.compassshuffle) keyshuffleVar.set(args.keyshuffle) bigkeyshuffleVar.set(args.bigkeyshuffle) - retroVar.set(args.retro) + itemWindow.retroVar.set(args.retro) openpyramidVar.set(args.openpyramid) quickSwapVar.set(int(args.quickswap)) disableMusicVar.set(int(args.disablemusic)) @@ -1283,23 +1167,23 @@ def guiMain(args=None): countVar.set(str(args.count)) if args.seed: seedVar.set(str(args.seed)) - modeVar.set(args.mode) - swordVar.set(args.swords) - difficultyVar.set(args.difficulty) - itemfunctionVar.set(args.item_functionality) - timerVar.set(args.timer) - progressiveVar.set(args.progressive) - accessibilityVar.set(args.accessibility) - goalVar.set(args.goal) - crystalsGTVar.set(args.crystals_gt) - crystalsGanonVar.set(args.crystals_ganon) - algorithmVar.set(args.algorithm) + itemWindow.modeVar.set(args.mode) + itemWindow.swordVar.set(args.swords) + itemWindow.difficultyVar.set(args.difficulty) + itemWindow.itemfunctionVar.set(args.item_functionality) + itemWindow.timerVar.set(args.timer) + itemWindow.progressiveVar.set(args.progressive) + itemWindow.accessibilityVar.set(args.accessibility) + itemWindow.goalVar.set(args.goal) + itemWindow.crystalsGTVar.set(args.crystals_gt) + itemWindow.crystalsGanonVar.set(args.crystals_ganon) + itemWindow.algorithmVar.set(args.algorithm) shuffleVar.set(args.shuffle) doorShuffleVar.set(args.door_shuffle) heartcolorVar.set(args.heartcolor) heartbeepVar.set(args.heartbeep) fastMenuVar.set(args.fastmenu) - logicVar.set(args.logic) + itemWindow.logicVar.set(args.logic) romVar.set(args.rom) shuffleGanonVar.set(args.shuffleganon) hintsVar.set(args.hints) diff --git a/gui/randomize/item.py b/gui/randomize/item.py new file mode 100644 index 00000000..550c9544 --- /dev/null +++ b/gui/randomize/item.py @@ -0,0 +1,139 @@ +from tkinter import ttk, IntVar, StringVar, Checkbutton, Frame, Label, OptionMenu, E, W, LEFT, RIGHT + +def item_page(parent): + # Item Randomizer + self = ttk.Frame(parent) + + # Item Randomizer options + ## Retro (eventually needs to become a World State) + self.retroVar = IntVar() + retroCheckbutton = Checkbutton(self, text="Retro mode (universal keys)", variable=self.retroVar) + retroCheckbutton.pack(anchor=W) + + leftItemFrame = Frame(self) + rightItemFrame = Frame(self) + leftItemFrame.pack(side=LEFT) + rightItemFrame.pack(side=RIGHT) + + ## World State + modeFrame = Frame(leftItemFrame) + self.modeVar = StringVar() + self.modeVar.set('open') + modeOptionMenu = OptionMenu(modeFrame, self.modeVar, 'standard', 'open', 'inverted') + modeOptionMenu.pack(side=RIGHT) + modeLabel = Label(modeFrame, text='World State') + modeLabel.pack(side=LEFT) + modeFrame.pack(anchor=E) + + ## Logic Level + logicFrame = Frame(leftItemFrame) + self.logicVar = StringVar() + self.logicVar.set('noglitches') + logicOptionMenu = OptionMenu(logicFrame, self.logicVar, 'noglitches', 'minorglitches', 'nologic') + logicOptionMenu.pack(side=RIGHT) + logicLabel = Label(logicFrame, text='Game Logic') + logicLabel.pack(side=LEFT) + logicFrame.pack(anchor=E) + + ## Goal + goalFrame = Frame(leftItemFrame) + self.goalVar = StringVar() + self.goalVar.set('ganon') + goalOptionMenu = OptionMenu(goalFrame, self.goalVar, 'ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals') + goalOptionMenu.pack(side=RIGHT) + goalLabel = Label(goalFrame, text='Goal') + goalLabel.pack(side=LEFT) + goalFrame.pack(anchor=E) + + ## Number of crystals to open GT + crystalsGTFrame = Frame(leftItemFrame) + self.crystalsGTVar = StringVar() + self.crystalsGTVar.set('7') + crystalsGTOptionMenu = OptionMenu(crystalsGTFrame, self.crystalsGTVar, '0', '1', '2', '3', '4', '5', '6', '7', 'random') + crystalsGTOptionMenu.pack(side=RIGHT) + crystalsGTLabel = Label(crystalsGTFrame, text='Crystals to open Ganon\'s Tower') + crystalsGTLabel.pack(side=LEFT) + crystalsGTFrame.pack(anchor=E) + + ## Number of crystals to damage Ganon + crystalsGanonFrame = Frame(leftItemFrame) + self.crystalsGanonVar = StringVar() + self.crystalsGanonVar.set('7') + crystalsGanonOptionMenu = OptionMenu(crystalsGanonFrame, self.crystalsGanonVar, '0', '1', '2', '3', '4', '5', '6', '7', 'random') + crystalsGanonOptionMenu.pack(side=RIGHT) + crystalsGanonLabel = Label(crystalsGanonFrame, text='Crystals to fight Ganon') + crystalsGanonLabel.pack(side=LEFT) + crystalsGanonFrame.pack(anchor=E) + + ## Weapons + swordFrame = Frame(leftItemFrame) + self.swordVar = StringVar() + self.swordVar.set('random') + swordOptionMenu = OptionMenu(swordFrame, self.swordVar, 'random', 'assured', 'swordless', 'vanilla') + swordOptionMenu.pack(side=RIGHT) + swordLabel = Label(swordFrame, text='Sword availability') + swordLabel.pack(side=LEFT) + swordFrame.pack(anchor=E) + + ## Item Pool + difficultyFrame = Frame(rightItemFrame) + self.difficultyVar = StringVar() + self.difficultyVar.set('normal') + difficultyOptionMenu = OptionMenu(difficultyFrame, self.difficultyVar, 'normal', 'hard', 'expert') + difficultyOptionMenu.pack(side=RIGHT) + difficultyLabel = Label(difficultyFrame, text='Difficulty: item pool') + difficultyLabel.pack(side=LEFT) + difficultyFrame.pack(anchor=E) + + ## Item Functionality + itemfunctionFrame = Frame(rightItemFrame) + self.itemfunctionVar = StringVar() + self.itemfunctionVar.set('normal') + itemfunctionOptionMenu = OptionMenu(itemfunctionFrame, self.itemfunctionVar, 'normal', 'hard', 'expert') + itemfunctionOptionMenu.pack(side=RIGHT) + itemfunctionLabel = Label(itemfunctionFrame, text='Difficulty: item functionality') + itemfunctionLabel.pack(side=LEFT) + itemfunctionFrame.pack(anchor=E) + + ## Timer setting + timerFrame = Frame(rightItemFrame) + self.timerVar = StringVar() + self.timerVar.set('none') + timerOptionMenu = OptionMenu(timerFrame, self.timerVar, 'none', 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown') + timerOptionMenu.pack(side=RIGHT) + timerLabel = Label(timerFrame, text='Timer setting') + timerLabel.pack(side=LEFT) + timerFrame.pack(anchor=E) + + ## Progressives: On/Off + progressiveFrame = Frame(rightItemFrame) + self.progressiveVar = StringVar() + self.progressiveVar.set('on') + progressiveOptionMenu = OptionMenu(progressiveFrame, self.progressiveVar, 'on', 'off', 'random') + progressiveOptionMenu.pack(side=RIGHT) + progressiveLabel = Label(progressiveFrame, text='Progressive equipment') + progressiveLabel.pack(side=LEFT) + progressiveFrame.pack(anchor=E) + + ## Accessibilty + accessibilityFrame = Frame(rightItemFrame) + self.accessibilityVar = StringVar() + self.accessibilityVar.set('items') + accessibilityOptionMenu = OptionMenu(accessibilityFrame, self.accessibilityVar, 'items', 'locations', 'none') + accessibilityOptionMenu.pack(side=RIGHT) + accessibilityLabel = Label(accessibilityFrame, text='Item accessibility') + accessibilityLabel.pack(side=LEFT) + accessibilityFrame.pack(anchor=E) + accessibilityFrame.pack(anchor=E) + + ## Item Sorting Algorithm + algorithmFrame = Frame(rightItemFrame) + self.algorithmVar = StringVar() + self.algorithmVar.set('balanced') + algorithmOptionMenu = OptionMenu(algorithmFrame, self.algorithmVar, 'freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced') + algorithmOptionMenu.pack(side=RIGHT) + algorithmLabel = Label(algorithmFrame, text='Item distribution algorithm') + algorithmLabel.pack(side=LEFT) + algorithmFrame.pack(anchor=E) + + return self