diff --git a/Subsurface/Content/Characters/Crawler/crawler.xml b/Subsurface/Content/Characters/Crawler/crawler.xml
index 709b2fb1b..ca7e38e98 100644
--- a/Subsurface/Content/Characters/Crawler/crawler.xml
+++ b/Subsurface/Content/Characters/Crawler/crawler.xml
@@ -30,7 +30,7 @@
-
+
diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs
index d69420376..9f78e2aff 100644
--- a/Subsurface/Source/Characters/Character.cs
+++ b/Subsurface/Source/Characters/Character.cs
@@ -763,19 +763,39 @@ namespace Barotrauma
attackPos,
AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(),
Physics.CollisionCharacter | Physics.CollisionWall);
-
+
IDamageable attackTarget = null;
if (body != null)
{
- if (body.UserData is IDamageable)
- {
- attackTarget = (IDamageable)body.UserData;
- }
- else if (body.UserData is Limb)
- {
- attackTarget = ((Limb)body.UserData).character;
- }
attackPos = Submarine.LastPickedPosition;
+
+ if (body != null && body.UserData is Submarine)
+ {
+ var sub = ((Submarine)body.UserData);
+
+ body = Submarine.PickBody(
+ attackLimb.SimPosition - ((Submarine)body.UserData).SimPosition,
+ attackPos - ((Submarine)body.UserData).SimPosition,
+ AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(),
+ Physics.CollisionWall);
+
+ if (body != null)
+ {
+ attackPos = Submarine.LastPickedPosition + sub.SimPosition;
+ attackTarget = body.UserData as IDamageable;
+ }
+ }
+ else
+ {
+ if (body.UserData is IDamageable)
+ {
+ attackTarget = (IDamageable)body.UserData;
+ }
+ else if (body.UserData is Limb)
+ {
+ attackTarget = ((Limb)body.UserData).character;
+ }
+ }
}
attackLimb.UpdateAttack(deltaTime, attackPos, attackTarget);
diff --git a/Subsurface/Source/Characters/Limb.cs b/Subsurface/Source/Characters/Limb.cs
index 8a86cc5a6..dc5e5ada9 100644
--- a/Subsurface/Source/Characters/Limb.cs
+++ b/Subsurface/Source/Characters/Limb.cs
@@ -499,7 +499,8 @@ namespace Barotrauma
float dist = ConvertUnits.ToDisplayUnits(Vector2.Distance(SimPosition, attackPosition));
AttackTimer += deltaTime;
- body.ApplyTorque(Mass * character.AnimController.Dir * attack.Torque);
+
+ body.ApplyTorque(Mass * character.AnimController.Dir * attack.Torque);
if (dist < attack.Range * 0.5f)
{