mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-29 10:53:25 -07:00
Fixes
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from .Locations import HatInTimeLocation, death_wishes
|
||||
from .Items import HatInTimeItem
|
||||
from .Regions import connect_regions, create_region
|
||||
from BaseClasses import Region, LocationProgressType
|
||||
from BaseClasses import Region, LocationProgressType, ItemClassification
|
||||
from worlds.generic.Rules import add_rule
|
||||
from worlds.AutoWorld import World
|
||||
from typing import List
|
||||
@@ -202,6 +203,17 @@ def create_dw_regions(world: World):
|
||||
loc_id = death_wishes[name]
|
||||
main_objective = HatInTimeLocation(world.player, f"{name} - Main Objective", loc_id, dw)
|
||||
full_clear = HatInTimeLocation(world.player, f"{name} - All Clear", loc_id + 1, dw)
|
||||
main_stamp = HatInTimeLocation(world.player, f"Main Stamp - {name}", None, dw)
|
||||
bonus_stamps = HatInTimeLocation(world.player, f"Bonus Stamps - {name}", None, dw)
|
||||
main_stamp.show_in_spoiler = False
|
||||
bonus_stamps.show_in_spoiler = False
|
||||
dw.locations.append(main_stamp)
|
||||
dw.locations.append(bonus_stamps)
|
||||
|
||||
main_stamp.place_locked_item(HatInTimeItem(f"1 Stamp - {name}",
|
||||
ItemClassification.progression, None, world.player))
|
||||
bonus_stamps.place_locked_item(HatInTimeItem(f"2 Stamps - {name}",
|
||||
ItemClassification.progression, None, world.player))
|
||||
|
||||
if name in world.get_excluded_bonuses():
|
||||
main_objective.progress_type = LocationProgressType.EXCLUDED
|
||||
@@ -229,6 +241,17 @@ def create_dw_regions(world: World):
|
||||
|
||||
main_objective = HatInTimeLocation(world.player, f"{key} - Main Objective", loc_id, dw)
|
||||
full_clear = HatInTimeLocation(world.player, f"{key} - All Clear", loc_id+1, dw)
|
||||
main_stamp = HatInTimeLocation(world.player, f"Main Stamp - {key}", None, dw)
|
||||
bonus_stamps = HatInTimeLocation(world.player, f"Bonus Stamps - {key}", None, dw)
|
||||
main_stamp.show_in_spoiler = False
|
||||
bonus_stamps.show_in_spoiler = False
|
||||
dw.locations.append(main_stamp)
|
||||
dw.locations.append(bonus_stamps)
|
||||
|
||||
main_stamp.place_locked_item(HatInTimeItem(f"1 Stamp - {key}",
|
||||
ItemClassification.progression, None, world.player))
|
||||
bonus_stamps.place_locked_item(HatInTimeItem(f"2 Stamps - {key}",
|
||||
ItemClassification.progression, None, world.player))
|
||||
|
||||
if key in world.get_excluded_bonuses():
|
||||
main_objective.progress_type = LocationProgressType.EXCLUDED
|
||||
|
||||
@@ -83,7 +83,7 @@ dw_stamp_costs = {
|
||||
def set_dw_rules(world: World):
|
||||
if "Snatcher's Hit List" not in world.get_excluded_dws() \
|
||||
or "Camera Tourist" not in world.get_excluded_dws():
|
||||
create_enemy_events(world)
|
||||
set_enemy_rules(world)
|
||||
|
||||
dw_list: List[str] = []
|
||||
if world.multiworld.DWShuffle[world.player].value > 0:
|
||||
@@ -100,6 +100,8 @@ def set_dw_rules(world: World):
|
||||
temp_list: List[Location] = []
|
||||
main_objective = world.multiworld.get_location(f"{name} - Main Objective", world.player)
|
||||
full_clear = world.multiworld.get_location(f"{name} - All Clear", world.player)
|
||||
main_stamp = world.multiworld.get_location(f"Main Stamp - {name}", world.player)
|
||||
bonus_stamps = world.multiworld.get_location(f"Bonus Stamps - {name}", world.player)
|
||||
temp_list.append(main_objective)
|
||||
temp_list.append(full_clear)
|
||||
|
||||
@@ -114,19 +116,6 @@ def set_dw_rules(world: World):
|
||||
full_clear.place_locked_item(HatInTimeItem("Nothing", ItemClassification.filler, None, world.player))
|
||||
full_clear.show_in_spoiler = False
|
||||
|
||||
# Stamps are event locations
|
||||
main_stamp = HatInTimeLocation(world.player, f"Main Stamp - {name}", None, dw)
|
||||
bonus_stamps = HatInTimeLocation(world.player, f"Bonus Stamps - {name}", None, dw)
|
||||
main_stamp.show_in_spoiler = False
|
||||
bonus_stamps.show_in_spoiler = False
|
||||
dw.locations.append(main_stamp)
|
||||
dw.locations.append(bonus_stamps)
|
||||
|
||||
main_stamp.place_locked_item(HatInTimeItem(f"1 Stamp - {name}",
|
||||
ItemClassification.progression, None, world.player))
|
||||
bonus_stamps.place_locked_item(HatInTimeItem(f"2 Stamps - {name}",
|
||||
ItemClassification.progression, None, world.player))
|
||||
|
||||
# No need for rules if excluded - stamps will be auto-granted
|
||||
if world.is_dw_excluded(name):
|
||||
continue
|
||||
@@ -394,6 +383,31 @@ def create_enemy_events(world: World):
|
||||
region.locations.append(event)
|
||||
event.show_in_spoiler = False
|
||||
|
||||
|
||||
def set_enemy_rules(world: World):
|
||||
no_tourist = "Camera Tourist" in world.get_excluded_dws() or "Camera Tourist" in world.get_excluded_bonuses()
|
||||
|
||||
for enemy, regions in hit_list.items():
|
||||
if no_tourist and enemy in bosses:
|
||||
continue
|
||||
|
||||
for area in regions:
|
||||
if (area == "Bon Voyage!" or area == "Time Rift - Deep Sea") and not world.is_dlc1():
|
||||
continue
|
||||
|
||||
if area == "Time Rift - Tour" and (not world.is_dlc1()
|
||||
or world.multiworld.ExcludeTour[world.player].value > 0):
|
||||
continue
|
||||
|
||||
if area == "Bluefin Tunnel" and not world.is_dlc2():
|
||||
continue
|
||||
|
||||
if world.multiworld.DWShuffle[world.player].value > 0 and area in death_wishes \
|
||||
and area not in world.get_dw_shuffle():
|
||||
continue
|
||||
|
||||
event = world.multiworld.get_location(f"{enemy} - {area}", world.player)
|
||||
|
||||
if enemy == "Toxic Flower":
|
||||
add_rule(event, lambda state: can_use_hookshot(state, world))
|
||||
|
||||
|
||||
@@ -63,7 +63,6 @@ def adjust_options(world: World):
|
||||
world.multiworld.LogicDifficulty[world.player].value = 0
|
||||
world.multiworld.KnowledgeChecks[world.player].value = 0
|
||||
world.multiworld.DWTimePieceRequirement[world.player].value = 0
|
||||
world.multiworld.progression_balancing[world.player].value = 0
|
||||
|
||||
|
||||
def get_total_time_pieces(world: World) -> int:
|
||||
@@ -308,7 +307,7 @@ class MinExtraYarn(Range):
|
||||
For example, if this option's value is 10, and the total yarn needed to craft all hats is 40,
|
||||
there must be at least 50 yarn in the pool."""
|
||||
display_name = "Max Extra Yarn"
|
||||
range_start = 0
|
||||
range_start = 5
|
||||
range_end = 15
|
||||
default = 10
|
||||
|
||||
|
||||
@@ -254,16 +254,18 @@ blacklisted_acts = {
|
||||
|
||||
# Blacklisted act shuffle combinations to help prevent impossible layouts. Mostly for free roam acts.
|
||||
blacklisted_combos = {
|
||||
"The Illness has Spread": ["Nyakuza Free Roam", "Alpine Free Roam"],
|
||||
"Rush Hour": ["Nyakuza Free Roam", "Alpine Free Roam"],
|
||||
"Time Rift - The Owl Express": ["Alpine Free Roam", "Nyakuza Free Roam", "Bon Voyage!"],
|
||||
"Time Rift - The Moon": ["Alpine Free Roam", "Nyakuza Free Roam"],
|
||||
"Time Rift - Dead Bird Studio": ["Alpine Free Roam", "Nyakuza Free Roam"],
|
||||
"Time Rift - Curly Tail Trail": ["Nyakuza Free Roam"],
|
||||
"Time Rift - The Twilight Bell": ["Nyakuza Free Roam"],
|
||||
"Time Rift - Alpine Skyline": ["Nyakuza Free Roam"],
|
||||
"Time Rift - Rumbi Factory": ["Alpine Free Roam"],
|
||||
"Time Rift - Deep Sea": ["Alpine Free Roam", "Nyakuza Free Roam"],
|
||||
"The Illness has Spread": ["Nyakuza Free Roam", "Alpine Free Roam", "Contractual Obligations"],
|
||||
"Rush Hour": ["Nyakuza Free Roam", "Alpine Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - The Owl Express": ["Alpine Free Roam", "Nyakuza Free Roam", "Bon Voyage!",
|
||||
"Contractual Obligations"],
|
||||
|
||||
"Time Rift - The Moon": ["Alpine Free Roam", "Nyakuza Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - Dead Bird Studio": ["Alpine Free Roam", "Nyakuza Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - Curly Tail Trail": ["Nyakuza Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - The Twilight Bell": ["Nyakuza Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - Alpine Skyline": ["Nyakuza Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - Rumbi Factory": ["Alpine Free Roam", "Contractual Obligations"],
|
||||
"Time Rift - Deep Sea": ["Alpine Free Roam", "Nyakuza Free Roam", "Contractual Obligations"],
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from .Rules import set_rules
|
||||
from .Options import ahit_options, slot_data_options, adjust_options
|
||||
from .Types import HatType, ChapterIndex
|
||||
from .DeathWishLocations import create_dw_regions, dw_classes, death_wishes
|
||||
from .DeathWishRules import set_dw_rules
|
||||
from .DeathWishRules import set_dw_rules, create_enemy_events
|
||||
from worlds.AutoWorld import World, WebWorld
|
||||
from typing import List, Dict, TextIO
|
||||
|
||||
@@ -18,6 +18,7 @@ excluded_bonuses: Dict[int, List[str]] = {}
|
||||
dw_shuffle: Dict[int, List[str]] = {}
|
||||
nyakuza_thug_items: Dict[int, Dict[str, int]] = {}
|
||||
badge_seller_count: Dict[int, int] = {}
|
||||
badge_seller_count: Dict[int, int] = {}
|
||||
|
||||
|
||||
class AWebInTime(WebWorld):
|
||||
@@ -89,6 +90,10 @@ class HatInTimeWorld(World):
|
||||
return
|
||||
|
||||
create_events(self)
|
||||
if self.is_dw():
|
||||
if "Snatcher's Hit List" not in self.get_excluded_dws() \
|
||||
or "Camera Tourist" not in self.get_excluded_dws():
|
||||
create_enemy_events(self)
|
||||
|
||||
# place default contract locations if contract shuffle is off so logic can still utilize them
|
||||
if self.multiworld.ShuffleActContracts[self.player].value == 0:
|
||||
|
||||
Reference in New Issue
Block a user