New features and fixes for Raft (#984)
* Add DeathLink, small logic changes * Fix generation, rules, use bool for slotData * Add more island options * Update Shovel-related logic * Update docs
This commit is contained in:
parent
4b6d46fd74
commit
b7cfcc9272
|
@ -1,8 +1,4 @@
|
|||
from Options import Range, Toggle, DefaultOnToggle, Choice
|
||||
|
||||
class UseResourcePacks(DefaultOnToggle):
|
||||
"""Uses Resource Packs to fill out the item pool from Raft. Resource Packs have basic earlygame items such as planks, plastic, or food."""
|
||||
display_name = "Use resource packs"
|
||||
from Options import Range, Toggle, DefaultOnToggle, Choice, DeathLink
|
||||
|
||||
class MinimumResourcePackAmount(Range):
|
||||
"""The minimum amount of resources available in a resource pack"""
|
||||
|
@ -19,23 +15,30 @@ class MaximumResourcePackAmount(Range):
|
|||
default = 5
|
||||
|
||||
class DuplicateItems(Choice):
|
||||
"""Adds duplicates of items to the item pool. These will be selected alongside
|
||||
Resource Packs (if configured). Note that there are not many progression items,
|
||||
and selecting Progression may produce many of the same duplicate item."""
|
||||
"""Adds duplicates of items to the item pool (if configured in Filler items). These will be selected alongside Resource Packs (if configured). Note that there are not many progression items, and selecting Progression may produce many of the same duplicate item."""
|
||||
display_name = "Duplicate items"
|
||||
option_disabled = 0
|
||||
option_progression = 1
|
||||
option_non_progression = 2
|
||||
option_any = 3
|
||||
option_progression = 0
|
||||
option_non_progression = 1
|
||||
option_any = 2
|
||||
default = 2
|
||||
|
||||
class FillerItemTypes(Choice):
|
||||
"""Determines whether to use Resource Packs, Duplicate Items (as configured), or both."""
|
||||
display_name = "Filler items"
|
||||
option_resource_packs = 0
|
||||
option_duplicates = 1
|
||||
option_both = 2
|
||||
|
||||
class IslandFrequencyLocations(Choice):
|
||||
"""Sets where frequencies for story islands are located."""
|
||||
display_name = "Frequency locations"
|
||||
option_vanilla = 0
|
||||
option_random_on_island = 1
|
||||
option_progressive = 2
|
||||
option_anywhere = 3
|
||||
default = 1
|
||||
option_random_island_order = 2
|
||||
option_random_on_island_random_order = 3
|
||||
option_progressive = 4
|
||||
option_anywhere = 5
|
||||
default = 2
|
||||
|
||||
class IslandGenerationDistance(Choice):
|
||||
"""Sets how far away islands spawn from you when you input their coordinates into the Receiver."""
|
||||
|
@ -56,7 +59,7 @@ class ProgressiveItems(DefaultOnToggle):
|
|||
display_name = "Progressive items"
|
||||
|
||||
class BigIslandEarlyCrafting(Toggle):
|
||||
"""Allows recipes that require items from big islands (eg leather) to lock earlygame items like the Receiver, Bolt, or Smelter."""
|
||||
"""Allows recipes that require items from big islands (eg leather) to lock earlygame items like the Receiver, Bolt, or Smelter. Big islands are available from the start of the game, however it can take a long time to find them."""
|
||||
display_name = "Early recipes behind big islands"
|
||||
|
||||
class PaddleboardMode(Toggle):
|
||||
|
@ -64,14 +67,15 @@ class PaddleboardMode(Toggle):
|
|||
display_name = "Paddleboard Mode"
|
||||
|
||||
raft_options = {
|
||||
"use_resource_packs": UseResourcePacks,
|
||||
"minimum_resource_pack_amount": MinimumResourcePackAmount,
|
||||
"maximum_resource_pack_amount": MaximumResourcePackAmount,
|
||||
"duplicate_items": DuplicateItems,
|
||||
"filler_item_types": FillerItemTypes,
|
||||
"island_frequency_locations": IslandFrequencyLocations,
|
||||
"island_generation_distance": IslandGenerationDistance,
|
||||
"expensive_research": ExpensiveResearch,
|
||||
"progressive_items": ProgressiveItems,
|
||||
"big_island_early_crafting": BigIslandEarlyCrafting,
|
||||
"paddleboard_mode": PaddleboardMode
|
||||
"paddleboard_mode": PaddleboardMode,
|
||||
"death_link": DeathLink
|
||||
}
|
||||
|
|
|
@ -12,9 +12,6 @@ class RaftLogic(LogicMixin):
|
|||
|
||||
def raft_can_smelt_items(self, player):
|
||||
return self.has("Smelter", player)
|
||||
|
||||
def raft_can_find_titanium(self, player):
|
||||
return self.has("Metal detector", player)
|
||||
|
||||
def raft_can_craft_bolt(self, player):
|
||||
return self.raft_can_smelt_items(player) and self.has("Bolt", player)
|
||||
|
@ -27,12 +24,19 @@ class RaftLogic(LogicMixin):
|
|||
|
||||
def raft_can_craft_circuitBoard(self, player):
|
||||
return self.raft_can_smelt_items(player) and self.has("Circuit board", player)
|
||||
|
||||
def raft_can_craft_shovel(self, player):
|
||||
return self.raft_can_smelt_items(player) and self.has("Shovel", player) and self.raft_can_craft_bolt(player)
|
||||
|
||||
def raft_can_craft_reciever(self, player):
|
||||
return self.raft_can_craft_circuitBoard(player) and self.raft_can_craft_hinge(player) and self.has("Receiver", player)
|
||||
|
||||
def raft_can_craft_antenna(self, player):
|
||||
return self.raft_can_craft_circuitBoard(player) and self.raft_can_craft_bolt(player) and self.has("Antenna", player)
|
||||
|
||||
def raft_can_find_titanium(self, player):
|
||||
return (self.has("Metal detector", player) and self.raft_can_craft_battery(player)
|
||||
and self.raft_can_craft_shovel(player))
|
||||
|
||||
def raft_can_craft_plasticBottle(self, player):
|
||||
return self.raft_can_smelt_items(player) and self.has("Empty bottle", player)
|
||||
|
@ -60,7 +64,7 @@ class RaftLogic(LogicMixin):
|
|||
return self.raft_can_craft_hinge(player) and self.raft_can_craft_bolt(player) and self.has("Zipline tool", player)
|
||||
|
||||
def raft_can_get_dirt(self, player):
|
||||
return self.raft_can_smelt_items(player) and self.raft_can_craft_bolt(player) and self.has("Shovel", player)
|
||||
return self.raft_can_craft_shovel(player) and self.raft_big_islands_available(player)
|
||||
|
||||
def raft_can_craft_grassPlot(self, player):
|
||||
return self.raft_can_get_dirt(player) and self.has("Grass plot", player)
|
||||
|
@ -88,60 +92,69 @@ class RaftLogic(LogicMixin):
|
|||
return self.raft_can_access_radio_tower(player)
|
||||
|
||||
def raft_can_access_vasagatan(self, player):
|
||||
return self.raft_can_complete_radio_tower(player) and self.raft_can_navigate(player) and self.has("Vasagatan Frequency", player)
|
||||
return self.raft_can_navigate(player) and self.has("Vasagatan Frequency", player)
|
||||
|
||||
def raft_can_complete_vasagatan(self, player):
|
||||
return self.raft_can_access_vasagatan(player)
|
||||
|
||||
def raft_can_access_balboa_island(self, player):
|
||||
return (self.raft_can_complete_vasagatan(player)
|
||||
and self.raft_can_drive(player)
|
||||
and self.has("Balboa Island Frequency", player))
|
||||
return self.raft_can_drive(player) and self.has("Balboa Island Frequency", player)
|
||||
|
||||
def raft_can_complete_balboa_island(self, player):
|
||||
return self.raft_can_access_balboa_island(player) and self.raft_can_craft_machete(player)
|
||||
|
||||
def raft_can_access_caravan_island(self, player):
|
||||
return self.raft_can_complete_balboa_island(player) and self.raft_can_drive(player) and self.has("Caravan Island Frequency", player)
|
||||
return self.raft_can_drive(player) and self.has("Caravan Island Frequency", player)
|
||||
|
||||
def raft_can_complete_caravan_island(self, player):
|
||||
return self.raft_can_access_caravan_island(player) and self.raft_can_craft_ziplineTool(player)
|
||||
|
||||
def raft_can_access_tangaroa(self, player):
|
||||
return self.raft_can_complete_caravan_island(player) and self.raft_can_drive(player) and self.has("Tangaroa Frequency", player)
|
||||
return self.raft_can_drive(player) and self.has("Tangaroa Frequency", player)
|
||||
|
||||
def raft_can_complete_tangaroa(self, player):
|
||||
return self.raft_can_access_tangaroa(player)
|
||||
return self.raft_can_access_tangaroa(player) and self.raft_can_craft_ziplineTool(player)
|
||||
|
||||
def raft_can_access_varuna_point(self, player):
|
||||
return self.raft_can_complete_tangaroa(player) and self.raft_can_drive(player) and self.has("Varuna Point Frequency", player)
|
||||
return self.raft_can_drive(player) and self.has("Varuna Point Frequency", player)
|
||||
|
||||
def raft_can_complete_varuna_point(self, player):
|
||||
return self.raft_can_access_varuna_point(player)
|
||||
return self.raft_can_access_varuna_point(player) and self.raft_can_craft_ziplineTool(player)
|
||||
|
||||
def raft_can_access_temperance(self, player):
|
||||
return self.raft_can_complete_varuna_point(player) and self.raft_can_drive(player) and self.has("Temperance Frequency", player)
|
||||
return self.raft_can_drive(player) and self.has("Temperance Frequency", player)
|
||||
|
||||
def raft_can_complete_temperance(self, player):
|
||||
return self.raft_can_access_temperance(player)
|
||||
return self.raft_can_access_temperance(player) # No zipline required on Temperance
|
||||
|
||||
def raft_can_access_utopia(self, player):
|
||||
return self.raft_can_complete_temperance(player) and self.raft_can_drive(player) and self.has("Utopia Frequency", player)
|
||||
return (self.raft_can_drive(player)
|
||||
# Access checks are to prevent frequencies for other
|
||||
# islands from appearing in Utopia
|
||||
and self.raft_can_access_radio_tower(player)
|
||||
and self.raft_can_access_vasagatan(player)
|
||||
and self.raft_can_access_balboa_island(player)
|
||||
and self.raft_can_access_caravan_island(player)
|
||||
and self.raft_can_access_tangaroa(player)
|
||||
and self.raft_can_access_varuna_point(player)
|
||||
and self.raft_can_access_temperance(player)
|
||||
and self.has("Utopia Frequency", player)
|
||||
and self.raft_can_craft_shovel(player)) # Shovels are available but we don't want to softlock players
|
||||
|
||||
def raft_can_complete_utopia(self, player):
|
||||
return self.raft_can_access_utopia(player)
|
||||
return self.raft_can_access_utopia(player) and self.raft_can_craft_ziplineTool(player)
|
||||
|
||||
def set_rules(world, player):
|
||||
regionChecks = {
|
||||
"Raft": lambda state: True,
|
||||
"ResearchTable": lambda state: True,
|
||||
"RadioTower": lambda state: state.raft_can_access_radio_tower(player), # All can_access functions have state as implicit parameter for function
|
||||
"Vasagatan": lambda state: state.raft_can_complete_radio_tower(player) and state.raft_can_access_vasagatan(player),
|
||||
"BalboaIsland": lambda state: state.raft_can_complete_vasagatan(player) and state.raft_can_access_balboa_island(player),
|
||||
"CaravanIsland": lambda state: state.raft_can_complete_balboa_island(player) and state.raft_can_access_caravan_island(player),
|
||||
"Tangaroa": lambda state: state.raft_can_complete_caravan_island(player) and state.raft_can_access_tangaroa(player),
|
||||
"Varuna Point": lambda state: state.raft_can_complete_tangaroa(player) and state.raft_can_access_varuna_point(player),
|
||||
"Temperance": lambda state: state.raft_can_complete_varuna_point(player) and state.raft_can_access_temperance(player),
|
||||
"Vasagatan": lambda state: state.raft_can_access_vasagatan(player),
|
||||
"BalboaIsland": lambda state: state.raft_can_access_balboa_island(player),
|
||||
"CaravanIsland": lambda state: state.raft_can_access_caravan_island(player),
|
||||
"Tangaroa": lambda state: state.raft_can_access_tangaroa(player),
|
||||
"Varuna Point": lambda state: state.raft_can_access_varuna_point(player),
|
||||
"Temperance": lambda state: state.raft_can_access_temperance(player),
|
||||
"Utopia": lambda state: state.raft_can_complete_temperance(player) and state.raft_can_access_utopia(player)
|
||||
}
|
||||
itemChecks = {
|
||||
|
@ -183,7 +196,7 @@ def set_rules(world, player):
|
|||
if region != "Menu":
|
||||
for exitRegion in world.get_region(region, player).exits:
|
||||
set_rule(world.get_entrance(exitRegion.name, player), regionChecks[region])
|
||||
|
||||
|
||||
# Location access rules
|
||||
for location in location_table:
|
||||
locFromWorld = world.get_location(location["name"], player)
|
||||
|
|
|
@ -56,21 +56,21 @@ class RaftWorld(World):
|
|||
extraItemNamePool = []
|
||||
extras = len(location_table) - len(item_table) - 1 # Victory takes up 1 unaccounted-for slot
|
||||
if extras > 0:
|
||||
if (self.world.use_resource_packs[self.player].value):
|
||||
if (self.world.filler_item_types[self.player].value != 1): # Use resource packs
|
||||
for packItem in resourcePackItems:
|
||||
for i in range(minimumResourcePackAmount, maximumResourcePackAmount + 1):
|
||||
extraItemNamePool.append(createResourcePackName(i, packItem))
|
||||
|
||||
if self.world.duplicate_items[self.player].value != 0:
|
||||
if self.world.filler_item_types[self.player].value != 0: # Use duplicate items
|
||||
dupeItemPool = item_table.copy()
|
||||
# Remove frequencies if necessary
|
||||
if self.world.island_frequency_locations[self.player].value != 3: # Not completely random locations
|
||||
if self.world.island_frequency_locations[self.player].value != 5: # Not completely random locations
|
||||
dupeItemPool = (itm for itm in dupeItemPool if "Frequency" not in itm["name"])
|
||||
|
||||
# Remove progression or non-progression items if necessary
|
||||
if (self.world.duplicate_items[self.player].value == 1): # Progression only
|
||||
if (self.world.duplicate_items[self.player].value == 0): # Progression only
|
||||
dupeItemPool = (itm for itm in dupeItemPool if itm["progression"] == True)
|
||||
elif (self.world.duplicate_items[self.player].value == 2): # Non-progression only
|
||||
elif (self.world.duplicate_items[self.player].value == 1): # Non-progression only
|
||||
dupeItemPool = (itm for itm in dupeItemPool if itm["progression"] == False)
|
||||
|
||||
dupeItemPool = list(dupeItemPool)
|
||||
|
@ -91,19 +91,15 @@ class RaftWorld(World):
|
|||
|
||||
def create_regions(self):
|
||||
create_regions(self.world, self.player)
|
||||
|
||||
def fill_slot_data(self):
|
||||
slot_data = {}
|
||||
return slot_data
|
||||
|
||||
def get_pre_fill_items(self):
|
||||
if self.world.island_frequency_locations[self.player] in [0, 1]:
|
||||
if self.world.island_frequency_locations[self.player] in [0, 1, 2, 3]:
|
||||
return [loc.item for loc in self.world.get_filled_locations()]
|
||||
return []
|
||||
|
||||
def create_item_replaceAsNecessary(self, name: str) -> Item:
|
||||
isFrequency = "Frequency" in name
|
||||
shouldUseProgressive = ((isFrequency and self.world.island_frequency_locations[self.player].value == 2)
|
||||
shouldUseProgressive = ((isFrequency and self.world.island_frequency_locations[self.player].value == 4)
|
||||
or (not isFrequency and self.world.progressive_items[self.player].value))
|
||||
if shouldUseProgressive and name in progressive_table:
|
||||
name = progressive_table[name]
|
||||
|
@ -148,6 +144,40 @@ class RaftWorld(World):
|
|||
self.setLocationItemFromRegion("Tangaroa", "Varuna Point Frequency")
|
||||
self.setLocationItemFromRegion("Varuna Point", "Temperance Frequency")
|
||||
self.setLocationItemFromRegion("Temperance", "Utopia Frequency")
|
||||
elif self.world.island_frequency_locations[self.player] in [2, 3]:
|
||||
locationToFrequencyItemMap = {
|
||||
"Vasagatan": "Vasagatan Frequency",
|
||||
"BalboaIsland": "Balboa Island Frequency",
|
||||
"CaravanIsland": "Caravan Island Frequency",
|
||||
"Tangaroa": "Tangaroa Frequency",
|
||||
"Varuna Point": "Varuna Point Frequency",
|
||||
"Temperance": "Temperance Frequency",
|
||||
"Utopia": "Utopia Frequency"
|
||||
}
|
||||
locationToVanillaFrequencyLocationMap = {
|
||||
"RadioTower": "Radio Tower Frequency to Vasagatan",
|
||||
"Vasagatan": "Vasagatan Frequency to Balboa",
|
||||
"BalboaIsland": "Relay Station quest",
|
||||
"CaravanIsland": "Caravan Island Frequency to Tangaroa",
|
||||
"Tangaroa": "Tangaroa Frequency to Varuna Point",
|
||||
"Varuna Point": "Varuna Point Frequency to Temperance",
|
||||
"Temperance": "Temperance Frequency to Utopia"
|
||||
}
|
||||
# Utopia is never chosen until the end, otherwise these are chosen randomly
|
||||
availableLocationList = ["Vasagatan", "BalboaIsland", "CaravanIsland", "Tangaroa", "Varuna Point", "Temperance", "Utopia"]
|
||||
previousLocation = "RadioTower"
|
||||
while (len(availableLocationList) > 0):
|
||||
if (len(availableLocationList) > 1):
|
||||
currentLocation = availableLocationList[random.randint(0, len(availableLocationList) - 2)]
|
||||
else:
|
||||
currentLocation = availableLocationList[0] # Utopia (only one left in list)
|
||||
availableLocationList.remove(currentLocation)
|
||||
if self.world.island_frequency_locations[self.player] == 2:
|
||||
self.setLocationItem(locationToVanillaFrequencyLocationMap[previousLocation], locationToFrequencyItemMap[currentLocation])
|
||||
elif self.world.island_frequency_locations[self.player] == 3:
|
||||
self.setLocationItemFromRegion(previousLocation, locationToFrequencyItemMap[currentLocation])
|
||||
previousLocation = currentLocation
|
||||
|
||||
# Victory item
|
||||
self.world.get_location("Utopia Complete", self.player).place_locked_item(
|
||||
RaftItem("Victory", ItemClassification.progression, None, player=self.player))
|
||||
|
@ -166,7 +196,8 @@ class RaftWorld(World):
|
|||
def fill_slot_data(self):
|
||||
return {
|
||||
"IslandGenerationDistance": self.world.island_generation_distance[self.player].value,
|
||||
"ExpensiveResearch": self.world.expensive_research[self.player].value
|
||||
"ExpensiveResearch": bool(self.world.expensive_research[self.player].value),
|
||||
"DeathLink": bool(self.world.death_link[self.player].value)
|
||||
}
|
||||
|
||||
def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
|
||||
|
|
|
@ -22,7 +22,7 @@ Decoration Packages are unchanged.
|
|||
Researches and pickups remain visually unchanged, regardless of what the unlock is.
|
||||
|
||||
## When the player receives an item, what happens?
|
||||
A Raft notification will appear with the item information. The unlock will also appear in the chat. Unlocks that would normally give you the item (eg Machete) will NOT give it to you, but must instead be crafted.
|
||||
A Raft notification will appear with the item information. The unlock will also appear in the chat. Unlocks that would normally give you the item (eg Zipline) will NOT give it to you, but must instead be crafted.
|
||||
|
||||
## Are there any limitations compared to vanilla Raft?
|
||||
- Mods that add new researchable technologies, modify story islands, or give items like blueprints are likely incompatible with Raftipelago.
|
||||
|
|
|
@ -4,23 +4,50 @@
|
|||
|
||||
- [Raft](https://store.steampowered.com/app/648800/Raft/)
|
||||
- [Raft Mod Loader](https://www.raftmodding.com/loader) ("*RML*")
|
||||
- [ModUtils mod](https://www.raftmodding.com/mods/modutils)
|
||||
- [Raftipelago mod](https://www.raftmodding.com/mods/raftipelago)
|
||||
|
||||
## Installation Procedures
|
||||
|
||||
1. Install Raft. The currently-supported Raft version is Version 1.0: The Final Chapter. If you plan on playing Raft mainly with Archipelago, it's recommended to disable Raft auto-updating through Steam, as there is no beta channel to get old builds.
|
||||
1. Install Raft. The currently-supported Raft version is Version 1.0: The Final Chapter. Any minor version (such as 1.08) should be compatible.
|
||||
|
||||
2. Install RML.
|
||||
|
||||
3. Install the Raftipelago mod from the Raft Modding website. You should open the auto-installation link on the webpage through RML. Alternatively, you can download the .rmod file and place it in the Mods folder manually.
|
||||
3. Install the Raftipelago and ModUtils mods from the Raft Modding website. You should open the auto-installation link on the webpage through RML. Alternatively, you can download the .rmod file and place it in the Mods folder manually.
|
||||
|
||||
4. Open RML and click Play. If you've already installed it, the shortcut in the Start Menu is called "RMLLauncher.exe". Raft should start.
|
||||
4. Open RML and click Play. If you've already installed it, the executable that was used to install RML ("RMLLauncher.exe" unless renamed) should be used to run RML. Raft should start after clicking Play.
|
||||
|
||||
5. Open the RML menu. This should open automatically when Raft first loads. If it does not, and you see RML information in the top center of the Raft main menu, press F9 to open it.
|
||||
|
||||
6. Navigate to the "Mod manager" tab in the left-hand menu.
|
||||
|
||||
7. Click on the plug icon for Raftipelago to load the mod.
|
||||
7. Click on the plug icon for ModUtils to load the mod. You can also click on the (i) next to the plug icon, then check the "Load this mod at startup" button. This will make the mod always load at startup.
|
||||
|
||||
8. Click on the plug icon for Raftipelago to load the mod. While it's possible to also make this mod load at startup, it's recommended *not* to do so; if this mod loads before ModUtils, the mod will fail to load properly.
|
||||
|
||||
## Joining a MultiWorld Game
|
||||
|
||||
1. Ensure you're on the Main Menu with Raftipelago loaded.
|
||||
|
||||
2. Open the Debug Console by pressing F10.
|
||||
|
||||
3. Type */connect {serverAddress} {username} {password}* into the console and hit Enter.
|
||||
- Example: */connect archipelago.gg:12345 SunnyBat*
|
||||
- If there is no password, the password argument may be omitted (as is the case in the above example).
|
||||
- serverAddress must not contain spaces.
|
||||
- If your username or password contains spaces, surround that value with quotation marks ("). Adding quotation marks even when not necessary (eg "SunnyBat") is fine.
|
||||
- If your username or password starts with a quotation mark, surround the value with an additional set of quotation marks (eg the value *"myP@s$w0rD* would be entered as *""myP@s$w0rD"*).
|
||||
|
||||
4. Start a new game or load an existing one. It's recommended to avoid using an existing game that was not created with your current run of Raftipelago (either vanilla or a different Raftipelago run). It will work, but if anything is unlocked, it will be automatically registered with Archipelago once the world is loaded. This is irreversible.
|
||||
|
||||
5. You can disconnect from an Archipelago server by typing */disconnect confirmDisconnect* into the console and hitting Enter.
|
||||
|
||||
## Multiplayer Raft
|
||||
|
||||
You're able to have multiple Raft players on a single Raftipelago world. This will work, with a few notes:
|
||||
- Only the player that creates/loads the world can connect to Archipelago (this is the "host" of the Raft world). Other players do not need to connect; everything will be routed through the the host.
|
||||
- Players other than the host will be labeled as a "Raft Player (Steam name)" when using ingame chat, which will be routed through Archipelago chat.
|
||||
- Ingame chat will only work when the host is connected to the Archipelago server.
|
||||
|
||||
## Installation Troubleshooting
|
||||
|
||||
|
@ -45,38 +72,12 @@ If this happens, then RML is configured to only start a new instance of Raft, th
|
|||
You can either:
|
||||
- Close the existing instance of Raft then click Play
|
||||
- Check the box next to the "Disable Automatic Game Start" setting in the Settings menu then click Play.
|
||||
|
||||
## Joining a MultiWorld Game
|
||||
|
||||
1. Ensure you're on the Main Menu with Raftipelago loaded.
|
||||
|
||||
2. Open the Debug Console by pressing F10.
|
||||
|
||||
3. Type */connect {serverAddress} {username} {password}* into the console and hit Enter.
|
||||
- Example: */connect archipelago.gg:12345 SunnyBat*
|
||||
- serverAddress must not contain spaces.
|
||||
- If your username or password contains spaces, surround that value with quotation marks ("). Adding quotation marks even when not necessary (eg "SunnyBat") is fine.
|
||||
- If your username or password starts with a quotation mark, surround the value with an additional set of quotation marks (eg the value *"myP@s$w0rD* would be entered as *""myP@s$w0rD"*).
|
||||
|
||||
4. Start a new game or load an existing one.
|
||||
- Raftipelago save games are marked as *incompatible* with vanilla Raft. This means when Raftipelago is not loaded, saves made with Raftipelago will show as corrupt/unselectable.
|
||||
- Avoid using an existing game that was not created with your current run of Raftipelago (either vanilla or a different Raftipelago run). It will work, but if anything is unlocked, it will be automatically registered with Archipelago once the world is loaded. This is irreversible.
|
||||
|
||||
5. You can disconnect from an Archipelago server by typing */disconnect confirmDisconnect* into the console and hitting Enter.
|
||||
|
||||
## Multiplayer Raft
|
||||
|
||||
You're able to have multiple Raft players on a single Raftipelago world. This will work, with a few notes:
|
||||
- Only the player that creates/loads the world can connect to Archipelago (this is the "host" of the Raft world). Other players do not need to connect; everything will be routed through the the host.
|
||||
- Resource Packs are only received by the host and any other players connected to the Raft world when the resource pack is received.
|
||||
- Players other than the host will be labeled as a "Raft Player (Steam name)" when using ingame chat, which will be routed through Archipelago chat.
|
||||
- Ingame chat will only work when the host is connected to the Archipelago server.
|
||||
|
||||
## Game Troubleshooting
|
||||
|
||||
### The "Load game" button is disabled for my world / my world is corrupt
|
||||
|
||||
Be sure that you click the "Load game" button **after** you load Raftipelago. You can click the Load Game button again to reload all of the saves in your folder (there is no need to restart Raft if the mod loaded successfully).
|
||||
Be sure that you click the "Load game" button **after** you load Raftipelago. You can click the Load Game button again to refresh all of the saves in your folder (there is no need to restart Raft if the mod loaded successfully).
|
||||
|
||||
### I'm certain I'm doing things correctly, but the world is still not loadable
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"Raft": ["RadioTower", "ResearchTable"],
|
||||
"Raft": ["ResearchTable", "RadioTower", "Vasagatan", "BalboaIsland", "CaravanIsland", "Tangaroa", "Varuna Point", "Temperance", "Utopia"],
|
||||
"ResearchTable": [],
|
||||
"RadioTower": ["Vasagatan"],
|
||||
"Vasagatan": ["BalboaIsland"],
|
||||
"BalboaIsland": ["CaravanIsland"],
|
||||
"CaravanIsland": ["Tangaroa"],
|
||||
"Tangaroa": ["Varuna Point"],
|
||||
"Varuna Point": ["Temperance"],
|
||||
"Temperance": ["Utopia"],
|
||||
"RadioTower": [],
|
||||
"Vasagatan": [],
|
||||
"BalboaIsland": [],
|
||||
"CaravanIsland": [],
|
||||
"Tangaroa": [],
|
||||
"Varuna Point": [],
|
||||
"Temperance": [],
|
||||
"Utopia": []
|
||||
}
|
Loading…
Reference in New Issue