local BattleFuncSet = false

addHook("MobjThinker", function(mo)
	if mo
	and mo.valid
	and mo.type == MT_SPIKEBURST
	and mo.state == mobjinfo[mo.type].spawnstate
		local thok = P_SpawnMobj(mo.x+(mo.momx/2), mo.y+(mo.momy/2), mo.z+(mo.momz/2), MT_THOK)
		thok.state = S_SPIKEBURSTLEFTRIGHT
		thok.angle = mo.angle+ANGLE_90
	end
end, MT_SPIKEBURST)

addHook("ThinkFrame",function()
	if (BattleFuncSet) or not(CBW_Battle and CBW_Battle.SkinVars) then return end
		BattleFuncSet = true

		local MechaSonicBattle = function(mo,doaction,pressedaction)
		local player = mo.player
		if not(CBW_Battle.CanDoAction(player))
			player.actionstate = 0
			return
		end
		player.actiontext = "Spike Scater"
		player.actionrings = 10
		if player.actionstate != 0
			player.canguard = false
		end
		if player.actionstate == 0
			if doaction == 1
				CBW_Battle.PayRings(player)
				player.mo.state = S_PLAY_JUMP
				A_Thrust(player.mo, 0, 1)
				S_StartSound(player.mo, sfx_s1a6)
				P_SetObjectMomZ(player.mo, 5*FRACUNIT)
				P_SpawnParaloop(player.mo.x,player.mo.y,player.mo.z,player.mo.scale*64,12,MT_DUST,ANGLE_90,nil,true)
				P_SpawnPlayerMissile(mo, MT_SPIKEBURST, MF2_SCATTER)
				local scat1 = P_SPMAngle(mo, MT_SPIKEBURST, mo.angle-ANG2, 1, MF2_SCATTER)
				local scat2 = P_SPMAngle(mo, MT_SPIKEBURST, mo.angle+ANG2, 1, MF2_SCATTER)
				local scat3 = P_SPMAngle(mo, MT_SPIKEBURST, mo.angle, 1, MF2_SCATTER)
				scat3.momz = $1 + FixedMul(2*FRACUNIT, mo.scale)
				local scat4 = P_SPMAngle(mo, MT_SPIKEBURST, mo.angle, 1, MF2_SCATTER)
				scat4.momz = $1 - FixedMul(2*FRACUNIT, mo.scale)
				CBW_Battle.ApplyCooldown(player, 2*TICRATE)
			end
		end
	end
	
	CBW_Battle.SkinVars["mecha"] = {
		weight = 100,
		shields = 1,
		guard_frame = 2,
		special = MechaSonicBattle,
 		guard_enabled = true,
 		guard_frame = 2,
 		func_guard_trigger = CBW_Battle.GuardFunc.Parry
	}
end)