freeslot("sfx_trun1", "sfx_trun2", "sfx_trun3")
addHook("PlayerThink", function()
for player in players.iterate do
if player and player.mo and player.mo.valid and player.mo.skin == "legacytrop" then
-- Calculate player's speed
player.machghosts = player.machghosts or false
player.machghoststime = player.machghoststime or 2
local speed = R_PointToDist2(0, 0, player.mo.momx, player.mo.momy) / FRACUNIT

-- Initialize flags if not already
if not player.sound_level1_triggered then player.sound_level1_triggered = false end
if not player.sound_level2_triggered then player.sound_level2_triggered = false end
if not player.sound_level3_triggered then player.sound_level3_triggered = false end

-- Play sound based on speed
if speed > 1 and speed <= 28 then
player.machghosts = false
if not player.sound_level1_triggered then
-- Stop existing sounds
if player.sound_level2_triggered then
S_StopSound(player.mo, sfx_trun2)
player.sound_level2_triggered = false
end
if player.sound_level3_triggered then
S_StopSound(player.mo, sfx_trun3)
player.sound_level3_triggered = false
end

S_StartSound(player.mo, sfx_trun1)
player.sound_level1_triggered = true
end

elseif speed > 28 and speed <= 40 then
player.machghosts = false
if not player.sound_level2_triggered then
-- Stop existing sounds
if player.sound_level1_triggered then
S_StopSound(player.mo, sfx_trun1)
player.sound_level1_triggered = false
end
if player.sound_level3_triggered then
S_StopSound(player.mo, sfx_trun3)
player.sound_level3_triggered = false
end

S_StartSound(player.mo, sfx_trun2)
player.sound_level2_triggered = true
end

elseif speed > 40 then
if not player.sound_level3_triggered then
-- Stop existing sounds
if player.sound_level1_triggered then
S_StopSound(player.mo, sfx_trun1)
player.sound_level1_triggered = false
end
if player.sound_level2_triggered then
S_StopSound(player.mo, sfx_trun2)
player.sound_level2_triggered = false
end

player.machghosts = true
P_SpawnGhostMobj(player.mo)
S_StartSound(player.mo, sfx_trun3)
player.sound_level3_triggered = true
end

else
-- Reset flags
player.sound_level1_triggered = false
player.sound_level2_triggered = false
player.sound_level3_triggered = false
end

-- Reset flags when sounds finish
if player.sound_level2_triggered and not S_SoundPlaying(player.mo, sfx_trun2) then
player.sound_level2_triggered = false
end

if player.sound_level3_triggered and not S_SoundPlaying(player.mo, sfx_trun3) then
player.sound_level3_triggered = false
end

-- spawn ghost mobjs while custom 1 is pressed
if player.machghosts then
player.machghoststime = player.machghoststime - 1
if player.machghoststime <= 0 then
P_SpawnGhostMobj(player.mo)
player.machghoststime = 2
end
end

end
end
end)