// Stuff shared between the 2.1 and 2.0 Sea Egg
// THIS IS REQUIRED FOR EITHER TO WORK

freeslot(
	// Sprites
	"SPR_OEGO",
	"SPR_OTRP",
	"SPR_PRPL", // Replace this with SPR_OPRL if it gets used in the future
	// Objects
	"MT_OLDTORPEDO",
	"MT_PROPELLER", // Replace this with MT_OLDPROPELLER if it gets used in the future
	// States
	"S_PROPELLER1",
	"S_PROPELLER2",
	"S_PROPELLER3",
	"S_PROPELLER4",
	"S_PROPELLER5",
	"S_PROPELLER6",
	"S_PROPELLER7",
	"S_21EGGMOBILE3_STND",
	"S_21EGGMOBILE3_ATK1",
	"S_21EGGMOBILE3_ATK2",
	"S_21EGGMOBILE3_ATK3A",
	"S_21EGGMOBILE3_ATK3B",
	"S_21EGGMOBILE3_ATK3C",
	"S_21EGGMOBILE3_ATK3D",
	"S_21EGGMOBILE3_ATK4",
	"S_21EGGMOBILE3_ATK5",
	"S_21EGGMOBILE3_LAUGH1",
	"S_21EGGMOBILE3_LAUGH2",
	"S_21EGGMOBILE3_LAUGH3",
	"S_21EGGMOBILE3_LAUGH4",
	"S_21EGGMOBILE3_LAUGH5",
	"S_21EGGMOBILE3_LAUGH6",
	"S_21EGGMOBILE3_LAUGH7",
	"S_21EGGMOBILE3_LAUGH8",
	"S_21EGGMOBILE3_LAUGH9",
	"S_21EGGMOBILE3_LAUGH10",
	"S_21EGGMOBILE3_LAUGH11",
	"S_21EGGMOBILE3_LAUGH12",
	"S_21EGGMOBILE3_LAUGH13",
	"S_21EGGMOBILE3_LAUGH14",
	"S_21EGGMOBILE3_LAUGH15",
	"S_21EGGMOBILE3_LAUGH16",
	"S_21EGGMOBILE3_LAUGH17",
	"S_21EGGMOBILE3_LAUGH18",
	"S_21EGGMOBILE3_LAUGH19",
	"S_21EGGMOBILE3_LAUGH20",
	"S_21EGGMOBILE3_PAIN",
	"S_21EGGMOBILE3_PAIN2",
	"S_21EGGMOBILE3_DIE1",
	"S_21EGGMOBILE3_DIE2",
	"S_21EGGMOBILE3_DIE3",
	"S_21EGGMOBILE3_DIE4",
	"S_21EGGMOBILE3_FLEE1",
	"S_21EGGMOBILE3_FLEE2",
	"S_OLDTORPEDO"
)

// 2.0-2.1 Propeller

function A_OldSeaEggPropeller(actor, var1, var2)
	if not (actor and actor.valid) then return end
	
	local filler
	local jetx, jety, jetz
	
	filler = P_SpawnMobjFromMobj(actor,
								P_ReturnThrustX(actor, actor.angle, -60*FRACUNIT),
								P_ReturnThrustY(actor, actor.angle, -60*FRACUNIT),
								17*FRACUNIT, MT_PROPELLER)
	filler.target = actor
	filler.angle = actor.angle - ANGLE_180
	
	actor.tracer = filler
end

addHook("MobjThinker", function(mobj)
	if not (mobj and mobj.valid) then return end
	
	local jetx, jety
	
	if not (mobj.target and mobj.target.valid) // if you have no target
	or (not (mobj.target.flags & MF_BOSS) and mobj.target.health <= 0) // or your target isn't a boss and it's popped now
	// then remove yourself as well!
		P_RemoveMobj(mobj)
		return
	end
	
	jetx = mobj.target.x + P_ReturnThrustX(mobj.target, mobj.target.angle, FixedMul(-60*FRACUNIT, mobj.target.scale))
	jety = mobj.target.y + P_ReturnThrustY(mobj.target, mobj.target.angle, FixedMul(-60*FRACUNIT, mobj.target.scale))
	
	P_MoveOrigin(mobj, jetx, jety, mobj.target.z + FixedMul(17*FRACUNIT, mobj.target.scale))
	mobj.angle = mobj.target.angle - ANGLE_180
end, MT_PROPELLER)

mobjinfo[MT_PROPELLER] = {
	doomednum = -1,
	spawnstate = S_PROPELLER1,
	spawnhealth = 1000,
	reactiontime = 8,
	speed = 1,
	radius = 4*FRACUNIT,
	height = 4*FRACUNIT,
	mass = 4,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT
}

states[S_PROPELLER1] = {SPR_PRPL, A, 1, nil, 0, 0, S_PROPELLER2}
states[S_PROPELLER2] = {SPR_PRPL, B, 1, nil, 0, 0, S_PROPELLER3}
states[S_PROPELLER3] = {SPR_PRPL, C, 1, nil, 0, 0, S_PROPELLER4}
states[S_PROPELLER4] = {SPR_PRPL, D, 1, nil, 0, 0, S_PROPELLER5}
states[S_PROPELLER5] = {SPR_PRPL, E, 1, nil, 0, 0, S_PROPELLER6}
states[S_PROPELLER6] = {SPR_PRPL, F, 1, nil, 0, 0, S_PROPELLER7}
states[S_PROPELLER7] = {SPR_PRPL, G, 1, nil, 0, 0, S_PROPELLER1}

// A_Boss3TakeDamage ported from 2.1.25's p_enemy.c
function A_21Boss3TakeDamage(actor, var1, var2)
	actor.movecount = var1
	
	if actor.target and actor.target.spawnpoint
		actor.threshold = actor.target.spawnpoint.extrainfo
	end
