sm64ex: Allow setting Big Star Door requirements (#773)

* sm64ex: Allow setting Big Star Door requirements

* sm64ex: Lower requirements for StarsToFinish
This commit is contained in:
Yussur Mustafa Oraji 2022-07-14 18:37:14 +02:00 committed by GitHub
parent e804f592de
commit e38308bac3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 8 deletions

View File

@ -13,9 +13,28 @@ 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 FirstBowserStarDoorCost(Range):
"""How many stars are required at the Star Door to Bowser in the Dark World"""
range_start = 0
range_end = 20
default = 8
class BasementStarDoorCost(Range):
"""How many stars are required at the Star Door in the Basement"""
range_start = 0
range_end = 50
default = 30
class SecondFloorStarDoorCost(Range):
"""How many stars are required to access the third floor"""
range_start = 0
range_end = 50
default = 50
class StarsToFinish(Range):
"""How many stars are required at the infinite stairs"""
range_start = 50
display_name = "Endless Stairs Stars"
range_start = 0
range_end = 100
default = 70
@ -43,6 +62,9 @@ sm64_options: typing.Dict[str,type(Option)] = {
"EnableCoinStars": EnableCoinStars,
"StrictCapRequirements": StrictCapRequirements,
"StrictCannonRequirements": StrictCannonRequirements,
"FirstBowserStarDoorCost": FirstBowserStarDoorCost,
"BasementStarDoorCost": BasementStarDoorCost,
"SecondFloorStarDoorCost": SecondFloorStarDoorCost,
"StarsToFinish": StarsToFinish,
"ExtraStars": ExtraStars,
"death_link": DeathLink,

View File

@ -12,7 +12,7 @@ def set_rules(world, player: int, area_connections):
connect_regions(world, player, "Menu", sm64courses[area_connections[1]], lambda state: state.has("Power Star", player, 1))
connect_regions(world, player, "Menu", sm64courses[area_connections[2]], lambda state: state.has("Power Star", player, 3))
connect_regions(world, player, "Menu", sm64courses[area_connections[3]], lambda state: state.has("Power Star", player, 3))
connect_regions(world, player, "Menu", "Bowser in the Dark World", lambda state: state.has("Power Star", player, 8))
connect_regions(world, player, "Menu", "Bowser in the Dark World", lambda state: state.has("Power Star", player, world.FirstBowserStarDoorCost[player].value))
connect_regions(world, player, "Menu", sm64courses[area_connections[4]], lambda state: state.has("Power Star", player, 12))
connect_regions(world, player, "Menu", "Basement", lambda state: state.has("Basement Key", player) or state.has("Progressive Key", player, 1))
@ -20,8 +20,8 @@ def set_rules(world, player: int, area_connections):
connect_regions(world, player, "Basement", sm64courses[area_connections[5]])
connect_regions(world, player, "Basement", sm64courses[area_connections[6]])
connect_regions(world, player, "Basement", sm64courses[area_connections[7]])
connect_regions(world, player, "Basement", sm64courses[area_connections[8]], lambda state: state.has("Power Star", player, 30))
connect_regions(world, player, "Basement", "Bowser in the Fire Sea", lambda state: state.has("Power Star", player, 30) and
connect_regions(world, player, "Basement", sm64courses[area_connections[8]], lambda state: state.has("Power Star", player, world.BasementStarDoorCost[player].value))
connect_regions(world, player, "Basement", "Bowser in the Fire Sea", lambda state: state.has("Power Star", player, world.BasementStarDoorCost[player].value) and
state.can_reach("DDD: Board Bowser's Sub", 'Location', player))
connect_regions(world, player, "Menu", "Second Floor", lambda state: state.has("Second Floor Key", player) or state.has("Progressive Key", player, 2))
@ -31,7 +31,7 @@ def set_rules(world, player: int, area_connections):
connect_regions(world, player, "Second Floor", sm64courses[area_connections[11]])
connect_regions(world, player, "Second Floor", sm64courses[area_connections[12]])
connect_regions(world, player, "Second Floor", "Third Floor", lambda state: state.has("Power Star", player, 50))
connect_regions(world, player, "Second Floor", "Third Floor", lambda state: state.has("Power Star", player, world.SecondFloorStarDoorCost[player].value))
connect_regions(world, player, "Third Floor", sm64courses[area_connections[13]])
connect_regions(world, player, "Third Floor", sm64courses[area_connections[14]])

View File

@ -9,9 +9,6 @@ from .Regions import create_regions, sm64courses
from BaseClasses import Item, Tutorial, ItemClassification
from ..AutoWorld import World, WebWorld
client_version = 1
class SM64Web(WebWorld):
tutorials = [Tutorial(
"Multiworld Setup Guide",
@ -38,6 +35,8 @@ class SM64World(World):
location_name_to_id = location_table
data_version = 6
client_version = 2
forced_auto_forfeit = False
area_connections: typing.Dict[int, int]
@ -115,6 +114,9 @@ class SM64World(World):
def fill_slot_data(self):
return {
"AreaRando": self.area_connections,
"FirstBowserDoorCost": self.world.FirstBowserStarDoorCost[self.player].value,
"BasementDoorCost": self.world.BasementStarDoorCost[self.player].value,
"SecondFloorCost": self.world.SecondFloorStarDoorCost[self.player].value,
"StarsToFinish": self.world.StarsToFinish[self.player].value,
"DeathLink": self.world.death_link[self.player].value,
}