Timespinner: Adds Lantern Check flags, Missing Traps (#5188)

* Timespinner: Add Torch Flags

* Add comment of all torch locations

* Add gyre and dark forest lanterns

* Add Ancient Pyramid

* Don't make cube default progression

* Add Emperors Tower

* Add lake desolation, forest

* Add lab

* Add library, varndagroth

* Add hangar

* Add ramparts

* Add Xarion

* Add castle keep

* Add royal towers

* Add lake serene

* Add remaining checks

* Add missing region

* Fix region names

* Fix location id

* Add traps to settings

* Add restriction to elevator keycard torch

* Set new traps to have quantity 0 by default

* Scythe is now useful due to torch shredding

* Add additional lantern

* Un-disable missing lantern

* Include location ids in tracker

* Remove additional space

* Fix paren

* Add missing lantern

* Remove tablet requirement for torches

* Update filler V card

* Fix brackets

* Address feedback
This commit is contained in:
Colin
2025-09-10 07:27:13 -07:00
committed by GitHub
parent 9aa0bf7245
commit 78b529fc23
7 changed files with 844 additions and 261 deletions

View File

@@ -955,29 +955,12 @@ if "Timespinner" in network_data_package["games"]:
"Eye Orb": "https://timespinnerwiki.com/mediawiki/images/a/a4/Eye_Orb.png",
"Lab Coat": "https://timespinnerwiki.com/mediawiki/images/5/51/Lab_Coat.png",
"Demon": "https://timespinnerwiki.com/mediawiki/images/f/f8/Familiar_Demon.png",
"Cube of Bodie": "https://timespinnerwiki.com/mediawiki/images/1/14/Menu_Icon_Stats.png"
}
timespinner_location_ids = {
"Present": [
1337000, 1337001, 1337002, 1337003, 1337004, 1337005, 1337006, 1337007, 1337008, 1337009,
1337010, 1337011, 1337012, 1337013, 1337014, 1337015, 1337016, 1337017, 1337018, 1337019,
1337020, 1337021, 1337022, 1337023, 1337024, 1337025, 1337026, 1337027, 1337028, 1337029,
1337030, 1337031, 1337032, 1337033, 1337034, 1337035, 1337036, 1337037, 1337038, 1337039,
1337040, 1337041, 1337042, 1337043, 1337044, 1337045, 1337046, 1337047, 1337048, 1337049,
1337050, 1337051, 1337052, 1337053, 1337054, 1337055, 1337056, 1337057, 1337058, 1337059,
1337060, 1337061, 1337062, 1337063, 1337064, 1337065, 1337066, 1337067, 1337068, 1337069,
1337070, 1337071, 1337072, 1337073, 1337074, 1337075, 1337076, 1337077, 1337078, 1337079,
1337080, 1337081, 1337082, 1337083, 1337084, 1337085],
"Past": [
1337086, 1337087, 1337088, 1337089,
1337090, 1337091, 1337092, 1337093, 1337094, 1337095, 1337096, 1337097, 1337098, 1337099,
1337100, 1337101, 1337102, 1337103, 1337104, 1337105, 1337106, 1337107, 1337108, 1337109,
1337110, 1337111, 1337112, 1337113, 1337114, 1337115, 1337116, 1337117, 1337118, 1337119,
1337120, 1337121, 1337122, 1337123, 1337124, 1337125, 1337126, 1337127, 1337128, 1337129,
1337130, 1337131, 1337132, 1337133, 1337134, 1337135, 1337136, 1337137, 1337138, 1337139,
1337140, 1337141, 1337142, 1337143, 1337144, 1337145, 1337146, 1337147, 1337148, 1337149,
1337150, 1337151, 1337152, 1337153, 1337154, 1337155,
1337171, 1337172, 1337173, 1337174, 1337175],
"Present": list(range(1337000, 1337085)),
"Past": list(range(1337086, 1337175)),
"Ancient Pyramid": [
1337236,
1337246, 1337247, 1337248, 1337249]
@@ -985,26 +968,23 @@ if "Timespinner" in network_data_package["games"]:
slot_data = tracker_data.get_slot_data(team, player)
if (slot_data["DownloadableItems"]):
timespinner_location_ids["Present"] += [
1337156, 1337157, 1337159,
1337160, 1337161, 1337162, 1337163, 1337164, 1337165, 1337166, 1337167, 1337168, 1337169,
1337170]
timespinner_location_ids["Present"] += [1337156, 1337157] + list(range(1337159, 1337170))
if (slot_data["Cantoran"]):
timespinner_location_ids["Past"].append(1337176)
if (slot_data["LoreChecks"]):
timespinner_location_ids["Present"] += [
1337177, 1337178, 1337179,
1337180, 1337181, 1337182, 1337183, 1337184, 1337185, 1337186, 1337187]
timespinner_location_ids["Past"] += [
1337188, 1337189,
1337190, 1337191, 1337192, 1337193, 1337194, 1337195, 1337196, 1337197, 1337198]
timespinner_location_ids["Present"] += list(range(1337177, 1337187))
timespinner_location_ids["Past"] += list(range(1337188, 1337198))
if (slot_data["GyreArchives"]):
timespinner_location_ids["Ancient Pyramid"] += [
1337237, 1337238, 1337239,
1337240, 1337241, 1337242, 1337243, 1337244, 1337245]
timespinner_location_ids["Ancient Pyramid"] += list(range(1337237, 1337245))
if (slot_data["PyramidStart"]):
timespinner_location_ids["Ancient Pyramid"] += [
1337233, 1337234, 1337235]
if (slot_data["PureTorcher"]):
timespinner_location_ids["Present"] += list(range(1337250, 1337352)) + list(range(1337422, 1337496)) + [1337506] + list(range(1337712, 1337779)) + [1337781, 1337782]
timespinner_location_ids["Past"] += list(range(1337497, 1337505)) + list(range(1337507, 1337711)) + [1337780]
timespinner_location_ids["Ancient Pyramid"] += list(range(1337369, 1337421))
if (slot_data["GyreArchives"]):
timespinner_location_ids["Ancient Pyramid"] += list(range(1337353, 1337368))
display_data = {}

View File

@@ -174,7 +174,7 @@ item_table: Dict[str, ItemData] = {
'Corruption': ItemData('Orb Spell', 1337161),
'Lightwall': ItemData('Orb Spell', 1337162, progression=True),
'Bleak Ring': ItemData('Orb Passive', 1337163, useful=True),
'Scythe Ring': ItemData('Orb Passive', 1337164),
'Scythe Ring': ItemData('Orb Passive', 1337164, useful=True),
'Pyro Ring': ItemData('Orb Passive', 1337165, progression=True),
'Royal Ring': ItemData('Orb Passive', 1337166, progression=True),
'Shield Ring': ItemData('Orb Passive', 1337167),
@@ -208,9 +208,11 @@ item_table: Dict[str, ItemData] = {
'Lab Access Research': ItemData('Lab Access', 1337196, progression=True),
'Lab Access Dynamo': ItemData('Lab Access', 1337197, progression=True),
'Drawbridge Key': ItemData('Key', 1337198, progression=True),
# 1337199 Reserved
'Cube of Bodie': ItemData('Relic', 1337199, progression=True),
'Spider Trap': ItemData('Trap', 1337200, 0, trap=True),
# 1337201 - 1337248 Reserved
'Lights Out Trap': ItemData('Trap', 1337201, 0, trap=True),
'Palm Punch Trap': ItemData('Trap', 1337202, 0, trap=True),
# 1337203 - 1337248 Reserved
'Max Sand': ItemData('Stat', 1337249, 14)
}

View File

@@ -22,6 +22,8 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio
# 1337000 - 1337155 Generic locations
# 1337171 - 1337175 New Pickup checks
# 1337246 - 1337249 Ancient Pyramid
# 1337250 - 1337781 Torch checks
# 1337782 - 1337999 Reserved
location_table: List[LocationData] = [
# Present item locations
LocationData('Tutorial', 'Tutorial: Yo Momma 1', 1337000),
@@ -90,18 +92,18 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio
LocationData('Military Fortress (hangar)', 'Military Fortress: B door chest 2', 1337063, lambda state: logic.has_keycard_B(state) and (state.has('Water Mask', player) if flooded.flood_lab else logic.has_doublejump(state))),
LocationData('Military Fortress (hangar)', 'Military Fortress: B door chest 1', 1337064, lambda state: logic.has_keycard_B(state) and (state.has('Water Mask', player) if flooded.flood_lab else logic.has_doublejump(state))),
LocationData('Military Fortress (hangar)', 'Military Fortress: Pedestal', 1337065, lambda state: state.has('Water Mask', player) if flooded.flood_lab else (logic.has_doublejump_of_npc(state) or logic.has_forwarddash_doublejump(state))),
LocationData('The lab', 'Lab: Coffee break', 1337066),
LocationData('The lab', 'Lab: Lower trash right', 1337067, logic.has_doublejump),
LocationData('The lab', 'Lab: Lower trash left', 1337068, lambda state: logic.has_doublejump_of_npc(state) if options.lock_key_amadeus else logic.has_upwarddash(state) ),
LocationData('The lab', 'Lab: Below lab entrance', 1337069, logic.has_doublejump),
LocationData('The lab (power off)', 'Lab: Trash jump room', 1337070, lambda state: not options.lock_key_amadeus or logic.has_doublejump_of_npc(state) ),
LocationData('The lab (power off)', 'Lab: Dynamo Works', 1337071, lambda state: not options.lock_key_amadeus or (state.has_all(('Lab Access Research', 'Lab Access Dynamo'), player)) ),
LocationData('Main Lab', 'Lab: Coffee break', 1337066),
LocationData('Main Lab', 'Lab: Lower trash right', 1337067, logic.has_doublejump),
LocationData('Main Lab', 'Lab: Lower trash left', 1337068, lambda state: logic.has_doublejump_of_npc(state) if options.lock_key_amadeus else logic.has_upwarddash(state) ),
LocationData('Main Lab', 'Lab: Below lab entrance', 1337069, logic.has_doublejump),
LocationData('Main Lab', 'Lab: Trash jump room', 1337070, lambda state: not options.lock_key_amadeus or logic.has_doublejump_of_npc(state) ),
LocationData('Lab Research', 'Lab: Dynamo Works', 1337071, lambda state: not options.lock_key_amadeus or ( state.has('Lab Access Dynamo', player) and logic.has_upwarddash(state) )),
LocationData('The lab (upper)', 'Lab: Genza (Blob Mom)', 1337072),
LocationData('The lab (power off)', 'Lab: Experiment #13', 1337073, lambda state: not options.lock_key_amadeus or state.has('Lab Access Experiment', player) ),
LocationData('Main Lab', 'Lab: Experiment #13', 1337073, lambda state: not options.lock_key_amadeus or state.has('Lab Access Experiment', player) ),
LocationData('The lab (upper)', 'Lab: Download and chest room chest', 1337074),
LocationData('The lab (upper)', 'Lab: Lab secret', 1337075, logic.can_break_walls),
LocationData('The lab (power off)', 'Lab: Spider Hell', 1337076, lambda state: logic.has_keycard_A(state) and not options.lock_key_amadeus or state.has('Lab Access Research', player)),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard bottom chest', 1337077),
LocationData('Lab Research', 'Lab: Spider Hell', 1337076, lambda state: logic.has_keycard_A(state)),
LocationData('Emperors tower (courtyard)', 'Emperor\'s Tower: Courtyard bottom chest', 1337077),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard floor secret', 1337078, lambda state: logic.has_upwarddash(state) and logic.can_break_walls(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard upper chest', 1337079, lambda state: logic.has_upwarddash(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Galactic sage room', 1337080),
@@ -214,11 +216,11 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio
LocationData('Library top', 'Library: Backer room terminal (Vandagray Metropolis Map)', 1337163, lambda state: state.has('Tablet', player)),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Medbay terminal (Bleakness Research)', 1337164, lambda state: state.has('Tablet', player) and logic.has_keycard_B(state)),
LocationData('The lab (upper)', 'Lab: Download and chest room terminal (Experiment #13)', 1337165, lambda state: state.has('Tablet', player)),
LocationData('The lab (power off)', 'Lab: Middle terminal (Amadeus Laboratory Map)', 1337166, lambda state: state.has('Tablet', player) and (not options.lock_key_amadeus or state.has('Lab Access Research', player))),
LocationData('The lab (power off)', 'Lab: Sentry platform terminal (Origins)', 1337167, lambda state: state.has('Tablet', player) and (not options.lock_key_amadeus or state.has('Lab Access Genza', player) or logic.can_teleport_to(state, "Time", "GateDadsTower"))),
LocationData('The lab', 'Lab: Experiment 13 terminal (W.R.E.C Farewell)', 1337168, lambda state: state.has('Tablet', player)),
LocationData('The lab', 'Lab: Left terminal (Biotechnology)', 1337169, lambda state: state.has('Tablet', player)),
LocationData('The lab (power off)', 'Lab: Right terminal (Experiment #11)', 1337170, lambda state: state.has('Tablet', player) and (not options.lock_key_amadeus or state.has('Lab Access Research', player)))
LocationData('Lab Research', 'Lab: Middle terminal (Amadeus Laboratory Map)', 1337166, lambda state: state.has('Tablet', player)),
LocationData('Main Lab', 'Lab: Sentry platform terminal (Origins)', 1337167, lambda state: state.has('Tablet', player) and (not options.lock_key_amadeus or state.has('Lab Access Genza', player) or logic.can_teleport_to(state, "Time", "GateDadsTower"))),
LocationData('Main Lab', 'Lab: Experiment 13 terminal (W.R.E.C Farewell)', 1337168, lambda state: state.has('Tablet', player)),
LocationData('Main Lab', 'Lab: Left terminal (Biotechnology)', 1337169, lambda state: state.has('Tablet', player)),
LocationData('Lab Research', 'Lab: Right terminal (Experiment #11)', 1337170, lambda state: state.has('Tablet', player))
)
# 1337176 - 1337176 Cantoran
@@ -238,8 +240,8 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio
LocationData('Varndagroth tower right (lower)', 'Varndagroth Towers: Memory - Siren Elevator (Childhood)', 1337182, logic.has_keycard_B),
LocationData('Varndagroth tower right (lower)', 'Varndagroth Towers (Right): Memory - Bottom (Faron)', 1337183),
LocationData('Military Fortress', 'Military Fortress: Memory - Bomber Climb (A Solution)', 1337184, lambda state: state.has('Timespinner Wheel', player) and logic.has_doublejump_of_npc(state)),
LocationData('The lab', 'Lab: Memory - Genza\'s Secret Stash 1 (An Old Friend)', 1337185, logic.can_break_walls),
LocationData('The lab', 'Lab: Memory - Genza\'s Secret Stash 2 (Twilight Dinner)', 1337186, logic.can_break_walls),
LocationData('Main Lab', 'Lab: Memory - Genza\'s Secret Stash 1 (An Old Friend)', 1337185, logic.can_break_walls),
LocationData('Main Lab', 'Lab: Memory - Genza\'s Secret Stash 2 (Twilight Dinner)', 1337186, logic.can_break_walls),
LocationData('Emperors tower', 'Emperor\'s Tower: Memory - Way Up There (Final Circle)', 1337187, logic.has_doublejump_of_npc),
LocationData('Forest', 'Forest: Journal - Rats (Lachiem Expedition)', 1337188),
LocationData('Forest', 'Forest: Journal - Bat Jump Ledge (Peace Treaty)', 1337189, lambda state: logic.has_doublejump_of_npc(state) or logic.has_forwarddash_doublejump(state) or logic.has_fastjump_on_npc(state)),
@@ -280,4 +282,570 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio
LocationData('Ifrit\'s Lair', 'Ifrit: Post fight (chest)', 1337245),
)
# 1337250 - 1337781 Torch checks
if not options or options.pure_torcher:
location_table += (
LocationData('Lower lake desolation', 'Lake Desolation (Lower): Not So Secret Lantern', 1337250, lambda state: logic.can_break_walls(state) and logic.can_break_lanterns(state)),
LocationData('Lower lake desolation', 'Lake Desolation (Lower): Middle Room Lantern 1', 1337256, logic.can_break_lanterns),
LocationData('Lower lake desolation', 'Lake Desolation (Lower): Middle Room Lantern 2', 1337257, logic.can_break_lanterns),
LocationData('Lower lake desolation', 'Lake Desolation (Lower): Timespinner Wheel Lantern 1', 1337258, logic.can_break_lanterns),
LocationData('Lower lake desolation', 'Lake Desolation (Lower): Timespinner Wheel Lantern 2', 1337259, logic.can_break_lanterns),
LocationData('Upper lake desolation', 'Lake Desolation (Upper): Upper Left Room Lantern 1', 1337251, logic.can_break_lanterns),
LocationData('Upper lake desolation', 'Lake Desolation (Upper): Upper Left Room Lantern 2', 1337252, logic.can_break_lanterns),
LocationData('Upper lake desolation', 'Lake Desolation (Upper): Oxygen Recovery Lantern', 1337253, logic.can_break_lanterns),
LocationData('Upper lake desolation', 'Lake Desolation (Upper): Upper Right Room Lantern 1', 1337254, logic.can_break_lanterns),
LocationData('Upper lake desolation', 'Lake Desolation (Upper): Double jump Cave Lantern', 1337255, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 1', 1337773, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 2', 1337774, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 3', 1337775, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 4', 1337776, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 5', 1337777, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 6', 1337778, logic.can_break_lanterns),
LocationData('Eastern lake desolation', 'Lake Desolation: Metropolis Bridge Lantern 7', 1337779, logic.can_break_lanterns),
LocationData('Library', 'Library: Sewer Entrance Lantern', 1337489, logic.can_break_lanterns),
LocationData('Library', 'Library: Left Sewer Lantern 1', 1337422, logic.can_break_lanterns),
LocationData('Library', 'Library: Left Sewer Lantern 2', 1337423, logic.can_break_lanterns),
LocationData('Library', 'Library: Right Sewer Lantern 1', 1337424, logic.can_break_lanterns),
LocationData('Library', 'Library: Right Sewer Lantern 2', 1337425, logic.can_break_lanterns),
LocationData('Library', 'Library: Right Sewer Lantern 3', 1337426, logic.can_break_lanterns),
LocationData('Library', 'Library: Right Sewer Lantern 4', 1337427, logic.can_break_lanterns),
LocationData('Library', 'Library: Right Sewer Lantern 5', 1337428, logic.can_break_lanterns),
LocationData('Library', 'Library: Right Sewer Lantern 6', 1337429, logic.can_break_lanterns),
LocationData('Library', 'Library: Sewer Exit Lantern 1', 1337492, logic.can_break_lanterns),
LocationData('Library', 'Library: Sewer Exit Lantern 2', 1337493, logic.can_break_lanterns),
LocationData('Library', 'Library: Basement Lantern', 1337494, logic.can_break_lanterns),
LocationData('Library', 'Library: Exit Lantern', 1337450, logic.can_break_lanterns),
LocationData('Library', 'Library: Librarian Lantern 1', 1337463, logic.can_break_lanterns),
LocationData('Library', 'Library: Librarian Lantern 2', 1337464, logic.can_break_lanterns),
LocationData('Library', 'Library: Left Staircase Lantern 1', 1337465, logic.can_break_lanterns),
LocationData('Library', 'Library: Left Staircase Lantern 2', 1337466, logic.can_break_lanterns),
LocationData('Library', 'Library: Left Staircase Lantern 3', 1337467, logic.can_break_lanterns),
LocationData('Library', 'Library: Left Staircase Lantern 4', 1337468, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 1', 1337471, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 2', 1337472, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 3', 1337473, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 4', 1337474, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 5', 1337475, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 6', 1337476, logic.can_break_lanterns),
LocationData('Library', 'Library: Lantern 7', 1337477, logic.can_break_lanterns),
LocationData('Library', 'Library: Storage Room Lantern 1', 1337478, lambda state: logic.has_keycard_D(state) and logic.can_break_lanterns(state)),
LocationData('Library', 'Library: Storage Room Lantern 2', 1337479, lambda state: logic.has_keycard_D(state) and logic.can_break_lanterns(state)),
LocationData('Library', 'Library: Waterway Lantern 1', 1337480, logic.can_break_lanterns),
LocationData('Library', 'Library: Waterway Lantern 2', 1337481, logic.can_break_lanterns),
LocationData('Library', 'Library: V Room Lantern 1', 1337490, lambda state: state.has('Library Keycard V', player) and logic.can_break_lanterns(state)),
LocationData('Library', 'Library: V Room Lantern 2', 1337491, lambda state: state.has('Library Keycard V', player) and logic.can_break_lanterns(state)),
LocationData('Library top', 'Library: Backer Room Lantern 1', 1337484, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Room Lantern 2', 1337485, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Room Lantern 3', 1337486, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Room Lantern 4', 1337487, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Room Lantern 5', 1337488, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Stairs Lantern 1', 1337459, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Stairs Lantern 2', 1337460, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Stairs Lantern 3', 1337461, logic.can_break_lanterns),
LocationData('Library top', 'Library: Backer Stairs Lantern 4', 1337462, logic.can_break_lanterns),
LocationData('Library top', 'Library: Mr. Hat Lantern 1', 1337482, logic.can_break_lanterns),
LocationData('Library top', 'Library: Mr. Hat Lantern 2', 1337483, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Library: Moving Sidewalk Lantern 1', 1337430, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Library: Moving Sidewalk Lantern 2', 1337431, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Entrance Lantern', 1337434, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Bottom Floor Lantern', 1337451, lambda state: logic.has_keycard_C(state) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Elevator Lantern 1', 1337452, lambda state: state.has('Elevator Keycard', player) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Elevator Lantern 2', 1337453, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Base Lantern 1', 1337469, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Base Lantern 2', 1337470, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Floor 2 Lantern 1', 1337432, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Floor 2 Lantern 2', 1337433, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Middle Lantern', 1337454, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Ladder Lantern 1', 1337455, logic.can_break_lanterns),
LocationData('Varndagroth tower left', 'Varndagroth Towers (Left): Left Stairs Ladder Lantern 2', 1337456, logic.can_break_lanterns),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers: Bridge Entrance Lantern 1', 1337457, logic.can_break_lanterns),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers: Bridge Entrance Lantern 2', 1337458, logic.can_break_lanterns),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Bridge Exit Lantern 1', 1337437, logic.can_break_lanterns),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Bridge Exit Lantern 2', 1337438, logic.can_break_lanterns),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Above Vents Lantern 1', 1337448, lambda state: (state.has('Elevator Keycard', player) or logic.has_doublejump(state)) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Above Vents Lantern 2', 1337449, lambda state: (state.has('Elevator Keycard', player) or logic.has_doublejump(state)) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Vent Lantern 1', 1337445, lambda state: (state.has('Elevator Keycard', player) or logic.has_doublejump(state)) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Vent Lantern 2', 1337446, lambda state: (state.has('Elevator Keycard', player) or logic.has_doublejump(state)) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower right (upper)', 'Varndagroth Towers (Right): Vent Lantern 3', 1337447, lambda state: (state.has('Elevator Keycard', player) or logic.has_doublejump(state)) and logic.can_break_lanterns(state)),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Right Elevator Lantern 1', 1337439, logic.can_break_lanterns),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Right Elevator Lantern 2', 1337440, logic.can_break_lanterns),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Right Elevator Lantern 3', 1337441, logic.can_break_lanterns),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Right Elevator Lantern 4', 1337442, logic.can_break_lanterns),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Right Elevator Lantern 5', 1337443, logic.can_break_lanterns),
LocationData('Varndagroth tower right (elevator)', 'Varndagroth Towers (Right): Right Elevator Lantern 6', 1337444, logic.can_break_lanterns),
LocationData('Varndagroth tower right (lower)', 'Varndagroth Towers (Right): Right Stairs Lantern 1', 1337435, logic.can_break_lanterns),
LocationData('Varndagroth tower right (lower)', 'Varndagroth Towers (Right): Right Stairs Lantern 2', 1337436, logic.can_break_lanterns),
LocationData('Varndagroth tower right (lower)', 'Varndagroth Towers (Right): Base Lantern 1', 1337495, logic.can_break_lanterns),
LocationData('Varndagroth tower right (lower)', 'Varndagroth Towers (Right): Base Lantern 2', 1337496, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): Middle Hall Lantern 1', 1337721, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): Middle Hall Lantern 2', 1337722, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): Middle Hall Lantern 3', 1337723, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): Middle Hall Lantern 4', 1337724, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): First Hall Lantern 1', 1337741, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): First Hall Lantern 2', 1337742, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): First Hall Lantern ', 1337743, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): Condemned Shaft Lantern 1', 1337744, logic.can_break_lanterns),
LocationData('Sealed Caves (Sirens)', 'Sealed Caves (Sirens): Condemned Shaft Lantern 2', 1337745, logic.can_break_lanterns),
LocationData('Skeleton Shaft', 'Sealed Caves (Xarion): Skeleton Lantern 1', 1337718, logic.can_break_lanterns),
LocationData('Skeleton Shaft', 'Sealed Caves (Xarion): Skeleton Lantern 2', 1337719, logic.can_break_lanterns),
LocationData('Skeleton Shaft', 'Sealed Caves (Xarion): Skeleton Lantern 3', 1337720, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): First Hall Lantern 1', 1337712, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): First Hall Lantern 2', 1337713, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): First Hall Lantern 3', 1337714, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): First Hall Lantern 4', 1337715, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): First Hall Lantern 5', 1337716, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): First Hall Lantern 6', 1337717, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Second Hall Lantern 1', 1337746, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Second Hall Lantern 2', 1337747, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Second Hall Lantern 3', 1337748, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Second Hall Lantern 4', 1337749, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Forked Shaft Lantern 1', 1337750, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Forked Shaft Lantern 2', 1337751, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Forked Shaft Lantern 3', 1337752, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Forked Shaft Lantern 4', 1337753, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Forked Shaft Lantern 5', 1337754, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Shroom Jump Lantern 1', 1337738, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Shroom Jump Lantern 2', 1337739, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Shroom Jump Lantern 3', 1337740, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Shroom Jump Lantern 4', 1337781, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Lower Fork Start Lantern 1', 1337761, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Lower Fork Start Lantern 2', 1337762, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Lower Fork Vertical Room Lantern 1', 1337769, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Lower Fork Vertical Room Lantern 2', 1337770, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Lower Fork Vertical Room Lantern 3', 1337771, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Lower Fork Vertical Room Lantern 4', 1337772, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Mini Jackpot Ledge Lantern', 1337733, lambda state: logic.has_forwarddash_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Waterfall Lantern 1', 1337731, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Waterfall Lantern 2', 1337732, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Waterfall Lantern 3', 1337734, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Waterfall Lantern 4', 1337735, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Waterfall Lantern 5', 1337736, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Post-Fork Room Lantern 1', 1337763, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Post-Fork Room Lantern 2', 1337764, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Rejoined Hallway Lantern 1', 1337755, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Rejoined Hallway Lantern 2', 1337756, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Rejoined Hallway Lantern 3', 1337757, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Rejoined Hallway Lantern 4', 1337758, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Rejoined Hallway Lantern 5', 1337759, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Rejoined Hallway Lantern 6', 1337760, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Penultimate Hall Lantern 1', 1337725, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Penultimate Hall Lantern 2', 1337726, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Penultimate Hall Lantern 3', 1337727, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Penultimate Hall Lantern 4', 1337728, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Penultimate Hall Lantern 5', 1337729, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Penultimate Hall Lantern 6', 1337730, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Last Chance Room Lantern 1', 1337765, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Last Chance Room Lantern 2', 1337766, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Last Chance Room Lantern 3', 1337767, logic.can_break_lanterns),
LocationData('Sealed Caves (Xarion)', 'Sealed Caves (Xarion): Last Chance Room Lantern 4', 1337768, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Forest', 'Forest: Rats Lantern', 1337498, logic.can_break_lanterns),
LocationData('Forest', 'Forest: Ramparts Bridge Lantern 1', 1337499, logic.can_break_lanterns),
LocationData('Forest', 'Forest: Ramparts Bridge Lantern 2', 1337500, logic.can_break_lanterns),
LocationData('Forest', 'Forest: Ramparts Bridge Lantern 3', 1337501, logic.can_break_lanterns),
LocationData('Forest', 'Forest: Batcave Lantern', 1337502, logic.can_break_lanterns),
LocationData('Forest', 'Forest: Lantern Before Broken Bridge', 1337503, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Forest: Lantern Past Signpost', 1337497, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Forest: Lantern After Broken Bridge', 1337504, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Forest: Left Caves Lantern', 1337505, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Giantess Lantern 1', 1337507, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Giantess Lantern 2', 1337508, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Archer + Knight Lantern 1', 1337509, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Archer + Knight Lantern 2', 1337510, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Pedestal Lantern', 1337513, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Big Boulder Room Lantern 1', 1337514, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Big Boulder Room Lantern 2', 1337515, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Left Rooftops Lantern 1', 1337516, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Left Rooftops Lantern 2', 1337517, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Left Rooftops Lantern 3', 1337518, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Middle Hammer Lantern 1', 1337519, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Middle Hammer Lantern 2', 1337520, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Middle Hammer Lantern 3', 1337521, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Exit Lantern 1', 1337522, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Exit Lantern 2', 1337523, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Exit Lantern 3', 1337524, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Exit Lantern 4', 1337525, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Pedestal Stairs Lantern 1', 1337526, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Pedestal Stairs Lantern 2', 1337527, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Pedestal Stairs Lantern 3', 1337528, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Right Rooftops Lantern 1', 1337529, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Right Rooftops Lantern 2', 1337530, logic.can_break_lanterns),
LocationData('Castle Ramparts', 'Castle Ramparts: Right Rooftops Lantern 3', 1337531, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Entrance Lantern 1', 1337536, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Entrance Lantern 2', 1337537, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Entrance Lantern 3', 1337538, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Exit Lantern 1', 1337539, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Exit Lantern 2', 1337540, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Exit Climb Lantern 1', 1337541, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Exit Climb Lantern 2', 1337542, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: First Bird Hall Lantern 1', 1337543, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: First Bird Hall Lantern 2', 1337544, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Single Bird Lantern 1', 1337567, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Single Bird Lantern 2', 1337568, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Second Bird Hall Lantern 1', 1337569, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Second Bird Hall Lantern 2', 1337570, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Center Shaft Lantern 1', 1337579, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Center Shaft Lantern 2', 1337580, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Giantess Lantern 1', 1337581, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Giantess Lantern 2', 1337582, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Foyer Low Left Lantern', 1337563, logic.can_break_lanterns),
LocationData('Castle Basement', 'Castle Basement: Foyer Low Right Lantern', 1337560, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Foyer Mid Left Lantern', 1337562, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Foyer Mid Right Lantern', 1337561, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Foyer High Left Lantern', 1337564, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Foyer High Right Lantern', 1337565, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Beginning Lantern 1', 1337532, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Beginning Lantern 2', 1337533, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Beginning Lantern 3', 1337534, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Beginning Lantern 4', 1337535, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Far-Left Climb Double-Jump Lantern', 1337545, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Far-Left Climb Lower Lantern 1', 1337546, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Far-Left Climb Lower Lantern 2', 1337547, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Under The Twins Hallway Lantern 1', 1337548, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Under The Twins Hallway Lantern 2', 1337549, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Under The Twins Hallway Lantern 3', 1337550, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Under The Twins Hallway Lantern 4', 1337551, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Right-Middle Hallway Lantern 1', 1337552, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Right-Middle Hallway Lantern 2', 1337553, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Right-Middle Hallway Lantern 3', 1337554, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Right-Middle Hallway Lantern 4', 1337555, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Tiny Royal Guard Room Lantern 1', 1337556, lambda state: logic.can_break_lanterns(state) and (logic.has_doublejump(state) or logic.has_fastjump_on_npc(state))),
LocationData('Castle Keep', 'Castle Keep: Tiny Royal Guard Room Lantern 2', 1337557, lambda state: logic.can_break_lanterns(state) and (logic.has_doublejump(state) or logic.has_fastjump_on_npc(state))),
LocationData('Castle Keep', 'Castle Keep: Royal Tower Entrance Lantern 1', 1337558, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Royal Tower Entrance Lantern 2', 1337559, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Below Royal Room Lantern', 1337566, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Outside Aelana\'s Room Lantern 1', 1337571, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Outside Aelana\'s Room Lantern 2', 1337572, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Outside Aelana\'s Room Lantern 3', 1337573, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Outside Aelana\'s Room Lantern 4', 1337574, lambda state: logic.has_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Twins Door Lantern 1', 1337575, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Twins Door Lantern 2', 1337576, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Under The Twins Lantern 1', 1337577, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Under The Twins Lantern 2', 1337578, logic.can_break_lanterns),
LocationData('Castle Keep', 'Castle Keep: Twins Approach Lantern 1', 1337583, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Twins Approach Lantern 2', 1337584, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Twins Approach Lantern 3', 1337585, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Twins Stairwell Lantern 1', 1337586, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Castle Keep', 'Castle Keep: Twins Stairwell Lantern 2', 1337587, lambda state: logic.has_timestop(state) and logic.can_break_lanterns(state)),
LocationData('Royal towers', 'Royal Towers: Long Balcony Lantern 1', 1337588, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_courtyard or state.has('Water Mask', player))),
LocationData('Royal towers', 'Royal Towers: Long Balcony Lantern 2', 1337589, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_courtyard or state.has('Water Mask', player))),
LocationData('Royal towers', 'Royal Towers: Long Balcony Lantern 3', 1337590, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_courtyard or state.has('Water Mask', player))),
LocationData('Royal towers', 'Royal Towers: Long Balcony Lantern 4', 1337591, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_courtyard or state.has('Water Mask', player))),
LocationData('Royal towers', 'Royal Towers: Long Balcony Lantern 5', 1337592, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_courtyard or state.has('Water Mask', player))),
LocationData('Royal towers', 'Royal Towers: Bottom Struggle Base Lantern 1', 1337593, lambda state: logic.can_break_lanterns(state) and (flooded.flood_courtyard or logic.has_doublejump_of_npc(state))),
LocationData('Royal towers', 'Royal Towers: Bottom Struggle Base Lantern 2', 1337594, lambda state: logic.can_break_lanterns(state) and (flooded.flood_courtyard or logic.has_doublejump_of_npc(state))),
LocationData('Royal towers', 'Royal Towers: Before Bottom Struggle Lantern 1', 1337605, lambda state: logic.can_break_lanterns(state) and (flooded.flood_courtyard or logic.has_doublejump_of_npc(state))),
LocationData('Royal towers', 'Royal Towers: Before Bottom Struggle Lantern 2', 1337606, lambda state: logic.can_break_lanterns(state) and (flooded.flood_courtyard or logic.has_doublejump_of_npc(state))),
LocationData('Royal towers', 'Royal Towers: Past Bottom Struggle Lantern 1', 1337607, lambda state: logic.can_break_lanterns(state) and (flooded.flood_courtyard or logic.has_doublejump_of_npc(state))),
LocationData('Royal towers', 'Royal Towers: Past Bottom Struggle Lantern 2', 1337608, lambda state: logic.can_break_lanterns(state) and (flooded.flood_courtyard or logic.has_doublejump_of_npc(state))),
LocationData('Royal towers (upper)', 'Royal Towers: Aelana\'s Attic Lantern 1', 1337780, lambda state: logic.has_upwarddash(state) and logic.can_break_lanterns(state)),
LocationData('Royal towers (upper)', 'Royal Towers: Aelana\'s Attic Lantern 2', 1337511, lambda state: logic.has_upwarddash(state) and logic.can_break_lanterns(state)),
LocationData('Royal towers (upper)', 'Royal Towers: Aelana\'s Attic Lantern 3', 1337512, lambda state: logic.has_upwarddash(state) and logic.can_break_lanterns(state)),
LocationData('Royal towers (upper)', 'Royal Towers: Before Aelana Lantern 1', 1337595, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Tower Base Entrance Lantern 1', 1337596, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Tower Base Entrance Lantern 2', 1337597, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Tower Base Entrance Lantern 3', 1337598, logic.can_break_lanterns),
LocationData('Royal towers', 'Royal Towers: Lantern Above Time-Stop Demon', 1337599, logic.can_break_lanterns),
LocationData('Royal towers (lower)', 'Royal Towers: Lantern Below Time-Stop Demon', 1337600, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Left Tower Base Lantern 1', 1337601, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Left Tower Base Lantern 2', 1337602, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Left Royal Guard Lantern 1', 1337603, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Left Royal Guard Lantern 2', 1337604, logic.can_break_lanterns),
LocationData('Royal towers', 'Royal Towers: Pre-Climb Lantern 1', 1337609, logic.can_break_lanterns),
LocationData('Royal towers', 'Royal Towers: Pre-Climb Lantern 2', 1337610, logic.can_break_lanterns),
LocationData('Royal towers', 'Royal Towers: Bottom Struggle Lantern', 1337611, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Final Climb Lantern 1', 1337612, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Final Climb Lantern 2', 1337613, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Right Tower Base Lantern 1', 1337614, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Right Tower Base Lantern 2', 1337615, logic.can_break_lanterns),
LocationData('Royal towers (upper)', 'Royal Towers: Right Tower Base Lantern 3', 1337616, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): First Hall Lantern 1', 1337674, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): First Hall Lantern 2', 1337675, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): First Hall Lantern 3', 1337676, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Second Hall Lantern 1', 1337700, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Second Hall Lantern 2', 1337701, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Second Hall Lantern 3', 1337702, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Second Hall Lantern 4', 1337703, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Middle Hall Lantern 1', 1337654, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Middle Hall Lantern 2', 1337655, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Middle Hall Lantern 3', 1337656, logic.can_break_lanterns),
LocationData('Caves of Banishment (Sirens)', 'Caves of Banishment (Sirens): Middle Hall Lantern 4', 1337657, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Not Dead Yet Lantern 1', 1337650, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Not Dead Yet Lantern 2', 1337651, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Not Dead Yet Lantern 3', 1337652, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Not Dead Yet Lantern 4', 1337653, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): First Hall Lantern 1', 1337643, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): First Hall Lantern 2', 1337644, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): First Hall Lantern 3', 1337645, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): First Hall Lantern 4', 1337646, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): First Hall Lantern 5', 1337647, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): First Hall Lantern 6', 1337648, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Second Hall Lantern 1', 1337682, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Second Hall Lantern 2', 1337683, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Second Hall Lantern 3', 1337684, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Second Hall Lantern 4', 1337685, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Shroom Jump Lantern 1', 1337670, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Shroom Jump Lantern 2', 1337671, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Shroom Jump Lantern 3', 1337672, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Shroom Jump Lantern 4', 1337673, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Forked Shaft Lantern 1', 1337686, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Forked Shaft Lantern 2', 1337687, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Forked Shaft Lantern 3', 1337688, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Forked Shaft Lantern 4', 1337689, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Forked Shaft Lantern 5', 1337690, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Lower Fork Vertical Room Lantern 1', 1337708, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Lower Fork Vertical Room Lantern 2', 1337709, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Lower Fork Vertical Room Lantern 3', 1337710, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Lower Fork Vertical Room Lantern 4', 1337711, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Penultimate Hall Lantern 1', 1337658, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Penultimate Hall Lantern 2', 1337659, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Penultimate Hall Lantern 3', 1337660, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Penultimate Hall Lantern 4', 1337661, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Penultimate Hall Lantern 5', 1337662, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Penultimate Hall Lantern 6', 1337663, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Jackpot Ledge Lantern', 1337666, lambda state: logic.has_forwarddash_doublejump(state) and logic.can_break_lanterns(state)),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Waterfall Lantern 1', 1337664, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Waterfall Lantern 2', 1337665, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Waterfall Lantern 3', 1337667, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Waterfall Lantern 4', 1337668, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Waterfall Lantern 5', 1337669, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Rejoined Hallway Lantern 1', 1337691, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Rejoined Hallway Lantern 2', 1337692, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Rejoined Hallway Lantern 3', 1337693, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Rejoined Hallway Lantern 4', 1337694, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Rejoined Hallway Lantern 5', 1337695, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Rejoined Hallway Lantern 6', 1337737, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Lower Fork Start Lantern 1', 1337696, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Lower Fork Start Lantern 2', 1337697, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Post-Fork Room Lantern 1', 1337698, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Post-Fork Room Lantern 2', 1337699, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Last Chance Lantern 1', 1337704, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Last Chance Lantern 2', 1337705, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Last Chance Lantern 3', 1337706, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Last Chance Lantern 4', 1337707, logic.can_break_lanterns),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Mineshaft Lantern 1', 1337677, lambda state: logic.can_break_lanterns(state) and state.has_any({'Gas Mask', 'Talaria Attachment'}, player)),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Mineshaft Lantern 2', 1337678, lambda state: logic.can_break_lanterns(state) and state.has_any({'Gas Mask', 'Talaria Attachment'}, player)),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Mineshaft Lantern 3', 1337679, lambda state: logic.can_break_lanterns(state) and state.has_any({'Gas Mask', 'Talaria Attachment'}, player)),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Mineshaft Lantern 4', 1337680, lambda state: logic.can_break_lanterns(state) and state.has_any({'Gas Mask', 'Talaria Attachment'}, player)),
LocationData('Caves of Banishment (Flooded)', 'Caves of Banishment (Maw): Mineshaft Lantern 5', 1337681, lambda state: logic.can_break_lanterns(state) and state.has_any({'Gas Mask', 'Talaria Attachment'}, player)),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Intro Room Lantern', 1337617, logic.can_break_lanterns),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Middle Cave Lantern', 1337621, logic.can_break_lanterns),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Uncrashed Site Lantern 1', 1337622, logic.can_break_lanterns),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Uncrashed Site Lantern 2', 1337623, logic.can_break_lanterns),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Uncrashed Site Lantern 3', 1337624, logic.can_break_lanterns),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Uncrashed Site Lantern 4', 1337625, logic.can_break_lanterns),
LocationData('Upper Lake Serene', 'Lake Serene (Upper): Past First Vine Lantern', 1337626, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Lake Serene (Upper): Past Cantoran Lantern', 1337634, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Lake Serene (Upper): Fork Dry Lantern', 1337631, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Lake Serene (Upper): Fork Wet Lantern 1', 1337632, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Left Side forest Caves', 'Lake Serene (Upper): Fork Wet Lantern 2', 1337633, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Above The Eels Lantern 1', 1337638, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Above The Eels Lantern 2', 1337639, logic.can_break_lanterns),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Under The Eels Lantern 1', 1337640, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Under The Eels Lantern 2', 1337641, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Under The Eels Lantern 3', 1337642, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Under The Eels Lantern 4', 1337649, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Left Side forest Caves', 'Lake Serene (Lower): Past the Eels Lantern', 1337630, lambda state: logic.can_break_lanterns(state) and state.has('Water Mask', player)),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Underwater Secret Lantern 1', 1337618, lambda state: logic.can_break_lanterns(state) and logic.can_break_walls(state)),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Underwater Secret Lantern 2', 1337619, lambda state: logic.can_break_lanterns(state) and logic.can_break_walls(state)),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Underwater Secret Lantern 3', 1337620, lambda state: logic.can_break_lanterns(state) and logic.can_break_walls(state)),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Water Spikes Lantern 1', 1337635, logic.can_break_lanterns),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Water Spikes Lantern 2', 1337636, logic.can_break_lanterns),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Water Spikes Lantern 3', 1337637, logic.can_break_lanterns),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Underwater Lantern 1', 1337627, logic.can_break_lanterns),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Underwater Lantern 2', 1337628, logic.can_break_lanterns),
LocationData('Lower Lake Serene', 'Lake Serene (Lower): Underwater Lantern 3', 1337629, logic.can_break_lanterns),
LocationData('Military Fortress', 'Military Fortress: Entrance Lantern 1', 1337260, logic.can_break_lanterns),
LocationData('Military Fortress', 'Military Fortress: Entrance Lantern 2', 1337261, logic.can_break_lanterns),
LocationData('Military Fortress', 'Military Fortress: Bombing Room Lower Lantern 1', 1337264, logic.can_break_lanterns),
LocationData('Military Fortress', 'Military Fortress: Bombing Room Lower Lantern 2', 1337266, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Bombing Room Upper Lantern 1', 1337263, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Bombing Room Upper Lantern 2', 1337265, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Left Bridge Lantern 1', 1337267, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Left Bridge Lantern 2', 1337268, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Left Bridge Lantern 3', 1337269, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Middle Room Lantern 1', 1337270, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Middle Room Lantern 2', 1337271, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Right Bridge Lantern 1', 1337274, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Right Bridge Lantern 2', 1337275, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Right Bridge Lantern 3', 1337276, logic.can_break_lanterns),
LocationData('Military Fortress (hangar)', 'Military Fortress: Spike Room Lantern 1', 1337262, lambda state: logic.can_break_lanterns(state) and (state.has('Water Mask', player) if flooded.flood_lab else logic.has_doublejump(state))),
LocationData('Military Fortress (hangar)', 'Military Fortress: Spike Room Lantern 2', 1337272, lambda state: logic.can_break_lanterns(state) and (state.has('Water Mask', player) if flooded.flood_lab else logic.has_doublejump(state))),
LocationData('Military Fortress (hangar)', 'Military Fortress: Pedestal Lantern', 1337273, lambda state: logic.can_break_lanterns(state) and (state.has('Water Mask', player) if flooded.flood_lab else (logic.has_doublejump_of_npc(state) or logic.has_forwarddash_doublejump(state)))),
LocationData('Lab Entrance', 'Lab: Intro Hallway Lantern 1', 1337294, logic.can_break_lanterns),
LocationData('Lab Entrance', 'Lab: Intro Hallway Lantern 2', 1337782, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Coffee Lantern 1', 1337305, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Coffee Lantern 2', 1337306, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Coffee Lantern 3', 1337307, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Lower Trash Entrance Lantern 1', 1337277, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Lower Trash Entrance Lantern 2', 1337278, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 1', 1337297, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 2', 1337298, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 3', 1337299, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 4', 1337300, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 5', 1337301, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 6', 1337302, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 7', 1337303, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Main Shaft Lantern 8', 1337304, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Trash Stairs Lantern 1', 1337281, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Trash Stairs Lantern 2', 1337506, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Exp. 13 Terminal Lantern 1', 1337295, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Exp. 13 Terminal Lantern 2', 1337296, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Left Terminal Lantern 1', 1337308, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Left Terminal Lantern 2', 1337309, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Trash Jump Lantern 1', 1337282, lambda state: logic.can_break_lanterns(state) and (logic.has_doublejump_of_npc(state) if options.lock_key_amadeus else logic.has_upwarddash(state))),
LocationData('Main Lab', 'Lab: Trash Jump Lantern 2', 1337283, lambda state: logic.can_break_lanterns(state) and (logic.has_doublejump_of_npc(state) if options.lock_key_amadeus else logic.has_upwarddash(state))),
LocationData('Lab Research', 'Lab: Spider Hell Entrance Lantern 1', 1337290, logic.can_break_lanterns),
LocationData('Lab Research', 'Lab: Spider Hell Entrance Lantern 2', 1337291, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Lower Trash Lantern 1', 1337292, lambda state: logic.can_break_lanterns(state) and (logic.has_doublejump_of_npc(state) if options.lock_key_amadeus else logic.has_upwarddash(state))),
LocationData('Main Lab', 'Lab: Lower Trash Lantern 2', 1337293, lambda state: logic.can_break_lanterns(state) and (logic.has_doublejump_of_npc(state) if options.lock_key_amadeus else logic.has_upwarddash(state))),
LocationData('The lab (upper)', 'Lab: File Cabinet Lantern 1', 1337310, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: File Cabinet Lantern 2', 1337311, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: File Cabinet Staircase Lantern 1', 1337286, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: File Cabinet Staircase Lantern 2', 1337287, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: File Cabinet Staircase Lantern 3', 1337288, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: File Cabinet Staircase Lantern 4', 1337289, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: Genza Door Lantern 1', 1337284, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: Genza Door Lantern 2', 1337285, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: Download and Chest Lantern 1', 1337312, logic.can_break_lanterns),
LocationData('The lab (upper)', 'Lab: Download and Chest Lantern 2', 1337313, logic.can_break_lanterns),
LocationData('Main Lab', 'Lab: Sentry Lantern 1', 1337279, lambda state: logic.can_break_lanterns(state) and (not options.lock_key_amadeus or state.has('Lab Access Genza', player) or logic.can_teleport_to(state, "Time", "GateDadsTower"))),
LocationData('Main Lab', 'Lab: Sentry Lantern 2', 1337280, lambda state: logic.can_break_lanterns(state) and (not options.lock_key_amadeus or state.has('Lab Access Genza', player) or logic.can_teleport_to(state, "Time", "GateDadsTower"))),
LocationData('Emperors tower (courtyard)', 'Emperor\'s Tower: Courtyard Lantern 1', 1337314, logic.can_break_lanterns),
LocationData('Emperors tower (courtyard)', 'Emperor\'s Tower: Courtyard Lantern 2', 1337316, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard Staircase Lantern', 1337315, logic.can_break_lanterns),
LocationData('Emperors tower (courtyard)', 'Emperor\'s Tower: Courtyard Bottom Lantern 1', 1337342, logic.can_break_lanterns),
LocationData('Emperors tower (courtyard)', 'Emperor\'s Tower: Courtyard Bottom Lantern 2', 1337343, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard Floor Secret Lantern 1', 1337336, lambda state: logic.has_upwarddash(state) and logic.can_break_walls(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard Floor Secret Lantern 2', 1337337, lambda state: logic.has_upwarddash(state) and logic.can_break_walls(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard Giantess Lantern 1', 1337331, lambda state: logic.has_upwarddash(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard Giantess Lantern 2', 1337332, lambda state: logic.has_upwarddash(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Courtyard Upper Lantern', 1337333, lambda state: logic.has_upwarddash(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Hallway Lantern 1', 1337317, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Hallway Lantern 2', 1337318, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Hallway Lantern 3', 1337319, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Hallway Lantern 4', 1337320, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Left Room Lantern 1', 1337321, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Left Room Lantern 2', 1337322, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Outside Way Up There Lantern 1', 1337323, lambda state: logic.has_doublejump_of_npc(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Outside Way Up There Lantern 2', 1337324, lambda state: logic.has_doublejump_of_npc(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Way Up There Lantern 1', 1337325, lambda state: logic.has_doublejump_of_npc(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Way Up There Lantern 2', 1337326, lambda state: logic.has_doublejump_of_npc(state) and logic.can_break_lanterns(state)),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Left Tower Lantern 1', 1337327, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Left Tower Lantern 2', 1337328, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Galactic Sage Lantern 1', 1337329, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Galactic Sage Lantern 2', 1337330, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Save Room Lantern 1', 1337334, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Save Room Lantern 2', 1337335, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Climb Past Stairs Lantern 1', 1337338, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Climb Past Stairs Lantern 2', 1337339, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Climb Past Stairs Lantern 3', 1337340, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Climb Past Stairs Lantern 4', 1337341, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Middle Bridge Lantern 1', 1337344, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Middle Bridge Lantern 2', 1337345, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Middle Bridge Lantern 3', 1337346, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Middle Bridge Lantern 4', 1337347, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Middle Bridge Lantern 5', 1337348, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Upper Left Tower Lantern 1', 1337349, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Upper Left Tower Lantern 2', 1337350, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Right Tower Lantern 1', 1337351, logic.can_break_lanterns),
LocationData('Emperors tower', 'Emperor\'s Tower: Lower Right Tower Lantern 2', 1337352, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Pyramid Entrance Lantern 1', 1337369, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Pyramid Entrance Lantern 2', 1337370, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Pyramid Entrance Lantern 3', 1337371, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Pyramid Entrance Lantern 4', 1337372, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Pyramid Entrance Lantern 5', 1337373, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Pyramid Entrance Lantern 6', 1337374, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Training Dummy Lantern 1', 1337375, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Training Dummy Lantern 2', 1337376, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Entrance Lantern 1', 1337377, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Entrance Lantern 2', 1337378, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Rubble Lantern 1', 1337399, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Rubble Lantern 2', 1337400, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Rubble Lantern 3', 1337401, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Entrance Climb Lantern 1', 1337393, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Entrance Climb Lantern 2', 1337394, logic.can_break_lanterns),
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Why Not It\'s Right There Lantern', 1337386, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: First Enemy Lantern 1', 1337387, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: First Enemy Lantern 2', 1337388, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Upper-Left Stairway Lantern 1', 1337381, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Upper-Left Stairway Lantern 2', 1337382, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Upper-Left Stairway Lantern 3', 1337383, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret Shaft Lantern 1', 1337402, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret Shaft Lantern 2', 1337403, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret Lantern 1', 1337389, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret Lantern 2', 1337390, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret Lantern 3', 1337391, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret Lantern 4', 1337392, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Left Hallway Lantern 1', 1337395, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Left Hallway Lantern 2', 1337396, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Left Hallway Lantern 3', 1337397, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Left Hallway Lantern 4', 1337398, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Pit Secret Lantern 1', 1337404, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Pit Secret Lantern 2', 1337405, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Pit Secret\'s Secret Lantern 1', 1337406, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Pit Secret\'s Secret Lantern 2', 1337407, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Outside Inner Warp Lantern 1', 1337408, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Outside Inner Warp Lantern 2', 1337409, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Nightmare Stairway Entrance Lantern', 1337410, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Conviction Lantern 1', 1337411, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Conviction Lantern 2', 1337412, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: A Long Fall Lantern 1', 1337415, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: A Long Fall Lantern 2', 1337416, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_shaft or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Last Chance Before Shaft Lantern 1', 1337417, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Last Chance Before Shaft Lantern 2', 1337418, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Pit Secret Wall Lantern', 1337419, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Post-Shaft Hallway Lantern 1', 1337420, logic.can_break_lanterns),
LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Post-Shaft Hallway Lantern 2', 1337421, logic.can_break_lanterns),
LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Upper-Right Stairway Lantern 1', 1337384, logic.can_break_lanterns),
LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Upper-Right Stairway Lantern 2', 1337385, logic.can_break_lanterns),
LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Nightmare Stairway Lantern 1', 1337379, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_back or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Nightmare Stairway Lantern 2"', 1337380, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_back or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Nightmare Door Lantern 1', 1337413, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_back or state.has('Water Mask', player))),
LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Nightmare Door Lantern 2', 1337414, lambda state: logic.can_break_lanterns(state) and (not flooded.flood_pyramid_back or state.has('Water Mask', player))),
)
if not options or options.gyre_archives:
location_table += (
LocationData('Temporal Gyre', 'Temporal Gyre: Room 1 Lantern 1', 1337353, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 1 Lantern 2', 1337354, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 2 Lantern 1', 1337355, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 2 Lantern 2', 1337356, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 3 Lantern 1', 1337357, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 3 Lantern 2', 1337358, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 4 Lantern 1', 1337359, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 4 Lantern 2', 1337360, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 5 Lantern 1', 1337361, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 5 Lantern 2', 1337362, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 6 Lantern 1', 1337363, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 6 Lantern 2', 1337364, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 7 Lantern 1', 1337365, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 7 Lantern 2', 1337366, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 8 Lantern 1', 1337367, logic.can_break_lanterns),
LocationData('Temporal Gyre', 'Temporal Gyre: Room 8 Lantern 2', 1337368, logic.can_break_lanterns),
)
return location_table

View File

@@ -24,6 +24,7 @@ class TimespinnerLogic:
self.flag_eye_spy = bool(options and options.eye_spy)
self.flag_unchained_keys = bool(options and options.unchained_keys)
self.flag_prism_break = bool(options and options.prism_break)
self.flag_find_the_flame = bool(options and options.find_the_flame)
if precalculated_weights:
if self.flag_unchained_keys:
@@ -93,6 +94,12 @@ class TimespinnerLogic:
else:
return True
def can_break_lanterns(self, state: CollectionState) -> bool:
if self.flag_find_the_flame:
return state.has('Cube of Bodie', self.player)
else:
return True
def can_kill_all_3_bosses(self, state: CollectionState) -> bool:
if self.flag_prism_break:
return state.has_all({'Laser Access M', 'Laser Access I', 'Laser Access A'}, self.player)

View File

@@ -367,8 +367,8 @@ class TrapChance(Range):
class Traps(OptionList):
"""List of traps that may be in the item pool to find"""
display_name = "Traps Types"
valid_keys = { "Meteor Sparrow Trap", "Poison Trap", "Chaos Trap", "Neurotoxin Trap", "Bee Trap", "Throw Stun Trap", "Spider Trap" }
default = [ "Meteor Sparrow Trap", "Poison Trap", "Chaos Trap", "Neurotoxin Trap", "Bee Trap", "Throw Stun Trap", "Spider Trap" ]
valid_keys = { "Meteor Sparrow Trap", "Poison Trap", "Chaos Trap", "Neurotoxin Trap", "Bee Trap", "Throw Stun Trap", "Spider Trap", "Lights Out Trap", "Palm Punch Trap" }
default = [ "Meteor Sparrow Trap", "Poison Trap", "Chaos Trap", "Neurotoxin Trap", "Bee Trap", "Throw Stun Trap", "Spider Trap", "Lights Out Trap", "Palm Punch Trap" ]
class PresentAccessWithWheelAndSpindle(Toggle):
"""When inverted, allows using the refugee camp warp when both the Timespinner Wheel and Spindle is acquired."""
@@ -399,6 +399,14 @@ class RoyalRoadblock(Toggle):
"""The Royal Towers entrance door requires a royal orb (Plasma Orb, Plasma Geyser, or Royal Ring) to enter."""
display_name = "Royal Roadblock"
class PureTorcher(Toggle):
"""All lanterns contain checks. (Except tutorial)"""
display_name = "Pure Torcher"
class FindTheFlame(Toggle):
"""Lanterns in 'Pure Torcher' will not break without new item 'Cube of Bodie'."""
display_name = "Find the Flame"
@dataclass
class TimespinnerOptions(PerGameCommonOptions, DeathLinkMixin):
start_with_jewelry_box: StartWithJewelryBox
@@ -441,6 +449,8 @@ class TimespinnerOptions(PerGameCommonOptions, DeathLinkMixin):
pyramid_start: PyramidStart
gate_keep: GateKeep
royal_roadblock: RoyalRoadblock
pure_torcher: PureTorcher
find_the_flame: FindTheFlame
trap_chance: TrapChance
traps: Traps

View File

@@ -28,9 +28,11 @@ def create_regions_and_locations(world: MultiWorld, player: int, options: Timesp
create_region(world, player, locations_per_region, 'Sealed Caves (Sirens)'),
create_region(world, player, locations_per_region, 'Military Fortress'),
create_region(world, player, locations_per_region, 'Military Fortress (hangar)'),
create_region(world, player, locations_per_region, 'The lab'),
create_region(world, player, locations_per_region, 'The lab (power off)'),
create_region(world, player, locations_per_region, 'Lab Entrance'),
create_region(world, player, locations_per_region, 'Main Lab'),
create_region(world, player, locations_per_region, 'Lab Research'),
create_region(world, player, locations_per_region, 'The lab (upper)'),
create_region(world, player, locations_per_region, 'Emperors tower (courtyard)'),
create_region(world, player, locations_per_region, 'Emperors tower'),
create_region(world, player, locations_per_region, 'Skeleton Shaft'),
create_region(world, player, locations_per_region, 'Sealed Caves (Xarion)'),
@@ -41,6 +43,7 @@ def create_regions_and_locations(world: MultiWorld, player: int, options: Timesp
create_region(world, player, locations_per_region, 'Lower Lake Serene'),
create_region(world, player, locations_per_region, 'Caves of Banishment (upper)'),
create_region(world, player, locations_per_region, 'Caves of Banishment (Maw)'),
create_region(world, player, locations_per_region, 'Caves of Banishment (Flooded)'),
create_region(world, player, locations_per_region, 'Caves of Banishment (Sirens)'),
create_region(world, player, locations_per_region, 'Castle Ramparts'),
create_region(world, player, locations_per_region, 'Castle Keep'),
@@ -109,16 +112,19 @@ def create_regions_and_locations(world: MultiWorld, player: int, options: Timesp
connect(world, player, 'Military Fortress', 'Temporal Gyre', lambda state: state.has('Timespinner Wheel', player) and logic.can_kill_all_3_bosses(state))
connect(world, player, 'Military Fortress', 'Military Fortress (hangar)', logic.has_doublejump)
connect(world, player, 'Military Fortress (hangar)', 'Military Fortress')
connect(world, player, 'Military Fortress (hangar)', 'The lab', lambda state: logic.has_keycard_B(state) and (state.has('Water Mask', player) if flooded.flood_lab else logic.has_doublejump(state)))
connect(world, player, 'Military Fortress (hangar)', 'Lab Entrance', lambda state: state.has('Water Mask', player) if flooded.flood_lab else logic.has_doublejump(state))
connect(world, player, 'Lab Entrance', 'Main Lab', lambda state: logic.has_keycard_B(state))
connect(world, player, 'Main Lab', 'Lab Entrance')
connect(world, player, 'Lab Entrance', 'Military Fortress (hangar)')
connect(world, player, 'Temporal Gyre', 'Military Fortress')
connect(world, player, 'The lab', 'Military Fortress')
connect(world, player, 'The lab', 'The lab (power off)', lambda state: options.lock_key_amadeus or logic.has_doublejump_of_npc(state))
connect(world, player, 'The lab (power off)', 'The lab', lambda state: not flooded.flood_lab or state.has('Water Mask', player))
connect(world, player, 'The lab (power off)', 'The lab (upper)', lambda state: logic.has_forwarddash_doublejump(state) and ((not options.lock_key_amadeus) or state.has('Lab Access Genza', player)))
connect(world, player, 'The lab (upper)', 'The lab (power off)', lambda state: options.lock_key_amadeus and state.has('Lab Access Genza', player))
connect(world, player, 'The lab (upper)', 'Emperors tower', logic.has_forwarddash_doublejump)
connect(world, player, 'Main Lab', 'Lab Research', lambda state: state.has('Lab Access Research', player) if options.lock_key_amadeus else logic.has_doublejump_of_npc(state))
connect(world, player, 'Main Lab', 'The lab (upper)', lambda state: logic.has_forwarddash_doublejump(state) and ((not options.lock_key_amadeus) or state.has('Lab Access Genza', player)))
connect(world, player, 'The lab (upper)', 'Main Lab', lambda state: options.lock_key_amadeus and state.has('Lab Access Genza', player))
connect(world, player, 'The lab (upper)', 'Emperors tower (courtyard)', logic.has_forwarddash_doublejump)
connect(world, player, 'The lab (upper)', 'Ancient Pyramid (entrance)', lambda state: state.has_all({'Timespinner Wheel', 'Timespinner Spindle', 'Timespinner Gear 1', 'Timespinner Gear 2', 'Timespinner Gear 3'}, player))
connect(world, player, 'Emperors tower', 'The lab (upper)')
connect(world, player, 'Emperors tower (courtyard)', 'The lab (upper)')
connect(world, player, 'Emperors tower (courtyard)', 'Emperors tower', logic.has_doublejump)
connect(world, player, 'Emperors tower', 'Emperors tower (courtyard)')
connect(world, player, 'Skeleton Shaft', 'Lake desolation')
connect(world, player, 'Skeleton Shaft', 'Sealed Caves (Xarion)', logic.has_keycard_A)
connect(world, player, 'Skeleton Shaft', 'Space time continuum', logic.has_teleport)
@@ -145,6 +151,7 @@ def create_regions_and_locations(world: MultiWorld, player: int, options: Timesp
connect(world, player, 'Caves of Banishment (upper)', 'Space time continuum', logic.has_teleport)
connect(world, player, 'Caves of Banishment (Maw)', 'Caves of Banishment (upper)', lambda state: logic.has_doublejump(state) if not flooded.flood_maw else state.has('Water Mask', player))
connect(world, player, 'Caves of Banishment (Maw)', 'Caves of Banishment (Sirens)', lambda state: state.has_any({'Gas Mask', 'Talaria Attachment'}, player) )
connect(world, player, 'Caves of Banishment (Maw)', 'Caves of Banishment (Flooded)', lambda state: flooded.flood_maw or state.has('Water Mask', player))
connect(world, player, 'Caves of Banishment (Maw)', 'Space time continuum', logic.has_teleport)
connect(world, player, 'Caves of Banishment (Sirens)', 'Forest')
connect(world, player, 'Castle Ramparts', 'Forest')

View File

@@ -132,6 +132,8 @@ class TimespinnerWorld(World):
"PyramidStart": self.options.pyramid_start.value,
"GateKeep": self.options.gate_keep.value,
"RoyalRoadblock": self.options.royal_roadblock.value,
"PureTorcher": self.options.pure_torcher.value,
"FindTheFlame": self.options.find_the_flame.value,
"Traps": self.options.traps.value,
"DeathLink": self.options.death_link.value,
"StinkyMaw": True,
@@ -298,7 +300,9 @@ class TimespinnerWorld(World):
if not item.advancement:
return item
if (name == 'Tablet' or name == 'Library Keycard V') and not self.options.downloadable_items:
if name == 'Tablet' and not self.options.downloadable_items:
item.classification = ItemClassification.filler
elif name == 'Library Keycard V' and not (self.options.downloadable_items or self.options.pure_torcher):
item.classification = ItemClassification.filler
elif name == 'Oculus Ring' and not self.options.eye_spy:
item.classification = ItemClassification.filler
@@ -315,6 +319,8 @@ class TimespinnerWorld(World):
item.classification = ItemClassification.filler
elif name == "Drawbridge Key" and not self.options.gate_keep:
item.classification = ItemClassification.filler
elif name == "Cube of Bodie" and not self.options.find_the_flame:
item.classification = ItemClassification.filler
return item
@@ -361,6 +367,9 @@ class TimespinnerWorld(World):
if not self.options.gate_keep:
excluded_items.add('Drawbridge Key')
if not self.options.find_the_flame:
excluded_items.add('Cube of Bodie')
for item in self.multiworld.precollected_items[self.player]:
if item.name not in self.item_name_groups['UseItem']:
excluded_items.add(item.name)