freeslot(
	"MT_GOOPA",
	"S_GOPA_STND",
	"S_GOPA_HANG1",
	"S_GOPA_HANG2",
	"S_GOPA_HANG3",
	"S_GOPA_HANG4",
	"S_GOPA_HANG5",
	"S_GOPA_HANG6",
	"S_GOOP4",
	"S_GOOP5",
	"MT_STIKA_GOOP",
	"S_STKA_GOOP1",
	"S_STKA_GOOP2",
	"S_STKA_GOOP3",
	"S_STKA_GOOP4",
	"S_STKA_GOOP5",
	"S_STKA_GOOP6",
	"S_STKA_GOOP7",
	"MT_STIKA_GOOPTRAIL",
	"S_STKA_GOOPTRAIL1",
	"S_STKA_GOOPTRAIL2",
	"MT_STIKA",
	"S_STKA_STND",
	"S_STKA_RUN1",
	"S_STKA_RUN2",
	"S_STKA_RUN3",
	"S_STKA_RUN4",
	"S_STKA_RUN5",
	"S_STKA_RUN6",
	"S_STKA_RUN7",
	"S_STKA_RUN8",
	"S_STKA_RUN9",
	"S_STKA_RUN10",
	"S_STKA_RUN11",
	"S_STKA_RUN12",
	"S_STKA_RUN13",
	"S_STKA_RUN14",
	"S_STKA_RUN15",
	"SPR_GOPP",
	"SPR_SGOO",
	"SPR_STIC"
)

mobjinfo[MT_GOOPA] = {
	//$Name Goopa
	//$Sprite GOPPA1
	//$Category Enemies
	doomednum = 146,
	spawnstate = S_GOPA_STND,
	spawnhealth = 1,
	seestate = S_GOPA_HANG1,
	reactiontime = 32,
	painchance = 200,
	raisestate = MT_GOOP,
	deathstate = S_XPLD_FLICKY,
	deathsound = sfx_pop,
	speed = 3,
	radius = 24*FRACUNIT,
	height = 51*FRACUNIT,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY|MF_SPAWNCEILING
}

states[S_GOPA_STND] =	{SPR_GOPP,	A,	5,	A_Look,			0,	0,	S_GOPA_STND}
states[S_GOPA_HANG1] =	{SPR_GOPP,	A,	10,	A_FaceTarget,	0,	0,	S_GOPA_HANG2}
states[S_GOPA_HANG2] =	{SPR_GOPP,	A,	3,	A_Dropmine,		0,	0,	S_GOPA_HANG3}
states[S_GOPA_HANG3] =	{SPR_GOPP,	A,	10,	A_None,			0,	0,	S_GOPA_HANG4}
states[S_GOPA_HANG4] =	{SPR_GOPP,	A,	10,	A_None,			0,	0,	S_GOPA_HANG5}
states[S_GOPA_HANG5] =	{SPR_GOPP,	A,	10,	A_None,			0,	0,	S_GOPA_HANG6}
states[S_GOPA_HANG6] =	{SPR_GOPP,	A,	10,	A_FaceTarget,	0,	0,	S_GOPA_HANG1}

states[S_GOOP1] =	{SPR_GOOP,	FF_ADD|A,	1,  A_Shockwave,			MT_DUST,		0,	S_GOOP2}
states[S_GOOP2] =	{SPR_GOOP,	FF_ADD|B,	2,  A_None,					0,				0,	S_GOOP4}
states[S_GOOP3] =	{SPR_GOOP,	FF_ADD|C,	10, A_SetFuse,				75,				0,	S_GOOP3} //To prevent possible lag
states[S_GOOP4] =	{SPR_GOOP,	FF_ADD|A,	2,	A_SpawnObjectRelative,	0,	 MT_GOOPTRAIL,	S_GOOP5}
states[S_GOOP5] =	{SPR_GOOP,	FF_ADD|B,	2,	A_SpawnObjectRelative,	0,	 MT_GOOPTRAIL,	S_GOOP4}

states[S_GOOPTRAIL] =	{SPR_GOOP,	FF_ANIMATE|FF_ADD|D,	11,  A_None,	2,	6,	S_NULL}

//Lore: Goop only hurts when it's warm, kinda like glue...

mobjinfo[MT_STIKA_GOOP] = {
	doomednum = -1,
	spawnstate = S_STKA_GOOP1,
	spawnhealth = 1000,
	reactiontime = 8,
	deathstate = S_STKA_GOOP3,
	deathsound = sfx_ghit,
	speed = 30*FRACUNIT,
	radius = 11*FRACUNIT,
	height = 8*FRACUNIT,
	dispoffset = 1,
	flags = MF_MISSILE|MF_SPECIAL
}

states[S_STKA_GOOP1] =	{SPR_SGOO,	FF_TRANS40|A,			2,	A_None,					0,	0,	S_STKA_GOOP2}
states[S_STKA_GOOP2] =	{SPR_SGOO,	FF_TRANS40|B,			2,	A_None,					0,	0,	S_STKA_GOOP1}
states[S_STKA_GOOP3] =	{SPR_SGOO,	FF_TRANS40|C,			3*TICRATE,	A_GoopSplat,	0,	0,	S_STKA_GOOP4}
states[S_STKA_GOOP4] =	{SPR_SGOO,	FF_ADD|FF_TRANS50|C,	2,	A_None,					0,	0,	S_STKA_GOOP5}
states[S_STKA_GOOP5] =	{SPR_SGOO,	FF_ADD|FF_TRANS60|C,	2,	A_None,					0,	0,	S_STKA_GOOP6}
states[S_STKA_GOOP6] =	{SPR_SGOO,	FF_ADD|FF_TRANS70|C,	2,	A_None,					0,	0,	S_STKA_GOOP7}
states[S_STKA_GOOP7] =	{SPR_SGOO,	FF_ADD|FF_TRANS80|C,	2,	A_None,					0,	0,	S_NULL}

