Skip to content

Commit 0969e06

Browse files
added HopToIt player option for adding higher difficulty jumping challenges
1 parent 8a00c30 commit 0969e06

4 files changed

Lines changed: 22 additions & 4 deletions

File tree

worlds/crystal_project/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def generate_early(self):
137137
self.options.max_level.value = slot_data["maxLevel"]
138138
self.options.key_mode.value = slot_data["keyMode"]
139139
self.options.obscure_routes.value = slot_data["obscureRoutes"]
140+
self.options.hop_to_it.value = slot_data["hopToIt"]
140141
self.options.include_summon_abilities.value = slot_data["includeSummonAbilities"]
141142
self.options.include_scholar_abilities.value = slot_data["includeScholarAbilities"]
142143
self.options.use_mods.value = slot_data["useMods"]
@@ -743,6 +744,7 @@ def fill_slot_data(self) -> Dict[str, Any]:
743744
"maxLevel": self.options.max_level.value,
744745
"keyMode": self.options.key_mode.value,
745746
"obscureRoutes": bool(self.options.obscure_routes.value),
747+
"hopToIt": self.options.hop_to_it.value,
746748
"autoSpendLP": bool(self.options.auto_spend_lp.value),
747749
"autoEquipPassives": bool(self.options.auto_equip_passives.value),
748750
"easyLeveling": bool(self.options.easy_leveling.value),

