Skip to content

Commit

Permalink
HK: Removes Vanilla Items from ItemPool and Uses Grimmchild1 when rel…
Browse files Browse the repository at this point in the history
  • Loading branch information
qwint authored and EmilyV99 committed Apr 15, 2024
1 parent e189bd9 commit 9f422e3
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 12 deletions.
1 change: 1 addition & 0 deletions worlds/hk/Items.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class HKItemData(NamedTuple):
"GeoChests": lookup_type_to_names["Geo"],
"GeoRocks": lookup_type_to_names["Rock"],
"GrimmkinFlames": lookup_type_to_names["Flame"],
"Grimmchild": {"Grimmchild1", "Grimmchild2"},
"Grubs": lookup_type_to_names["Grub"],
"JournalEntries": lookup_type_to_names["Journal"],
"JunkPitChests": lookup_type_to_names["JunkPitChest"],
Expand Down
11 changes: 10 additions & 1 deletion worlds/hk/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,15 @@ class ExtraPlatforms(DefaultOnToggle):
"""Places additional platforms to make traveling throughout Hallownest more convenient."""


class AddUnshuffledLocations(Toggle):
"""Adds non-randomized locations to the location pool, which allows syncing
of location state with co-op or automatic collection via collect.
Note: This will increase the number of location checks required to purchase
hints to the total maximum.
"""


class DeathLinkShade(Choice):
"""Sets whether to create a shade when you are killed by a DeathLink and how to handle your existing shade, if any.
Expand Down Expand Up @@ -488,7 +497,7 @@ class CostSanityHybridChance(Range):
**{
option.__name__: option
for option in (
StartLocation, Goal, WhitePalace, ExtraPlatforms, StartingGeo,
StartLocation, Goal, WhitePalace, ExtraPlatforms, AddUnshuffledLocations, StartingGeo,
DeathLink, DeathLinkShade, DeathLinkBreaksFragileCharms,
MinimumGeoPrice, MaximumGeoPrice,
MinimumGrubPrice, MaximumGrubPrice,
Expand Down
37 changes: 26 additions & 11 deletions worlds/hk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ def create_items(self):
randomized_starting_items.update(items)

# noinspection PyShadowingNames
def _add(item_name: str, location_name: str):
def _add(item_name: str, location_name: str, randomized: bool):
"""
Adds a pairing of an item and location, doing appropriate checks to see if it should be vanilla or not.
"""
Expand All @@ -252,7 +252,7 @@ def _add(item_name: str, location_name: str):
if item_name in junk_replace:
item_name = self.get_filler_item_name()

item = self.create_item(item_name)
item = self.create_item(item_name) if not vanilla or location_name == "Start" or self.multiworld.AddUnshuffledLocations[self.player] else self.create_event(item_name)

if location_name == "Start":
if item_name in randomized_starting_items:
Expand All @@ -277,30 +277,35 @@ def _add(item_name: str, location_name: str):

for option_key, option in hollow_knight_randomize_options.items():
randomized = getattr(self.multiworld, option_key)[self.player]
if all([not randomized, option_key in logicless_options, not self.multiworld.AddUnshuffledLocations[self.player]]):
continue
for item_name, location_name in zip(option.items, option.locations):
if item_name in junk_replace:
item_name = self.get_filler_item_name()

if (item_name == "Crystal_Heart" and self.multiworld.SplitCrystalHeart[self.player]) or \
(item_name == "Mothwing_Cloak" and self.multiworld.SplitMothwingCloak[self.player]):
_add("Left_" + item_name, location_name)
_add("Right_" + item_name, "Split_" + location_name)
_add("Left_" + item_name, location_name, randomized)
_add("Right_" + item_name, "Split_" + location_name, randomized)
continue
if item_name == "Mantis_Claw" and self.multiworld.SplitMantisClaw[self.player]:
_add("Left_" + item_name, "Left_" + location_name)
_add("Right_" + item_name, "Right_" + location_name)
_add("Left_" + item_name, "Left_" + location_name, randomized)
_add("Right_" + item_name, "Right_" + location_name, randomized)
continue
if item_name == "Shade_Cloak" and self.multiworld.SplitMothwingCloak[self.player]:
if self.multiworld.random.randint(0, 1):
item_name = "Left_Mothwing_Cloak"
else:
item_name = "Right_Mothwing_Cloak"
if item_name == "Grimmchild2" and self.multiworld.RandomizeGrimmkinFlames[self.player] and self.multiworld.RandomizeCharms[self.player]:
_add("Grimmchild1", location_name, randomized)
continue

_add(item_name, location_name)
_add(item_name, location_name, randomized)

if self.multiworld.RandomizeElevatorPass[self.player]:
randomized = True
_add("Elevator_Pass", "Elevator_Pass")
_add("Elevator_Pass", "Elevator_Pass", randomized)

for shop, locations in self.created_multi_locations.items():
for _ in range(len(locations), getattr(self.multiworld, shop_to_option[shop])[self.player].value):
Expand Down Expand Up @@ -475,6 +480,10 @@ def create_item(self, name: str) -> HKItem:
item_data = item_table[name]
return HKItem(name, item_data.advancement, item_data.id, item_data.type, self.player)

def create_event(self, name: str) -> HKItem:
item_data = item_table[name]
return HKItem(name, item_data.advancement, None, item_data.type, self.player)

def create_location(self, name: str, vanilla=False) -> HKLocation:
costs = None
basename = name
Expand All @@ -493,9 +502,15 @@ def create_location(self, name: str, vanilla=False) -> HKLocation:
name = f"{name}_{i}"

region = self.multiworld.get_region("Menu", self.player)
loc = HKLocation(self.player, name,
self.location_name_to_id[name], region, costs=costs, vanilla=vanilla,
basename=basename)

if vanilla and not self.multiworld.AddUnshuffledLocations[self.player]:
loc = HKLocation(self.player, name,
None, region, costs=costs, vanilla=vanilla,
basename=basename)
else:
loc = HKLocation(self.player, name,
self.location_name_to_id[name], region, costs=costs, vanilla=vanilla,
basename=basename)

if multi is not None:
multi.append(loc)
Expand Down

0 comments on commit 9f422e3

Please sign in to comment.