-- Smooth Trail script by ffoxD.
-- Reusable, use with credit.
local function SmoothTrail(mo, trailmo, freq)
    -- Real Z momentum thingy plus leveltime checks.
    -- You can replace all this with mo.momz+mo.pmomz but that stays at 0 when on slopes and on ground.
    if not mo.prevz or not mo.prevleveltime or (mo.prevleveltime ~= leveltime - 1) then
       mo.prevz = mo.z
    end
    local rmomz = mo.z - mo.prevz
    mo.prevz = mo.z
    mo.prevleveltime = leveltime
    -- Handy local variables.
    local mospeed = R_PointToDist2(0, 0, R_PointToDist2(0, 0, mo.momx, mo.momy), rmomz)
    local dist = (mospeed/freq)
    -- The loop, repeats until it spawns all the thok objects.
    for i = dist, 1, -1 do
        local spawnedmo = P_SpawnMobjFromMobj(mo, (mo.momx/dist)*i, (mo.momy/dist)*i, (rmomz/dist)*i, trailmo)
        spawnedmo.color = mo.color
		spawnedmo.frame = FF_TRANS50
        spawnedmo.blendmode = AST_ADD -- blend
    end
end
-- Usage example.
addHook("PlayerThink", function(player)
    if player.isinboostmode == true then
        if (player.mo and player.mo.skin == "sonic" or player.mo and player.mo.skin == "metalsonic" or player.mo and player.mo.skin == "shadow" or player.mo and player.mo.skin == "tails" or player.mo and player.mo.skin == "takisthefox" or player.mo and player.mo.skin == "amy" or player.mo and player.mo.skin == "silver" or player.mo and player.mo.skin == "fang" or player.mo and player.mo.skin == "knuckles" or player.mo and player.mo.skin == "rangershadow" or player.mo and player.mo.skin == "adventuresonic" or player.mo and player.mo.skin == "frontiersclassic" or player.mo and player.mo.skin == "hessesonic" or player.mo and player.mo.skin == "surge" or player.mo and player.mo.skin == "Sparks" or player.mo and player.mo.skin == "msonic" or player.mo and player.mo.skin == "ovasonic" or player.mo and player.mo.skin == "supersonic") then
            SmoothTrail(player.mo, MT_THOK, 4*FRACUNIT)
        else
            SmoothTrail(player.mo, skins[player.mo.skin].spinitem, 4*FRACUNIT)
        end
    end
end)