Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit 9324d3d

Browse files
committed
Added breach ability to the Remote Explosive, where the MO it is directly attached to will automatically gib if weak enough
Minor Explosives tweaks (wip)
1 parent 7b3fd87 commit 9324d3d

File tree

2 files changed

+37
-36
lines changed

2 files changed

+37
-36
lines changed

Base.rte/Devices/Explosives/FragGrenade/FragGrenade.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ AddDevice = TDExplosive
3636
DeepCheck = 0
3737
JointStrength = 75
3838
JointStiffness = 0.5
39-
DrawAfterParent = 1
39+
DrawAfterParent = 0
4040
DetonationSound = Sound
4141
AddSample = ContentFile
4242
Path = Base.rte/Sounds/Explosions/Explode1.wav

Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveSet.lua

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ function Create(self)
1818
coalitionC4TableA[self.tableNum] = self;
1919
coalitionC4TableB[self.tableNum] = self.alliedTeam;
2020

21+
self.breachStrength = 100;
2122
end
2223

2324
function Update(self)
@@ -27,23 +28,30 @@ function Update(self)
2728
self.ToSettle = false;
2829
elseif self.Sharpness == 1 then
2930
self.ToDelete = true;
30-
elseif self.Sharpness == 2 then
31+
elseif self.Sharpness == 2 then -- Explode
32+
-- Gib the thing we're attached to if it's fragile enough
33+
if self.target and IsMOSRotating(self.target) then
34+
local targetStrength = math.sqrt(1 + math.abs(self.target.GibWoundLimit - self.target.WoundCount)) * (self.target.Material.StructuralIntegrity * 0.1 + math.sqrt(self.target.Diameter + self.target.Mass));
35+
if targetStrength < self.breachStrength then
36+
self.target:GibThis();
37+
end
38+
end
3139
self:GibThis();
3240
end
3341

3442
if self.actionPhase == 0 then
35-
local rayHitPos = Vector(0,0);
43+
local rayHitPos = Vector();
3644
local rayHit = false;
37-
for i = 1, 15 do
38-
local checkPos = self.Pos + Vector(self.Vel.X,self.Vel.Y):SetMagnitude(i);
39-
local checkPix = SceneMan:GetMOIDPixel(checkPos.X,checkPos.Y);
45+
local checkVec = Vector(self.Vel.X, self.Vel.Y):SetMagnitude(self.Radius + self.Vel.Magnitude * 0.3);
46+
for i = 1, 2 do
47+
local checkPos = self.Pos + (checkVec /i);
48+
local checkPix = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y);
4049
if checkPix ~= rte.NoMOID then
41-
checkPos = checkPos + SceneMan:ShortestDistance(checkPos,self.Pos,SceneMan.SceneWrapsX):SetMagnitude(3);
42-
self.target = MovableMan:GetMOFromID(checkPix);
43-
self.stickpositionX = checkPos.X-self.target.Pos.X;
44-
self.stickpositionY = checkPos.Y-self.target.Pos.Y;
45-
self.stickrotation = self.target.RotAngle;
46-
self.stickdirection = self.RotAngle;
50+
checkPos = checkPos + SceneMan:ShortestDistance(checkPos, self.Pos, SceneMan.SceneWrapsX):SetMagnitude(3);
51+
self.target = ToMOSRotating(MovableMan:GetMOFromID(checkPix));
52+
self.stickPosition = SceneMan:ShortestDistance(self.target.Pos, checkPos, SceneMan.SceneWrapsX);
53+
self.stickRotation = self.target.RotAngle;
54+
self.stickDirection = self.RotAngle;
4755
local soundfx = CreateAEmitter("Remote Explosive Sound Activate");
4856
soundfx.Pos = self.Pos;
4957
MovableMan:AddParticle(soundfx);
@@ -52,50 +60,43 @@ function Update(self)
5260
break;
5361
end
5462
end
55-
if rayHit == true then
63+
if rayHit then
5664
self.actionPhase = 1;
57-
else
58-
if SceneMan:CastStrengthRay(self.Pos,Vector(self.Vel.X,self.Vel.Y):SetMagnitude(15),0,rayHitPos,0,0,SceneMan.SceneWrapsX) == true then
59-
self.Pos = rayHitPos + SceneMan:ShortestDistance(rayHitPos,self.Pos,SceneMan.SceneWrapsX):SetMagnitude(3);
60-
self.PinStrength = 1000;
61-
self.AngularVel = 0;
62-
self.stuck = true;
63-
self.actionPhase = 2;
64-
local soundfx = CreateAEmitter("Remote Explosive Sound Activate");
65-
soundfx.Pos = self.Pos;
66-
MovableMan:AddParticle(soundfx);
67-
end
65+
elseif SceneMan:CastStrengthRay(self.Pos, checkVec, 0, rayHitPos, 1, 0, SceneMan.SceneWrapsX) then
66+
self.Pos = rayHitPos + SceneMan:ShortestDistance(rayHitPos, self.Pos, SceneMan.SceneWrapsX):SetMagnitude(3);
67+
self.PinStrength = 1000;
68+
self.AngularVel = 0;
69+
self.stuck = true;
70+
self.actionPhase = 2;
71+
local soundfx = CreateAEmitter("Remote Explosive Sound Activate");
72+
soundfx.Pos = self.Pos;
73+
MovableMan:AddParticle(soundfx);
6874
end
6975
elseif self.actionPhase == 1 then
70-
if self.target ~= nil and self.target.ID ~= 255 then
71-
self.Pos = self.target.Pos + Vector(self.stickpositionX,self.stickpositionY):RadRotate(self.target.RotAngle-self.stickrotation);
72-
self.RotAngle = self.stickdirection+(self.target.RotAngle-self.stickrotation);
76+
if self.target and self.target.ID ~= rte.NoMOID then
77+
self.Pos = self.target.Pos + Vector(self.stickPosition.X, self.stickPosition.Y):RadRotate(self.target.RotAngle - self.stickRotation);
78+
self.RotAngle = self.stickDirection + (self.target.RotAngle - self.stickRotation);
7379
self.PinStrength = 1000;
74-
self.Vel = Vector(0,0);
80+
self.Vel = Vector();
7581
else
7682
self.PinStrength = 0;
7783
self.actionPhase = 0;
7884
end
7985
end
80-
81-
if self.stuck == true then
86+
if self.stuck then
8287
if self.blinkTimer:IsPastSimMS(500) then
8388
self.blinkTimer:Reset();
8489
if self.blink == false then
8590
self.blink = true;
86-
self.Frame = (self.alliedTeam+1)*2;
91+
self.Frame = (self.alliedTeam + 1) * 2;
8792
else
8893
self.blink = false;
89-
self.Frame = ((self.alliedTeam+1)*2)+1;
94+
self.Frame = ((self.alliedTeam + 1) * 2) + 1;
9095
end
9196
end
9297
end
93-
9498
end
95-
9699
function Destroy(self)
97-
98100
coalitionC4TableA[self.tableNum] = nil;
99101
coalitionC4TableB[self.tableNum] = nil;
100-
101102
end

0 commit comments

Comments
 (0)