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:
parent
e804f592de
commit
e38308bac3
|
@ -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"""
|
"""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"
|
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):
|
class StarsToFinish(Range):
|
||||||
"""How many stars are required at the infinite stairs"""
|
"""How many stars are required at the infinite stairs"""
|
||||||
range_start = 50
|
display_name = "Endless Stairs Stars"
|
||||||
|
range_start = 0
|
||||||
range_end = 100
|
range_end = 100
|
||||||
default = 70
|
default = 70
|
||||||
|
|
||||||
|
@ -43,6 +62,9 @@ sm64_options: typing.Dict[str,type(Option)] = {
|
||||||
"EnableCoinStars": EnableCoinStars,
|
"EnableCoinStars": EnableCoinStars,
|
||||||
"StrictCapRequirements": StrictCapRequirements,
|
"StrictCapRequirements": StrictCapRequirements,
|
||||||
"StrictCannonRequirements": StrictCannonRequirements,
|
"StrictCannonRequirements": StrictCannonRequirements,
|
||||||
|
"FirstBowserStarDoorCost": FirstBowserStarDoorCost,
|
||||||
|
"BasementStarDoorCost": BasementStarDoorCost,
|
||||||
|
"SecondFloorStarDoorCost": SecondFloorStarDoorCost,
|
||||||
"StarsToFinish": StarsToFinish,
|
"StarsToFinish": StarsToFinish,
|
||||||
"ExtraStars": ExtraStars,
|
"ExtraStars": ExtraStars,
|
||||||
"death_link": DeathLink,
|
"death_link": DeathLink,
|
||||||
|
|
|
@ -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[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[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", 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", 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))
|
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[5]])
|
||||||
connect_regions(world, player, "Basement", sm64courses[area_connections[6]])
|
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[7]])
|
||||||
connect_regions(world, player, "Basement", sm64courses[area_connections[8]], lambda state: state.has("Power Star", player, 30))
|
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, 30) and
|
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))
|
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))
|
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[11]])
|
||||||
connect_regions(world, player, "Second Floor", sm64courses[area_connections[12]])
|
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[13]])
|
||||||
connect_regions(world, player, "Third Floor", sm64courses[area_connections[14]])
|
connect_regions(world, player, "Third Floor", sm64courses[area_connections[14]])
|
||||||
|
|
|
@ -9,9 +9,6 @@ from .Regions import create_regions, sm64courses
|
||||||
from BaseClasses import Item, Tutorial, ItemClassification
|
from BaseClasses import Item, Tutorial, ItemClassification
|
||||||
from ..AutoWorld import World, WebWorld
|
from ..AutoWorld import World, WebWorld
|
||||||
|
|
||||||
client_version = 1
|
|
||||||
|
|
||||||
|
|
||||||
class SM64Web(WebWorld):
|
class SM64Web(WebWorld):
|
||||||
tutorials = [Tutorial(
|
tutorials = [Tutorial(
|
||||||
"Multiworld Setup Guide",
|
"Multiworld Setup Guide",
|
||||||
|
@ -38,6 +35,8 @@ class SM64World(World):
|
||||||
location_name_to_id = location_table
|
location_name_to_id = location_table
|
||||||
|
|
||||||
data_version = 6
|
data_version = 6
|
||||||
|
client_version = 2
|
||||||
|
|
||||||
forced_auto_forfeit = False
|
forced_auto_forfeit = False
|
||||||
|
|
||||||
area_connections: typing.Dict[int, int]
|
area_connections: typing.Dict[int, int]
|
||||||
|
@ -115,6 +114,9 @@ class SM64World(World):
|
||||||
def fill_slot_data(self):
|
def fill_slot_data(self):
|
||||||
return {
|
return {
|
||||||
"AreaRando": self.area_connections,
|
"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,
|
"StarsToFinish": self.world.StarsToFinish[self.player].value,
|
||||||
"DeathLink": self.world.death_link[self.player].value,
|
"DeathLink": self.world.death_link[self.player].value,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue