Add Grimmkin Flames logic
This commit is contained in:
parent
f15c80953b
commit
bda86a65f7
|
@ -603,6 +603,17 @@ class CollectionState(object):
|
|||
|
||||
return False
|
||||
|
||||
def has_flames(self, player: int, count: int):
|
||||
from worlds.hk import Items as HKItems
|
||||
found = 0
|
||||
|
||||
for item_name in HKItems.lookup_type_to_names["Flame"]:
|
||||
found += self.prog_items[item_name, player]
|
||||
if found >= count:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def has_key(self, item, player, count: int = 1):
|
||||
if self.world.logic[player] == 'nologic':
|
||||
return True
|
||||
|
|
10
Fill.py
10
Fill.py
|
@ -90,8 +90,10 @@ def distribute_items_restrictive(world, gftower_trash=False, fill_locations=None
|
|||
else:
|
||||
restitempool.append(item)
|
||||
|
||||
standard_keyshuffle_players = set()
|
||||
|
||||
# fill in gtower locations with trash first
|
||||
for player in range(1, world.players + 1):
|
||||
for player in world.alttp_player_ids:
|
||||
if not gftower_trash or not world.ganonstower_vanilla[player] or \
|
||||
world.logic[player] in {'owglitches', "nologic"}:
|
||||
gtower_trash_count = 0
|
||||
|
@ -123,17 +125,17 @@ def distribute_items_restrictive(world, gftower_trash=False, fill_locations=None
|
|||
world.push_item(spot_to_fill, item_to_place, False)
|
||||
fill_locations.remove(spot_to_fill)
|
||||
trashcnt += 1
|
||||
if world.mode[player] == 'standard' and world.keyshuffle[player] is True:
|
||||
standard_keyshuffle_players.add(player)
|
||||
|
||||
world.random.shuffle(fill_locations)
|
||||
|
||||
# Make sure the escape small key is placed first in standard with key shuffle to prevent running out of spots
|
||||
standard_keyshuffle_players = {player for player, mode in world.mode.items() if mode == 'standard' and
|
||||
world.keyshuffle[player] is True}
|
||||
if standard_keyshuffle_players:
|
||||
progitempool.sort(
|
||||
key=lambda item: 1 if item.name == 'Small Key (Hyrule Castle)' and
|
||||
item.player in standard_keyshuffle_players else 0)
|
||||
|
||||
world.random.shuffle(fill_locations)
|
||||
fill_restrictive(world, world.state, fill_locations, progitempool)
|
||||
|
||||
if any(localrestitempool.values()): # we need to make sure some fills are limited to certain worlds
|
||||
|
|
|
@ -84,7 +84,7 @@ item_table = \
|
|||
'Dreamshield': HKItemData(advancement=False, id=16777280, type='Charm'),
|
||||
'Elegant_Key': HKItemData(advancement=True, id=16777291, type='Key'),
|
||||
'Emilitia': HKItemData(advancement=True, id=0, type='Event'),
|
||||
'Equipped': HKItemData(advancement=False, id=16777511, type='Fake'),
|
||||
'Equipped': HKItemData(advancement=False, id=16777521, type='Fake'),
|
||||
'Failed_Tramway': HKItemData(advancement=True, id=0, type='Event'),
|
||||
'Far_Left_Basin': HKItemData(advancement=True, id=0, type='Event'),
|
||||
'Far_Left_Waterways': HKItemData(advancement=True, id=0, type='Event'),
|
||||
|
@ -109,6 +109,16 @@ item_table = \
|
|||
'Greenpath_Map': HKItemData(advancement=False, id=16777477, type='Map'),
|
||||
'Greenpath_Stag': HKItemData(advancement=True, id=16777492, type='Stag'),
|
||||
'Grimmchild': HKItemData(advancement=True, id=16777282, type='Charm'),
|
||||
'Grimmkin_Flame-Ancient_Basin': HKItemData(advancement=True, id=16777516, type='Flame'),
|
||||
'Grimmkin_Flame-Brumm': HKItemData(advancement=True, id=16777518, type='Flame'),
|
||||
'Grimmkin_Flame-City_Storerooms': HKItemData(advancement=True, id=16777509, type='Flame'),
|
||||
'Grimmkin_Flame-Crystal_Peak': HKItemData(advancement=True, id=16777511, type='Flame'),
|
||||
'Grimmkin_Flame-Fungal_Core': HKItemData(advancement=True, id=16777515, type='Flame'),
|
||||
'Grimmkin_Flame-Greenpath': HKItemData(advancement=True, id=16777510, type='Flame'),
|
||||
'Grimmkin_Flame-Hive': HKItemData(advancement=True, id=16777517, type='Flame'),
|
||||
"Grimmkin_Flame-King's_Pass": HKItemData(advancement=True, id=16777512, type='Flame'),
|
||||
"Grimmkin_Flame-Kingdom's_Edge": HKItemData(advancement=True, id=16777514, type='Flame'),
|
||||
'Grimmkin_Flame-Resting_Grounds': HKItemData(advancement=True, id=16777513, type='Flame'),
|
||||
'Grub-Basin_Requires_Dive': HKItemData(advancement=True, id=16777452, type='Grub'),
|
||||
'Grub-Basin_Requires_Wings': HKItemData(advancement=True, id=16777451, type='Grub'),
|
||||
"Grub-Beast's_Den": HKItemData(advancement=True, id=16777446, type='Grub'),
|
||||
|
@ -156,7 +166,7 @@ item_table = \
|
|||
'Grub-Waterways_Main': HKItemData(advancement=True, id=16777453, type='Grub'),
|
||||
'Grub-Waterways_Requires_Tram': HKItemData(advancement=True, id=16777455, type='Grub'),
|
||||
"Grubberfly's_Elegy": HKItemData(advancement=True, id=16777275, type='Charm'),
|
||||
'Grubfather': HKItemData(advancement=False, id=16777509, type='Fake'),
|
||||
'Grubfather': HKItemData(advancement=False, id=16777519, type='Fake'),
|
||||
'Grubsong': HKItemData(advancement=False, id=16777243, type='Charm'),
|
||||
"Hallownest's_Crown": HKItemData(advancement=True, id=0, type='Event'),
|
||||
"Hallownest_Seal-Beast's_Den": HKItemData(advancement=False, id=16777389, type='Relic'),
|
||||
|
@ -261,7 +271,7 @@ item_table = \
|
|||
'Pale_Ore-Grubs': HKItemData(advancement=False, id=16777329, type='Ore'),
|
||||
'Pale_Ore-Nosk': HKItemData(advancement=False, id=16777327, type='Ore'),
|
||||
'Pale_Ore-Seer': HKItemData(advancement=False, id=16777328, type='Ore'),
|
||||
'Placeholder': HKItemData(advancement=False, id=16777512, type='Fake'),
|
||||
'Placeholder': HKItemData(advancement=False, id=16777522, type='Fake'),
|
||||
'Pleasure_House': HKItemData(advancement=True, id=0, type='Event'),
|
||||
"Queen's_Gardens_Map": HKItemData(advancement=False, id=16777488, type='Map'),
|
||||
"Queen's_Gardens_Stag": HKItemData(advancement=True, id=16777494, type='Stag'),
|
||||
|
@ -297,7 +307,7 @@ item_table = \
|
|||
'Right_Fog_Canyon': HKItemData(advancement=True, id=0, type='Event'),
|
||||
'Right_Waterways': HKItemData(advancement=True, id=0, type='Event'),
|
||||
'Royal_Waterways_Map': HKItemData(advancement=False, id=16777485, type='Map'),
|
||||
'Seer': HKItemData(advancement=False, id=16777510, type='Fake'),
|
||||
'Seer': HKItemData(advancement=False, id=16777520, type='Fake'),
|
||||
'Shade_Cloak': HKItemData(advancement=True, id=16777226, type='Skill'),
|
||||
'Shade_Soul': HKItemData(advancement=True, id=16777232, type='Skill'),
|
||||
'Shaman_Stone': HKItemData(advancement=False, id=16777259, type='Charm'),
|
||||
|
|
|
@ -291,7 +291,17 @@ lookup_id_to_name = \
|
|||
17826081: 'Lifeblood_Cocoon-Mantis_Village',
|
||||
17826082: 'Lifeblood_Cocoon-Failed_Tramway',
|
||||
17826083: 'Lifeblood_Cocoon-Galien',
|
||||
17826084: "Lifeblood_Cocoon-Kingdom's_Edge"}
|
||||
17826084: "Lifeblood_Cocoon-Kingdom's_Edge",
|
||||
17826085: 'Grimmkin_Flame-City_Storerooms',
|
||||
17826086: 'Grimmkin_Flame-Greenpath',
|
||||
17826087: 'Grimmkin_Flame-Crystal_Peak',
|
||||
17826088: "Grimmkin_Flame-King's_Pass",
|
||||
17826089: 'Grimmkin_Flame-Resting_Grounds',
|
||||
17826090: "Grimmkin_Flame-Kingdom's_Edge",
|
||||
17826091: 'Grimmkin_Flame-Fungal_Core',
|
||||
17826092: 'Grimmkin_Flame-Ancient_Basin',
|
||||
17826093: 'Grimmkin_Flame-Hive',
|
||||
17826094: 'Grimmkin_Flame-Brumm'}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ def set_rules(world, player):
|
|||
set_rule(world.get_location("Charm_Notch-Shrumal_Ogres", player), lambda state: state.has("Fungal_Wastes", player))
|
||||
set_rule(world.get_location("Charm_Notch-Fog_Canyon", player), lambda state: ((state.has("Right_Fog_Canyon", player) and state.has("Mantis_Claw", player)) and (((state.has("Isma's_Tear", player) or (((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) and state.has("Crystal_Heart", player)) and state.world.ACIDSKIPS[player])) or ((state.has("Monarch_Wings", player) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or (state.world.FIREBALLSKIPS[player] and ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) or (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))))) and state.world.ACIDSKIPS[player])) or ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) and state.world.SPICYSKIPS[player]))))
|
||||
set_rule(world.get_location("Charm_Notch-Colosseum", player), lambda state: (state.has("Colosseum", player) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
set_rule(world.get_location("Charm_Notch-Grimm", player), lambda state: ((state.has("Dirtmouth", player) and state.has("Grimmchild", player)) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
set_rule(world.get_location("Charm_Notch-Grimm", player), lambda state: (((state.has("Dirtmouth", player) and state.has("Grimmchild", player)) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))) and state.has_flames(player, 6)))
|
||||
set_rule(world.get_location("Pale_Ore-Basin", player), lambda state: (state.has("Mid_Basin", player) and (((state.has("Mantis_Claw", player) or state.has("Monarch_Wings", player)) or ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) and state.world.MILDSKIPS[player])) or state.world.SPICYSKIPS[player])))
|
||||
set_rule(world.get_location("Pale_Ore-Crystal_Peak", player), lambda state: state.has("Hallownest's_Crown", player))
|
||||
set_rule(world.get_location("Pale_Ore-Nosk", player), lambda state: (((state.has("Deepnest", player) and state.has("Mantis_Claw", player)) and ((state.has("Monarch_Wings", player) or state.has("Crystal_Heart", player)) or state.world.SHADESKIPS[player])) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
|
@ -275,6 +275,16 @@ def set_rules(world, player):
|
|||
set_rule(world.get_location("Lifeblood_Cocoon-Failed_Tramway", player), lambda state: (state.has("Failed_Tramway", player) and (state.has("Mantis_Claw", player) or (state.has("Monarch_Wings", player) and (state.world.MILDSKIPS[player] or state.world.SHADESKIPS[player])))))
|
||||
set_rule(world.get_location("Lifeblood_Cocoon-Galien", player), lambda state: (state.has("Dark_Deepnest", player) and state.has("Mantis_Claw", player)))
|
||||
set_rule(world.get_location("Lifeblood_Cocoon-Kingdom's_Edge", player), lambda state: (state.has("Upper_Kingdom's_Edge", player) and (state.has("Monarch_Wings", player) or (state.has("Mantis_Claw", player) and state.world.MILDSKIPS[player]))))
|
||||
set_rule(world.get_location("Grimmkin_Flame-City_Storerooms", player), lambda state: (state.has("Left_Elevator", player) and state.has("Grimmchild", player)))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Greenpath", player), lambda state: (state.has("Greenpath", player) and state.has("Grimmchild", player)))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Crystal_Peak", player), lambda state: (((state.has("Upper_Crystal_Peak", player) and state.has("Crystal_Heart", player)) or (((state.has("King's_Pass", player) and state.has("Monarch_Wings", player)) and state.has("Crystal_Heart", player)) and (state.has("Mantis_Claw", player) or (((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) and (state.world.FIREBALLSKIPS[player] and ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) or (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player))))) and state.world.SHADESKIPS[player])))) and state.has("Grimmchild", player)))
|
||||
set_rule(world.get_location("Grimmkin_Flame-King's_Pass", player), lambda state: (((state.has("King's_Pass", player) and state.has("Grimmchild", player)) and state.has_flames(player, 3)) and state.has("Dirtmouth", player)))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Resting_Grounds", player), lambda state: (((state.has("Lower_Resting_Grounds", player) and state.has("Grimmchild", player)) and state.has_flames(player, 3)) and state.has("Dirtmouth", player)))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Kingdom's_Edge", player), lambda state: (((state.has("Central_Kingdom's_Edge", player) and state.has("Grimmchild", player)) and state.has_flames(player, 3)) and state.has("Dirtmouth", player)))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Fungal_Core", player), lambda state: ((((state.has("Fungal_Core", player) and state.has("Grimmchild", player)) and state.has_flames(player, 6)) and state.has("Dirtmouth", player)) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Ancient_Basin", player), lambda state: ((((state.has("Upper_Basin", player) and state.has("Grimmchild", player)) and state.has_flames(player, 6)) and state.has("Dirtmouth", player)) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Hive", player), lambda state: (((((state.has("Hive", player) and ((state.has("Mantis_Claw", player) and state.has("Monarch_Wings", player)) or (state.world.MILDSKIPS[player] and (state.has("Mantis_Claw", player) or state.has("Monarch_Wings", player))))) and state.has("Grimmchild", player)) and state.has_flames(player, 6)) and state.has("Dirtmouth", player)) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
set_rule(world.get_location("Grimmkin_Flame-Brumm", player), lambda state: ((((state.has("Distant_Village", player) and state.has("Grimmchild", player)) and state.has_flames(player, 6)) and state.has("Dirtmouth", player)) and (((((((state.has("Vengeful_Spirit", player) and state.has("Shade_Soul", player)) or (state.has("Desolate_Dive", player) and state.has("Descending_Dark", player))) or (state.has("Howling_Wraiths", player) and state.has("Abyss_Shriek", player))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)) and (state.has("Desolate_Dive", player) or state.has("Descending_Dark", player)))) or ((state.has("Vengeful_Spirit", player) or state.has("Shade_Soul", player)) and (state.has("Howling_Wraiths", player) or state.has("Abyss_Shriek", player)))) and ((state.has("Mothwing_Cloak", player) or state.has("Shade_Cloak", player)) or state.world.MILDSKIPS[player]))))
|
||||
# set_rule(world.get_location("Grubfather", player), lambda state: state.has("Crossroads", player))
|
||||
# set_rule(world.get_location("Seer", player), lambda state: state.has("Upper_Resting_Grounds", player))
|
||||
|
||||
|
|
Loading…
Reference in New Issue