diff --git a/Barotrauma/BarotraumaClient/ClientCode.projitems b/Barotrauma/BarotraumaClient/ClientCode.projitems
index 96e169d05..991ce2d39 100644
--- a/Barotrauma/BarotraumaClient/ClientCode.projitems
+++ b/Barotrauma/BarotraumaClient/ClientCode.projitems
@@ -223,7 +223,6 @@
Never
-
diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj
index c96a76c05..c3c50da75 100644
--- a/Barotrauma/BarotraumaClient/LinuxClient.csproj
+++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj
@@ -80,8 +80,8 @@
-
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\GameAnalytics.Mono.dll
+
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll
..\..\Libraries\NuGet\MonoGame.Framework.DesktopGL.3.7.1.189\lib\net45\MonoGame.Framework.dll
@@ -101,7 +101,7 @@
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\System.Data.SQLite.dll
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\System.Data.SQLite.dll
@@ -247,9 +247,6 @@
PreserveNewest
-
- PreserveNewest
-
PreserveNewest
@@ -271,12 +268,6 @@
PreserveNewest
-
- PreserveNewest
-
-
- PreserveNewest
-
PreserveNewest
@@ -350,13 +341,13 @@
-
-
+
+
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
+
diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj
index b57d6b7cc..797f42a80 100644
--- a/Barotrauma/BarotraumaClient/MacClient.csproj
+++ b/Barotrauma/BarotraumaClient/MacClient.csproj
@@ -79,8 +79,8 @@
-
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\GameAnalytics.Mono.dll
+
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll
..\..\Libraries\NuGet\MonoGame.Framework.DesktopGL.3.7.1.189\lib\net45\MonoGame.Framework.dll
@@ -100,7 +100,7 @@
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\System.Data.SQLite.dll
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\System.Data.SQLite.dll
@@ -271,12 +271,13 @@
+
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
-
-
+
-
-
+
-
\ No newline at end of file
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs b/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs
index aaf8d1e3b..0ee4b4bdf 100644
--- a/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs
+++ b/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs
@@ -43,7 +43,7 @@ namespace Barotrauma
{
return text;
}
- text = TextManager.GetWithVariable(textTag, "[key]", keyBind);
+ text = TextManager.Get(textTag).Replace("[key]", keyBind);
cachedHudTexts.Add(textTag + keyBind, text);
return text;
}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaClient/Source/Characters/CharacterInfo.cs
index f678e8b3a..9896272dd 100644
--- a/Barotrauma/BarotraumaClient/Source/Characters/CharacterInfo.cs
+++ b/Barotrauma/BarotraumaClient/Source/Characters/CharacterInfo.cs
@@ -119,9 +119,11 @@ namespace Barotrauma
if ((int)newLevel > (int)prevLevel)
{
GUI.AddMessage(
- TextManager.GetWithVariables("SkillIncreased", new string[3] { "[name]", "[skillname]", "[newlevel]" },
- new string[3] { Name, TextManager.Get("SkillName." + skillIdentifier), ((int)newLevel).ToString() },
- new bool[3] { false, true, false }), Color.Green);
+ TextManager.Get("SkillIncreased")
+ .Replace("[name]", Name)
+ .Replace("[skillname]", TextManager.Get("SkillName." + skillIdentifier))
+ .Replace("[newlevel]", ((int)newLevel).ToString()),
+ Color.Green);
}
}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Health/AfflictionHusk.cs b/Barotrauma/BarotraumaClient/Source/Characters/Health/AfflictionHusk.cs
index 802016b71..727aea035 100644
--- a/Barotrauma/BarotraumaClient/Source/Characters/Health/AfflictionHusk.cs
+++ b/Barotrauma/BarotraumaClient/Source/Characters/Health/AfflictionHusk.cs
@@ -26,7 +26,7 @@ namespace Barotrauma
}
else if (state != InfectionState.Active && Character.Controlled == character)
{
- GUI.AddMessage(TextManager.GetWithVariable("HuskActivate", "[Attack]", GameMain.Config.KeyBind(InputType.Attack).ToString()),
+ GUI.AddMessage(TextManager.Get("HuskActivate").Replace("[Attack]", GameMain.Config.KeyBind(InputType.Attack).ToString()),
Color.Red);
}
}
diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs
index 90748c3f2..afa1d3daf 100644
--- a/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs
+++ b/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs
@@ -606,7 +606,7 @@ namespace Barotrauma
.ThenByDescending(a => a.Strength).FirstOrDefault();
if (affliction.DamagePerSecond > 0 || affliction.Strength > 0)
{
- var limbHealth = GetMatchingLimbHealth(affliction);
+ var limbHealth = GetMathingLimbHealth(affliction);
if (limbHealth != null)
{
selectedLimbIndex = limbHealths.IndexOf(limbHealth);
diff --git a/Barotrauma/BarotraumaClient/Source/EventInput/EventInput.cs b/Barotrauma/BarotraumaClient/Source/EventInput/EventInput.cs
index ee3619634..e156dd669 100644
--- a/Barotrauma/BarotraumaClient/Source/EventInput/EventInput.cs
+++ b/Barotrauma/BarotraumaClient/Source/EventInput/EventInput.cs
@@ -256,4 +256,4 @@ namespace EventInput
}
#endif
}
-}
\ No newline at end of file
+}
diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIStyle.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIStyle.cs
index e93f22c76..9a02dd655 100644
--- a/Barotrauma/BarotraumaClient/Source/GUI/GUIStyle.cs
+++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIStyle.cs
@@ -118,21 +118,27 @@ namespace Barotrauma
switch (subElement.Name.ToString().ToLowerInvariant())
{
case "font":
+ if (Font == null) { continue; }
Font.Size = GetFontSize(subElement);
break;
case "smallfont":
+ if (SmallFont == null) { continue; }
SmallFont.Size = GetFontSize(subElement);
break;
case "largefont":
+ if (LargeFont == null) { continue; }
LargeFont.Size = GetFontSize(subElement);
break;
case "objectivetitle":
+ if (ObjectiveTitleFont == null) { continue; }
ObjectiveTitleFont.Size = GetFontSize(subElement);
break;
case "objectivename":
+ if (ObjectiveNameFont == null) { continue; }
ObjectiveNameFont.Size = GetFontSize(subElement);
break;
case "videotitle":
+ if (VideoTitleFont == null) { continue; }
VideoTitleFont.Size = GetFontSize(subElement);
break;
}
diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs
index a055efc07..474d4518c 100644
--- a/Barotrauma/BarotraumaClient/Source/GameMain.cs
+++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs
@@ -207,6 +207,18 @@ namespace Barotrauma
#endif
}
+ private void ApplyGraphicsSettings()
+ {
+#if WINDOWS
+ if (WindowActive)
+ {
+#endif
+ ApplyGraphicsSettings();
+#if WINDOWS
+ }
+#endif
+ }
+
private void ApplyGraphicsSettings()
{
#if !OSX
@@ -254,8 +266,6 @@ namespace Barotrauma
GraphicsDeviceManager.PreferredBackBufferWidth = GraphicsWidth;
GraphicsDeviceManager.PreferredBackBufferHeight = GraphicsHeight;
-
- GraphicsDeviceManager.ApplyChanges();
}
public void ResetViewPort()
@@ -273,7 +283,7 @@ namespace Barotrauma
{
base.Initialize();
- ApplyGraphicsSettings();
+ RequestGraphicsSettings();
ScissorTestEnable = new RasterizerState() { ScissorTestEnable = true };
@@ -312,6 +322,38 @@ namespace Barotrauma
#endif
loadingCoroutine = CoroutineManager.StartCoroutine(Load(canLoadInSeparateThread), "", canLoadInSeparateThread);
+
+#if WINDOWS
+ var gameForm = (System.Windows.Forms.Form)System.Windows.Forms.Form.FromHandle(Window.Handle);
+ gameForm.Activated += new EventHandler(HandleFocus);
+ gameForm.Deactivate += new EventHandler(HandleDefocus);
+ if (WindowActive) { HandleFocus(null, null); }
+#endif
+ }
+
+#if WINDOWS
+ private void HandleFocus(object sender, EventArgs e)
+ {
+ CoroutineManager.StopCoroutines("FocusCoroutine");
+ CoroutineManager.StartCoroutine(FocusCoroutine(),"FocusCoroutine");
+ }
+
+ private IEnumerable
-
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\GameAnalytics.Mono.dll
+
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll
..\..\Libraries\NuGet\MonoGame.Framework.WindowsDX.3.7.1.189\lib\net45\MonoGame.Framework.dll
@@ -132,7 +132,7 @@
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\System.Data.SQLite.dll
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\System.Data.SQLite.dll
@@ -306,13 +306,13 @@
-
-
+
+
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
+
diff --git a/Barotrauma/BarotraumaClient/packages.config b/Barotrauma/BarotraumaClient/packages.config
index e593ce09a..d637bffbb 100644
--- a/Barotrauma/BarotraumaClient/packages.config
+++ b/Barotrauma/BarotraumaClient/packages.config
@@ -1,6 +1,6 @@

