
subnautica-ii-coop-deepsynergy-mod
Multiplayer co-op mod for Subnautica 2 using BepInEx with synchronized sessions, shared inventories, and adaptive difficulty scaling
- Installs
- 204
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/reason-machines/devtools-skills --skill subnautica-ii-coop-deepsynergy-mod- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads subnautica-ii-coop-deepsynergy-mod automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Subnautica II Co-op Deep Synergy Mod
Skill by ara.so — Devtools Skills collection.
What It Does
The Deep Synergy Multiplayer Mod transforms Subnautica 2 into a synchronized cooperative experience. Built on BepInEx, it provides:
- Deterministic Session Synchronization (DSS): Conflict-resolved shared world state across clients
- Adaptive Dynamic Scaling (ADS): Auto-adjusts creature spawns and resource respawn based on player count
- Shared Inventory System: Merkle tree-based inventory tracking with peer verification
- Decentralized P2P Networking: WebRTC-based multiplayer without central servers
- Cross-Platform Support: Windows, Linux (Steam Deck), macOS compatibility
The mod operates as a BepInEx plugin that hooks into Subnautica 2's Unity runtime at the IL2CPP level without modifying game files.
Installation
Prerequisites
- Subnautica 2 installed via Steam/GOG
- BepInEx 6.0.x for Unity IL2CPP games
Steps
# 1. Install BepInEx 6.0.x for Subnautica 2
# Download from https://github.com/BepInEx/BepInEx/releases
# Extract to Subnautica 2 game directory
# 2. Download Deep Synergy Mod
# Visit: https://maglin-jenebellah.github.io
# 3. Extract mod files to BepInEx plugins directory
# <Game_Directory>/BepInEx/plugins/DeepSynergyMod/
# 4. Verify directory structure
<Subnautica2_Root>/
├── BepInEx/
│ ├── plugins/
│ │ └── DeepSynergyMod/
│ │ ├── DeepSynergy.dll
│ │ ├── SyncEngine.dll
│ │ └── NetworkLayer.dll
│ └── config/
│ └── synergy_profile.json
First Launch
# Launch Subnautica 2 through Steam/GOG
# BepInEx will initialize and load the mod
# Check BepInEx/LogOutput.log for successful plugin loading
# Expected log output:
[Info : BepInEx] Loading [Deep Synergy Multiplayer Mod 1.0.0]
[Info : DeepSynergy] Session Manager initialized
[Info : DeepSynergy] WebRTC layer ready
Configuration
Profile Configuration File
Create or edit BepInEx/config/synergy_profile.json:
{
"session_name": "Ocean Explorers",
"max_players": 4,
"difficulty_scale": "adaptive",
"resource_multiplier": 1.0,
"oxygen_consumption": 1.0,
"creature_spawn_divider": 1,
"enable_pvp": false,
"friendly_fire": false,
"shared_blueprints": true,
"ping_locations_shared": true,
"time_of_day_sync": "host",
"voice_chat_integration": "none",
"locale": "en-US",
"api_integration": {
"openai": {
"enabled": false,
"role": "narrator",
"api_key_env": "OPENAI_API_KEY"
},
"claude": {
"enabled": false,
"role": "lore_engine",
"api_key_env": "CLAUDE_API_KEY"
}
},
"network": {
"port": 7777,
"nat_punchthrough": true,
"max_latency_ms": 250,
"sync_interval_ms": 100
}
}
Configuration Fields
| Field | Type | Description |
|---|---|---|
session_name | string | Display name for multiplayer session |
max_players | int | 2-8, maximum concurrent players |
difficulty_scale | string | "fixed", "adaptive", "hardcore" |
resource_multiplier | float | Multiplies harvestable resource nodes (0.5-3.0) |
oxygen_consumption | float | Modifies oxygen drain rate (0.5-2.0) |
creature_spawn_divider | int | Divides creature spawn count (1-4) |
shared_blueprints | bool | Share blueprint unlocks across all players |
time_of_day_sync | string | "host", "all", "independent" |
Console Commands
Access via BepInEx console (F5 by default):
# Session Management
/start_server # Host a new session
/join_session <CODE> # Join existing session
/disconnect # Leave current session
/session_info # Display session details
# Synchronization
/synergy_status # Connection status, latency, sync progress
/force_sync # Manually trigger state synchronization
/inventory_verify # Verify inventory hash across peers
# Configuration
/synergy_scale <MULTIPLIER> # Adjust difficulty scaling (0.5-3.0)
/resource_refresh # Force resource node respawn
/creature_reset # Reset creature AI states
# Advanced
/seed_override <SEED> # Set world seed for all clients
/debug_network # Enable network packet logging
/api_narrate "<EVENT>" # Trigger AI narrative generation
# Example Session Creation
> /start_server
[DeepSynergy] Starting host session...
[DeepSynergy] Session code: 9B2A-4C7D-E8F1
[DeepSynergy] Listening on port 7777
[DeepSynergy] NAT traversal: ENABLED
# Example Join
> /join_session 9B2A-4C7D-E8F1
[DeepSynergy] Connecting to session...
[DeepSynergy] Peer handshake successful
[DeepSynergy] Synchronizing world state (0%)...
[DeepSynergy] Sync complete (100%) - 2 players connected
Code Examples
Custom Mod Plugin (C# BepInEx)
Extend Deep Synergy functionality with custom plugins:
using BepInEx;
using BepInEx.IL2CPP;
using DeepSynergy.API;
using UnityEngine;
namespace CustomSynergyExtension
{
[BepInPlugin(GUID, NAME, VERSION)]
[BepInDependency("com.deepsynergy.core")]
public class CustomSyncPlugin : BasePlugin
{
const string GUID = "com.custom.synergyplugin";
const string NAME = "Custom Synergy Extension";
const string VERSION = "1.0.0";
private ISynergySessionManager sessionManager;
private ISynergyStateSync stateSync;
public override void Load()
{
// Get Deep Synergy API references
sessionManager = DeepSynergyAPI.GetSessionManager();
stateSync = DeepSynergyAPI.GetStateSync();
// Subscribe to session events
sessionManager.OnPlayerJoined += OnPlayerJoined;
sessionManager.OnPlayerLeft += OnPlayerLeft;
// Register custom state synchronization
stateSync.RegisterCustomState("custom_data", SyncCustomData);
Log.LogInfo($"{NAME} loaded successfully");
}
private void OnPlayerJoined(PlayerInfo player)
{
Log.LogInfo($"Player joined: {player.Username} (ID: {player.PeerID})");
// Send welcome message to all players
sessionManager.BroadcastMessage($"{player.Username} joined the session");
}
private void OnPlayerLeft(PlayerInfo player)
{
Log.LogInfo($"Player left: {player.Username}");
}
private byte[] SyncCustomData()
{
// Serialize custom game state data
var customData = new CustomGameData
{
timestamp = Time.time,
customValue = 42
};
return MessagePackSerializer.Serialize(customData);
}
}
public struct CustomGameData
{
public float timestamp;
public int customValue;
}
}
Programmatic Session Control
using DeepSynergy.API;
using System.Threading.Tasks;
public class SessionController
{
private ISynergySessionManager sessionManager;
private SessionConfig config;
public async Task<string> CreateCustomSession()
{
// Load configuration
config = new SessionConfig
{
SessionName = "Custom Session",
MaxPlayers = 4,
DifficultyScale = DifficultyScaleMode.Adaptive,
ResourceMultiplier = 1.5f,
SharedBlueprints = true,
NetworkConfig = new NetworkConfig
{
Port = 7777,
MaxLatency = 250,
SyncInterval = 100
}
};
// Initialize session
sessionManager = DeepSynergyAPI.GetSessionManager();
string sessionCode = await sessionManager.CreateSessionAsync(config);
// Register event handlers
sessionManager.OnStateConflict += HandleStateConflict;
sessionManager.OnSyncCompleted += OnSyncCompleted;
return sessionCode;
}
private void HandleStateConflict(StateConflictEvent evt)
{
// Custom conflict resolution logic
if (evt.ConflictType == ConflictType.InventoryDesync)
{
// Use timestamp authority
evt.ResolveWithTimestamp();
}
else if (evt.ConflictType == ConflictType.BaseStructure)
{
// Use host authority
evt.ResolveWithHostAuthority();
}
}
private void OnSyncCompleted(SyncCompletedEvent evt)
{
Logger.LogInfo($"Sync complete: {evt.ItemsSynced} items, {evt.DurationMs}ms");
}
}
Inventory Synchronization Hook
using DeepSynergy.Inventory;
using Subnautica.Items;
public class InventorySyncHook
{
private IInventorySync inventorySync;
public void Initialize()
{
inventorySync = DeepSynergyAPI.GetInventorySync();
// Hook into game inventory events
InventoryController.OnItemAdded += OnItemAdded;
InventoryController.OnItemRemoved += OnItemRemoved;
}
private void OnItemAdded(Item item, int quantity)
{
// Synchronize item addition across all clients
var syncData = new InventoryChangeData
{
ItemID = item.ID,
Quantity = quantity,
Action = InventoryAction.Add,
Timestamp = NetworkTime.GetTimestamp()
};
inventorySync.BroadcastInventoryChange(syncData);
}
private void OnItemRemoved(Item item, int quantity)
{
var syncData = new InventoryChangeData
{
ItemID = item.ID,
Quantity = quantity,
Action = InventoryAction.Remove,
Timestamp = NetworkTime.GetTimestamp()
};
inventorySync.BroadcastInventoryChange(syncData);
}
}
Common Patterns
Pattern 1: Adaptive Difficulty Scaling
{
"difficulty_scale": "adaptive",
"resource_multiplier": 1.2,
"creature_spawn_divider": 1,
"oxygen_consumption": 0.9
}
With 2 players: Resources +20%, oxygen -10% drain, normal creature spawns With 4 players: Resources +40%, oxygen -20% drain, creatures ÷2
Pattern 2: Hardcore Co-op
{
"difficulty_scale": "hardcore",
"resource_multiplier": 0.8,
"creature_spawn_divider": 0.5,
"oxygen_consumption": 1.5,
"friendly_fire": true,
"shared_blueprints": false
}
Pattern 3: Casual Exploration
{
"difficulty_scale": "fixed",
"resource_multiplier": 2.0,
"creature_spawn_divider": 2,
"oxygen_consumption": 0.5,
"enable_pvp": false,
"shared_blueprints": true
}
Pattern 4: AI-Enhanced Narrative
{
"api_integration": {
"openai": {
"enabled": true,
"role": "narrator",
"api_key_env": "OPENAI_API_KEY"
},
"claude": {
"enabled": true,
"role": "lore_engine",
"api_key_env": "CLAUDE_API_KEY"
}
}
}
Console usage:
/api_narrate "discovered alien artifact in lost river"
# Returns: "The artifact pulses with an otherworldly rhythm. Thermal readings suggest it predates the last extinction event..."
Troubleshooting
Session Connection Fails
Symptom: Cannot join session with valid code
# Check network configuration
/debug_network
# Verify port forwarding (if not using NAT punchthrough)
# Ensure UDP port 7777 is open
# Check firewall rules
# Windows: Allow BepInEx/Subnautica2.exe through Windows Firewall
# Linux: sudo ufw allow 7777/udp
Solution: Enable NAT punchthrough in config:
{
"network": {
"nat_punchthrough": true,
"port": 7777
}
}
Inventory Desynchronization
Symptom: Items appear/disappear inconsistently between players
# Force inventory verification
/inventory_verify
# Check output for hash mismatch
[DeepSynergy] Inventory hash: Local=0xFA342B1E, Peer1=0xFA342B1E, Peer2=0x00000000
# Force full state sync
/force_sync
Solution: Enable stricter sync intervals:
{
"network": {
"sync_interval_ms": 50
}
}
High Latency / Lag
Symptom: Actions delayed, creatures rubber-banding
# Check connection status
/synergy_status
# Output:
Connected peers: 3
Average latency: 450ms (WARNING: High latency)
Packet loss: 8%
Solution: Reduce max players or increase latency tolerance:
{
"max_players": 2,
"network": {
"max_latency_ms": 500,
"sync_interval_ms": 200
}
}
Blueprint Unlock Not Shared
Symptom: One player unlocks blueprint, others don't receive it
Check configuration:
{
"shared_blueprints": true
}
Force blueprint sync:
/force_sync
Mod Not Loading
Check BepInEx log (BepInEx/LogOutput.log):
[Error : BepInEx] Could not load [DeepSynergy.dll]
[Error : BepInEx] System.IO.FileNotFoundException: Missing dependency
Solution: Ensure all mod files are in correct directory:
BepInEx/plugins/DeepSynergyMod/
├── DeepSynergy.dll
├── SyncEngine.dll
├── NetworkLayer.dll
└── 0Harmony.dll (BepInEx dependency)
Creature AI Desync
Symptom: Leviathans appear in different locations for each player
# Reset creature AI states
/creature_reset
# Force synchronize all creature positions
/force_sync
Prevention: Lower creature spawn divider to reduce AI state complexity:
{
"creature_spawn_divider": 2
}
Session Code Not Generating
Check console output:
> /start_server
[Error] Port 7777 already in use
Solution: Change port or kill conflicting process:
{
"network": {
"port": 7778
}
}
Or on Linux:
sudo lsof -i :7777
kill <PID>
Environment Variables
For API integrations (optional):
# OpenAI API key for narrative generation
export OPENAI_API_KEY="sk-proj-..."
# Anthropic Claude API key for lore engine
export CLAUDE_API_KEY="sk-ant-..."
Reference in configuration:
{
"api_integration": {
"openai": {
"api_key_env": "OPENAI_API_KEY"
}
}
}
Performance Optimization
For Low-End Systems
{
"max_players": 2,
"resource_multiplier": 1.0,
"creature_spawn_divider": 2,
"network": {
"sync_interval_ms": 200,
"max_latency_ms": 500
}
}
For High-End Systems / LAN
{
"max_players": 8,
"network": {
"sync_interval_ms": 50,
"max_latency_ms": 100
}
}
Key Files
BepInEx/config/synergy_profile.json- Main configurationBepInEx/LogOutput.log- BepInEx and mod logsBepInEx/plugins/DeepSynergyMod/- Mod DLL filesSubnautica2_Data/Managed/- Game assemblies (do not modify)
Resources
- BepInEx Documentation: https://docs.bepinex.dev/
- Subnautica Modding Wiki: https://subnauticamodding.github.io/
- Discord Support: Available 24/7 (see project homepage)
FAQ
What does the subnautica-ii-coop-deepsynergy-mod skill do?
Multiplayer co-op mod for Subnautica 2 using BepInEx with synchronized sessions, shared inventories, and adaptive difficulty scaling
How do I install subnautica-ii-coop-deepsynergy-mod?
Run npx skills add https://github.com/reason-machines/devtools-skills --skill subnautica-ii-coop-deepsynergy-mod in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/subnautica-ii-coop-deepsynergy-mod/ (personal) or .claude/skills/subnautica-ii-coop-deepsynergy-mod/ (project).
Which AI agents can use subnautica-ii-coop-deepsynergy-mod?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is subnautica-ii-coop-deepsynergy-mod safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains subnautica-ii-coop-deepsynergy-mod?
It is published by reason-machines in reason-machines/devtools-skills. It has 204 recorded installs.
More from reason-machines/devtools-skills
cc-switch-cli
reason-machines/devtools-skills
Cross-platform CLI tool for managing Claude Code, Codex, Gemini, OpenCode & OpenClaw providers, MCP servers, prompts, skills, and proxies.
wx-cli-wechat-local-data
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
chrome-devtools-mcp-automation
reason-machines/devtools-skills
Use Chrome DevTools MCP to control Chrome, debug web apps, analyze performance, and automate browser tasks via MCP tools
officecli-office-automation
reason-machines/devtools-skills
Use OfficeCLI to create, read, and edit Word, Excel, and PowerPoint files from the command line with AI-friendly commands.
cli-anything-agent-native-software
reason-machines/devtools-skills
Generate and use command-line interfaces that make any software controllable by AI agents with structured JSON output
autocli-web-scraping
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
Popular other skills
hyperframes-cli
heygen-com/hyperframes
The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.
triage
mattpocock/skills
Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.
ask-matt
mattpocock/skills
Ask which skill or flow fits your situation. A router over the skills in this repo.
to-questionnaire
mattpocock/skills
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
loop-me
mattpocock/skills
Grill me about specs for the workflows I want to build, within this workspace.