worlds/crystal_project/locations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1231,7 +1231,7 @@ def get_treasure_and_npc_locations(player: int, options: CrystalProjectOptions |
12311231
#Jidamba Eaclaneya
12321232
#Treasure chests
12331233
#Four Tricky Block Branches
1234-
LocationData(EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION, JIDAMBA_EACLANEYA_DISPLAY_NAME + " Chest - Climb the lamp in the south room", 2799 + treasure_index_offset, lambda state: logic.has_horizontal_movement(state) and logic.has_vertical_movement(state)), #Celestial Crown chest
1234+
LocationData(EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION, JIDAMBA_EACLANEYA_DISPLAY_NAME + " Chest - Climb the lamp in the south room", 2799 + treasure_index_offset, lambda state: ((logic.has_horizontal_movement(state) and options.hop_to_it.value >= options.hop_to_it.option_fancy_footwork) or logic.has_glide(state)) and logic.has_vertical_movement(state)), #Celestial Crown chest
12351235
LocationData(EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION, JIDAMBA_EACLANEYA_DISPLAY_NAME + " Chest - At the end of spike hallway", 2755 + treasure_index_offset, lambda state: logic.has_glide(state)), #Flame Sword chest
12361236
LocationData(EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION, JIDAMBA_EACLANEYA_DISPLAY_NAME + " Chest - Monster cubby", 2920 + treasure_index_offset), #Jidamba Eaclaneya map chest
12371237
#Land of Timer Fishes

worlds/crystal_project/options.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,20 @@ class ObscureRoutes(Toggle):
329329
"""
330330
display_name = "Obscure Routes"
331331

332+
class HopToIt(Choice):
333+
"""
334+
No Tricks: No fancy hops expected.
335+
Fancy Footwork: Some above-average jumping skill expected, e.g. jumping past the pushblocks in Eaclaneya with no mounts or Auto-Jump-level jumping precision.
336+
One Hop Beyond: More jumping tricks expected, like ibek jumping up from underneath a ledge.
337+
Pray: You didn't *want* the Golden Quintar for the Sequoia, did you?
338+
"""
339+
display_name = "Hop To It"
340+
option_no_tricks = 0
341+
option_fancy_footwork = 1
342+
option_one_hop_beyond = 2
343+
option_pray = 3
344+
default = 0
345+
332346
class PrioritizeCrystals(DefaultOnToggle):
333347
"""
334348
When enabled, crystals will be prioritized when placing progression items.
@@ -493,6 +507,7 @@ class CrystalProjectOptions(PerGameCommonOptions):
493507
max_level: MaxLevel
494508
key_mode: KeyMode
495509
obscure_routes: ObscureRoutes
510+
hop_to_it: HopToIt
496511
prioritize_crystals: PrioritizeCrystals
497512
auto_spend_lp: AutoSpendLP
498513
auto_equip_passives: AutoEquipPassives
@@ -511,7 +526,7 @@ class CrystalProjectOptions(PerGameCommonOptions):
511526
crystal_project_option_groups: Dict[str, List[Any]] = {
512527
"Goal Options": [Goal, ClamshellGoalQuantity, ExtraClamshellsInPool, AstleyJobQuantity],
513528
"Location Options": [IncludedRegions, JobRando, StartingJobQuantity, DisableSparks, KillBossesMode, Shopsanity, Regionsanity, RegionsanityStarterRegionMinLevel, RegionsanityStarterRegionMaxLevel, HomePointHustle],
514-
"Progression Options": [ProgressiveMountMode, StartingLevel, LevelGating, LevelComparedToEnemies, ProgressiveLevelSize, MaxLevel, KeyMode, ObscureRoutes, PrioritizeCrystals, AutoSpendLP, AutoEquipPassives, EasyLeveling],
529+
"Progression Options": [ProgressiveMountMode, StartingLevel, LevelGating, LevelComparedToEnemies, ProgressiveLevelSize, MaxLevel, KeyMode, ObscureRoutes, HopToIt, PrioritizeCrystals, AutoSpendLP, AutoEquipPassives, EasyLeveling],
515530
"Item Pool Options": [ProgressiveEquipmentMode, StartWithTreasureFinder, StartWithMaps, FillFullMap, IncludeSummonAbilities, IncludeScholarAbilities],
516531
"Bonus Fun": [ItemInfoMode, RandomizeMusic, UseMods]
517532
}

worlds/crystal_project/regions.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from .constants.display_regions import *
1010
from .constants.home_points import *
1111
from .constants.level_requirements import *
12+
from .constants.mounts import *
1213
from .constants.teleport_stones import *
1314
from .constants.region_passes import *
1415

@@ -552,7 +553,7 @@ def init_areas(world: "CrystalProjectWorld", locations: List[LocationData], opti
552553
fancy_add_exits(world, TOWER_OF_ZOT_AP_REGION, [POKO_POKO_DESERT_AP_REGION, POKO_POKO_EAST_PLATEAU_AP_REGION, RUINS_CRUMBLING_ON_SHORE_AP_REGION, ANCIENT_LABYRINTH_AP_REGION, SALMON_BAY_AP_REGION, SALMON_RIVER_MOUTH_AP_REGION],
553554
{POKO_POKO_EAST_PLATEAU_AP_REGION: lambda state: logic.has_glide(state),
554555
ANCIENT_LABYRINTH_AP_REGION: lambda state: (state.has(POKO_POKO_DESERT_PASS, player) or options.regionsanity.value == options.regionsanity.option_disabled) and (state.has(ANCIENT_TABLET_A, player) or logic.obscure_routes_on(state)) and logic.has_vertical_movement(state) and logic.has_glide(state),
555-
SALMON_BAY_AP_REGION: lambda state: logic.has_vertical_movement(state),
556+
SALMON_BAY_AP_REGION: lambda state: logic.has_vertical_movement(state) and options.hop_to_it.value >= options.hop_to_it.option_one_hop_beyond,
556557
SALMON_RIVER_MOUTH_AP_REGION: lambda state: logic.has_vertical_movement(state) and logic.has_glide(state)})
557558
fancy_add_exits(world, POKO_POKO_LAKE_DELENDE_PASS_AP_REGION, [POKO_POKO_EAST_PLATEAU_AP_REGION, POKO_POKO_SPAWNING_MEADOWS_PASS_AP_REGION, LAKE_DELENDE_AP_REGION, SALMON_RIVER_MOUTH_AP_REGION],
558559
{POKO_POKO_SPAWNING_MEADOWS_PASS_AP_REGION: lambda state: logic.has_glide(state),
@@ -917,7 +918,7 @@ def init_areas(world: "CrystalProjectWorld", locations: List[LocationData], opti
917918
fancy_add_exits(world, EACLANEYA_ENTRANCE_AP_REGION, [EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION],
918919
{EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION: lambda state: state.has(JIDAMBA_EACLANEYA_PASS, player) or options.regionsanity.value == options.regionsanity.option_disabled})
919920
fancy_add_exits(world, EACLANEYA_TRICKY_BLOCK_BRANCHES_AP_REGION, [LAND_OF_TIMER_FISHES_AP_REGION],
920-
{LAND_OF_TIMER_FISHES_AP_REGION: lambda state: logic.has_glide(state) and (state.has(JIDAMBA_EACLANEYA_PASS, player) or options.regionsanity.value == options.regionsanity.option_disabled)})
921+
{LAND_OF_TIMER_FISHES_AP_REGION: lambda state: logic.has_glide(state) and (state.has(JIDAMBA_EACLANEYA_PASS, player) or options.regionsanity.value == options.regionsanity.option_disabled) and (state.has(PROGRESSIVE_QUINTAR_WOODWIND, player, 1) or state.has(PROGRESSIVE_MOUNT, player, 2) or options.hop_to_it.value >= options.hop_to_it.option_fancy_footwork)})
921922
fancy_add_exits(world, LAND_OF_TIMER_FISHES_AP_REGION, [SALMON_ROOM_AP_REGION],
922923
{SALMON_ROOM_AP_REGION: lambda state: state.has(JIDAMBA_EACLANEYA_PASS, player) or options.regionsanity.value == options.regionsanity.option_disabled})
923924
fancy_add_exits(world, SALMON_ROOM_AP_REGION, [THE_DEEP_SEA_AP_REGION],

0 commit comments

Comments
 (0)