From e38308bac326652ba17a4ae008810d724454fed8 Mon Sep 17 00:00:00 2001 From: Yussur Mustafa Oraji Date: Thu, 14 Jul 2022 18:37:14 +0200 Subject: [PATCH] sm64ex: Allow setting Big Star Door requirements (#773) * sm64ex: Allow setting Big Star Door requirements * sm64ex: Lower requirements for StarsToFinish --- worlds/sm64ex/Options.py | 24 +++++++++++++++++++++++- worlds/sm64ex/Rules.py | 8 ++++---- worlds/sm64ex/__init__.py | 8 +++++--- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/worlds/sm64ex/Options.py b/worlds/sm64ex/Options.py index 99b3b3ee..bddfc3fb 100644 --- a/worlds/sm64ex/Options.py +++ b/worlds/sm64ex/Options.py @@ -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, diff --git a/worlds/sm64ex/Rules.py b/worlds/sm64ex/Rules.py index fcd56193..cad9dd23 100644 --- a/worlds/sm64ex/Rules.py +++ b/worlds/sm64ex/Rules.py @@ -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]]) diff --git a/worlds/sm64ex/__init__.py b/worlds/sm64ex/__init__.py index f19f8ee7..64b38746 100644 --- a/worlds/sm64ex/__init__.py +++ b/worlds/sm64ex/__init__.py @@ -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, }