SailwindCoop
Play Sailwind with friends over Steam, LAN or VPN. Shared sailing, shared wallet, mod list check, gestures and crew sleep.
| Date uploaded | 2 weeks ago |
| Version | 0.4.1 |
| Download link | pander33-SailwindCoop-0.4.1.zip |
| Downloads | 17 |
| Dependency string | pander33-SailwindCoop-0.4.1 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
Sailwind LAN Co-op Mod
English
📖 Description
Sailwind LAN Co-op is a mod that adds multiplayer functionality to the game Sailwind. It allows you to play with friends over LAN (Local Area Network) or through VPN/tunneling services.
Current Version: 0.4.1 Wire Protocol: 89. Use the same build on every machine. Most new features still await end-to-end in-game validation; see the release notes. Requirements: BepInEx 5.x, Sailwind 0.39
✨ Features
- LAN Multiplayer: Play with friends on the same network
- Cross-Internet Play: Use with VPN services (Hamachi, ZeroTier, etc.)
- Configurable Settings: Adjust network parameters, player name, and more
- In-game Co-op Menu: Press F8 to host, join, disconnect, choose avatar, show diagnostics, and open debug tools
- Default Avatar Included: The release includes
avatar.bundlefor remote player models - Avatar Customization: Replace
avatar.bundlewith your own compatible bundle if desired - Up to 5 Players: One host with up to 4 clients simultaneously
- Shared Sea: Waves, weather and time of day run on the host's clock, so every player sees the same water under the same hull
- Quiet by Default: Routine diagnostics are off; serious errors still use a limited log budget
- Crew Status and Host Controls: See who is loading or ready, their ping and boat; hosts can lock the session or remove a guest
- Gesture Wheel: Hold G to wave, point, salute or shout "Land ho!" to your crew
- Hands on the Ship: Other players' avatars reach for the item they carry and the winch, wheel or rope they hold
📥 Installation
Prerequisites
- Sailwind 0.39 installed via Steam
- BepInEx 5.x installed for Sailwind
- If not installed, download from: https://github.com/BepInEx/BepInEx/releases
- Extract to your Sailwind game folder
Editions
The mod comes in two editions. They use the same network protocol and can play together. The Thunderstore edition is published at https://thunderstore.io/c/sailwind/p/pander33/SailwindCoop/ and installs through a mod manager.
| Thunderstore edition | Full edition | |
|---|---|---|
| LAN / VPN play | yes | yes |
| Play over Steam without an IP address | yes | yes |
| Other mods compared when joining | yes | yes |
| Missing mods downloaded from the host | no | yes |
| Files | SailwindCoop.dll, LiteNetLib.dll, Facepunch.Steamworks.Win64.dll, steam_api64.dll, avatar.bundle, sounds/ |
the same |
The title of the status overlay (F8 -> Settings -> Show Status) shows which edition is running, for example Sailwind Co-op 0.4.1 (Thunderstore).
Mod Installation
- Download the latest release archive
- Extract every file of the archive to:
Sailwind/BepInEx/plugins/SailwindCoop/(see the table above for the files of each edition) - Launch the game
- To change your avatar, press F8, open Settings and click Avatar
🎮 How to Play
For gameplay details such as economy, missions, cargo, items, damage, mooring, anchor, sleep, and guest progress, read MULTIPLAYER_GUIDE.md.
Hosting a Game (You will be the server)
- Launch Sailwind
- Load or start a save game
- Press F8 to open the Sailwind Co-op menu
- Click Host
- Share your IP address with friends (see "Finding Your IP" below), or switch the menu to Steam before pressing Host so Steam friends can join without an IP address (see MULTIPLAYER_GUIDE.md)
- Wait for friends to connect
Joining a Game
- Launch Sailwind
- Important: Do NOT load a save game (stay at main menu)
- Press F8 to open the Sailwind Co-op menu
- Enter the host IP and click Join
- Default IP is
127.0.0.1(localhost) - The menu writes the value to
BepInEx/config/com.sailwind.coop.cfg
- Default IP is
- The host's world is sent to you automatically and loaded into the co-op save slot — wait for it to finish
Disconnecting
- Press F8 and click Disconnect
- After a connection has succeeded once, Reconnect repeats the join from the main menu. It is intentionally unavailable inside an already loaded world.
Crew And Host Controls
- The Crew section shows each player's loading state, ping, and current boat.
- The host can use Lock session / Open session without disconnecting existing players.
- The host can remove a guest with the two-step Kick / Sure? action.
- Teleport to boat puts you back on the deck if you fell overboard or the boat left without you.
Gestures
- Hold G during a session to open the gesture wheel, move the mouse to a gesture and release. Release in the middle, or press Esc, to cancel.
- Gestures: Wave, Land ho!, Point, Come here, Applause, Shrug, Salute, Hooray.
- "Land ho!" and "Point" aim where you are looking. "Land ho!" also shouts, and other players hear it from where you stand.
- Walking ends a gesture. You do not see your own gesture, because the game is first person.
- The first time the wheel becomes available, a short hint appears on screen. The key is also shown in the F8 menu and can be changed with
EmoteKeyin the config.
Overlay/Debug Info
The buttons below sit under Settings in the F8 menu, which is collapsed until you click it.
- Press F8, open Settings and use Show Status / Hide Status
- Logging switches the log file on and off without restarting the game. It is off by default; turn it on before reproducing a problem, otherwise the log will hold nothing useful
- Dump water state writes
debug/water-*.txt. Press it on both machines at the same moment if the sea ever looks different on one of them - Export report writes
debug/coop-report-*.txtwith session and recent error diagnostics, including when logging was off - The Debug button opens the developer panel, and only works if
EnableDebugPanelis set in the config
Skin Selection
- Press F8, open Settings and click Avatar to open the skin selection menu
- Skin changes are visible to other players in real-time
Menu Input
- While the co-op menu is open, the mouse cursor is captured by the menu and does not interact with the world.
- Closing the co-op menu closes companion panels such as Avatar and Debug, then returns cursor control to the game.
⚙️ Configuration
Configuration file location: Sailwind/BepInEx/config/com.sailwind.coop.cfg
| Setting | Default | Description |
|---|---|---|
| Network | ||
Port |
7777 | UDP port for hosting (must be forwarded if playing over internet) |
ListenIp |
0.0.0.0 | IP address to listen on (0.0.0.0 = all interfaces) |
JoinIp |
127.0.0.1 | IP address of the host to connect to |
PlayerName |
Player | Your display name in-game |
MaxClients |
4 | Maximum number of guests (1-4), in addition to the host |
SnapshotHz |
20 | State snapshot send rate |
InterpDelayMs |
100 | Interpolation buffer delay, in ms |
| Avatar | ||
VerticalOffset |
-0.6 | Vertical offset for client avatar model |
HostVerticalOffset |
-0.6 | Vertical offset for host avatar model |
| Save | ||
CoopSaveSlot |
5 | Slot the client writes the received host world into. The local save in this slot is overwritten. |
ForceHostSaveOnJoin |
true | Host makes a fresh save on join so the client gets the current world |
PauseHostOnJoin |
true | Host world is paused while a client loads it, so nothing drifts during the join |
| Debug | ||
EnableLogging |
false | Write diagnostics to BepInEx/LogOutput.log. Also toggleable in-game (F8 → Logging) |
EnableDebugPanel |
false | Developer/test panel. The Debug button in the menu does nothing until this is on |
| UI | ||
MenuKey |
F8 | Open/close the Sailwind Co-op menu |
EmoteKey |
G | Hold to open the gesture wheel. Change it if G is bound to something else in the game |
EmoteHintShown |
false | Becomes true after the one-time gesture hint was shown. Set to false to see it again |
🔍 Finding Your IP Address
For LAN Play (same network):
- Windows: Open Command Prompt and type
ipconfig - Look for "IPv4 Address" under your network adapter (usually starts with 192.168.x.x)
For Internet Play (with VPN):
- Hamachi: Use the Hamachi IP (5.x.x.x)
- ZeroTier: Use the ZeroTier-assigned IP
- Other VPN: Use the VPN-provided IP address
🛠️ Troubleshooting
Issue: Friends can't connect
- Ensure port 7777 (or your custom port) is open in your firewall
- For internet play: Set up port forwarding on your router
- Try disabling antivirus/firewall temporarily
- Make sure all players are using the same mod version
Issue: Game crashes on startup
- Verify BepInEx is installed correctly
- Check that
SailwindCoop.dllis in the right folder - Look at
BepInEx/LogOutput.logfor error details
Issue: Avatars appear incorrectly
- Adjust
VerticalOffsetandHostVerticalOffsetin the config file - Ensure
avatar.bundleexists inSailwind/BepInEx/plugins/SailwindCoop/
Issue: Reporting a bug
- Press F8 → Logging to switch logging on, reproduce the problem, then attach
BepInEx/LogOutput.log - Say which version both machines were running
Issue: High latency/lag
- Reduce
SnapshotHzin config (lower = less network traffic) - Increase
InterpDelayMsfor smoother interpolation - Check your network connection quality
📝 Notes
- This mod is in early development (v0.4.1). Expect bugs!
- Only works with players who have the mod installed, and every machine must run the same version — the network protocol changes between releases, so mismatched builds refuse to connect
- The client loads the host's streamed world save into a dedicated co-op slot, while guest character progress is kept in a local co-op profile
- The host's game state is authoritative
- The default avatar bundle ships with the release and must sit next to the plugin DLL
- For best performance, play on a wired network connection
🤝 Contributing
Found a bug? Have a suggestion? Visit: https://github.com/pander33/SailwindCoop
Русский
📖 Описание
Sailwind LAN Co-op — это мод, добавляющий мультиплеер в игру Sailwind. Позволяет играть с друзьями по локальной сети (LAN) или через VPN/туннелирование.
Текущая версия: 0.4.1 Сетевой протокол: 89. На всех компьютерах должна быть одна сборка. Большинство новых функций ещё ожидает проверки в игре; см. описание релиза. Требования: BepInEx 5.x, Sailwind 0.39 (Steam версия)
✨ Особенности
- LAN мультиплеер: Игра с друзьями в одной сети
- Игра через интернет: Работает с VPN сервисами (Hamachi, ZeroTier и др.)
- Настраиваемые параметры: Настройка сети, имени игрока и др.
- Меню кооператива в игре: F8 открывает меню для хоста, подключения, отключения, выбора аватара, диагностики и отладки
- Аватар по умолчанию в комплекте: Релиз содержит
avatar.bundleдля моделей удаленных игроков - Кастомизация аватаров: При желании можно заменить
avatar.bundleна совместимый свой bundle - До 5 игроков: Один хост и до 4 клиентов одновременно
- Общее море: Волны, погода и время суток идут по часам хоста — вода под лодкой одинакова у всех
- Тишина по умолчанию: Обычная диагностика выключена; серьёзные ошибки пишутся с ограничением частоты
- Колесо жестов: Удерживайте G, чтобы помахать, указать, отдать честь или крикнуть команде «Land ho!»
- Руки на снастях: Аватары других игроков тянутся к предмету в руке и к лебёдке, штурвалу или верёвке, которую держит игрок
📥 Установка
Необходимые условия
- Sailwind 0.39 установлен через Steam
- BepInEx 5.x установлен для Sailwind
- Если не установлен, скачайте: https://github.com/BepInEx/BepInEx/releases
- Распакуйте в папку с игрой Sailwind
Редакции
Мод выходит в двух редакциях. Сетевой протокол у них один, играть вместе можно. Редакция Thunderstore опубликована на https://thunderstore.io/c/sailwind/p/pander33/SailwindCoop/ и ставится через менеджер модов.
| Редакция Thunderstore | Полная редакция | |
|---|---|---|
| Игра по LAN / VPN | да | да |
| Игра через Steam без IP-адреса | да | да |
| Сверка других модов при входе | да | да |
| Скачивание недостающих модов с хоста | нет | да |
| Файлы | SailwindCoop.dll, LiteNetLib.dll, Facepunch.Steamworks.Win64.dll, steam_api64.dll, avatar.bundle, sounds/ |
те же |
Редакция показана в заголовке оверлея статуса (F8 -> Settings -> Show Status), например Sailwind Co-op 0.4.1 (Thunderstore).
Установка мода
- Скачайте последний архив релиза
- Распакуйте все файлы архива в:
Sailwind/BepInEx/plugins/SailwindCoop/(состав файлов каждой редакции — в таблице выше) - Запустите игру
- Чтобы сменить аватар, нажмите F8, откройте Settings и нажмите Avatar
🎮 Как играть
Подробное английское описание работы экономики, миссий, карго, предметов, повреждений, швартовки, якоря, сна и прогресса гостя: MULTIPLAYER_GUIDE.md.
Создание сервера (Вы будете хостом)
- Запустите Sailwind
- Загрузите или начните новую игру
- Нажмите F8, чтобы открыть меню Sailwind Co-op
- Нажмите Host
- Сообщите друзьям свой IP адрес (см. "Как узнать свой IP" ниже)
- Ждите подключения друзей
Подключение к игре
- Запустите Sailwind
- Важно: НЕ загружайте сохранение (останьтесь в главном меню)
- Нажмите F8, чтобы открыть меню Sailwind Co-op
- Введите IP хоста и нажмите Join
- IP по умолчанию:
127.0.0.1(локальный) - Меню сохраняет значение в
BepInEx/config/com.sailwind.coop.cfg
- IP по умолчанию:
- Мир хоста передаётся автоматически и загружается в co-op слот сохранения — дождитесь окончания
Отключение
- Нажмите F8 и кнопку Disconnect
Жесты
- Во время сессии удерживайте G: откроется колесо жестов. Наведите мышь на жест и отпустите клавишу. Чтобы отменить, отпустите её в центре или нажмите Esc.
- Жесты: Wave, Land ho!, Point, Come here, Applause, Shrug, Salute, Hooray.
- «Land ho!» и «Point» направлены туда, куда вы смотрите. «Land ho!» ещё и звучит: другие игроки слышат выкрик с вашего места.
- Шаг прерывает жест. Свой жест вы не видите, потому что игра от первого лица.
- Когда колесо впервые становится доступным, на экране появляется короткая подсказка. Клавиша также указана в меню F8 и меняется настройкой
EmoteKey.
Оверлей с информацией
Кнопки ниже находятся в разделе Settings меню F8; он свёрнут, пока по нему не щёлкнуть.
- Нажмите F8, откройте Settings и используйте Show Status / Hide Status
- Logging включает и выключает лог-файл без перезапуска игры. По умолчанию выключено; включайте до воспроизведения проблемы, иначе в логе не будет ничего полезного
- Dump water state пишет
debug/water-*.txt. Нажмите на обеих машинах одновременно, если море где-то выглядит иначе - Кнопка Debug открывает панель разработчика и работает только при включённом
EnableDebugPanelв конфиге
Выбор скина
- Нажмите F8, откройте Settings и нажмите Avatar, чтобы открыть меню выбора скина
Управление курсором
- Пока co-op меню открыто, курсор работает только с меню и не взаимодействует с миром.
- При закрытии co-op меню закрываются сопутствующие панели Avatar/Debug, затем управление курсором возвращается игре.
⚙️ Настройка
Файл конфигурации: Sailwind/BepInEx/config/com.sailwind.coop.cfg
| Настройка | По умолчанию | Описание |
|---|---|---|
| Сеть | ||
Port |
7777 | UDP порт для хостинга (нужно открыть для интернета) |
ListenIp |
0.0.0.0 | IP адрес для прослушивания (0.0.0.0 = все интерфейсы) |
JoinIp |
127.0.0.1 | IP адрес хоста для подключения |
PlayerName |
Player | Ваше отображаемое имя в игре |
MaxClients |
4 | Максимум гостей (1-4), дополнительно к хосту |
SnapshotHz |
20 | Частота отправки снапшотов состояния |
InterpDelayMs |
100 | Задержка буфера интерполяции, мс |
| Аватар | ||
VerticalOffset |
-0.6 | Вертикальное смещение модели клиента |
HostVerticalOffset |
-0.6 | Вертикальное смещение модели хоста |
| Сохранения | ||
CoopSaveSlot |
5 | Слот, куда клиент пишет полученный мир хоста. Локальное сохранение в этом слоте перезаписывается. |
ForceHostSaveOnJoin |
true | Хост делает свежее сохранение при подключении, чтобы клиент получил актуальный мир |
PauseHostOnJoin |
true | Мир хоста стоит на паузе, пока клиент его грузит — иначе состояние успевает разойтись |
| Отладка | ||
EnableLogging |
false | Писать диагностику в BepInEx/LogOutput.log. Переключается и в игре (F8 → Logging) |
EnableDebugPanel |
false | Панель разработчика. Кнопка Debug в меню не работает, пока это выключено |
| UI | ||
MenuKey |
F8 | Открыть/закрыть меню Sailwind Co-op |
EmoteKey |
G | Удерживать, чтобы открыть колесо жестов. Смените, если G занята в игре |
EmoteHintShown |
false | Становится true после разовой подсказки о жестах. Верните false, чтобы увидеть её снова |
🔍 Как узнать свой IP адрес
Для игры по LAN (в одной сети):
- Windows: Откройте командную строку и введите
ipconfig - Найдите "IPv4 адрес" вашей сетевой карты (обычно начинается с 192.168.x.x)
Для игры через интернет (с VPN):
- Hamachi: Используйте IP Hamachi (5.x.x.x)
- ZeroTier: Используйте назначенный ZeroTier IP
- Другой VPN: Используйте IP, предоставленный VPN
🛠️ Решение проблем
Проблема: Друзья не могут подключиться
- Убедитесь, что порт 7777 (или ваш порт) открыт в брандмауэре
- Для интернета: настройте проброс портов на роутере
- Попробуйте временно отключить антивирус/брандмауэр
- Убедитесь, что все используют одинаковую версию мода
Проблема: Игра вылетает при запуске
- Проверьте, что BepInEx установлен правильно
- Проверьте, что
SailwindCoop.dllв нужной папке - Посмотрите
BepInEx/LogOutput.logдля деталей ошибки
Проблема: Аватары отображаются неправильно
- Настройте
VerticalOffsetиHostVerticalOffsetв конфиге - Убедитесь, что
avatar.bundleлежит вSailwind/BepInEx/plugins/SailwindCoop/
Как сообщить о баге
- Нажмите F8 → Logging, чтобы включить логирование, воспроизведите проблему и приложите
BepInEx/LogOutput.log - Укажите версию мода на обеих машинах
Проблема: Высокая задержка/лаги
- Уменьшите
SnapshotHzв конфиге (меньше = меньше сетевого трафика) - Увеличьте
InterpDelayMsдля более плавной интерполяции - Проверьте качество вашего сетевого соединения
📝 Примечания
- Мод в ранней разработке (v0.4.1). Возможны баги!
- Работает только с игроками, у которых установлен мод, и у всех должна быть одна и та же версия — сетевой протокол меняется между релизами, разные сборки не соединятся
- Клиент загружает полученный от хоста сейв мира в отдельный co-op слот, а прогресс персонажа гостя хранится в локальном co-op профиле
- Состояние игры хоста является авторитетным
- Аватар по умолчанию входит в релиз и должен лежать рядом с DLL мода
- Для лучшей производительности играйте по проводному соединению
🤝 Участие в разработке
Нашли баг? Есть предложения? Посетите: https://github.com/pander33/SailwindCoop
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
The "Land ho!" shout (sounds/landho.wav) is the sound "LandHo" by SilverDubloons from
freesound.org, released under Creative Commons 0.
Этот проект лицензирован под MIT License - подробности в файле LICENSE.
CHANGELOG
Changelog
All notable user-facing changes are documented in this file.
[0.6.0] - 2026-10-18
The protocol is still 92, so 0.6.0 connects to 0.5.0 - 0.5.3. Everything new works on the machine that has it: the menu is your own, only a player on 0.6.0 can be knocked over, and the boat fix is the guest's. Update every machine anyway.
Added
- Co-op in the game's own menu: Co-op on the title screen joins a crew (games on this network, Steam friends, join again, join by address), and Co-op in the Escape menu hosts the loaded world, shows the session and ends it; in a world without a session it also lists the games to join, so a player whose session ended can join again from there. The F8 window stays for the other settings.
- An item another player throws at you knocks you over: you fall, and Space gets you up. The
others see you lying on the deck. Turn it off for yourself with
Gameplay/KnockdownByItems.
Fixed
- On a guest's machine a boat's body could stay behind its hull: the wake, foam and hull sounds did not follow the boat, and after a disconnect the boat was left without its physics.
[0.5.3] - 2026-10-11
The protocol is still 92, so 0.5.3 connects to 0.5.0, 0.5.1 and 0.5.2. Update every machine anyway: each fix works only on the machine that has it, and with an older build in the session firewood in a stove and a tilted pot of soup still behave the old way for that player.
Fixed
- A guest filling a bottle, a kettle or a pot from a barrel got the water, but the barrel stayed full.
- A mug or a bowl a guest put on a table stood tilted for the other players, fell over and spilled.
- A crate could be thrown about after it was opened: its window kept dragging back the items another player had already taken out.
- Soup in a pot a guest carried did not spoil, and its freshness jumped back when the pot was put down.
- The Debug panel's island teleport could capsize the host's boat and throw it away once the game went on. The boat is now moved the way the game's own recovery moves it and ends up moored at the port.
- A guest's copy of a boat could take hits, waves over the side and a leak of its own and sink while the host's boat was whole. A guest's game no longer counts them; they come from the host.
- Firewood put into a stove stayed a loose item for everyone but the player who put it in: it lay beside the stove, could be picked up while burning and did not move with the stove. It now sits inside the stove for every player.
- A pot of soup tilted in one player's hands was also spilled by every other player's game that saw it, so it emptied faster than it should. Eating soup could also drop the frame rate.
- A guest now hears a kettle boil, and a stove's "1 / 1" firewood text is the same for everyone.
- Much less network traffic with food aboard: every piece of food and every burning lamp used to be sent to all players twice a second for the whole session.
- When a guest broke the seal of a crate, the crate's contents window opened on the host's screen and not on the guest's. It now opens for the player who unsealed the crate.
- The Debug panel's island list missed five ports (Dragon Cliffs, Fort Aestrin, Serpent Isle, Saffron Island, On'na) and had nine entries that led nowhere. Every port of the game is listed now; On'na has no place for a boat in the game and takes a player on foot only.
[0.5.2] - 2026-10-10
The protocol is still 92, so 0.5.2 connects to 0.5.0 and 0.5.1. Update every machine anyway: each fix works only on the machine that has it.
Fixed
- A player who joined from a loaded world and was then recovered (passed out from thirst or hunger, or Recover in the Escape menu) stayed on the dark "recovering..." screen for ever.
- A recovery that cannot finish is now ended after two minutes instead of keeping the screen dark.
- A guest's recovery no longer casts off the ropes and resets the anchor on its own copy of the boat. With a shared wallet its fee comes out of the guest's own money, not the crew's.
- After the host's teleport the sea could look different to the host and to a player right next to it. Players who came along now take the host's world origin.
- A player being recovered no longer counts as lying down for the crew's shared sleep.
Changed
- When the host is recovered, the boat goes to the port with whoever is aboard, and the game pauses for everyone for about a second and a half, as it does after a teleport. A guest recovered aboard stays on the boat.
[0.5.1] - 2026-10-10
The protocol is still 92, so 0.5.1 connects to 0.5.0. Update every machine anyway: the two versions handle a teleport differently, and in a mixed crew the sea can look different to each player after one.
Fixed
- A crew member standing on a sailing boat no longer rises above the deck and sinks into it in the eyes of the others.
- After Teleport to boat, or a teleport from the Debug panel, the picture shook and the shadows jumped for minutes. The world now settles at once.
- The Debug panel's teleports moved the hull without the rest of the boat and left it moored.
Changed
- When the host teleports, the game pauses for everyone for about a second and a half while the boat's new place and the sea reach the crew.
[0.5.0] - 2026-10-10
Everyone must update. The protocol is now 92: 0.5.0 cannot connect to 0.4.3 or earlier.
Added
- Dice tables can also be placed on level piers and island ground, using shared world coordinates.
- Deck dice: a folding table with three dice, a cup and a score board for two to five players; three rounds with one optional reroll, pair +4, triple +12. Everything is done at the table: the hint under the crosshair says what the pick-up and use buttons do. Players who do not sit down see the same rolls and score.
- The table is set up from the gesture wheel (
G, Dice table). One table per player, one per boat, five in a world. A table is not saved with the world and leaves with its owner. - A party can be paused and resumed, a player who reconnects returns to the same seat, and the score board shows the rules and the history of finished parties. The history belongs to the world: it follows the save, its backups and its copies, and a new game starts an empty one.
- Close view of the dice table: sitting down brings the table close and frees the cursor, and the
table is played with the mouse buttons.
Topens and closes it (UI.DiceViewKey);Dice.CloseUp = falseleaves it to the key. The other players see no difference. - Optional stakes in coins, enabled by default (
Dice.AllowStakes, personal wallets only). Existing configs retain their saved value; setAllowStakes = trueunder[Dice]to enable them if previously disabled. - Reconnecting has been reworked. Joining or reconnecting from a loaded world now goes through the main menu and a full reload: the game leaves the current world, returns to the title screen and loads the host's world from scratch. It does this by itself; the game does not have to be restarted.
- A Steam host sees their Steam ID and the Copy ID button while hosting, not only before it.
- A join refused because the two builds cannot play together now says so: which side has the older mod and who has to update. A host that still runs 0.4.3 or older refuses without a reason; the message then says that the versions most likely differ.
- The crew card of the
F8menu notes when a crewmate plays with a later version of the mod that can still play with yours. Nothing is checked on the internet and nothing is installed. - A full session now refuses a join with "the session is full".
- The other players are heard: their footsteps on wood, sand, stone and in shallow water, a step when they land from a jump, and their swimming, all from where they are and fading with distance. The sounds are the game's own.
- Games on the local network are found by themselves: the LAN tab of the
F8menu lists them above the address field, each with the host's name, crew size, address and a Join button. A host with another version of the mod is listed with the reason it cannot be joined. Typing an address still works. A host can stay unlisted withAnnounceOnLan = falseunder[Server]; a host that admits Steam friends only is never listed.
Changed
-
Export report now also holds the last few hundred lines the mod would have logged, kept in memory even when logging is off, the character's needs, the game's time scale, the sleep state and the installed plugins. The file name ends with the role.
-
A Steam session is open to anyone by default, over Steam and on the LAN port (
Steam/FriendsOnlyis now off). Existing configs retain their saved value: press Anyone in the F8 menu, or setFriendsOnly = falseunder[Steam]. -
Sleep. Whoever lies down, sleeps: the time skip starts when every player lies down, rested or not (a rested crew skips time only at a mooring or ashore). A player who sleeps while someone stays up recovers at a quarter of the speed of the shared sleep, until rested instead of for a fixed time; hunger and thirst stand still. A rested player who stays in bed does not get tired, hungry or thirsty. A player who collapsed outside a bed is woken by any key, and a hit that damages the boat or water coming over its side wakes a player asleep by himself. A player woken by his own hunger or thirst during the shared sleep gets up alone; the others sleep on.
-
The
[Avatar]config section is gone: the avatar height offset is fixed, and old entries in an existing config file are ignored.
Fixed
- On a game version the mod does not support, the co-op menu key did nothing and the log was
empty. The mod now says on screen that it did not start and which game version it needs, and
writes the reason to
BepInEx/LogOutput.log. - The game's wind sound broke after a player joined: it stopped following the wind and the game wrote "Attempt to set pitch to infinite value" to its log every frame.
- During the shared sleep the host recovered much faster than the guests.
- With three or more players, the avatar of a player who left stayed in the world on the other guests' machines.
[0.4.3] - 2026-10-07
The protocol is still 89. Hosts should update: a host on 0.4.2 or earlier still refuses players with another version.
Changed
- Different versions can play together when the protocol is the same. A host on 0.4.3 or later accepts a player with any version of the mod that uses the same protocol number (shown as Wire Protocol in the README). Before, the versions had to match exactly.
- Internal cleanup of the mod list check.
[0.4.2] - 2026-10-07
Everyone must update. The protocol is still 89, but players with different versions of the mod cannot connect to each other.
Changed
- No gameplay changes. The Thunderstore package was rebuilt and its page text was shortened.
[0.4.1] - 2026-10-07
Everyone must update. The protocol is still 89, but players with different versions of the mod cannot connect to each other.
Changed
- The Thunderstore edition can play over Steam. It now has the LAN / Steam switch, the
friends list and Join Game in Steam, and its archive carries
Facepunch.Steamworks.Win64.dllandsteam_api64.dll.
[0.4.0] - 2026-10-07
Everyone must update. Protocol 89: this build cannot play with 0.3.1 or earlier.
Added
-
Hand money to another player. Look at a crewmate standing next to you and hold
H: your avatar holds out a hand with a coin. The mouse wheel changes the amount, the middle mouse button changes the currency. The other player looks at you and pressesHto take it; release the key to cancel. The key isUI.GiveKeyin the config file. -
Shared wallet. The host can switch Money to Shared in the co-op menu (F8) while hosting: the whole crew then spends and earns the host's money and sees one balance. A guest's own money is kept and comes back when the guest leaves or the host switches back to Personal.
Fixed
- An item bought in a shop stayed on the shelf for the other players, who could buy it again.
- A guest who bought an elixir, snake oil, oakum or a lamp kept it only for themselves: the host never saw the item, and for the guest it hung in the air after being put down.
Changed
- Mission rewards are divided. A delivery reward is split equally between the players who are in the world; what does not divide stays with the host. Before, every player received the whole reward. Reputation is still given to everyone in full.
[0.3.1] - 2026-10-07
Added
- Join through Steam itself. A friend who hosts over Steam has Join Game in your Steam friends list, and the host can send Invite to Game. Do it from the main menu; if the game is not running, Steam starts it and the join begins at the title screen.
Changed
- With the menu left in Steam mode, the mod now connects to Steam a few seconds after the game starts instead of when the menu is first opened. Steam can pass a join request only to a game that is connected to it.
- Friends only on a Steam host now also closes the LAN port: only Steam friends can join. Anyone accepts players by Steam ID and LAN players on the UDP port. The button applies to a session that is already running; players who are in stay.
- A Steam player removed with Kick cannot rejoin until the host starts a new session.
- Sessions over Steam wait 12 seconds without packets before dropping a player, instead of 5.
- A locked or full Steam session is no longer shown to friends as one they can join.
Fixed
- A Steam host could stop hearing a player after a connection failure until hosting was restarted.
- Joining over Steam now fails at once when Steam reports that the host is not in the game, does not own it or is offline, instead of waiting half a minute.
- Quitting the game during a Steam session is seen by the others at once, not after a timeout.
- A guest refused by a Friends only host is told that this is a possible reason.
Network
- Everyone must update. The protocol is still
86, but0.3.1and0.3.0refuse each other at the handshake because the mod version differs.
Not yet verified in game: every Steam change above (it needs two PCs with different Steam accounts).
[0.3.0] - 2026-10-06
Added
- Other mods are compared when joining. Before the world is sent, the host tells the joining player which other BepInEx mods it runs. With the same mods nothing changes. Otherwise the F8 menu opens a Mods section listing what is missing or different, with Join anyway and Cancel.
ModSyncExcludelists plugin GUIDs that are never compared (the XUnity translator by default).- The crew list shows
Modswhile a joining player is comparing mods. - Play over Steam without an IP address. The F8 menu has a LAN / Steam switch. In Steam mode the host is reachable by Steam ID, and a joining player sees Steam friends who are in the game, with Join next to a friend who is hosting. No port forwarding or VPN is needed. Steam must be running, and each player needs their own Steam account that owns Sailwind.
- A Steam host still accepts LAN players on its UDP port. LAN play itself is unchanged and does not need Steam.
- By default a Steam host accepts only Steam friends (
Steam/FriendsOnly, the Friends only button). - The mod now ships two more files that must sit next to
SailwindCoop.dll:Facepunch.Steamworks.Win64.dllandsteam_api64.dll. - Teleport to boat. A button in the F8 menu puts you back on the deck: where you last stood, next to the crew, or amidships. For a player who fell overboard or was left ashore.
Changed
- The F8 menu was redesigned. It now shows only the session (connection settings, or the running session), the crew and Teleport to boat. Avatar, the status overlay, logging, reports and the debug panel moved under a Settings section that is collapsed by default. The window is as tall as its content.
- Joining over a slow connection pauses the host for less time. The world sent to a joining player is now compressed to about a quarter of its size.
Fixed
- Goods no longer look like mission cargo on a guest. A good the host got during the session (bought at a market, or cargo of a mission in a slot other than the first) showed the destination and due date of the first mission on a guest's screen. The guest now gets the mission slot of each good from the host.
- Goods created with the debug item spawn are ordinary goods, not mission cargo.
- Other players' arms follow what they do. An avatar now reaches for the item it carries and puts its hands on the winch, wheel or rope the player is holding. Not yet verified in game.
- Gesture wheel. Hold
Gin a session, pick a gesture with the mouse and release: Wave, Land ho!, Point, Come here, Applause, Shrug, Salute, Hooray. "Land ho!" shouts, and other players hear it from where you stand. The key isUI.EmoteKey; it is shown in the F8 menu and in a one-time on-screen hint. Not yet verified in game. - Sleep waits for the whole crew. Time is skipped only when every player is in a bed. A player who lies down alone, or collapses from exhaustion, sleeps by himself: his screen goes dark, he recovers at the usual sleep speed and does not get hungry or thirsty, while the world keeps going for the others. Not yet verified in game.
- Fixed: during a shared sleep guests lost food and water about 16 times slower than the host.
- Players lie in their beds. The avatar of a player who is in a bed lies on its back on that bed instead of standing in it. Not yet verified in game.
Network
- Everyone must update. The wire protocol moved from
80to86;0.2.xand0.3.0refuse to connect to each other.
Not yet verified in game: the comparison step and the menu section; the Steam connection (it needs two PCs with different Steam accounts).
[0.2.1] - 2026-10-05
Changed
- NPC avatar gait follows movement speed relative to the deck or ground, with smoother transitions and a limited running cadence.
- NPC avatars now use procedural crouch, look and turn poses. Crouching bends the legs more deeply and smoothly lowers the visual model along Y without moving the network root.
Fixed
- Leg movement uses model-space axes instead of assuming the NPC bones' local axes.
- NPC skin discovery includes inactive NPCs in loaded scenes and checks for skinned meshes
with bones instead of rejecting every hierarchy containing a node named
combiner.
Network
- Wire protocol remains
80. These animation changes add no fields or messages to player synchronization; bone poses and crouch height are calculated locally.
[0.2.0] - 2026-10-05
Changed
- Everyone must update. The network protocol moved from
57to80;0.1.6and0.2.0refuse to connect to each other. - Sailwind 0.39 is now required. The mod uses classes unavailable in older game builds.
- Every owned boat has independent controls, anchors, mooring lines, pumps, hatches and hull damage. Boats stay active on the host while any crewmate is nearby, even when the host is far away.
- The host's mission journal is mirrored by guests without mixing in missions from their profiles.
- Controls, anchors, mooring lines, hull damage, storms, items, instruments and missions are sent only when they change. Joining players request the current values once.
Added
- Guests can pick up, carry, pay out and drop anchors; everyone sees the anchor in its carrier's hands.
- Guests can start shared sleep for the whole crew.
- Guest shipyard orders for sails, parts, cleaning and repair reach the host and every crewmate. The ordering player pays once; local shipyard previews stay out of the shared world and save.
- Food preservation, spoilage, cooking progress, soup and kettle contents, fuel and stove slots travel with items. Consumption and use of food, drinks, knives, elixirs, oakum, oil and candles take effect for everyone at the same moment.
- Pocket watch lids, quadrants, scroll pages, chip log lines and fishing rod state are visible to other players, including the line, bobber, rod bend and hooked fish.
- Chart drawings are shared, survive late joins and persist in the host's world save. Folding and unfolding maps and furniture is shared.
- Hull scrubbing removes the same dirt for everyone, stroke by stroke.
- Wind totem orbs are visible in another player's hands; guest casts change weather for the crew.
- Sailwind 0.39 tobacco packs can be cut by guests, house doors are shared with late arrivals, and sleeping in house beds skips time as in single player.
Stability
- Failed game hook groups disable only the affected feature and name it in an on-screen notice.
- Character profiles and received world saves use atomic writes with backups. Readable backups are recovered; unreadable profiles and incompatible save versions stop the join with a message.
- Packets are accepted only from handshaken peers and in the expected direction. Snapshots too large for one datagram are delivered reliably.
- Unanswered requests are abandoned after five seconds instead of blocking the object indefinitely.
- Lamps retain their identity when item lists are reordered; late packets cannot resurrect destroyed items.
- Fixed guest winches failing on every control update due to an inactive steering wheel check.
- Fixed guests being unable to release mooring ropes or length coils and pick them up after dropping.
Reporting problems
Enable F8 → Logging before reproducing a problem and attach BepInEx/LogOutput.log
plus an Export report file.
[0.1.6] - 2026-09-22
Added
- AI ships are now the same ships for everyone. Until now every machine sailed its own private fleet: a trader the host was passing simply was not there for the guest, and a wreck the host had rammed was still afloat on the other screen. AI ships now run on the host and are mirrored to everyone, sails and all.
- AI ships stay alive around any crewmate, not just the host. The game normally freezes a ship once it is far from the player, which meant a guest who sailed ahead met motionless hulls; the range is now measured to whichever player is nearest.
- The F8 menu now shows the whole crew with loading/ready state, individual ping and current boat.
- Hosts can close the session to new players and remove a connected guest. Rejected or removed players receive a readable reason instead of a generic timeout.
- Short co-op notifications report joins, readiness, departures, session access, anchor and sleep events.
- A previously connected guest can reconnect from the main menu with one button; reconnect still performs a full safe world join rather than trying to merge into an already loaded client world.
- Export report writes one bounded diagnostic text file with protocol/session/crew/join state and recent warnings, even when normal logging was off.
Fixed
- A mission cargo delivered by a guest now counts for the whole crew: the host's mission journal advances, and the payout reaches the host and every guest. Before, only the delivering guest's own screen counted it.
- A guest standing near the host while the host delivered cargo is no longer paid twice for it.
- A guest joining a host who owns several boats no longer sees two boats stacked in one place. When the host had sailed far away from one of their boats, the guest's copy of that boat was dragged onto the host's current ship (and players or items could end up on the wrong hull). Boats are now matched by their save identity instead of their order in a scan, and a guest's boats stay untouched until the host's world has finished loading.
- A guest's money and reputation are now kept when the connection drops (host quits, network timeout). Before, they were saved only on an F8 disconnect or when quitting the game while still connected.
- Hosting or joining again without disconnecting first now closes the previous session cleanly, saving the guest's progress and freeing any join that was still queued.
- Cargo carried by a guest should no longer stay behind on the host's screen at the spot where it was picked up. If it still happens, the log (with logging on) now records why.
Notes
- The wire protocol moved from
53to57, so every machine must be updated together again. - Trading vessels that carry goods between ports are not covered yet — they are part of the economy rather than the sea traffic, and their prices are already settled by the host.
[0.1.5] - 2026-08-13
A stability release: joins that finish cleanly, boats and items that stay where they belong, a sea that is the same sea on every machine, and a mod that is quiet unless you ask it not to be.
Added
- The co-op menu now reports problems that previously only reached the log file: a joining player who never finished loading, an unreadable or missing host save, a client rejected because the host has no world loaded, and a world that was un-paused automatically after a join. If something goes wrong during a join, the reason is on screen.
- Logging can be switched on and off from the F8 menu at any time, without restarting the game.
Changed
- Logging is now off by default. A normal session writes nothing to
BepInEx/LogOutput.log. Turn it on from the co-op menu (F8 → Logging) when you need to diagnose something or report a bug; the choice is remembered in the config file. Serious errors are still written even with logging off — a few lines, never a flood — so a broken installation can never look identical to a healthy one. - Debug tools are hidden unless explicitly enabled in the config, so a public build no longer exposes them by accident. The menu says which mode it is in.
- Joins are now handled one at a time. If several players connect at once, each waits its turn for the world transfer instead of the transfers overlapping; the queue releases itself if a transfer stalls, so one bad join no longer blocks everyone behind it.
- Fewer scene-wide searches per frame while sailing, which removes a source of stutter — and with it the frame hitches that could drop a player through the deck.
Fixed
- Fixed boats sinking into the waves on the client. The ocean ran on each machine's own clock, and the shape of a wave is a function of that clock — so the host placed the boat on a crest at a spot where the client was drawing a trough, and a passing wave swallowed the hull. The client's sea now runs on the host's clock, and so do the size and direction of the waves, which each machine used to decide for itself on its own free-running weather cycle. The water is also drawn at the same instant as the boat itself (the hull is rendered slightly in the past to smooth out network jitter; the water used to be drawn at the present moment) and no longer lags behind by the connection's latency.
- Fixed the client's sea running on while the host had the game paused, and fixed the water tearing across the screen when the host un-paused with the boat below the surface.
- Fixed other players walking on the spot while the boat sails. A crewmate standing still on deck was shown marching (and turning, when the ship came about), because the mod worked out whether someone was walking from how fast their position changed — and on a moving ship, the ship's own motion counts. Walking and turning are now measured at the source, against the deck the player is actually standing on.
- The client is now held still while the host has the game paused. Opening the host's menu stops the host's world, but a guest could still walk around it, step off the ship or fall in the water. Guests are now frozen for the duration and told why on screen; they are released the moment the host resumes, or if the connection drops.
- Fixed a joining player being attached to the wrong boat. While the world was still spawning boats, a boat could briefly answer to another boat's number, and a guest could be teleported onto — or have their view locked to — a hull that was not theirs. Boat numbering is now withheld until it is proven stable on both machines.
- Fixed items jumping to the player. Items carried on a deck could snap to whoever was looking at them for a fraction of a second after the boat set changed (most visibly right after buying a boat).
- Fixed the world staying frozen after a player joined. If the host opened the game menu during the join freeze and closed it afterwards, the world could end up paused with nothing left to un-pause it, which needed killing the game. This is now detected and undone automatically.
- Fixed a join un-pausing the game behind an open settings menu. Joining while the host already had the game paused no longer resumes the world, and no longer changes physics settings owned by that menu.
- Fixed a guest being left behind when the client's boat snaps into place on join. The player is now carried with the deck in the same step, instead of the boat moving out from under them.
- Fixed mooring ropes and deck controls going unresponsive for about three seconds after a boat was bought or the boat set otherwise changed.
- Fixed remote players sometimes taking up to half a second to appear after a world finished loading, including after the host reloads a save or leaves a shipyard.
- Fixed a stalled world transfer holding the host frozen until the two-minute safety timeout, and fixed a transfer cancelled by a disconnect interfering with the next player's join.
- Fixed failures inside the mod's own error handling going unreported, which could leave a subsystem silently doing nothing for a whole session.
Notes
- The wire protocol moved from
47to53. Every machine must be updated together —0.1.3and0.1.5cannot connect to each other. - The co-op menu gained a Dump water state button. Press it on both machines at the same moment and
compare the two
debug/water-*.txtfiles if the sea ever looks different on one of them. - The water fixes and the two player fixes are verified on two machines: the client's ocean clock now
matches the host's to a few milliseconds, the wave field matches exactly, crewmates stand still on a
sailing deck, and a guest is held in place while the host has the game paused. The rest of this release
is verified by code review only — please report anything that behaves differently from
0.1.3with logging switched on.
[0.1.3] - 2026-07-07
feat(sync): Enhance player synchronization and item handling
- Improved player synchronization on boats by stabilizing local positions and adding a fallback mechanism for boat detection.
- Introduced a new PatchHealth reporting system to monitor the success of various synchronization patches across different game systems (Save, Shop, Shipyard, Sleep).
- Added comprehensive item synchronization patches to ensure consistent item interactions (pickup, drop, eat, nail, etc.) across clients and hosts.
- Implemented a protocol smoke test to validate message types and ensure proper serialization/deserialization of network messages.
[0.1.2] - 2026-07-06
Added
- Added the F8 Sailwind Co-op menu for hosting, joining, disconnecting, avatar selection, diagnostics, and debug tools.
- Added a high-contrast dark menu backdrop/window background for readability in bright scenes and the main menu.
Changed
- Replaced separate F6/F7/F8/F9/F10/F11 co-op hotkeys with menu-driven controls.
- Moved the debug panel to the left side of the screen so it does not overlap the co-op menu.
- The co-op menu captures cursor input while open and closes companion Avatar/Debug panels when closed.
[0.1.1] - 2026-07-06
Added
- Added character skin switching through the avatar selection menu.
[0.1.0] - 2026-07-04
Added
- Added host save streaming for joining clients: the host sends the current world save in reliable chunks, and the client loads it into a dedicated co-op slot.
- Added a separate client co-op profile for persistent character progress across sessions: currency, reputation, needs, known prices, missions, journal data, and personal belt inventory.
- Added join-pause handling while the host save is being transferred and loaded by the client.
- Added wave state synchronization so client sea surface and host-authoritative boat position stay aligned.
- Added fishing rod cast visual sync, including bobber position, line length, and rod bend.
- Added client support for throwing, placing, hanging, loading/unloading, and inventory movement of synced items.
- Added debug tools for island teleport and expanded coordinate diagnostics in the overlay.
Changed
- Expanded item synchronization to cover more runtime state: attached/placed items, crates, cargo, inventory slots, sold goods, market-spawned goods, rod hooks, and lamp hooks.
- Improved economy, mission, and journal synchronization, including richer mission reward data and client-side trade flow handling.
- Updated the wire protocol from
39to47and added message typesSaveSnapshotBegin,SaveSnapshotChunk,SaveSnapshotEnd,ClientWorldLoaded, andRodState. - Updated documentation and project status notes for the new save/profile, item, economy, and debug workflows.
Fixed
- Fixed client purchase of trade goods in port.
- Fixed host interaction lockouts after a client unloaded items from cargo.
- Fixed client-side unloading behavior.
- Fixed moving items while the boat is underway.
- Fixed client cross-session inventory handling.
- Fixed client fastener/attachment handling.
- Fixed grill/brazier visuals turning into a white cube after pickup/drop replication.
- Fixed several fishing-related synchronization issues.
Notes
- Client world loading now depends on the host's streamed save and overwrites the configured local co-op slot on the client.
- All peers must use the same mod build because the protocol changed after
0.1.0.
[0.0.1] - 2026-06-29
Added
- Initial public LAN co-op release for Sailwind.
- Host/join/disconnect controls and diagnostic overlay.
- LAN and VPN/tunneling play support through LiteNetLib UDP.
- Host-authoritative boat, environment, controls, anchor, mooring, interaction, and player state synchronization.
- Default remote player avatar bundle:
avatar.bundle. - Basic avatar customization by replacing the included
avatar.bundlewith a compatible Unity 2019 Windows x64 AssetBundle.
Notes
- This is an early release. Save-game progress is owned by the host and is not synced as separate guest progress.
- All players should use the same mod version and install
SailwindCoop.dll,LiteNetLib.dll, andavatar.bundletogether.