diff --git a/worlds/sm64ex/Locations.py b/worlds/sm64ex/Locations.py index f33c4306..1995abf4 100644 --- a/worlds/sm64ex/Locations.py +++ b/worlds/sm64ex/Locations.py @@ -46,6 +46,9 @@ locCCM_table = { "CCM: Snowman's Lost His Head": 3626025, "CCM: Wall Kicks Will Work": 3626026, "CCM: Bob-omb Buddy": 3626203, + "CCM: 1Up Block Near Snowman": 3626215, + "CCM: 1Up Block Ice Pillar": 3626216, + "CCM: 1Up Block Secret Slide": 3626217 } #Big Boo's Haunt @@ -55,7 +58,8 @@ locBBH_table = { "BBH: Secret of the Haunted Books": 3626030, "BBH: Seek the 8 Red Coins": 3626031, "BBH: Big Boo's Balcony": 3626032, - "BBH: Eye to Eye in the Secret Room": 3626033 + "BBH: Eye to Eye in the Secret Room": 3626033, + "BBH: 1Up Block Top of Mansion": 3626218 } #Hazy Maze Cave @@ -65,7 +69,9 @@ locHMC_table = { "HMC: Metal-Head Mario Can Move!": 3626037, "HMC: Navigating the Toxic Maze": 3626038, "HMC: A-Maze-Ing Emergency Exit": 3626039, - "HMC: Watch for Rolling Rocks": 3626040 + "HMC: Watch for Rolling Rocks": 3626040, + "HMC: 1Up Block above Pit": 3626219, + "HMC: 1Up Block Past Rolling Rocks": 3626220, } #Lethal Lava Land @@ -87,6 +93,9 @@ locSSL_table = { "SSL: Free Flying for 8 Red Coins": 3626053, "SSL: Pyramid Puzzle": 3626054, "SSL: Bob-omb Buddy": 3626207, + "SSL: 1Up Block Outside Pyramid": 3626221, + "SSL: 1Up Block Pyramid Left Path": 3626222, + "SSL: 1Up Block Pyramid Back": 3626223 } #Dire, Dire Docks @@ -108,6 +117,8 @@ locSL_table = { "SL: Shell Shreddin' for Red Coins": 3626067, "SL: Into the Igloo": 3626068, "SL: Bob-omb Buddy": 3626209, + "SL: 1Up Block Near Moneybags": 3626224, + "SL: 1Up Block inside Igloo": 3626225 } #Wet-Dry World @@ -119,6 +130,7 @@ locWDW_table = { "WDW: Go to Town for Red Coins": 3626074, "WDW: Quick Race Through Downtown!": 3626075, "WDW: Bob-omb Buddy": 3626210, + "WDW: 1Up Block in Downtown": 3626226 } #Tall, Tall Mountain @@ -130,6 +142,7 @@ locTTM_table = { "TTM: Breathtaking View from Bridge": 3626081, "TTM: Blast to the Lonely Mushroom": 3626082, "TTM: Bob-omb Buddy": 3626211, + "TTM: 1Up Block on Red Mushroom": 3626227 } #Tiny-Huge Island @@ -141,6 +154,9 @@ locTHI_table = { "THI: Wiggler's Red Coins": 3626088, "THI: Make Wiggler Squirm": 3626089, "THI: Bob-omb Buddy": 3626212, + "THI: 1Up Block THI Small near Start": 3626228, + "THI: 1Up Block THI Large near Start": 3626229, + "THI: 1Up Block Windy Area": 3626230 } #Tick Tock Clock @@ -150,7 +166,9 @@ locTTC_table = { "TTC: Get a Hand": 3626093, "TTC: Stomp on the Thwomp": 3626094, "TTC: Timed Jumps on Moving Bars": 3626095, - "TTC: Stop Time for Red Coins": 3626096 + "TTC: Stop Time for Red Coins": 3626096, + "TTC: 1Up Block Midway Up": 3626231, + "TTC: 1Up Block at the Top": 3626232 } #Rainbow Ride @@ -162,6 +180,9 @@ locRR_table = { "RR: Tricky Triangles!": 3626102, "RR: Somewhere Over the Rainbow": 3626103, "RR: Bob-omb Buddy": 3626214, + "RR: 1Up Block Top of Red Coin Maze": 3626233, + "RR: 1Up Block Under Fly Guy": 3626234, + "RR: 1Up Block On House in the Sky": 3626235 } loc100Coin_table = { @@ -193,7 +214,9 @@ locSA_table = { locBitDW_table = { "Bowser in the Dark World Red Coins": 3626105, - "Bowser in the Dark World Key": 3626178 + "Bowser in the Dark World Key": 3626178, + "Bowser in the Dark World 1Up Block on Tower": 3626236, + "Bowser in the Dark World 1Up Block near Goombas": 3626237 } locTotWC_table = { @@ -203,25 +226,31 @@ locTotWC_table = { locCotMC_table = { "Cavern of the Metal Cap Switch": 3626182, - "Cavern of the Metal Cap Red Coins": 3626133 + "Cavern of the Metal Cap Red Coins": 3626133, + "Cavern of the Metal Cap 1Up Block": 3626241 } locVCutM_table = { "Vanish Cap Under the Moat Switch": 3626183, - "Vanish Cap Under the Moat Red Coins": 3626147 + "Vanish Cap Under the Moat Red Coins": 3626147, + "Vanish Cap Under the Moat 1Up Block": 3626242 } locBitFS_table = { "Bowser in the Fire Sea Red Coins": 3626112, - "Bowser in the Fire Sea Key": 3626179 + "Bowser in the Fire Sea Key": 3626179, + "Bowser in the Fire Sea 1Up Block Swaying Stairs": 3626238, + "Bowser in the Fire Sea 1Up Block Near Poles": 3626239 } locWMotR_table = { - "Wing Mario Over the Rainbow": 3626154 + "Wing Mario Over the Rainbow Red Coins": 3626154, + "Wing Mario Over the Rainbow 1Up Block": 3626242 } locBitS_table = { - "Bowser in the Sky Red Coins": 3626119 + "Bowser in the Sky Red Coins": 3626119, + "Bowser in the Sky 1Up Block": 3626240 } #Secret Stars found inside the Castle diff --git a/worlds/sm64ex/Options.py b/worlds/sm64ex/Options.py index 594b0561..7d9a75dd 100644 --- a/worlds/sm64ex/Options.py +++ b/worlds/sm64ex/Options.py @@ -68,6 +68,12 @@ class BuddyChecks(Toggle): """Bob-omb Buddies are checks, Cannon Unlocks are items""" display_name = "Bob-omb Buddy Checks" +class ExclamationBoxes(Choice): + """Include 1Up Exclamation Boxes during randomization""" + display_name = "Randomize 1Up !-Blocks" + option_Off = 0 + option_1Ups_Only = 1 + class ProgressiveKeys(DefaultOnToggle): """Keys will first grant you access to the Basement, then to the Secound Floor""" display_name = "Progressive Keys" @@ -87,4 +93,5 @@ sm64_options: typing.Dict[str,type(Option)] = { "StarsToFinish": StarsToFinish, "death_link": DeathLink, "BuddyChecks": BuddyChecks, + "ExclamationBoxes": ExclamationBoxes } \ No newline at end of file diff --git a/worlds/sm64ex/Rules.py b/worlds/sm64ex/Rules.py index a4a82b27..eae98685 100644 --- a/worlds/sm64ex/Rules.py +++ b/worlds/sm64ex/Rules.py @@ -109,7 +109,8 @@ def set_rules(world, player: int, area_connections): add_rule(world.get_location("BoB: 100 Coins", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) #Rules for Secret Stars - add_rule(world.get_location("Wing Mario Over the Rainbow", player), lambda state: state.has("Wing Cap", player)) + add_rule(world.get_location("Wing Mario Over the Rainbow Red Coins", player), lambda state: state.has("Wing Cap", player)) + add_rule(world.get_location("Wing Mario Over the Rainbow 1Up Block", player), lambda state: state.has("Wing Cap", player)) add_rule(world.get_location("Toad (Basement)", player), lambda state: state.can_reach("Basement", 'Region', player) and state.has("Power Star", player, 12)) add_rule(world.get_location("Toad (Second Floor)", player), lambda state: state.can_reach("Second Floor", 'Region', player) and state.has("Power Star", player, 25)) add_rule(world.get_location("Toad (Third Floor)", player), lambda state: state.can_reach("Third Floor", 'Region', player) and state.has("Power Star", player, 35)) diff --git a/worlds/sm64ex/__init__.py b/worlds/sm64ex/__init__.py index e0f911fb..447a09d4 100644 --- a/worlds/sm64ex/__init__.py +++ b/worlds/sm64ex/__init__.py @@ -34,7 +34,7 @@ class SM64World(World): item_name_to_id = item_table location_name_to_id = location_table - data_version = 6 + data_version = 7 required_client_version = (0, 3, 0) area_connections: typing.Dict[int, int] @@ -71,7 +71,6 @@ class SM64World(World): return item def generate_basic(self): - staritem = self.create_item("Power Star") starcount = self.world.AmountOfStars[self.player].value if (not self.world.EnableCoinStars[self.player].value): starcount = max(35,self.world.AmountOfStars[self.player].value-15) @@ -79,17 +78,15 @@ class SM64World(World): self.world.BasementStarDoorCost[self.player].value, self.world.SecondFloorStarDoorCost[self.player].value, self.world.MIPS1Cost[self.player].value, self.world.MIPS2Cost[self.player].value, self.world.StarsToFinish[self.player].value) - self.world.itempool += [staritem for i in range(0,starcount)] - mushroomitem = self.create_item("1Up Mushroom") - self.world.itempool += [mushroomitem for i in range(starcount,120 - (15 if not self.world.EnableCoinStars[self.player].value else 0))] + self.world.itempool += [self.create_item("Power Star") for i in range(0,starcount)] + self.world.itempool += [self.create_item("1Up Mushroom") for i in range(starcount,120 - (15 if not self.world.EnableCoinStars[self.player].value else 0))] if (not self.world.ProgressiveKeys[self.player].value): key1 = self.create_item("Basement Key") key2 = self.create_item("Second Floor Key") self.world.itempool += [key1,key2] else: - key = self.create_item("Progressive Key") - self.world.itempool += [key,key] + self.world.itempool += [self.create_item("Progressive Key") for i in range(0,2)] wingcap = self.create_item("Wing Cap") metalcap = self.create_item("Metal Cap") @@ -110,6 +107,39 @@ class SM64World(World): self.world.get_location("THI: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock THI")) self.world.get_location("RR: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock RR")) + if (self.world.ExclamationBoxes[self.player].value > 0): + self.world.itempool += [self.create_item("1Up Mushroom") for i in range(0,29)] + else: + self.world.get_location("CCM: 1Up Block Near Snowman", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("CCM: 1Up Block Ice Pillar", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("CCM: 1Up Block Secret Slide", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("BBH: 1Up Block Top of Mansion", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("HMC: 1Up Block above Pit", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("HMC: 1Up Block Past Rolling Rocks", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("SSL: 1Up Block Outside Pyramid", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("SSL: 1Up Block Pyramid Left Path", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("SSL: 1Up Block Pyramid Back", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("SL: 1Up Block Near Moneybags", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("SL: 1Up Block inside Igloo", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("WDW: 1Up Block in Downtown", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("TTM: 1Up Block on Red Mushroom", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("THI: 1Up Block THI Small near Start", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("THI: 1Up Block THI Large near Start", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("THI: 1Up Block Windy Area", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("TTC: 1Up Block Midway Up", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("TTC: 1Up Block at the Top", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("RR: 1Up Block Top of Red Coin Maze", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("RR: 1Up Block Under Fly Guy", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("RR: 1Up Block On House in the Sky", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Bowser in the Dark World 1Up Block on Tower", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Bowser in the Dark World 1Up Block near Goombas", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Cavern of the Metal Cap 1Up Block", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Vanish Cap Under the Moat 1Up Block", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Bowser in the Fire Sea 1Up Block Swaying Stairs", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Bowser in the Fire Sea 1Up Block Near Poles", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Wing Mario Over the Rainbow 1Up Block", self.player).place_locked_item(self.create_item("1Up Mushroom")) + self.world.get_location("Bowser in the Sky 1Up Block", self.player).place_locked_item(self.create_item("1Up Mushroom")) + def get_filler_item_name(self) -> str: return "1Up Mushroom"