Truth Nuke

From the Garry's Mod Factions Wiki
Revision as of 21:47, 2 December 2025 by Phil2014 (talk | contribs) (Grammar and format adjustments)
Jump to navigation Jump to search








Imperium Alliance Members Involved
BluemetaknightSteam Profile
BREACHER/2SPROCKETSteam Profile
RatakisSteam Profile
DuffSteam Profile
ComputerationSteam Profile


Truth Nuke is an exposé produced by the Cerulean Taskforce in the form of a YouTube video during early 2024. It spanned several skirmishes during the period of February 15th, 2024 to March 4th, 2024 between the Kestrel-Astria Treaty Organization and the Imperial Alliance. The video exposed that several members of the Imperial Alliance were found to be producing and/or knowingly using technology which abused exploits in ACF-3, and several others did not care it was happening. The video ultimately led to the internal fracturing of the alliance, and later its dissolution after The Imperium and the Cerulean Taskforce worked together in a second exposé named Truth Meteor.

Prelude

On May 7th, 2023, the Yakugirian leader CRISIS asked one of his members, BREACHER, to help him set up YSR's T-80BVM. Unknowingly to CRISIS, BREACHER installed a chip on the T-80BVM called "ABS." This is the first time the chip was seen on production vehicles, although previous members/affiliates of the Imperial Alliance attest it was used even earlier than this. The chips purpose is to apply external non-ACF forces to the tank for the purpose of stabilization. Chips that apply external force to a contraption are against most faction and server rulesets when used outside of rare exceptions (aircraft, for example, due to the fact there's no practical alternative at the moment). The chip also set wheel inertia to further assist in stabilization.

The declaration of war given by Bluemetaknight on July 15th, 2023

At the same time that this was happening, the Cerulean Taskforce and its allies were attempting to start a faction-combat server named "Biden's Hair," while also attempting to work with the Imperial Alliance on an agreed upon ruleset, despite their previous behavior strongly discouraging an attempt to work together. The extents of their cheating - notably, during these attempts at good faith discussions - were not known until post-exposé. On July 15th, 2023, conflicts between the Imperial Alliance and the Kestrel-Astria Treaty Organization had come to a head. The Biden's Hair ruleset discussions, partially due to some aggression from KATO members during the talks, and some actions of lower-KATO members, had started to fall apart. Subsequently, Bluemetaknight announced that he was no longer interested in discussions.

The conflicts spanning the next twelve days are undocumented for the most part, with the exception of the final conflict on July 27th, 2023. During the conflicts, the Cerulean Taskforce was developing their first iteration of their scanners. These were developed both because of the conflicts, and because it was believed that the Imperial Alliance never wanted Biden's Hair to work out, and were just waiting until they could find a way to blame KATO and justify escalation. These prototype scanners discovered that Bluemetaknight and BREACHER were using not solid seats, and although they claimed at the time it was accidental, conflicts ceased soon after. It was also discovered that one variant of the VTOL had two seats on it, but it was unknown at the time if this was anything of significance. Plausible deniability led to people initially believing this was some sort of multi-role setup, but it was later admitted by Bluemetaknight its intention was to game K/D ratios.

References

ABS

This is the source code for ABS, coded by Bluemetaknight.

--@name ABS V2
--@author
--@server
--@model models/cheeze/wires/nano_chip.mdl

wire.adjustPorts({Active = 'number',A = 'number',D = 'number',Base = 'entity', I = "entity",II = "entity",III = "entity",IV = "entity", ZAxis = 'entity', ZAxisPar = 'entity', LGB = 'entity', RGB = 'entity'},{Weld = 'number', RBrakeMod = 'number', LBrakeMod = 'number'})

local function filter(ent) return ent:getOwner() != owner() end
local function filter2(ent) return ent:getOwner() == owner() end

local Base = wire.ports.Base
local Core = 0
local Up = Vector(0,0,1)

local LG = wire.ports.LGB
local RG = wire.ports.RGB

local last_think = timer.curtime()
local last_pos = Base:getPos()
local HoloLastYaw = 0

local ZAxis = wire.ports.ZAxis
local ZAxisPar = wire.ports.ZAxisPar
constraint.breakType(ZAxisPar,"AdvBallsocket")
local Inertia = 1
local Multi = 10000

local UseConst = 1 --Experimental oversteer correction. Bugs outsomtimes and locks your yaw. Use at your own risk.

