diff --git a/worlds/v6/Options.py b/worlds/v6/Options.py index fa55aa96..0ab80853 100644 --- a/worlds/v6/Options.py +++ b/worlds/v6/Options.py @@ -7,6 +7,10 @@ class DoorCost(Range): range_end = 3 default = 3 +class AreaCostRandomizer(Toggle): + """Randomize which Area requires which set of DoorCost Trinkets""" + display_name = "Area Cost Randomizer" + class DeathLinkAmnesty(Range): """Amount of Deaths to take before sending a DeathLink signal, for balancing difficulty""" range_start = 0 @@ -25,6 +29,7 @@ v6_options: typing.Dict[str,type(Option)] = { "MusicRandomizer": MusicRandomizer, "AreaRandomizer": AreaRandomizer, "DoorCost": DoorCost, + "AreaCostRandomizer": AreaCostRandomizer, "DeathLink": DeathLink, "DeathLinkAmnesty": DeathLinkAmnesty } \ No newline at end of file diff --git a/worlds/v6/Rules.py b/worlds/v6/Rules.py index 6707fab9..284f19fd 100644 --- a/worlds/v6/Rules.py +++ b/worlds/v6/Rules.py @@ -10,17 +10,20 @@ def _has_trinket_range(state,player,start,end) -> bool: return True -def set_rules(world, player, area_connections: typing.Dict[int, int]): +def set_rules(world, player, area_connections: typing.Dict[int, int], area_cost_map: typing.Dict[int, int]): areashuffle = list(range(len(v6areas))) if world.AreaRandomizer[player].value: world.random.shuffle(areashuffle) area_connections.update({(index+1): (value+1) for index, value in enumerate(areashuffle)}) area_connections.update({0:0}) + if world.AreaCostRandomizer[player].value: + world.random.shuffle(areashuffle) + area_cost_map.update({(index+1): (value+1) for index, value in enumerate(areashuffle)}) + area_cost_map.update({0:0}) - connect_regions(world, player, "Menu", v6areas[area_connections[1]-1], lambda state: _has_trinket_range(state,player,0,world.DoorCost[player].value)) - connect_regions(world, player, "Menu", v6areas[area_connections[2]-1], lambda state: _has_trinket_range(state,player,world.DoorCost[player].value,world.DoorCost[player].value*2)) - connect_regions(world, player, "Menu", v6areas[area_connections[3]-1], lambda state: _has_trinket_range(state,player,world.DoorCost[player].value*2,world.DoorCost[player].value*3)) - connect_regions(world, player, "Menu", v6areas[area_connections[4]-1], lambda state: _has_trinket_range(state,player,world.DoorCost[player].value*3,world.DoorCost[player].value*4)) + for i in range(1,5): + connect_regions(world, player, "Menu", v6areas[area_connections[i]-1], lambda state: _has_trinket_range(state,player,world.DoorCost[player].value*(area_cost_map[i]-1), + world.DoorCost[player].value*area_cost_map[i])) #Special Rule for V add_rule(world.get_location("V",player), lambda state : state.can_reach("Laboratory",'Region',player) and diff --git a/worlds/v6/__init__.py b/worlds/v6/__init__.py index 8bce7337..66dd9a9f 100644 --- a/worlds/v6/__init__.py +++ b/worlds/v6/__init__.py @@ -25,6 +25,7 @@ class V6World(World): forced_auto_forfeit = False area_connections: typing.Dict[int, int] + area_cost_map: typing.Dict[int,int] music_map: typing.Dict[int,int] @@ -35,13 +36,15 @@ class V6World(World): def set_rules(self): self.area_connections = {} - set_rules(self.world, self.player, self.area_connections) + self.area_cost_map = {} + set_rules(self.world, self.player, self.area_connections, self.area_cost_map) def create_item(self, name: str) -> Item: return V6Item(name, True, item_table[name], self.player) def generate_basic(self): - self.world.itempool += [self.create_item(name) for name in self.item_names] + trinkets = [self.create_item("Trinket " + str(i+1).zfill(2)) for i in range(0,20)] + self.world.itempool += trinkets musiclist_o = [1,2,3,4,9,12] musiclist_s = musiclist_o.copy() @@ -54,6 +57,7 @@ class V6World(World): "MusicRando": self.music_map, "AreaRando": self.area_connections, "DoorCost": self.world.DoorCost[self.player].value, + "AreaCostRando": self.area_cost_map, "DeathLink": self.world.DeathLink[self.player].value, "DeathLink_Amnesty": self.world.DeathLinkAmnesty[self.player].value }