// --------------------------------------
// Lua_Mike
// Mike ability!
// --------------------------------------
sfxinfo[sfx_mike].flags = $1|SF_X8AWAYSOUND
sfxinfo[sfx_mike2].flags = $1|SF_X8AWAYSOUND
sfxinfo[sfx_mikef].flags = $1|SF_X8AWAYSOUND

rawset(_G, "K_Mike", function(checkflags, destroy, late, player)
	if(checkflags)
		if(player.kvars.ablstate)
			return AF_NOFLOAT|AF_NODUCK|AF_NOJUMP|AF_NOSWIM|AF_NODROP
		end
		return 0
	end
	if(destroy)
		return
	end
	if(late)
		return
	end
	
	if(player.cmd.buttons & BT_USE)
		and not(player.kvars.prevcmd & BT_USE)
		and not(player.kvars.ducking)
		and not(player.kvars.floating)
		and not(player.pflags & PF_SLIDING)
		and not(player.powers[pw_carry] or player.kvars.prevcarry)
		and not(player.exiting)
		and not(player.pflags & PF_STASIS)
		and not(player.powers[pw_nocontrol])
		and not(player.kvars.industdevil)
		and not(player.kvars.ablstate)	// Last line befor considering the ability done, that would've been bad to miss!
		if(player.kvars.ability == 14)
			player.mo.state = S_KIRBY_MFINAL1
		else
			player.mo.state = S_KIRBY_SHOUT1
		end
		player.kvars.ablvar1 = player.kvars.ability
		player.kvars.ablstate = 1
	end
	
	if(player.kvars.ablstate)
		player.mo.momx = 0
		player.mo.momy = 0
		player.mo.momz = 0
		if(player.powers[pw_nocontrol] < 2)
			player.powers[pw_nocontrol] = 2
		end
		player.kvars.ablstate = $1 + 1
		if(player.kvars.ablstate == 8)
			and not(player.kvars.ability == 14)
			// Mike!
			local xmom = FixedMul(cos(player.drawangle), player.mo.scale*9)
			local ymom = FixedMul(sin(player.drawangle), player.mo.scale*9)
			local mike = P_SpawnMobj(player.mo.x+xmom, player.mo.y+ymom, player.mo.z, MT_KIRBY_MIKE)
			mike.momx = xmom
			mike.momy = ymom
			if(player.kvars.ability == 13)
				mike.state = S_KIRBY_MIKE2
			end
			mike.angle = player.drawangle
			mike.scale = player.mo.scale
			if(player.mo.eflags & MFE_VERTICALFLIP)
				mike.eflags = $1|MFE_VERTICALFLIP
				mike.flags2 = $1|MF2_OBJECTFLIP
			end
		elseif(player.kvars.ablstate == 18)
			if(player.kvars.ability == 14)
				S_StartSound(player.mo, sfx_mikef)
			elseif(player.kvars.ability == 13)
				S_StartSound(player.mo, sfx_mike2)
				player.kvars.ability = $1 + 1
			else
				S_StartSound(player.mo, sfx_mike)
				player.kvars.ability = $1 + 1
			end
			P_NukeEnemies(player.mo, player.mo, 2500*player.mo.scale)
		elseif(player.kvars.ablstate >= 73)
			player.kvars.ablstate = 0
			if(player.kvars.ablvar1 == 14)
				player.kvars.ability = 0
			end
			player.kvars.eattime = TICRATE*3/2
		end
	end
end)

addHook("MobjThinker", function(mobj)
	mobj.momx = $1 * 2/3
	mobj.momy = $1 * 2/3
end, MT_KIRBY_MIKE)

// Fixes using mike with intro
addHook("MobjDamage", function(fang)
	if(fang.state >= S_FANG_SETUP)
		and(fang.state <= S_FANG_IDLE0)	// Didn't get a chance to solidify!
		fang.flags = $1 & !MF_NOCLIPTHING
	end
end, MT_FANG)
