Merge remote-tracking branch 'origin/master' into antagonists
This commit is contained in:
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("0.7.0.0")]
|
[assembly: AssemblyVersion("0.7.0.1")]
|
||||||
[assembly: AssemblyFileVersion("0.7.0.0")]
|
[assembly: AssemblyFileVersion("0.7.0.1")]
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ namespace Barotrauma
|
|||||||
if (LightSource != null)
|
if (LightSource != null)
|
||||||
{
|
{
|
||||||
LightSource.ParentSub = body.Submarine;
|
LightSource.ParentSub = body.Submarine;
|
||||||
|
LightSource.Rotation = (dir == Direction.Right) ? body.Rotation : body.Rotation - MathHelper.Pi;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,11 @@ namespace Barotrauma.Networking
|
|||||||
{
|
{
|
||||||
textBox.TextColor = ChatMessage.MessageColor[(int)ChatMessageType.Default];
|
textBox.TextColor = ChatMessage.MessageColor[(int)ChatMessageType.Default];
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(message)) return false;
|
if (string.IsNullOrWhiteSpace(message))
|
||||||
|
{
|
||||||
|
if (textBox == chatMsgBox) textBox.Deselect();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (this == GameMain.Server)
|
if (this == GameMain.Server)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1211,7 +1211,7 @@ namespace Barotrauma
|
|||||||
var moneyText = new GUITextBlock(new Rectangle(120,0,200,20), "Money", "", Alignment.BottomLeft, Alignment.TopLeft, campaignContainer);
|
var moneyText = new GUITextBlock(new Rectangle(120,0,200,20), "Money", "", Alignment.BottomLeft, Alignment.TopLeft, campaignContainer);
|
||||||
moneyText.TextGetter = campaignUI.GetMoney;
|
moneyText.TextGetter = campaignUI.GetMoney;
|
||||||
|
|
||||||
var restartText = new GUITextBlock(new Rectangle(-250, -20, 100, 30), "", "", Alignment.BottomRight, Alignment.BottomLeft, campaignContainer);
|
var restartText = new GUITextBlock(new Rectangle(-backButton.Rect.Width - 30, -10, 130, 30), "", "", Alignment.BottomRight, Alignment.BottomRight, campaignContainer);
|
||||||
restartText.Font = GUI.SmallFont;
|
restartText.Font = GUI.SmallFont;
|
||||||
restartText.TextGetter = AutoRestartText;
|
restartText.TextGetter = AutoRestartText;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("0.7.0.0")]
|
[assembly: AssemblyVersion("0.7.0.1")]
|
||||||
[assembly: AssemblyFileVersion("0.7.0.0")]
|
[assembly: AssemblyFileVersion("0.7.0.1")]
|
||||||
|
|||||||
@@ -277,6 +277,9 @@
|
|||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Items\Diving\DivingSuit.png">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Items\Diving\DivingSuit.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Items\Diving\Scooter.png">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Items\Door\dockingport.png">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Items\Door\dockingport.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
@@ -1353,6 +1356,7 @@
|
|||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\Character.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\Character.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\CharacterInfo.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\CharacterInfo.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\CharacterNetworking.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\CharacterNetworking.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\DamageModifier.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\DelayedEffect.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\DelayedEffect.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\HuskInfection.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\HuskInfection.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\Jobs\Job.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Characters\Jobs\Job.cs" />
|
||||||
|
|||||||
@@ -24,12 +24,15 @@
|
|||||||
<collider radius ="230"/>
|
<collider radius ="230"/>
|
||||||
|
|
||||||
<!-- head -->
|
<!-- head -->
|
||||||
<limb id = "0" width="300" height="673" type="Head" steerforce="1.0" flip="true" armorsector="0.0,180.0" armorvalue="100.0">
|
<limb id = "0" width="300" height="673" type="Head" steerforce="1.0" flip="true">
|
||||||
<sprite texture="Content/Characters/Carrier/carrier.png" sourcerect="0,0,393,778" depth="0.02" origin ="0.5,0.45"/>
|
<sprite texture="Content/Characters/Carrier/carrier.png" sourcerect="0,0,393,778" depth="0.02" origin ="0.5,0.45"/>
|
||||||
|
|
||||||
<lightsource range="400.0" color="0.7,0.8,1.0,1.0">
|
<lightsource range="400.0" color="0.7,0.8,1.0,1.0">
|
||||||
<lighttexture texture="Content/Characters/Carrier/carrier.png" sourcerect="392,0,307,778" origin="0.5, 0.45"/>
|
<lighttexture texture="Content/Characters/Carrier/carrier.png" sourcerect="392,0,307,778" origin="0.5, 0.45"/>
|
||||||
</lightsource>
|
</lightsource>
|
||||||
|
|
||||||
|
<damagemodifier armorsector="0.0,180.0" damagemultiplier="0.1" bleedingmultiplier="0.0" damagesound="SctructureBlunt" deflectprojectiles="true"/>
|
||||||
|
<damagemodifier armorsector="0.0,360.0" damagesound="SctructureBlunt" deflectprojectiles="true"/>
|
||||||
|
|
||||||
<attack range="400" damagerange="250" duration="0.08" damage="100" stun="5" force="20" damagetype="blunt" targetforce="100"/>
|
<attack range="400" damagerange="250" duration="0.08" damage="100" stun="5" force="20" damagetype="blunt" targetforce="100"/>
|
||||||
</limb>
|
</limb>
|
||||||
@@ -62,4 +65,4 @@
|
|||||||
|
|
||||||
</ragdoll>
|
</ragdoll>
|
||||||
|
|
||||||
</Character>
|
</Character>
|
||||||
|
|||||||
@@ -30,17 +30,20 @@
|
|||||||
<collider width="45" radius="22"/>
|
<collider width="45" radius="22"/>
|
||||||
|
|
||||||
<!-- head -->
|
<!-- head -->
|
||||||
<limb id = "0" radius="22" height="45" type="Head" flip="true" steerforce="1.0" armorsector="0.0,180.0" armorvalue="30.0" mouthpos="17,35">
|
<limb id = "0" radius="22" height="45" type="Head" flip="true" steerforce="1.0" mouthpos="17,35">
|
||||||
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.2" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
<sprite texture="Content/Characters/Crawler/crawler.png" sourcerect="0,0,51,121" depth="0.02" origin="0.45,0.63"/>
|
<sprite texture="Content/Characters/Crawler/crawler.png" sourcerect="0,0,51,121" depth="0.02" origin="0.45,0.63"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<!-- middle part -->
|
<!-- middle part -->
|
||||||
<limb id = "1" radius="22" height="40" flip="true" armorsector="0.0,180.0" armorvalue="20.0">0
|
<limb id = "1" radius="22" height="40" flip="true" >
|
||||||
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.2" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
<sprite texture="Content/Characters/Crawler/crawler.png" sourcerect="57,7,59,57" depth="0.021" origin="0.3,0.65"/>
|
<sprite texture="Content/Characters/Crawler/crawler.png" sourcerect="57,7,59,57" depth="0.021" origin="0.3,0.65"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<!-- tail -->
|
<!-- tail -->
|
||||||
<limb id = "2" radius="22" height="45" type="Tail" flip="true" armorsector="0.0,180.0" armorvalue="20.0">
|
<limb id = "2" radius="22" height="45" type="Tail" flip="true">
|
||||||
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.2" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
<sprite texture="Content/Characters/Crawler/crawler.png" sourcerect="6,141,60,95" depth="0.022" origin="0.37,0.43"/>
|
<sprite texture="Content/Characters/Crawler/crawler.png" sourcerect="6,141,60,95" depth="0.022" origin="0.37,0.43"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
|
|||||||
@@ -33,25 +33,28 @@
|
|||||||
<collider radius="60"/>
|
<collider radius="60"/>
|
||||||
|
|
||||||
<!-- head -->
|
<!-- head -->
|
||||||
<limb id = "0" radius="30" height="86" mass = "6" type="Head" flip="true" steerforce="1.0" armorsector="0.0,180.0" armor="10.0" mouthpos="30,65">
|
<limb id = "0" radius="30" height="86" mass = "6" type="Head" flip="true" steerforce="1.0" mouthpos="30,65">
|
||||||
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="0,0,101,168" depth="0.02" origin="0.4,0.53"/>
|
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="0,0,101,168" depth="0.02" origin="0.4,0.53"/>
|
||||||
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.5" bleedingmultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<!-- middle part -->
|
<!-- middle part -->
|
||||||
<limb id = "1" width="42" height="61" mass = "6" flip="true" armorsector="0.0,180.0" armor="10.0">
|
<limb id = "1" width="42" height="61" mass = "6" flip="true">
|
||||||
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="3,168,59,64" depth="0.021" origin="0.3,0.65"/>
|
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="3,168,59,64" depth="0.021" origin="0.3,0.65"/>
|
||||||
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.2" bleedingmultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<!-- middle part -->
|
<!-- middle part -->
|
||||||
<limb id = "2" width="35" height="52" mass = "6" flip="true" armorsector="0.0,180.0" armor="10.0">
|
<limb id = "2" width="35" height="52" mass = "6" flip="true">
|
||||||
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="66,180,65,70" depth="0.022" origin="0.3,0.65"/>
|
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="66,180,65,70" depth="0.022" origin="0.3,0.65"/>
|
||||||
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.5" bleedingmultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<!-- tail -->
|
<!-- tail -->
|
||||||
<limb id = "3" radius="20" mass = "6" type="Tail" flip="true" armorsector="0.0,180.0" armor="10.0">
|
<limb id = "3" radius="20" mass = "6" type="Tail" flip="true">
|
||||||
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="133,158,46,93" depth="0.023" origin="0.37,0.3"/>
|
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="133,158,46,93" depth="0.023" origin="0.37,0.3"/>
|
||||||
</limb>
|
<damagemodifier damagetype="Blunt,Slash" armorsector="0.0,180.0" damagemultiplier="0.5" bleedingmultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
|
</limb>
|
||||||
|
|
||||||
<limb id = "4" width="15" height="63" mass = "4" refjoint="3" flip="true">
|
<limb id = "4" width="15" height="63" mass = "4" refjoint="3" flip="true">
|
||||||
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="232,153,20,63" depth="0.012" origin="0.5,0.5"/>
|
<sprite texture="Content/Characters/Mantis/mantis.png" sourcerect="232,153,20,63" depth="0.012" origin="0.5,0.5"/>
|
||||||
|
|||||||
@@ -19,9 +19,10 @@
|
|||||||
<collider radius ="230"/>
|
<collider radius ="230"/>
|
||||||
|
|
||||||
<!-- head -->
|
<!-- head -->
|
||||||
<limb id = "0" radius="230" height="500" type="Head" steerforce="1.0" flip="true" armorsector="0.0,180.0" armorvalue="100.0">
|
<limb id = "0" radius="230" height="500" type="Head" steerforce="1.0" flip="true">
|
||||||
<sprite texture="Content/Characters/Moloch/moloch.png" sourcerect="0,0,628,1024" depth="0.02" origin ="0.4,0.5"/>
|
<sprite texture="Content/Characters/Moloch/moloch.png" sourcerect="0,0,628,1024" depth="0.02" origin ="0.4,0.5"/>
|
||||||
<attack range="700" damagerange="350" duration="0.05" damage="200" stun="5" force="20" damagetype="blunt" targetforce="100"/>
|
<attack range="700" damagerange="350" duration="0.05" damage="200" stun="5" force="20" damagetype="blunt" targetforce="100"/>
|
||||||
|
<damagemodifier damagetype="Any" armorsector="0.0,180.0" damagemultiplier="0.1" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<limb id = "1" width="50" height="440" flip="true">
|
<limb id = "1" width="50" height="440" flip="true">
|
||||||
|
|||||||
@@ -25,9 +25,10 @@
|
|||||||
<collider radius="100"/>
|
<collider radius="100"/>
|
||||||
|
|
||||||
<!-- head -->
|
<!-- head -->
|
||||||
<limb id = "0" type="Head" width="350" height="320" steerforce="1.0" flip="true" armorsector="0.0,360.0" armorvalue="100.0">
|
<limb id = "0" type="Head" width="350" height="320" steerforce="1.0" flip="true">
|
||||||
<sprite texture="Content/Characters/Watcher/watcher.png" sourcerect="0,0,369,348" depth="0.02" origin ="0.5,0.6"/>
|
<sprite texture="Content/Characters/Watcher/watcher.png" sourcerect="0,0,369,348" depth="0.02" origin ="0.5,0.6"/>
|
||||||
<attack range="250" damagerange="170" duration="0.05" damage="200" stun="5" force="20" damagetype="blunt" targetforce="100"/>
|
<attack range="250" damagerange="170" duration="0.05" damage="200" stun="5" force="20" damagetype="blunt" targetforce="100"/>
|
||||||
|
<damagemodifier damagetype="Any" armorsector="0.0,360.0" damagemultiplier="0.1" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
</limb>
|
</limb>
|
||||||
|
|
||||||
<limb id = "1" radius="50" height="120" flip="true">
|
<limb id = "1" radius="50" height="120" flip="true">
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
@@ -63,8 +63,7 @@
|
|||||||
<Item
|
<Item
|
||||||
name="Diving Suit"
|
name="Diving Suit"
|
||||||
category="Equipment"
|
category="Equipment"
|
||||||
tags="diving"
|
tags="diving"
|
||||||
|
|
||||||
price="200"
|
price="200"
|
||||||
fireproof="true"
|
fireproof="true"
|
||||||
description="An atmospheric diving suit capable of withstanding the immense pressure under Europa's crust.">
|
description="An atmospheric diving suit capable of withstanding the immense pressure under Europa's crust.">
|
||||||
@@ -73,7 +72,7 @@
|
|||||||
|
|
||||||
<Body width="37" height="113" density="15"/>
|
<Body width="37" height="113" density="15"/>
|
||||||
|
|
||||||
<Wearable slots="Head+Torso+Legs" armorvalue="10.0">
|
<Wearable slots="Head+Torso+Legs">
|
||||||
<sprite texture="DivingSuit.png" limb="Head" sourcerect="0,0,1,1" origin="0.5,0.5" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="Head" sourcerect="0,0,1,1" origin="0.5,0.5" hidelimb="true"/>
|
||||||
|
|
||||||
<sprite texture="DivingSuit.png" limb="Torso" sourcerect="42,0,42,97" origin="0.5,0.55" depthlimb="Head" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="Torso" sourcerect="42,0,42,97" origin="0.5,0.55" depthlimb="Head" hidelimb="true"/>
|
||||||
@@ -81,15 +80,18 @@
|
|||||||
<sprite texture="DivingSuit.png" limb="RightHand" sourcerect="0,78,15,50" origin="0.45,0.4" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="RightHand" sourcerect="0,78,15,50" origin="0.45,0.4" hidelimb="true"/>
|
||||||
<sprite texture="DivingSuit.png" limb="LeftHand" sourcerect="0,78,15,50" origin="0.45,0.4" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="LeftHand" sourcerect="0,78,15,50" origin="0.45,0.4" hidelimb="true"/>
|
||||||
|
|
||||||
<sprite texture="DivingSuit.png" limb="RightArm" sourcerect="0,0,19,43" origin="0.5,0.4" depth="0.005" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="RightArm" sourcerect="0,0,19,43" origin="0.5,0.4" hidelimb="true"/>
|
||||||
<sprite texture="DivingSuit.png" limb="LeftArm" sourcerect="0,0,19,43" origin="0.5,0.4" depth="0.005" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="LeftArm" sourcerect="0,0,19,43" origin="0.5,0.4" hidelimb="true"/>
|
||||||
|
|
||||||
<sprite texture="DivingSuit.png" limb="RightThigh" sourcerect="22,0,18,44" origin="0.5,0.5" depth="0.01" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="RightThigh" sourcerect="22,0,18,44" origin="0.5,0.5" hidelimb="true"/>
|
||||||
<sprite texture="DivingSuit.png" limb="LeftThigh" sourcerect="22,0,18,44" origin="0.5,0.5" depth="0.01" hidelimb="true"/>
|
<sprite texture="DivingSuit.png" limb="LeftThigh" sourcerect="22,0,18,44" origin="0.5,0.5" hidelimb="true"/>
|
||||||
|
|
||||||
|
<sprite texture="DivingSuit.png" limb="RightLeg" sourcerect="17,47,21,51" origin="0.5,0.55" hidelimb="true"/>
|
||||||
|
<sprite texture="DivingSuit.png" limb="LeftLeg" sourcerect="17,47,21,51" origin="0.5,0.55" hidelimb="true"/>
|
||||||
|
|
||||||
|
<sprite texture="DivingSuit.png" limb="RightFoot" sourcerect="30,100,20,25" origin="0.5,0.5" depth="0.13" inheritlimbdepth="false" hidelimb="true"/>
|
||||||
|
<sprite texture="DivingSuit.png" limb="LeftFoot" sourcerect="30,100,20,25" origin="0.5,0.5" depth="0.13" inheritlimbdepth="false" hidelimb="true"/>
|
||||||
|
|
||||||
<sprite texture="DivingSuit.png" limb="RightLeg" sourcerect="17,47,21,51" origin="0.5,0.55" depth="0.02" hidelimb="true"/>
|
|
||||||
<sprite texture="DivingSuit.png" limb="LeftLeg" sourcerect="17,47,21,51" origin="0.5,0.55" depth="0.02" hidelimb="true"/>
|
|
||||||
|
|
||||||
<StatusEffect type="OnWearing" target="Character" ObstructVision="true" PressureProtection="100.0" SpeedMultiplier="0.6" LowPassMultiplier="0.2" setvalue="true" disabledeltatime="true"/>
|
<StatusEffect type="OnWearing" target="Character" ObstructVision="true" PressureProtection="100.0" SpeedMultiplier="0.6" LowPassMultiplier="0.2" setvalue="true" disabledeltatime="true"/>
|
||||||
<StatusEffect type="OnWearing" target="Contained,Character" OxygenAvailable="1000.0" Condition="-0.5">
|
<StatusEffect type="OnWearing" target="Contained,Character" OxygenAvailable="1000.0" Condition="-0.5">
|
||||||
<RequiredItem type="Contained" name="Oxygen Tank"/>
|
<RequiredItem type="Contained" name="Oxygen Tank"/>
|
||||||
@@ -101,6 +103,10 @@
|
|||||||
<RequiredItem type="Contained" name="Oxygenite Shard"/>
|
<RequiredItem type="Contained" name="Oxygenite Shard"/>
|
||||||
</StatusEffect>
|
</StatusEffect>
|
||||||
<StatusEffect type="OnWearing" target="Character" OxygenAvailable="-100.0"/>
|
<StatusEffect type="OnWearing" target="Character" OxygenAvailable="-100.0"/>
|
||||||
|
|
||||||
|
<damagemodifier damagetype="Burn" armorsector="0.0,360.0" damagemultiplier="0.6"/>
|
||||||
|
<damagemodifier damagetype="Blunt" armorsector="0.0,360.0" damagemultiplier="0.8" bleedingmultiplier="0.3" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
|
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="0.5" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
</Wearable>
|
</Wearable>
|
||||||
|
|
||||||
<ItemContainer capacity="1" hideitems="true">
|
<ItemContainer capacity="1" hideitems="true">
|
||||||
@@ -124,11 +130,11 @@
|
|||||||
<Item name="Polycarbonate Bar"/>
|
<Item name="Polycarbonate Bar"/>
|
||||||
</Deconstruct>
|
</Deconstruct>
|
||||||
|
|
||||||
<Sprite texture ="DivingSuit.png" depth="0.55" sourcerect="22,98,59,32" origin="0.6,0.66"/>
|
<Sprite texture ="Scooter.png" depth="0.55"/>
|
||||||
|
|
||||||
<Body width="55" height="30" density="15"/>
|
<Body width="55" height="30" density="15"/>
|
||||||
|
|
||||||
<Holdable slots="Any,RightHand+LeftHand" aimpos="100,0" handle1="0,11" handle2="2,11"/>
|
<Holdable slots="Any,RightHand+LeftHand" aimpos="100,0" handle1="4,10" handle2="6,10"/>
|
||||||
|
|
||||||
<Propulsion force="80" usablein="water" particles="bubbles">
|
<Propulsion force="80" usablein="water" particles="bubbles">
|
||||||
<RequiredItems name="Battery Cell,Fulgurium Battery Cell" type="Contained" msg="Battery Cell required"/>
|
<RequiredItems name="Battery Cell,Fulgurium Battery Cell" type="Contained" msg="Battery Cell required"/>
|
||||||
@@ -139,7 +145,6 @@
|
|||||||
</LightComponent>
|
</LightComponent>
|
||||||
</Propulsion>
|
</Propulsion>
|
||||||
|
|
||||||
|
|
||||||
<ItemContainer capacity="1" hideitems="true">
|
<ItemContainer capacity="1" hideitems="true">
|
||||||
<Containable name="Battery Cell"/>
|
<Containable name="Battery Cell"/>
|
||||||
<Containable name="Fulgurium Battery Cell"/>
|
<Containable name="Fulgurium Battery Cell"/>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<Items>
|
<Items>
|
||||||
<Item
|
<Item
|
||||||
name="Orange Jumpsuit"
|
name="Orange Jumpsuit"
|
||||||
category="Equipment"
|
category="Equipment"
|
||||||
|
|
||||||
tags="smallitem"
|
tags="smallitem"
|
||||||
fireproof="true"
|
fireproof="true"
|
||||||
description="The fire-resistant fabric offers some protection against fires. Plenty of pockets for carrying any extra gear an engineer might need.">
|
description="The fire-resistant fabric offers some protection against fires. Plenty of pockets for carrying any extra gear an engineer might need.">
|
||||||
@@ -19,7 +18,10 @@
|
|||||||
<sprite texture="engigear.png" limb="LeftThigh" sourcerect="53,0,27,49" origin="0.5,0.5" depth="0.14" hidelimb="true"/>
|
<sprite texture="engigear.png" limb="LeftThigh" sourcerect="53,0,27,49" origin="0.5,0.5" depth="0.14" hidelimb="true"/>
|
||||||
|
|
||||||
<sprite texture="engigear.png" limb="RightLeg" sourcerect="33,0,20,51" origin="0.5,0.5" depth="0.11" hidelimb="true"/>
|
<sprite texture="engigear.png" limb="RightLeg" sourcerect="33,0,20,51" origin="0.5,0.5" depth="0.11" hidelimb="true"/>
|
||||||
<sprite texture="engigear.png" limb="LeftLeg" sourcerect="33,0,20,51" origin="0.5,0.5" depth="0.15" hidelimb="true"/>
|
<sprite texture="engigear.png" limb="LeftLeg" sourcerect="33,0,20,51" origin="0.5,0.5" depth="0.15" hidelimb="true"/>
|
||||||
|
|
||||||
|
<damagemodifier damagetype="Burn" armorsector="0.0,360.0" damagemultiplier="0.7"/>
|
||||||
|
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="0.9" bleedingdamagemultiplier="0.9"/>
|
||||||
</Wearable>
|
</Wearable>
|
||||||
|
|
||||||
<ItemContainer capacity="5">
|
<ItemContainer capacity="5">
|
||||||
@@ -48,6 +50,9 @@
|
|||||||
|
|
||||||
<sprite texture="engigear.png" limb="RightLeg" sourcerect="33,77,20,51" origin="0.5,0.5" depth="0.11" hidelimb="true"/>
|
<sprite texture="engigear.png" limb="RightLeg" sourcerect="33,77,20,51" origin="0.5,0.5" depth="0.11" hidelimb="true"/>
|
||||||
<sprite texture="engigear.png" limb="LeftLeg" sourcerect="33,77,20,51" origin="0.5,0.5" depth="0.15" hidelimb="true"/>
|
<sprite texture="engigear.png" limb="LeftLeg" sourcerect="33,77,20,51" origin="0.5,0.5" depth="0.15" hidelimb="true"/>
|
||||||
|
|
||||||
|
<damagemodifier damagetype="Burn" armorsector="0.0,360.0" damagemultiplier="0.7"/>
|
||||||
|
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="0.9" bleedingdamagemultiplier="0.9"/>
|
||||||
</Wearable>
|
</Wearable>
|
||||||
|
|
||||||
<ItemContainer capacity="5">
|
<ItemContainer capacity="5">
|
||||||
|
|||||||
@@ -10,17 +10,18 @@
|
|||||||
|
|
||||||
<Body width="52" height="17" density="40"/>
|
<Body width="52" height="17" density="40"/>
|
||||||
|
|
||||||
<Wearable slots="Any,Torso" armorvalue="10.0">
|
<Wearable slots="Any,Torso">
|
||||||
|
<damagemodifier damagetype="Burn" armorsector="0.0,360.0" damagemultiplier="0.9"/>
|
||||||
|
<damagemodifier damagetype="Blunt" armorsector="0.0,360.0" damagemultiplier="0.3" bleedingmultiplier="0.3" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
|
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="0.1" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
<sprite texture="securitygear.png" limb="Torso" sourcerect="0,0,38,58" origin="0.52,0.48"/>
|
<sprite texture="securitygear.png" limb="Torso" sourcerect="0,0,38,58" origin="0.52,0.48"/>
|
||||||
|
|
||||||
<sprite texture="securitygear.png" limb="RightArm" sourcerect="41,0,21,21" origin="0.5,1.1"/>
|
<sprite texture="securitygear.png" limb="RightArm" sourcerect="41,0,21,21" origin="0.5,1.1"/>
|
||||||
</Wearable>
|
</Wearable>
|
||||||
</Item>
|
</Item>
|
||||||
|
|
||||||
<Item
|
<Item
|
||||||
name="Ballistic Helmet"
|
name="Ballistic Helmet"
|
||||||
category="Equipment"
|
category="Equipment"
|
||||||
|
|
||||||
tags="smallitem"
|
tags="smallitem"
|
||||||
description="While the helmet won't offer adequate protection against most of the inhabitants of the subsurface ocean, it can be extremely useful if there are traitors on board.">
|
description="While the helmet won't offer adequate protection against most of the inhabitants of the subsurface ocean, it can be extremely useful if there are traitors on board.">
|
||||||
|
|
||||||
@@ -34,6 +35,8 @@
|
|||||||
<Body radius="12" density="50"/>
|
<Body radius="12" density="50"/>
|
||||||
|
|
||||||
<Wearable slots="Any,Head" armorvalue="20.0">
|
<Wearable slots="Any,Head" armorvalue="20.0">
|
||||||
|
<damagemodifier damagetype="Blunt" armorsector="0.0,360.0" damagemultiplier="0.2" bleedingmultiplier="0.2" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
|
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="0.1" bleedingmultiplier="0.0" damagesound="LimbArmor" deflectprojectiles="true"/>
|
||||||
<sprite texture="securitygear.png" limb="Head" sourcerect="39,31,29,22" origin="0.51,0.9"/>
|
<sprite texture="securitygear.png" limb="Head" sourcerect="39,31,29,22" origin="0.51,0.9"/>
|
||||||
</Wearable>
|
</Wearable>
|
||||||
</Item>
|
</Item>
|
||||||
|
|||||||
@@ -72,8 +72,7 @@
|
|||||||
|
|
||||||
<Item
|
<Item
|
||||||
name="Railgun Shell"
|
name="Railgun Shell"
|
||||||
category="Misc"
|
category="Misc"
|
||||||
|
|
||||||
price="200">
|
price="200">
|
||||||
|
|
||||||
<Deconstruct time="10">
|
<Deconstruct time="10">
|
||||||
@@ -103,8 +102,7 @@
|
|||||||
|
|
||||||
<Item
|
<Item
|
||||||
name="Nuclear Shell"
|
name="Nuclear Shell"
|
||||||
category="Misc"
|
category="Misc"
|
||||||
|
|
||||||
price="500">
|
price="500">
|
||||||
|
|
||||||
<Deconstruct time="10">
|
<Deconstruct time="10">
|
||||||
|
|||||||
@@ -11,24 +11,32 @@ namespace Barotrauma
|
|||||||
Damage, Bloodloss, Pressure, Suffocation, Drowning, Burn, Husk, Disconnected
|
Damage, Bloodloss, Pressure, Suffocation, Drowning, Burn, Husk, Disconnected
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum DamageType { None, Blunt, Slash, Burn }
|
[Flags]
|
||||||
|
public enum DamageType
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Blunt = 1,
|
||||||
|
Slash = 2,
|
||||||
|
Burn = 4,
|
||||||
|
Any = Blunt | Slash | Burn
|
||||||
|
}
|
||||||
|
|
||||||
struct AttackResult
|
struct AttackResult
|
||||||
{
|
{
|
||||||
public readonly float Damage;
|
public readonly float Damage;
|
||||||
public readonly float Bleeding;
|
public readonly float Bleeding;
|
||||||
|
|
||||||
public readonly bool HitArmor;
|
|
||||||
|
|
||||||
public AttackResult(float damage, float bleeding, bool hitArmor=false)
|
public readonly List<DamageModifier> AppliedDamageModifiers;
|
||||||
|
|
||||||
|
public AttackResult(float damage, float bleeding, List<DamageModifier> appliedDamageModifiers = null)
|
||||||
{
|
{
|
||||||
this.Damage = damage;
|
this.Damage = damage;
|
||||||
this.Bleeding = bleeding;
|
this.Bleeding = bleeding;
|
||||||
|
|
||||||
this.HitArmor = hitArmor;
|
this.AppliedDamageModifiers = appliedDamageModifiers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
partial class Attack
|
partial class Attack
|
||||||
{
|
{
|
||||||
public readonly float Range;
|
public readonly float Range;
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
|
namespace Barotrauma
|
||||||
|
{
|
||||||
|
class DamageModifier
|
||||||
|
{
|
||||||
|
[Serialize(DamageType.None, false)]
|
||||||
|
public DamageType DamageType
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serialize(1.0f, false)]
|
||||||
|
public float DamageMultiplier
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serialize(1.0f, false)]
|
||||||
|
public float BleedingMultiplier
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serialize("0.0,360", false)]
|
||||||
|
public Vector2 ArmorSector
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serialize(true, false)]
|
||||||
|
public bool IsArmor
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serialize(true, false)]
|
||||||
|
public bool DeflectProjectiles
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if CLIENT
|
||||||
|
[Serialize(DamageSoundType.None, false)]
|
||||||
|
public DamageSoundType DamageSoundType
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public DamageModifier(XElement element)
|
||||||
|
{
|
||||||
|
SerializableProperty.DeserializeProperties(this, element);
|
||||||
|
ArmorSector = new Vector2(MathHelper.ToRadians(ArmorSector.X), MathHelper.ToRadians(ArmorSector.Y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -72,10 +72,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private bool isSevered;
|
private bool isSevered;
|
||||||
private float severedFadeOutTimer;
|
private float severedFadeOutTimer;
|
||||||
|
|
||||||
private readonly Vector2 armorSector;
|
|
||||||
private readonly float armorValue;
|
|
||||||
|
|
||||||
public Vector2? MouthPos;
|
public Vector2? MouthPos;
|
||||||
|
|
||||||
//a timer for delaying when a hitsound/attacksound can be played again
|
//a timer for delaying when a hitsound/attacksound can be played again
|
||||||
@@ -91,6 +88,8 @@ namespace Barotrauma
|
|||||||
private Vector2 animTargetPos;
|
private Vector2 animTargetPos;
|
||||||
|
|
||||||
private float scale;
|
private float scale;
|
||||||
|
|
||||||
|
private List<DamageModifier> damageModifiers;
|
||||||
|
|
||||||
public float AttackTimer;
|
public float AttackTimer;
|
||||||
|
|
||||||
@@ -179,7 +178,7 @@ namespace Barotrauma
|
|||||||
public float Burnt
|
public float Burnt
|
||||||
{
|
{
|
||||||
get { return burnt; }
|
get { return burnt; }
|
||||||
set { burnt = MathHelper.Clamp(value,0.0f,100.0f); }
|
protected set { burnt = MathHelper.Clamp(value, 0.0f, 100.0f); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<WearableSprite> WearingItems
|
public List<WearableSprite> WearingItems
|
||||||
@@ -255,15 +254,7 @@ namespace Barotrauma
|
|||||||
GameMain.World.AddJoint(pullJoint);
|
GameMain.World.AddJoint(pullJoint);
|
||||||
|
|
||||||
steerForce = element.GetAttributeFloat("steerforce", 0.0f);
|
steerForce = element.GetAttributeFloat("steerforce", 0.0f);
|
||||||
|
|
||||||
//maxHealth = Math.Max(ToolBox.GetAttributeFloat(element, "health", 100.0f),1.0f);
|
|
||||||
|
|
||||||
armorSector = element.GetAttributeVector2("armorsector", Vector2.Zero);
|
|
||||||
armorSector.X = MathHelper.ToRadians(armorSector.X);
|
|
||||||
armorSector.Y = MathHelper.ToRadians(armorSector.Y);
|
|
||||||
|
|
||||||
armorValue = Math.Max(element.GetAttributeFloat("armor", 0.0f), 0.0f);
|
|
||||||
|
|
||||||
if (element.Attribute("mouthpos") != null)
|
if (element.Attribute("mouthpos") != null)
|
||||||
{
|
{
|
||||||
MouthPos = ConvertUnits.ToSimUnits(element.GetAttributeVector2("mouthpos", Vector2.Zero));
|
MouthPos = ConvertUnits.ToSimUnits(element.GetAttributeVector2("mouthpos", Vector2.Zero));
|
||||||
@@ -272,6 +263,8 @@ namespace Barotrauma
|
|||||||
body.BodyType = BodyType.Dynamic;
|
body.BodyType = BodyType.Dynamic;
|
||||||
body.FarseerBody.AngularDamping = LimbAngularDamping;
|
body.FarseerBody.AngularDamping = LimbAngularDamping;
|
||||||
|
|
||||||
|
damageModifiers = new List<DamageModifier>();
|
||||||
|
|
||||||
foreach (XElement subElement in element.Elements())
|
foreach (XElement subElement in element.Elements())
|
||||||
{
|
{
|
||||||
switch (subElement.Name.ToString().ToLowerInvariant())
|
switch (subElement.Name.ToString().ToLowerInvariant())
|
||||||
@@ -322,6 +315,9 @@ namespace Barotrauma
|
|||||||
case "attack":
|
case "attack":
|
||||||
attack = new Attack(subElement);
|
attack = new Attack(subElement);
|
||||||
break;
|
break;
|
||||||
|
case "damagemodifier":
|
||||||
|
damageModifiers.Add(new DamageModifier(subElement));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,46 +340,51 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public AttackResult AddDamage(Vector2 position, DamageType damageType, float amount, float bleedingAmount, bool playSound)
|
public AttackResult AddDamage(Vector2 position, DamageType damageType, float amount, float bleedingAmount, bool playSound)
|
||||||
{
|
{
|
||||||
bool hitArmor = false;
|
List<DamageModifier> appliedDamageModifiers = new List<DamageModifier>();
|
||||||
float totalArmorValue = 0.0f;
|
|
||||||
|
|
||||||
if (armorValue > 0.0f && SectorHit(armorSector, position))
|
foreach (DamageModifier damageModifier in damageModifiers)
|
||||||
{
|
{
|
||||||
hitArmor = true;
|
if (damageModifier.DamageType.HasFlag(damageType) && SectorHit(damageModifier.ArmorSector, position))
|
||||||
totalArmorValue += armorValue;
|
{
|
||||||
|
appliedDamageModifiers.Add(damageModifier);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (WearableSprite wearable in wearingItems)
|
foreach (WearableSprite wearable in wearingItems)
|
||||||
{
|
{
|
||||||
if (wearable.WearableComponent.ArmorValue > 0.0f &&
|
foreach (DamageModifier damageModifier in wearable.WearableComponent.DamageModifiers)
|
||||||
SectorHit(wearable.WearableComponent.ArmorSectorLimits, position))
|
|
||||||
{
|
{
|
||||||
hitArmor = true;
|
if (damageModifier.DamageType.HasFlag(damageType) && SectorHit(damageModifier.ArmorSector, position))
|
||||||
totalArmorValue += wearable.WearableComponent.ArmorValue;
|
{
|
||||||
|
appliedDamageModifiers.Add(damageModifier);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hitArmor)
|
foreach (DamageModifier damageModifier in appliedDamageModifiers)
|
||||||
{
|
{
|
||||||
totalArmorValue = Math.Max(totalArmorValue, 0.0f);
|
amount *= damageModifier.DamageMultiplier;
|
||||||
|
bleedingAmount *= damageModifier.BleedingMultiplier;
|
||||||
amount = Math.Max(0.0f, amount - totalArmorValue);
|
|
||||||
bleedingAmount = Math.Max(0.0f, bleedingAmount - totalArmorValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
if (playSound)
|
if (playSound)
|
||||||
{
|
{
|
||||||
DamageSoundType damageSoundType = (damageType == DamageType.Blunt) ? DamageSoundType.LimbBlunt : DamageSoundType.LimbSlash;
|
DamageSoundType damageSoundType = (damageType == DamageType.Blunt) ? DamageSoundType.LimbBlunt : DamageSoundType.LimbSlash;
|
||||||
if (hitArmor)
|
|
||||||
{
|
|
||||||
damageSoundType = DamageSoundType.LimbArmor;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
foreach (DamageModifier damageModifier in appliedDamageModifiers)
|
||||||
|
{
|
||||||
|
if (damageModifier.DamageSoundType != DamageSoundType.None)
|
||||||
|
{
|
||||||
|
damageSoundType = damageModifier.DamageSoundType;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SoundPlayer.PlayDamageSound(damageSoundType, amount, position);
|
SoundPlayer.PlayDamageSound(damageSoundType, amount, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
float bloodParticleAmount = hitArmor || bleedingAmount <= 0.0f ? 0 : (int)Math.Min(amount / 5, 10);
|
float bloodParticleAmount = bleedingAmount <= 0.0f ? 0 : (int)Math.Min(amount / 5, 10);
|
||||||
float bloodParticleSize = MathHelper.Clamp(amount / 50.0f, 0.1f, 1.0f);
|
float bloodParticleSize = MathHelper.Clamp(amount / 50.0f, 0.1f, 1.0f);
|
||||||
|
|
||||||
for (int i = 0; i < bloodParticleAmount; i++)
|
for (int i = 0; i < bloodParticleAmount; i++)
|
||||||
@@ -402,9 +403,14 @@ namespace Barotrauma
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (damageType == DamageType.Burn)
|
||||||
|
{
|
||||||
|
Burnt += amount * 10.0f;
|
||||||
|
}
|
||||||
|
|
||||||
damage += Math.Max(amount,bleedingAmount) / character.MaxHealth * 100.0f;
|
damage += Math.Max(amount,bleedingAmount) / character.MaxHealth * 100.0f;
|
||||||
|
|
||||||
return new AttackResult(amount, bleedingAmount, hitArmor);
|
return new AttackResult(amount, bleedingAmount, appliedDamageModifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SectorHit(Vector2 armorSector, Vector2 simPosition)
|
public bool SectorHit(Vector2 armorSector, Vector2 simPosition)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using FarseerPhysics.Dynamics.Joints;
|
|||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
||||||
namespace Barotrauma.Items.Components
|
namespace Barotrauma.Items.Components
|
||||||
@@ -255,7 +256,8 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
target.Body.ApplyLinearImpulse(item.body.LinearVelocity * item.body.Mass);
|
target.Body.ApplyLinearImpulse(item.body.LinearVelocity * item.body.Mass);
|
||||||
|
|
||||||
if (attackResult.HitArmor)
|
if (attackResult.AppliedDamageModifiers != null &&
|
||||||
|
attackResult.AppliedDamageModifiers.Any(dm => dm.DeflectProjectiles))
|
||||||
{
|
{
|
||||||
item.body.LinearVelocity *= 0.1f;
|
item.body.LinearVelocity *= 0.1f;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
@@ -27,79 +28,62 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
class Wearable : Pickable
|
class Wearable : Pickable
|
||||||
{
|
{
|
||||||
WearableSprite[] wearableSprites;
|
private WearableSprite[] wearableSprites;
|
||||||
LimbType[] limbType;
|
private LimbType[] limbType;
|
||||||
Limb[] limb;
|
private Limb[] limb;
|
||||||
|
|
||||||
private float armorValue;
|
private List<DamageModifier> damageModifiers;
|
||||||
|
|
||||||
private Vector2 armorSector;
|
public List<DamageModifier> DamageModifiers
|
||||||
|
|
||||||
[Serialize(0.0f, false)]
|
|
||||||
public float ArmorValue
|
|
||||||
{
|
{
|
||||||
get { return armorValue; }
|
get { return damageModifiers; }
|
||||||
set { armorValue = MathHelper.Clamp(value, 0.0f, 100.0f); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serialize("0.0,360.0", false)]
|
|
||||||
public Vector2 ArmorSector
|
|
||||||
{
|
|
||||||
get { return armorSector; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
armorSector.X = MathHelper.ToRadians(value.X);
|
|
||||||
armorSector.Y = MathHelper.ToRadians(value.Y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector2 ArmorSectorLimits
|
|
||||||
{
|
|
||||||
get { return armorSector; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Wearable (Item item, XElement element)
|
public Wearable (Item item, XElement element)
|
||||||
: base(item, element)
|
: base(item, element)
|
||||||
{
|
{
|
||||||
this.item = item;
|
this.item = item;
|
||||||
|
|
||||||
var sprites = element.Elements().Where(x => x.Name.ToString() == "sprite").ToList();
|
damageModifiers = new List<DamageModifier>();
|
||||||
int spriteCount = sprites.Count;
|
|
||||||
|
int spriteCount = element.Elements().Count(x => x.Name.ToString() == "sprite");
|
||||||
wearableSprites = new WearableSprite[spriteCount];
|
wearableSprites = new WearableSprite[spriteCount];
|
||||||
limbType = new LimbType[spriteCount];
|
limbType = new LimbType[spriteCount];
|
||||||
limb = new Limb[spriteCount];
|
limb = new Limb[spriteCount];
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (XElement subElement in sprites)
|
foreach (XElement subElement in element.Elements())
|
||||||
{
|
{
|
||||||
//Rectangle sourceRect = new Rectangle(
|
switch (subElement.Name.ToString().ToLower())
|
||||||
// ToolBox.GetAttributeInt(subElement, "sourcex", 1),
|
|
||||||
// ToolBox.GetAttributeInt(subElement, "sourcey", 1),
|
|
||||||
// ToolBox.GetAttributeInt(subElement, "sourcewidth", 1),
|
|
||||||
// ToolBox.GetAttributeInt(subElement, "sourceheight", 1));
|
|
||||||
|
|
||||||
if (subElement.Attribute("texture") == null)
|
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError("Item \"" + item.Name + "\" doesn't have a texture specified!");
|
case "sprite":
|
||||||
return;
|
if (subElement.Attribute("texture") == null)
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Item \"" + item.Name + "\" doesn't have a texture specified!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string spritePath = subElement.Attribute("texture").Value;
|
||||||
|
spritePath = Path.GetDirectoryName(item.Prefab.ConfigFile) + "/" + spritePath;
|
||||||
|
|
||||||
|
var sprite = new Sprite(subElement, "", spritePath);
|
||||||
|
wearableSprites[i] = new WearableSprite(this, sprite,
|
||||||
|
subElement.GetAttributeBool("hidelimb", false),
|
||||||
|
subElement.GetAttributeBool("inheritlimbdepth", true),
|
||||||
|
(LimbType)Enum.Parse(typeof(LimbType), subElement.GetAttributeString("depthlimb", "None"), true));
|
||||||
|
|
||||||
|
limbType[i] = (LimbType)Enum.Parse(typeof(LimbType),
|
||||||
|
subElement.GetAttributeString("limb", "Head"), true);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
case "damagemodifier":
|
||||||
|
damageModifiers.Add(new DamageModifier(subElement));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
string spritePath = subElement.Attribute("texture").Value;
|
|
||||||
spritePath = Path.GetDirectoryName( item.Prefab.ConfigFile)+"/"+spritePath;
|
|
||||||
|
|
||||||
var sprite = new Sprite(subElement, "", spritePath);
|
|
||||||
wearableSprites[i] = new WearableSprite(this, sprite,
|
|
||||||
subElement.GetAttributeBool("hidelimb", false),
|
|
||||||
subElement.GetAttributeBool("inheritlimbdepth", true),
|
|
||||||
(LimbType)Enum.Parse(typeof(LimbType), subElement.GetAttributeString("depthlimb", "None"), true));
|
|
||||||
|
|
||||||
limbType[i] = (LimbType)Enum.Parse(typeof(LimbType),
|
|
||||||
subElement.GetAttributeString("limb", "Head"), true);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Equip(Character character)
|
public override void Equip(Character character)
|
||||||
{
|
{
|
||||||
picker = character;
|
picker = character;
|
||||||
@@ -107,15 +91,7 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
Limb equipLimb = character.AnimController.GetLimb(limbType[i]);
|
Limb equipLimb = character.AnimController.GetLimb(limbType[i]);
|
||||||
if (equipLimb == null) continue;
|
if (equipLimb == null) continue;
|
||||||
|
|
||||||
//something is already on the limb -> unequip it
|
|
||||||
//if (equipLimb.WearingItem != null && equipLimb.WearingItem != this)
|
|
||||||
//{
|
|
||||||
// equipLimb.WearingItem.Unequip(character);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//sprite[i].Depth = equipLimb.sprite.Depth - 0.001f;
|
|
||||||
|
|
||||||
item.body.Enabled = false;
|
item.body.Enabled = false;
|
||||||
|
|
||||||
IsActive = true;
|
IsActive = true;
|
||||||
@@ -143,20 +119,9 @@ namespace Barotrauma.Items.Components
|
|||||||
Limb equipLimb = character.AnimController.GetLimb(limbType[i]);
|
Limb equipLimb = character.AnimController.GetLimb(limbType[i]);
|
||||||
if (equipLimb == null) continue;
|
if (equipLimb == null) continue;
|
||||||
|
|
||||||
//foreach (WearableSprite wearable in equipLimb.WearingItems)
|
equipLimb.WearingItems.RemoveAll(w => w != null && w == wearableSprites[i]);
|
||||||
//{
|
|
||||||
// if (wearable != wearableSprites[i]) continue;
|
|
||||||
|
|
||||||
// equipLimb.WearingItems.Remove(wearableSprites[i]);
|
|
||||||
//}
|
|
||||||
|
|
||||||
equipLimb.WearingItems.RemoveAll(w=> w!=null && w==wearableSprites[i]);
|
|
||||||
|
|
||||||
//if (equipLimb.WearingItem != this) continue;
|
|
||||||
|
|
||||||
limb[i] = null;
|
limb[i] = null;
|
||||||
//equipLimb.WearingItem = null;
|
|
||||||
//equipLimb.WearingItemSprite = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IsActive = false;
|
IsActive = false;
|
||||||
|
|||||||
@@ -761,7 +761,7 @@ namespace Barotrauma
|
|||||||
float damageAmount = attack.GetStructureDamage(deltaTime);
|
float damageAmount = attack.GetStructureDamage(deltaTime);
|
||||||
Condition -= damageAmount;
|
Condition -= damageAmount;
|
||||||
|
|
||||||
return new AttackResult(damageAmount, 0.0f, false);
|
return new AttackResult(damageAmount, 0.0f, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsInWater()
|
private bool IsInWater()
|
||||||
|
|||||||
@@ -205,8 +205,6 @@ namespace Barotrauma
|
|||||||
float dmg = (float)Math.Sqrt(size.X) * deltaTime / c.AnimController.Limbs.Length;
|
float dmg = (float)Math.Sqrt(size.X) * deltaTime / c.AnimController.Limbs.Length;
|
||||||
foreach (Limb limb in c.AnimController.Limbs)
|
foreach (Limb limb in c.AnimController.Limbs)
|
||||||
{
|
{
|
||||||
if (limb.WearingItems.Find(w => w != null && w.WearableComponent.Item.FireProof) != null) continue;
|
|
||||||
limb.Burnt += dmg * 10.0f;
|
|
||||||
c.AddDamage(limb.SimPosition, DamageType.Burn, dmg, 0, 0, false);
|
c.AddDamage(limb.SimPosition, DamageType.Burn, dmg, 0, 0, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1873,11 +1873,6 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
private void FileTransferChanged(FileSender.FileTransferOut transfer)
|
private void FileTransferChanged(FileSender.FileTransferOut transfer)
|
||||||
{
|
{
|
||||||
if (connectedClients.Any(c=> c.Connection == null))
|
|
||||||
{
|
|
||||||
int sdfgsdfg = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Client recipient = connectedClients.Find(c => c.Connection == transfer.Connection);
|
Client recipient = connectedClients.Find(c => c.Connection == transfer.Connection);
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
UpdateFileTransferIndicator(recipient);
|
UpdateFileTransferIndicator(recipient);
|
||||||
|
|||||||
@@ -3,10 +3,7 @@
|
|||||||
static class NetConfig
|
static class NetConfig
|
||||||
{
|
{
|
||||||
public const int DefaultPort = 14242;
|
public const int DefaultPort = 14242;
|
||||||
|
|
||||||
//UpdateEntity networkevents aren't sent to clients if they're further than this from the entity
|
|
||||||
public const float UpdateEntityDistance = 2500.0f;
|
|
||||||
|
|
||||||
public const int MaxPlayers = 16;
|
public const int MaxPlayers = 16;
|
||||||
|
|
||||||
public static string MasterServerUrl = GameMain.Config.MasterServerUrl;
|
public static string MasterServerUrl = GameMain.Config.MasterServerUrl;
|
||||||
@@ -20,14 +17,6 @@
|
|||||||
//send a position update to clients (in sim units)
|
//send a position update to clients (in sim units)
|
||||||
public const float ItemPosUpdateDistance = 2.0f;
|
public const float ItemPosUpdateDistance = 2.0f;
|
||||||
|
|
||||||
public const float LargeCharacterUpdateInterval = 5.0f;
|
public const float DeleteDisconnectedTime = 10.0f;
|
||||||
|
|
||||||
public const float DeleteDisconnectedTime = 10.0f;
|
|
||||||
|
|
||||||
public const float IdSendInterval = 0.2f;
|
|
||||||
public const float RerequestInterval = 0.2f;
|
|
||||||
|
|
||||||
public const int ReliableMessageBufferSize = 500;
|
|
||||||
public const int ResendAttempts = 10;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
#if DEBUG && CLIENT
|
#if DEBUG && CLIENT
|
||||||
if (GameMain.GameSession != null && GameMain.GameSession.Level != null && GameMain.GameSession.Submarine != null &&
|
if (GameMain.GameSession != null && GameMain.GameSession.Level != null && GameMain.GameSession.Submarine != null &&
|
||||||
!DebugConsole.IsOpen)
|
!DebugConsole.IsOpen && GUIComponent.KeyboardDispatcher.Subscriber == null)
|
||||||
{
|
{
|
||||||
var closestSub = Submarine.FindClosest(cam.WorldViewCenter);
|
var closestSub = Submarine.FindClosest(cam.WorldViewCenter);
|
||||||
if (closestSub == null) closestSub = GameMain.GameSession.Submarine;
|
if (closestSub == null) closestSub = GameMain.GameSession.Submarine;
|
||||||
|
|||||||
@@ -130,7 +130,15 @@ namespace Barotrauma
|
|||||||
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj + "\" to " + value + " (not a valid " + propertyInfo.PropertyType + ")", e);
|
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj + "\" to " + value + " (not a valid " + propertyInfo.PropertyType + ")", e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
propertyInfo.SetValue(obj, enumVal);
|
try
|
||||||
|
{
|
||||||
|
propertyInfo.SetValue(obj, enumVal);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString(), e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -141,45 +149,55 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (typeName)
|
try
|
||||||
{
|
{
|
||||||
case "bool":
|
switch (typeName)
|
||||||
propertyInfo.SetValue(obj, value.ToLowerInvariant() == "true", null);
|
{
|
||||||
break;
|
case "bool":
|
||||||
case "int":
|
propertyInfo.SetValue(obj, value.ToLowerInvariant() == "true", null);
|
||||||
int intVal;
|
break;
|
||||||
if (int.TryParse(value, out intVal))
|
case "int":
|
||||||
{
|
int intVal;
|
||||||
propertyInfo.SetValue(obj, intVal, null);
|
if (int.TryParse(value, out intVal))
|
||||||
}
|
{
|
||||||
break;
|
propertyInfo.SetValue(obj, intVal, null);
|
||||||
case "float":
|
}
|
||||||
float floatVal;
|
break;
|
||||||
if (float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out floatVal))
|
case "float":
|
||||||
{
|
float floatVal;
|
||||||
propertyInfo.SetValue(obj, floatVal, null);
|
if (float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out floatVal))
|
||||||
}
|
{
|
||||||
break;
|
propertyInfo.SetValue(obj, floatVal, null);
|
||||||
case "string":
|
}
|
||||||
propertyInfo.SetValue(obj, value, null);
|
break;
|
||||||
break;
|
case "string":
|
||||||
case "vector2":
|
propertyInfo.SetValue(obj, value, null);
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseVector2(value));
|
break;
|
||||||
break;
|
case "vector2":
|
||||||
case "vector3":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseVector2(value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseVector3(value));
|
break;
|
||||||
break;
|
case "vector3":
|
||||||
case "vector4":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseVector3(value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseVector4(value));
|
break;
|
||||||
break;
|
case "vector4":
|
||||||
case "color":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseVector4(value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseColor(value));
|
break;
|
||||||
break;
|
case "color":
|
||||||
case "rectangle":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseColor(value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseRect(value, true));
|
break;
|
||||||
break;
|
case "rectangle":
|
||||||
|
propertyInfo.SetValue(obj, XMLExtensions.ParseRect(value, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString(), e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,42 +233,52 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.GetType() == typeof(string))
|
try
|
||||||
{
|
{
|
||||||
switch (typeName)
|
if (value.GetType() == typeof(string))
|
||||||
{
|
{
|
||||||
case "string":
|
switch (typeName)
|
||||||
propertyInfo.SetValue(obj, value, null);
|
{
|
||||||
return true;
|
case "string":
|
||||||
case "vector2":
|
propertyInfo.SetValue(obj, value, null);
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseVector2((string)value));
|
return true;
|
||||||
return true;
|
case "vector2":
|
||||||
case "vector3":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseVector2((string)value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseVector3((string)value));
|
return true;
|
||||||
return true;
|
case "vector3":
|
||||||
case "vector4":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseVector3((string)value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseVector4((string)value));
|
return true;
|
||||||
return true;
|
case "vector4":
|
||||||
case "color":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseVector4((string)value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseColor((string)value));
|
return true;
|
||||||
return true;
|
case "color":
|
||||||
case "rectangle":
|
propertyInfo.SetValue(obj, XMLExtensions.ParseColor((string)value));
|
||||||
propertyInfo.SetValue(obj, XMLExtensions.ParseColor((string)value));
|
return true;
|
||||||
return true;
|
case "rectangle":
|
||||||
default:
|
propertyInfo.SetValue(obj, XMLExtensions.ParseRect((string)value, false));
|
||||||
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString());
|
return true;
|
||||||
DebugConsole.ThrowError("(Cannot convert a string to a " + propertyDescriptor.PropertyType.ToString() + ")");
|
default:
|
||||||
return false;
|
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString());
|
||||||
|
DebugConsole.ThrowError("(Cannot convert a string to a " + propertyDescriptor.PropertyType.ToString() + ")");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else if (propertyDescriptor.PropertyType != value.GetType())
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString());
|
||||||
|
DebugConsole.ThrowError("(Non-matching type, should be " + propertyDescriptor.PropertyType + " instead of " + value.GetType() + ")");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
propertyInfo.SetValue(obj, value, null);
|
||||||
}
|
}
|
||||||
else if (propertyDescriptor.PropertyType != value.GetType())
|
|
||||||
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString());
|
DebugConsole.ThrowError("Failed to set the value of the property \"" + Name + "\" of \"" + obj.ToString() + "\" to " + value.ToString(), e);
|
||||||
DebugConsole.ThrowError("(Non-matching type, should be " + propertyDescriptor.PropertyType + " instead of " + value.GetType() + ")");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
propertyInfo.SetValue(obj, value, null);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|||||||
@@ -1,3 +1,26 @@
|
|||||||
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
v0.7.0.1
|
||||||
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- Added console commands for modifying client permissions.
|
||||||
|
- Fixed content package setting not being saved in the settings menu.
|
||||||
|
- Item pickup sounds are only played when the controlled character picks up an item.
|
||||||
|
- Removed serverconfig.xml (the dedicated server now uses the same config file as the normal game).
|
||||||
|
- Updated the vanilla content package to version 0.7.
|
||||||
|
- Fixed entity linking in the submarine editor.
|
||||||
|
- Fixed railgun HUD crashing the game if the railgun is linked to an item that does not have an
|
||||||
|
ItemContainer component (i.e. any item that can't contain other items).
|
||||||
|
- Fixed exceptions when the player dies in the tutorial.
|
||||||
|
- Fixed the start popup saying the host is the target if the host has been selected as the traitor.
|
||||||
|
- Fixed crashes when attempting to use a railgun controller that's not connected to anything.
|
||||||
|
- Fixed autorestart counter overlapping with the campaign map in the server lobby screen.
|
||||||
|
- Fixed characters receiving damage almost exclusively to their feet when wearing a diving suit.
|
||||||
|
- Armoring reduces damage by a certain percentage, not a fixed value. Now armor doesn't make characters
|
||||||
|
invulnerable to small amounts of damage.
|
||||||
|
- The effectiveness of different types of armor depends on the type of damage. For example, diving suits
|
||||||
|
provide fairly good protection against burn and slash damage, but aren't as affective against blunt damage.
|
||||||
|
- Fixed light sources attached to limbs not rotating with the limbs.
|
||||||
|
|
||||||
---------------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------------
|
||||||
v0.7.0.0
|
v0.7.0.0
|
||||||
---------------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user