Subnautica: 2.0 compatibility ()

This commit is contained in:
Fabian Dill 2022-12-17 17:42:02 +01:00 committed by GitHub
parent 37b7f0d32d
commit e0be79639c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 34 deletions

View File

@ -41,11 +41,11 @@ item_table: Dict[int, ItemDict] = {
35007: {'classification': ItemClassification.filler, 35007: {'classification': ItemClassification.filler,
'count': 1, 'count': 1,
'name': 'Stillsuit', 'name': 'Stillsuit',
'tech_type': 'Stillsuit'}, 'tech_type': 'WaterFiltrationSuitFragment'},
35008: {'classification': ItemClassification.progression, 35008: {'classification': ItemClassification.progression,
'count': 2, 'count': 1,
'name': 'Alien Containment Fragment', 'name': 'Alien Containment',
'tech_type': 'BaseWaterParkFragment'}, 'tech_type': 'BaseWaterPark'},
35009: {'classification': ItemClassification.useful, 35009: {'classification': ItemClassification.useful,
'count': 1, 'count': 1,
'name': 'Creature Decoy', 'name': 'Creature Decoy',
@ -91,15 +91,15 @@ item_table: Dict[int, ItemDict] = {
'name': 'Bioreactor Fragment', 'name': 'Bioreactor Fragment',
'tech_type': 'BaseBioReactorFragment'}, 'tech_type': 'BaseBioReactorFragment'},
35020: {'classification': ItemClassification.progression, 35020: {'classification': ItemClassification.progression,
'count': 3, 'count': 4,
'name': 'Cyclops Bridge Fragment', 'name': 'Cyclops Bridge Fragment',
'tech_type': 'CyclopsBridgeFragment'}, 'tech_type': 'CyclopsBridgeFragment'},
35021: {'classification': ItemClassification.progression, 35021: {'classification': ItemClassification.progression,
'count': 3, 'count': 4,
'name': 'Cyclops Engine Fragment', 'name': 'Cyclops Engine Fragment',
'tech_type': 'CyclopsEngineFragment'}, 'tech_type': 'CyclopsEngineFragment'},
35022: {'classification': ItemClassification.progression, 35022: {'classification': ItemClassification.progression,
'count': 3, 'count': 4,
'name': 'Cyclops Hull Fragment', 'name': 'Cyclops Hull Fragment',
'tech_type': 'CyclopsHullFragment'}, 'tech_type': 'CyclopsHullFragment'},
35023: {'classification': ItemClassification.filler, 35023: {'classification': ItemClassification.filler,
@ -111,11 +111,11 @@ item_table: Dict[int, ItemDict] = {
'name': 'Laser Cutter Fragment', 'name': 'Laser Cutter Fragment',
'tech_type': 'LaserCutterFragment'}, 'tech_type': 'LaserCutterFragment'},
35025: {'classification': ItemClassification.filler, 35025: {'classification': ItemClassification.filler,
'count': 1, 'count': 2,
'name': 'Light Stick Fragment', 'name': 'Light Stick Fragment',
'tech_type': 'TechlightFragment'}, 'tech_type': 'TechlightFragment'},
35026: {'classification': ItemClassification.progression, 35026: {'classification': ItemClassification.progression,
'count': 4, 'count': 5,
'name': 'Mobile Vehicle Bay Fragment', 'name': 'Mobile Vehicle Bay Fragment',
'tech_type': 'ConstructorFragment'}, 'tech_type': 'ConstructorFragment'},
35027: {'classification': ItemClassification.progression, 35027: {'classification': ItemClassification.progression,
@ -139,7 +139,7 @@ item_table: Dict[int, ItemDict] = {
'name': 'Power Transmitter Fragment', 'name': 'Power Transmitter Fragment',
'tech_type': 'PowerTransmitterFragment'}, 'tech_type': 'PowerTransmitterFragment'},
35032: {'classification': ItemClassification.progression, 35032: {'classification': ItemClassification.progression,
'count': 5, 'count': 6,
'name': 'Prawn Suit Fragment', 'name': 'Prawn Suit Fragment',
'tech_type': 'ExosuitFragment'}, 'tech_type': 'ExosuitFragment'},
35033: {'classification': ItemClassification.useful, 35033: {'classification': ItemClassification.useful,
@ -163,7 +163,7 @@ item_table: Dict[int, ItemDict] = {
'name': 'Scanner Room Fragment', 'name': 'Scanner Room Fragment',
'tech_type': 'BaseMapRoomFragment'}, 'tech_type': 'BaseMapRoomFragment'},
35038: {'classification': ItemClassification.progression, 35038: {'classification': ItemClassification.progression,
'count': 4, 'count': 5,
'name': 'Seamoth Fragment', 'name': 'Seamoth Fragment',
'tech_type': 'SeamothFragment'}, 'tech_type': 'SeamothFragment'},
35039: {'classification': ItemClassification.progression, 35039: {'classification': ItemClassification.progression,
@ -196,8 +196,8 @@ item_table: Dict[int, ItemDict] = {
'tech_type': 'PrecursorIonPowerCell'}, 'tech_type': 'PrecursorIonPowerCell'},
35046: {'classification': ItemClassification.filler, 35046: {'classification': ItemClassification.filler,
'count': 2, 'count': 2,
'name': 'Exterior Growbed Fragment', 'name': 'Exterior Growbed',
'tech_type': 'FarmingTrayFragment'}, 'tech_type': 'FarmingTray'},
35047: {'classification': ItemClassification.filler, 35047: {'classification': ItemClassification.filler,
'count': 1, 'count': 1,
'name': 'Picture Frame', 'name': 'Picture Frame',
@ -219,23 +219,23 @@ item_table: Dict[int, ItemDict] = {
'name': 'Plant Shelf', 'name': 'Plant Shelf',
'tech_type': 'PlanterShelfFragment'}, 'tech_type': 'PlanterShelfFragment'},
35052: {'classification': ItemClassification.filler, 35052: {'classification': ItemClassification.filler,
'count': 2, 'count': 1,
'name': 'Observatory Fragment', 'name': 'Observatory',
'tech_type': 'BaseObservatoryFragment'}, 'tech_type': 'BaseObservatory'},
35053: {'classification': ItemClassification.progression, 35053: {'classification': ItemClassification.progression,
'count': 2, 'count': 2,
'name': 'Multipurpose Room', 'name': 'Multipurpose Room',
'tech_type': 'BaseRoom'}, 'tech_type': 'BaseRoom'},
35054: {'classification': ItemClassification.useful, 35054: {'classification': ItemClassification.useful,
'count': 2, 'count': 1,
'name': 'Bulkhead Fragment', 'name': 'Bulkhead',
'tech_type': 'BaseBulkheadFragment'}, 'tech_type': 'BaseBulkhead'},
35055: {'classification': ItemClassification.filler, 35055: {'classification': ItemClassification.filler,
'count': 1, 'count': 1,
'name': 'Spotlight', 'name': 'Spotlight',
'tech_type': 'Spotlight'}, 'tech_type': 'Spotlight'},
35056: {'classification': ItemClassification.filler, 35056: {'classification': ItemClassification.filler,
'count': 2, 'count': 1,
'name': 'Desk', 'name': 'Desk',
'tech_type': 'StarshipDesk'}, 'tech_type': 'StarshipDesk'},
35057: {'classification': ItemClassification.filler, 35057: {'classification': ItemClassification.filler,
@ -251,7 +251,7 @@ item_table: Dict[int, ItemDict] = {
'name': 'Command Chair', 'name': 'Command Chair',
'tech_type': 'StarshipChair3'}, 'tech_type': 'StarshipChair3'},
35060: {'classification': ItemClassification.filler, 35060: {'classification': ItemClassification.filler,
'count': 2, 'count': 1,
'name': 'Counter', 'name': 'Counter',
'tech_type': 'LabCounter'}, 'tech_type': 'LabCounter'},
35061: {'classification': ItemClassification.filler, 35061: {'classification': ItemClassification.filler,
@ -267,11 +267,11 @@ item_table: Dict[int, ItemDict] = {
'name': 'Quilted Double Bed', 'name': 'Quilted Double Bed',
'tech_type': 'Bed2'}, 'tech_type': 'Bed2'},
35064: {'classification': ItemClassification.filler, 35064: {'classification': ItemClassification.filler,
'count': 2, 'count': 1,
'name': 'Coffee Vending Machine', 'name': 'Coffee Vending Machine',
'tech_type': 'CoffeeVendingMachine'}, 'tech_type': 'CoffeeVendingMachine'},
35065: {'classification': ItemClassification.filler, 35065: {'classification': ItemClassification.filler,
'count': 2, 'count': 1,
'name': 'Trash Can', 'name': 'Trash Can',
'tech_type': 'Trashcans'}, 'tech_type': 'Trashcans'},
35066: {'classification': ItemClassification.filler, 35066: {'classification': ItemClassification.filler,
@ -338,6 +338,28 @@ item_table: Dict[int, ItemDict] = {
'count': 1, 'count': 1,
'name': 'Ultra High Capacity Tank', 'name': 'Ultra High Capacity Tank',
'tech_type': 'HighCapacityTank'}, 'tech_type': 'HighCapacityTank'},
# these currently unlock through some special sauce in Subnautica, unlike any established other
# keeping here for later
35082: {'classification': ItemClassification.progression,
'count': 0,
'name': 'Large Room',
'tech_type': 'BaseLargeRoom'},
35083: {'classification': ItemClassification.filler,
'count': 0,
'name': 'Large Room Glass Dome',
'tech_type': 'BaseLargeGlassDome'},
35084: {'classification': ItemClassification.filler,
'count': 0,
'name': 'Multipurpose Room Glass Dome',
'tech_type': 'BaseGlassDome'},
35085: {'classification': ItemClassification.filler,
'count': 0,
'name': 'Partition',
'tech_type': 'BasePartition'},
35086: {'classification': ItemClassification.filler,
'count': 0,
'name': 'Partition Door',
'tech_type': 'BasePartitionDoor'},
} }
advancement_item_names: Set[str] = set() advancement_item_names: Set[str] = set()
@ -351,6 +373,9 @@ for item_id, item_data in item_table.items():
non_advancement_item_names.add(item_name) non_advancement_item_names.add(item_name)
if False: # turn to True to export for Subnautica mod if False: # turn to True to export for Subnautica mod
from .Locations import location_table
itemcount = sum(item_data["count"] for item_data in item_table.values())
assert itemcount == len(location_table), f"{itemcount} != {len(location_table)}"
payload = {item_id: item_data["tech_type"] for item_id, item_data in item_table.items()} payload = {item_id: item_data["tech_type"] for item_id, item_data in item_table.items()}
import json import json

View File

@ -113,7 +113,11 @@ def has_stasis_rifle(state: "CollectionState", player: int) -> bool:
def has_containment(state: "CollectionState", player: int) -> bool: def has_containment(state: "CollectionState", player: int) -> bool:
return state.has("Alien Containment Fragment", player, 2) and state.has("Multipurpose Room", player) return state.has("Alien Containment", player) and has_utility_room(state, player)
def has_utility_room(state: "CollectionState", player: int) -> bool:
return state.has("Large Room", player) or state.has("Multipurpose Room", player)
# Either we have propulsion cannon, or prawn + propulsion cannon arm # Either we have propulsion cannon, or prawn + propulsion cannon arm

View File

@ -41,8 +41,8 @@ class SubnauticaWorld(World):
location_name_to_id = all_locations location_name_to_id = all_locations
option_definitions = Options.options option_definitions = Options.options
data_version = 7 data_version = 8
required_client_version = (0, 3, 6) required_client_version = (0, 3, 7)
creatures_to_scan: List[str] creatures_to_scan: List[str]

View File

@ -3,17 +3,14 @@
## Required Software ## Required Software
- Subnautica from: [Subnautica Steam Store Page](https://store.steampowered.com/app/264710/Subnautica/) - Subnautica from: [Subnautica Steam Store Page](https://store.steampowered.com/app/264710/Subnautica/)
- QModManager4 from: [QModManager4 Nexus Mods Page](https://www.nexusmods.com/subnautica/mods/201)
- Archipelago Mod for Subnautica - Archipelago Mod for Subnautica
from: [Subnautica Archipelago Mod Releases Page](https://github.com/Berserker66/ArchipelagoSubnauticaModSrc/releases) from: [Subnautica Archipelago Mod Releases Page](https://github.com/Berserker66/ArchipelagoSubnauticaModSrc/releases)
## Installation Procedure ## Installation Procedure
1. Install QModManager4 as per its instructions. 1. Unpack the Archipelago Mod into your Subnautica folder, so that `Subnautica/BepInEx` is a valid path.
2. The Subnautica game directory should now contain a `QMods` folder. Unpack the Archipelago Mod into this folder, so that `Subnautica/QMods/Archipelago/` is a valid path. 2. Start Subnautica. You should see a connect form with three text boxes in the top left of your main menu.
3. Start Subnautica. You should see a connect form with three text boxes in the top left of your main menu.
## Connecting ## Connecting
@ -36,6 +33,7 @@ Warning: Currently it is not checked whether a loaded savegame belongs to the mu
## Console Commands ## Console Commands
The mod adds the following console commands: The mod adds the following console commands:
- `say` sends the text following it to Archipelago as a chat message. ! is not an allowed character, use / instead.
- `silent` toggles Archipelago chat messages appearing. - `silent` toggles Archipelago chat messages appearing.
- `deathlink` toggles death link. - `deathlink` toggles death link.
@ -51,6 +49,6 @@ To enter a console command, press `Enter`.
## Troubleshooting ## Troubleshooting
If you don't see the connect form on the main menu screen, check whether you see a file named `qmodmanager_log-Subnautica.txt` in the Subnautica game directory. If not, If you don't see the connect form on the main menu screen, check whether you see a file named `LogOutput.txt` in the Subnautica/BepInEx directory.
QModManager4 is not correctly installed, otherwise open it and look for `Loading [Archipelago`. If the file doesn't contain this text, then If not, BepInEx is not correctly installed, otherwise open it and look for `Plugin Archipelago is loaded!`.
QModManager4 didn't find the Archipelago mod, so check your paths. If the file doesn't contain this text, then BepInEx didn't find the Archipelago mod, so check your paths.