diff --git a/Subsurface/Content/Characters/Endworm/endworm.xml b/Subsurface/Content/Characters/Endworm/endworm.xml
index 560794eb7..a63bc2a19 100644
--- a/Subsurface/Content/Characters/Endworm/endworm.xml
+++ b/Subsurface/Content/Characters/Endworm/endworm.xml
@@ -44,12 +44,12 @@
-
+
-
+
diff --git a/Subsurface/Content/Characters/Moloch/moloch.xml b/Subsurface/Content/Characters/Moloch/moloch.xml
index aa257707d..d6f774f67 100644
--- a/Subsurface/Content/Characters/Moloch/moloch.xml
+++ b/Subsurface/Content/Characters/Moloch/moloch.xml
@@ -11,6 +11,7 @@
+
diff --git a/Subsurface/Content/Characters/Watcher/watcher.png b/Subsurface/Content/Characters/Watcher/watcher.png
index 4046c480e..d20e99f89 100644
Binary files a/Subsurface/Content/Characters/Watcher/watcher.png and b/Subsurface/Content/Characters/Watcher/watcher.png differ
diff --git a/Subsurface/Source/Characters/AI/EnemyAIController.cs b/Subsurface/Source/Characters/AI/EnemyAIController.cs
index b25c80a05..d79b4b2fc 100644
--- a/Subsurface/Source/Characters/AI/EnemyAIController.cs
+++ b/Subsurface/Source/Characters/AI/EnemyAIController.cs
@@ -344,6 +344,23 @@ namespace Barotrauma
steeringManager.SteeringSeek(attackPosition + (limb.SimPosition-SimPosition), 5.0f);
+ break;
+ case AttackType.Hit:
+ damageTarget = (wallAttackPos != Vector2.Zero && targetEntity != null) ? targetEntity : selectedAiTarget.Entity as IDamageable;
+
+ if (damageTarget == null)
+ {
+ attackTimer = limb.attack.Duration;
+ break;
+ }
+
+ if (ConvertUnits.ToDisplayUnits(Vector2.Distance(limb.SimPosition, attackPosition)) < limb.attack.Range)
+ {
+ attackTimer += deltaTime;
+ limb.body.ApplyForce(limb.Mass * limb.attack.Force * Vector2.Normalize(attackPosition - limb.SimPosition));
+ }
+
+ steeringManager.SteeringSeek(attackPosition + (limb.SimPosition-SimPosition), 5.0f);
break;
default:
attackTimer = limb.attack.Duration;
diff --git a/Subsurface/Source/Characters/Attack.cs b/Subsurface/Source/Characters/Attack.cs
index 530981cc7..489dae066 100644
--- a/Subsurface/Source/Characters/Attack.cs
+++ b/Subsurface/Source/Characters/Attack.cs
@@ -15,7 +15,7 @@ namespace Barotrauma
public enum AttackType
{
- None, PinchCW, PinchCCW
+ None, PinchCW, PinchCCW, Hit
}
struct AttackResult
@@ -47,6 +47,8 @@ namespace Barotrauma
private readonly float damage;
private readonly float bleedingDamage;
+ public readonly float Force;
+
private Sound sound;
private ParticleEmitterPrefab particleEmitterPrefab;
@@ -101,6 +103,8 @@ namespace Barotrauma
structureDamage = ToolBox.GetAttributeFloat(element, "structuredamage", 0.0f);
bleedingDamage = ToolBox.GetAttributeFloat(element, "bleedingdamage", 0.0f);
+ Force = ToolBox.GetAttributeFloat(element,"force", 0.0f);
+
Stun = ToolBox.GetAttributeFloat(element, "stun", 0.0f);
string soundPath = ToolBox.GetAttributeString(element, "sound", "");
diff --git a/Subsurface/Source/Items/Components/Label.cs b/Subsurface/Source/Items/Components/Label.cs
deleted file mode 100644
index 1bd5363ab..000000000
--- a/Subsurface/Source/Items/Components/Label.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-//using Microsoft.Xna.Framework;
-//using Microsoft.Xna.Framework.Graphics;
-//using System;
-//using System.Collections.Generic;
-//using System.Linq;
-//using System.Text;
-//using System.Xml.Linq;
-
-//namespace Subsurface.Items.Components
-//{
-// class Label : ItemComponent
-// {
-// GUITextBox textBox;
-
-// private string text;
-
-// [HasDefaultValue("", true)]
-// public string Text
-// {
-// get { return text; }
-// set
-// {
-// text = value;
-// }
-// }
-
-// public Label(Item item, XElement element)
-// : base(item, element)
-// {
-
-// }
-
-// public override bool Select(Character Character)
-// {
-// if (textBox == null)
-// {
-// textBox = new GUITextBox(Rectangle.Empty, GUI.Style, GuiFrame);
-// textBox.Wrap = true;
-// textBox.OnTextChanged = TextChanged;
-// textBox.LimitText = true;
-
-// GUIButton button = new GUIButton(new Rectangle(0,0,100,15), "OK", null, Alignment.BottomRight, GUI.Style, GuiFrame);
-// button.OnClicked = Close;
-// }
-
-// textBox.Text = text;
-
-// textBox.Select();
-
-// return base.Select(Character);
-// }
-
-// public override void DrawHUD(SpriteBatch spriteBatch, Character Character)
-// {
-// //isActive = true;
-// GuiFrame.Update((float)Physics.step);
-// GuiFrame.Draw(spriteBatch);
-
-// //int width = 300, height = 300;
-// //int x = Game1.GraphicsWidth / 2 - width / 2;
-// //int y = Game1.GraphicsHeight / 2 - height / 2 - 50;
-
-// //GUI.DrawRectangle(spriteBatch, new Rectangle(x, y, width, height), Color.Black, true);
-// if (!textBox.Selected) Character.SelectedConstruction = null;
-// }
-
-// private bool TextChanged(GUITextBox textBox, string text)
-// {
-// this.text = text;
-// item.NewComponentEvent(this, true);
-
-// return true;
-// }
-
-// private bool Close(GUIButton button, object obj)
-// {
-// textBox.Deselect();
-
-// return true;
-// }
-
-// public override void FillNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetOutgoingMessage message)
-// {
-// message.Write(Text);
-// }
-
-// public override void ReadNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetIncomingMessage message)
-// {
-// string newText = "";
-// try
-// {
-// newText = message.ReadString();
-// }
-
-// catch (Exception e)
-// {
-//#if DEBUG
-// DebugConsole.ThrowError("invalid network message", e);
-//#endif
-// return;
-// }
-
-// Text = newText;
-// }
-// }
-//}