diff --git a/BaseClasses.py b/BaseClasses.py index a08b0cbe..77183be4 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1410,6 +1410,13 @@ class Spoiler(object): bool_to_text("p" in self.metadata["shop_shuffle"][player])) outfile.write('Shop upgrade shuffle: %s\n' % bool_to_text("u" in self.metadata["shop_shuffle"][player])) + outfile.write('New Shop inventory: %s\n' % + bool_to_text("g" in self.metadata["shop_shuffle"][player] or + "f" in self.metadata["shop_shuffle"][player])) + outfile.write('Custom Potion Shop: %s\n' % + bool_to_text("w" in self.metadata["shop_shuffle"][player])) + outfile.write('Shop Slots: %s\n' % + self.metadata["shop_shuffle_slots"][player]) outfile.write('Boss shuffle: %s\n' % self.metadata['boss_shuffle'][player]) outfile.write( 'Enemy shuffle: %s\n' % bool_to_text(self.metadata['enemy_shuffle'][player])) diff --git a/Gui.py b/Gui.py index 514bae56..09ee34a5 100755 --- a/Gui.py +++ b/Gui.py @@ -488,6 +488,18 @@ def guiMain(args=None): shopUpgradeShuffleButton = Checkbutton(shopframe, text="Lootable Upgrades", variable=shopUpgradeShuffleVar) shopUpgradeShuffleButton.grid(row=0, column=2, sticky=W) + shopInventoryShuffleVar = IntVar() + shopInventoryShuffleButton = Checkbutton(shopframe, text="New Inventories", variable=shopInventoryShuffleVar) + shopInventoryShuffleButton.grid(row=1, column=0, sticky=W) + + shopPoolShuffleVar = IntVar() + shopPoolShuffleButton = Checkbutton(shopframe, text="Itempool in Shops", variable=shopPoolShuffleVar) + shopPoolShuffleButton.grid(row=1, column=1, sticky=W) + + shopWitchShuffleVar = IntVar() + shopWitchShuffleButton = Checkbutton(shopframe, text="Custom Potion Shop", variable=shopWitchShuffleVar) + shopWitchShuffleButton.grid(row=1, column=2, sticky=W) + multiworldframe = LabelFrame(randomizerWindow, text="Multiworld", padx=5, pady=2) worldLabel = Label(multiworldframe, text='Players per Team') @@ -586,6 +598,12 @@ def guiMain(args=None): guiargs.shop_shuffle += "p" if shopUpgradeShuffleVar.get(): guiargs.shop_shuffle += "u" + if shopInventoryShuffleVar.get(): + guiargs.shop_shuffle += "f" + if shopWitchShuffleVar.get(): + guiargs.shop_shuffle += "w" + if shopPoolShuffleVar.get(): + guiargs.shop_shuffle_slots = 30 guiargs.shuffle_prizes = {"none": "", "bonk": "b", "general": "g", diff --git a/Utils.py b/Utils.py index 5741a3a2..11f86fbb 100644 --- a/Utils.py +++ b/Utils.py @@ -13,7 +13,7 @@ class Version(typing.NamedTuple): micro: int -__version__ = "3.6.1" +__version__ = "4.0.0" _version_tuple = tuplize_version(__version__) import os diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index ca9ae329..d57fb589 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -477,23 +477,9 @@ "name": "None", "value": "none" }, - "g": { - "keyString": "shop_shuffle.g", - "friendlyName": "Inventory Generate", - "description": "Generates new default base inventories of overworld and underworld shops.", - "defaultValue": 0 - }, - "f": { - "keyString": "shop_shuffle.f", - "friendlyName": "Full Inventory Generate", - "description": "Generates new base inventories of each individual shop.", - "defaultValue": 0 - }, - "i": { - "keyString": "shop_shuffle.i", - "friendlyName": "Inventory Shuffle", - "description": "Shuffles the inventories of shops between each other.", - "defaultValue": 0 + { + "name": "Inventory", + "value": "i" }, { "name": "Prices", @@ -507,269 +493,9 @@ "name": "Inventory and Prices", "value": "ip" }, - "uip": { - "keyString": "shop_shuffle.uip", - "friendlyName": "Full Shuffle", - "description": "Shuffles the inventory and randomizes the prices of items in shops. Also distributes capacity upgrades throughout the world.", - "defaultValue": 0 - } - } - }, - "shop_shuffle_slots": { - "keyString": "shop_shuffle_slots", - "friendlyName": "Shop Shuffle Slots", - "description": "How Many Slots in Shops are dedicated to items from the item pool", - "inputType": "range", - "subOptions": { - "0": { - "keyString": "shop_shuffle_slots.0", - "friendlyName": 0, - "description": "0 slots", - "defaultValue": 50 - }, - "15": { - "keyString": "shop_shuffle_slots.3", - "friendlyName": 3, - "description": "3 slots", - "defaultValue": 0 - }, - "20": { - "keyString": "shop_shuffle_slots.6", - "friendlyName": 6, - "description": "6 slots", - "defaultValue": 0 - }, - "30": { - "keyString": "shop_shuffle_slots.12", - "friendlyName": 12, - "description": "12 slots", - "defaultValue": 0 - }, - "40": { - "keyString": "shop_shuffle_slots.96", - "friendlyName": 96, - "description": "96 slots", - "defaultValue": 0 - } - } - }, - "potion_shop_shuffle": { - "keyString": "potion_shop_shuffle", - "friendlyName": "Potion Shop Shuffle Rules", - "description": "Influence on potion shop by shop shuffle options", - "inputType": "range", - "subOptions": { - "none": { - "keyString": "potion_shop_shuffle.none", - "friendlyName": "Vanilla Shops", - "description": "Shop contents are left unchanged, only prices.", - "defaultValue": 50 - }, - "a": { - "keyString": "potion_shop_shuffle.a", - "friendlyName": "Any Items can be shuffled in and out of the shop", - "description": "", - "defaultValue": 0 - } - } - }, - "shuffle_prizes": { - "keyString": "shuffle_prizes", - "friendlyName": "Prize Shuffle", - "description": "Alters the Prizes from pulling, bonking, enemy kills, digging, and hoarders", - "inputType": "range", - "subOptions": { - "none": { - "keyString": "shuffle_prizes.none", - "friendlyName": "None", - "description": "All prizes from pulling, bonking, enemy kills, digging, hoarders are vanilla.", - "defaultValue": 0 - }, - "g": { - "keyString": "shuffle_prizes.g", - "friendlyName": "\"General\" prize shuffle", - "description": "Shuffles the prizes from pulling, enemy kills, digging, hoarders", - "defaultValue": 50 - }, - "b": { - "keyString": "shuffle_prizes.b", - "friendlyName": "Bonk prize shuffle", - "description": "Shuffles the prizes from bonking into trees.", - "defaultValue": 0 - }, - "bg": { - "keyString": "shuffle_prizes.bg", - "friendlyName": "Both", - "description": "Shuffles both of the options.", - "defaultValue": 0 - } - } - }, - "timer": { - "keyString": "timer", - "friendlyName": "Timed Modes", - "description": "Add a timer to the game UI, and cause it to have various effects.", - "inputType": "range", - "subOptions": { - "none": { - "keyString": "timer.none", - "friendlyName": "Disabled", - "description": "No timed mode is applied to the game.", - "defaultValue": 50 - }, - "timed": { - "keyString": "timer.timed", - "friendlyName": "Timed Mode", - "description": "Starts with clock at zero. Green clocks subtract 4 minutes (total 20). Blue clocks subtract 2 minutes (total 10). Red clocks add two minutes (total 10). Winner is the player with the lowest time at the end.", - "defaultValue": 0 - }, - "timed_ohko": { - "keyString": "timer.timed_ohko", - "friendlyName": "Timed OHKO", - "description": "Starts the clock at ten minutes. Green clocks add five minutes (total 25). As long as the clock as at zero, Link will die in one hit.", - "defaultValue": 0 - }, - "ohko": { - "keyString": "timer.ohko", - "friendlyName": "One-Hit KO", - "description": "Timer always at zero. Permanent OHKO.", - "defaultValue": 0 - }, - "timed_countdown": { - "keyString": "timer.timed_countdown", - "friendlyName": "Timed Countdown", - "description": "Starts the clock with forty minutes. Same clocks as timed mode, but if the clock hits zero you lose. You can still keep playing, though.", - "defaultValue": 0 - }, - "display": { - "keyString": "timer.display", - "friendlyName": "Timer Only", - "description": "Displays a timer, but otherwise does not affect gameplay or the item pool.", - "defaultValue": 0 - } - } - }, - "countdown_start_time": { - "keyString": "countdown_start_time", - "friendlyName": "Countdown Starting Time", - "description": "The amount of time, in minutes, to start with in Timed Countdown and Timed OHKO modes.", - "inputType": "range", - "subOptions": { - "0": { - "keyString": "countdown_start_time.0", - "friendlyName": 0, - "description": "Start with no time on the timer. In Timed OHKO mode, start in OHKO mode.", - "defaultValue": 0 - }, - "10": { - "keyString": "countdown_start_time.10", - "friendlyName": 10, - "description": "Start with 10 minutes on the timer.", - "defaultValue": 50 - }, - "20": { - "keyString": "countdown_start_time.20", - "friendlyName": 20, - "description": "Start with 20 minutes on the timer.", - "defaultValue": 0 - }, - "30": { - "keyString": "countdown_start_time.30", - "friendlyName": 30, - "description": "Start with 30 minutes on the timer.", - "defaultValue": 0 - }, - "60": { - "keyString": "countdown_start_time.60", - "friendlyName": 60, - "description": "Start with an hour on the timer.", - "defaultValue": 0 - } - } - }, - "red_clock_time": { - "keyString": "red_clock_time", - "friendlyName": "Red Clock Time", - "description": "The amount of time, in minutes, to add to or subtract from the timer upon picking up a red clock.", - "inputType": "range", - "subOptions": { - "-2": { - "keyString": "red_clock_time.-2", - "friendlyName": -2, - "description": "Subtract 2 minutes from the timer upon picking up a red clock.", - "defaultValue": 0 - }, - "1": { - "keyString": "red_clock_time.1", - "friendlyName": 1, - "description": "Add a minute to the timer upon picking up a red clock.", - "defaultValue": 50 - } - } - }, - "blue_clock_time": { - "keyString": "blue_clock_time", - "friendlyName": "Blue Clock Time", - "description": "The amount of time, in minutes, to add to or subtract from the timer upon picking up a blue clock.", - "inputType": "range", - "subOptions": { - "1": { - "keyString": "blue_clock_time.1", - "friendlyName": 1, - "description": "Add a minute to the timer upon picking up a blue clock.", - "defaultValue": 0 - }, - "2": { - "keyString": "blue_clock_time.2", - "friendlyName": 2, - "description": "Add 2 minutes to the timer upon picking up a blue clock.", - "defaultValue": 50 - } - } - }, - "green_clock_time": { - "keyString": "green_clock_time", - "friendlyName": "Green Clock Time", - "description": "The amount of time, in minutes, to add to or subtract from the timer upon picking up a green clock.", - "inputType": "range", - "subOptions": { - "4": { - "keyString": "green_clock_time.4", - "friendlyName": 4, - "description": "Add 4 minutes to the timer upon picking up a green clock.", - "defaultValue": 50 - }, - "10": { - "keyString": "green_clock_time.10", - "friendlyName": 10, - "description": "Add 10 minutes to the timer upon picking up a green clock.", - "defaultValue": 0 - }, - "15": { - "keyString": "green_clock_time.15", - "friendlyName": 15, - "description": "Add 15 minutes to the timer upon picking up a green clock.", - "defaultValue": 0 - } - } - }, - "glitch_boots": { - "keyString": "glitch_boots", - "friendlyName": "Glitch Boots", - "description": "Start with Pegasus Boots in any glitched logic mode that makes use of them.", - "inputType": "range", - "subOptions": { - "on": { - "keyString": "glitch_boots.on", - "friendlyName": "On", - "description": "Enable glitch boots.", - "defaultValue": 50 - }, - "off": { - "keyString": "glitch_boots.off", - "friendlyName": "Off", - "description": "Disable glitch boots.", - "defaultValue": 0 + { + "name": "Inventory, Prices, and Upgrades", + "value": "ipu" } ] } diff --git a/WebHostLib/static/static/weightedSettings.json b/WebHostLib/static/static/weightedSettings.json index 0984d39e..e515ea0f 100644 --- a/WebHostLib/static/static/weightedSettings.json +++ b/WebHostLib/static/static/weightedSettings.json @@ -1124,6 +1124,38 @@ } } }, + "shop_shuffle_slots": { + "keyString": "shop_shuffle_slots", + "friendlyName": "Shop Itempool Slots", + "description": "Move items from the general Itempool into shops for purchase.", + "inputType": "range", + "subOptions": { + "0": { + "keyString": "shop_shuffle_slots.0", + "friendlyName": "Off", + "description": "No items are moved", + "defaultValue": 50 + }, + "1": { + "keyString": "shop_shuffle_slots.10", + "friendlyName": "Level 1", + "description": "10 Items are moved into shops.", + "defaultValue": 0 + }, + "2": { + "keyString": "shop_shuffle_slots.20", + "friendlyName": "Level 2", + "description": "20 Items are moved into shops.", + "defaultValue": 0 + }, + "3": { + "keyString": "shop_shuffle_slots.30", + "friendlyName": "Level 3", + "description": "30 Items are moved into shops.", + "defaultValue": 0 + } + } + }, "shuffle_prizes": { "keyString": "shuffle_prizes", "friendlyName": "Prize Shuffle", diff --git a/WebHostLib/static/static/weightedSettings.yaml b/WebHostLib/static/static/weightedSettings.yaml index b6e7747f..ee42d806 100644 --- a/WebHostLib/static/static/weightedSettings.yaml +++ b/WebHostLib/static/static/weightedSettings.yaml @@ -107,7 +107,7 @@ triforce_pieces_extra: # Set to how many extra triforces pieces are available to 10: 50 15: 0 20: 0 -triforce_pieces_percentage: # Set to how many extra triforces pieces according to a percentage of the required ones, are available to collect in the world. +triforce_pieces_percentage: # Set to how many triforce pieces according to a percentage of the required ones, are available to collect in the world. # Format "pieces: chance" 100: 0 #No extra 150: 50 #Half the required will be added as extra @@ -173,6 +173,9 @@ item_functionality: progression_balancing: on: 50 # A system to reduce BK, as in times during which you can't do anything by moving your items into an earlier access sphere to make it likely you have stuff to do off: 0 # Turn this off if you don't mind a longer multiworld, or can glitch around missing items. +tile_shuffle: # Randomize the tile layouts in flying tile rooms + on: 0 + off: 50 ### Enemizer Section ### boss_shuffle: none: 50 # Vanilla bosses @@ -186,9 +189,6 @@ enemy_shuffle: # Randomize enemy placement killable_thieves: # Make thieves killable on: 0 # Usually turned on together with enemy_shuffle to make annoying thief placement more manageable off: 50 -tile_shuffle: # Randomize the tile layouts in flying tile rooms - on: 0 - off: 50 bush_shuffle: # Randomize the chance that bushes have enemies and the enemies under said bush on: 0 off: 50 @@ -211,14 +211,25 @@ beemizer: # Remove items from the global item pool and replace them with single 2: 0 # 60% of the non-essential item pool is replaced with bee traps, of which 20% could be single bees 3: 0 # 100% of the non-essential item pool is replaced with bee traps, of which 50% could be single bees 4: 0 # 100% of the non-essential item pool is replaced with bee traps +### Shop Settings ### +shop_shuffle_slots: # Maximum amount of shop slots to be filled with regular item pool items (such as Moon Pearl) + 0: 50 + 5: 0 + 15: 0 + 30: 0 shop_shuffle: none: 50 - i: 0 # Shuffle the inventories of the shops around + g: 0 # Generate new default inventories for overworld/underworld shops, and unique shops + f: 0 # Generate new default inventories for every shop independently + i: 0 # Shuffle default inventories of the shops around p: 0 # Randomize the prices of the items in shop inventories u: 0 # Shuffle capacity upgrades into the item pool (and allow them to traverse the multiworld) + w: 0 # Consider witch's hut like any other shop and shuffle/randomize it too ip: 0 # Shuffle inventories and randomize prices + fpu: 0 # Generate new inventories, randomize prices and shuffle capacity upgrades into item pool uip: 0 # Shuffle inventories, randomize prices and shuffle capacity upgrades into the item pool # You can add more combos +### End of Shop Section ### shuffle_prizes: # aka drops none: 0 # do not shuffle prize packs g: 50 # shuffle "general" price packs, as in enemy, tree pull, dig etc. @@ -295,6 +306,7 @@ linked_options: hard: 1 expert: 1 percentage: 0 # Set this to the percentage chance you want enemizer +### door rando only options ### door_shuffle: # Only available if the host uses the doors branch, it is ignored otherwise vanilla: 50 # Everything should be like in vanilla basic: 0 # Dungeons are shuffled within themselves @@ -308,32 +320,39 @@ key_drop_shuffle: # Only available if the host uses the doors branch, it is igno on: 0 # Enables the small keys dropped by enemies or under pots, and the big key dropped by the Ball & Chain guard to be shuffled into the pool. This extends the number of checks to 249. off: 50 experimental: # Only available if the host uses the doors branch, it is ignored otherwise - on: 0 # Enables experimental features. Currently, this is just the dungeon keys in chest counter. + on: 0 # Enables experimental features. off: 50 debug: # Only available if the host uses the doors branch, it is ignored otherwise on: 0 # Enables debugging features. Currently, these are the Item collection counter. (overwrites total triforce pieces) and Castle Gate closed indicator. off: 50 +### end of door rando only options ### rom: random_sprite_on_event: # An alternative to specifying randomonhit / randomonexit / etc... in sprite down below. - enabled: # If enabled, sprite down below is ignored completely, (although it may become the sprite pool) + enabled: # If enabled, sprite down below is ignored completely, (although it may become the sprite pool) on: 0 off: 1 - on_hit: # Random sprite on hit. Being hit by things that cause 0 damage still counts. + on_hit: # Random sprite on hit. Being hit by things that cause 0 damage still counts. + on: 1 + off: 0 + on_enter: # Random sprite on underworld entry. Note that entering hobo counts. on: 0 off: 1 - on_enter: # Random sprite on underworld entry. Note that entering hobo counts. + on_exit: # Random sprite on underworld exit. Exiting hobo does not count. on: 0 off: 1 - on_exit: # Random sprite on underworld exit. Exiting hobo does not count. + on_slash: # Random sprite on sword slash. Note, it still counts if you attempt to slash while swordless. on: 0 off: 1 - on_slash: # Random sprite on sword slash. Note, it still counts if you attempt to slash while swordless. + on_item: # Random sprite on getting an item. Anything that causes you to hold an item above your head counts. on: 0 off: 1 - on_item: # Random sprite on getting an item. Anything that causes you to hold an item above your head counts. + on_bonk: # Random sprite on bonk. on: 0 off: 1 - on_bonk: # Random sprite on bonk. + on_everything: # Random sprite on ALL currently implemented events, even if not documented at present time. + on: 0 + off: 1 + use_weighted_sprite_pool: # Always on if no sprite_pool exists, otherwise it controls whether to use sprite as a weighted sprite pool on: 0 off: 1 #sprite_pool: # When specified, limits the pool of sprites used for randomon-event to the specified pool. Uncomment to use this. @@ -342,7 +361,15 @@ rom: # - penguin link # - random # You can specify random multiple times for however many potentially unique random sprites you want in your pool. sprite: # Enter the name of your preferred sprite and weight it appropriately - random: 0 # Choose a sprite at random + random: 0 + randomonhit: 0 # Random sprite on hit + randomonenter: 0 # Random sprite on entering the underworld. + randomonexit: 0 # Random sprite on exiting the underworld. + randomonslash: 0 # Random sprite on sword slashes + randomonitem: 0 # Random sprite on getting items. + randomonbonk: 0 # Random sprite on bonk. + # You can combine these events like this. randomonhit-enter-exit if you want it on hit, enter, exit. + randomonall: 0 # Random sprite on any and all currently supported events. Refer to above for the supported events. Link: 50 # To add other sprites: open the gui/Creator, go to adjust, select a sprite and write down the name the gui calls it disablemusic: # If "on", all in-game music will be disabled on: 0 @@ -371,8 +398,8 @@ rom: off: 0 ow_palettes: # Change the colors of the overworld default: 50 # No changes - random: 0 # Shuffle the colors - blackout: 0 # Never use this + random: 0 # Shuffle the colors, with harmony in mind + blackout: 0 # everything black / blind mode grayscale: 0 negative: 0 classic: 0 @@ -381,8 +408,8 @@ rom: puke: 0 uw_palettes: # Change the colors of caves and dungeons default: 50 # No changes - random: 0 # Shuffle the colors - blackout: 0 # Never use this + random: 0 # Shuffle the colors, with harmony in mind + blackout: 0 # everything black / blind mode grayscale: 0 negative: 0 classic: 0 @@ -391,8 +418,8 @@ rom: puke: 0 hud_palettes: # Change the colors of the hud default: 50 # No changes - random: 0 # Shuffle the colors - blackout: 0 # Never use this + random: 0 # Shuffle the colors, with harmony in mind + blackout: 0 # everything black / blind mode grayscale: 0 negative: 0 classic: 0 @@ -401,11 +428,21 @@ rom: puke: 0 sword_palettes: # Change the colors of swords default: 50 # No changes - random: 0 # Shuffle the colors - blackout: 0 # Never use this + random: 0 # Shuffle the colors, with harmony in mind + blackout: 0 # everything black / blind mode grayscale: 0 negative: 0 classic: 0 dizzy: 0 sick: 0 puke: 0 + shield_palettes: # Change the colors of shields + default: 50 # No changes + random: 0 # Shuffle the colors, with harmony in mind + blackout: 0 # everything black / blind mode + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 \ No newline at end of file