diff --git a/worlds/outer_wilds/__init__.py b/worlds/outer_wilds/__init__.py index 6d94a606e456..b84569f8328b 100644 --- a/worlds/outer_wilds/__init__.py +++ b/worlds/outer_wilds/__init__.py @@ -142,7 +142,13 @@ def set_rules(self) -> None: self.multiworld.completion_condition[self.player] = lambda state: state.has(goal_item, self.player) def fill_slot_data(self): - slot_data = self.options.as_dict("goal", "death_link", "logsanity", "spawn", "enable_eote_dlc", "dlc_only") + slot_data = self.options.as_dict( + "death_link", # a client/mod feature + "goal", "spawn", # affects tons of stuff, but also a client/mod faeture + "logsanity", "enable_eote_dlc", "dlc_only", # changes AP locations, needed by in-game tracker + "split_translator" # changes AP items, and how client/mod implements Translator + ) + # more client/mod features, these are only in the apworld because we want them fixed per-slot/at gen time slot_data["eotu_coordinates"] = self.eotu_coordinates slot_data["db_layout"] = self.db_layout slot_data["planet_order"] = self.planet_order diff --git a/worlds/outer_wilds/items.py b/worlds/outer_wilds/items.py index 65305d2cdb52..2c7ddced8a9f 100644 --- a/worlds/outer_wilds/items.py +++ b/worlds/outer_wilds/items.py @@ -20,6 +20,7 @@ class OuterWildsItemData(NamedTuple): code: Optional[int] = None type: ItemClassification = ItemClassification.filler category: Optional[str] = None + split_translator: Optional[bool] = None pickled_data = pkgutil.get_data(__name__, "shared_static_logic/static_logic.pickle") @@ -38,6 +39,7 @@ class OuterWildsItemData(NamedTuple): code=(items_data_entry["code"] if "code" in items_data_entry else None), type=item_types_map[items_data_entry["type"]], category=(items_data_entry["category"] if "category" in items_data_entry else None), + split_translator=(items_data_entry["split_translator"] if "split_translator" in items_data_entry else None), ) all_non_event_items_table = {name: data.code for name, data in item_data_table.items() if data.code is not None} @@ -80,6 +82,12 @@ class OuterWildsItemData(NamedTuple): }, "Tools": { "Translator", + "Translator (Hourglass Twins)", + "Translator (Timber Hearth)", + "Translator (Brittle Hollow)", + "Translator (Giant's Deep)", + "Translator (Dark Bramble)", + "Translator (Other)", "Signalscope", "Scout", "Ghost Matter Wavelength", @@ -181,6 +189,8 @@ def create_items(world: "OuterWildsWorld") -> None: instances = 1 if name in repeated_prog_useful_items: instances = repeated_prog_useful_items[name] + if item.split_translator is not None and item.split_translator != options.split_translator: + instances = 0 for _ in range(0, instances): prog_and_useful_items.append(create_item(player, name)) @@ -230,14 +240,26 @@ def create_items(world: "OuterWildsWorld") -> None: multiworld.itempool += itempool if options.early_key_item: + relevant_translator = "Translator" + if options.split_translator: + if options.spawn == Spawn.option_hourglass_twins: + relevant_translator = "Translator (Hourglass Twins)" + if options.spawn == Spawn.option_timber_hearth: + relevant_translator = "Translator (Timber Hearth)" + if options.spawn == Spawn.option_brittle_hollow: + relevant_translator = "Translator (Brittle Hollow)" + if options.spawn == Spawn.option_giants_deep: + relevant_translator = "Translator (Giant's Deep)" + # ignore stranger spawn since it won't offer a Translator at all + key_item = None if options.early_key_item == EarlyKeyItem.option_any: if options.spawn == Spawn.option_stranger: key_item = random.choice(["Launch Codes", "Stranger Light Modulator"]) else: - key_item = random.choice(["Translator", "Nomai Warp Codes", "Launch Codes"]) + key_item = random.choice([relevant_translator, "Nomai Warp Codes", "Launch Codes"]) elif options.early_key_item == EarlyKeyItem.option_translator: - key_item = "Translator" + key_item = relevant_translator elif options.early_key_item == EarlyKeyItem.option_nomai_warp_codes: key_item = "Nomai Warp Codes" elif options.early_key_item == EarlyKeyItem.option_launch_codes: diff --git a/worlds/outer_wilds/locations_and_regions.py b/worlds/outer_wilds/locations_and_regions.py index 39ae1cb6217a..3efda32f4c01 100644 --- a/worlds/outer_wilds/locations_and_regions.py +++ b/worlds/outer_wilds/locations_and_regions.py @@ -119,6 +119,8 @@ def create_regions(world: "OuterWildsWorld") -> None: for region_name in region_data_table.keys(): mw.regions.append(Region(region_name, p, mw)) + split_translator = options.split_translator + # add locations and connections to each region for region_name, region_data in region_data_table.items(): region = mw.get_region(region_name, p) @@ -131,7 +133,7 @@ def create_regions(world: "OuterWildsWorld") -> None: for connection in exit_connections: to = connection["to"] requires = connection["requires"] - rule = None if len(requires) == 0 else lambda state, r=requires: eval_rule(state, p, r) + rule = None if len(requires) == 0 else lambda state, r=requires, st=split_translator: eval_rule(state, p, r, st) entrance = region.connect(mw.get_region(to, p), None, rule) indirect_regions = regions_referenced_by_rule(requires) for indirect_region in indirect_regions: @@ -141,7 +143,7 @@ def create_regions(world: "OuterWildsWorld") -> None: for ld in locations_data: if ld["name"] in locations_to_create and len(ld["requires"]) > 0: set_rule(mw.get_location(ld["name"], p), - lambda state, r=ld["requires"]: eval_rule(state, p, r)) + lambda state, r=ld["requires"], st=split_translator: eval_rule(state, p, r, st)) # add dynamic logic, i.e. connections based on player options menu = mw.get_region("Menu", p) @@ -211,11 +213,11 @@ def rule(state: CollectionState) -> bool: # In particular: this eval_rule() function is the main piece of code which will have to # be implemented in both languages, so it's important we keep the implementations in sync -def eval_rule(state: CollectionState, p: int, rule: [Any]) -> bool: - return all(eval_criterion(state, p, criterion) for criterion in rule) +def eval_rule(state: CollectionState, p: int, rule: [Any], split_translator: bool) -> bool: + return all(eval_criterion(state, p, criterion, split_translator) for criterion in rule) -def eval_criterion(state: CollectionState, p: int, criterion: Any) -> bool: +def eval_criterion(state: CollectionState, p: int, criterion: Any, split_translator: bool) -> bool: # all valid criteria are dicts if isinstance(criterion, dict): # we're only using JSON objects / Python dicts here as discriminated unions, @@ -227,9 +229,11 @@ def eval_criterion(state: CollectionState, p: int, criterion: Any) -> bool: # { "item": "..." } and { "anyOf": [ ... ] } and { "location": "foo" } and { "region": "bar" } # mean exactly what they sound like, and those are the only kinds of criteria. if key == "item" and isinstance(value, str): + if not split_translator and value.startswith("Translator ("): + return state.has("Translator", p) return state.has(value, p) elif key == "anyOf" and isinstance(value, list): - return any(eval_criterion(state, p, sub_criterion) for sub_criterion in value) + return any(eval_criterion(state, p, sub_criterion, split_translator) for sub_criterion in value) elif key == "location" and isinstance(value, str): return state.can_reach(value, "Location", p) elif key == "region" and isinstance(value, str): diff --git a/worlds/outer_wilds/options.py b/worlds/outer_wilds/options.py index 5d51d620b040..15f68157c6dc 100644 --- a/worlds/outer_wilds/options.py +++ b/worlds/outer_wilds/options.py @@ -183,6 +183,14 @@ class DLCOnly(Toggle): display_name = "DLC Only" +class SplitTranslator(Toggle): + """ + Splits the "Translator" item into 6 items: 5 for the main planets and their satellites, plus a + "Translator (Other)" for smaller parts of the vanilla system and systems added by story mods. + """ + display_name = "Split Translator" + + @dataclass class OuterWildsGameOptions(PerGameCommonOptions): start_inventory_from_pool: StartInventoryPool @@ -200,6 +208,7 @@ class OuterWildsGameOptions(PerGameCommonOptions): death_link: DeathLink logsanity: Logsanity shuffle_spacesuit: ShuffleSpacesuit + split_translator: SplitTranslator def get_creation_settings(options: OuterWildsGameOptions) -> Set[str]: diff --git a/worlds/outer_wilds/shared_static_logic/items.jsonc b/worlds/outer_wilds/shared_static_logic/items.jsonc index 5e90781a17eb..eb15c409c6dc 100644 --- a/worlds/outer_wilds/shared_static_logic/items.jsonc +++ b/worlds/outer_wilds/shared_static_logic/items.jsonc @@ -6,7 +6,13 @@ { "code": 1734473681, "name": "Launch Codes", "type": "progression" }, { "code": 1734473732, "name": "Spacesuit", "type": "progression" }, - { "category": "base", "code": 1734473682, "name": "Translator", "type": "progression" }, + { "category": "base", "split_translator": false, "code": 1734473682, "name": "Translator", "type": "progression" }, + { "category": "base", "split_translator": true, "code": 1734473746, "name": "Translator (Hourglass Twins)", "type": "progression" }, + { "category": "base", "split_translator": true, "code": 1734473747, "name": "Translator (Timber Hearth)", "type": "progression" }, + { "category": "base", "split_translator": true, "code": 1734473748, "name": "Translator (Brittle Hollow)", "type": "progression" }, + { "category": "base", "split_translator": true, "code": 1734473749, "name": "Translator (Giant's Deep)", "type": "progression" }, + { "category": "base", "split_translator": true, "code": 1734473750, "name": "Translator (Dark Bramble)", "type": "progression" }, + { "category": "base", "split_translator": true, "code": 1734473751, "name": "Translator (Other)", "type": "progression" }, { "category": "base", "code": 1734473683, "name": "Signalscope", "type": "progression" }, { "code": 1734473684, "name": "Scout", "type": "progression" }, { "code": 1734473685, "name": "Ghost Matter Wavelength", "type": "progression" }, diff --git a/worlds/outer_wilds/shared_static_logic/locations.jsonc b/worlds/outer_wilds/shared_static_logic/locations.jsonc index a6a47fdccac0..39d2233080e1 100644 --- a/worlds/outer_wilds/shared_static_logic/locations.jsonc +++ b/worlds/outer_wilds/shared_static_logic/locations.jsonc @@ -5,42 +5,42 @@ // positive 32-bit integers to avoid conflicts with other AP games { "category": "base", "address": 1085038250, "name": "Sun Station (Projection Stone Text)", - "region": "Sun Station", "requires": [ { "item": "Translator" } ] + "region": "Sun Station", "requires": [ { "item": "Translator (Other)" } ] }, // Ember Twin { "category": "base", "address": 1085038251, "name": "ET: High Energy Lab (Upper Text Wall)", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038252, "name": "ET: Sunless City Shrine (Entrance Text Wall)", "region": "Hourglass Twins", "requires": [ - { "item": "Translator" }, + { "item": "Translator (Hourglass Twins)" }, { "item": "Ghost Matter Wavelength" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038253, "name": "ET: QM Locator (2nd Scroll)", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "address": 1085038254, "name": "ET: Fossil (Children's Text)", "region": "Hourglass Twins", "requires": [ - { "item": "Translator" }, + { "item": "Translator (Hourglass Twins)" }, { "item": "Scout" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038255, "name": "ET: Lakebed Cave (Floor Text)", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038256, "name": "ET: Coleus' Cave (Text Wall)", "region": "Hourglass Twins", "requires": [ - { "item": "Translator" }, + { "item": "Translator (Hourglass Twins)" }, { "item": "Entanglement Rule" }, { "item": "Spacesuit" } ] @@ -69,11 +69,11 @@ }, { "category": "base", "address": 1085038322, "name": "AT: HGT Towers (Text Wall)", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "address": 1085038323, "name": "AT: BH Tower (Text Wall)", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, // Timber Hearth @@ -99,7 +99,7 @@ }, { "category": "base", "address": 1085038263, "name": "TH: Mines (Text Wall)", - "region": "Timber Hearth", "requires": [ { "item": "Translator" } ] + "region": "Timber Hearth", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "address": 1085038309, "name": "TH: Hornfels' Radio Tower Campfire Note", @@ -113,7 +113,7 @@ // Attlerock { "category": "base", "address": 1085038264, "name": "AR: Signal Locator (Text Wall)", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "address": 1085038311, "name": "AR: Riebeck's Signal Locator Recorder", @@ -139,7 +139,7 @@ // Brittle Hollow { "category": "base", "address": 1085038265, "name": "BH: Southern Observatory (Tornado Text Wall)", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038266, "name": "BH: Old Settlement Murals", @@ -148,11 +148,11 @@ { "category": "base", "address": 1085038267, "name": "BH: Forge (2nd Scroll)", "region": "Black Hole Forge", - "requires": [ { "item": "Translator" } ] + "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "address": 1085038268, "name": "BH: Tower (Top Floor Text Wall)", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038314, "name": "BH: Feldspar's Spare Fuel Note", @@ -170,11 +170,11 @@ "category": "base", "address": 1085038317, "name": "BH: Solanum's Class Report (2nd Scroll)", // Sadly does not require GM Wavelength. You have to avoid a lot of GM, but just looking at // the crystals tell you where the GM is so the camera provides no new information. - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038318, "name": "BH: Hanging City Shrine (Text Wall)", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "address": 1085038324, "name": "BH: Visit Hanging City", @@ -192,14 +192,14 @@ // Hollow's Lantern { "category": "base", "address": 1085038269, "name": "HL: Volcanic Testing Site (Text Wall)", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, // White Hole Station { "category": "base", "address": 1085038270, "name": "WHS (Text Wall)", // this is a one-location region because it has a warp pad - "region": "White Hole Station", "requires": [ { "item": "Translator" } ] + "region": "White Hole Station", "requires": [ { "item": "Translator (Other)" } ] }, // Giant's Deep @@ -211,7 +211,7 @@ }, { "category": "base", "address": 1085038272, "name": "GD: Control Module Logs (Text Wheels)", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038273, "name": "GD: Bramble Island Recorder", @@ -219,20 +219,20 @@ }, { "category": "base", "address": 1085038274, "name": "GD: Construction Yard (Text Wall)", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "address": 1085038275, "name": "GD: Statue Island Workshop (Text Wheel)", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "address": 1085038276, "name": "GD: Tower Rule (Pedestal Text)", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "address": 1085038277, "name": "GD: Complete the Tower (Text Wall)", "region": "Space", "requires": [ - { "item": "Translator" }, + { "item": "Translator (Giant's Deep)" }, { "item": "Imaging Rule" }, { "item": "Spacesuit" } ] @@ -270,12 +270,12 @@ // Interloper { "category": "base", "address": 1085038281, "name": "Frozen Shuttle Log (Text Wheel)", - "region": "Frozen Shuttle Log", "requires": [ { "item": "Translator" } ] + "region": "Frozen Shuttle Log", "requires": [ { "item": "Translator (Other)" } ] }, { // spoiler-free name, as opposed to e.g. "Interloper Core" "category": "base", "address": 1085038282, "name": "Ruptured Core (Text Wheel)", - "region": "Interloper Core", "requires": [ { "item": "Translator" } ] + "region": "Interloper Core", "requires": [ { "item": "Translator (Other)" } ] }, // Quantum Moon @@ -285,7 +285,7 @@ }, { "category": "base", "address": 1085038284, "name": "Solanum's Shuttle Log (Text Wheel)", - "region": "Solanum's Shuttle Interior", "requires": [ { "item": "Translator" } ] // text wheel inside shuttle + "region": "Solanum's Shuttle Interior", "requires": [ { "item": "Translator (Other)" } ] // text wheel inside shuttle }, { // spoiler-free name, as opposed to e.g. "Meet Solanum" @@ -307,7 +307,7 @@ }, { "category": "base", "address": 1085038287, "name": "DB: Nomai Grave (Text Wheel)", - "region": "Nomai Grave", "requires": [ { "item": "Translator" } ] + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" } ] }, { "category": "base", "address": 1085038288, "name": "DB: Find The Vessel", @@ -406,19 +406,19 @@ { "category": "base", "logsanity": true, "address": 1085039000, "name": "Ship Log: Sun Station 1 - Purpose", - "region": "Sun Station", "requires": [ { "item": "Translator" } ] + "region": "Sun Station", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039001, "name": "Ship Log: Sun Station 2 - Test Result", - "region": "Sun Station", "requires": [ { "item": "Translator" } ] + "region": "Sun Station", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039002, "name": "Ship Log: Sun Station 3 - Comet", - "region": "Sun Station", "requires": [ { "item": "Translator" } ] + "region": "Sun Station", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039003, "name": "Ship Log: Sun Station 4 - Current Status", - "region": "Sun Station", "requires": [ { "item": "Translator" } ] + "region": "Sun Station", "requires": [ { "item": "Translator (Other)" } ] }, { @@ -443,15 +443,15 @@ }, { "category": "base", "logsanity": true, "address": 1085039009, "name": "ET Ship Log: QM Locator 1 - Purpose", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039010, "name": "ET Ship Log: QM Locator 2 - Hypothesis", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039011, "name": "ET Ship Log: QM Locator 3 - Five Locations", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039012, "name": "ET Ship Log: Gravity Cannon 1 - Activate", @@ -463,23 +463,23 @@ }, { "category": "base", "logsanity": true, "address": 1085039014, "name": "ET Ship Log: Escape Pod 2 1 - Identify", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039015, "name": "ET Ship Log: Escape Pod 2 2 - Vessel", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039016, "name": "ET Ship Log: High Energy Lab 1 - Temporal Anomaly", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039017, "name": "ET Ship Log: High Energy Lab 2 - Increasing Interval", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039018, "name": "ET Ship Log: High Energy Lab 3 - ATP", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039019, "name": "ET Ship Log: AT Tower Designs 1 - Identify", @@ -487,15 +487,15 @@ }, { "category": "base", "logsanity": true, "address": 1085039020, "name": "ET Ship Log: AT Tower Designs 2 - Different Planets", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039021, "name": "ET Ship Log: AT Tower Designs 3 - Reflect Destinations", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039022, "name": "ET Ship Log: AT Tower Designs 4 - ATP", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039023, "name": "ET Ship Log: Sunless City 1 - Identify", @@ -503,27 +503,27 @@ }, { "category": "base", "logsanity": true, "address": 1085039024, "name": "ET Ship Log: Sunless City 2 - Sun Station Debate", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039025, "name": "ET Ship Log: Sunless City 3 - Signal", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Ghost Matter Wavelength" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Ghost Matter Wavelength" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039026, "name": "ET Ship Log: Anglerfish Fossil 1 - Children's Game", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Scout" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Scout" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039027, "name": "ET Ship Log: Anglerfish Fossil 2 - Blindfold Rule", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Scout" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Scout" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039028, "name": "ET Ship Log: Anglerfish Fossil 3 - Adult Response", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Scout" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Scout" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039029, "name": "ET Ship Log: Quantum Caves 1 - Wandering Rock", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039030, "name": "ET Ship Log: Quantum Caves 2 - Quantum Signal", @@ -531,23 +531,23 @@ }, { "category": "base", "logsanity": true, "address": 1085039031, "name": "ET Ship Log: Lakebed Cave 1 - Coleus Disappeared", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] // this is the floor text in Lakebed Cave itself + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] // this is the floor text in Lakebed Cave itself }, { "category": "base", "logsanity": true, "address": 1085039032, "name": "ET Ship Log: Lakebed Cave 2 - Entanglement Rule", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Entanglement Rule" }, { "item": "Spacesuit" } ] // wall text where Coleus was trapped + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Entanglement Rule" }, { "item": "Spacesuit" } ] // wall text where Coleus was trapped }, { "category": "base", "logsanity": true, "address": 1085039033, "name": "ET Ship Log: Lakebed Cave 3 - Theorizing", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Entanglement Rule" }, { "item": "Spacesuit" } ] // wall text where Coleus was trapped + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Entanglement Rule" }, { "item": "Spacesuit" } ] // wall text where Coleus was trapped }, { "category": "base", "logsanity": true, "address": 1085039034, "name": "AT Ship Log: Towers 1 - Identify", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039035, "name": "AT Ship Log: Towers 2 - WHS", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Hourglass Twins)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039036, "name": "AT Ship Log: ATP 1 - Entered", @@ -555,19 +555,19 @@ }, { "category": "base", "logsanity": true, "address": 1085039037, "name": "AT Ship Log: ATP 2 - Monoliths", - "region": "Ash Twin Interior", "requires": [ { "item": "Translator" } ] + "region": "Ash Twin Interior", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039038, "name": "AT Ship Log: ATP 3 - Energy", - "region": "Ash Twin Interior", "requires": [ { "item": "Translator" } ] + "region": "Ash Twin Interior", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039039, "name": "AT Ship Log: ATP 4 - Sun Station", - "region": "Ash Twin Interior", "requires": [ { "item": "Translator" } ] + "region": "Ash Twin Interior", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039040, "name": "AT Ship Log: ATP 5 - Core", - "region": "Ash Twin Interior", "requires": [ { "item": "Translator" } ] + "region": "Ash Twin Interior", "requires": [ { "item": "Translator (Hourglass Twins)" } ] }, { "category": "base", "logsanity": true, "address": 1085039041, "name": "TH Ship Log: Village 1 - Identify", @@ -600,15 +600,15 @@ }, { "category": "base", "logsanity": true, "address": 1085039049, "name": "TH Ship Log: Nomai Mines 1 - Shell", - "region": "Timber Hearth", "requires": [ { "item": "Translator" } ] + "region": "Timber Hearth", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "logsanity": true, "address": 1085039050, "name": "TH Ship Log: Nomai Mines 2 - No Physical Entrance", - "region": "Timber Hearth", "requires": [ { "item": "Translator" } ] + "region": "Timber Hearth", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "logsanity": true, "address": 1085039051, "name": "TH Ship Log: Nomai Mines 3 - Four-Eyed Lifeforms", - "region": "Timber Hearth", "requires": [ { "item": "Translator" } ] + "region": "Timber Hearth", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "logsanity": true, "address": 1085039052, "name": "TH Ship Log: Quantum Grove 1 - Quantum Signal", @@ -628,11 +628,11 @@ }, { "category": "base", "logsanity": true, "address": 1085039056, "name": "AR Ship Log: Eye Signal Locator 1 - Identify", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "logsanity": true, "address": 1085039057, "name": "AR Ship Log: Eye Signal Locator 2 - Failure", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Timber Hearth)" } ] }, { "category": "base", "logsanity": true, "address": 1085039058, "name": "BH Ship Log: Riebeck's Camp 1 - Visit", @@ -652,59 +652,59 @@ }, { "category": "base", "logsanity": true, "address": 1085039062, "name": "BH Ship Log: Tower 1 - Sixth Location", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039063, "name": "BH Ship Log: Tower 2 - Pilgrimage", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039064, "name": "BH Ship Log: Tower 3 - United Goal", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039065, "name": "BH Ship Log: Tower Shard 1 - Grove Objects", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039066, "name": "BH Ship Log: Tower Shard 2 - Hypothesis", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039067, "name": "BH Ship Log: Tower Shard 3 - QM Signal", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039068, "name": "BH Ship Log: Northern Glacier 1 - Identify", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] // Nomai text in either NG building + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] // Nomai text in either NG building }, { "category": "base", "logsanity": true, "address": 1085039069, "name": "BH Ship Log: Northern Glacier 2 - WHS", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] // Nomai text in the larger, lower NG building + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] // Nomai text in the larger, lower NG building }, { "category": "base", "logsanity": true, "address": 1085039070, "name": "BH Ship Log: Escape Pod 1 1 - Identify", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039071, "name": "BH Ship Log: Escape Pod 1 2 - Vessel", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039072, "name": "BH Ship Log: Old Settlement 1 - Identify", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039073, "name": "BH Ship Log: Old Settlement 2 - Eye-Shaped Signal", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039074, "name": "BH Ship Log: Old Settlement 3 - Named", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039075, "name": "BH Ship Log: Old Settlement 4 - Abandoned", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039076, "name": "BH Ship Log: Old Settlement Mural 1", @@ -728,31 +728,31 @@ }, { "category": "base", "logsanity": true, "address": 1085039081, "name": "BH Ship Log: Hanging City 3 - Warp Core", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] // meltwater district text wall + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] // meltwater district text wall }, { "category": "base", "logsanity": true, "address": 1085039082, "name": "BH Ship Log: Hanging City 4 - Signal", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" } ] // eye shrine text wall + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" } ] // eye shrine text wall }, { "category": "base", "logsanity": true, "address": 1085039083, "name": "BH Ship Log: Black Hole Forge 1 - Astral Body Alignment", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039084, "name": "BH Ship Log: Black Hole Forge 2 - Receiver Location", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039085, "name": "BH Ship Log: Black Hole Forge 3 - Hourglass Twins", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039086, "name": "BH Ship Log: Black Hole Forge 4 - Ash Twin Towers", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039087, "name": "BH Ship Log: Black Hole Forge 5 - Poke's Warp Core", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039088, "name": "BH Ship Log: Alignment Angle Diagram 1 - Identify", @@ -760,51 +760,51 @@ }, { "category": "base", "logsanity": true, "address": 1085039089, "name": "BH Ship Log: Alignment Angle Diagram 2 - Five Degrees", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039090, "name": "BH Ship Log: Alignment Angle Diagram 3 - Several Seconds", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039091, "name": "BH Ship Log: Alignment Angle Diagram 4 - Active Window", - "region": "Black Hole Forge", "requires": [ { "item": "Translator" } ] + "region": "Black Hole Forge", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039092, "name": "BH Ship Log: Southern Observatory 1 - Signal", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039093, "name": "BH Ship Log: Southern Observatory 2 - Distant Orbit", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039094, "name": "BH Ship Log: Southern Observatory 3 - Deep Space Probe", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039095, "name": "BH Ship Log: Southern Observatory 4 - Probability", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039096, "name": "BH Ship Log: Tornado Simulation 1 - Most Cyclones", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039097, "name": "BH Ship Log: Tornado Simulation 2 - Below", - "region": "Brittle Hollow", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Brittle Hollow", "requires": [ { "item": "Translator (Brittle Hollow)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039098, "name": "HL Ship Log: Volcanic Testing Site 1 - Purpose", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039099, "name": "HL Ship Log: Volcanic Testing Site 2 - Shell", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039100, "name": "HL Ship Log: Volcanic Testing Site 3 - Smallest Crack", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Brittle Hollow)" } ] }, { "category": "base", "logsanity": true, "address": 1085039101, "name": "GD Ship Log: Ocean Depths 1 - Electrical Field", @@ -832,15 +832,15 @@ }, { "category": "base", "logsanity": true, "address": 1085039107, "name": "GD Ship Log: Construction Yard 1 - Built OPC", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039108, "name": "GD Ship Log: Construction Yard 2 - Hiatus", - "region": "Giant's Deep", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039109, "name": "GD Ship Log: Construction Yard 3 - Launch", - "region": "Giant's Deep", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039110, "name": "GD Ship Log: Bramble Island", @@ -848,7 +848,7 @@ }, { "category": "base", "logsanity": true, "address": 1085039111, "name": "GD Ship Log: Statue Island 1 - Purpose", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039112, "name": "GD Ship Log: Statue Island 2 - Beach Statue", @@ -856,31 +856,31 @@ }, { "category": "base", "logsanity": true, "address": 1085039113, "name": "GD Ship Log: Island Workshop 1 - Memories", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039114, "name": "GD Ship Log: Island Workshop 2 - Masks", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039115, "name": "GD Ship Log: Island Workshop 3 - Activation", - "region": "Giant's Deep", "requires": [ { "item": "Translator" } ] + "region": "Giant's Deep", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039116, "name": "GD Ship Log: Tower 1 - Journey", - "region": "Space", "requires": [ { "item": "Translator" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039117, "name": "GD Ship Log: Tower 2 - Observing", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039118, "name": "GD Ship Log: Tower 3 - Rule of Imaging", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Imaging Rule" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Imaging Rule" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039119, "name": "GD Ship Log: Tower 4 - Other Shards", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Imaging Rule" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Imaging Rule" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039120, "name": "GD Ship Log: OPC 1 - Entered", @@ -888,27 +888,27 @@ }, { "category": "base", "logsanity": true, "address": 1085039121, "name": "GD Ship Log: OPC 2 - Purpose", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] // control module projection stone text + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] // control module projection stone text }, { "category": "base", "logsanity": true, "address": 1085039122, "name": "GD Ship Log: OPC 3 - Maximum Power", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] // control module projection stone text + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] // control module projection stone text }, { "category": "base", "logsanity": true, "address": 1085039123, "name": "GD Ship Log: Probe Tracking Module 1 - Millions", - "region": "GD Core", "requires": [ { "item": "Translator" } ] + "region": "GD Core", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039124, "name": "GD Ship Log: Probe Tracking Module 2 - Anomaly Located", - "region": "GD Core", "requires": [ { "item": "Translator" } ] + "region": "GD Core", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039125, "name": "GD Ship Log: Probe Tracking Module 3 - Statue", - "region": "GD Core", "requires": [ { "item": "Translator" } ] + "region": "GD Core", "requires": [ { "item": "Translator (Giant's Deep)" } ] }, { "category": "base", "logsanity": true, "address": 1085039126, "name": "GD Ship Log: Probe Tracking Module 4 - Coordinates", - "region": "GD Core", "requires": [ { "item": "Translator" } ] // this requires translating the terminal, not just seeing the coords + "region": "GD Core", "requires": [ { "item": "Translator (Giant's Deep)" } ] // this requires translating the terminal, not just seeing the coords }, { "category": "base", "logsanity": true, "address": 1085039127, "name": "GD Ship Log: Launch Module 1 - Damaged", @@ -916,19 +916,19 @@ }, { "category": "base", "logsanity": true, "address": 1085039128, "name": "GD Ship Log: Launch Module 2 - Only Once", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] // launch module projection stone text + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] // launch module projection stone text }, { "category": "base", "logsanity": true, "address": 1085039129, "name": "GD Ship Log: Launch Module 3 - Receive Data", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] // launch module projection stone text + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] // launch module projection stone text }, { "category": "base", "logsanity": true, "address": 1085039130, "name": "GD Ship Log: Control Module 1 - Request", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039131, "name": "GD Ship Log: Control Module 2 - Status", - "region": "Space", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Space", "requires": [ { "item": "Translator (Giant's Deep)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039132, "name": "DB Ship Log: Feldspar's Camp 1 - Status", @@ -956,27 +956,27 @@ }, { "category": "base", "logsanity": true, "address": 1085039138, "name": "DB Ship Log: Escape Pod 3 1 - Identify", - "region": "Nomai Grave", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039139, "name": "DB Ship Log: Escape Pod 3 2 - Vessel", - "region": "Nomai Grave", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039140, "name": "DB Ship Log: Escape Pod 3 3 - Two Beacons", - "region": "Nomai Grave", "requires": [ { "item": "Translator" }, { "item": "Spacesuit" } ] + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" }, { "item": "Spacesuit" } ] }, { "category": "base", "logsanity": true, "address": 1085039141, "name": "DB Ship Log: Nomai Grave 1 - Followed Beacon", - "region": "Nomai Grave", "requires": [ { "item": "Translator" } ] // text wheel + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" } ] // text wheel }, { "category": "base", "logsanity": true, "address": 1085039142, "name": "DB Ship Log: Nomai Grave 2 - Within the Seed", - "region": "Nomai Grave", "requires": [ { "item": "Translator" } ] // text wheel + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" } ] // text wheel }, { "category": "base", "logsanity": true, "address": 1085039143, "name": "DB Ship Log: Nomai Grave 3 - Beacon Dying", - "region": "Nomai Grave", "requires": [ { "item": "Translator" } ] // text wheel + "region": "Nomai Grave", "requires": [ { "item": "Translator (Dark Bramble)" } ] // text wheel }, { "category": "base", "logsanity": true, "address": 1085039144, "name": "DB Ship Log: Nomai Grave 4 - Scout Photos", @@ -996,24 +996,24 @@ }, { "category": "base", "logsanity": true, "address": 1085039148, "name": "DB Ship Log: The Vessel 4 - Call For Help", - "region": "The Vessel", "requires": [ { "item": "Translator" } ] // upper right text wall + "region": "The Vessel", "requires": [ { "item": "Translator (Dark Bramble)" } ] // upper right text wall }, { "category": "base", "logsanity": true, "address": 1085039149, "name": "DB Ship Log: The Vessel 5 - Clans Regrouping", - "region": "The Vessel", "requires": [ { "item": "Translator" } ] // upper left text wall + "region": "The Vessel", "requires": [ { "item": "Translator (Dark Bramble)" } ] // upper left text wall }, { "category": "base", "logsanity": true, "address": 1085039150, "name": "DB Ship Log: The Vessel 6 - Original Recording", - "region": "The Vessel", "requires": [ { "item": "Translator" } ] // text wheel on lower level + "region": "The Vessel", "requires": [ { "item": "Translator (Dark Bramble)" } ] // text wheel on lower level }, { "category": "base", "logsanity": true, "address": 1085039151, "name": "Ship Log: WHS 1 - Warp Towers", - "region": "White Hole Station", "requires": [ { "item": "Translator" } ] // text wall in WHS + "region": "White Hole Station", "requires": [ { "item": "Translator (Other)" } ] // text wall in WHS }, { "category": "base", "logsanity": true, "address": 1085039152, "name": "Ship Log: WHS 2 - Alignment", "region": "White Hole Station", "requires": [ - { "item": "Translator" }, // This is projection stone text, which requires carrying it back to BH. + { "item": "Translator (Brittle Hollow)" }, // This is projection stone text, which requires carrying it back to BH. { "item": "Launch Codes" } // Because of warp rando, we can't assume warp codes let you warp from WHS to BH, // so for logic we only accept Launch Codes (see also HCC->BHF connection). ] @@ -1021,29 +1021,29 @@ { "category": "base", "logsanity": true, "address": 1085039153, "name": "Ship Log: WHS 3 - Temporal Anomaly", "region": "White Hole Station", "requires": [ - { "item": "Translator" }, // more projection stone text, see previous comment + { "item": "Translator (Brittle Hollow)" }, // more projection stone text, see previous comment { "item": "Launch Codes" } ] }, { "category": "base", "logsanity": true, "address": 1085039154, "name": "Ship Log: WHS 4 - Miniscule Interval", - "region": "White Hole Station", "requires": [ { "item": "Translator" } ] // text wall in WHS + "region": "White Hole Station", "requires": [ { "item": "Translator (Other)" } ] // text wall in WHS }, { "category": "base", "logsanity": true, "address": 1085039155, "name": "Ship Log: Frozen Shuttle 1 - Identify", - "region": "Space", "requires": [ { "item": "Translator" } ] // text wheel just outside the shuttle, on Interloper surface + "region": "Space", "requires": [ { "item": "Translator (Other)" } ] // text wheel just outside the shuttle, on Interloper surface }, { "category": "base", "logsanity": true, "address": 1085039156, "name": "Ship Log: Frozen Shuttle 2 - Energy Readings", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] // text wheel inside the shuttle, read by recalling to ET + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Other)" } ] // text wheel inside the shuttle, read by recalling to ET }, { "category": "base", "logsanity": true, "address": 1085039157, "name": "Ship Log: Frozen Shuttle 3 - Stayed", - "region": "Space", "requires": [ { "item": "Translator" } ] // text wheel just outside the shuttle, on Interloper surface + "region": "Space", "requires": [ { "item": "Translator (Other)" } ] // text wheel just outside the shuttle, on Interloper surface }, { "category": "base", "logsanity": true, "address": 1085039158, "name": "Ship Log: Frozen Shuttle 4 - Lost Contact", - "region": "Hourglass Twins", "requires": [ { "item": "Translator" } ] // text wheel inside the shuttle, read by recalling to ET + "region": "Hourglass Twins", "requires": [ { "item": "Translator (Other)" } ] // text wheel inside the shuttle, read by recalling to ET }, { "category": "base", "logsanity": true, "address": 1085039159, "name": "Ship Log: Ruptured Core 1 - Missing Crew", @@ -1051,15 +1051,15 @@ }, { "category": "base", "logsanity": true, "address": 1085039160, "name": "Ship Log: Ruptured Core 2 - Exotic Matter", - "region": "Interloper Core", "requires": [ { "item": "Translator" } ] // text wheel + "region": "Interloper Core", "requires": [ { "item": "Translator (Other)" } ] // text wheel }, { "category": "base", "logsanity": true, "address": 1085039161, "name": "Ship Log: Ruptured Core 3 - Instant Blanket", - "region": "Interloper Core", "requires": [ { "item": "Translator" } ] // text wheel + "region": "Interloper Core", "requires": [ { "item": "Translator (Other)" } ] // text wheel }, { "category": "base", "logsanity": true, "address": 1085039162, "name": "Ship Log: Ruptured Core 4 - Warn the Others", - "region": "Interloper Core", "requires": [ { "item": "Translator" } ] // text wheel + "region": "Interloper Core", "requires": [ { "item": "Translator (Other)" } ] // text wheel }, { "category": "base", "logsanity": true, "address": 1085039163, "name": "QM Ship Log: QM 1 - Land", @@ -1071,27 +1071,27 @@ }, { "category": "base", "logsanity": true, "address": 1085039165, "name": "Ship Log: Solanum's Shuttle 1 - Landing", - "region": "Solanum's Shuttle Interior", "requires": [ { "item": "Translator" } ] // text wheel inside shuttle + "region": "Solanum's Shuttle Interior", "requires": [ { "item": "Translator (Other)" } ] // text wheel inside shuttle }, { "category": "base", "logsanity": true, "address": 1085039166, "name": "Ship Log: Solanum's Shuttle 2 - South Pole", - "region": "Solanum's Shuttle Interior", "requires": [ { "item": "Translator" } ] // text wheel inside shuttle + "region": "Solanum's Shuttle Interior", "requires": [ { "item": "Translator (Other)" } ] // text wheel inside shuttle }, { "category": "base", "logsanity": true, "address": 1085039167, "name": "QM Ship Log: Quantum Shrine 1 - Identify", - "region": "Quantum Shrine", "requires": [ { "item": "Translator" } ] + "region": "Quantum Shrine", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039168, "name": "QM Ship Log: Quantum Shrine 2 - Imaging Rule", - "region": "Quantum Shrine", "requires": [ { "item": "Translator" } ] + "region": "Quantum Shrine", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039169, "name": "QM Ship Log: Quantum Shrine 3 - Entanglement Rule", - "region": "Quantum Shrine", "requires": [ { "item": "Translator" } ] + "region": "Quantum Shrine", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039170, "name": "QM Ship Log: Quantum Shrine 4 - Sixth Location Rule", - "region": "Quantum Shrine", "requires": [ { "item": "Translator" } ] + "region": "Quantum Shrine", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039171, "name": "QM Ship Log: Sixth Location 1 - Visit", @@ -1099,23 +1099,23 @@ }, { "category": "base", "logsanity": true, "address": 1085039172, "name": "QM Ship Log: Sixth Location 2 - Moon", - "region": "Sixth Location", "requires": [ { "item": "Translator" } ] + "region": "Sixth Location", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039173, "name": "QM Ship Log: Sixth Location 3 - Reflection", - "region": "Sixth Location", "requires": [ { "item": "Translator" } ] + "region": "Sixth Location", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039174, "name": "QM Ship Log: Sixth Location 4 - Source", - "region": "Sixth Location", "requires": [ { "item": "Translator" } ] + "region": "Sixth Location", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039175, "name": "QM Ship Log: Sixth Location 5 - Conscious Observer", - "region": "Sixth Location", "requires": [ { "item": "Translator" } ] + "region": "Sixth Location", "requires": [ { "item": "Translator (Other)" } ] }, { "category": "base", "logsanity": true, "address": 1085039176, "name": "QM Ship Log: Sixth Location 6 - Status", - "region": "Sixth Location", "requires": [ { "item": "Translator" } ] + "region": "Sixth Location", "requires": [ { "item": "Translator (Other)" } ] }, // I didn't add these until DLC integration because a) I wasn't sure if a DLC-less game had any of all of these, diff --git a/worlds/outer_wilds/shared_static_logic/static_logic.pickle b/worlds/outer_wilds/shared_static_logic/static_logic.pickle index ed45ce56d1f8..9fea26975aef 100644 Binary files a/worlds/outer_wilds/shared_static_logic/static_logic.pickle and b/worlds/outer_wilds/shared_static_logic/static_logic.pickle differ diff --git a/worlds/outer_wilds/test/__init__.py b/worlds/outer_wilds/test/__init__.py index b11e50ec8db2..b0ca98ac8c9b 100644 --- a/worlds/outer_wilds/test/__init__.py +++ b/worlds/outer_wilds/test/__init__.py @@ -143,6 +143,32 @@ def test_default_world(self): self.song_of_five_required_items + self.song_of_the_nomai_additional_required_items) +class TestSplitTranslator(OuterWildsTestBase): + options = { + "split_translator": True + } + + def test_split_translator(self): + self.assertReachableWith("ET: High Energy Lab (Upper Text Wall)", [ + "Launch Codes", "Translator (Hourglass Twins)" + ]) + self.assertReachableWith("TH: Mines (Text Wall)", [ + "Launch Codes", "Translator (Timber Hearth)" + ]) + self.assertReachableWith("BH: Southern Observatory (Tornado Text Wall)", [ + "Launch Codes", "Translator (Brittle Hollow)" + ]) + self.assertReachableWith("GD: Control Module Logs (Text Wheels)", [ + "Launch Codes", "Translator (Giant's Deep)" + ]) + self.assertReachableWith("DB: Nomai Grave (Text Wheel)", [ + "Launch Codes", "Silent Running Mode", "Signalscope", "Distress Beacon Frequency", "Escape Pod 3 Signal", "Translator (Dark Bramble)" + ]) + self.assertReachableWith("Ruptured Core (Text Wheel)", [ + "Launch Codes", "Scout", "Ghost Matter Wavelength", "Translator (Other)" + ]) + + class TestSongOfNomaiWorld(OuterWildsTestBase): options = { "goal": Goal.option_song_of_the_nomai