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:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						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,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user