-
Notifications
You must be signed in to change notification settings - Fork 773
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Timespinner: support new flags and settings from the randomizer #4559
base: main
Are you sure you want to change the base?
Changes from 5 commits
c349606
5f327b1
e546a28
0799321
f1f1e9f
0ec28c8
6717be6
21f6c6e
1333275
1d08ab1
7565ae4
2894621
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -92,15 +92,15 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio | |
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, logic.has_upwarddash), | ||
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 ), | ||
LocationData('The lab', 'Lab: Below lab entrance', 1337069, logic.has_doublejump), | ||
LocationData('The lab (power off)', 'Lab: Trash jump room', 1337070), | ||
LocationData('The lab (power off)', 'Lab: Dynamo Works', 1337071), | ||
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('Lab Access Research', player) and state.has('Lab Access Dynamo', player)) ), | ||
sgrunt marked this conversation as resolved.
Show resolved
Hide resolved
|
||
LocationData('The lab (upper)', 'Lab: Genza (Blob Mom)', 1337072), | ||
LocationData('The lab (power off)', 'Lab: Experiment #13', 1337073), | ||
LocationData('The lab (power off)', '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, logic.has_keycard_A), | ||
LocationData('The lab (power off)', 'Lab: Spider Hell', 1337076, lambda state: logic.has_keycard_A and not options.lock_key_amadeus or state.has('Lab Access Research', player)), | ||
LocationData('Emperors tower', '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)), | ||
|
@@ -214,11 +214,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)), | ||
LocationData('The lab (power off)', 'Lab: Sentry platform terminal (Origins)', 1337167, 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 Research', player))), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've changed this here, but I need to verify that the problem is what I think it is and also fix in the main rando if so. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rando PR has been updated with the fix. |
||
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)) | ||
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))) | ||
) | ||
|
||
# 1337176 - 1337176 Cantoran | ||
|
@@ -254,7 +254,17 @@ def get_location_datas(player: Optional[int], options: Optional[TimespinnerOptio | |
LocationData('Caves of Banishment (Maw)', 'Caves of Banishment (Maw): Journal - Lower Left Caves (Naivety)', 1337198, lambda state: not flooded.flood_maw or state.has('Water Mask', player)) | ||
) | ||
|
||
# 1337199 - 1337236 Reserved for future use | ||
# 1337199 - 1337232 Reserved for future use | ||
|
||
# 1337233 - 1337235 Pyramid Start checks | ||
if not options or options.pyramid_start: | ||
location_table += ( | ||
LocationData('Ancient Pyramid (entrance)', 'Dark Forest: Training Dummy', 1337233), | ||
LocationData('Ancient Pyramid (entrance)', 'Temporal Gyre: Forest Entrance', 1337234, lambda state: logic.has_upwarddash(state) or logic.can_teleport_to(state, "Time", "GateGyre")), | ||
LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Rubble', 1337235), | ||
) | ||
|
||
# 1337236 Nightmare door | ||
|
||
# 1337237 - 1337245 GyreArchives | ||
if not options or options.gyre_archives: | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -52,11 +52,12 @@ def __init__(self, options: TimespinnerOptions, random: Random): | |
self.flood_lab = False | ||
|
||
self.pyramid_keys_unlock, self.present_key_unlock, self.past_key_unlock, self.time_key_unlock = \ | ||
self.get_pyramid_keys_unlocks(options, random, self.flood_maw, self.flood_xarion) | ||
self.get_pyramid_keys_unlocks(options, random, self.flood_maw, self.flood_xarion, self.flood_lab) | ||
|
||
@staticmethod | ||
def get_pyramid_keys_unlocks(options: TimespinnerOptions, random: Random, | ||
is_maw_flooded: bool, is_xarion_flooded: bool) -> Tuple[str, str, str, str]: | ||
is_maw_flooded: bool, is_xarion_flooded: bool, | ||
is_lab_flooded: bool) -> Tuple[str, str, str, str]: | ||
|
||
present_teleportation_gates: List[str] = [ | ||
"GateKittyBoss", | ||
|
@@ -85,10 +86,15 @@ def get_pyramid_keys_unlocks(options: TimespinnerOptions, random: Random, | |
if not is_maw_flooded: | ||
past_teleportation_gates.append("GateMaw") | ||
|
||
if not is_xarion_flooded: | ||
present_teleportation_gates.append("GateXarion") | ||
if options.risky_warps: | ||
past_teleportation_gates.append("GateLakeSereneLeft") | ||
present_teleportation_gates.append("GateDadsTower") | ||
if not is_xarion_flooded: | ||
present_teleportation_gates.append("GateXarion") | ||
if not is_lab_flooded: | ||
present_teleportation_gates.append("GateLabEntrance") | ||
|
||
if options.inverted: | ||
if options.inverted or (options.pyramid_start and not options.back_to_the_future): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Strictly speaking this doesn't match the in-randomiser logic (which will allow both past and present for pyramid start mode based on my understanding), but generation tends to fail out if I don't restrict this case to present gates. |
||
all_gates: Tuple[str, ...] = present_teleportation_gates | ||
else: | ||
all_gates: Tuple[str, ...] = past_teleportation_gates + present_teleportation_gates | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These three colours are the same as those used by the randomiser's item tracker for the three Laser Access items.