addHook("PreThinkFrame", function()
	for player in players.iterate
		if (player.mo and player.mo.valid and player.playerstate == PST_LIVE)
		and mapheaderinfo[gamemap].td_escape or mapheaderinfo[gamemap].td_escape2
			if not player.exiting
				P_StartQuake(20*FRACUNIT, 35, {0, 0, 0}, player.mo.radius)
			end
		end
	end
end)

local function boosttrail(mo, trailmo, freq)
    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
    local mospeed = R_PointToDist2(0, 0, R_PointToDist2(0, 0, mo.momx, mo.momy), rmomz)
    local dist = (mospeed/freq)
    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.blendmode = AST_ADD
		spawnedmo.frame = FF_TRANS50
    end
end

addHook("PreThinkFrame", function()
	for player in players.iterate
																			//Support a Blaze(this is my love character)
		if (player.mo and player.mo.valid and player.playerstate == PST_LIVE and player.mo.skin != "blaze")
		and mapheaderinfo[gamemap].td_escape2
		and not (player.mo.state == S_PLAY_ROLL or player.mo.state == S_PLAY_SPINDASH or player.mo.state == S_PLAY_SPRING)
			if not player.exiting
				P_InstaThrust(player.mo, player.mo.angle, 60*FRACUNIT)
				player.charflags = $1|SF_NOSKID|SF_RUNONWATER|SF_CANBUSTWALLS
				boosttrail(player.mo, MT_THOK, 4*FRACUNIT)
				local boost = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z, MT_THOK)
				boost.color = player.mo.color
				boost.colorized = true
				boost.sprite = SPR_FIRS
				boost.frame = S|FF_TRANS70
				boost.angle = player.mo.angle
				boost.fuse = 2
				if player.mo.state == S_PLAY_STND
				or player.mo.state == S_PLAY_WALK
				or player.mo.state == S_PLAY_WAIT
				or player.mo.state == S_PLAY_EDGE then
					player.mo.state = S_PLAY_RUN
				end
			end
		end
	end
end)