//Freeslots
freeslot("S_VMDDASHTAIL","SPR_DRPT","S_PLAY_VMTAILSWIPE")
states[S_PLAY_VMTAILSWIPE] = {SPR_PLAY, SPR2_TWIN, 2, nil, 0, 0, S_PLAY_STND}

states[S_VMDDASHTAIL] = {
	sprite = SPR_DRPT,
	frame = FF_ANIMATE,
	var1 = 4,
	var2 = 1,
	tics = 10,
	nextstate = S_VMDDASHTAIL
}

// Flight Fix

addHook("JumpSpecial", function(player)
if player.mo.skin == "vmtails"
and (player.cmd.buttons & BT_JUMP) and (player.powers[pw_tailsfly] > 0)

player.fly1 = 1
end
end)

addHook("PlayerThink", function(player)
if player.vmtailswipespeen == nil then player.vmtailswipespeen = 0 return end
if player.mo and player.mo.valid and player.mo.skin == "vmtails"
and player.cmd.buttons & BT_CUSTOM1
and P_IsObjectOnGround(player.mo)
and player.speed < 24*FRACUNIT
and not (player.pflags & PF_SPINNING)
and not (player.pflags & PF_SLIDING)
and not (player.pflags & PF_STARTDASH)
and not player.exiting
and not player.vmcansuper

player.vmtailswipe = true
end
end)

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid and player.mo.skin == "vmtails"
and player.vmtailswipe

player.mo.state = S_PLAY_VMTAILSWIPE
player.jumpfactor = 0
player.charability2 = CA2_NONE
player.charflags = $|SF_NOSKID
player.normalspeed = 20*FRACUNIT
player.pflags = $ & ~ PF_SPINNING
player.vmtailswipespeen = $+1
player.drawangle = ANGLE_45*player.vmtailswipespeen
end
end)

addHook("PlayerThink",function(player)
if player.mo and player.mo.valid and player.mo.skin == "vmtails"
and not player.vmtailswipe

player.vmtailswipespeen = 0
end
end)

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid and player.mo.skin == "vmtails" 
and (not P_IsObjectOnGround(player.mo)
or not (player.cmd.buttons & BT_CUSTOM1))
and player.vmtailswipe

player.vmtailswipe = false
player.jumpfactor = skins[player.mo.skin].jumpfactor
player.normalspeed = skins[player.mo.skin].normalspeed
player.charability2 = skins[player.mo.skin].ability2
if not (skins[player.mo.skin].flags & SF_NOSKID)
player.charflags = $ & ~SF_NOSKID
end
end
end)

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid and player.mo.skin != "vmtails" 
and player.vmtailswipe

player.vmtailswipe = false
player.jumpfactor = skins[player.mo.skin].jumpfactor
player.normalspeed = skins[player.mo.skin].normalspeed
player.charability2 = skins[player.mo.skin].ability2
if not (skins[player.mo.skin].flags & SF_NOSKID)
player.charflags = $ & ~SF_NOSKID
end
end
end)

addHook("PlayerCanDamage", function(player)
	if player.mo and player.mo.valid and player.mo.skin == "vmtails" 
    and player.vmtailswipe then
        return true
    end
end)

addHook("ThinkFrame", function(player)
for player in players.iterate
if player.mo.skin == "vmtails" and player.mo.state == S_PLAY_VMTAILSWIPE
and player.followmobj then
player.followmobj.state = S_TAILSOVERLAY_EDGE
end
end
end)

//Flight Cancel
addHook("PlayerThink", function(player)
if player.mo and player.mo.skin == "vmtails"
and (player.powers[pw_tailsfly] or player.mo.state == S_PLAY_FLY_TIRED) and (player.cmd.buttons & BT_CUSTOM1) and not player.vmflynthold

S_StartSound(player.mo, sfx_zoom)
player.mo.state = S_PLAY_JUMP
player.pflags = $|PF_JUMPED|PF_THOKKED
player.powers[pw_tailsfly] = 0
P_SpawnThokMobj(player)
end
end)

addHook("PlayerThink", function(player)
if player.mo and player.mo.skin == "vmtails"
and player.cmd.buttons & BT_CUSTOM1

player.vmflynthold = true
else
player.vmflynthold = false
end
end)