if UseConst == 1 then
    ConstFric = 66666
    Const = constraint.ballsocketadv(ZAxis, ZAxisPar, nil, nil, Vector(), Vector(), nil, nil, Vector(-360), Vector(360), Vector(ConstFric),true)
end

local Pod = wire.ports.Pod
local LG = wire.ports.LGB
local RG = wire.ports.RGB

Wheels=find.byModel("models/sprops/trans/wheel_f/f_wheel50.mdl",filter2)
for i, v in ipairs(Wheels) do
    if v:isValid()==true then
        v:setInertia(Vector(13.85,9.83,9.83))
        v:setCollisionGroup(1)
    end
end
timer.create("Link", 0.5, 0, function()
    RG:acfLinkTo(wire.ports.III,false)
    LG:acfLinkTo(wire.ports.II,false)
end)

if UseConst == 1 then
    hook.add( "input", "", function(name,value)
        if name == "A" then
            if value == 1 then
                if Const:isValid() then
                    Const:remove()
                end
                Const = constraint.ballsocketadv(ZAxis, ZAxisPar, nil, nil, Vector(), Vector(), nil, nil, Vector(-360), Vector(360), Vector(0),true)
            elseif value == 0 then
                if Const:isValid() then
                    Const:remove()
                end
                Const = constraint.ballsocketadv(ZAxis, ZAxisPar, nil, nil, Vector(), Vector(), nil, nil, Vector(-360), Vector(360), Vector(ConstFric),true)
            end
        elseif name == "D" then
            if value == 1 then
                if Const:isValid() then
                    Const:remove()
                end
                Const = constraint.ballsocketadv(ZAxis, ZAxisPar, nil, nil, Vector(), Vector(), nil, nil, Vector(-360), Vector(360), Vector(0),true)
            elseif value == 0 then
                if Const:isValid() then
                    Const:remove()
                end
                Const = constraint.ballsocketadv(ZAxis, ZAxisPar, nil, nil, Vector(), Vector(), nil, nil, Vector(-360), Vector(360), Vector(ConstFric),true)
            end
        end
    end)
end
hook.add("Think","",function()

    local delta_t = timer.curtime() - last_think
    last_think = timer.curtime()

    local Active = wire.ports.Active
    local MPH = (wire.ports.Base:getVelocity():getLength()*0.75) * (3600 / 63360)
    if Active == 1 then
        Core = Core + 1
        if Core == 10 then
            local t = trace.trace(Base:getPos(), Base:getPos()+Vector(0,0,-500), filter)
            Base:setCollisionGroup(1)
            Up = t.HitNormal
            if Up == Vector() then Up = Vector(0,0,1) end
            Core = 0
        end

        local Forward = Base:getForward()

        local WorldForward = Forward:setZ(0)
        local Velocity = Base:getVelocity():getNormalized():setZ(0)
        local Cross = WorldForward:cross(Velocity).z
        local ForceDir = Forward:cross(Up)

        local Dot = WorldForward:dot(Velocity)
        local Ang = math.acos(Dot)*(180/math.pi)*math.sign(Cross)

        wire.ports.RBrakeMod = (-Ang)*0.5
        wire.ports.LBrakeMod = (Ang)*0.5

        if wire.ports.A == 1 or wire.ports.D == 1 then
            Inertia = 0
            ZAxis:setInertia(Vector(250))
            wire.ports.Weld = 0
        elseif Inertia <= 1 then
            Inertia = math.clamp(Inertia+0.15,0,1)
            ZAxis:setInertia(Vector(250+(Inertia*Multi)))
            wire.ports.Weld = 1
        end
        if MPH > 5  then
            wire.ports.I:applyForceCenter((1+(math.clamp(Cross,0,10)*15))*Vector(0,0,-10)*wire.ports.I:getMass())
            wire.ports.II:applyForceCenter((1+(math.clamp(Cross,0,10)*15))*Vector(0,0,-10)*wire.ports.II:getMass())
            wire.ports.III:applyForceCenter((1+(math.clamp(-Cross,0,10)*15))*Vector(0,0,-10)*wire.ports.III:getMass())
            wire.ports.IV:applyForceCenter((1+(math.clamp(-Cross,0,10)*15))*Vector(0,0,-10)*wire.ports.IV:getMass())
        end
    end
end)