diff --git a/Subsurface/Barotrauma.csproj b/Subsurface/Barotrauma.csproj
index 52b7a1885..0beadea18 100644
--- a/Subsurface/Barotrauma.csproj
+++ b/Subsurface/Barotrauma.csproj
@@ -939,6 +939,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/Subsurface/Content/Items/Weapons/stunbaton.ogg b/Subsurface/Content/Items/Weapons/stunbaton.ogg
new file mode 100644
index 000000000..0efb8d0d6
Binary files /dev/null and b/Subsurface/Content/Items/Weapons/stunbaton.ogg differ
diff --git a/Subsurface/Properties/AssemblyInfo.cs b/Subsurface/Properties/AssemblyInfo.cs
index 2040cb113..258624579 100644
--- a/Subsurface/Properties/AssemblyInfo.cs
+++ b/Subsurface/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.2.6.0")]
-[assembly: AssemblyFileVersion("0.2.6.0")]
+[assembly: AssemblyVersion("0.2.6.2")]
+[assembly: AssemblyFileVersion("0.2.6.2")]
diff --git a/Subsurface/Source/Characters/Limb.cs b/Subsurface/Source/Characters/Limb.cs
index c2e455649..9a8454f22 100644
--- a/Subsurface/Source/Characters/Limb.cs
+++ b/Subsurface/Source/Characters/Limb.cs
@@ -353,12 +353,12 @@ namespace Barotrauma
GameMain.ParticleManager.CreateParticle("blood",
Position,
- particleVel * Rand.Range(100.0f, 300.0f));
+ particleVel * Rand.Range(100.0f, 300.0f), 0.0f, character.AnimController.CurrentHull);
}
for (int i = 0; i < bloodAmount / 2; i++)
{
- GameMain.ParticleManager.CreateParticle("waterblood", Position, Vector2.Zero);
+ GameMain.ParticleManager.CreateParticle("waterblood", Position, Vector2.Zero, 0.0f, character.AnimController.CurrentHull);
}
damage += Math.Max(amount,bleedingAmount) / character.MaxHealth * 100.0f;
diff --git a/Subsurface/Source/Characters/Ragdoll.cs b/Subsurface/Source/Characters/Ragdoll.cs
index b135b5da1..0aa080fca 100644
--- a/Subsurface/Source/Characters/Ragdoll.cs
+++ b/Subsurface/Source/Characters/Ragdoll.cs
@@ -612,24 +612,19 @@ namespace Barotrauma
}
}
//the limb has gone through the surface of the water
- if (Math.Abs(limb.LinearVelocity.Y) > 3.0 && inWater != prevInWater)
+ if (Math.Abs(limb.LinearVelocity.Y) > 5.0f && inWater != prevInWater)
{
//create a splash particle
GameMain.ParticleManager.CreateParticle("watersplash",
new Vector2(limb.Position.X, limbHull.Surface),
new Vector2(0.0f, Math.Abs(-limb.LinearVelocity.Y * 10.0f)),
- 0.0f);
-
- //if (splash != null) splash.yLimits = ConvertUnits.ToSimUnits(
- // new Vector2(
- // limbHull.Rect.Y,
- // limbHull.Rect.Y - limbHull.Rect.Height));
+ 0.0f, limbHull);
GameMain.ParticleManager.CreateParticle("bubbles",
new Vector2(limb.Position.X, limbHull.Surface),
limb.LinearVelocity*0.001f,
- 0.0f);
+ 0.0f, limbHull);
diff --git a/Subsurface/Source/Items/Components/Holdable/Propulsion.cs b/Subsurface/Source/Items/Components/Holdable/Propulsion.cs
index 308db79e7..525f9adcc 100644
--- a/Subsurface/Source/Items/Components/Holdable/Propulsion.cs
+++ b/Subsurface/Source/Items/Components/Holdable/Propulsion.cs
@@ -89,7 +89,7 @@ namespace Barotrauma.Items.Components
if (!string.IsNullOrWhiteSpace(particles))
{
GameMain.ParticleManager.CreateParticle(particles, item.Position,
- item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi), 0.0f);
+ item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi), 0.0f, item.CurrentHull);
}
return true;
diff --git a/Subsurface/Source/Items/Components/Machines/Engine.cs b/Subsurface/Source/Items/Components/Machines/Engine.cs
index 031a53101..d86d955fc 100644
--- a/Subsurface/Source/Items/Components/Machines/Engine.cs
+++ b/Subsurface/Source/Items/Components/Machines/Engine.cs
@@ -75,7 +75,8 @@ namespace Barotrauma.Items.Components
for (int i = 0; i < 5; i++)
{
GameMain.ParticleManager.CreateParticle("bubbles", item.Position,
- -currForce/5.0f + new Vector2(Rand.Range(-100.0f, 100.0f), Rand.Range(-50f, 50f)));
+ -currForce / 5.0f + new Vector2(Rand.Range(-100.0f, 100.0f), Rand.Range(-50f, 50f)),
+ 0.0f, item.CurrentHull);
}
}
diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs
index e26b6e5f2..b708d2e21 100644
--- a/Subsurface/Source/Items/Components/Machines/Reactor.cs
+++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs
@@ -164,7 +164,7 @@ namespace Barotrauma.Items.Components
for (int i = 0; i < 10; i++)
{
var particle = GameMain.ParticleManager.CreateParticle("spark", item.Position,
- baseVel + Rand.Vector(100.0f), 0.0f);
+ baseVel + Rand.Vector(100.0f), 0.0f, item.CurrentHull);
if (particle != null) particle.Size *= Rand.Range(0.5f, 1.0f);
}
diff --git a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs
index 548f8a29e..62c650871 100644
--- a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs
+++ b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs
@@ -68,7 +68,7 @@ namespace Barotrauma.Items.Components
for (int i = 0; i < 10; i++)
{
var particle = GameMain.ParticleManager.CreateParticle("spark", pt.item.Position,
- baseVel + Rand.Vector(100.0f), 0.0f);
+ baseVel + Rand.Vector(100.0f), 0.0f, item.CurrentHull);
if (particle != null) particle.Size *= Rand.Range(0.5f, 1.0f);
}
diff --git a/Subsurface/Source/Map/Explosion.cs b/Subsurface/Source/Map/Explosion.cs
index 3c3e77a60..5c88f7e01 100644
--- a/Subsurface/Source/Map/Explosion.cs
+++ b/Subsurface/Source/Map/Explosion.cs
@@ -43,25 +43,26 @@ namespace Barotrauma
public void Explode(Vector2 simPosition)
{
Vector2 displayPosition = ConvertUnits.ToDisplayUnits(simPosition);
+
+ Hull hull = Hull.FindHull(displayPosition);
if (shockwave)
{
GameMain.ParticleManager.CreateParticle("shockwave", displayPosition,
- Vector2.Zero, 0.0f);
+ Vector2.Zero, 0.0f, hull);
}
-
for (int i = 0; i < attack.Range * 10; i++)
{
if (sparks)
{
GameMain.ParticleManager.CreateParticle("spark", displayPosition,
- Rand.Vector(Rand.Range(500.0f, 800.0f)), 0.0f);
+ Rand.Vector(Rand.Range(500.0f, 800.0f)), 0.0f, hull);
}
if (flames)
{
GameMain.ParticleManager.CreateParticle("explosionfire", displayPosition + Rand.Vector(50f),
- Rand.Vector(Rand.Range(50f, 100.0f)), 0.0f);
+ Rand.Vector(Rand.Range(50f, 100.0f)), 0.0f, hull);
}
}
@@ -80,8 +81,6 @@ namespace Barotrauma
if (force == 0.0f && attack.Stun == 0.0f && attack.GetDamage(1.0f) == 0.0f) return;
- //Hull hull = Hull.FindHull(displayPosition);
-
foreach (Character c in Character.CharacterList)
{
float dist = Vector2.Distance(c.SimPosition, simPosition);
diff --git a/Subsurface/Source/Map/Gap.cs b/Subsurface/Source/Map/Gap.cs
index 5f6eeb680..4fa897c26 100644
--- a/Subsurface/Source/Map/Gap.cs
+++ b/Subsurface/Source/Map/Gap.cs
@@ -254,7 +254,7 @@ namespace Barotrauma
UpdateRoomToRoom(deltaTime);
}
- if (FlowForce.Length() > 150.0f && flowTargetHull != null && flowTargetHull.Volume < flowTargetHull.FullVolume)
+ if (LerpedFlowForce.Length() > 150.0f && flowTargetHull != null && flowTargetHull.Volume < flowTargetHull.FullVolume)
{
//UpdateFlowForce();
diff --git a/Subsurface/Source/Map/Hull.cs b/Subsurface/Source/Map/Hull.cs
index 8d2a10cf4..5573385fa 100644
--- a/Subsurface/Source/Map/Hull.cs
+++ b/Subsurface/Source/Map/Hull.cs
@@ -271,7 +271,7 @@ namespace Barotrauma
{
GameMain.ParticleManager.CreateParticle("mist",
new Vector2(rect.X + WaveWidth * i,surface + waveY[i]),
- new Vector2(0.0f, -50.0f));
+ new Vector2(0.0f, -50.0f), 0.0f, this);
}
waveY[i] = waveY[i] + waveVel[i];
diff --git a/Subsurface/Source/Particles/Particle.cs b/Subsurface/Source/Particles/Particle.cs
index cfb65921d..9cacf2284 100644
--- a/Subsurface/Source/Particles/Particle.cs
+++ b/Subsurface/Source/Particles/Particle.cs
@@ -73,6 +73,9 @@ namespace Barotrauma.Particles
spriteIndex = Rand.Int(prefab.Sprites.Count);
+ currentHull = Hull.FindHull(position, hullGuess);
+ if (currentHull == null) position = Submarine.Loaded == null ? position : position + Submarine.Loaded.Position;
+
this.position = position;
prevPosition = position;
@@ -102,8 +105,6 @@ namespace Barotrauma.Particles
if (prefab.DeleteOnCollision || prefab.CollidesWithWalls)
{
- currentHull = Hull.FindHull(position, hullGuess);
-
hullGaps = currentHull==null ? new List() : currentHull.FindGaps();
//hullLimits = new List();
//hullLimits = FindLimits(position);
@@ -253,7 +254,6 @@ namespace Barotrauma.Particles
public void Draw(SpriteBatch spriteBatch)
{
drawPosition = Physics.Interpolate(prevPosition, position);
- drawPosition.Y = -drawPosition.Y;
float drawRotation = Physics.Interpolate(prevRotation, rotation);
//drawPosition = ConvertUnits.ToDisplayUnits(drawPosition);
@@ -263,10 +263,14 @@ namespace Barotrauma.Particles
if (prefab.GrowTime>0.0f && totalLifeTime-lifeTime < prefab.GrowTime)
{
drawSize *= ((totalLifeTime - lifeTime) / prefab.GrowTime);
-
}
- prefab.Sprites[spriteIndex].Draw(spriteBatch, drawPosition, color * alpha,
+ Vector2 screenSpacePos = currentHull == null && Submarine.Loaded != null ? drawPosition - Submarine.Loaded.Position : drawPosition;
+ screenSpacePos.Y = -screenSpacePos.Y;
+
+ prefab.Sprites[spriteIndex].Draw(spriteBatch,
+ screenSpacePos,
+ color * alpha,
prefab.Sprites[spriteIndex].origin, drawRotation,
drawSize, SpriteEffects.None, prefab.Sprites[spriteIndex].Depth);
diff --git a/Subsurface/Source/Particles/ParticleEmitter.cs b/Subsurface/Source/Particles/ParticleEmitter.cs
index 99b97ab0b..0b9509020 100644
--- a/Subsurface/Source/Particles/ParticleEmitter.cs
+++ b/Subsurface/Source/Particles/ParticleEmitter.cs
@@ -51,14 +51,14 @@ namespace Barotrauma.Particles
ParticleAmount = ToolBox.GetAttributeInt(element, "particleamount", 1);
}
- public void Emit(Vector2 position)
+ public void Emit(Vector2 position, Hull hullGuess = null)
{
for (int i = 0; i