-
+
diff --git a/Barotrauma/BarotraumaServer/Server.csproj b/Barotrauma/BarotraumaServer/Server.csproj
index 6b66b1b69..99289cacd 100644
--- a/Barotrauma/BarotraumaServer/Server.csproj
+++ b/Barotrauma/BarotraumaServer/Server.csproj
@@ -149,13 +149,7 @@
true
-
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\GameAnalytics.Mono.dll
-
-
- ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.2.1.6\lib\net45\System.Data.SQLite.dll
-
@@ -169,6 +163,12 @@
..\..\Libraries\NuGet\NLog.4.3.8\lib\net45\NLog.dll
+
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll
+
+
+ ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\System.Data.SQLite.dll
+
..\..\Libraries\NuGet\RestSharp.105.2.3\lib\net45\RestSharp.dll
@@ -293,11 +293,5 @@
-
-
-
- This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
+
\ No newline at end of file
diff --git a/Barotrauma/BarotraumaServer/Source/GameMain.cs b/Barotrauma/BarotraumaServer/Source/GameMain.cs
index f97944a3e..6515b87c6 100644
--- a/Barotrauma/BarotraumaServer/Source/GameMain.cs
+++ b/Barotrauma/BarotraumaServer/Source/GameMain.cs
@@ -128,7 +128,9 @@ namespace Barotrauma
var exePaths = contentPackage.GetFilesOfType(ContentType.ServerExecutable);
if (exePaths.Count() > 0 && AppDomain.CurrentDomain.FriendlyName != exePaths.First())
{
- DebugConsole.ShowQuestionPrompt(TextManager.GetWithVariables("IncorrectExe", new string[2] { "[selectedpackage]", "[exename]" }, new string[2] { contentPackage.Name, exePaths.First() }),
+ DebugConsole.ShowQuestionPrompt(TextManager.Get("IncorrectExe")
+ .Replace("[selectedpackage]", contentPackage.Name)
+ .Replace("[exename]", exePaths.First()),
(option) =>
{
if (option.ToLower() == "y" || option.ToLower() == "yes")
@@ -296,7 +298,7 @@ namespace Barotrauma
CloseServer();
SteamManager.ShutDown();
- if (GameSettings.SendUserStatistics) GameAnalytics.OnQuit();
+ if (GameSettings.SendUserStatistics) GameAnalytics.OnStop();
}
public static void ResetFrameTime()
diff --git a/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/TraitorManager.cs b/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/TraitorManager.cs
index 3c05f2ef0..c275b4a36 100644
--- a/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/TraitorManager.cs
+++ b/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/TraitorManager.cs
@@ -16,9 +16,10 @@ namespace Barotrauma
public void Greet(GameServer server, string codeWords, string codeResponse)
{
- string greetingMessage = TextManager.GetWithVariable("TraitorStartMessage", "[targetname]", TargetCharacter.Name);
- string moreAgentsMessage = TextManager.GetWithVariables("TraitorMoreAgentsMessage",
- new string[2] { "[codewords]", "[coderesponse]" }, new string[2] { codeWords, codeResponse });
+ string greetingMessage = TextManager.Get("TraitorStartMessage").Replace("[targetname]", TargetCharacter.Name);
+ string moreAgentsMessage = TextManager.Get("TraitorMoreAgentsMessage")
+ .Replace("[codewords]", codeWords)
+ .Replace("[coderesponse]", codeResponse);
var greetingChatMsg = ChatMessage.Create(null, greetingMessage, ChatMessageType.Server, null);
var moreAgentsChatMsg = ChatMessage.Create(null, moreAgentsMessage, ChatMessageType.Server, null);
@@ -37,7 +38,7 @@ namespace Barotrauma
{
var ownerMsg = ChatMessage.Create(
null,//TextManager.Get("NewTraitor"),
- TextManager.GetWithVariables("TraitorStartMessageServer", new string[2] { "[targetname]", "[traitorname]" }, new string[2] { TargetCharacter.Name, Character.Name }),
+ TextManager.Get("TraitorStartMessageServer").Replace("[targetname]", TargetCharacter.Name).Replace("[traitorname]", Character.Name),
ChatMessageType.MessageBox,
null
);
diff --git a/Barotrauma/BarotraumaServer/Source/Items/Item.cs b/Barotrauma/BarotraumaServer/Source/Items/Item.cs
index 8e29b0a21..beb831abf 100644
--- a/Barotrauma/BarotraumaServer/Source/Items/Item.cs
+++ b/Barotrauma/BarotraumaServer/Source/Items/Item.cs
@@ -193,7 +193,7 @@ namespace Barotrauma
{
if (GameMain.Server == null) return;
- msg.Write(Prefab.OriginalName);
+ msg.Write(Prefab.Name);
msg.Write(Prefab.Identifier);
msg.Write(Description != prefab.Description);
if (Description != prefab.Description)
diff --git a/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs
index 1dbc815cb..48dfceef2 100644
--- a/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs
+++ b/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs
@@ -415,7 +415,7 @@ namespace Barotrauma.Networking
{
if (endRoundTimer <= 0.0f)
{
- SendChatMessage(TextManager.GetWithVariable("CrewDeadNoRespawns", "[time]", "60"), ChatMessageType.Server);
+ SendChatMessage(TextManager.Get("CrewDeadNoRespawns").Replace("[time]", "60"), ChatMessageType.Server);
}
endRoundTimer += deltaTime;
}
@@ -728,7 +728,7 @@ namespace Barotrauma.Networking
if (matchingSub == null)
{
SendDirectChatMessage(
- TextManager.GetWithVariable("CampaignStartFailedSubNotFound", "[subname]", subName),
+ TextManager.Get("CampaignStartFailedSubNotFound").Replace("[subname]", subName),
connectedClient, ChatMessageType.MessageBox);
}
else
diff --git a/Barotrauma/BarotraumaServer/Source/Networking/RespawnManager.cs b/Barotrauma/BarotraumaServer/Source/Networking/RespawnManager.cs
index a27e15083..593bec08f 100644
--- a/Barotrauma/BarotraumaServer/Source/Networking/RespawnManager.cs
+++ b/Barotrauma/BarotraumaServer/Source/Networking/RespawnManager.cs
@@ -232,7 +232,7 @@ namespace Barotrauma.Networking
//add the ID card tags they should've gotten when spawning in the shuttle
foreach (Item item in character.Inventory.Items)
{
- if (item == null || item.Prefab.Identifier != "idcard") continue;
+ if (item == null || item.Prefab.Name != "ID Card") continue;
foreach (string s in shuttleSpawnPoints[i].IdCardTags)
{
item.AddTag(s);
diff --git a/Barotrauma/BarotraumaServer/Source/Networking/SteamManager.cs b/Barotrauma/BarotraumaServer/Source/Networking/SteamManager.cs
index 1bc7105a6..c0bbd0c9d 100644
--- a/Barotrauma/BarotraumaServer/Source/Networking/SteamManager.cs
+++ b/Barotrauma/BarotraumaServer/Source/Networking/SteamManager.cs
@@ -37,7 +37,7 @@ namespace Barotrauma.Steam
public static bool RefreshServerDetails(Networking.GameServer server)
{
- if (instance?.server == null || !instance.isInitialized)
+ if (instance == null || !instance.isInitialized)
{
return false;
}
diff --git a/Barotrauma/BarotraumaServer/Source/Program.cs b/Barotrauma/BarotraumaServer/Source/Program.cs
index 01070636e..f58204d7a 100644
--- a/Barotrauma/BarotraumaServer/Source/Program.cs
+++ b/Barotrauma/BarotraumaServer/Source/Program.cs
@@ -35,7 +35,7 @@ namespace Barotrauma
inputThread.Start();
game.Run();
inputThread.Abort(); inputThread.Join();
- if (GameSettings.SendUserStatistics) GameAnalytics.OnQuit();
+ if (GameSettings.SendUserStatistics) GameAnalytics.OnStop();
SteamManager.ShutDown();
#if !DEBUG
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs
index 2f176e100..e1587cdfc 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs
@@ -202,18 +202,22 @@ namespace Barotrauma
if (run || speedMultiplier <= 0.0f) targetMovement *= speedMultiplier;
Character.ResetSpeedMultiplier(); // Reset, items will set the value before the next update
Character.AnimController.TargetMovement = targetMovement;
+
if (!NeedsDivingGear(Character.CurrentHull))
{
bool oxygenLow = Character.OxygenAvailable < CharacterHealth.LowOxygenThreshold;
bool highPressure = Character.CurrentHull == null || Character.CurrentHull.LethalPressure > 0 && Character.PressureProtection <= 0;
bool shouldKeepTheGearOn = !ObjectiveManager.IsCurrentObjective();
- bool removeDivingSuit = oxygenLow && !highPressure;
- if (!removeDivingSuit)
- {
- bool targetHasNoSuit = objectiveManager.CurrentOrder is AIObjectiveGoTo gtObj && gtObj.mimic && !HasDivingSuit(gtObj.Target as Character);
- bool canDropTheSuit = Character.CurrentHull.WaterPercentage < 1 && !Character.IsClimbing && steeringManager == insideSteering && !PathSteering.InStairs;
- removeDivingSuit = (!shouldKeepTheGearOn || targetHasNoSuit) && canDropTheSuit;
- }
+
+ // Don't allow to drop the diving suit in water or while climbing or if the current path has stairs
+ bool removeDivingSuit =
+ (oxygenLow && !highPressure) ||
+ (!shouldKeepTheGearOn &&
+ Character.CurrentHull.WaterPercentage < 1 &&
+ !Character.IsClimbing &&
+ steeringManager == insideSteering &&
+ !PathSteering.InStairs);
+
if (removeDivingSuit)
{
var divingSuit = Character.Inventory.FindItemByIdentifier("divingsuit") ?? Character.Inventory.FindItemByTag("divingsuit");
@@ -223,8 +227,7 @@ namespace Barotrauma
divingSuit.Drop(Character);
}
}
- bool targetHasNoMask = objectiveManager.CurrentOrder is AIObjectiveGoTo gotoObjective && gotoObjective.mimic && !HasDivingMask(gotoObjective.Target as Character);
- bool takeMaskOff = oxygenLow || (!shouldKeepTheGearOn && Character.CurrentHull.WaterPercentage < 20) || targetHasNoMask;
+ bool takeMaskOff = oxygenLow || (!shouldKeepTheGearOn && Character.CurrentHull.WaterPercentage < 20);
if (takeMaskOff)
{
var mask = Character.Inventory.FindItemByIdentifier("divingmask");
@@ -333,7 +336,7 @@ namespace Barotrauma
if (AIObjectiveFixLeaks.IsValidTarget(gap, Character))
{
AddTargets(Character, gap);
- if (newOrder == null && !gap.IsRoomToRoom)
+ if (newOrder == null)
{
var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportbreach");
newOrder = new Order(orderPrefab, hull, null, orderGiver: Character);
@@ -381,8 +384,8 @@ namespace Barotrauma
}
if (Character.PressureTimer > 50.0f && Character.CurrentHull != null)
- {
- Character.Speak(TextManager.GetWithVariable("DialogPressure", "[roomname]", Character.CurrentHull.DisplayName, true), null, 0, "pressure", 30.0f);
+ {
+ Character.Speak(TextManager.Get("DialogPressure").Replace("[roomname]", Character.CurrentHull.DisplayName), null, 0, "pressure", 30.0f);
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs
index b2bccbe4d..d60f7926b 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs
@@ -110,8 +110,8 @@ namespace Barotrauma
move = false;
extinguisher.Use(deltaTime, character);
if (!targetHull.FireSources.Contains(fs))
- {
- character.Speak(TextManager.GetWithVariable("DialogPutOutFire", "[roomname]", targetHull.Name, true), null, 0, "putoutfire", 10.0f);
+ {
+ character.Speak(TextManager.Get("DialogPutOutFire").Replace("[roomname]", targetHull.Name), null, 0, "putoutfire", 10.0f);
}
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveFindSafety.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveFindSafety.cs
index 3cdc8780b..851a0cd01 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveFindSafety.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveFindSafety.cs
@@ -122,8 +122,9 @@ namespace Barotrauma
goToObjective = null;
}
TryAddSubObjective(ref goToObjective,
- constructor: () => new AIObjectiveGoTo(currentSafeHull, character, objectiveManager, getDivingGearIfNeeded: true)
+ constructor: () => new AIObjectiveGoTo(currentSafeHull, character, objectiveManager, getDivingGearIfNeeded: false)
{
+ // If we need diving gear, we should already have it, if possible.
AllowGoingOutside = HumanAIController.HasDivingSuit(character)
},
onAbandon: () => unreachable.Add(goToObjective.Target as Hull));
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveManager.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveManager.cs
index ec1e63d2c..19a21b7ff 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveManager.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveManager.cs
@@ -234,7 +234,6 @@ namespace Barotrauma
switch (order.AITag.ToLowerInvariant())
{
case "follow":
- if (orderGiver == null) { return null; }
newObjective = new AIObjectiveGoTo(orderGiver, character, this, repeat: true, priorityModifier: priorityModifier)
{
CloseEnough = 150,
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs
index 3da532975..d77c798c3 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs
@@ -60,7 +60,7 @@ namespace Barotrauma
ItemComponent target = useController ? controller : component;
if (useController && controller == null)
{
- character.Speak(TextManager.GetWithVariable("DialogCantFindController", "[item]", component.Item.Name, true), null, 2.0f, "cantfindcontroller", 30.0f);
+ character.Speak(TextManager.Get("DialogCantFindController").Replace("[item]", component.Item.Name), null, 2.0f, "cantfindcontroller", 30.0f);
abandon = true;
return;
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs
index 8ddb26d26..a3574b29d 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs
@@ -44,8 +44,8 @@ namespace Barotrauma
{
bool isCompleted = Item.IsFullCondition;
if (isCompleted)
- {
- character?.Speak(TextManager.GetWithVariable("DialogItemRepaired", "[itemname]", Item.Name, true), null, 0.0f, "itemrepaired", 10.0f);
+ {
+ character?.Speak(TextManager.Get("DialogItemRepaired").Replace("[itemname]", Item.Name), null, 0.0f, "itemrepaired", 10.0f);
}
return isCompleted;
}
@@ -140,7 +140,7 @@ namespace Barotrauma
{
// If the current condition is less than the previous condition, we can't complete the task, so let's abandon it. The item is probably deteriorating at a greater speed than we can repair it.
abandon = true;
- character?.Speak(TextManager.GetWithVariable("DialogCannotRepair", "[itemname]", Item.Name, true), null, 0.0f, "cannotrepair", 10.0f);
+ character?.Speak(TextManager.Get("DialogCannotRepair").Replace("[itemname]", Item.Name), null, 0.0f, "cannotrepair", 10.0f);
}
}
repairable.CurrentFixer = abandon && repairable.CurrentFixer == character ? null : character;
@@ -161,8 +161,8 @@ namespace Barotrauma
objective.CloseEnough = repairTool.Range * 0.75f;
}
return objective;
- },
- onAbandon: () => character.Speak(TextManager.GetWithVariable("DialogCannotRepair", "[itemname]", Item.Name, true), null, 0.0f, "cannotrepair", 10.0f));
+ },
+ onAbandon: () => character.Speak(TextManager.Get("DialogCannotRepair").Replace("[itemname]", Item.Name), null, 0.0f, "cannotrepair", 10.0f));
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs
index 3eff46f3a..65c43a1d9 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs
@@ -57,10 +57,11 @@ namespace Barotrauma
if (targetCharacter.IsUnconscious && HumanAIController.GetHullSafety(targetCharacter.CurrentHull, targetCharacter) < HumanAIController.HULL_SAFETY_THRESHOLD)
{
if (character.SelectedCharacter != targetCharacter)
- {
- character.Speak(TextManager.GetWithVariables("DialogFoundUnconsciousTarget", new string[2] { "[targetname]", "[roomname]" },
- new string[2] { targetCharacter.Name, targetCharacter.CurrentHull.DisplayName }, new bool[2] { false, true }),
- null, 1.0f, "foundunconscioustarget" + targetCharacter.Name, 60.0f);
+ {
+ character.Speak(TextManager.Get("DialogFoundUnconsciousTarget")
+ .Replace("[targetname]", targetCharacter.Name).Replace("[roomname]", targetCharacter.CurrentHull.DisplayName),
+ null, 1.0f,
+ "foundunconscioustarget" + targetCharacter.Name, 60.0f);
// Go to the target and select it
if (!character.CanInteractWith(targetCharacter))
@@ -112,10 +113,11 @@ namespace Barotrauma
{
// We can start applying treatment
if (character.SelectedCharacter != targetCharacter)
- {
- character.Speak(TextManager.GetWithVariables("DialogFoundWoundedTarget", new string[2] { "[targetname]", "[roomname]" },
- new string[2] { targetCharacter.Name, targetCharacter.CurrentHull.DisplayName }, new bool[2] { false, true }),
- null, 1.0f, "foundwoundedtarget" + targetCharacter.Name, 60.0f);
+ {
+ character.Speak(TextManager.Get("DialogFoundWoundedTarget")
+ .Replace("[targetname]", targetCharacter.Name).Replace("[roomname]", targetCharacter.CurrentHull.DisplayName),
+ null, 1.0f,
+ "foundwoundedtarget" + targetCharacter.Name, 60.0f);
character.SelectCharacter(targetCharacter);
}
@@ -189,10 +191,9 @@ namespace Barotrauma
{
itemListStr = string.Join(" or ", string.Join(", ", itemNameList.Take(itemNameList.Count - 1)), itemNameList.Last());
}
-
-
- character.Speak(TextManager.GetWithVariables("DialogListRequiredTreatments", new string[2] { "[targetname]", "[treatmentlist]" },
- new string[2] { targetCharacter.Name, itemListStr }, new bool[2] { false, true }),
+ character.Speak(TextManager.Get("DialogListRequiredTreatments")
+ .Replace("[targetname]", targetCharacter.Name)
+ .Replace("[treatmentlist]", itemListStr),
null, 2.0f, "listrequiredtreatments" + targetCharacter.Name, 60.0f);
}
character.DeselectCharacter();
@@ -234,8 +235,8 @@ namespace Barotrauma
bool isCompleted = targetCharacter.Bleeding <= 0 && targetCharacter.Vitality / targetCharacter.MaxVitality > AIObjectiveRescueAll.GetVitalityThreshold(objectiveManager);
if (isCompleted)
- {
- character.Speak(TextManager.GetWithVariable("DialogTargetHealed", "[targetname]", targetCharacter.Name),
+ {
+ character.Speak(TextManager.Get("DialogTargetHealed").Replace("[targetname]", targetCharacter.Name),
null, 1.0f, "targethealed" + targetCharacter.Name, 60.0f);
}
return isCompleted || targetCharacter.IsDead;
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Order.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Order.cs
index 202310ced..6391147f5 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Order.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Order.cs
@@ -171,12 +171,12 @@ namespace Barotrauma
string messageTag = (givingOrderToSelf && !TargetAllCharacters ? "OrderDialogSelf." : "OrderDialog.") + AITag;
if (!string.IsNullOrEmpty(orderOption)) messageTag += "." + orderOption;
- if (targetCharacterName == null) targetCharacterName = "";
- if (targetRoomName == null) targetRoomName = "";
- string msg = TextManager.GetWithVariables(messageTag, new string[2] { "[name]", "[roomname]" }, new string[2] { targetCharacterName, targetRoomName }, new bool[2] { false, true });
+ string msg = TextManager.Get(messageTag, true);
if (msg == null) return "";
- return msg;
+ if (targetCharacterName == null) targetCharacterName = "";
+ if (targetRoomName == null) targetRoomName = "";
+ return msg.Replace("[name]", targetCharacterName).Replace("[roomname]", targetRoomName);
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Params/Ragdoll/RagdollParams.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Params/Ragdoll/RagdollParams.cs
index cec8bfc44..0ca685008 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Params/Ragdoll/RagdollParams.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Params/Ragdoll/RagdollParams.cs
@@ -36,8 +36,7 @@ namespace Barotrauma
[Serialize(1.0f, true), Editable(MIN_SCALE, MAX_SCALE, DecimalCount = 3)]
public float JointScale { get; set; }
- // Don't show in the editor, because shouldn't be edited in runtime. Requires that the limb scale and the collider sizes are adjusted. TODO: automatize.
- [Serialize(1f, false)]
+ [Serialize(1f, true), Editable(DecimalCount = 2)]
public float TextureScale { get; set; }
[Serialize(45f, true), Editable(0f, 1000f)]
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs
index 52d84e829..a33207b92 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs
@@ -17,12 +17,6 @@ namespace Barotrauma
{
public abstract RagdollParams RagdollParams { get; protected set; }
- const float ImpactDamageMultiplayer = 10.0f;
- ///
- /// Maximum damage per impact (0.1 = 10% of the character's maximum health)
- ///
- const float MaxImpactDamage = 0.1f;
-
private static List list = new List();
protected Hull currentHull;
@@ -694,10 +688,8 @@ namespace Barotrauma
Vector2 impactPos = ConvertUnits.ToDisplayUnits(points[0]);
if (character.Submarine != null) impactPos += character.Submarine.Position;
- float impactDamage = Math.Min((impact - ImpactTolerance) * ImpactDamageMultiplayer, character.MaxVitality * MaxImpactDamage);
-
character.LastDamageSource = null;
- character.AddDamage(impactPos, new List() { AfflictionPrefab.InternalDamage.Instantiate(impactDamage) }, 0.0f, true);
+ character.AddDamage(impactPos, new List() { AfflictionPrefab.InternalDamage.Instantiate((impact - ImpactTolerance) * 10.0f) }, 0.0f, true);
strongestImpact = Math.Max(strongestImpact, impact - ImpactTolerance);
character.ApplyStatusEffects(ActionType.OnImpact, 1.0f);
//briefly disable impact damage
@@ -1311,6 +1303,13 @@ namespace Barotrauma
}
}
}
+ foreach (Limb limb in Limbs)
+ {
+ limb.body.SetTransform(Collider.SimPosition, 0.0f);
+ limb.body.ResetDynamics();
+ }
+ SetInitialLimbPositions();
+ return false;
}
UpdateProjSpecific(deltaTime);
}
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Health/Afflictions/AfflictionHusk.cs b/Barotrauma/BarotraumaShared/Source/Characters/Health/Afflictions/AfflictionHusk.cs
index 234203834..db7d465b2 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/Health/Afflictions/AfflictionHusk.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/Health/Afflictions/AfflictionHusk.cs
@@ -217,16 +217,7 @@ namespace Barotrauma
limb.body.AngularVelocity = matchingLimb.body.AngularVelocity;
}
}
-
- if (character.Inventory.Items.Length != husk.Inventory.Items.Length)
- {
- string errorMsg = "Failed to move items from a human's inventory into a humanhusk's inventory (inventory sizes don't match)";
- DebugConsole.ThrowError(errorMsg);
- GameAnalyticsManager.AddErrorEventOnce("AfflictionHusk.CreateAIHusk:InventoryMismatch", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg);
- yield return CoroutineStatus.Success;
- }
-
- for (int i = 0; i < character.Inventory.Items.Length && i < husk.Inventory.Items.Length; i++)
+ for (int i = 0; i < character.Inventory.Items.Length; i++)
{
if (character.Inventory.Items[i] == null) continue;
husk.Inventory.TryPutItem(character.Inventory.Items[i], i, true, false, null);
diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs
index 6425a776e..4f5769f34 100644
--- a/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs
+++ b/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs
@@ -232,13 +232,13 @@ namespace Barotrauma
}
private LimbHealth GetMatchingLimbHealth(Limb limb) => limbHealths[limb.HealthIndex];
- private LimbHealth GetMatchingLimbHealth(Affliction affliction) => GetMatchingLimbHealth(Character.AnimController.GetLimb(affliction.Prefab.IndicatorLimb));
+ private LimbHealth GetMathingLimbHealth(Affliction affliction) => GetMatchingLimbHealth(Character.AnimController.GetLimb(affliction.Prefab.IndicatorLimb));
///
/// Returns the limb afflictions and non-limbspecific afflictions that are set to be displayed on this limb.
///
private IEnumerable GetMatchingAfflictions(LimbHealth limb, Func predicate)
- => limb.Afflictions.Where(predicate).Union(afflictions.Where(a => predicate(a) && GetMatchingLimbHealth(a) == limb));
+ => limb.Afflictions.Where(predicate).Union(afflictions.Where(a => predicate(a) && GetMathingLimbHealth(a) == limb));
public Affliction GetAffliction(string afflictionType, bool allowLimbAfflictions = true)
{
diff --git a/Barotrauma/BarotraumaShared/Source/GameSession/CargoManager.cs b/Barotrauma/BarotraumaShared/Source/GameSession/CargoManager.cs
index 03c92e52e..271dd6dc1 100644
--- a/Barotrauma/BarotraumaShared/Source/GameSession/CargoManager.cs
+++ b/Barotrauma/BarotraumaShared/Source/GameSession/CargoManager.cs
@@ -108,7 +108,7 @@ namespace Barotrauma
}
#if CLIENT
- new GUIMessageBox("", TextManager.GetWithVariable("CargoSpawnNotification", "[roomname]", cargoRoom.DisplayName, true));
+ new GUIMessageBox("", TextManager.Get("CargoSpawnNotification").Replace("[roomname]", cargoRoom.DisplayName));
#endif
Dictionary availableContainers = new Dictionary();
diff --git a/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/CampaignMode.cs
index 3ddd11311..d0cd28725 100644
--- a/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/CampaignMode.cs
+++ b/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/CampaignMode.cs
@@ -193,7 +193,7 @@ namespace Barotrauma
character.TeamID = Character.TeamType.FriendlyNPC;
character.SetCustomInteract(
WatchmanInteract,
- hudText: TextManager.GetWithVariable("TalkHint", "[key]", GameMain.Config.KeyBind(InputType.Select).ToString()));
+ hudText: TextManager.Get("TalkHint").Replace("[key]", GameMain.Config.KeyBind(InputType.Select).ToString()));
}
protected abstract void WatchmanInteract(Character watchman, Character interactor);
diff --git a/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs
index 7a47bff0e..32e255691 100644
--- a/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs
+++ b/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs
@@ -159,14 +159,8 @@ namespace Barotrauma
public void StartRound(Level level, bool reloadSub = true, bool loadSecondSub = false, bool mirrorLevel = false)
{
#if CLIENT
- if (GameMain.Client == null)
- {
- GameMain.LightManager.LosMode = GameMain.Config.LosMode;
- }
- else
- {
- GameMain.LightManager.LosEnabled = GameMain.Client.CharacterInfo != null;
- }
+ GameMain.LightManager.LosEnabled = GameMain.Client == null || GameMain.Client.CharacterInfo != null;
+ if (GameMain.Client == null) GameMain.LightManager.LosMode = GameMain.Config.LosMode;
#endif
this.Level = level;
diff --git a/Barotrauma/BarotraumaShared/Source/GameSettings.cs b/Barotrauma/BarotraumaShared/Source/GameSettings.cs
index 26313251a..0b3f91c9a 100644
--- a/Barotrauma/BarotraumaShared/Source/GameSettings.cs
+++ b/Barotrauma/BarotraumaShared/Source/GameSettings.cs
@@ -569,12 +569,14 @@ namespace Barotrauma
//to make sure the package that contains text files has been loaded before we attempt to use TextManager
foreach (string missingPackagePath in missingPackagePaths)
{
- DebugConsole.ThrowError(TextManager.GetWithVariable("ContentPackageNotFound", "[packagepath]", missingPackagePath));
+ DebugConsole.ThrowError(TextManager.Get("ContentPackageNotFound").Replace("[packagepath]", missingPackagePath));
}
foreach (ContentPackage incompatiblePackage in incompatiblePackages)
{
- DebugConsole.ThrowError(TextManager.GetWithVariables(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage",
- new string[3] { "[packagename]", "[packageversion]", "[gameversion]" }, new string[3] { incompatiblePackage.Name, incompatiblePackage.GameVersion.ToString(), GameMain.Version.ToString() }));
+ DebugConsole.ThrowError(TextManager.Get(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage")
+ .Replace("[packagename]", incompatiblePackage.Name)
+ .Replace("[packageversion]", incompatiblePackage.GameVersion.ToString())
+ .Replace("[gameversion]", GameMain.Version.ToString()));
}
foreach (ContentPackage contentPackage in SelectedContentPackages)
{
@@ -953,12 +955,14 @@ namespace Barotrauma
//to make sure the package that contains text files has been loaded before we attempt to use TextManager
foreach (string missingPackagePath in missingPackagePaths)
{
- DebugConsole.ThrowError(TextManager.GetWithVariable("ContentPackageNotFound", "[packagepath]", missingPackagePath));
+ DebugConsole.ThrowError(TextManager.Get("ContentPackageNotFound").Replace("[packagepath]", missingPackagePath));
}
foreach (ContentPackage incompatiblePackage in incompatiblePackages)
{
- DebugConsole.ThrowError(TextManager.GetWithVariables(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage",
- new string[3] { "[packagename]", "[packageversion]", "[gameversion]" }, new string[3] { incompatiblePackage.Name, incompatiblePackage.GameVersion.ToString(), GameMain.Version.ToString() }));
+ DebugConsole.ThrowError(TextManager.Get(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage")
+ .Replace("[packagename]", incompatiblePackage.Name)
+ .Replace("[packageversion]", incompatiblePackage.GameVersion.ToString())
+ .Replace("[gameversion]", GameMain.Version.ToString()));
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs
index 681f74534..e39877bdb 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs
@@ -40,9 +40,6 @@ namespace Barotrauma.Items.Components
[Serialize(false, false)]
public bool RepairThroughWalls { get; set; }
- [Serialize(false, false)]
- public bool RepairMultiple { get; set; }
-
public Vector2 TransformedBarrelPos
{
get
@@ -161,22 +158,12 @@ namespace Barotrauma.Items.Components
private void Repair(Vector2 rayStart, Vector2 rayEnd, float deltaTime, Character user, float degreeOfSuccess, List ignoredBodies)
{
var collisionCategories = Physics.CollisionWall | Physics.CollisionCharacter | Physics.CollisionItem | Physics.CollisionLevel | Physics.CollisionRepair;
- if (RepairMultiple)
+ if (RepairThroughWalls)
{
var bodies = Submarine.PickBodies(rayStart, rayEnd, ignoredBodies, collisionCategories, ignoreSensors: false, allowInsideFixture: true);
- Type lastHitType = null;
foreach (Body body in bodies)
{
- Type bodyType = body.UserData?.GetType();
- if (!RepairThroughWalls && bodyType != null && bodyType != lastHitType)
- {
- //stop the ray if it already hit a door/wall and is now about to hit some other type of entity
- if (lastHitType == typeof(Item) || lastHitType == typeof(Structure)) { break; }
- }
- if (FixBody(user, deltaTime, degreeOfSuccess, body))
- {
- if (bodyType != null) { lastHitType = bodyType; }
- }
+ FixBody(user, deltaTime, degreeOfSuccess, body);
}
}
else
@@ -215,19 +202,19 @@ namespace Barotrauma.Items.Components
}
}
- private bool FixBody(Character user, float deltaTime, float degreeOfSuccess, Body targetBody)
+ private void FixBody(Character user, float deltaTime, float degreeOfSuccess, Body targetBody)
{
- if (targetBody?.UserData == null) { return false; }
+ if (targetBody?.UserData == null) { return; }
pickedPosition = Submarine.LastPickedPosition;
if (targetBody.UserData is Structure targetStructure)
{
- if (!fixableEntities.Contains("structure") && !fixableEntities.Contains(targetStructure.Prefab.Identifier)) { return false; }
- if (targetStructure.IsPlatform) { return false; }
+ if (!fixableEntities.Contains("structure") && !fixableEntities.Contains(targetStructure.Prefab.Identifier)) return;
+ if (targetStructure.IsPlatform) return;
int sectionIndex = targetStructure.FindSectionIndex(ConvertUnits.ToDisplayUnits(pickedPosition));
- if (sectionIndex < 0) { return false; }
+ if (sectionIndex < 0) return;
FixStructureProjSpecific(user, deltaTime, targetStructure, sectionIndex);
targetStructure.AddDamage(sectionIndex, -StructureFixAmount * degreeOfSuccess, user);
@@ -252,14 +239,12 @@ namespace Barotrauma.Items.Components
targetCharacter.LastDamageSource = item;
ApplyStatusEffectsOnTarget(user, deltaTime, ActionType.OnUse, new List() { targetCharacter });
FixCharacterProjSpecific(user, deltaTime, targetCharacter);
- return true;
}
else if (targetBody.UserData is Limb targetLimb)
{
targetLimb.character.LastDamageSource = item;
ApplyStatusEffectsOnTarget(user, deltaTime, ActionType.OnUse, new List() { targetLimb.character, targetLimb });
FixCharacterProjSpecific(user, deltaTime, targetLimb.character);
- return true;
}
else if (targetBody.UserData is Item targetItem)
{
@@ -284,7 +269,6 @@ namespace Barotrauma.Items.Components
#endif
}
FixItemProjSpecific(user, deltaTime, targetItem, prevCondition);
- return true;
}
return false;
}
@@ -396,12 +380,11 @@ namespace Barotrauma.Items.Components
sinTime = 0;
if (!leak.FlowTargetHull.ConnectedGaps.Any(g => !g.IsRoomToRoom && g.Open > 0.0f))
{
-
- character.Speak(TextManager.GetWithVariable("DialogLeaksFixed", "[roomname]", leak.FlowTargetHull.DisplayName, true), null, 0.0f, "leaksfixed", 10.0f);
+ character.Speak(TextManager.Get("DialogLeaksFixed").Replace("[roomname]", leak.FlowTargetHull.DisplayName), null, 0.0f, "leaksfixed", 10.0f);
}
else
{
- character.Speak(TextManager.GetWithVariable("DialogLeakFixed", "[roomname]", leak.FlowTargetHull.DisplayName, true), null, 0.0f, "leakfixed", 10.0f);
+ character.Speak(TextManager.Get("DialogLeakFixed").Replace("[roomname]", leak.FlowTargetHull.DisplayName), null, 0.0f, "leakfixed", 10.0f);
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Sonar.cs
index 539ba0aac..c18e1ad02 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Sonar.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Sonar.cs
@@ -219,10 +219,8 @@ namespace Barotrauma.Items.Components
{
dialogTag = "DialogSonarTargetLarge";
}
-
- character.Speak(TextManager.GetWithVariables(dialogTag, new string[2] { "[direction]", "[count]" },
- new string[2] { targetGroup.Key.ToString(), targetGroup.Value.Count.ToString() },
- new bool[2] { true, false }), null, 0, "sonartarget" + targetGroup.Value[0].ID, 30);
+ character.Speak(TextManager.Get(dialogTag).Replace("[direction]", targetGroup.Key).Replace("[count]", targetGroup.Value.Count.ToString()),
+ null, 0, "sonartarget" + targetGroup.Value[0].ID, 30);
//prevent the character from reporting other targets in the group
for (int i = 1; i < targetGroup.Value.Count; i++)
@@ -241,7 +239,7 @@ namespace Barotrauma.Items.Components
int clockDir = (int)Math.Round((angle / MathHelper.TwoPi) * 12);
if (clockDir == 0) clockDir = 12;
- return TextManager.GetWithVariable("roomname.subdiroclock", "[dir]", clockDir.ToString());
+ return TextManager.Get("roomname.subdiroclock").Replace("[dir]", clockDir.ToString());
}
private Vector2 GetTransducerPos()
diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Power/PowerContainer.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Power/PowerContainer.cs
index f74e81242..f411cf341 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/Components/Power/PowerContainer.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Power/PowerContainer.cs
@@ -244,10 +244,9 @@ namespace Barotrauma.Items.Components
#if CLIENT
rechargeSpeedSlider.BarScroll = RechargeSpeed / Math.Max(maxRechargeSpeed, 1.0f);
#endif
-
- character.Speak(TextManager.GetWithVariables("DialogChargeBatteries", new string[2] { "[itemname]", "[rate]" },
- new string[2] { item.Name, ((int)(rechargeSpeed / maxRechargeSpeed * 100.0f)).ToString() },
- new bool[2] { true, false }), null, 1.0f, "chargebattery", 10.0f);
+ character.Speak(TextManager.Get("DialogChargeBatteries")
+ .Replace("[itemname]", item.Name)
+ .Replace("[rate]", ((int)(rechargeSpeed / maxRechargeSpeed * 100.0f)).ToString()), null, 1.0f, "chargebattery", 10.0f);
}
}
else
@@ -261,9 +260,9 @@ namespace Barotrauma.Items.Components
#if CLIENT
rechargeSpeedSlider.BarScroll = RechargeSpeed / Math.Max(maxRechargeSpeed, 1.0f);
#endif
- character.Speak(TextManager.GetWithVariables("DialogStopChargingBatteries", new string[2] { "[itemname]", "[rate]" },
- new string[2] { item.Name, ((int)(rechargeSpeed / maxRechargeSpeed * 100.0f)).ToString() },
- new bool[2] { true, false }), null, 1.0f, "chargebattery", 10.0f);
+ character.Speak(TextManager.Get("DialogStopChargingBatteries")
+ .Replace("[itemname]", item.Name)
+ .Replace("[rate]", ((int)(rechargeSpeed / maxRechargeSpeed * 100.0f)).ToString()), null, 1.0f, "chargebattery", 10.0f);
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Turret.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Turret.cs
index e839e8c8b..b8b1ce152 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/Components/Turret.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Turret.cs
@@ -459,7 +459,7 @@ namespace Barotrauma.Items.Components
}
var containShellObjective = new AIObjectiveContainItem(character, container.ContainableItems[0].Identifiers[0], container, objective.objectiveManager);
- character?.Speak(TextManager.GetWithVariable("DialogLoadTurret", "[itemname]", item.Name, true), null, 0.0f, "loadturret", 30.0f);
+ character?.Speak(TextManager.Get("DialogLoadTurret").Replace("[itemname]", item.Name), null, 0.0f, "loadturret", 30.0f);
containShellObjective.targetItemCount = usableProjectileCount + 1;
containShellObjective.ignoredContainerIdentifiers = new string[] { containerItem.prefab.Identifier };
objective.AddSubObjective(containShellObjective);
@@ -506,7 +506,7 @@ namespace Barotrauma.Items.Components
if (objective.Option.ToLowerInvariant() == "fireatwill")
{
- character?.Speak(TextManager.GetWithVariable("DialogFireTurret", "[itemname]", item.Name, true), null, 0.0f, "fireturret", 5.0f);
+ character?.Speak(TextManager.Get("DialogFireTurret").Replace("[itemname]", item.Name), null, 0.0f, "fireturret", 5.0f);
character.SetInput(InputType.Shoot, true, true);
}
diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs
index 752d3df85..da2ae77e2 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs
@@ -1539,8 +1539,9 @@ namespace Barotrauma
{
if (requiredSkill != null)
{
- GUI.AddMessage(TextManager.GetWithVariables("InsufficientSkills", new string[2] { "[requiredskill]", "[requiredlevel]" },
- new string[2] { TextManager.Get("SkillName." + requiredSkill.Identifier), ((int)requiredSkill.Level).ToString() }, new bool[2] { true, false }), Color.Red);
+ GUI.AddMessage(TextManager.Get("InsufficientSkills")
+ .Replace("[requiredskill]", TextManager.Get("SkillName." + requiredSkill.Identifier))
+ .Replace("[requiredlevel]", ((int)requiredSkill.Level).ToString()), Color.Red);
}
}
#endif
@@ -2032,8 +2033,8 @@ namespace Barotrauma
XElement element = new XElement("Item");
element.Add(
- new XAttribute("name", Prefab.OriginalName),
- new XAttribute("identifier", Prefab.Identifier),
+ new XAttribute("name", prefab.Name),
+ new XAttribute("identifier", prefab.Identifier),
new XAttribute("ID", ID));
if (FlippedX) element.Add(new XAttribute("flippedx", true));
diff --git a/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs
index 39c924710..15f3074a6 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs
@@ -145,11 +145,6 @@ namespace Barotrauma
private List fabricationRecipeElements = new List();
- ///
- /// Original, non-translated name as defined in the xml
- ///
- public readonly string OriginalName;
-
public string ConfigFile
{
get { return configFile; }
@@ -445,7 +440,7 @@ namespace Barotrauma
configFile = filePath;
ConfigElement = element;
- OriginalName = element.GetAttributeString("name", "");
+ string nonTranslatedName = element.GetAttributeString("name", "");
identifier = element.GetAttributeString("identifier", "");
//nameidentifier can be used to make multiple items use the same names and descriptions
@@ -453,11 +448,11 @@ namespace Barotrauma
if (string.IsNullOrEmpty(nameIdentifier))
{
- name = TextManager.Get("EntityName." + identifier, true) ?? OriginalName;
+ name = TextManager.Get("EntityName." + identifier, true) ?? nonTranslatedName;
}
else
{
- name = TextManager.Get("EntityName." + nameIdentifier, true) ?? OriginalName;
+ name = TextManager.Get("EntityName." + nameIdentifier, true) ?? nonTranslatedName;
}
if (name == "") { DebugConsole.ThrowError("Unnamed item in " + filePath + "!"); }
@@ -467,7 +462,7 @@ namespace Barotrauma
Aliases = new HashSet
(element.GetAttributeStringArray("aliases", null, convertToLowerInvariant: true) ??
element.GetAttributeStringArray("Aliases", new string[0], convertToLowerInvariant: true));
- Aliases.Add(OriginalName.ToLowerInvariant());
+ Aliases.Add(nonTranslatedName.ToLowerInvariant());
if (!Enum.TryParse(element.GetAttributeString("category", "Misc"), true, out MapEntityCategory category))
{
diff --git a/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs b/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs
index 2cb8f3192..f9620770f 100644
--- a/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs
+++ b/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs
@@ -730,15 +730,7 @@ namespace Barotrauma
return closestBody;
}
- private static readonly Dictionary bodyDist = new Dictionary();
- private static readonly List bodies = new List();
-
- ///
- /// Returns a list of physics bodies the ray intersects with, sorted according to distance (the closest body is at the beginning of the list).
- ///
- /// Can be used to filter the bodies based on some condition. If the predicate returns false, the body isignored.
- /// Should fixtures that the start of the ray is inside be returned
- public static IEnumerable PickBodies(Vector2 rayStart, Vector2 rayEnd, IEnumerable ignoredBodies = null, Category? collisionCategory = null, bool ignoreSensors = true, Predicate customPredicate = null, bool allowInsideFixture = false)
+ public static List PickBodies(Vector2 rayStart, Vector2 rayEnd, IEnumerable ignoredBodies = null, Category? collisionCategory = null, bool ignoreSensors = true, Predicate customPredicate = null, bool allowInsideFixture = false)
{
if (Vector2.DistanceSquared(rayStart, rayEnd) < 0.00001f)
{
@@ -746,25 +738,20 @@ namespace Barotrauma
}
float closestFraction = 1.0f;
- bodies.Clear();
- bodyDist.Clear();
+ List bodies = new List();
GameMain.World.RayCast((fixture, point, normal, fraction) =>
{
if (!CheckFixtureCollision(fixture, ignoredBodies, collisionCategory, ignoreSensors, customPredicate)) { return -1; }
- if (fixture.Body != null)
- {
- bodies.Add(fixture.Body);
- bodyDist[fixture.Body] = fraction;
- }
+ if (fixture.Body != null) { bodies.Add(fixture.Body); }
if (fraction < closestFraction)
{
lastPickedPosition = rayStart + (rayEnd - rayStart) * fraction;
lastPickedFraction = fraction;
lastPickedNormal = normal;
}
- //continue
- return -1;
+
+ return fraction;
}, rayStart, rayEnd);
if (allowInsideFixture)
@@ -783,12 +770,10 @@ namespace Barotrauma
lastPickedFraction = 0.0f;
lastPickedNormal = Vector2.Normalize(rayEnd - rayStart);
bodies.Add(fixture.Body);
- bodyDist[fixture.Body] = 0.0f;
return false;
}, ref aabb);
}
- bodies.Sort((b1, b2) => { return bodyDist[b1].CompareTo(bodyDist[b2]); });
return bodies;
}
diff --git a/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs b/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs
index 01ccc1c0e..5dd5f1546 100644
--- a/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs
+++ b/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs
@@ -656,7 +656,7 @@ namespace Barotrauma.Networking
private set;
} = new List>();
- private void InitMonstersEnabled()
+ public void ReadMonsterEnabled(NetBuffer inc)
{
//monster spawn settings
if (MonsterEnabled == null)
@@ -673,11 +673,7 @@ namespace Barotrauma.Networking
if (!MonsterEnabled.ContainsKey(s)) MonsterEnabled.Add(s, true);
}
}
- }
- public void ReadMonsterEnabled(NetBuffer inc)
- {
- InitMonstersEnabled();
List monsterNames = MonsterEnabled.Keys.ToList();
foreach (string s in monsterNames)
{
@@ -685,7 +681,7 @@ namespace Barotrauma.Networking
}
inc.ReadPadBits();
}
-
+
public void WriteMonsterEnabled(NetBuffer msg, Dictionary monsterEnabled = null)
{
//monster spawn settings
@@ -707,17 +703,13 @@ namespace Barotrauma.Networking
Dictionary extraCargo = new Dictionary();
for (int i = 0; i < count; i++)
{
- string prefabIdentifier = msg.ReadString();
string prefabName = msg.ReadString();
byte amount = msg.ReadByte();
-
- var itemPrefab = string.IsNullOrEmpty(prefabIdentifier) ?
- MapEntityPrefab.Find(prefabName, null, showErrorMessages: false) as ItemPrefab :
- MapEntityPrefab.Find(prefabName, prefabIdentifier, showErrorMessages: false) as ItemPrefab;
- if (itemPrefab != null && amount > 0)
+ ItemPrefab ip = MapEntityPrefab.List.Find(p => p is ItemPrefab && p.Name.Equals(prefabName, StringComparison.InvariantCulture)) as ItemPrefab;
+ if (ip != null && amount > 0)
{
- if (changed || !ExtraCargo.ContainsKey(itemPrefab) || ExtraCargo[itemPrefab] != amount) changed = true;
- extraCargo.Add(itemPrefab, amount);
+ if (changed || !ExtraCargo.ContainsKey(ip) || ExtraCargo[ip] != amount) changed = true;
+ extraCargo.Add(ip, amount);
}
}
if (changed) ExtraCargo = extraCargo;
@@ -735,9 +727,7 @@ namespace Barotrauma.Networking
msg.Write((UInt32)ExtraCargo.Count);
foreach (KeyValuePair kvp in ExtraCargo)
{
- msg.Write(kvp.Key.Identifier ?? "");
- msg.Write(kvp.Key.OriginalName ?? "");
- msg.Write((byte)kvp.Value);
+ msg.Write(kvp.Key.Name); msg.Write((byte)kvp.Value);
}
}
}
diff --git a/Barotrauma/BarotraumaShared/Source/TextManager.cs b/Barotrauma/BarotraumaShared/Source/TextManager.cs
index 5091040a0..60ff00a43 100644
--- a/Barotrauma/BarotraumaShared/Source/TextManager.cs
+++ b/Barotrauma/BarotraumaShared/Source/TextManager.cs
@@ -176,107 +176,6 @@ namespace Barotrauma
}
}
- public static string GetWithVariables(string textTag, string[] variableTags, string[] variableValues, bool[] formatCapitals = null, bool returnNull = false, string fallBackTag = null)
- {
- string text = Get(textTag, returnNull, fallBackTag);
-
- if (text == null || text.Length == 0 || variableTags.Length != variableValues.Length)
- {
-#if DEBUG
- if (variableTags.Length != variableValues.Length)
- {
- DebugConsole.ThrowError("variableTags.Length and variableValues.Length do not match for \"" + textTag + "\".");
- }
-
- if (formatCapitals != null && formatCapitals.Length != variableTags.Length)
- {
- DebugConsole.ThrowError("variableTags.Length and formatCapitals.Length do not match for \"" + textTag + "\".");
- }
-#endif
- if (returnNull)
- {
- return null;
- }
- else
- {
- return textTag;
- }
- }
-
- if (formatCapitals != null && !GameMain.Config.Language.Contains("Chinese"))
- {
- for (int i = 0; i < variableTags.Length; i++)
- {
- if (formatCapitals[i])
- {
- variableValues[i] = HandleVariableCapitalization(text, variableTags[i], variableValues[i]);
- }
- }
- }
-
- for (int i = 0; i < variableTags.Length; i++)
- {
- text = text.Replace(variableTags[i], variableValues[i]);
- }
-
- return text;
- }
-
- public static string GetWithVariable(string textTag, string variableTag, string variableValue, bool formatCapitals = false, bool returnNull = false, string fallBackTag = null)
- {
- string text = Get(textTag, returnNull, fallBackTag);
-
- if (text == null || text.Length == 0)
- {
- if (returnNull)
- {
- return null;
- }
- else
- {
- return textTag;
- }
- }
-
- if (formatCapitals && !GameMain.Config.Language.Contains("Chinese"))
- {
- variableValue = HandleVariableCapitalization(text, variableTag, variableValue);
- }
-
- return text.Replace(variableTag, variableValue);
- }
-
- private static string HandleVariableCapitalization(string text, string variableTag, string variableValue)
- {
- int index = text.IndexOf(variableTag) - 1;
- if (index == -1)
- {
- return variableValue;
- }
-
- for (int i = index; i >= 0; i--)
- {
- if (text[i] == ' ')
- {
- continue;
- }
- else
- {
- if (text[i] != '.')
- {
- variableValue = variableValue.ToLower();
- }
- else
- {
- variableValue = Capitalize(variableValue);
- break;
- }
- }
- }
-
- return variableValue;
- }
-
public static string ParseInputTypes(string text)
{
foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
diff --git a/Barotrauma/BarotraumaShared/Submarines/Remora.sub b/Barotrauma/BarotraumaShared/Submarines/Remora.sub
index 26d37bd22..6e3afa65c 100644
Binary files a/Barotrauma/BarotraumaShared/Submarines/Remora.sub and b/Barotrauma/BarotraumaShared/Submarines/Remora.sub differ
diff --git a/Barotrauma/BarotraumaShared/Submarines/RemoraDrone.sub b/Barotrauma/BarotraumaShared/Submarines/RemoraDrone.sub
index 49ade4d29..ec48ad330 100644
Binary files a/Barotrauma/BarotraumaShared/Submarines/RemoraDrone.sub and b/Barotrauma/BarotraumaShared/Submarines/RemoraDrone.sub differ
diff --git a/Barotrauma/BarotraumaShared/changelog.txt b/Barotrauma/BarotraumaShared/changelog.txt
index 745a25aea..66313a114 100644
--- a/Barotrauma/BarotraumaShared/changelog.txt
+++ b/Barotrauma/BarotraumaShared/changelog.txt
@@ -1,35 +1,3 @@
----------------------------------------------------------------------------------------------------------
-v0.9.0.4
----------------------------------------------------------------------------------------------------------
-
-- Fixed "Steam authentication failed" errors when trying to reconnect to a server after cancelling the
-connection.
-- Fixed clients occasionally failing to spawn items when playing using a different language than the server,
-which caused them to get kicked.
-- Fixed extra cargo failing to spawn in multiplayer when playing using a different language than the server.
-- Fixed legacy items failing to load if a sub is saved with a language other than English and the language
-then changed to something else.
-- Fixed excessively small password input box when connecting to servers.
-- Fixed a bug that occasionally caused items to drop from the inventory when moving items between
-inventory slots in the multiplayer.
-- Prevent junction boxes from getting damaged due to overvoltage in the engineering tutorial.
-- Fixed structures getting scaled incorrectly when cloning a structure with a non-default scale in the
-submarine editor.
-- Fixed occasional crashes when leaving a multiplayer session while the "cinematic" at the end of the round
-is still playing.
-- Fixed items not being moved to the humanhusk's inventory when a huskified player dies (= clothes and
-other gear seemed to magically disappear when the character "resurrected" as an AI husk).
-- Fixed clients not seeing turrets rotating at their end when another client is operating the turret.
-- Fixed hitscan projectiles (revolver rounds) going through walls if the weapon is fired while its
-barrel is partially inside the wall.
-- Fixed welding tools being able to weld doors and burn characters through walls.
-- Fixed bots reporting leaks when there are holes in the interior walls.
-- Fixes to the colliders of some of the shuttle wall pieces.
-- Fixed Linux version crashing when attempting to browse for files in the Steam Workshop menu.
-- Fixed credits not resizing when resolution is changed.
-- Added an upper limit to impact damage done to ragdolls, preventing characters from getting instakilled if
-a Moloch or another large monster smashes against the sub hard enough.
-
---------------------------------------------------------------------------------------------------------
v0.9.0.3
---------------------------------------------------------------------------------------------------------