diff --git a/Subsurface/Content/InfoTexts.xml b/Subsurface/Content/InfoTexts.xml index f854b81e5..8f2fd415c 100644 --- a/Subsurface/Content/InfoTexts.xml +++ b/Subsurface/Content/InfoTexts.xml @@ -11,6 +11,7 @@ Suffocated Crushed by water pressure Burned to death + Taken over by a parasite Disconnected You have succumbed to your injuries. @@ -19,6 +20,7 @@ You have suffocated. You have been crushed by water pressure. You have burned to death. + The parasite has taken over your body. You have been disconnected from the server. Your throat feels sore @@ -28,8 +30,7 @@ You feel something moving in your throat. You try to scream but no sound comes out. + A strange chitinous appendage bursts out from your mouth. Use it to inject eggs into a living body by pressing [Attack]! + - A strange chitinous appendage bursts out from your mouth. Use it to inject eggs into a living body by pressing [Attack]! - - \ No newline at end of file diff --git a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs index d63e85977..877fe4be4 100644 --- a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs @@ -338,13 +338,13 @@ namespace Barotrauma if (!onGround || (LowestLimb.SimPosition.Y - floorY > 0.5f && stairs == null)) return; - float? ceilingY = null; - if (Submarine.PickBody(head.SimPosition, head.SimPosition + Vector2.UnitY, null, Physics.CollisionWall)!=null) - { - ceilingY = Submarine.LastPickedPosition.Y; + //float? ceilingY = null; + //if (Submarine.PickBody(head.SimPosition, head.SimPosition + Vector2.UnitY, null, Physics.CollisionWall)!=null) + //{ + // ceilingY = Submarine.LastPickedPosition.Y; - if (ceilingY - floorY < HeadPosition) Crouching = true; - } + // if (ceilingY - floorY < HeadPosition) Crouching = true; + //} getUpSpeed = getUpSpeed * Math.Max(head.SimPosition.Y - colliderPos.Y, 0.5f); @@ -456,24 +456,20 @@ namespace Barotrauma else { float movementFactor = (movement.X / 4.0f) * movement.X * Math.Sign(movement.X); - - - //MoveLimb(leftFoot, footPos, 2.5f); - - for (int i = -1; i < 2; i+=2 ) + for (int i = -1; i < 2; i += 2) { - Vector2 footPos = new Vector2( - Crouching ? waist.SimPosition.X + Math.Sign(stepSize.X*i)*Dir*0.3f : waist.SimPosition.X, - colliderPos.Y - 0.2f); + Vector2 footPos = new Vector2( + Crouching ? waist.SimPosition.X + Math.Sign(stepSize.X * i) * Dir * 0.3f : GetCenterOfMass().X, + colliderPos.Y - 0.1f); var foot = i == -1 ? rightFoot : leftFoot; - MoveLimb(foot, footPos, Math.Abs(foot.SimPosition.X - footPos.X)*50.0f); + MoveLimb(foot, footPos, Math.Abs(foot.SimPosition.X - footPos.X) * 100.0f, true); } - leftFoot.body.SmoothRotate(Dir * MathHelper.PiOver2, 5.0f); - rightFoot.body.SmoothRotate(Dir * MathHelper.PiOver2, 5.0f); + leftFoot.body.SmoothRotate(Dir * MathHelper.PiOver2, 50.0f); + rightFoot.body.SmoothRotate(Dir * MathHelper.PiOver2, 50.0f); if (!rightHand.Disabled) { @@ -1183,7 +1179,7 @@ namespace Barotrauma Vector2 position = limb.SimPosition; - if (!limb.pullJoint.Enabled && mirror) + if ((limb.pullJoint==null || !limb.pullJoint.Enabled) && mirror) { difference = limb.body.SimPosition - torso.SimPosition; difference = Vector2.Transform(difference, torsoTransform); diff --git a/Subsurface/Source/Characters/Attack.cs b/Subsurface/Source/Characters/Attack.cs index 226c91c8e..6489d4347 100644 --- a/Subsurface/Source/Characters/Attack.cs +++ b/Subsurface/Source/Characters/Attack.cs @@ -9,7 +9,7 @@ namespace Barotrauma { enum CauseOfDeath { - Damage, Bloodloss, Pressure, Suffocation, Drowning, Burn, Disconnected + Damage, Bloodloss, Pressure, Suffocation, Drowning, Burn, Husk, Disconnected } public enum DamageType { None, Blunt, Slash, Burn } diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 3cffae273..617e54b91 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -1816,6 +1816,7 @@ namespace Barotrauma bleeding = 0.0f; Oxygen = 100.0f; AnimController.StunTimer = 0.0f; + huskInfection = null; return true; } @@ -1827,7 +1828,11 @@ namespace Barotrauma if (message.ReadBoolean()) { - HuskInfectionState = message.ReadRangedSingle(0.0f, 1.0f, 4); + float infectionState = message.ReadRangedSingle(0.0f, 1.0f, 4); + if (infectionState == 0.0f) + huskInfection = null; + else + HuskInfectionState = infectionState; } break; diff --git a/Subsurface/Source/Characters/CharacterHUD.cs b/Subsurface/Source/Characters/CharacterHUD.cs index 2f8eb43c2..12e5c2cb1 100644 --- a/Subsurface/Source/Characters/CharacterHUD.cs +++ b/Subsurface/Source/Characters/CharacterHUD.cs @@ -233,11 +233,12 @@ namespace Barotrauma healthBar.Draw(spriteBatch); } - int bloodDropCount = (int)Math.Floor(character.Bleeding); - bloodDropCount = MathHelper.Clamp(bloodDropCount, 0, 5); - for (int i = 1; i < bloodDropCount; i++) + float bloodDropCount = character.Bleeding; + bloodDropCount = MathHelper.Clamp(bloodDropCount, 0.0f, 5.0f); + for (int i = 0; i < Math.Ceiling(bloodDropCount); i++) { - spriteBatch.Draw(statusIcons.Texture, new Vector2(5.0f + 20 * i, healthBar.Rect.Y - 20.0f), new Rectangle(39, 3, 15, 19), Color.White * 0.8f); + float alpha = MathHelper.Clamp(bloodDropCount-i, 0.2f, 1.0f); + spriteBatch.Draw(statusIcons.Texture, new Vector2(25.0f + 20 * i, healthBar.Rect.Y - 20.0f), new Rectangle(39, 3, 15, 19), Color.White * alpha); } float pressureFactor = (character.AnimController.CurrentHull == null) ? diff --git a/Subsurface/Source/Characters/HuskInfection.cs b/Subsurface/Source/Characters/HuskInfection.cs index b370efaad..dcd8243b0 100644 --- a/Subsurface/Source/Characters/HuskInfection.cs +++ b/Subsurface/Source/Characters/HuskInfection.cs @@ -67,7 +67,7 @@ namespace Barotrauma state = InfectionState.Dormant; - IncubationTimer += 100* deltaTime / IncubationDuration; + IncubationTimer += deltaTime / IncubationDuration; if (Character.Controlled != character) return; @@ -79,7 +79,7 @@ namespace Barotrauma private void UpdateTransitionState(float deltaTime, Character character) { - IncubationTimer += deltaTime*10.0f/ IncubationDuration; + IncubationTimer += deltaTime / IncubationDuration; if (state == InfectionState.Dormant && Character.Controlled == character) { @@ -98,7 +98,7 @@ namespace Barotrauma state = InfectionState.Active; } - character.AddDamage(CauseOfDeath.Damage, 0.5f*deltaTime, null); + character.AddDamage(CauseOfDeath.Husk, 0.5f*deltaTime, null); if (character.AnimController.limbJoints[0].LimitEnabled && (character.AnimController.CurrentHull == null ||