freeslot(
	"SPR_WRUN",
	"SPR_WRU2",
	"S_WRUN_EFCT",
	"S_WRUN_EFC2",
	"MT_WRUN_EFCT",
	"MT_WRUN_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_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
}

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
        
        if (FixedDiv(player.speed, player.mo.scale) >= 50*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)
        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
    end)