-- ModuleScript Projectile (via decompile) local RunService_upv_1 = game:GetService("RunService") local Coroutine_upv_1 = require(script.Parent.Shared).Coroutine local tbl_upv_1 = {} local u1 = false local function UpdateRender() --[[ name: UpdateRender line: 6 upvalues: u1 (ref, index: 1) RunService_upv_1 (copy, index: 2) tbl_upv_1 (copy, index: 3) Coroutine_upv_1 (copy, index: 4) ]] if u1 then return end local u2 = RunService_upv_1.Heartbeat:Connect( function(a1) --[[ line: 11 upvalues: tbl_upv_1 (copy, index: 1) ]] for key_1, _ in tbl_upv_1 do key_1:_Update(a1) end end ) u1 = true Coroutine_upv_1( function() --[[ line: 18 upvalues: tbl_upv_1 (copy, index: 1) u2 (copy, index: 2) u1 (ref, index: 3) ]] repeat task.wait(3) until not (next(tbl_upv_1)) u2:Disconnect() u1 = false end ) end local tbl_upv_2 = {} tbl_upv_2.__index = tbl_upv_2 function tbl_upv_2.new(a1) --[[ name: new line: 33 upvalues: tbl_upv_2 (copy, index: 1) tbl_upv_1 (copy, index: 2) UpdateRender (copy, index: 3) ]] local Origin_1 = a1.Origin local Direction_1 = a1.Direction local Speed_1 = a1.Speed local tbl_3 = {} tbl_3.Origin = Origin_1 tbl_3.Position = Origin_1 tbl_3.Direction = Direction_1 tbl_3.CFrame = CFrame.new(Origin_1, Origin_1 + Direction_1) tbl_3.Speed = Speed_1 tbl_3.Acceleration = a1.Acceleration tbl_3.Velocity = Direction_1 * Speed_1 tbl_3.RaycastParams = a1.RaycastParams tbl_3.Distance = 0 tbl_3.Lifetime = 0 tbl_3.IsDestroyed = false setmetatable(tbl_3, tbl_upv_2) tbl_upv_1[tbl_3] = true UpdateRender() return tbl_3 end function tbl_upv_2.Destroyed(a1) --[[ name: Destroyed line: 62 ]] end function tbl_upv_2.Updated(a1) --[[ name: Updated line: 63 ]] end function tbl_upv_2.OnHit(a1) --[[ name: OnHit line: 64 ]] end function tbl_upv_2._Update(a1, a2) --[[ name: _Update line: 66 ]] local v1 = a1.Velocity + a1.Acceleration * a2 local v2 = workspace:Raycast(a1.Position, v1 * a2, a1.RaycastParams) local v3 = (v2 and (v2.Position)) or (a1.Position + v1 * a2) local _ = math.abs(v3.Y - a1.Origin.Y) a1.Velocity = v1 a1.Lifetime = a1.Lifetime + a2 a1.Direction = CFrame.new(v3, v3 + (v1 * a2)).LookVector.Unit a1.Position = v3 a1.Distance = (a1.Origin - v3).Magnitude a1.Speed = v1.Magnitude a1.CFrame = CFrame.new(v3, v3 + a1.Direction) a1:Updated(a2) if not v2 then return end a1:OnHit(v2) end function tbl_upv_2.Reflect(a1, a2, a3) --[[ name: Reflect line: 86 ]] local Direction_2 = a1.Direction a1.Velocity = (Direction_2 - (2 * Direction_2:Dot(a2.Normal) * a2.Normal)) * a3 end function tbl_upv_2.Destroy(a1) --[[ name: Destroy line: 92 upvalues: tbl_upv_1 (copy, index: 1) Coroutine_upv_1 (copy, index: 2) ]] if a1.IsDestroyed then return end a1.IsDestroyed = true tbl_upv_1[a1] = nil Coroutine_upv_1(a1.Destroyed, a1) end return tbl_upv_2