The Witness: Expert & Hints (#1072)

This commit is contained in:
NewSoupVi
2022-10-09 04:13:52 +02:00
committed by GitHub
parent 7b3ef012b9
commit 3297be7902
16 changed files with 1638 additions and 136 deletions

View File

@@ -2,6 +2,7 @@
Defines progression, junk and event items for The Witness
"""
import copy
from collections import defaultdict
from typing import Dict, NamedTuple, Optional, Set
from BaseClasses import Item, MultiWorld
@@ -96,6 +97,10 @@ class WitnessPlayerItems:
Class that defines Items for a single world
"""
@staticmethod
def code(item_name: str):
return StaticWitnessItems.ALL_ITEM_TABLE[item_name].code
def __init__(self, locat: WitnessPlayerLocations, world: MultiWorld, player: int, player_logic: WitnessPlayerLogic):
"""Adds event items after logic changes due to options"""
self.EVENT_ITEM_TABLE = dict()
@@ -105,6 +110,8 @@ class WitnessPlayerItems:
self.ITEM_ID_TO_DOOR_HEX = dict()
self.DOORS = set()
self.PROG_ITEM_AMOUNTS = defaultdict(lambda: 1)
self.SYMBOLS_NOT_IN_THE_GAME = set()
self.EXTRA_AMOUNTS = {
@@ -118,8 +125,17 @@ class WitnessPlayerItems:
if item in StaticWitnessLogic.ALL_SYMBOL_ITEMS:
self.SYMBOLS_NOT_IN_THE_GAME.add(StaticWitnessItems.ALL_ITEM_TABLE[item[0]].code)
else:
if item[0] in StaticWitnessLogic.PROGRESSIVE_TO_ITEMS:
self.PROG_ITEM_AMOUNTS[item[0]] = len(player_logic.MULTI_LISTS[item[0]])
self.PROGRESSION_TABLE[item[0]] = self.ITEM_TABLE[item[0]]
self.MULTI_LISTS_BY_CODE = dict()
for item in self.PROG_ITEM_AMOUNTS:
multi_list = player_logic.MULTI_LISTS[item]
self.MULTI_LISTS_BY_CODE[self.code(item)] = [self.code(single_item) for single_item in multi_list]
for entity_hex, items in player_logic.DOOR_ITEMS_BY_ID.items():
entity_hex_int = int(entity_hex, 16)
@@ -138,11 +154,11 @@ class WitnessPlayerItems:
if doors and symbols:
self.GOOD_ITEMS = [
"Dots", "Black/White Squares", "Symmetry"
"Progressive Dots", "Black/White Squares", "Symmetry"
]
elif symbols:
self.GOOD_ITEMS = [
"Dots", "Black/White Squares", "Stars",
"Progressive Dots", "Black/White Squares", "Progressive Stars",
"Shapers", "Symmetry"
]
@@ -151,6 +167,10 @@ class WitnessPlayerItems:
if not is_option_enabled(world, player, "disable_non_randomized_puzzles"):
self.GOOD_ITEMS.append("Colored Squares")
self.GOOD_ITEMS = [
StaticWitnessLogic.ITEMS_TO_PROGRESSIVE.get(item, item) for item in self.GOOD_ITEMS
]
for event_location in locat.EVENT_LOCATION_TABLE:
location = player_logic.EVENT_ITEM_PAIRS[event_location]
self.EVENT_ITEM_TABLE[location] = ItemData(None, True, True)