Removed DamageSoundType and replaced it with a string "tag" instead to allow mod creators to create custom damage sounds
Fixed damagemodifier sounds being completely ignored due to a variable misname Added structure damage possibility for melee weapons so you can break down windows with a crowbar in spectacular fashion (it's clearly a very inferior method to plasma cutters though) Clown hitsounds are in now which is awesome. Beat up some clowns!
This commit is contained in:
@@ -35,7 +35,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (impact > ImpactTolerance)
|
if (impact > ImpactTolerance)
|
||||||
{
|
{
|
||||||
SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, strongestImpact, Collider);
|
SoundPlayer.PlayDamageSound("LimbBlunt", strongestImpact, Collider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,26 +10,19 @@ using System.Xml.Linq;
|
|||||||
|
|
||||||
namespace Barotrauma
|
namespace Barotrauma
|
||||||
{
|
{
|
||||||
public enum DamageSoundType
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
StructureBlunt, StructureSlash,
|
|
||||||
LimbBlunt, LimbSlash, LimbArmor
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct DamageSound
|
public struct DamageSound
|
||||||
{
|
{
|
||||||
//the range of inflicted damage where the sound can be played
|
//the range of inflicted damage where the sound can be played
|
||||||
//(10.0f, 30.0f) would be played when the inflicted damage is between 10 and 30
|
//(10.0f, 30.0f) would be played when the inflicted damage is between 10 and 30
|
||||||
public readonly Vector2 damageRange;
|
public readonly Vector2 damageRange;
|
||||||
|
|
||||||
public readonly DamageSoundType damageType;
|
public readonly string damageType;
|
||||||
|
|
||||||
public readonly Sound sound;
|
public readonly Sound sound;
|
||||||
|
|
||||||
public readonly string requiredTag;
|
public readonly string requiredTag;
|
||||||
|
|
||||||
public DamageSound(Sound sound, Vector2 damageRange, DamageSoundType damageType, string requiredTag = "")
|
public DamageSound(Sound sound, Vector2 damageRange, string damageType, string requiredTag = "")
|
||||||
{
|
{
|
||||||
this.sound = sound;
|
this.sound = sound;
|
||||||
this.damageRange = damageRange;
|
this.damageRange = damageRange;
|
||||||
@@ -161,8 +154,7 @@ namespace Barotrauma
|
|||||||
Sound damageSound = Sound.Load(subElement.GetAttributeString("file", ""), false);
|
Sound damageSound = Sound.Load(subElement.GetAttributeString("file", ""), false);
|
||||||
if (damageSound == null) continue;
|
if (damageSound == null) continue;
|
||||||
|
|
||||||
DamageSoundType damageSoundType = DamageSoundType.None;
|
string damageSoundType = subElement.GetAttributeString("damagesoundtype", "None");
|
||||||
Enum.TryParse<DamageSoundType>(subElement.GetAttributeString("damagesoundtype", "None"), false, out damageSoundType);
|
|
||||||
|
|
||||||
damageSounds.Add(new DamageSound(
|
damageSounds.Add(new DamageSound(
|
||||||
damageSound,
|
damageSound,
|
||||||
@@ -442,14 +434,14 @@ namespace Barotrauma
|
|||||||
SplashSounds[splashIndex].Play(1.0f, 800.0f, worldPosition);
|
SplashSounds[splashIndex].Play(1.0f, 800.0f, worldPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PlayDamageSound(DamageSoundType damageType, float damage, PhysicsBody body)
|
public static void PlayDamageSound(string damageType, float damage, PhysicsBody body)
|
||||||
{
|
{
|
||||||
Vector2 bodyPosition = body.DrawPosition;
|
Vector2 bodyPosition = body.DrawPosition;
|
||||||
|
|
||||||
PlayDamageSound(damageType, damage, bodyPosition, 800.0f);
|
PlayDamageSound(damageType, damage, bodyPosition, 800.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PlayDamageSound(DamageSoundType damageType, float damage, Vector2 position, float range = 2000.0f, List<string> tags = null)
|
public static void PlayDamageSound(string damageType, float damage, Vector2 position, float range = 2000.0f, List<string> tags = null)
|
||||||
{
|
{
|
||||||
damage = MathHelper.Clamp(damage+Rand.Range(-10.0f, 10.0f), 0.0f, 100.0f);
|
damage = MathHelper.Clamp(damage+Rand.Range(-10.0f, 10.0f), 0.0f, 100.0f);
|
||||||
var sounds = damageSounds.FindAll(s =>
|
var sounds = damageSounds.FindAll(s =>
|
||||||
|
|||||||
@@ -88,9 +88,8 @@
|
|||||||
<sprite texture="clownpants.png" limb="LeftFoot" sound="footstep_clown" sourcerect="65,41,15,39" origin="0.5,0.35" depth="0.15" hidelimb="true"/>
|
<sprite texture="clownpants.png" limb="LeftFoot" sound="footstep_clown" sourcerect="65,41,15,39" origin="0.5,0.35" depth="0.15" hidelimb="true"/>
|
||||||
|
|
||||||
<!-- HENK -->
|
<!-- HENK -->
|
||||||
<!-- DamageSound isn't played, not even for diving suits/ballistic helmet/armor. Needs looking into.
|
|
||||||
<damagemodifier damagetype="Blunt" armorsector="0.0,360.0" damagemultiplier="1.2" damagesound="LimbClown"/>
|
<damagemodifier damagetype="Blunt" armorsector="0.0,360.0" damagemultiplier="1.2" damagesound="LimbClown"/>
|
||||||
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="1.2" damagesound="LimbClown"/> -->
|
<damagemodifier damagetype="Slash" armorsector="0.0,360.0" damagemultiplier="1.2" damagesound="LimbClown"/>
|
||||||
</Wearable>
|
</Wearable>
|
||||||
</Item>
|
</Item>
|
||||||
</Items>
|
</Items>
|
||||||
|
|||||||
@@ -181,7 +181,7 @@
|
|||||||
|
|
||||||
<MeleeWeapon slots="Any,RightHand,LeftHand"
|
<MeleeWeapon slots="Any,RightHand,LeftHand"
|
||||||
aimpos="50,0" handle1="-5,0" holdangle="30" reload="1.0">
|
aimpos="50,0" handle1="-5,0" holdangle="30" reload="1.0">
|
||||||
<Attack damage="5" stun="0.2" damagetype="Blunt" sound="Content/Items/Weapons/smack.ogg"/>
|
<Attack damage="5" structuredamage="5" stun="0.2" damagetype="Blunt" sound="Content/Items/Weapons/smack.ogg"/>
|
||||||
</MeleeWeapon>
|
</MeleeWeapon>
|
||||||
</Item>
|
</Item>
|
||||||
|
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
|
|
||||||
<MeleeWeapon slots="RightHand+LeftHand,Any"
|
<MeleeWeapon slots="RightHand+LeftHand,Any"
|
||||||
controlpose="true" aimpos="50,0" handle1="-5,0" handle2="-3,5" holdangle="30" reload="1.7">
|
controlpose="true" aimpos="50,0" handle1="-5,0" handle2="-3,5" holdangle="30" reload="1.7">
|
||||||
<Attack damage="20" stun="0.6" damagetype="Blunt" sound="Content/Items/Weapons/smack.ogg"/>
|
<Attack damage="20" structuredamage="10" stun="0.6" damagetype="Blunt" sound="Content/Items/Weapons/smack.ogg"/>
|
||||||
</MeleeWeapon>
|
</MeleeWeapon>
|
||||||
</Item>
|
</Item>
|
||||||
|
|
||||||
|
|||||||
@@ -1000,7 +1000,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
target.AddDamage(CauseOfDeath.Bloodloss, 1.0f, character);
|
target.AddDamage(CauseOfDeath.Bloodloss, 1.0f, character);
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, 25.0f, targetTorso.body);
|
SoundPlayer.PlayDamageSound("LimbBlunt", 25.0f, targetTorso.body);
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
[Serialize(DamageSoundType.None, false)]
|
[Serialize("", false)]
|
||||||
public DamageSoundType DamageSoundType
|
public string DamageSound
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
private set;
|
private set;
|
||||||
|
|||||||
@@ -372,13 +372,13 @@ namespace Barotrauma
|
|||||||
#if CLIENT
|
#if CLIENT
|
||||||
if (playSound)
|
if (playSound)
|
||||||
{
|
{
|
||||||
DamageSoundType damageSoundType = (damageType == DamageType.Blunt) ? DamageSoundType.LimbBlunt : DamageSoundType.LimbSlash;
|
string damageSoundType = (damageType == DamageType.Blunt) ? "LimbBlunt" : "LimbSlash";
|
||||||
|
|
||||||
foreach (DamageModifier damageModifier in appliedDamageModifiers)
|
foreach (DamageModifier damageModifier in appliedDamageModifiers)
|
||||||
{
|
{
|
||||||
if (damageModifier.DamageSoundType != DamageSoundType.None)
|
if (!string.IsNullOrWhiteSpace(damageModifier.DamageSound))
|
||||||
{
|
{
|
||||||
damageSoundType = damageModifier.DamageSoundType;
|
damageSoundType = damageModifier.DamageSound;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -384,7 +384,7 @@ namespace Barotrauma.Items.Components
|
|||||||
if (Math.Sign(diff) != dir)
|
if (Math.Sign(diff) != dir)
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, 1.0f, body);
|
SoundPlayer.PlayDamageSound("LimbBlunt", 1.0f, body);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (isHorizontal)
|
if (isHorizontal)
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
Character targetCharacter = null;
|
Character targetCharacter = null;
|
||||||
Limb targetLimb = null;
|
Limb targetLimb = null;
|
||||||
|
Structure targetStructure = null;
|
||||||
|
|
||||||
if (f2.Body.UserData is Limb)
|
if (f2.Body.UserData is Limb)
|
||||||
{
|
{
|
||||||
@@ -224,8 +225,12 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
else if (f2.Body.UserData is Character)
|
else if (f2.Body.UserData is Character)
|
||||||
{
|
{
|
||||||
|
|
||||||
targetCharacter = (Character)f2.Body.UserData;
|
targetCharacter = (Character)f2.Body.UserData;
|
||||||
|
targetLimb = targetCharacter.AnimController.GetLimb(LimbType.Torso); //Otherwise armor can be bypassed in strange ways
|
||||||
|
}
|
||||||
|
else if (f2.Body.UserData is Structure)
|
||||||
|
{
|
||||||
|
targetStructure = (Structure)f2.Body.UserData;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -236,14 +241,22 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
if (attack != null)
|
if (attack != null)
|
||||||
{
|
{
|
||||||
if (targetLimb == null)
|
if (targetLimb != null)
|
||||||
{
|
{
|
||||||
attack.DoDamageToLimb(user, targetLimb, item.WorldPosition, 1.0f);
|
attack.DoDamageToLimb(user, targetLimb, item.WorldPosition, 1.0f);
|
||||||
}
|
}
|
||||||
else
|
else if (targetCharacter != null)
|
||||||
{
|
{
|
||||||
attack.DoDamage(user, targetCharacter, item.WorldPosition, 1.0f);
|
attack.DoDamage(user, targetCharacter, item.WorldPosition, 1.0f);
|
||||||
}
|
}
|
||||||
|
else if (targetStructure != null)
|
||||||
|
{
|
||||||
|
attack.DoDamage(user, targetStructure, item.WorldPosition, 1.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RestoreCollision();
|
RestoreCollision();
|
||||||
@@ -251,7 +264,7 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
if (GameMain.Client != null) return true;
|
if (GameMain.Client != null) return true;
|
||||||
|
|
||||||
if (GameMain.Server != null)
|
if (GameMain.Server != null && targetCharacter != null) //TODO: Log structure hits
|
||||||
{
|
{
|
||||||
GameMain.Server.CreateEntityEvent(item, new object[] { Networking.NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnUse, targetCharacter.ID });
|
GameMain.Server.CreateEntityEvent(item, new object[] { Networking.NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnUse, targetCharacter.ID });
|
||||||
|
|
||||||
@@ -263,8 +276,9 @@ namespace Barotrauma.Items.Components
|
|||||||
logStr += " on " + targetCharacter.LogName + ".";
|
logStr += " on " + targetCharacter.LogName + ".";
|
||||||
Networking.GameServer.Log(logStr, Networking.ServerLog.MessageType.Attack);
|
Networking.GameServer.Log(logStr, Networking.ServerLog.MessageType.Attack);
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyStatusEffects(ActionType.OnUse, 1.0f, targetLimb.character);
|
if (targetCharacter != null) //TODO: Allow OnUse to happen on structures too maybe??
|
||||||
|
ApplyStatusEffects(ActionType.OnUse, 1.0f, targetCharacter != null ? targetCharacter : null);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -507,7 +507,7 @@ namespace Barotrauma
|
|||||||
float impact = Vector2.Dot(f2.Body.LinearVelocity, -normal)*f2.Body.Mass*0.1f;
|
float impact = Vector2.Dot(f2.Body.LinearVelocity, -normal)*f2.Body.Mass*0.1f;
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
SoundPlayer.PlayDamageSound(DamageSoundType.StructureBlunt, impact,
|
SoundPlayer.PlayDamageSound("StructureBlunt", impact,
|
||||||
new Vector2(
|
new Vector2(
|
||||||
sections[section].rect.X + sections[section].rect.Width / 2,
|
sections[section].rect.X + sections[section].rect.Width / 2,
|
||||||
sections[section].rect.Y - sections[section].rect.Height / 2), tags: Tags);
|
sections[section].rect.Y - sections[section].rect.Height / 2), tags: Tags);
|
||||||
@@ -663,7 +663,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (playSound)// && !SectionBodyDisabled(i))
|
if (playSound)// && !SectionBodyDisabled(i))
|
||||||
{
|
{
|
||||||
DamageSoundType damageSoundType = (attack.DamageType == DamageType.Blunt) ? DamageSoundType.StructureBlunt : DamageSoundType.StructureSlash;
|
string damageSoundType = (attack.DamageType == DamageType.Blunt) ? "StructureBlunt" : "StructureSlash";
|
||||||
SoundPlayer.PlayDamageSound(damageSoundType, damageAmount, worldPosition, tags: Tags);
|
SoundPlayer.PlayDamageSound(damageSoundType, damageAmount, worldPosition, tags: Tags);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -665,7 +665,7 @@ namespace Barotrauma
|
|||||||
if (maxDamageStructure != null)
|
if (maxDamageStructure != null)
|
||||||
{
|
{
|
||||||
SoundPlayer.PlayDamageSound(
|
SoundPlayer.PlayDamageSound(
|
||||||
DamageSoundType.StructureBlunt,
|
"StructureBlunt",
|
||||||
impact * 10.0f,
|
impact * 10.0f,
|
||||||
ConvertUnits.ToDisplayUnits(lastContactPoint),
|
ConvertUnits.ToDisplayUnits(lastContactPoint),
|
||||||
MathHelper.Clamp(maxDamage * 4.0f, 1000.0f, 4000.0f),
|
MathHelper.Clamp(maxDamage * 4.0f, 1000.0f, 4000.0f),
|
||||||
|
|||||||
Reference in New Issue
Block a user