mobjinfo[MT_STIKA_GOOPTRAIL] = {
	doomednum = -1,
	spawnstate = S_STKA_GOOPTRAIL1,
	spawnhealth = 1000,
	reactiontime = 8,
	speed = 30*FRACUNIT,
	radius = 11*FRACUNIT,
	height = 8*FRACUNIT,
	dispoffset = 1,
	flags = MF_NOCLIP
}

states[S_STKA_GOOPTRAIL1] =	{SPR_SGOO,	FF_TRANS50|D,		5,	A_None,					0,	0,	S_STKA_GOOPTRAIL2}
states[S_STKA_GOOPTRAIL2] =	{SPR_SGOO,	FF_TRANS50|E,		5,	A_None,					0,	0,	S_NULL}

mobjinfo[MT_STIKA] = {
	//$Name Stik-Mint
	//$Sprite SPOSA1
	//$Category Enemies
	doomednum = 147,
	spawnstate = S_STKA_STND,
	spawnhealth = 1,
	seestate = S_STKA_RUN1,
	reactiontime = 32,
	painchance = 200,
	raisestate = MT_STIKA_GOOP,
	deathstate = S_XPLD_FLICKY,
	deathsound = sfx_pop,
	speed = 4,
	radius = 24*FRACUNIT,
	height = 32*FRACUNIT,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY
}

states[S_STKA_STND] =	{SPR_SPOS,	A,	5,	A_Look,		0,	0,	S_STKA_STND}
states[S_STKA_RUN1] =	{SPR_SPOS,	A,	2,	A_Chase,	0,	0,	S_STKA_RUN2}
states[S_STKA_RUN2] =	{SPR_SPOS,	B,	1,	A_DropMine,	0,	0,	S_STKA_RUN3}
states[S_STKA_RUN3] =	{SPR_SPOS,	C,	2,	A_Chase,	0,	0,	S_STKA_RUN4}
states[S_STKA_RUN4] =	{SPR_SPOS,	D,	2,	A_Chase,	0,	0,	S_STKA_RUN5}
states[S_STKA_RUN5] =	{SPR_SPOS,	E,	2,	A_Chase,	0,	0,	S_STKA_RUN6}
states[S_STKA_RUN6] =	{SPR_SPOS,	F,	2,	A_Chase,	0,	0,	S_STKA_RUN7}
states[S_STKA_RUN7] =	{SPR_SPOS,	A,	2,	A_Chase,	0,	0,	S_STKA_RUN8}
states[S_STKA_RUN8] =	{SPR_SPOS,	B,	2,	A_Chase,	0,	0,	S_STKA_RUN9}
states[S_STKA_RUN9] =	{SPR_SPOS,	C,	2,	A_Chase,	0,	0,	S_STKA_RUN10}
states[S_STKA_RUN10] =	{SPR_SPOS,	D,	2,	A_Chase,	0,	0,	S_STKA_RUN11}
states[S_STKA_RUN11] =	{SPR_SPOS,	E,	2,	A_Chase,	0,	0,	S_STKA_RUN12}
states[S_STKA_RUN12] =	{SPR_SPOS,	F,	2,	A_Chase,	0,	0,	S_STKA_RUN13}
states[S_STKA_RUN13] =	{SPR_SPOS,	A,	2,	A_Chase,	0,	0,	S_STKA_RUN14}
states[S_STKA_RUN14] =	{SPR_SPOS,	B,	2,	A_Chase,	0,	0,	S_STKA_RUN15}
states[S_STKA_RUN15] =	{SPR_SPOS,	C,	2,	A_Chase,	0,	0,	S_STKA_RUN1}

//Lua-ified version of brak's goop code for Stik-Mint's code

addHook("TouchSpecial", function(special,toucher)
if not (special and special.valid and toucher and toucher.valid) then return end
	
local player = toucher.player
	
if player and player.valid then
	if not (player.powers[pw_flashing] and not (player.powers[pw_ignorelatch] & (1<<15))) then

	toucher.momx = 0
		toucher.momy = 0
	end

	if toucher.momz ~= 0
		special.momz = toucher.momz
	end

		player.powers[pw_carry] = CR_BRAKGOOP
			toucher.tracer = special

			P_ResetPlayer(player)

	if special.target and special.target.valid and special.target.state == S_STKA_RUN2
		end
	end
end, MT_STIKA_GOOP)

//Stop killing the Stik-Mint!

addHook("ShouldDamage", function(target, inflictor)
	if not (target and target.valid) then return end
	if not (inflictor and inflictor.valid) then return end
	if inflictor.type ~= MT_STIKA_GOOP then return end
	
	if target.player and target.player.valid then
		inflictor.tracer = player
	end
	return false
end)

addHook("MobjThinker", function(mo)
	if (mo and mo.valid and mo.state == S_STKA_GOOP1 or mo.state == S_STKA_GOOP2) then
		local gooptrail = P_SpawnMobj(mo.x + P_RandomRange(-10, 10) * FRACUNIT, mo.y + P_RandomRange(-10, 10) * FRACUNIT, mo.z, MT_STIKA_GOOPTRAIL)
			gooptrail.state = S_STKA_GOOPTRAIL1
	if gooptrail.state == S_STKA_GOOPTRAIL2
		gooptrail.scale = 1*FRACUNIT/5
		end
	end
end, MT_STIKA_GOOP)
