Truth Nuke
| Imperium Alliance Members Involved | |
|---|---|
| Bluemetaknight | Steam Profile |
| BREACHER/2SPROCKET | Steam Profile |
| Ratakis | Steam Profile |
| Duff | Steam Profile |
| Computeration | Steam 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.

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.
-
The Bluemetaknight VTOL used ~July 29th, 2023. Notably, the [P]'s are seats. There are two seats because one of them is a faux seat, while the other is a microscopic nano_compare seat to ensure the user is harder to kill.
-
Another variation of the Bluemetaknight VTOL with a non-solid seat used by BREACHER. Used on July 29th, 2023.
-
A closer screenshot of Bluemetaknight's VTOL, note that the scanner labels the seat as "NOTSOLID."
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)