/* Kokonaut */
freeslot(
"MT_KOKONAUT",
"S_KOKONAUT_STAND",
"S_KOKONAUT_ANGRY",
"MT_KOKONAUT_SPIK",
"S_KOKONAUT_SPIK",
"S_KOKONAUT_SPIK_FALL",
"S_KOKONAUT_SPIK_FALL1",
"SPR_KOKO",
"SPR_KOSP")

mobjinfo[MT_KOKONAUT] = {
	--$Name Kokonaut
	--$Sprite KOKOA1
	--$Category Sempiternity Shores
	doomednum = 2340,
	radius = 20*FRACUNIT,
	height = 40*FRACUNIT,
	spawnstate = S_KOKONAUT_STAND,
	deathstate = S_XPLD_FLICKY,
	deathsound = sfx_pop,
	seestate = S_KOKONAUT_ANGRY,
	mass = 4*FRACUNIT,
	speed = 2,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY
}

states[S_KOKONAUT_STAND] = {
	sprite = SPR_KOKO,
	frame = A,
	tics = 5,
	action = A_Look,
	nextstate = S_KOKONAUT_STAND
}

states[S_KOKONAUT_ANGRY] = {
	sprite = SPR_KOKO,
	frame = B,
	tics = 1,
	nextstate = S_KOKONAUT_ANGRY
}

mobjinfo[MT_KOKONAUT_SPIK] = {
	radius = 4*FRACUNIT,
	height = 4*FRACUNIT,
	spawnstate = S_KOKONAUT_SPIK,
	speed = 2*FRACUNIT,
	mass = 0,
	damage = 8*FRACUNIT,
	painchance = 20*FRACUNIT,
	flags = MF_PAIN|MF_NOGRAVITY|MF_NOCLIPHEIGHT
}


states[S_KOKONAUT_SPIK] = {
	sprite = SPR_KOSP,
	frame = A,
	tics = 1,
	nextstate = S_KOKONAUT_SPIK
}

states[S_KOKONAUT_SPIK_FALL] = {
	sprite = SPR_KOSP,
	frame = A|FF_TRANS50,
	tics = TICRATE/8,
	nextstate = S_KOKONAUT_SPIK_FALL1,
}

states[S_KOKONAUT_SPIK_FALL1] = {
	sprite = SPR_NULL,
	tics = TICRATE/8,
	nextstate = S_KOKONAUT_SPIK_FALL,
}


addHook("MobjThinker", function(mo)
	if mo.state == S_KOKONAUT_ANGRY or mo.state == S_KOKONAUT_STAND
		if not mo.init
			mo.spikeballs = {}
			for i = 0,5
				local spik = P_SpawnMobj(mo.x,mo.y,mo.z,MT_KOKONAUT_SPIK)
				spik.target = mo
				for b = 0,i
					A_Custom3DRotate(spik,(10<<16)+48,360)
				end
				mo.spikeballs[i] = spik
			end
			mo.init = true
		end
		mo.z = P_FloorzAtPos(mo.x,mo.y,mo.z,mo.height) + 48*FRACUNIT
		for i in pairs(mo.spikeballs)
			if mo.spikeballs[i].valid
				mo.spikeballs[i].angle = mo.angle
				if mo.state == S_KOKONAUT_STAND
					if mo.spikeballs[i].valid
						A_Custom3DRotate(mo.spikeballs[i],(10<<16)+48,10)
					end
				else
					if mo.spikeballs[i].valid
						A_Custom3DRotate(mo.spikeballs[i],(10<<16)+48,50)
					end
				end
			end
		end
		if mo.state == S_KOKONAUT_ANGRY
			A_Chase(mo,3)
		end
	else
		for i in pairs(mo.spikeballs)
			if mo.spikeballs[i].valid
				mo.spikeballs[i].state = S_KOKONAUT_SPIK_FALL
				mo.spikeballs[i].target = mo.target
				mo.spikeballs[i].flags = MF_MISSILE
				mo.spikeballs[i].momz = P_RandomRange(2,4)*FRACUNIT
				mo.spikeballs[i].momx = P_RandomRange(-2,2)*FRACUNIT
				mo.spikeballs[i].momy = P_RandomRange(-2,2)*FRACUNIT
				table.remove(mo.spikeballs,i)
			end
		end
	end
  end
, MT_KOKONAUT)

/* gib mod compatability */
if gibs
	table.insert(gibs.mechanical,MT_KOKONAUT)
end