diff --git a/.github/workflows/workshop-upload.yml b/.github/workflows/workshop-upload.yml new file mode 100644 index 00000000..2e618d5f --- /dev/null +++ b/.github/workflows/workshop-upload.yml @@ -0,0 +1,38 @@ +name: Deploy to Workshop + +on: + push: + branches: + - master + workflow_dispatch: + +jobs: + deploy: + if: github.repository == 'ACF-Team/ACF-3-Missiles' + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + path: project + + - name: Create Commit Version File + shell: bash + run: | + mkdir -p ${{ github.workspace }}/project/data_static/acf + echo "${{ github.sha }}" > ${{ github.workspace }}/project/data_static/acf/acf-3-missiles-version.txt + + - name: Upload to Workshop + uses: CFC-Servers/gmod-upload@master + with: + id: 3248769787 + changelog: "${{ github.event.head_commit.message }}" + title: "[ACF-3] Armored Combat Framework - Missiles" + type: "tool" + tag1: "build" + tag2: "fun" + tag3: "realism" + env: + STEAM_USERNAME: ${{ secrets.ACF_STEAM_ACCOUNT }} + STEAM_PASSWORD: ${{ secrets.ACF_STEAM_PASSWORD }} \ No newline at end of file diff --git a/lua/acf/core/utilities/entity_tracking_sv.lua b/lua/acf/core/utilities/entity_tracking_sv.lua index 2ee36213..ee98933e 100644 --- a/lua/acf/core/utilities/entity_tracking_sv.lua +++ b/lua/acf/core/utilities/entity_tracking_sv.lua @@ -1,8 +1,9 @@ -local ACF = ACF -local Clock = ACF.Utilities.Clock -local NextUpdate = 0 -local Entities = {} -local Ancestors = {} +local ACF = ACF +local Clock = ACF.Utilities.Clock +local Contraption = ACF.Contraption +local NextUpdate = 0 +local Entities = {} +local Ancestors = {} local Whitelist = { -- Garry's Mod entities @@ -40,7 +41,7 @@ local Whitelist = { } local function GetAncestor(Entity) - local Ancestor = ACF_GetAncestor(Entity) + local Ancestor = Contraption.GetAncestor(Entity) if not IsValid(Ancestor) then return end if Ancestor == Entity then return end diff --git a/lua/acf/entities/fuzes/radio.lua b/lua/acf/entities/fuzes/radio.lua index 1398f502..e02b39d7 100644 --- a/lua/acf/entities/fuzes/radio.lua +++ b/lua/acf/entities/fuzes/radio.lua @@ -11,6 +11,6 @@ else if not Target then return false end - return (Missile.Position + Missile.LastVel):Distance(Target) <= self.Distance + return Missile.Position:Distance(Target) <= self.Distance end end diff --git a/lua/acf/entities/guidance/wire_mclos.lua b/lua/acf/entities/guidance/wire_mclos.lua index ce95fb63..b803dbb4 100644 --- a/lua/acf/entities/guidance/wire_mclos.lua +++ b/lua/acf/entities/guidance/wire_mclos.lua @@ -1,5 +1,6 @@ local ACF = ACF local Guidances = ACF.Classes.Guidances +local Sounds = ACF.Utilities.Sounds local Guidance = Guidances.Register("Wire (MCLOS)", "Radio (MCLOS)") function Guidance:Configure(Missile) @@ -30,7 +31,7 @@ else LastFired.GuidanceData:SnapRope(LastFired) end - self.Rope = constraint.CreateKeyframeRope(Vector(), 0.1, "cable/cable2", nil, self.Source, self.InPos, 0, Missile, self.OutPos, 0) + self.Rope = constraint.CreateKeyframeRope(Vector(), 0.1, "acf/core/wire", nil, self.Source, self.InPos, 0, Missile, self.OutPos, 0) self.Rope:SetKeyValue("Width", 0.1) end @@ -54,7 +55,7 @@ else self.Rope = nil if IsValid(self.Source) then - self.Source:EmitSound(SnapSound:format(math.random(3)), nil, nil, ACF.Volume) + Sounds.SendSound(self.Source, SnapSound:format(math.random(3)), nil, nil, 1) end end end diff --git a/lua/effects/acf_glatgmexplosion.lua b/lua/effects/acf_glatgmexplosion.lua index 994d2240..0eb364e7 100644 --- a/lua/effects/acf_glatgmexplosion.lua +++ b/lua/effects/acf_glatgmexplosion.lua @@ -1,6 +1,6 @@ local TraceData = { start = true, endpos = true, mask = true } local TraceLine = util.TraceLine - +local Sounds = ACF.Utilities.Sounds function EFFECT:Init(Data) self.DirVec = Data:GetNormal() @@ -31,8 +31,8 @@ function EFFECT:Airburst() local Mult = self.ParticleMul local sndrad = math.Clamp(Radius * 20, 75, 165) local sndradp = 300 - Radius - sound.Play("ambient/explosions/explode_4.wav", self.Origin, sndrad, math.Clamp(sndradp * 25, 15, 170), ACF.Volume) - sound.Play("ambient/explosions/explode_9.wav", self.Origin, sndrad, math.Clamp(sndradp * 22, 15, 120), ACF.Volume) + Sounds.PlaySound(self.Origin, "ambient/explosions/explode_4.wav", sndrad, math.Clamp(sndradp * 25, 15, 170), 1) + Sounds.PlaySound(self.Origin, "ambient/explosions/explode_9.wav", sndrad, math.Clamp(sndradp * 22, 15, 120), 1) local EF = self.Emitter:Add("effects/muzzleflash" .. math.random(1, 4), Origin ) if EF then EF:SetVelocity(self.DirVec * 100) diff --git a/lua/entities/acf_computer/init.lua b/lua/entities/acf_computer/init.lua index aec5e1aa..dfc4a97a 100644 --- a/lua/entities/acf_computer/init.lua +++ b/lua/entities/acf_computer/init.lua @@ -6,9 +6,11 @@ include("shared.lua") local hook = hook local ACF = ACF +local Contraption = ACF.Contraption local Damage = ACF.Damage local Utilities = ACF.Utilities local Clock = Utilities.Clock +local Sounds = Utilities.Sounds ACF.RegisterClassLink("acf_computer", "acf_rack", function(Computer, Target) if Computer.Weapons[Target] then return false, "This rack is already linked to this computer!" end @@ -79,8 +81,8 @@ local function CheckDistantLinks(Entity, Source) if Position:DistToSqr(Link:GetPos()) > MaxDistance then local Sound = UnlinkSound:format(math.random(1, 3)) - Entity:EmitSound(Sound, 70, 100, ACF.Volume) - Link:EmitSound(Sound, 70, 100, ACF.Volume) + Sounds.SendSound(Entity, Sound, 70, 100, 1) + Sounds.SendSound(Link, Sound, 70, 100, 1) Entity:Unlink(Link) end @@ -121,9 +123,8 @@ do -- Spawn and update function local function UpdateComputer(Entity, Data, Class, Computer) Entity.ACF = Entity.ACF or {} - Entity.ACF.Model = Computer.Model -- Must be set before changing model - Entity:SetModel(Computer.Model) + Contraption.SetModel(Entity, Computer.Model) Entity:PhysicsInit(SOLID_VPHYSICS) Entity:SetMoveType(MOVETYPE_VPHYSICS) @@ -158,11 +159,7 @@ do -- Spawn and update function ACF.Activate(Entity, true) - Entity.ACF.LegalMass = Computer.Mass - Entity.ACF.Model = Computer.Model - - local Phys = Entity:GetPhysicsObject() - if IsValid(Phys) then Phys:SetMass(Computer.Mass) end + Contraption.SetMass(Entity, Computer.Mass) if Entity.OnUpdate then Entity:OnUpdate(Data, Class, Computer) diff --git a/lua/entities/acf_missile/init.lua b/lua/entities/acf_missile/init.lua index 6956418c..52544fa9 100644 --- a/lua/entities/acf_missile/init.lua +++ b/lua/entities/acf_missile/init.lua @@ -13,7 +13,9 @@ local ActiveMissiles = ACF.ActiveMissiles local Ballistics = ACF.Ballistics local Classes = ACF.Classes local Clock = ACF.Utilities.Clock +local Sounds = ACF.Utilities.Sounds local Damage = ACF.Damage +local Debug = ACF.Debug local Missiles = Classes.Missiles local InputActions = ACF.GetInputActions("acf_missile") local hook = hook @@ -69,7 +71,7 @@ local function LaunchEffect(Missile) if ACF_SOUND_EXT then hook.Run("ACF_SOUND_MISSILE", Missile, Sound) else - Missile:EmitSound(Sound, 180, math.random(99, 101), ACF.Volume) + Sounds.SendSound(Missile, Sound, 180, math.random(99, 101), 1) end end @@ -283,7 +285,7 @@ local function CalcFlight(Missile) Missile.CurDir = Dir --Missile trajectory debugging - debugoverlay.Line(Pos, EndPos, 10, Color(0, 255, 0)) + Debug.Line(Pos, EndPos, 10, Color(0, 255, 0)) Missile:DoFlight() end @@ -514,7 +516,7 @@ function ENT:Launch(Delay, IsMisfire) self.Filter[#self.Filter + 1] = Missile end - self:EmitSound("phx/epicmetal_hard.wav", 70, math.random(99, 101), ACF.Volume) + Sounds.SendSound(self, "phx/epicmetal_hard.wav", 70, math.random(99, 101), 1) self:SetNotSolid(false) self:SetNoDraw(false) self:SetParent() @@ -614,7 +616,7 @@ function ENT:Detonate(Destroyed) return Fuze:HandleDetonation(self, BulletData) end - debugoverlay.Line(BulletData.Pos, BulletData.Pos + BulletData.Flight, 10, Color(255, 128, 0)) + Debug.Line(BulletData.Pos, BulletData.Pos + BulletData.Flight, 10, Color(255, 128, 0)) BulletData.DetonatorAngle = 91 diff --git a/lua/entities/acf_rack/cl_init.lua b/lua/entities/acf_rack/cl_init.lua index 6542ec10..1b233231 100644 --- a/lua/entities/acf_rack/cl_init.lua +++ b/lua/entities/acf_rack/cl_init.lua @@ -1,5 +1,147 @@ +local Clock = ACF.Utilities.Clock +local Queued = {} + include("shared.lua") language.Add("Cleanup_acf_rack", "ACF Racks") language.Add("Cleaned_acf_rack", "Cleaned up all ACF Racks") language.Add("SBoxLimit__acf_rack", "You've hit the ACF Rack limit!") + +do -- Overlay/networking + function ENT:RequestRackInfo() + if Queued[self] then return end + + Queued[self] = true + + timer.Simple(5, function() Queued[self] = nil end) + + net.Start("ACF.RequestRackInfo") + net.WriteEntity(self) + net.SendToServer() + end + + net.Receive("ACF.RequestRackInfo",function() + local Rack = net.ReadEntity() + if not IsValid(Rack) then return end + + Queued[Rack] = nil + + local RackInfo = util.JSONToTable(net.ReadString()) + local CrateInfo = util.JSONToTable(net.ReadString()) + + if RackInfo.HasComputer then + local Computer = Entity(RackInfo.Computer) + if IsValid(Computer) then + Rack.Computer = Computer + end + end + + if RackInfo.HasRadar then + local Radar = Entity(RackInfo.Radar) + if IsValid(Radar) then + Rack.Radar = Radar + end + end + + Rack.MountPoints = {} + if next(RackInfo.MountPoints) then + for _,T in ipairs(RackInfo.MountPoints) do + local Dir = Vector(1,0,0) + Dir:Rotate(T.Ang) + Rack.MountPoints[#Rack.MountPoints + 1] = {Index = T.Index, Pos = T.Pos, Dir = Dir} + end + end + + local CrateEnts = {} + for _,E in ipairs(CrateInfo) do + local Crate = Entity(E) + + if IsValid(Crate) then + local Col = ColorAlpha(Crate:GetColor(),25) + CrateEnts[#CrateEnts + 1] = {Ent = Crate, Col = Col} + end + end + + Rack.Crates = CrateEnts + Rack.HasData = true + Rack.Age = Clock.CurTime + 5 + end) + + -- icon16/feed.png radar sprite + -- icon16/joystick.png controller sprite + local RadarSprite = Material("icon16/transmit.png") + local JoystickMat = Material("icon16/joystick.png") + local RadarColor = Color(255,255,0,25) + local ControllerColor = Color(0,255,0,25) + local ForwardColor = Color(255,0,0) + + function ENT:DrawOverlay() + local SelfTbl = self:GetTable() + + if not SelfTbl.HasData then + self:RequestRackInfo() + return + elseif Clock.CurTime > SelfTbl.Age then + self:RequestRackInfo() + end + + if next(SelfTbl.Crates) then + for _,T in ipairs(SelfTbl.Crates) do + local E = T.Ent + + if IsValid(E) then + render.DrawWireframeBox(E:GetPos(),E:GetAngles(),E:OBBMins(),E:OBBMaxs(),T.Col,true) + render.DrawBox(E:GetPos(),E:GetAngles(),E:OBBMins(),E:OBBMaxs(),T.Col) + end + end + end + + if next(SelfTbl.MountPoints) then + for _,T in ipairs(SelfTbl.MountPoints) do + local Pos1 = self:LocalToWorld(T.Pos - T.Dir * 6) + local Pos2 = self:LocalToWorld(T.Pos + T.Dir * 6) + render.DrawBeam(Pos1, Pos2, 2, 0, 0, color_black) + render.DrawBeam(Pos1, Pos2, 1.5, 0, 0, color_white) + end + + cam.Start2D() + for _,T in ipairs(SelfTbl.MountPoints) do + local Pos = self:LocalToWorld(T.Pos):ToScreen() + draw.SimpleTextOutlined("Mount " .. T.Index,"ACF_Title",Pos.x,Pos.y,color_white,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER,1,color_black) + end + cam.End2D() + end + + if IsValid(SelfTbl.Radar) then + local Radar = SelfTbl.Radar + local RadPos, RadAng, OBBMin, OBBMax = Radar:GetPos(), Radar:GetAngles(), Radar:OBBMins(), Radar:OBBMaxs() + render.DrawWireframeBox(RadPos,RadAng,OBBMin,OBBMax,RadarColor,true) + render.DrawBox(RadPos,RadAng,OBBMin,OBBMax,RadarColor) + + render.SetMaterial(RadarSprite) + render.DrawSprite(Radar:LocalToWorld(Radar:OBBCenter()), 12, 12, color_white) + end + + render.SetColorMaterial() + + if IsValid(SelfTbl.Computer) then + local Computer = SelfTbl.Computer + local ComPos, ComAng, OBBMin, OBBMax = Computer:GetPos(), Computer:GetAngles(), Computer:OBBMins(), Computer:OBBMaxs() + render.DrawWireframeBox(ComPos,ComAng,OBBMin,OBBMax,ControllerColor,true) + render.DrawBox(ComPos,ComAng,OBBMin,OBBMax,ControllerColor) + + render.SetMaterial(JoystickMat) + render.DrawSprite(Computer:LocalToWorld(Computer:OBBCenter()), 12, 12, color_white) + end + + local p1 = self:GetPos() + self:GetForward() * 24 + local p2 = self:GetPos() + local dir = (p1 - p2):GetNormalized() + local dir2 = EyeVector() + local right = (dir:Cross(dir2)):GetNormalized() + + render.DrawLine(p1, p2, ForwardColor) + render.DrawLine(p1, p1 + (-dir - right) * 5, ForwardColor) + render.DrawLine(p1, p1 + (-dir + right) * 5, ForwardColor) + end +end \ No newline at end of file diff --git a/lua/entities/acf_rack/init.lua b/lua/entities/acf_rack/init.lua index c629ad26..eb92bdcb 100644 --- a/lua/entities/acf_rack/init.lua +++ b/lua/entities/acf_rack/init.lua @@ -8,9 +8,13 @@ include("shared.lua") local EMPTY = { Type = "Empty", PropMass = 0, ProjMass = 0, Tracer = 0 } local hook = hook local ACF = ACF +local Contraption = ACF.Contraption local Classes = ACF.Classes local Utilities = ACF.Utilities local Clock = Utilities.Clock +local Sounds = Utilities.Sounds +local MaxDistance = ACF.LinkDistance * ACF.LinkDistance +local UnlinkSound = "physics/metal/metal_box_impact_bullet%s.wav" local function UpdateTotalAmmo(Entity) local Total = 0 @@ -26,9 +30,22 @@ local function UpdateTotalAmmo(Entity) WireLib.TriggerOutput(Entity, "Total Ammo", Total) end +local function CheckDistantLink(Entity, Crate, EntPos) + local CrateUnlinked = false + + if EntPos:DistToSqr(Crate:GetPos()) > MaxDistance then + local Sound = UnlinkSound:format(math.random(1, 3)) + + Sounds.SendSound(Entity, Sound, 70, math.random(99, 109), 1) + Sounds.SendSound(Crate, Sound, 70, math.random(99, 109), 1) + + CrateUnlinked = Entity:Unlink(Crate) + end + + return CrateUnlinked +end + do -- Spawning and Updating -------------------- - local UnlinkSound = "physics/metal/metal_box_impact_bullet%s.wav" - local MaxDistance = ACF.LinkDistance * ACF.LinkDistance local CheckLegal = ACF.CheckLegal local WireIO = Utilities.WireIO local Entities = Classes.Entities @@ -78,9 +95,8 @@ do -- Spawning and Updating -------------------- local function UpdateRack(Entity, Data, Rack) Entity.ACF = Entity.ACF or {} - Entity.ACF.Model = Rack.Model -- Must be set before changing model - Entity:SetModel(Rack.Model) + Contraption.SetModel(Entity, Rack.Model) Entity:PhysicsInit(SOLID_VPHYSICS) Entity:SetMoveType(MOVETYPE_VPHYSICS) @@ -94,7 +110,7 @@ do -- Spawning and Updating -------------------- Entity.ShortName = Rack.ID Entity.EntType = Rack.EntType Entity.RackData = Rack - Entity.Caliber = Rack.Caliber + Entity.Caliber = Rack.Caliber or 0 Entity.MagSize = Rack.MagSize or 1 Entity.ForcedIndex = Entity.ForcedIndex and math.max(Entity.ForcedIndex, Entity.MagSize) Entity.PointIndex = 1 @@ -115,11 +131,7 @@ do -- Spawning and Updating -------------------- ACF.Activate(Entity, true) - Entity.ACF.Model = Rack.Model - Entity.ACF.LegalMass = Rack.Mass - - local Phys = Entity:GetPhysicsObject() - if IsValid(Phys) then Phys:SetMass(Rack.Mass) end + Contraption.SetMass(Entity, Rack.Mass) do -- Removing old missiles local Missiles = Entity.Missiles @@ -157,21 +169,6 @@ do -- Spawning and Updating -------------------- UpdateTotalAmmo(Entity) end - local function CheckDistantLinks(Entity, Source) - local Position = Entity:GetPos() - - for Link in pairs(Entity[Source]) do - if Position:DistToSqr(Link:GetPos()) > MaxDistance then - local Sound = UnlinkSound:format(math.random(1, 3)) - - Entity:EmitSound(Sound, 70, math.random(99, 109), ACF.Volume) - Link:EmitSound(Sound, 70, math.random(99, 109), ACF.Volume) - - Entity:Unlink(Link) - end - end - end - hook.Add("ACF_OnSetupInputs", "ACF Rack Motor Delay", function(Entity, List, _, Rack) if Entity:GetClass() ~= "acf_rack" then return end if not Rack.CanDropMissile then return end @@ -239,7 +236,11 @@ do -- Spawning and Updating -------------------- timer.Create("ACF Rack Clock " .. Rack:EntIndex(), 3, 0, function() if not IsValid(Rack) then return end - CheckDistantLinks(Rack, "Crates") + local Position = Rack:GetPos() + + for Link in pairs(Rack.Crates) do + CheckDistantLink(Rack, Link, Position) + end end) timer.Create("ACF Rack Ammo " .. Rack:EntIndex(), 1, 0, function() @@ -285,6 +286,14 @@ do -- Spawning and Updating -------------------- hook.Run("ACF_OnEntityUpdate", "acf_rack", self, Data, Rack) + local Crates = self.Crates + + if next(Crates) then + for Crate in pairs(Crates) do + self:Unlink(Crate) + end + end + self:UpdateOverlay(true) net.Start("ACF_UpdateEntity") @@ -312,7 +321,7 @@ do -- Custom ACF damage ------------------------ util.Effect("Sparks", Effect, true, true) - Rack:EmitSound(SparkSound:format(math.random(6)), math.random(55, 65), math.random(99, 101), ACF.Volume) + Sounds.SendSound(Rack, SparkSound:format(math.random(6)), math.random(55, 65), math.random(99, 101), 1) timer.Simple(math.Rand(0.5, 2), function() if not IsValid(Rack) then return end @@ -386,6 +395,7 @@ do -- Entity Link/Unlink ----------------------- if Weapon.Crates[Target] then return false, "This rack is already linked to this crate." end if Target.Weapons[Weapon] then return false, "This rack is already linked to this crate." end if Target.IsRefill then return false, "Refill crates cannot be linked!" end + if Target:GetPos():DistToSqr(Weapon:GetPos()) > MaxDistance then return false, "This crate is too far away from this rack." end local Blacklist = Target.RoundData.Blacklist @@ -464,7 +474,7 @@ do -- Entity Inputs ---------------------------- Entity:UpdatePoint() if Entity.ForcedIndex then - Entity:EmitSound("buttons/blip2.wav", 70, math.random(99, 101), ACF.Volume) + Sounds.SendSound(Entity, "buttons/blip2.wav", 70, math.random(99, 101), 1) end end) @@ -546,7 +556,7 @@ do -- Firing ----------------------------------- self:UpdatePoint() else - self:EmitSound("weapons/pistol/pistol_empty.wav", 70, math.random(99, 101), ACF.Volume) + Sounds.SendSound(self, "weapons/pistol/pistol_empty.wav", 70, math.random(99, 101), 1) Delay = 1 end @@ -605,7 +615,7 @@ do -- Loading ---------------------------------- local Pos, Ang = GetMissileAngPos(Crate.BulletData, Point) local Missile = MakeACF_Missile(Rack.Owner, Pos, Ang, Rack, Point, Crate) - Rack:EmitSound("acf_missiles/fx/bomb_reload.mp3", 70, math.random(99, 101), ACF.Volume) + Sounds.SendSound(Rack, "acf_missiles/fx/bomb_reload.mp3", 70, math.random(99, 101), 1) return Missile end @@ -625,7 +635,7 @@ do -- Loading ---------------------------------- local Index, Point = self:GetNextMountPoint("Empty") local Crate = GetNextCrate(self) - if not self.Firing and Index and Crate then + if not self.Firing and Index and Crate and not CheckDistantLink(self, Crate, self:GetPos()) then local Missile = AddMissile(self, Point, Crate) local ReloadTime = Missile.ReloadTime @@ -651,7 +661,7 @@ do -- Loading ---------------------------------- if not IsValid(Missile) then Missile = nil else - self:EmitSound("acf_missiles/fx/weapon_select.mp3", 70, math.random(99, 101), ACF.Volume) + Sounds.SendSound(self, "acf_missiles/fx/weapon_select.mp3", 70, math.random(99, 101), 1) Point.State = "Loaded" Point.NextFire = nil @@ -751,6 +761,45 @@ do -- Duplicator Support ----------------------- end end --------------------------------------------- +do -- Overlay/networking + util.AddNetworkString("ACF.RequestRackInfo") + net.Receive("ACF.RequestRackInfo",function(_,Ply) + local Rack = net.ReadEntity() + if not IsValid(Rack) then return end + + local RackInfo = {} + local Crates = {} + + if IsValid(Rack.Computer) then + RackInfo.HasComputer = true + RackInfo.Computer = Rack.Computer:EntIndex() + end + + if IsValid(Rack.Radar) then + RackInfo.HasRadar = true + RackInfo.Radar = Rack.Radar:EntIndex() + end + + RackInfo.MountPoints = {} + + for _,Point in pairs(Rack.MountPoints) do + RackInfo.MountPoints[#RackInfo.MountPoints + 1] = {Pos = Point.Position, Ang = Point.Angle, Index = Point.Index} + end + + if next(Rack.Crates) then + for Crate in pairs(Rack.Crates) do + Crates[#Crates + 1] = Crate:EntIndex() + end + end + + net.Start("ACF.RequestRackInfo") + net.WriteEntity(Rack) + net.WriteString(util.TableToJSON(RackInfo)) + net.WriteString(util.TableToJSON(Crates)) + net.Send(Ply) + end) +end + do -- Misc ------------------------------------- local function GetPosition(Entity) local PhysObj = Entity:GetPhysicsObject() @@ -821,6 +870,7 @@ do -- Misc ------------------------------------- local Reload = IsValid(Missile) and Missile.ReloadTime or 1 self.BulletData = BulletData + self.Caliber = BulletData.Caliber self.NextFire = Point.NextFire self.Jammed = Point.Disabled diff --git a/lua/entities/acf_radar/cl_init.lua b/lua/entities/acf_radar/cl_init.lua index 8d2bf5d0..0cf4d178 100644 --- a/lua/entities/acf_radar/cl_init.lua +++ b/lua/entities/acf_radar/cl_init.lua @@ -1,5 +1,73 @@ +local Clock = ACF.Utilities.Clock +local Queued = {} + include ("shared.lua") language.Add("Cleanup_acf_radar", "ACF Radars") language.Add("Cleaned_acf_radar", "Cleaned up all ACF Radars") language.Add("SBoxLimit__acf_radar", "You've hit the ACF Radar limit!") + +do -- Overlay/networking + function ENT:RequestRadarInfo() + if Queued[self] then return end + + Queued[self] = true + + timer.Simple(5, function() Queued[self] = nil end) + + net.Start("ACF.RequestRadarInfo") + net.WriteEntity(self) + net.SendToServer() + end + + net.Receive("ACF.RequestRadarInfo",function() + local Radar = net.ReadEntity() + if not IsValid(Radar) then return end + + Queued[Radar] = nil + + local RadarInfo = util.JSONToTable(net.ReadString()) + + Radar.Spherical = RadarInfo.Spherical + Radar.Cone = RadarInfo.Cone + Radar.Origin = RadarInfo.Origin + Radar.Range = RadarInfo.Range + + Radar.HasData = true + Radar.Age = Clock.CurTime + 5 + end) + + local Col = Color(255,255,0,25) + local Col2 = Color(255,255,0) + function ENT:DrawOverlay() + local SelfTbl = self:GetTable() + + if not SelfTbl.HasData then + self:RequestRadarInfo() + return + elseif Clock.CurTime > SelfTbl.Age then + self:RequestRadarInfo() + end + + local Origin = self:LocalToWorld(SelfTbl.Origin) + if SelfTbl.Spherical then + render.DrawWireframeSphere(Origin,SelfTbl.Range,50,50,Col2) + else + + for I = 0, 7 do + local Dir = Vector(16384,0,0) + Dir:Rotate(Angle(SelfTbl.Cone,0,0)) + Dir:Rotate(Angle(0,0,45 * I)) + local Point = self:LocalToWorld(SelfTbl.Origin + Dir) + local Dir2 = Vector(16384,0,0) + Dir2:Rotate(Angle(SelfTbl.Cone,0,0)) + Dir2:Rotate(Angle(0,0,45 * (I + 1))) + local Point2 = self:LocalToWorld(SelfTbl.Origin + Dir2) + + render.DrawQuad(Origin, Point, Point2, Point, Col) + render.DrawLine(Point, Point2, Col, true) + render.DrawLine(Origin, Point, Col, true) + end + end + end +end \ No newline at end of file diff --git a/lua/entities/acf_radar/init.lua b/lua/entities/acf_radar/init.lua index 885aada3..7645e57e 100644 --- a/lua/entities/acf_radar/init.lua +++ b/lua/entities/acf_radar/init.lua @@ -4,6 +4,7 @@ AddCSLuaFile("shared.lua") include("shared.lua") local ACF = ACF +local Contraption = ACF.Contraption ACF.RegisterClassLink("acf_radar", "acf_rack", function(Radar, Target) if Radar.Weapons[Target] then return false, "This rack is already linked to this radar!" end @@ -39,6 +40,7 @@ end) local Radars = ACF.ActiveRadars local Damage = ACF.Damage local CheckLegal = ACF.CheckLegal +local Sounds = ACF.Utilities.Sounds local UnlinkSound = "physics/metal/metal_box_impact_bullet%s.wav" local MaxDistance = ACF.LinkDistance * ACF.LinkDistance local TraceData = { start = true, endpos = true, mask = MASK_SOLID_BRUSHONLY } @@ -212,7 +214,7 @@ local function ScanForEntities(Entity) if Count ~= Entity.TargetCount then if Count > Entity.TargetCount then - Entity:EmitSound(Entity.SoundPath, 70, 100, ACF.Volume) + Sounds.SendSound(Entity, Entity.SoundPath, 70, 100, 1) end Entity.TargetCount = Count @@ -271,8 +273,8 @@ local function CheckDistantLinks(Entity, Source) if Position:DistToSqr(Link:GetPos()) > MaxDistance then local Sound = UnlinkSound:format(math.random(1, 3)) - Entity:EmitSound(Sound, 70, 100, ACF.Volume) - Link:EmitSound(Sound, 70, 100, ACF.Volume) + Sounds.SendSound(Entity, Sound, 70, 100, 1) + Sounds.SendSound(Link, Sound, 70, 100, 1) Entity:Unlink(Link) end @@ -332,9 +334,8 @@ do -- Spawn and Update functions local Delay = Radar.ThinkDelay Entity.ACF = Entity.ACF or {} - Entity.ACF.Model = Radar.Model -- Must be set before changing model - Entity:SetModel(Radar.Model) + Contraption.SetModel(Entity, Radar.Model) Entity:PhysicsInit(SOLID_VPHYSICS) Entity:SetMoveType(MOVETYPE_VPHYSICS) @@ -348,7 +349,7 @@ do -- Spawn and Update functions end Entity.Name = Radar.Name - Entity.ShortName = Radar.Name + Entity.ShortName = Radar.ID Entity.EntType = Class.Name Entity.ClassType = Class.ID Entity.ClassData = Class @@ -370,11 +371,7 @@ do -- Spawn and Update functions ACF.Activate(Entity, true) - Entity.ACF.Model = Radar.Model - Entity.ACF.LegalMass = Radar.Mass - - local Phys = Entity:GetPhysicsObject() - if IsValid(Phys) then Phys:SetMass(Radar.Mass) end + Contraption.SetMass(Entity, Radar.Mass) end function MakeACF_Radar(Player, Pos, Angle, Data) @@ -558,4 +555,23 @@ function ENT:OnRemove() timer.Remove("ACF Radar Clock " .. self:EntIndex()) WireLib.Remove(self) +end + +do -- Overlay/networking + util.AddNetworkString("ACF.RequestRadarInfo") + net.Receive("ACF.RequestRadarInfo",function(_,Ply) + local Radar = net.ReadEntity() + if not IsValid(Radar) then return end + + local RadarInfo = {} + RadarInfo.Spherical = (Radar.ConeDegs == nil) and true or false + RadarInfo.Cone = Radar.ConeDegs and math.Round(Radar.ConeDegs, 2) or 0 + RadarInfo.Range = Radar.Range and math.Round(Radar.Range,2) or 0 + RadarInfo.Origin = Radar.Origin + + net.Start("ACF.RequestRadarInfo") + net.WriteEntity(Radar) + net.WriteString(util.TableToJSON(RadarInfo)) + net.Send(Ply) + end) end \ No newline at end of file diff --git a/lua/entities/acf_receiver/init.lua b/lua/entities/acf_receiver/init.lua index e363e9ba..c9fec76e 100644 --- a/lua/entities/acf_receiver/init.lua +++ b/lua/entities/acf_receiver/init.lua @@ -5,6 +5,7 @@ AddCSLuaFile("shared.lua") include("shared.lua") local ACF = ACF +local Contraption = ACF.Contraption --===============================================================================================-- -- Local Funcs and Vars @@ -12,6 +13,7 @@ local ACF = ACF local Damage = ACF.Damage local CheckLegal = ACF.CheckLegal +local Sounds = ACF.Utilities.Sounds local TimerExists = timer.Exists local TimerCreate = timer.Create local TimerRemove = timer.Remove @@ -60,7 +62,7 @@ local function CheckReceive(Entity) WireLib.TriggerOutput(Entity, "Detected", IsDetected and 1 or 0) if IsDetected then - Entity:EmitSound(Entity.SoundPath, 70, 100, ACF.Volume) + Sounds.SendSound(Entity, Entity.SoundPath, 70, 100, 1) end Entity:UpdateOverlay() @@ -131,9 +133,8 @@ do -- Spawn and Update functions local Delay = Receiver.ThinkDelay Entity.ACF = Entity.ACF or {} - Entity.ACF.Model = Receiver.Model -- Must be set before changing model - Entity:SetModel(Receiver.Model) + Contraption.SetModel(Entity, Receiver.Model) Entity:PhysicsInit(SOLID_VPHYSICS) Entity:SetMoveType(MOVETYPE_VPHYSICS) @@ -169,11 +170,7 @@ do -- Spawn and Update functions ACF.Activate(Entity, true) - Entity.ACF.Model = Receiver.Model - Entity.ACF.LegalMass = Receiver.Mass - - local Phys = Entity:GetPhysicsObject() - if IsValid(Phys) then Phys:SetMass(Receiver.Mass) end + Contraption.SetMass(Entity, Receiver.Mass) end function MakeACF_Receiver(Player, Pos, Ang, Data) diff --git a/materials/acf/core/wire.vmt b/materials/acf/core/wire.vmt new file mode 100644 index 00000000..293c449d --- /dev/null +++ b/materials/acf/core/wire.vmt @@ -0,0 +1,9 @@ +"UnlitGeneric" +{ + "$basetexture" "acf/core/wire" + "$basetexturetransform" "center 0 0 scale 1 10 rotate 0 translate 1 0" + "$nocull" 1 + "$MinLight" 1 + "$MaxLight" 1 + "$additive" 1 +} \ No newline at end of file diff --git a/materials/acf/core/wire.vtf b/materials/acf/core/wire.vtf new file mode 100644 index 00000000..a57acc5f Binary files /dev/null and b/materials/acf/core/wire.vtf differ diff --git a/materials/models/bluemetaknight/Detector_EnvMask.vtf b/materials/models/bluemetaknight/Detector_EnvMask.vtf index 488aba3c..3932835a 100644 Binary files a/materials/models/bluemetaknight/Detector_EnvMask.vtf and b/materials/models/bluemetaknight/Detector_EnvMask.vtf differ diff --git a/materials/models/kali/vehicles/bo/s75/veh_s75_base_exp.vtf b/materials/models/kali/vehicles/bo/s75/veh_s75_base_exp.vtf index 063586e7..b57097c4 100644 Binary files a/materials/models/kali/vehicles/bo/s75/veh_s75_base_exp.vtf and b/materials/models/kali/vehicles/bo/s75/veh_s75_base_exp.vtf differ diff --git a/materials/models/kali/vehicles/bo/s75/veh_s75_missile_a_exp.vtf b/materials/models/kali/vehicles/bo/s75/veh_s75_missile_a_exp.vtf index fe73173d..6e33e362 100644 Binary files a/materials/models/kali/vehicles/bo/s75/veh_s75_missile_a_exp.vtf and b/materials/models/kali/vehicles/bo/s75/veh_s75_missile_a_exp.vtf differ diff --git a/materials/models/kali/vehicles/bo/s75/veh_s75_missile_b_exp.vtf b/materials/models/kali/vehicles/bo/s75/veh_s75_missile_b_exp.vtf index 9071a184..83b814b7 100644 Binary files a/materials/models/kali/vehicles/bo/s75/veh_s75_missile_b_exp.vtf and b/materials/models/kali/vehicles/bo/s75/veh_s75_missile_b_exp.vtf differ diff --git a/materials/models/kali/weapons/kornet/kornet_base_exp.vtf b/materials/models/kali/weapons/kornet/kornet_base_exp.vtf index 4ba68c80..7e90cf1b 100644 Binary files a/materials/models/kali/weapons/kornet/kornet_base_exp.vtf and b/materials/models/kali/weapons/kornet/kornet_base_exp.vtf differ diff --git a/materials/models/missiles/aim54a.vtf b/materials/models/missiles/aim54a.vtf index 40c94e87..e3c0309a 100644 Binary files a/materials/models/missiles/aim54a.vtf and b/materials/models/missiles/aim54a.vtf differ diff --git a/materials/models/missiles/hydra40_norm.vtf b/materials/models/missiles/hydra40_norm.vtf index 8fd68a09..4d01e7b7 100644 Binary files a/materials/models/missiles/hydra40_norm.vtf and b/materials/models/missiles/hydra40_norm.vtf differ diff --git a/materials/models/missiles/launcher7_40mm_norm.vtf b/materials/models/missiles/launcher7_40mm_norm.vtf index d004bbbb..a6e674db 100644 Binary files a/materials/models/missiles/launcher7_40mm_norm.vtf and b/materials/models/missiles/launcher7_40mm_norm.vtf differ diff --git a/materials/models/missiles/us_aim_7f_c.vtf b/materials/models/missiles/us_aim_7f_c.vtf index 4db3eeb2..c74a413d 100644 Binary files a/materials/models/missiles/us_aim_7f_c.vtf and b/materials/models/missiles/us_aim_7f_c.vtf differ diff --git a/materials/models/missiles/us_aim_7f_n_n.vtf b/materials/models/missiles/us_aim_7f_n_n.vtf index c7ce038a..3979562d 100644 Binary files a/materials/models/missiles/us_aim_7f_n_n.vtf and b/materials/models/missiles/us_aim_7f_n_n.vtf differ diff --git a/models/bluemetaknight/laser_detector.dx80.vtx b/models/bluemetaknight/laser_detector.dx80.vtx deleted file mode 100644 index c1e3e1b8..00000000 Binary files a/models/bluemetaknight/laser_detector.dx80.vtx and /dev/null differ diff --git a/models/bluemetaknight/laser_detector.sw.vtx b/models/bluemetaknight/laser_detector.sw.vtx deleted file mode 100644 index 127ddf2e..00000000 Binary files a/models/bluemetaknight/laser_detector.sw.vtx and /dev/null differ diff --git a/models/bombs/an_m66.dx80.vtx b/models/bombs/an_m66.dx80.vtx deleted file mode 100644 index 7e32611e..00000000 Binary files a/models/bombs/an_m66.dx80.vtx and /dev/null differ diff --git a/models/bombs/fab100.dx80.vtx b/models/bombs/fab100.dx80.vtx deleted file mode 100644 index 74c85737..00000000 Binary files a/models/bombs/fab100.dx80.vtx and /dev/null differ diff --git a/models/bombs/fab250.dx80.vtx b/models/bombs/fab250.dx80.vtx deleted file mode 100644 index 18c8d7d4..00000000 Binary files a/models/bombs/fab250.dx80.vtx and /dev/null differ diff --git a/models/bombs/fab50.dx80.vtx b/models/bombs/fab50.dx80.vtx deleted file mode 100644 index 0e7e3a8b..00000000 Binary files a/models/bombs/fab50.dx80.vtx and /dev/null differ diff --git a/models/bombs/fab500.dx80.vtx b/models/bombs/fab500.dx80.vtx deleted file mode 100644 index 5f34071d..00000000 Binary files a/models/bombs/fab500.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/agm62.dx80.vtx b/models/bombs/gbu/agm62.dx80.vtx deleted file mode 100644 index e69d9d5c..00000000 Binary files a/models/bombs/gbu/agm62.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/gbu10.dx80.vtx b/models/bombs/gbu/gbu10.dx80.vtx deleted file mode 100644 index 99662d39..00000000 Binary files a/models/bombs/gbu/gbu10.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/gbu10_fold.dx80.vtx b/models/bombs/gbu/gbu10_fold.dx80.vtx deleted file mode 100644 index de5b2c68..00000000 Binary files a/models/bombs/gbu/gbu10_fold.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/gbu12.dx80.vtx b/models/bombs/gbu/gbu12.dx80.vtx deleted file mode 100644 index d161bb19..00000000 Binary files a/models/bombs/gbu/gbu12.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/gbu12_fold.dx80.vtx b/models/bombs/gbu/gbu12_fold.dx80.vtx deleted file mode 100644 index 8686abee..00000000 Binary files a/models/bombs/gbu/gbu12_fold.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/gbu16.dx80.vtx b/models/bombs/gbu/gbu16.dx80.vtx deleted file mode 100644 index 49e65534..00000000 Binary files a/models/bombs/gbu/gbu16.dx80.vtx and /dev/null differ diff --git a/models/bombs/gbu/gbu16_fold.dx80.vtx b/models/bombs/gbu/gbu16_fold.dx80.vtx deleted file mode 100644 index fdb7bb75..00000000 Binary files a/models/bombs/gbu/gbu16_fold.dx80.vtx and /dev/null differ diff --git a/models/ghosteh/lau10.dx80.vtx b/models/ghosteh/lau10.dx80.vtx deleted file mode 100644 index 61dc02f7..00000000 Binary files a/models/ghosteh/lau10.dx80.vtx and /dev/null differ diff --git a/models/ghosteh/zuni.dx80.vtx b/models/ghosteh/zuni.dx80.vtx deleted file mode 100644 index 7e7b4471..00000000 Binary files a/models/ghosteh/zuni.dx80.vtx and /dev/null differ diff --git a/models/ghosteh/zuni_folded.dx80.vtx b/models/ghosteh/zuni_folded.dx80.vtx deleted file mode 100644 index 6bd4b265..00000000 Binary files a/models/ghosteh/zuni_folded.dx80.vtx and /dev/null differ diff --git a/models/kali/vehicles/bo/s-75 dvina.dx80.vtx b/models/kali/vehicles/bo/s-75 dvina.dx80.vtx deleted file mode 100644 index 36436d3d..00000000 Binary files a/models/kali/vehicles/bo/s-75 dvina.dx80.vtx and /dev/null differ diff --git a/models/kali/vehicles/bo/v-750 missile.dx80.vtx b/models/kali/vehicles/bo/v-750 missile.dx80.vtx deleted file mode 100644 index d2262569..00000000 Binary files a/models/kali/vehicles/bo/v-750 missile.dx80.vtx and /dev/null differ diff --git a/models/kali/weapons/kornet/9m133 kornet launcher.dx80.vtx b/models/kali/weapons/kornet/9m133 kornet launcher.dx80.vtx deleted file mode 100644 index 09daf5e8..00000000 Binary files a/models/kali/weapons/kornet/9m133 kornet launcher.dx80.vtx and /dev/null differ diff --git a/models/kali/weapons/kornet/parts/9m133 kornet launcher folded.dx80.vtx b/models/kali/weapons/kornet/parts/9m133 kornet launcher folded.dx80.vtx deleted file mode 100644 index 403673bf..00000000 Binary files a/models/kali/weapons/kornet/parts/9m133 kornet launcher folded.dx80.vtx and /dev/null differ diff --git a/models/kali/weapons/kornet/parts/9m133 kornet missile.dx80.vtx b/models/kali/weapons/kornet/parts/9m133 kornet missile.dx80.vtx deleted file mode 100644 index cf37a990..00000000 Binary files a/models/kali/weapons/kornet/parts/9m133 kornet missile.dx80.vtx and /dev/null differ diff --git a/models/kali/weapons/kornet/parts/9m133 kornet tube.dx80.vtx b/models/kali/weapons/kornet/parts/9m133 kornet tube.dx80.vtx deleted file mode 100644 index 4d0c940a..00000000 Binary files a/models/kali/weapons/kornet/parts/9m133 kornet tube.dx80.vtx and /dev/null differ diff --git a/models/launcher/RW61.dx80.vtx b/models/launcher/RW61.dx80.vtx deleted file mode 100644 index 0d84d535..00000000 Binary files a/models/launcher/RW61.dx80.vtx and /dev/null differ diff --git a/models/missiles/6pod_cover.dx80.vtx b/models/missiles/6pod_cover.dx80.vtx deleted file mode 100644 index a96b5bad..00000000 Binary files a/models/missiles/6pod_cover.dx80.vtx and /dev/null differ diff --git a/models/missiles/6pod_rk.dx80.vtx b/models/missiles/6pod_rk.dx80.vtx deleted file mode 100644 index c67e74ab..00000000 Binary files a/models/missiles/6pod_rk.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m120.dx80.vtx b/models/missiles/9m120.dx80.vtx deleted file mode 100644 index ab46bc86..00000000 Binary files a/models/missiles/9m120.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m120_rk1.dx80.vtx b/models/missiles/9m120_rk1.dx80.vtx deleted file mode 100644 index bd11fc0f..00000000 Binary files a/models/missiles/9m120_rk1.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m31.dx80.vtx b/models/missiles/9m31.dx80.vtx deleted file mode 100644 index b8c3e6c9..00000000 Binary files a/models/missiles/9m31.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m31_rk1.dx80.vtx b/models/missiles/9m31_rk1.dx80.vtx deleted file mode 100644 index 056a1589..00000000 Binary files a/models/missiles/9m31_rk1.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m31_rk2.dx80.vtx b/models/missiles/9m31_rk2.dx80.vtx deleted file mode 100644 index d8531488..00000000 Binary files a/models/missiles/9m31_rk2.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m31_rk4.dx80.vtx b/models/missiles/9m31_rk4.dx80.vtx deleted file mode 100644 index 786c55f5..00000000 Binary files a/models/missiles/9m31_rk4.dx80.vtx and /dev/null differ diff --git a/models/missiles/9m31f.dx80.vtx b/models/missiles/9m31f.dx80.vtx deleted file mode 100644 index 76f41696..00000000 Binary files a/models/missiles/9m31f.dx80.vtx and /dev/null differ diff --git a/models/missiles/AIM120C.dx80.vtx b/models/missiles/AIM120C.dx80.vtx deleted file mode 100644 index 4768c71e..00000000 Binary files a/models/missiles/AIM120C.dx80.vtx and /dev/null differ diff --git a/models/missiles/AIM9M.dx80.vtx b/models/missiles/AIM9M.dx80.vtx deleted file mode 100644 index f78c7f67..00000000 Binary files a/models/missiles/AIM9M.dx80.vtx and /dev/null differ diff --git a/models/missiles/HVAR.dx80.vtx b/models/missiles/HVAR.dx80.vtx deleted file mode 100644 index c7667f04..00000000 Binary files a/models/missiles/HVAR.dx80.vtx and /dev/null differ diff --git a/models/missiles/HVAR_Folded.dx80.vtx b/models/missiles/HVAR_Folded.dx80.vtx deleted file mode 100644 index 0d763908..00000000 Binary files a/models/missiles/HVAR_Folded.dx80.vtx and /dev/null differ diff --git a/models/missiles/RW61M.dx80.vtx b/models/missiles/RW61M.dx80.vtx deleted file mode 100644 index 6f46f0ba..00000000 Binary files a/models/missiles/RW61M.dx80.vtx and /dev/null differ diff --git a/models/missiles/S24.dx80.vtx b/models/missiles/S24.dx80.vtx deleted file mode 100644 index 805f30b9..00000000 Binary files a/models/missiles/S24.dx80.vtx and /dev/null differ diff --git a/models/missiles/agm119_b.dx80.vtx b/models/missiles/agm119_b.dx80.vtx deleted file mode 100644 index 85917a28..00000000 Binary files a/models/missiles/agm119_b.dx80.vtx and /dev/null differ diff --git a/models/missiles/agm119_s.dx80.vtx b/models/missiles/agm119_s.dx80.vtx deleted file mode 100644 index 1e91fc04..00000000 Binary files a/models/missiles/agm119_s.dx80.vtx and /dev/null differ diff --git a/models/missiles/agm_114.dx80.vtx b/models/missiles/agm_114.dx80.vtx deleted file mode 100644 index 5e4b3016..00000000 Binary files a/models/missiles/agm_114.dx80.vtx and /dev/null differ diff --git a/models/missiles/agm_114_2xrk.dx80.vtx b/models/missiles/agm_114_2xrk.dx80.vtx deleted file mode 100644 index c850b769..00000000 Binary files a/models/missiles/agm_114_2xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/agm_114_4xrk.dx80.vtx b/models/missiles/agm_114_4xrk.dx80.vtx deleted file mode 100644 index 8faef6f1..00000000 Binary files a/models/missiles/agm_114_4xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/aim54a.dx80.vtx b/models/missiles/aim54a.dx80.vtx deleted file mode 100644 index c0ed8356..00000000 Binary files a/models/missiles/aim54a.dx80.vtx and /dev/null differ diff --git a/models/missiles/aim7f.dx80.vtx b/models/missiles/aim7f.dx80.vtx deleted file mode 100644 index a988b750..00000000 Binary files a/models/missiles/aim7f.dx80.vtx and /dev/null differ diff --git a/models/missiles/at2.dx80.vtx b/models/missiles/at2.dx80.vtx deleted file mode 100644 index 8ff655ad..00000000 Binary files a/models/missiles/at2.dx80.vtx and /dev/null differ diff --git a/models/missiles/at3.dx80.vtx b/models/missiles/at3.dx80.vtx deleted file mode 100644 index e31a070b..00000000 Binary files a/models/missiles/at3.dx80.vtx and /dev/null differ diff --git a/models/missiles/at3rk.dx80.vtx b/models/missiles/at3rk.dx80.vtx deleted file mode 100644 index 655e9018..00000000 Binary files a/models/missiles/at3rk.dx80.vtx and /dev/null differ diff --git a/models/missiles/at3rs.dx80.vtx b/models/missiles/at3rs.dx80.vtx deleted file mode 100644 index 63b8b4d5..00000000 Binary files a/models/missiles/at3rs.dx80.vtx and /dev/null differ diff --git a/models/missiles/bgm_71e.dx80.vtx b/models/missiles/bgm_71e.dx80.vtx deleted file mode 100644 index ac85840b..00000000 Binary files a/models/missiles/bgm_71e.dx80.vtx and /dev/null differ diff --git a/models/missiles/bgm_71e_2xrk.dx80.vtx b/models/missiles/bgm_71e_2xrk.dx80.vtx deleted file mode 100644 index 2016335d..00000000 Binary files a/models/missiles/bgm_71e_2xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/bgm_71e_4xrk.dx80.vtx b/models/missiles/bgm_71e_4xrk.dx80.vtx deleted file mode 100644 index 65d1eb4d..00000000 Binary files a/models/missiles/bgm_71e_4xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/bgm_71e_round.dx80.vtx b/models/missiles/bgm_71e_round.dx80.vtx deleted file mode 100644 index b94691e5..00000000 Binary files a/models/missiles/bgm_71e_round.dx80.vtx and /dev/null differ diff --git a/models/missiles/blackjellypod.dx80.vtx b/models/missiles/blackjellypod.dx80.vtx deleted file mode 100644 index 01ff818d..00000000 Binary files a/models/missiles/blackjellypod.dx80.vtx and /dev/null differ diff --git a/models/missiles/bomb_3xrk.dx80.vtx b/models/missiles/bomb_3xrk.dx80.vtx deleted file mode 100644 index 264fc6a5..00000000 Binary files a/models/missiles/bomb_3xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/ffar_40mm.dx80.vtx b/models/missiles/ffar_40mm.dx80.vtx deleted file mode 100644 index 19305307..00000000 Binary files a/models/missiles/ffar_40mm.dx80.vtx and /dev/null differ diff --git a/models/missiles/ffar_40mm_closed.dx80.vtx b/models/missiles/ffar_40mm_closed.dx80.vtx deleted file mode 100644 index a52001b8..00000000 Binary files a/models/missiles/ffar_40mm_closed.dx80.vtx and /dev/null differ diff --git a/models/missiles/ffar_70mm.dx80.vtx b/models/missiles/ffar_70mm.dx80.vtx deleted file mode 100644 index c0ee578d..00000000 Binary files a/models/missiles/ffar_70mm.dx80.vtx and /dev/null differ diff --git a/models/missiles/ffar_70mm_closed.dx80.vtx b/models/missiles/ffar_70mm_closed.dx80.vtx deleted file mode 100644 index 7aae044d..00000000 Binary files a/models/missiles/ffar_70mm_closed.dx80.vtx and /dev/null differ diff --git a/models/missiles/fim_92.dx80.vtx b/models/missiles/fim_92.dx80.vtx deleted file mode 100644 index aeecd6c5..00000000 Binary files a/models/missiles/fim_92.dx80.vtx and /dev/null differ diff --git a/models/missiles/fim_92_1xrk.dx80.vtx b/models/missiles/fim_92_1xrk.dx80.vtx deleted file mode 100644 index 4736c384..00000000 Binary files a/models/missiles/fim_92_1xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/fim_92_2xrk.dx80.vtx b/models/missiles/fim_92_2xrk.dx80.vtx deleted file mode 100644 index f79036b9..00000000 Binary files a/models/missiles/fim_92_2xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/fim_92_4xrk.dx80.vtx b/models/missiles/fim_92_4xrk.dx80.vtx deleted file mode 100644 index 5a167d7a..00000000 Binary files a/models/missiles/fim_92_4xrk.dx80.vtx and /dev/null differ diff --git a/models/missiles/fim_92_folded.dx80.vtx b/models/missiles/fim_92_folded.dx80.vtx deleted file mode 100644 index f9391103..00000000 Binary files a/models/missiles/fim_92_folded.dx80.vtx and /dev/null differ diff --git a/models/missiles/glatgm/9m112.dx80.vtx b/models/missiles/glatgm/9m112.dx80.vtx deleted file mode 100644 index ad12e172..00000000 Binary files a/models/missiles/glatgm/9m112.dx80.vtx and /dev/null differ diff --git a/models/missiles/glatgm/9m112f.dx80.vtx b/models/missiles/glatgm/9m112f.dx80.vtx deleted file mode 100644 index d3ef26f7..00000000 Binary files a/models/missiles/glatgm/9m112f.dx80.vtx and /dev/null differ diff --git a/models/missiles/glatgm/9m117.dx80.vtx b/models/missiles/glatgm/9m117.dx80.vtx deleted file mode 100644 index 3131607b..00000000 Binary files a/models/missiles/glatgm/9m117.dx80.vtx and /dev/null differ diff --git a/models/missiles/glatgm/9m117f.dx80.vtx b/models/missiles/glatgm/9m117f.dx80.vtx deleted file mode 100644 index 2ddb944c..00000000 Binary files a/models/missiles/glatgm/9m117f.dx80.vtx and /dev/null differ diff --git a/models/missiles/glatgm/mgm51.dx80.vtx b/models/missiles/glatgm/mgm51.dx80.vtx deleted file mode 100644 index f9fa88bc..00000000 Binary files a/models/missiles/glatgm/mgm51.dx80.vtx and /dev/null differ diff --git a/models/missiles/launcher7_40mm.dx80.vtx b/models/missiles/launcher7_40mm.dx80.vtx deleted file mode 100644 index 69cfe46c..00000000 Binary files a/models/missiles/launcher7_40mm.dx80.vtx and /dev/null differ diff --git a/models/missiles/launcher7_70mm.dx80.vtx b/models/missiles/launcher7_70mm.dx80.vtx deleted file mode 100644 index 26ed0ecb..00000000 Binary files a/models/missiles/launcher7_70mm.dx80.vtx and /dev/null differ diff --git a/models/missiles/mgm51.dx80.vtx b/models/missiles/mgm51.dx80.vtx deleted file mode 100644 index 8dec1c3d..00000000 Binary files a/models/missiles/mgm51.dx80.vtx and /dev/null differ diff --git a/models/missiles/rk3uar.dx80.vtx b/models/missiles/rk3uar.dx80.vtx deleted file mode 100644 index 5eea96c2..00000000 Binary files a/models/missiles/rk3uar.dx80.vtx and /dev/null differ diff --git a/models/missiles/rkx1.dx80.vtx b/models/missiles/rkx1.dx80.vtx deleted file mode 100644 index 74c5a599..00000000 Binary files a/models/missiles/rkx1.dx80.vtx and /dev/null differ diff --git a/models/missiles/rkx1_sml.dx80.vtx b/models/missiles/rkx1_sml.dx80.vtx deleted file mode 100644 index 04e5f69d..00000000 Binary files a/models/missiles/rkx1_sml.dx80.vtx and /dev/null differ diff --git a/models/missiles/rs82.dx80.vtx b/models/missiles/rs82.dx80.vtx deleted file mode 100644 index 0da6e08b..00000000 Binary files a/models/missiles/rs82.dx80.vtx and /dev/null differ diff --git a/models/radar/radar_big.dx80.vtx b/models/radar/radar_big.dx80.vtx deleted file mode 100644 index 90ebdceb..00000000 Binary files a/models/radar/radar_big.dx80.vtx and /dev/null differ diff --git a/models/radar/radar_mid.dx80.vtx b/models/radar/radar_mid.dx80.vtx deleted file mode 100644 index ef46204c..00000000 Binary files a/models/radar/radar_mid.dx80.vtx and /dev/null differ diff --git a/models/radar/radar_sml.dx80.vtx b/models/radar/radar_sml.dx80.vtx deleted file mode 100644 index 789fab63..00000000 Binary files a/models/radar/radar_sml.dx80.vtx and /dev/null differ diff --git a/models/radar/radar_sp_big.dx80.vtx b/models/radar/radar_sp_big.dx80.vtx deleted file mode 100644 index 71af77e8..00000000 Binary files a/models/radar/radar_sp_big.dx80.vtx and /dev/null differ diff --git a/models/radar/radar_sp_mid.dx80.vtx b/models/radar/radar_sp_mid.dx80.vtx deleted file mode 100644 index cc276e6d..00000000 Binary files a/models/radar/radar_sp_mid.dx80.vtx and /dev/null differ diff --git a/models/radar/radar_sp_sml.dx80.vtx b/models/radar/radar_sp_sml.dx80.vtx deleted file mode 100644 index 6b696bbc..00000000 Binary files a/models/radar/radar_sp_sml.dx80.vtx and /dev/null differ diff --git a/models/spg9/spg9.dx80.vtx b/models/spg9/spg9.dx80.vtx deleted file mode 100644 index cadcfe90..00000000 Binary files a/models/spg9/spg9.dx80.vtx and /dev/null differ