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"""
 | 
			
		||||
    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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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]])
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user