sm64ex: Add option for Bob-omb Buddy Checks

This commit is contained in:
N00byKing 2022-02-15 19:56:10 +01:00 committed by Fabian Dill
parent 219bd9c10e
commit 311fb04647
5 changed files with 68 additions and 14 deletions

View File

@ -3,7 +3,7 @@ from BaseClasses import Item
class SM64Item(Item):
game: str = "Super Mario 64"
item_table = {
generic_item_table = {
"Power Star": 3626000,
"Basement Key": 3626178,
"Second Floor Key": 3626179,
@ -13,3 +13,18 @@ item_table = {
"Vanish Cap": 3626183,
"1Up Mushroom": 3626184
}
cannon_item_table = {
"Cannon Unlock BoB": 3626200,
"Cannon Unlock WF": 3626201,
"Cannon Unlock JRB": 3626202,
"Cannon Unlock CCM": 3626203,
"Cannon Unlock SSL": 3626207,
"Cannon Unlock SL": 3626209,
"Cannon Unlock WDW": 3626210,
"Cannon Unlock TTM": 3626211,
"Cannon Unlock THI": 3626212,
"Cannon Unlock RR": 3626214
}
item_table = {**generic_item_table, **cannon_item_table}

View File

@ -10,7 +10,8 @@ locBoB_table = {
"BoB: Shoot to the Island in the Sky": 3626002,
"BoB: Find the 8 Red Coins": 3626003,
"BoB: Mario Wings to the Sky": 3626004,
"BoB: Behind Chain Chomp's Gate": 3626005
"BoB: Behind Chain Chomp's Gate": 3626005,
"BoB: Bob-omb Buddy": 3626200,
}
#Whomp's Fortress
@ -20,7 +21,8 @@ locWhomp_table = {
"WF: Shoot into the Wild Blue": 3626009,
"WF: Red Coins on the Floating Isle": 3626010,
"WF: Fall onto the Caged Island": 3626011,
"WF: Blast Away the Wall": 3626012
"WF: Blast Away the Wall": 3626012,
"WF: Bob-omb Buddy": 3626201,
}
#Jolly Roger Bay
@ -30,7 +32,8 @@ locJRB_table = {
"JRB: Treasure of the Ocean Cave": 3626016,
"JRB: Red Coins on the Ship Afloat": 3626017,
"JRB: Blast to the Stone Pillar": 3626018,
"JRB: Through the Jet Stream": 3626019
"JRB: Through the Jet Stream": 3626019,
"JRB: Bob-omb Buddy": 3626202,
}
@ -41,7 +44,8 @@ locCCM_table = {
"CCM: Big Penguin Race": 3626023,
"CCM: Frosty Slide for 8 Red Coins": 3626024,
"CCM: Snowman's Lost His Head": 3626025,
"CCM: Wall Kicks Will Work": 3626026
"CCM: Wall Kicks Will Work": 3626026,
"CCM: Bob-omb Buddy": 3626203,
}
#Big Boo's Haunt
@ -81,7 +85,8 @@ locSSL_table = {
"SSL: Inside the Ancient Pyramid": 3626051,
"SSL: Stand Tall on the Four Pillars": 3626052,
"SSL: Free Flying for 8 Red Coins": 3626053,
"SSL: Pyramid Puzzle": 3626054
"SSL: Pyramid Puzzle": 3626054,
"SSL: Bob-omb Buddy": 3626207,
}
#Dire, Dire Docks
@ -101,7 +106,8 @@ locSL_table = {
"SL: In the Deep Freeze": 3626065,
"SL: Whirl from the Freezing Pond": 3626066,
"SL: Shell Shreddin' for Red Coins": 3626067,
"SL: Into the Igloo": 3626068
"SL: Into the Igloo": 3626068,
"SL: Bob-omb Buddy": 3626209,
}
#Wet-Dry World
@ -111,7 +117,8 @@ locWDW_table = {
"WDW: Secrets in the Shallows & Sky": 3626072,
"WDW: Express Elevator--Hurry Up!": 3626073,
"WDW: Go to Town for Red Coins": 3626074,
"WDW: Quick Race Through Downtown!": 3626075
"WDW: Quick Race Through Downtown!": 3626075,
"WDW: Bob-omb Buddy": 3626210,
}
#Tall, Tall Mountain
@ -121,7 +128,8 @@ locTTM_table = {
"TTM: Scary 'Shrooms, Red Coins": 3626079,
"TTM: Mysterious Mountainside": 3626080,
"TTM: Breathtaking View from Bridge": 3626081,
"TTM: Blast to the Lonely Mushroom": 3626082
"TTM: Blast to the Lonely Mushroom": 3626082,
"TTM: Bob-omb Buddy": 3626211,
}
#Tiny-Huge Island
@ -131,7 +139,8 @@ locTHI_table = {
"THI: Rematch with Koopa the Quick": 3626086,
"THI: Five Itty Bitty Secrets": 3626087,
"THI: Wiggler's Red Coins": 3626088,
"THI: Make Wiggler Squirm": 3626089
"THI: Make Wiggler Squirm": 3626089,
"THI: Bob-omb Buddy": 3626212,
}
#Tick Tock Clock
@ -151,7 +160,8 @@ locRR_table = {
"RR: Coins Amassed in a Maze": 3626100,
"RR: Swingin' in the Breeze": 3626101,
"RR: Tricky Triangles!": 3626102,
"RR: Somewhere Over the Rainbow": 3626103
"RR: Somewhere Over the Rainbow": 3626103,
"RR: Bob-omb Buddy": 3626214,
}
loc100Coin_table = {

View File

@ -9,6 +9,10 @@ class StrictCapRequirements(DefaultOnToggle):
"""If disabled, Stars that expect special caps may have to be acquired without the caps"""
display_name = "Strict Cap Requirements"
class StrictCannonRequirements(DefaultOnToggle):
"""If disabled, Stars that expect cannons may have to be acquired without them. Only makes a difference if Buddy Checks are enabled"""
display_name = "Strict Cannon Requirements"
class StarsToFinish(Range):
"""How many stars are required at the infinite stairs"""
range_start = 50
@ -25,6 +29,10 @@ class AreaRandomizer(Toggle):
"""Randomize Entrances to Courses"""
display_name = "Course Randomizer"
class BuddyChecks(Toggle):
"""Bob-omb Buddies are checks, Cannon Unlocks are items"""
display_name = "Bob-omb Buddy Checks"
class ProgressiveKeys(DefaultOnToggle):
"""Keys will first grant you access to the Basement, then to the Secound Floor"""
display_name = "Progressive Keys"
@ -34,7 +42,9 @@ sm64_options: typing.Dict[str,type(Option)] = {
"ProgressiveKeys": ProgressiveKeys,
"EnableCoinStars": EnableCoinStars,
"StrictCapRequirements": StrictCapRequirements,
"StrictCannonRequirements": StrictCannonRequirements,
"StarsToFinish": StarsToFinish,
"ExtraStars": ExtraStars,
"DeathLink": DeathLink,
"BuddyChecks": BuddyChecks,
}

View File

@ -54,6 +54,11 @@ def set_rules(world,player,area_connections):
add_rule(world.get_location("SSL: Free Flying for 8 Red Coins", player), lambda state: state.has("Wing Cap", player))
add_rule(world.get_location("DDD: Through the Jet Stream", player), lambda state: state.has("Metal Cap", player))
add_rule(world.get_location("Vanish Cap Under the Moat Red Coins", player), lambda state: state.has("Vanish Cap", player))
if (world.StrictCannonRequirements[player].value):
add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Cannon Unlock BoB", player))
add_rule(world.get_location("WF: Blast Away the Wall", player), lambda state: state.has("Cannon Unlock WF", player))
add_rule(world.get_location("JRB: Blast to the Stone Pillar", player), lambda state: state.has("Cannon Unlock JRB", player))
add_rule(world.get_location("RR: Somewhere Over the Rainbow", player), lambda state: state.has("Cannon Unlock RR", player))
#Rules for Secret Stars
add_rule(world.get_location("Bowser in the Sky Red Coins", player), lambda state: state.can_reach("Third Floor",'Region',player) and state.has("Power Star", player, world.StarsToFinish[player].value))

View File

@ -1,5 +1,5 @@
import typing
from .Items import item_table, SM64Item
from .Items import item_table, cannon_item_table, SM64Item
from .Locations import location_table, SM64Location
from .Options import sm64_options
from .Rules import set_rules
@ -21,7 +21,7 @@ class SM64World(World):
item_name_to_id = item_table
location_name_to_id = location_table
data_version = 5
data_version = 6
forced_auto_forfeit = False
area_connections: typing.Dict[int, int]
@ -65,6 +65,20 @@ class SM64World(World):
vanishcap = self.create_item("Vanish Cap")
self.world.itempool += [wingcap,metalcap,vanishcap]
if (self.world.BuddyChecks[self.player].value):
self.world.itempool += [self.create_item(name) for name, id in cannon_item_table.items()]
else:
self.world.get_location("BoB: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock BoB"))
self.world.get_location("WF: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock WF"))
self.world.get_location("JRB: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock JRB"))
self.world.get_location("CCM: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock CCM"))
self.world.get_location("SSL: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock SSL"))
self.world.get_location("SL: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock SL"))
self.world.get_location("WDW: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock WDW"))
self.world.get_location("TTM: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock TTM"))
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"))
def fill_slot_data(self):
return {
"AreaRando": self.area_connections,