diff --git a/.gitignore b/.gitignore
index caabdf211..c0d9a49c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,3 @@ bld/
#performance reports & sessions
*.vsp
*.psess
-/packages/MonoGame.Framework.WindowsDX.3.4.0.459/lib/net40
diff --git a/Barotrauma/Barotrauma.csproj b/Barotrauma/Barotrauma.csproj
deleted file mode 100644
index 9eb20d525..000000000
--- a/Barotrauma/Barotrauma.csproj
+++ /dev/null
@@ -1,1730 +0,0 @@
-
-
-
- Debug
- x86
- 8.0.30703
- 2.0
- {008C0F83-E914-4966-9135-EA885059EDD8}
- WinExe
- Properties
- Barotrauma
- Barotrauma
- 512
- false
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 0.1.0.%2a
- false
- true
- v4.5
-
-
-
- x86
- true
- full
- false
- bin\Windows\Debug\
- DEBUG;TRACE;WINDOWS
- prompt
- 4
- false
-
-
- x86
- pdbonly
- true
- bin\Windows\Release\
- TRACE;WINDOWS
-
-
- .allowedextension
-
- prompt
- 4
- false
-
-
- Icon.ico
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- C:\Program Files (x86)\MonoGame\v3.0\Assemblies\Windows\MonoGame.Framework.dll
-
-
- False
- ..\packages\NVorbis.0.8.5.0\lib\NVorbis.dll
-
-
- False
- C:\Program Files (x86)\MonoGame\v3.0\Assemblies\DesktopGL\OpenTK.dll
-
-
-
- ..\packages\RestSharp.105.1.0\lib\net4\RestSharp.dll
-
-
- False
- C:\Program Files (x86)\MonoGame\v3.0\Assemblies\Windows\SharpDX.dll
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Designer
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- Always
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
- Designer
-
-
- PreserveNewest
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
-
-
-
- False
- Microsoft .NET Framework 4 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Windows Installer 4.5
- true
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
- {0aad36e3-51a5-4a07-ab60-5c8a66bd38b7}
- Farseer Physics MonoGame
-
-
- {3b8f9edb-6e5e-450c-abc2-ec49075d0b50}
- Hyper.ComponentModel
-
-
- {49ba1c69-6104-41ac-a5d8-b54fa9f696e8}
- Lidgren.Network
-
-
- {c293db32-fa42-486d-b128-5a12522fae4e}
- SharpFont
-
-
-
-
-
\ No newline at end of file
diff --git a/Barotrauma/BarotraumaClient/BarotraumaClient.csproj b/Barotrauma/BarotraumaClient/BarotraumaClient.csproj
new file mode 100644
index 000000000..1aaea586e
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/BarotraumaClient.csproj
@@ -0,0 +1,305 @@
+
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {008C0F83-E914-4966-9135-EA885059EDD8}
+ WinExe
+ Properties
+ Barotrauma
+ Barotrauma
+ 512
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 0.1.0.%2a
+ false
+ true
+ v4.5
+
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\Windows\Debug\
+ TRACE;DEBUG;WINDOWS;CLIENT
+ prompt
+ 4
+ false
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\Windows\Release\
+ TRACE;WINDOWS;CLIENT
+
+
+ .allowedextension
+
+ prompt
+ 4
+ false
+
+
+ ..\BarotraumaShared\Icon.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\Libraries\NuGet\MonoGame.Framework.WindowsDX.3.6.0.1625\lib\net40\MonoGame.Framework.dll
+ True
+
+
+ False
+ ..\..\Libraries\NuGet\NVorbis.0.8.5.0\lib\NVorbis.dll
+
+
+ False
+ ..\..\Libraries\NuGet\OpenTK.2.0.0\lib\net20\OpenTK.dll
+
+
+
+ ..\..\Libraries\NuGet\RestSharp.105.2.3\lib\net45\RestSharp.dll
+
+
+ False
+ ..\..\Libraries\NuGet\MonoGame.Framework.WindowsDX.3.6.0.1625\lib\net40\SharpDX.dll
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+ False
+ Microsoft .NET Framework 4 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+ False
+ Windows Installer 4.5
+ true
+
+
+
+
+ {0aad36e3-51a5-4a07-ab60-5c8a66bd38b7}
+ Farseer Physics MonoGame
+
+
+ {3b8f9edb-6e5e-450c-abc2-ec49075d0b50}
+ Hyper.ComponentModel
+
+
+ {49ba1c69-6104-41ac-a5d8-b54fa9f696e8}
+ Lidgren.Network
+
+
+ {c293db32-fa42-486d-b128-5a12522fae4e}
+ SharpFont
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Barotrauma/Barotrauma.csproj.user b/Barotrauma/BarotraumaClient/BarotraumaClient.csproj.user
similarity index 100%
rename from Barotrauma/Barotrauma.csproj.user
rename to Barotrauma/BarotraumaClient/BarotraumaClient.csproj.user
diff --git a/Barotrauma/OpenAL32.dll b/Barotrauma/BarotraumaClient/OpenAL32.dll
similarity index 100%
rename from Barotrauma/OpenAL32.dll
rename to Barotrauma/BarotraumaClient/OpenAL32.dll
diff --git a/Barotrauma/BarotraumaClient/OpenTK.dll.config b/Barotrauma/BarotraumaClient/OpenTK.dll.config
new file mode 100644
index 000000000..7098d39e9
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/OpenTK.dll.config
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Barotrauma/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
similarity index 93%
rename from Barotrauma/Properties/AssemblyInfo.cs
rename to Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
index 8f0f2c21e..3ebce2d8b 100644
--- a/Barotrauma/Properties/AssemblyInfo.cs
+++ b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.6.0.2")]
-[assembly: AssemblyFileVersion("0.6.0.2")]
+[assembly: AssemblyVersion("0.6.0.1000")]
+[assembly: AssemblyFileVersion("0.6.0.1000")]
diff --git a/Barotrauma/Source/Camera.cs b/Barotrauma/BarotraumaClient/Source/Camera.cs
similarity index 100%
rename from Barotrauma/Source/Camera.cs
rename to Barotrauma/BarotraumaClient/Source/Camera.cs
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/AI/AIController.cs b/Barotrauma/BarotraumaClient/Source/Characters/AI/AIController.cs
new file mode 100644
index 000000000..3613ba3fe
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/AI/AIController.cs
@@ -0,0 +1,11 @@
+using Lidgren.Network;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace Barotrauma
+{
+ partial class AIController : ISteerable
+ {
+ public virtual void DebugDraw(SpriteBatch spriteBatch) { }
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/AI/AITarget.cs b/Barotrauma/BarotraumaClient/Source/Characters/AI/AITarget.cs
new file mode 100644
index 000000000..05721d77b
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/AI/AITarget.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace Barotrauma
+{
+ partial class AITarget
+ {
+ public static bool ShowAITargets;
+
+ public void Draw(SpriteBatch spriteBatch)
+ {
+ if (!ShowAITargets) return;
+
+ var rangeSprite = GUI.SubmarineIcon;
+
+ if (soundRange > 0.0f)
+ rangeSprite.Draw(spriteBatch,
+ new Vector2(WorldPosition.X, -WorldPosition.Y),
+ Color.Cyan * 0.1f, rangeSprite.Origin,
+ 0.0f, soundRange / rangeSprite.size.X);
+
+ if (sightRange > 0.0f)
+ rangeSprite.Draw(spriteBatch,
+ new Vector2(WorldPosition.X, -WorldPosition.Y),
+ Color.Orange * 0.1f, rangeSprite.Origin,
+ 0.0f, sightRange / rangeSprite.size.X);
+ }
+ }
+}
diff --git a/Barotrauma/Source/Characters/AI/CrewCommander.cs b/Barotrauma/BarotraumaClient/Source/Characters/AI/CrewCommander.cs
similarity index 100%
rename from Barotrauma/Source/Characters/AI/CrewCommander.cs
rename to Barotrauma/BarotraumaClient/Source/Characters/AI/CrewCommander.cs
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaClient/Source/Characters/AI/EnemyAIController.cs
new file mode 100644
index 000000000..451477959
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/AI/EnemyAIController.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Xml.Linq;
+using FarseerPhysics;
+using Lidgren.Network;
+using Microsoft.Xna.Framework;
+using FarseerPhysics.Dynamics;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace Barotrauma
+{
+ partial class EnemyAIController : AIController
+ {
+ public override void DebugDraw(SpriteBatch spriteBatch)
+ {
+ if (Character.IsDead) return;
+
+ Vector2 pos = Character.WorldPosition;
+ pos.Y = -pos.Y;
+
+ if (selectedAiTarget != null)
+ {
+ GUI.DrawLine(spriteBatch, pos, new Vector2(selectedAiTarget.WorldPosition.X, -selectedAiTarget.WorldPosition.Y), Color.Red);
+
+ if (wallAttackPos != Vector2.Zero)
+ {
+ GUI.DrawRectangle(spriteBatch, ConvertUnits.ToDisplayUnits(new Vector2(wallAttackPos.X, -wallAttackPos.Y)) - new Vector2(10.0f, 10.0f), new Vector2(20.0f, 20.0f), Color.Red, false);
+ }
+
+ GUI.Font.DrawString(spriteBatch, targetValue.ToString(), pos - Vector2.UnitY * 20.0f, Color.Red);
+ }
+
+ if (selectedAiTarget != null)
+ {
+ GUI.DrawLine(spriteBatch,
+ new Vector2(Character.DrawPosition.X, -Character.DrawPosition.Y),
+ new Vector2(selectedAiTarget.WorldPosition.X, -selectedAiTarget.WorldPosition.Y), Color.Red);
+ }
+
+ GUI.Font.DrawString(spriteBatch, targetValue.ToString(), pos - Vector2.UnitY * 80.0f, Color.Red);
+
+ GUI.Font.DrawString(spriteBatch, "updatetargets: " + updateTargetsTimer, pos - Vector2.UnitY * 100.0f, Color.Red);
+ GUI.Font.DrawString(spriteBatch, "cooldown: " + coolDownTimer, pos - Vector2.UnitY * 120.0f, Color.Red);
+
+
+ IndoorsSteeringManager pathSteering = steeringManager as IndoorsSteeringManager;
+ if (pathSteering == null || pathSteering.CurrentPath == null || pathSteering.CurrentPath.CurrentNode == null) return;
+
+ GUI.DrawLine(spriteBatch,
+ new Vector2(Character.DrawPosition.X, -Character.DrawPosition.Y),
+ new Vector2(pathSteering.CurrentPath.CurrentNode.DrawPosition.X, -pathSteering.CurrentPath.CurrentNode.DrawPosition.Y),
+ Color.LightGreen);
+
+
+ for (int i = 1; i < pathSteering.CurrentPath.Nodes.Count; i++)
+ {
+ GUI.DrawLine(spriteBatch,
+ new Vector2(pathSteering.CurrentPath.Nodes[i].DrawPosition.X, -pathSteering.CurrentPath.Nodes[i].DrawPosition.Y),
+ new Vector2(pathSteering.CurrentPath.Nodes[i - 1].DrawPosition.X, -pathSteering.CurrentPath.Nodes[i - 1].DrawPosition.Y),
+ Color.LightGreen);
+
+ GUI.SmallFont.DrawString(spriteBatch,
+ pathSteering.CurrentPath.Nodes[i].ID.ToString(),
+ new Vector2(pathSteering.CurrentPath.Nodes[i].DrawPosition.X, -pathSteering.CurrentPath.Nodes[i].DrawPosition.Y - 10),
+ Color.LightGreen);
+ }
+ }
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaClient/Source/Characters/AI/HumanAIController.cs
new file mode 100644
index 000000000..0e9e56964
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/AI/HumanAIController.cs
@@ -0,0 +1,55 @@
+using Microsoft.Xna.Framework;
+using System;
+
+namespace Barotrauma
+{
+ partial class HumanAIController : AIController
+ {
+ partial void InitProjSpecific()
+ {
+ if (GameMain.GameSession != null && GameMain.GameSession.CrewManager != null)
+ {
+ CurrentOrder = Order.PrefabList.Find(o => o.Name.ToLowerInvariant() == "dismissed");
+ objectiveManager.SetOrder(CurrentOrder, "");
+ GameMain.GameSession.CrewManager.SetCharacterOrder(Character, CurrentOrder);
+ }
+ }
+
+ partial void SetOrderProjSpecific(Order order)
+ {
+ GameMain.GameSession.CrewManager.SetCharacterOrder(Character, order);
+ }
+
+ public override void DebugDraw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch)
+ {
+ if (selectedAiTarget != null)
+ {
+ GUI.DrawLine(spriteBatch,
+ new Vector2(Character.DrawPosition.X, -Character.DrawPosition.Y),
+ new Vector2(selectedAiTarget.WorldPosition.X, -selectedAiTarget.WorldPosition.Y), Color.Red);
+ }
+
+ IndoorsSteeringManager pathSteering = steeringManager as IndoorsSteeringManager;
+ if (pathSteering == null || pathSteering.CurrentPath == null || pathSteering.CurrentPath.CurrentNode == null) return;
+
+ GUI.DrawLine(spriteBatch,
+ new Vector2(Character.DrawPosition.X, -Character.DrawPosition.Y),
+ new Vector2(pathSteering.CurrentPath.CurrentNode.DrawPosition.X, -pathSteering.CurrentPath.CurrentNode.DrawPosition.Y),
+ Color.LightGreen);
+
+
+ for (int i = 1; i < pathSteering.CurrentPath.Nodes.Count; i++)
+ {
+ GUI.DrawLine(spriteBatch,
+ new Vector2(pathSteering.CurrentPath.Nodes[i].DrawPosition.X, -pathSteering.CurrentPath.Nodes[i].DrawPosition.Y),
+ new Vector2(pathSteering.CurrentPath.Nodes[i - 1].DrawPosition.X, -pathSteering.CurrentPath.Nodes[i - 1].DrawPosition.Y),
+ Color.LightGreen);
+
+ GUI.SmallFont.DrawString(spriteBatch,
+ pathSteering.CurrentPath.Nodes[i].ID.ToString(),
+ new Vector2(pathSteering.CurrentPath.Nodes[i].DrawPosition.X, -pathSteering.CurrentPath.Nodes[i].DrawPosition.Y - 10),
+ Color.LightGreen);
+ }
+ }
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/AICharacter.cs b/Barotrauma/BarotraumaClient/Source/Characters/AICharacter.cs
new file mode 100644
index 000000000..75b41a693
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/AICharacter.cs
@@ -0,0 +1,42 @@
+using Microsoft.Xna.Framework;
+using System;
+
+namespace Barotrauma
+{
+ partial class AICharacter : Character
+ {
+ partial void InitProjSpecific()
+ {
+ soundTimer = Rand.Range(0.0f, soundInterval);
+ }
+
+ partial void SoundUpdate(float deltaTime)
+ {
+ if (soundTimer > 0)
+ {
+ soundTimer -= deltaTime;
+ }
+ else
+ {
+ switch (aiController.State)
+ {
+ case AIController.AIState.Attack:
+ PlaySound(CharacterSound.SoundType.Attack);
+ break;
+ default:
+ PlaySound(CharacterSound.SoundType.Idle);
+ break;
+ }
+ soundTimer = soundInterval;
+ }
+ }
+
+ public override void DrawFront(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch, Camera cam)
+ {
+ base.DrawFront(spriteBatch, cam);
+
+ if (GameMain.DebugDraw && !IsDead) aiController.DebugDraw(spriteBatch);
+ }
+
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs
new file mode 100644
index 000000000..1671e6c79
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+using FarseerPhysics;
+using FarseerPhysics.Dynamics;
+using FarseerPhysics.Dynamics.Contacts;
+using FarseerPhysics.Dynamics.Joints;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace Barotrauma
+{
+ partial class Ragdoll
+ {
+ partial void ImpactProjSpecific(float impact, Body body)
+ {
+ float volume = Math.Min(impact - 3.0f, 1.0f);
+
+ if (body.UserData is Limb)
+ {
+ Limb limb = (Limb)body.UserData;
+
+ if (impact > 3.0f && limb.HitSound != null && limb.SoundTimer <= 0.0f)
+ {
+ limb.SoundTimer = Limb.SoundInterval;
+ limb.HitSound.Play(volume, impact * 100.0f, limb.WorldPosition);
+ }
+ }
+ else if (body == Collider.FarseerBody)
+ {
+ if (!character.IsRemotePlayer || GameMain.Server != null)
+ {
+ if (impact > ImpactTolerance)
+ {
+ SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, strongestImpact, Collider);
+ }
+ }
+
+ if (Character.Controlled == character) GameMain.GameScreen.Cam.Shake = strongestImpact;
+ }
+ }
+
+ partial void Splash(Limb limb, Hull limbHull)
+ {
+ //create a splash particle
+ GameMain.ParticleManager.CreateParticle("watersplash",
+ new Vector2(limb.Position.X, limbHull.Surface) + limbHull.Submarine.Position,
+ new Vector2(0.0f, Math.Abs(-limb.LinearVelocity.Y * 20.0f)),
+ 0.0f, limbHull);
+
+ GameMain.ParticleManager.CreateParticle("bubbles",
+ new Vector2(limb.Position.X, limbHull.Surface) + limbHull.Submarine.Position,
+ limb.LinearVelocity * 0.001f,
+ 0.0f, limbHull);
+
+ //if the Character dropped into water, create a wave
+ if (limb.LinearVelocity.Y < 0.0f)
+ {
+ if (splashSoundTimer <= 0.0f)
+ {
+ SoundPlayer.PlaySplashSound(limb.WorldPosition, Math.Abs(limb.LinearVelocity.Y) + Rand.Range(-5.0f, 0.0f));
+ splashSoundTimer = 0.5f;
+ }
+ }
+ }
+
+ public virtual void Draw(SpriteBatch spriteBatch)
+ {
+ if (simplePhysicsEnabled) return;
+
+ Collider.UpdateDrawPosition();
+
+ foreach (Limb limb in Limbs)
+ {
+ limb.Draw(spriteBatch);
+ }
+ }
+
+ public void DebugDraw(SpriteBatch spriteBatch)
+ {
+ if (!GameMain.DebugDraw || !character.Enabled) return;
+ if (simplePhysicsEnabled) return;
+
+ foreach (Limb limb in Limbs)
+ {
+
+ if (limb.pullJoint != null)
+ {
+ Vector2 pos = ConvertUnits.ToDisplayUnits(limb.pullJoint.WorldAnchorA);
+ if (currentHull != null) pos += currentHull.Submarine.DrawPosition;
+ pos.Y = -pos.Y;
+ GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X, (int)pos.Y, 5, 5), Color.Red, true, 0.01f);
+ }
+
+ limb.body.DebugDraw(spriteBatch, inWater ? Color.Cyan : Color.White);
+ }
+
+ Collider.DebugDraw(spriteBatch, frozen ? Color.Red : (inWater ? Color.SkyBlue : Color.Gray));
+ GUI.Font.DrawString(spriteBatch, Collider.LinearVelocity.X.ToString(), new Vector2(Collider.DrawPosition.X, -Collider.DrawPosition.Y), Color.Orange);
+
+ foreach (RevoluteJoint joint in LimbJoints)
+ {
+ Vector2 pos = ConvertUnits.ToDisplayUnits(joint.WorldAnchorA);
+ GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X, (int)-pos.Y, 5, 5), Color.White, true);
+
+ pos = ConvertUnits.ToDisplayUnits(joint.WorldAnchorB);
+ GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X, (int)-pos.Y, 5, 5), Color.White, true);
+ }
+
+ foreach (Limb limb in Limbs)
+ {
+ if (limb.body.TargetPosition != null)
+ {
+ Vector2 pos = ConvertUnits.ToDisplayUnits((Vector2)limb.body.TargetPosition);
+ if (currentHull != null) pos += currentHull.Submarine.DrawPosition;
+ pos.Y = -pos.Y;
+
+ GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X - 10, (int)pos.Y - 10, 20, 20), Color.Cyan, false, 0.01f);
+ GUI.DrawLine(spriteBatch, pos, new Vector2(limb.WorldPosition.X, -limb.WorldPosition.Y), Color.Cyan);
+ }
+ }
+
+ if (character.MemState.Count > 1)
+ {
+ Vector2 prevPos = ConvertUnits.ToDisplayUnits(character.MemState[0].Position);
+ if (currentHull != null) prevPos += currentHull.Submarine.DrawPosition;
+ prevPos.Y = -prevPos.Y;
+
+ for (int i = 1; i < character.MemState.Count; i++)
+ {
+ Vector2 currPos = ConvertUnits.ToDisplayUnits(character.MemState[i].Position);
+ if (currentHull != null) currPos += currentHull.Submarine.DrawPosition;
+ currPos.Y = -currPos.Y;
+
+ GUI.DrawRectangle(spriteBatch, new Rectangle((int)currPos.X - 3, (int)currPos.Y - 3, 6, 6), Color.Cyan * 0.6f, true, 0.01f);
+ GUI.DrawLine(spriteBatch, prevPos, currPos, Color.Cyan * 0.6f, 0, 3);
+
+ prevPos = currPos;
+ }
+ }
+
+ if (ignorePlatforms)
+ {
+ GUI.DrawLine(spriteBatch,
+ new Vector2(Collider.DrawPosition.X, -Collider.DrawPosition.Y),
+ new Vector2(Collider.DrawPosition.X, -Collider.DrawPosition.Y + 50),
+ Color.Orange, 0, 5);
+ }
+ }
+ }
+}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Attack.cs b/Barotrauma/BarotraumaClient/Source/Characters/Attack.cs
new file mode 100644
index 000000000..033bbab9c
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/Attack.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml.Linq;
+using Microsoft.Xna.Framework;
+using Barotrauma.Particles;
+
+namespace Barotrauma
+{
+ partial class Attack
+ {
+ private Sound sound;
+
+ private ParticleEmitterPrefab particleEmitterPrefab;
+
+ partial void InitProjSpecific(XElement element)
+ {
+ string soundPath = ToolBox.GetAttributeString(element, "sound", "");
+ if (!string.IsNullOrWhiteSpace(soundPath))
+ {
+ sound = Sound.Load(soundPath);
+ }
+
+ foreach (XElement subElement in element.Elements())
+ {
+ switch (subElement.Name.ToString().ToLowerInvariant())
+ {
+ case "particleemitter":
+ particleEmitterPrefab = new ParticleEmitterPrefab(subElement);
+ break;
+ }
+
+ }
+ }
+
+ partial void DamageParticles(Vector2 worldPosition)
+ {
+ if (particleEmitterPrefab != null)
+ {
+ particleEmitterPrefab.Emit(worldPosition);
+ }
+
+ if (sound != null)
+ {
+ sound.Play(1.0f, 500.0f, worldPosition);
+ }
+ }
+ }
+}
diff --git a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreature.cs b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreature.cs
similarity index 100%
rename from Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreature.cs
rename to Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreature.cs
diff --git a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs
similarity index 91%
rename from Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs
rename to Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs
index ed2974c81..443221132 100644
--- a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs
+++ b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreatureManager.cs
@@ -64,14 +64,14 @@ namespace Barotrauma
var wayPoints = WayPoint.WayPointList.FindAll(wp => wp.Submarine==null);
if (wayPoints.Any())
{
- WayPoint wp = wayPoints[Rand.Int(wayPoints.Count, false)];
+ WayPoint wp = wayPoints[Rand.Int(wayPoints.Count, Rand.RandSync.ClientOnly)];
pos = new Vector2(wp.Rect.X, wp.Rect.Y);
- pos += Rand.Vector(200.0f, false);
+ pos += Rand.Vector(200.0f, Rand.RandSync.ClientOnly);
}
else
{
- pos = Rand.Vector(2000.0f, false);
+ pos = Rand.Vector(2000.0f, Rand.RandSync.ClientOnly);
}
}
else
@@ -80,9 +80,9 @@ namespace Barotrauma
}
- var prefab = prefabs[Rand.Int(prefabs.Count, false)];
+ var prefab = prefabs[Rand.Int(prefabs.Count, Rand.RandSync.ClientOnly)];
- int amount = Rand.Range(prefab.SwarmMin, prefab.SwarmMax, false);
+ int amount = Rand.Range(prefab.SwarmMin, prefab.SwarmMax, Rand.RandSync.ClientOnly);
List swarmMembers = new List();
for (int n = 0; n < amount; n++)
@@ -103,7 +103,7 @@ namespace Barotrauma
activeSprites.Clear();
}
- public void Update(Camera cam, float deltaTime)
+ public void Update(float deltaTime, Camera cam)
{
if (checkActiveTimer<0.0f)
{
diff --git a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreaturePrefab.cs b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreaturePrefab.cs
similarity index 100%
rename from Barotrauma/Source/Characters/BackgroundSprite/BackgroundCreaturePrefab.cs
rename to Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundCreaturePrefab.cs
diff --git a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs
similarity index 95%
rename from Barotrauma/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs
rename to Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs
index 9236b2c73..0d722798b 100644
--- a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs
+++ b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs
@@ -101,10 +101,10 @@ namespace Barotrauma
rotation = MathUtils.VectorToAngle(new Vector2(edgeNormal.Y, edgeNormal.X));
}
- rotation += Rand.Range(prefab.RandomRotation.X, prefab.RandomRotation.Y, false);
+ rotation += Rand.Range(prefab.RandomRotation.X, prefab.RandomRotation.Y, Rand.RandSync.ClientOnly);
var newSprite = new BackgroundSprite(prefab,
- new Vector3((Vector2)pos, Rand.Range(prefab.DepthRange.X, prefab.DepthRange.Y, false)), Rand.Range(prefab.Scale.X, prefab.Scale.Y, false), rotation);
+ new Vector3((Vector2)pos, Rand.Range(prefab.DepthRange.X, prefab.DepthRange.Y, Rand.RandSync.ClientOnly)), Rand.Range(prefab.Scale.X, prefab.Scale.Y, Rand.RandSync.ClientOnly), rotation);
//calculate the positions of the corners of the rotated sprite
Vector2 halfSize = newSprite.Prefab.Sprite.size * newSprite.Scale / 2;
@@ -155,8 +155,8 @@ namespace Barotrauma
edgeNormal = Vector2.One;
Vector2 randomPos = new Vector2(
- Rand.Range(0.0f, level.Size.X, false),
- Rand.Range(0.0f, level.Size.Y, false));
+ Rand.Range(0.0f, level.Size.X, Rand.RandSync.ClientOnly),
+ Rand.Range(0.0f, level.Size.Y, Rand.RandSync.ClientOnly));
if (!prefab.SpawnOnWalls) return randomPos;
@@ -167,7 +167,7 @@ namespace Barotrauma
if (cells.Any())
{
- VoronoiCell cell = cells[Rand.Int(cells.Count, false)];
+ VoronoiCell cell = cells[Rand.Int(cells.Count, Rand.RandSync.ClientOnly)];
foreach (GraphEdge edge in cell.edges)
{
@@ -220,13 +220,13 @@ namespace Barotrauma
if (!edges.Any()) return null;
- int index = Rand.Int(edges.Count, false);
+ int index = Rand.Int(edges.Count, Rand.RandSync.ClientOnly);
closestEdge = edges[index];
edgeNormal = normals[index];
float length = Vector2.Distance(closestEdge.point1, closestEdge.point2);
Vector2 dir = (closestEdge.point1 - closestEdge.point2) / length;
- Vector2 pos = closestEdge.point2 + dir * Rand.Range(prefab.Sprite.size.X / 2.0f, length - prefab.Sprite.size.X / 2.0f, false);
+ Vector2 pos = closestEdge.point2 + dir * Rand.Range(prefab.Sprite.size.X / 2.0f, length - prefab.Sprite.size.X / 2.0f, Rand.RandSync.ClientOnly);
return pos;
}
@@ -331,7 +331,7 @@ namespace Barotrauma
totalCommonness += prefab.GetCommonness(levelType);
}
- float randomNumber = Rand.Int(totalCommonness+1, false);
+ float randomNumber = Rand.Int(totalCommonness+1, Rand.RandSync.ClientOnly);
foreach (BackgroundSpritePrefab prefab in prefabs)
{
diff --git a/Barotrauma/Source/Characters/BackgroundSprite/BackgroundSpritePrefab.cs b/Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundSpritePrefab.cs
similarity index 100%
rename from Barotrauma/Source/Characters/BackgroundSprite/BackgroundSpritePrefab.cs
rename to Barotrauma/BarotraumaClient/Source/Characters/BackgroundSprite/BackgroundSpritePrefab.cs
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Character.cs b/Barotrauma/BarotraumaClient/Source/Characters/Character.cs
new file mode 100644
index 000000000..773286b8a
--- /dev/null
+++ b/Barotrauma/BarotraumaClient/Source/Characters/Character.cs
@@ -0,0 +1,442 @@
+using FarseerPhysics;
+using FarseerPhysics.Dynamics;
+using FarseerPhysics.Dynamics.Joints;
+using Barotrauma.Networking;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Barotrauma.Particles;
+
+namespace Barotrauma
+{
+ partial class Character : Entity, IDamageable, IPropertyObject, IClientSerializable, IServerSerializable
+ {
+ protected float soundTimer;
+ protected float soundInterval;
+
+ private List sounds;
+
+ //the Character that the player is currently controlling
+ private static Character controlled;
+
+ public static Character Controlled
+ {
+ get { return controlled; }
+ set
+ {
+ if (controlled == value) return;
+ controlled = value;
+ CharacterHUD.Reset();
+
+ if (controlled != null)
+ {
+ controlled.Enabled = true;
+ }
+ }
+ }
+
+ private Dictionary