/*freeslot(
	"SPR_WRUN",
	"SPR_WRU2",
	"S_WRUN_EFCT",
	"S_WRUN_EFC2",
	"MT_WRUN_EFCT",
	"MT_WRUN_EFC2",
	"SPR_SWRN",
	"SPR_SWR2",
	"S_SWRN_EFCT",
	"S_SWRN_EFC2",
	"MT_SWRN_EFCT",
	"MT_SWRN_EFC2"
)

mobjinfo[MT_WRUN_EFCT] = {
	spawnstate = S_WRUN_EFCT,
	radius = FRACUNIT/2,
	height = FRACUNIT,
	flags = MF_SCENERY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY
}

states[S_WRUN_EFCT] = {
  sprite = SPR_WRUN,
  frame = A|FF_ANIMATE|FF_PAPERSPRITE|TR_TRANS10,
  tics = -1, -- state duration
  action = nil,
  var1 = 4, -- # of frames - 1 (aka 5 frames)
  var2 = 3, -- duration of each frame, in tics
  nextstate = S_NULL
}

mobjinfo[MT_SWRN_EFCT] = {
	spawnstate = S_SWRN_EFCT,
	radius = FRACUNIT/2,
	height = FRACUNIT,
	flags = MF_SCENERY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY
}

states[S_SWRN_EFCT] = {
  sprite = SPR_SWRN,
  frame = A|FF_ANIMATE|FF_PAPERSPRITE|TR_TRANS10,
  tics = -1, -- state duration
  action = nil,
  var1 = 5, -- # of frames - 1 (aka 6 frames)
  var2 = 3, -- duration of each frame, in tics
  nextstate = S_NULL
}

mobjinfo[MT_WRUN_EFC2] = {
	spawnstate = S_WRUN_EFC2,
	radius = FRACUNIT/2,
	height = FRACUNIT,
	flags = MF_SCENERY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY
}

states[S_WRUN_EFC2] = {
  sprite = SPR_WRU2,
  frame = A|FF_ANIMATE|FF_PAPERSPRITE|TR_TRANS10,
  tics = -1, -- state duration
  action = nil,
  var1 = 4, -- # of frames - 1 (aka 5 frames)
  var2 = 3, -- duration of each frame, in tics
  nextstate = S_NULL
}

mobjinfo[MT_SWRN_EFC2] = {
	spawnstate = S_SWRN_EFC2,
	radius = FRACUNIT/2,
	height = FRACUNIT,
	flags = MF_SCENERY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY
}

states[S_SWRN_EFC2] = {
  sprite = SPR_SWR2,
  frame = A|FF_ANIMATE|FF_PAPERSPRITE|TR_TRANS10,
  tics = -1, -- state duration
  action = nil,
  var1 = 5, -- # of frames - 1 (aka 6 frames)
  var2 = 3, -- duration of each frame, in tics
  nextstate = S_NULL
}

addHook("PlayerThink", function(player)
local function IsRunningOnWater(player)
        local waterBlock = player.mo.floorrover

        if (player.mo.eflags & MFE_VERTICALFLIP) then
            waterBlock = player.mo.ceilingrover
        end

        if (waterBlock) then
            return P_CanRunOnWater(player, waterBlock)
        end
    end
        -- Normal Water Run
        if (FixedHypot(player.rmomx, player.rmomy)  >= 46*FRACUNIT)
    and (FixedDiv(player.mo.momz, player.mo.scale) == 0*FRACUNIT)
       player.charflags = $1|SF_RUNONWATER
    else
       player.charflags = $1 & ~SF_RUNONWATER
    end
		if IsRunningOnWater(player)
			and not (player.mo.skin == "sonic" and player.powers[pw_super])
				and not (player.mo.skin == "metalsonic")
					--Mod Support
					and not (player.mo.skin == "adventuresonic" and player.powers[pw_super])
						and not (player.mo.skin == "metalknuckles")
						and not (player.mo.skin == "tailsdoll")
							and not (player.mo.skin == "blaze" and player.powers[pw_super])
							and not (player.mo.skin == "marine" and player.powers[pw_super])
								and not (player.mo.skin == "shadow")
									and not (player.mo.skin == "silver")
        S_StartSound(player.mo, sfx_s3kdbs)
        if not player.wrunefct
            and not player.wrunefct2
                player.wrunefct = P_SpawnMobjFromMobj(player.mo, -40*cos(player.drawangle + ANGLE_45), -40*sin(player.drawangle + ANGLE_45), 0, MT_WRUN_EFC2)
                player.wrunefct2 = P_SpawnMobjFromMobj(player.mo, -40*cos(player.drawangle - ANGLE_45), -40*sin(player.drawangle - ANGLE_45), 0, MT_WRUN_EFCT)
                player.wrunefct.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.wrunefct.x, player.wrunefct.y) --- ANG15
                player.wrunefct2.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.wrunefct2.x, player.wrunefct2.y) --+ ANG15
				player.wrunefct.scale = $ * 2
				player.wrunefct2.scale = $ * 2
            end
            if player.wrunefct
                and player.wrunefct2
                and player.wrunefct.valid
                and player.wrunefct2.valid
                    player.wrunefct.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.wrunefct.x, player.wrunefct.y) --- ANG15
                    P_TeleportMove(player.wrunefct, player.mo.x + (-40*cos(player.drawangle + ANGLE_45)), player.mo.y + (-40*sin(player.drawangle + ANGLE_45)), player.mo.z)
                    player.wrunefct2.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.wrunefct2.x, player.wrunefct2.y) --+ ANG15
                    P_TeleportMove(player.wrunefct2, player.mo.x + (-40*cos(player.drawangle - ANGLE_45)), player.mo.y + (-40*sin(player.drawangle - ANGLE_45)), player.mo.z)
                    player.wrunefct.anim_duration = player.mo.tics
                    player.wrunefct2.anim_duration = player.mo.tics
                    if player.mo.eflags & MFE_TOUCHLAVA or player.isonlavafof == true
                        player.wrunefct.colorized = true
                        player.wrunefct.color = SKINCOLOR_FLAME
                        player.wrunefct2.colorized = true
                        player.wrunefct2.color = SKINCOLOR_FLAME
                    elseif player.mo.eflags & MFE_GOOWATER or player.isongoowaterfof == true
                        player.wrunefct.colorized = true
                        player.wrunefct.color = SKINCOLOR_LAVENDER
                        player.wrunefct2.colorized = true
                        player.wrunefct2.color = SKINCOLOR_LAVENDER
                    else
                        player.wrunefct.colorized = false
                        player.wrunefct2.colorized = false
                    end
                end
            else
                if player.wrunefct
                and player.wrunefct2
                and player.wrunefct.valid
                and player.wrunefct2.valid
                    P_RemoveMobj(player.wrunefct)
                    P_RemoveMobj(player.wrunefct2)
                    player.wrunefct = nil
                    player.wrunefct2 = nil
                end
        player.isonlavafof = false
		player.isongoowaterfof = false
        end
		-- Super Water Run
        if IsRunningOnWater(player)
			and (player.mo.skin == "sonic" and player.powers[pw_super])
			or IsRunningOnWater(player) and (player.mo.skin == "metalsonic")
			-- Mod Support
			or IsRunningOnWater(player) and (player.mo.skin == "adventuresonic" and player.powers[pw_super])
				or IsRunningOnWater(player) and (player.mo.skin == "metalknuckles")
				or IsRunningOnWater(player) and (player.mo.skin == "tailsdoll")
					or IsRunningOnWater(player) and (player.mo.skin == "blaze" and player.powers[pw_super])
					or IsRunningOnWater(player) and (player.mo.skin == "marine" and player.powers[pw_super])
						or IsRunningOnWater(player) and (player.mo.skin == "shadow")
							or IsRunningOnWater(player) and(player.mo.skin == "silver")
        S_StartSound(player.mo, sfx_s3kdbs)
        if not player.swrnefct
            and not player.swrnefct2
                player.swrnefct = P_SpawnMobjFromMobj(player.mo, -40*cos(player.drawangle + ANGLE_45), -40*sin(player.drawangle + ANGLE_45), 0, MT_SWRN_EFC2)
                player.swrnefct2 = P_SpawnMobjFromMobj(player.mo, -40*cos(player.drawangle - ANGLE_45), -40*sin(player.drawangle - ANGLE_45), 0, MT_SWRN_EFCT)
                player.swrnefct.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.swrnefct.x, player.swrnefct.y) --- ANG15
                player.swrnefct2.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.swrnefct2.x, player.swrnefct2.y) --+ ANG15
				player.swrnefct.scale = $ * 2
				player.swrnefct2.scale = $ * 2
            end
            if player.swrnefct
                and player.swrnefct2
                and player.swrnefct.valid
                and player.swrnefct2.valid
				and not (leveltime % 6)
                    player.swrnefct.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.swrnefct.x, player.swrnefct.y) --- ANG15
					P_TeleportMove(player.swrnefct, player.mo.x + (-40*cos(player.drawangle + ANGLE_45)), player.mo.y + (-40*sin(player.drawangle + ANGLE_45)), player.mo.z)
                    player.swrnefct2.angle = R_PointToAngle2(player.mo.x, player.mo.y, player.swrnefct2.x, player.swrnefct2.y) --+ ANG15
                    P_TeleportMove(player.swrnefct2, player.mo.x + (-40*cos(player.drawangle - ANGLE_45)), player.mo.y + (-40*sin(player.drawangle - ANGLE_45)), player.mo.z)
                    player.swrnefct.anim_duration = player.mo.tics
                    player.swrnefct2.anim_duration = player.mo.tics
                    if player.mo.eflags & MFE_TOUCHLAVA or player.isonlavafof == true
                        player.swrnefct.colorized = true
                        player.swrnefct.color = SKINCOLOR_FLAME
                        player.swrnefct2.colorized = true
                        player.swrnefct2.color = SKINCOLOR_FLAME
                    elseif player.mo.eflags & MFE_GOOWATER or player.isongoowaterfof == true
                        player.swrnefct.colorized = true
                        player.swrnefct.color = SKINCOLOR_LAVENDER
                        player.swrnefct2.colorized = true
                        player.swrnefct2.color = SKINCOLOR_LAVENDER
                    else
                        player.swrnefct.colorized = false
                        player.swrnefct2.colorized = false
                    end
                end
            else
                if player.swrnefct
                and player.swrnefct2
                and player.swrnefct.valid
                and player.swrnefct2.valid
                    P_RemoveMobj(player.swrnefct)
                    P_RemoveMobj(player.swrnefct2)
                    player.swrnefct = nil
                    player.swrnefct2 = nil
                end
        player.isonlavafof = false
		player.isongoowaterfof = false
        end
    end)*/