end

states[S_21EGGMOBILE3_STND] =	{SPR_OEGO,	A,	1,	nil,	0,	0,	S_21EGGMOBILE3_STND}

states[S_21EGGMOBILE3_ATK1] =	{SPR_OEGO,	B,	2,	nil,			0,				0,	S_21EGGMOBILE3_ATK2}
states[S_21EGGMOBILE3_ATK2] =	{SPR_OEGO,	C,	2,	nil,			0,				0,	S_21EGGMOBILE3_ATK3A}
states[S_21EGGMOBILE3_ATK3A] =	{SPR_OEGO,	D,	2,	A_BossFireShot,	MT_OLDTORPEDO,	2,	S_21EGGMOBILE3_ATK3B}
states[S_21EGGMOBILE3_ATK3B] =	{SPR_OEGO,	D,	2,	A_BossFireShot,	MT_OLDTORPEDO,	4,	S_21EGGMOBILE3_ATK3C}
states[S_21EGGMOBILE3_ATK3C] =	{SPR_OEGO,	D,	2,	A_BossFireShot,	MT_OLDTORPEDO,	3,	S_21EGGMOBILE3_ATK3D}
states[S_21EGGMOBILE3_ATK3D] =	{SPR_OEGO,	D,	2,	A_BossFireShot,	MT_OLDTORPEDO,	5,	S_21EGGMOBILE3_ATK4}
states[S_21EGGMOBILE3_ATK4] =	{SPR_OEGO,	E,	2,	nil,			0,				0,	S_21EGGMOBILE3_ATK5}
states[S_21EGGMOBILE3_ATK5] =	{SPR_OEGO,	F,	2,	nil,			0,				0,	S_21EGGMOBILE3_LAUGH1}

states[S_21EGGMOBILE3_LAUGH1] =		{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH2}
states[S_21EGGMOBILE3_LAUGH2] =		{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH3}
states[S_21EGGMOBILE3_LAUGH3] =		{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH4}
states[S_21EGGMOBILE3_LAUGH4] =		{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH5}
states[S_21EGGMOBILE3_LAUGH5] =		{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH6}
states[S_21EGGMOBILE3_LAUGH6] =		{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH7}
states[S_21EGGMOBILE3_LAUGH7] =		{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH8}
states[S_21EGGMOBILE3_LAUGH8] =		{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH9}
states[S_21EGGMOBILE3_LAUGH9] =		{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH10}
states[S_21EGGMOBILE3_LAUGH10] =	{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH11}
states[S_21EGGMOBILE3_LAUGH11] =	{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH12}
states[S_21EGGMOBILE3_LAUGH12] =	{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH13}
states[S_21EGGMOBILE3_LAUGH13] =	{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH14}
states[S_21EGGMOBILE3_LAUGH14] =	{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH15}
states[S_21EGGMOBILE3_LAUGH15] =	{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH16}
states[S_21EGGMOBILE3_LAUGH16] =	{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH17}
states[S_21EGGMOBILE3_LAUGH17] =	{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH18}
states[S_21EGGMOBILE3_LAUGH18] =	{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH19}
states[S_21EGGMOBILE3_LAUGH19] =	{SPR_OEGO,	G,	4,	nil,	0,	0,	S_21EGGMOBILE3_LAUGH20}
states[S_21EGGMOBILE3_LAUGH20] =	{SPR_OEGO,	H,	4,	nil,	0,	0,	S_21EGGMOBILE3_STND}

states[S_21EGGMOBILE3_PAIN] =	{SPR_OEGO,	I,	1,	A_21Boss3TakeDamage,	0,	0,	S_21EGGMOBILE3_PAIN2}
states[S_21EGGMOBILE3_PAIN2] =	{SPR_OEGO,	I,	23,	A_Pain,					0,	0,	S_21EGGMOBILE3_STND}

states[S_21EGGMOBILE3_DIE1] =	{SPR_OEGO,	J,	8,	A_Fall,			0,	0,						S_21EGGMOBILE3_DIE2}
states[S_21EGGMOBILE3_DIE2] =	{SPR_OEGO,	J,	8,	A_BossScream,	0,	MT_BOSSEXPLODE,			S_21EGGMOBILE3_DIE3}
states[S_21EGGMOBILE3_DIE3] =	{SPR_OEGO,	J,	0,	A_Repeat,		12,	S_21EGGMOBILE3_DIE2,	S_21EGGMOBILE3_DIE4}
states[S_21EGGMOBILE3_DIE4] =	{SPR_OEGO,	J,	-1,	A_BossDeath,	0,	0,						S_NULL}

states[S_21EGGMOBILE3_FLEE1] =	{SPR_OEGO,	K,	5,	nil,	0,	0,	S_21EGGMOBILE3_FLEE2}
states[S_21EGGMOBILE3_FLEE2] =	{SPR_OEGO,	L,	5,	nil,	0,	0,	S_21EGGMOBILE3_FLEE1}

mobjinfo[MT_OLDTORPEDO] = {
	doomednum = -1,
	spawnstate = S_OLDTORPEDO,
	spawnhealth = 1000,
	seesound = sfx_rlaunc,
	reactiontime = 8,
	deathstate = S_MINE_BOOM1, // Make this a 2.1 variant if it changes in the future
	deathsound = sfx_cybdth,
	speed = 20*FRACUNIT,
	radius = 11*FRACUNIT,
	height = 8*FRACUNIT,
	mass = 100,
	damage = 20,
	flags = MF_NOBLOCKMAP|MF_MISSILE|MF_NOGRAVITY
}

states[S_OLDTORPEDO] =	{SPR_OTRP,	A,	1,	A_SmokeTrailer,	MT_SMOKE,	0,	S_OLDTORPEDO}
