Build 0.20.6.0
This commit is contained in:
@@ -42,7 +42,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (sound != null)
|
if (sound != null)
|
||||||
{
|
{
|
||||||
SoundPlayer.PlaySound(sound.Sound, worldPosition, sound.Volume, sound.Range, ignoreMuffling: sound.IgnoreMuffling);
|
SoundPlayer.PlaySound(sound.Sound, worldPosition, sound.Volume, sound.Range, ignoreMuffling: sound.IgnoreMuffling, freqMult: sound.GetRandomFrequencyMultiplier());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,12 +32,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public static Sprite DamageOverlay => DamageOverlayPrefab.Prefabs.ActivePrefab.DamageOverlay;
|
public static Sprite DamageOverlay => DamageOverlayPrefab.Prefabs.ActivePrefab.DamageOverlay;
|
||||||
|
|
||||||
private readonly static LocalizedString[] strengthTexts = new LocalizedString[]
|
|
||||||
{
|
|
||||||
TextManager.Get("AfflictionStrengthLow"),
|
|
||||||
TextManager.Get("AfflictionStrengthMedium"),
|
|
||||||
TextManager.Get("AfflictionStrengthHigh")
|
|
||||||
};
|
|
||||||
|
|
||||||
private Point screenResolution;
|
private Point screenResolution;
|
||||||
|
|
||||||
@@ -1065,7 +1059,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private readonly List<Affliction> statusIcons = new List<Affliction>();
|
private readonly List<Affliction> statusIcons = new List<Affliction>();
|
||||||
private readonly Dictionary<AfflictionPrefab, float> statusIconVisibleTime = new Dictionary<AfflictionPrefab, float>();
|
private readonly Dictionary<AfflictionPrefab, float> statusIconVisibleTime = new Dictionary<AfflictionPrefab, float>();
|
||||||
private float hideStatusIconDelay = 5.0f;
|
private const float HideStatusIconDelay = 5.0f;
|
||||||
|
|
||||||
public void UpdateStatusHUD(float deltaTime)
|
public void UpdateStatusHUD(float deltaTime)
|
||||||
{
|
{
|
||||||
@@ -1148,7 +1142,7 @@ namespace Barotrauma
|
|||||||
CanBeFocused = false
|
CanBeFocused = false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (afflictionPrefab.HideIconAfterDelay && statusIconVisibleTime[afflictionPrefab] > hideStatusIconDelay)
|
if (afflictionPrefab.HideIconAfterDelay && statusIconVisibleTime[afflictionPrefab] > HideStatusIconDelay)
|
||||||
{
|
{
|
||||||
matchingIcon.RectTransform.Parent = hiddenAfflictionIconContainer.RectTransform;
|
matchingIcon.RectTransform.Parent = hiddenAfflictionIconContainer.RectTransform;
|
||||||
}
|
}
|
||||||
@@ -1179,6 +1173,7 @@ namespace Barotrauma
|
|||||||
hiddenAfflictionHoverArea = Rectangle.Union(hiddenAfflictionHoverArea, child.Rect);
|
hiddenAfflictionHoverArea = Rectangle.Union(hiddenAfflictionHoverArea, child.Rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
afflictionIconContainer.Visible = true;
|
||||||
hiddenAfflictionIconContainer.Visible =
|
hiddenAfflictionIconContainer.Visible =
|
||||||
showHiddenAfflictionsButton.Rect.Contains(PlayerInput.MousePosition) ||
|
showHiddenAfflictionsButton.Rect.Contains(PlayerInput.MousePosition) ||
|
||||||
(hiddenAfflictionIconContainer.Visible && hiddenAfflictionHoverArea.Contains(PlayerInput.MousePosition));
|
(hiddenAfflictionIconContainer.Visible && hiddenAfflictionHoverArea.Contains(PlayerInput.MousePosition));
|
||||||
@@ -1203,6 +1198,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
afflictionIconContainer.Visible = hiddenAfflictionIconContainer.Visible = false;
|
||||||
if (Vitality > 0.0f)
|
if (Vitality > 0.0f)
|
||||||
{
|
{
|
||||||
float currHealth = healthWindowHealthBar.BarSize;
|
float currHealth = healthWindowHealthBar.BarSize;
|
||||||
@@ -1531,8 +1527,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
Point nameDims = new Point(afflictionName.Rect.Width, (int)(GUIStyle.LargeFont.Size * 1.5f));
|
Point nameDims = new Point(afflictionName.Rect.Width, (int)(GUIStyle.LargeFont.Size * 1.5f));
|
||||||
|
|
||||||
afflictionStrength.Text = strengthTexts[
|
afflictionStrength.Text = affliction.GetStrengthText();
|
||||||
MathHelper.Clamp((int)Math.Floor((affliction.Strength / affliction.Prefab.MaxStrength) * strengthTexts.Length), 0, strengthTexts.Length - 1)];
|
|
||||||
|
|
||||||
Vector2 strengthDims = GUIStyle.SubHeadingFont.MeasureString(afflictionStrength.Text);
|
Vector2 strengthDims = GUIStyle.SubHeadingFont.MeasureString(afflictionStrength.Text);
|
||||||
|
|
||||||
@@ -1662,8 +1657,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
var strengthText = labelContainer.GetChildByUserData("strength") as GUITextBlock;
|
var strengthText = labelContainer.GetChildByUserData("strength") as GUITextBlock;
|
||||||
|
|
||||||
strengthText.Text = strengthTexts[
|
strengthText.Text = affliction.GetStrengthText();
|
||||||
MathHelper.Clamp((int)Math.Floor((affliction.Strength / affliction.Prefab.MaxStrength) * strengthTexts.Length), 0, strengthTexts.Length - 1)];
|
|
||||||
|
|
||||||
strengthText.TextColor = Color.Lerp(GUIStyle.Orange, GUIStyle.Red,
|
strengthText.TextColor = Color.Lerp(GUIStyle.Orange, GUIStyle.Red,
|
||||||
affliction.Strength / affliction.Prefab.MaxStrength);
|
affliction.Strength / affliction.Prefab.MaxStrength);
|
||||||
|
|||||||
@@ -858,9 +858,9 @@ namespace Barotrauma
|
|||||||
|
|
||||||
GUITextBlock prefabBlock = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1f), topTextLayout.RectTransform), prefab.Name, font: GUIStyle.SubHeadingFont);
|
GUITextBlock prefabBlock = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1f), topTextLayout.RectTransform), prefab.Name, font: GUIStyle.SubHeadingFont);
|
||||||
|
|
||||||
Color textColor = Color.Lerp(GUIStyle.Orange, GUIStyle.Red, (int)affliction.AfflictionSeverity / 2f);
|
Color textColor = Color.Lerp(GUIStyle.Orange, GUIStyle.Red, affliction.Strength / affliction.Prefab.MaxStrength);
|
||||||
|
|
||||||
LocalizedString vitalityText = TextManager.GetWithVariable("medicalclinic.vitalitydifference", "[amount]", (-affliction.Strength).ToString());
|
LocalizedString vitalityText = affliction.VitalityDecrease == 0 ? string.Empty : TextManager.GetWithVariable("medicalclinic.vitalitydifference", "[amount]", (-affliction.VitalityDecrease).ToString());
|
||||||
GUITextBlock vitalityBlock = new GUITextBlock(new RectTransform(new Vector2(0.25f, 1f), topTextLayout.RectTransform), vitalityText, textAlignment: Alignment.Center)
|
GUITextBlock vitalityBlock = new GUITextBlock(new RectTransform(new Vector2(0.25f, 1f), topTextLayout.RectTransform), vitalityText, textAlignment: Alignment.Center)
|
||||||
{
|
{
|
||||||
TextColor = textColor,
|
TextColor = textColor,
|
||||||
@@ -869,7 +869,7 @@ namespace Barotrauma
|
|||||||
AutoScaleHorizontal = true
|
AutoScaleHorizontal = true
|
||||||
};
|
};
|
||||||
|
|
||||||
LocalizedString severityText = TextManager.Get($"AfflictionStrength{affliction.AfflictionSeverity}");
|
LocalizedString severityText = Affliction.GetStrengthText(affliction.Strength, affliction.Prefab.MaxStrength);
|
||||||
GUITextBlock severityBlock = new GUITextBlock(new RectTransform(new Vector2(0.25f, 1f), topTextLayout.RectTransform), severityText, textAlignment: Alignment.Center, font: GUIStyle.SubHeadingFont)
|
GUITextBlock severityBlock = new GUITextBlock(new RectTransform(new Vector2(0.25f, 1f), topTextLayout.RectTransform), severityText, textAlignment: Alignment.Center, font: GUIStyle.SubHeadingFont)
|
||||||
{
|
{
|
||||||
TextColor = textColor,
|
TextColor = textColor,
|
||||||
|
|||||||
@@ -114,8 +114,8 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
if (chargeSound != null)
|
if (chargeSound != null)
|
||||||
{
|
{
|
||||||
chargeSoundChannel = SoundPlayer.PlaySound(chargeSound.Sound, item.WorldPosition, chargeSound.Volume, chargeSound.Range, ignoreMuffling: chargeSound.IgnoreMuffling);
|
chargeSoundChannel = SoundPlayer.PlaySound(chargeSound.Sound, item.WorldPosition, chargeSound.Volume, chargeSound.Range, ignoreMuffling: chargeSound.IgnoreMuffling, freqMult: chargeSound.GetRandomFrequencyMultiplier());
|
||||||
if (chargeSoundChannel != null) chargeSoundChannel.Looping = true;
|
if (chargeSoundChannel != null) { chargeSoundChannel.Looping = true; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (chargeSoundChannel != null)
|
else if (chargeSoundChannel != null)
|
||||||
|
|||||||
@@ -212,14 +212,14 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
if (moveSoundChannel == null && startMoveSound != null)
|
if (moveSoundChannel == null && startMoveSound != null)
|
||||||
{
|
{
|
||||||
moveSoundChannel = SoundPlayer.PlaySound(startMoveSound.Sound, item.WorldPosition, startMoveSound.Volume, startMoveSound.Range, ignoreMuffling: startMoveSound.IgnoreMuffling);
|
moveSoundChannel = SoundPlayer.PlaySound(startMoveSound.Sound, item.WorldPosition, startMoveSound.Volume, startMoveSound.Range, ignoreMuffling: startMoveSound.IgnoreMuffling, freqMult: startMoveSound.GetRandomFrequencyMultiplier());
|
||||||
}
|
}
|
||||||
else if (moveSoundChannel == null || !moveSoundChannel.IsPlaying)
|
else if (moveSoundChannel == null || !moveSoundChannel.IsPlaying)
|
||||||
{
|
{
|
||||||
if (moveSound != null)
|
if (moveSound != null)
|
||||||
{
|
{
|
||||||
moveSoundChannel.FadeOutAndDispose();
|
moveSoundChannel.FadeOutAndDispose();
|
||||||
moveSoundChannel = SoundPlayer.PlaySound(moveSound.Sound, item.WorldPosition, moveSound.Volume, moveSound.Range, ignoreMuffling: moveSound.IgnoreMuffling);
|
moveSoundChannel = SoundPlayer.PlaySound(moveSound.Sound, item.WorldPosition, moveSound.Volume, moveSound.Range, ignoreMuffling: moveSound.IgnoreMuffling, freqMult: moveSound.GetRandomFrequencyMultiplier());
|
||||||
if (moveSoundChannel != null) moveSoundChannel.Looping = true;
|
if (moveSoundChannel != null) moveSoundChannel.Looping = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -231,7 +231,7 @@ namespace Barotrauma.Items.Components
|
|||||||
if (endMoveSound != null && moveSoundChannel.Sound != endMoveSound.Sound)
|
if (endMoveSound != null && moveSoundChannel.Sound != endMoveSound.Sound)
|
||||||
{
|
{
|
||||||
moveSoundChannel.FadeOutAndDispose();
|
moveSoundChannel.FadeOutAndDispose();
|
||||||
moveSoundChannel = SoundPlayer.PlaySound(endMoveSound.Sound, item.WorldPosition, endMoveSound.Volume, endMoveSound.Range, ignoreMuffling: endMoveSound.IgnoreMuffling);
|
moveSoundChannel = SoundPlayer.PlaySound(endMoveSound.Sound, item.WorldPosition, endMoveSound.Volume, endMoveSound.Range, ignoreMuffling: endMoveSound.IgnoreMuffling, freqMult: endMoveSound.GetRandomFrequencyMultiplier());
|
||||||
if (moveSoundChannel != null) moveSoundChannel.Looping = false;
|
if (moveSoundChannel != null) moveSoundChannel.Looping = false;
|
||||||
}
|
}
|
||||||
else if (!moveSoundChannel.IsPlaying)
|
else if (!moveSoundChannel.IsPlaying)
|
||||||
@@ -260,7 +260,7 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
if (chargeSound != null)
|
if (chargeSound != null)
|
||||||
{
|
{
|
||||||
chargeSoundChannel = SoundPlayer.PlaySound(chargeSound.Sound, item.WorldPosition, chargeSound.Volume, chargeSound.Range, ignoreMuffling: chargeSound.IgnoreMuffling);
|
chargeSoundChannel = SoundPlayer.PlaySound(chargeSound.Sound, item.WorldPosition, chargeSound.Volume, chargeSound.Range, ignoreMuffling: chargeSound.IgnoreMuffling, freqMult: chargeSound.GetRandomFrequencyMultiplier());
|
||||||
if (chargeSoundChannel != null) chargeSoundChannel.Looping = true;
|
if (chargeSoundChannel != null) chargeSoundChannel.Looping = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1616,7 +1616,9 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var containedItem = itemContainer.Inventory.slots[Math.Max(itemContainer.ContainedStateIndicatorSlot, 0)].FirstOrDefault();
|
|
||||||
|
int targetSlot = Math.Max(itemContainer.ContainedStateIndicatorSlot, 0);
|
||||||
|
var containedItem = itemContainer.Inventory.slots[targetSlot].FirstOrDefault();
|
||||||
|
|
||||||
containedState = itemContainer.Inventory.Capacity == 1 || itemContainer.ContainedStateIndicatorSlot > -1 ?
|
containedState = itemContainer.Inventory.Capacity == 1 || itemContainer.ContainedStateIndicatorSlot > -1 ?
|
||||||
(containedItem == null ? 0.0f : containedItem.Condition / containedItem.MaxCondition) :
|
(containedItem == null ? 0.0f : containedItem.Condition / containedItem.MaxCondition) :
|
||||||
@@ -1624,10 +1626,10 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (containedItem != null && (itemContainer.Inventory.Capacity == 1 || itemContainer.HasSubContainers))
|
if (containedItem != null && (itemContainer.Inventory.Capacity == 1 || itemContainer.HasSubContainers))
|
||||||
{
|
{
|
||||||
int maxStackSize = Math.Min(containedItem.Prefab.MaxStackSize, itemContainer.GetMaxStackSize(0));
|
int maxStackSize = Math.Min(containedItem.Prefab.MaxStackSize, itemContainer.GetMaxStackSize(targetSlot));
|
||||||
if (maxStackSize > 1 || containedItem.Prefab.HideConditionBar)
|
if (maxStackSize > 1 || containedItem.Prefab.HideConditionBar)
|
||||||
{
|
{
|
||||||
containedState = itemContainer.Inventory.slots[0].Items.Count / (float)maxStackSize;
|
containedState = itemContainer.Inventory.slots[targetSlot].Items.Count / (float)maxStackSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (SoundChannels[i] == null || !SoundChannels[i].IsPlaying)
|
if (SoundChannels[i] == null || !SoundChannels[i].IsPlaying)
|
||||||
{
|
{
|
||||||
SoundChannels[i] = roundSound.Sound.Play(roundSound.Volume, roundSound.Range, soundPos);
|
SoundChannels[i] = roundSound.Sound.Play(roundSound.Volume, roundSound.Range, roundSound.GetRandomFrequencyMultiplier(), soundPos);
|
||||||
}
|
}
|
||||||
SoundChannels[i].Position = new Vector3(soundPos.X, soundPos.Y, 0.0f);
|
SoundChannels[i].Position = new Vector3(soundPos.X, soundPos.Y, 0.0f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ namespace Barotrauma
|
|||||||
switch (MouseButton)
|
switch (MouseButton)
|
||||||
{
|
{
|
||||||
case MouseButton.None:
|
case MouseButton.None:
|
||||||
|
if (Key == Keys.None) { return false; }
|
||||||
return PlayerInput.KeyDown(Key);
|
return PlayerInput.KeyDown(Key);
|
||||||
case MouseButton.PrimaryMouse:
|
case MouseButton.PrimaryMouse:
|
||||||
return PlayerInput.PrimaryMouseButtonHeld();
|
return PlayerInput.PrimaryMouseButtonHeld();
|
||||||
@@ -88,6 +89,7 @@ namespace Barotrauma
|
|||||||
switch (MouseButton)
|
switch (MouseButton)
|
||||||
{
|
{
|
||||||
case MouseButton.None:
|
case MouseButton.None:
|
||||||
|
if (Key == Keys.None) { return false; }
|
||||||
return PlayerInput.KeyHit(Key);
|
return PlayerInput.KeyHit(Key);
|
||||||
case MouseButton.PrimaryMouse:
|
case MouseButton.PrimaryMouse:
|
||||||
return PlayerInput.PrimaryMouseButtonClicked();
|
return PlayerInput.PrimaryMouseButtonClicked();
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private GUIFrame wiringToolPanel;
|
private GUIFrame wiringToolPanel;
|
||||||
|
|
||||||
private DateTime editorSelectedTime;
|
private Option<DateTime> editorSelectedTime;
|
||||||
|
|
||||||
private GUIImage previewImage;
|
private GUIImage previewImage;
|
||||||
private GUILayoutGroup previewImageButtonHolder;
|
private GUILayoutGroup previewImageButtonHolder;
|
||||||
@@ -1391,7 +1391,7 @@ namespace Barotrauma
|
|||||||
if (backedUpSubInfo != null) { name = backedUpSubInfo.Name; }
|
if (backedUpSubInfo != null) { name = backedUpSubInfo.Name; }
|
||||||
subNameLabel.Text = ToolBox.LimitString(name, subNameLabel.Font, subNameLabel.Rect.Width);
|
subNameLabel.Text = ToolBox.LimitString(name, subNameLabel.Font, subNameLabel.Rect.Width);
|
||||||
|
|
||||||
editorSelectedTime = DateTime.Now;
|
editorSelectedTime = Option<DateTime>.Some(DateTime.Now);
|
||||||
|
|
||||||
GUI.ForceMouseOn(null);
|
GUI.ForceMouseOn(null);
|
||||||
SetMode(Mode.Default);
|
SetMode(Mode.Default);
|
||||||
@@ -1540,9 +1540,13 @@ namespace Barotrauma
|
|||||||
autoSaveLabel?.Parent?.RemoveChild(autoSaveLabel);
|
autoSaveLabel?.Parent?.RemoveChild(autoSaveLabel);
|
||||||
autoSaveLabel = null;
|
autoSaveLabel = null;
|
||||||
|
|
||||||
TimeSpan timeInEditor = DateTime.Now - editorSelectedTime;
|
|
||||||
#if USE_STEAM
|
#if USE_STEAM
|
||||||
SteamAchievementManager.IncrementStat("hoursineditor".ToIdentifier(), (float)timeInEditor.TotalHours);
|
if (editorSelectedTime.TryUnwrap(out DateTime selectedTime))
|
||||||
|
{
|
||||||
|
TimeSpan timeInEditor = DateTime.Now - selectedTime;
|
||||||
|
SteamAchievementManager.IncrementStat("hoursineditor".ToIdentifier(), (float)timeInEditor.TotalHours);
|
||||||
|
editorSelectedTime = Option<DateTime>.None();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GUI.ForceMouseOn(null);
|
GUI.ForceMouseOn(null);
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ namespace Barotrauma
|
|||||||
GameAnalyticsManager.AddErrorEventOnce("StatusEffect.ApplyProjSpecific:SoundNull1" + Environment.StackTrace.CleanupStackTrace(), GameAnalyticsManager.ErrorSeverity.Error, errorMsg);
|
GameAnalyticsManager.AddErrorEventOnce("StatusEffect.ApplyProjSpecific:SoundNull1" + Environment.StackTrace.CleanupStackTrace(), GameAnalyticsManager.ErrorSeverity.Error, errorMsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
soundChannel = SoundPlayer.PlaySound(sound.Sound, worldPosition, sound.Volume, sound.Range, hullGuess: hull, ignoreMuffling: sound.IgnoreMuffling);
|
soundChannel = SoundPlayer.PlaySound(sound.Sound, worldPosition, sound.Volume, sound.Range, hullGuess: hull, ignoreMuffling: sound.IgnoreMuffling, freqMult: sound.GetRandomFrequencyMultiplier());
|
||||||
ignoreMuffling = sound.IgnoreMuffling;
|
ignoreMuffling = sound.IgnoreMuffling;
|
||||||
if (soundChannel != null) { soundChannel.Looping = loopSound; }
|
if (soundChannel != null) { soundChannel.Looping = loopSound; }
|
||||||
}
|
}
|
||||||
@@ -167,7 +167,7 @@ namespace Barotrauma
|
|||||||
GameAnalyticsManager.AddErrorEventOnce("StatusEffect.ApplyProjSpecific:SoundNull2" + Environment.StackTrace.CleanupStackTrace(), GameAnalyticsManager.ErrorSeverity.Error, errorMsg);
|
GameAnalyticsManager.AddErrorEventOnce("StatusEffect.ApplyProjSpecific:SoundNull2" + Environment.StackTrace.CleanupStackTrace(), GameAnalyticsManager.ErrorSeverity.Error, errorMsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
soundChannel = SoundPlayer.PlaySound(selectedSound.Sound, worldPosition, selectedSound.Volume, selectedSound.Range, hullGuess: hull, ignoreMuffling: selectedSound.IgnoreMuffling);
|
soundChannel = SoundPlayer.PlaySound(selectedSound.Sound, worldPosition, selectedSound.Volume, selectedSound.Range, hullGuess: hull, ignoreMuffling: selectedSound.IgnoreMuffling, freqMult: selectedSound.GetRandomFrequencyMultiplier());
|
||||||
ignoreMuffling = selectedSound.IgnoreMuffling;
|
ignoreMuffling = selectedSound.IgnoreMuffling;
|
||||||
if (soundChannel != null) { soundChannel.Looping = loopSound; }
|
if (soundChannel != null) { soundChannel.Looping = loopSound; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<RootNamespace>Barotrauma</RootNamespace>
|
<RootNamespace>Barotrauma</RootNamespace>
|
||||||
<Authors>FakeFish, Undertow Games</Authors>
|
<Authors>FakeFish, Undertow Games</Authors>
|
||||||
<Product>Barotrauma</Product>
|
<Product>Barotrauma</Product>
|
||||||
<Version>0.20.4.0</Version>
|
<Version>0.20.6.0</Version>
|
||||||
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
<AssemblyName>Barotrauma</AssemblyName>
|
<AssemblyName>Barotrauma</AssemblyName>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<RootNamespace>Barotrauma</RootNamespace>
|
<RootNamespace>Barotrauma</RootNamespace>
|
||||||
<Authors>FakeFish, Undertow Games</Authors>
|
<Authors>FakeFish, Undertow Games</Authors>
|
||||||
<Product>Barotrauma</Product>
|
<Product>Barotrauma</Product>
|
||||||
<Version>0.20.4.0</Version>
|
<Version>0.20.6.0</Version>
|
||||||
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
<AssemblyName>Barotrauma</AssemblyName>
|
<AssemblyName>Barotrauma</AssemblyName>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<RootNamespace>Barotrauma</RootNamespace>
|
<RootNamespace>Barotrauma</RootNamespace>
|
||||||
<Authors>FakeFish, Undertow Games</Authors>
|
<Authors>FakeFish, Undertow Games</Authors>
|
||||||
<Product>Barotrauma</Product>
|
<Product>Barotrauma</Product>
|
||||||
<Version>0.20.4.0</Version>
|
<Version>0.20.6.0</Version>
|
||||||
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
<AssemblyName>Barotrauma</AssemblyName>
|
<AssemblyName>Barotrauma</AssemblyName>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<RootNamespace>Barotrauma</RootNamespace>
|
<RootNamespace>Barotrauma</RootNamespace>
|
||||||
<Authors>FakeFish, Undertow Games</Authors>
|
<Authors>FakeFish, Undertow Games</Authors>
|
||||||
<Product>Barotrauma Dedicated Server</Product>
|
<Product>Barotrauma Dedicated Server</Product>
|
||||||
<Version>0.20.4.0</Version>
|
<Version>0.20.6.0</Version>
|
||||||
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
<AssemblyName>DedicatedServer</AssemblyName>
|
<AssemblyName>DedicatedServer</AssemblyName>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<RootNamespace>Barotrauma</RootNamespace>
|
<RootNamespace>Barotrauma</RootNamespace>
|
||||||
<Authors>FakeFish, Undertow Games</Authors>
|
<Authors>FakeFish, Undertow Games</Authors>
|
||||||
<Product>Barotrauma Dedicated Server</Product>
|
<Product>Barotrauma Dedicated Server</Product>
|
||||||
<Version>0.20.4.0</Version>
|
<Version>0.20.6.0</Version>
|
||||||
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
<AssemblyName>DedicatedServer</AssemblyName>
|
<AssemblyName>DedicatedServer</AssemblyName>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<RootNamespace>Barotrauma</RootNamespace>
|
<RootNamespace>Barotrauma</RootNamespace>
|
||||||
<Authors>FakeFish, Undertow Games</Authors>
|
<Authors>FakeFish, Undertow Games</Authors>
|
||||||
<Product>Barotrauma Dedicated Server</Product>
|
<Product>Barotrauma Dedicated Server</Product>
|
||||||
<Version>0.20.4.0</Version>
|
<Version>0.20.6.0</Version>
|
||||||
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
<Copyright>Copyright © FakeFish 2018-2022</Copyright>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
<AssemblyName>DedicatedServer</AssemblyName>
|
<AssemblyName>DedicatedServer</AssemblyName>
|
||||||
|
|||||||
@@ -2182,8 +2182,6 @@ namespace Barotrauma
|
|||||||
private AttackTargetData currentAttackTarget;
|
private AttackTargetData currentAttackTarget;
|
||||||
public void SetAttackTarget(Limb attackLimb, IDamageable damageTarget, Vector2 attackPos)
|
public void SetAttackTarget(Limb attackLimb, IDamageable damageTarget, Vector2 attackPos)
|
||||||
{
|
{
|
||||||
DebugConsole.NewMessage($"SetAttackTarget {this.ToString()}: " + (damageTarget?.ToString() ?? null));
|
|
||||||
|
|
||||||
currentAttackTarget = new AttackTargetData()
|
currentAttackTarget = new AttackTargetData()
|
||||||
{
|
{
|
||||||
AttackLimb = attackLimb,
|
AttackLimb = attackLimb,
|
||||||
|
|||||||
@@ -71,6 +71,13 @@ namespace Barotrauma
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Character Source;
|
public Character Source;
|
||||||
|
|
||||||
|
private readonly static LocalizedString[] strengthTexts = new LocalizedString[]
|
||||||
|
{
|
||||||
|
TextManager.Get("AfflictionStrengthLow"),
|
||||||
|
TextManager.Get("AfflictionStrengthMedium"),
|
||||||
|
TextManager.Get("AfflictionStrengthHigh")
|
||||||
|
};
|
||||||
|
|
||||||
public Affliction(AfflictionPrefab prefab, float strength)
|
public Affliction(AfflictionPrefab prefab, float strength)
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
@@ -89,6 +96,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Serialize(XElement element)
|
public void Serialize(XElement element)
|
||||||
{
|
{
|
||||||
SerializableProperty.SerializeProperties(this, element);
|
SerializableProperty.SerializeProperties(this, element);
|
||||||
@@ -108,6 +116,17 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public override string ToString() => Prefab == null ? "Affliction (Invalid)" : $"Affliction ({Prefab.Name})";
|
public override string ToString() => Prefab == null ? "Affliction (Invalid)" : $"Affliction ({Prefab.Name})";
|
||||||
|
|
||||||
|
public LocalizedString GetStrengthText()
|
||||||
|
{
|
||||||
|
return GetStrengthText(Strength, Prefab.MaxStrength);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LocalizedString GetStrengthText(float strength, float maxStrength)
|
||||||
|
{
|
||||||
|
return strengthTexts[
|
||||||
|
MathHelper.Clamp((int)Math.Floor(strength / maxStrength * strengthTexts.Length), 0, strengthTexts.Length - 1)];
|
||||||
|
}
|
||||||
|
|
||||||
public AfflictionPrefab.Effect GetActiveEffect() => Prefab.GetActiveEffect(Strength);
|
public AfflictionPrefab.Effect GetActiveEffect() => Prefab.GetActiveEffect(Strength);
|
||||||
|
|
||||||
public float GetVitalityDecrease(CharacterHealth characterHealth)
|
public float GetVitalityDecrease(CharacterHealth characterHealth)
|
||||||
|
|||||||
+2
-1
@@ -10,7 +10,8 @@
|
|||||||
public override void Update(CharacterHealth characterHealth, Limb targetLimb, float deltaTime)
|
public override void Update(CharacterHealth characterHealth, Limb targetLimb, float deltaTime)
|
||||||
{
|
{
|
||||||
base.Update(characterHealth, targetLimb, deltaTime);
|
base.Update(characterHealth, targetLimb, deltaTime);
|
||||||
characterHealth.BloodlossAmount += Strength * (1.0f / 60.0f) * deltaTime;
|
float bloodlossResistance = GetResistance(characterHealth.BloodlossAffliction.Identifier);
|
||||||
|
characterHealth.BloodlossAmount += Strength * (1.0f - bloodlossResistance) / 60.0f * deltaTime;
|
||||||
if (Source != null)
|
if (Source != null)
|
||||||
{
|
{
|
||||||
characterHealth.BloodlossAffliction.Source = Source;
|
characterHealth.BloodlossAffliction.Source = Source;
|
||||||
|
|||||||
@@ -880,17 +880,19 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (!Character.NeedsOxygen) { return; }
|
if (!Character.NeedsOxygen) { return; }
|
||||||
|
|
||||||
|
float oxygenlowResistance = GetResistance(oxygenLowAffliction.Prefab);
|
||||||
float prevOxygen = OxygenAmount;
|
float prevOxygen = OxygenAmount;
|
||||||
if (IsUnconscious)
|
if (IsUnconscious)
|
||||||
{
|
{
|
||||||
|
//clamp above 0.1 (no amount of oxygen low resistance should keep the character alive indefinitely)
|
||||||
|
float decreaseSpeed = Math.Max(0.1f, 1f - oxygenlowResistance);
|
||||||
//the character dies of oxygen deprivation in 100 seconds after losing consciousness
|
//the character dies of oxygen deprivation in 100 seconds after losing consciousness
|
||||||
OxygenAmount = MathHelper.Clamp(OxygenAmount - 1.0f * deltaTime, -100.0f, 100.0f);
|
OxygenAmount = MathHelper.Clamp(OxygenAmount - decreaseSpeed * deltaTime, -100.0f, 100.0f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float decreaseSpeed = -5.0f;
|
float decreaseSpeed = -5.0f;
|
||||||
float increaseSpeed = 10.0f;
|
float increaseSpeed = 10.0f;
|
||||||
float oxygenlowResistance = GetResistance(oxygenLowAffliction.Prefab);
|
|
||||||
decreaseSpeed *= (1f - oxygenlowResistance);
|
decreaseSpeed *= (1f - oxygenlowResistance);
|
||||||
increaseSpeed *= (1f + oxygenlowResistance);
|
increaseSpeed *= (1f + oxygenlowResistance);
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ namespace Barotrauma
|
|||||||
DebugConsole.ThrowError($"Error in event prefab \"{scriptedEvent.Prefab.Identifier}\". Status effect configured as a sub action (text: \"{Text}\"). Please configure status effects as child elements of a StatusEffectAction.");
|
DebugConsole.ThrowError($"Error in event prefab \"{scriptedEvent.Prefab.Identifier}\". Status effect configured as a sub action (text: \"{Text}\"). Please configure status effects as child elements of a StatusEffectAction.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Actions.Add(Instantiate(scriptedEvent, e));
|
var action = Instantiate(scriptedEvent, e);
|
||||||
|
if (action != null) { Actions.Add(action); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,6 +150,10 @@ namespace Barotrauma
|
|||||||
ConstructorInfo constructor = actionType.GetConstructor(new[] { typeof(ScriptedEvent), typeof(ContentXElement) });
|
ConstructorInfo constructor = actionType.GetConstructor(new[] { typeof(ScriptedEvent), typeof(ContentXElement) });
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (constructor == null)
|
||||||
|
{
|
||||||
|
throw new Exception($"Error in scripted event \"{scriptedEvent.Prefab.Identifier}\" - could not find a constructor for the EventAction \"{actionType}\".");
|
||||||
|
}
|
||||||
return constructor.Invoke(new object[] { scriptedEvent, element }) as EventAction;
|
return constructor.Invoke(new object[] { scriptedEvent, element }) as EventAction;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@@ -57,42 +57,18 @@ namespace Barotrauma
|
|||||||
[NetworkSerialize]
|
[NetworkSerialize]
|
||||||
public ushort Strength;
|
public ushort Strength;
|
||||||
|
|
||||||
|
[NetworkSerialize]
|
||||||
|
public int VitalityDecrease;
|
||||||
|
|
||||||
[NetworkSerialize]
|
[NetworkSerialize]
|
||||||
public ushort Price;
|
public ushort Price;
|
||||||
|
|
||||||
public AfflictionSeverity AfflictionSeverity
|
public void SetAffliction(Affliction affliction, CharacterHealth characterHealth)
|
||||||
{
|
{
|
||||||
get
|
Identifier = affliction.Identifier;
|
||||||
{
|
Strength = (ushort)Math.Ceiling(affliction.Strength);
|
||||||
if (Prefab is null) { return AfflictionSeverity.Low; }
|
Price = (ushort)(affliction.Prefab.BaseHealCost + Strength * affliction.Prefab.HealCostMultiplier);
|
||||||
|
VitalityDecrease = (int)affliction.GetVitalityDecrease(characterHealth);
|
||||||
float normalizedStrength = Strength / Prefab.MaxStrength;
|
|
||||||
|
|
||||||
// lesser than 0.1
|
|
||||||
if (normalizedStrength <= 0.1)
|
|
||||||
{
|
|
||||||
return AfflictionSeverity.Low;
|
|
||||||
}
|
|
||||||
|
|
||||||
// between 0.1 and 0.5
|
|
||||||
if (normalizedStrength is > 0.1f and < 0.5f)
|
|
||||||
{
|
|
||||||
return AfflictionSeverity.Medium;
|
|
||||||
}
|
|
||||||
|
|
||||||
// greater than 0.5
|
|
||||||
return AfflictionSeverity.High;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Affliction Affliction
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
Identifier = value.Identifier;
|
|
||||||
Strength = (ushort)Math.Ceiling(value.Strength);
|
|
||||||
Price = (ushort)(value.Prefab.BaseHealCost + Strength * value.Prefab.HealCostMultiplier);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private AfflictionPrefab? cachedPrefab;
|
private AfflictionPrefab? cachedPrefab;
|
||||||
@@ -306,7 +282,8 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newAffliction = new NetAffliction { Affliction = affliction };
|
newAffliction = new NetAffliction();
|
||||||
|
newAffliction.SetAffliction(affliction, health);
|
||||||
newAffliction.Price = (ushort)GetAdjustedPrice(newAffliction.Price);
|
newAffliction.Price = (ushort)GetAdjustedPrice(newAffliction.Price);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -681,11 +681,10 @@ namespace Barotrauma.Items.Components
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Vector2 attachPos = GetAttachPosition(character, useWorldCoordinates: true);
|
Vector2 attachPos = GetAttachPosition(character, useWorldCoordinates: true);
|
||||||
Structure attachTarget = Structure.GetAttachTarget(attachPos);
|
Submarine attachSubmarine = Structure.GetAttachTarget(attachPos)?.Submarine ?? item.Submarine;
|
||||||
|
|
||||||
int maxAttachableCount = (int)character.Info.GetSavedStatValue(StatTypes.MaxAttachableCount, item.Prefab.Identifier);
|
int maxAttachableCount = (int)character.Info.GetSavedStatValue(StatTypes.MaxAttachableCount, item.Prefab.Identifier);
|
||||||
int currentlyAttachedCount = Item.ItemList.Count(
|
int currentlyAttachedCount = Item.ItemList.Count(
|
||||||
i => i.Submarine == attachTarget?.Submarine && i.GetComponent<Holdable>() is Holdable holdable && holdable.Attached && i.Prefab.Identifier == item.Prefab.Identifier);
|
i => i.Submarine == attachSubmarine && i.GetComponent<Holdable>() is Holdable holdable && holdable.Attached && i.Prefab.Identifier == item.Prefab.Identifier);
|
||||||
if (maxAttachableCount == 0)
|
if (maxAttachableCount == 0)
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
if (!powerOnSoundPlayed && powerOnSound != null)
|
if (!powerOnSoundPlayed && powerOnSound != null)
|
||||||
{
|
{
|
||||||
SoundPlayer.PlaySound(powerOnSound.Sound, item.WorldPosition, powerOnSound.Volume, powerOnSound.Range, hullGuess: item.CurrentHull, ignoreMuffling: powerOnSound.IgnoreMuffling);
|
SoundPlayer.PlaySound(powerOnSound.Sound, item.WorldPosition, powerOnSound.Volume, powerOnSound.Range, hullGuess: item.CurrentHull, ignoreMuffling: powerOnSound.IgnoreMuffling, freqMult: powerOnSound.GetRandomFrequencyMultiplier());
|
||||||
powerOnSoundPlayed = true;
|
powerOnSoundPlayed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3402,6 +3402,20 @@ namespace Barotrauma
|
|||||||
item.PurchasedNewSwap = false;
|
item.PurchasedNewSwap = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Version savedVersion = submarine?.Info.GameVersion;
|
||||||
|
if (element.Document?.Root != null && element.Document.Root.Name.ToString().Equals("gamesession", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
//character inventories are loaded from the game session file - use the version number of the saved game session instead of the sub
|
||||||
|
//(the sub may have already been saved and up-to-date, even though the character inventories aren't)
|
||||||
|
savedVersion = new Version(element.Document.Root.GetAttributeString("version", "0.0.0.0"));
|
||||||
|
}
|
||||||
|
|
||||||
|
float prevCondition = item.condition;
|
||||||
|
if (savedVersion != null)
|
||||||
|
{
|
||||||
|
SerializableProperty.UpgradeGameVersion(item, item.Prefab.ConfigElement, savedVersion);
|
||||||
|
}
|
||||||
|
|
||||||
if (element.GetAttribute("conditionpercentage") != null)
|
if (element.GetAttribute("conditionpercentage") != null)
|
||||||
{
|
{
|
||||||
item.condition = element.GetAttributeFloat("conditionpercentage", 100.0f) / 100.0f * item.MaxCondition;
|
item.condition = element.GetAttributeFloat("conditionpercentage", 100.0f) / 100.0f * item.MaxCondition;
|
||||||
@@ -3413,7 +3427,7 @@ namespace Barotrauma
|
|||||||
//if the item was in full condition considering the unmodified health
|
//if the item was in full condition considering the unmodified health
|
||||||
//(not taking possible HealthMultipliers added by mods into account),
|
//(not taking possible HealthMultipliers added by mods into account),
|
||||||
//make sure it stays in full condition
|
//make sure it stays in full condition
|
||||||
bool wasFullCondition = item.condition >= item.Prefab.Health;
|
bool wasFullCondition = prevCondition >= item.Prefab.Health;
|
||||||
if (wasFullCondition)
|
if (wasFullCondition)
|
||||||
{
|
{
|
||||||
item.condition = item.MaxCondition;
|
item.condition = item.MaxCondition;
|
||||||
@@ -3424,19 +3438,6 @@ namespace Barotrauma
|
|||||||
item.RecalculateConditionValues();
|
item.RecalculateConditionValues();
|
||||||
item.SetActiveSprite();
|
item.SetActiveSprite();
|
||||||
|
|
||||||
Version savedVersion = submarine?.Info.GameVersion;
|
|
||||||
if (element.Document?.Root != null && element.Document.Root.Name.ToString().Equals("gamesession", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
//character inventories are loaded from the game session file - use the version number of the saved game session instead of the sub
|
|
||||||
//(the sub may have already been saved and up-to-date, even though the character inventories aren't)
|
|
||||||
savedVersion = new Version(element.Document.Root.GetAttributeString("version", "0.0.0.0"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (savedVersion != null)
|
|
||||||
{
|
|
||||||
SerializableProperty.UpgradeGameVersion(item, item.Prefab.ConfigElement, savedVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (ItemComponent component in item.components)
|
foreach (ItemComponent component in item.components)
|
||||||
{
|
{
|
||||||
if (component.Parent != null) { component.IsActive = component.Parent.IsActive; }
|
if (component.Parent != null) { component.IsActive = component.Parent.IsActive; }
|
||||||
|
|||||||
@@ -360,18 +360,21 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AbilityAttackData attackData = new AbilityAttackData(Attack, c, attacker);
|
if (attack.Afflictions.Any() || attack.Stun > 0.0f)
|
||||||
if (attackData.Afflictions != null)
|
|
||||||
{
|
{
|
||||||
modifiedAfflictions.AddRange(attackData.Afflictions);
|
AbilityAttackData attackData = new AbilityAttackData(Attack, c, attacker);
|
||||||
}
|
if (attackData.Afflictions != null)
|
||||||
|
{
|
||||||
|
modifiedAfflictions.AddRange(attackData.Afflictions);
|
||||||
|
}
|
||||||
|
|
||||||
//use a position slightly from the limb's position towards the explosion
|
//use a position slightly from the limb's position towards the explosion
|
||||||
//ensures that the attack hits the correct limb and that the direction of the hit can be determined correctly in the AddDamage methods
|
//ensures that the attack hits the correct limb and that the direction of the hit can be determined correctly in the AddDamage methods
|
||||||
Vector2 dir = worldPosition - limb.WorldPosition;
|
Vector2 dir = worldPosition - limb.WorldPosition;
|
||||||
Vector2 hitPos = limb.WorldPosition + (dir.LengthSquared() <= 0.001f ? Rand.Vector(1.0f) : Vector2.Normalize(dir)) * 0.01f;
|
Vector2 hitPos = limb.WorldPosition + (dir.LengthSquared() <= 0.001f ? Rand.Vector(1.0f) : Vector2.Normalize(dir)) * 0.01f;
|
||||||
AttackResult attackResult = c.AddDamage(hitPos, modifiedAfflictions, attack.Stun * distFactor, false, attacker: attacker, damageMultiplier: attack.DamageMultiplier * attackData.DamageMultiplier);
|
AttackResult attackResult = c.AddDamage(hitPos, modifiedAfflictions, attack.Stun * distFactor, false, attacker: attacker, damageMultiplier: attack.DamageMultiplier * attackData.DamageMultiplier);
|
||||||
damages.Add(limb, attackResult.Damage);
|
damages.Add(limb, attackResult.Damage);
|
||||||
|
}
|
||||||
|
|
||||||
if (attack.StatusEffects != null && attack.StatusEffects.Any())
|
if (attack.StatusEffects != null && attack.StatusEffects.Any())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2539,7 +2539,8 @@ namespace Barotrauma
|
|||||||
levelResources.Add((itemPrefab, commonnessInfo));
|
levelResources.Add((itemPrefab, commonnessInfo));
|
||||||
}
|
}
|
||||||
else if (itemPrefab.LevelQuantity.TryGetValue(GenerationParams.Identifier, out var fixedQuantityResourceInfo) ||
|
else if (itemPrefab.LevelQuantity.TryGetValue(GenerationParams.Identifier, out var fixedQuantityResourceInfo) ||
|
||||||
itemPrefab.LevelQuantity.TryGetValue(Identifier.Empty, out fixedQuantityResourceInfo))
|
itemPrefab.LevelQuantity.TryGetValue(LevelData.Biome.Identifier, out fixedQuantityResourceInfo) ||
|
||||||
|
itemPrefab.LevelQuantity.TryGetValue(Identifier.Empty, out fixedQuantityResourceInfo))
|
||||||
{
|
{
|
||||||
fixedResources.Add((itemPrefab, fixedQuantityResourceInfo));
|
fixedResources.Add((itemPrefab, fixedQuantityResourceInfo));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,35 @@
|
|||||||
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
v0.20.6.0
|
||||||
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Unstable only:
|
||||||
|
- Fixed scripted events looping and repeating some parts.
|
||||||
|
- Depth charges don't explode when taking damage until they've been launched.
|
||||||
|
- Fixed Acid Grenade quality doing nothing.
|
||||||
|
- Fixed Acid Grenades not working in detonators.
|
||||||
|
- Fixed genetic materials being too abundant with the "Blackmarket Genes" talent.
|
||||||
|
- Fixed affliction icons overlapping with the inventory when grabbing someone or when a health interface is open.
|
||||||
|
- Fixed scrap cannon's firing particle effect triggering without ammo.
|
||||||
|
- Fixed scrap cannon barrel position.
|
||||||
|
- Fixed messed up depleted fuel SMG magazine sprite.
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Fixed portable pump's per-sub limit not working if you attach them at a spot with no background wall.
|
||||||
|
- Fixed oxygenlow resistance not affecting the time it takes to die in an unconscious state.
|
||||||
|
- Fixed bloodloss resistance not affecting how fast bleeding causes bloodloss.
|
||||||
|
- Fixed numpad keys toggling the chat when the Chat key is bind to nothing.
|
||||||
|
- Fixed piezo crystals no longer spawning in the Great Sea.
|
||||||
|
|
||||||
|
Modding:
|
||||||
|
- Fixed sound's frequency multiplier not working in many cases (status effects, specific item sounds like turret movement sounds).
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
v0.20.5.0
|
||||||
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Unstable only:
|
||||||
|
- Fixed crashing when you enter the 2nd outpost.
|
||||||
|
|
||||||
---------------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------------
|
||||||
v0.20.4.0
|
v0.20.4.0
|
||||||
---------------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user