
-- custom action for the yellow bouncy bot and the grey bouncy bot --
function A_SuperHop2(actor,var1,var2)
	
	if actor.eflags == MFE_ONGROUND or actor.eflags == MFE_JUSTHITFLOOR or actor.momz == 0
		A_ChangeAngleRelative(actor,90,270)
		A_BunnyHop(actor,4,4)
	end
end

-- ---------------------BEGIN OBJECT DEFINITIONS--------------------- --
//bouncy projectile//
freeslot(
"MT_BOUNCYPROJECTILE",
"S_BOUNCYPROJECTILESHOT","S_BOUNCYPROJECTILEINIT",
"SPR_BCPJ")

mobjinfo[MT_BOUNCYPROJECTILE] = {
	doomednum = 3061,
	radius = 10*FRACUNIT,
	height = 20*FRACUNIT,
	speed = 10*FRACUNIT,
	spawnstate = S_BOUNCYPROJECTILEINIT,
	seesound = sfx_none,
	attacksound	= sfx_none,
	reactiontime = 8,
	spawnhealth = 1,
	painchance = 200,
	mass = 100,
	damage = 1,
	dispoffset = 0,
	flags = MF_MISSILE|MF_SPECIAL|MF_PAIN
}
states[S_BOUNCYPROJECTILEINIT] = {
	sprite = SPR_BCPJ, frame = A, tics = 2, nextstate = S_BOUNCYPROJECTILESHOT}

states[S_BOUNCYPROJECTILESHOT] = {
	sprite = SPR_BCPJ, frame = FF_ANIMATE|FF_FULLBRIGHT|A, var1 = 10, var2 = 1, tics = 10, nextstate = S_BOUNCYPROJECTILESHOT}

addHook("MobjThinker", function(mob)
	if mob.state == S_BOUNCYPROJECTILESHOT then
		return
	end
	
	mob.momz = 10*FRACUNIT
end
,MT_BOUNCYPROJECTILE)

-- -- Bouncy Bot -- --
freeslot(
"MT_BOUNCYBOT3",
"S_BLOOK3", "S_BBOUNCE3", "S_BSPAWN3",
"SPR_FHBN")

mobjinfo[MT_BOUNCYBOT3] = {
	--$Category Quantic Funhouse
	--$Name Bouncy Fun
	--$Sprite FHBNA1
	//$Color 2
	doomednum = 3060,
	radius = 24*FRACUNIT,
	height = 80*FRACUNIT,
	spawnstate = S_BSPAWN3,
	seestate = S_BBOUNCE3,
	deathstate = S_XPLD_FLICKY,
	deathsound = sfx_pop,
	mass = 200,
	speed = 10,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE
}

states[S_BSPAWN3] = {
	sprite = SPR_FHBN, frame = A, tics = 1, nextstate = S_BLOOK3}

states[S_BLOOK3] = {
	sprite = SPR_FHBN, frame = A, tics = 15, action = A_Look, var1 = 0+4096<<16, var2 = 1, nextstate = S_BLOOK3}

states[S_BBOUNCE3] = {
	sprite = SPR_FHBN, frame = A, tics = 20, nextstate = S_BBOUNCE3}

addHook("MobjThinker", function(mob)
	if mob.state == S_BBOUNCE3 then
		if mob.eflags == MFE_JUSTHITFLOOR or mob.momz == 0 then
			A_ChangeAngleRelative(mob,90,270)
			A_BunnyHop(mob,4,4)
		end
		
		if mob.tics == 10 then
			A_MultiShot(mob,MT_BOUNCYPROJECTILE*65536+4,40)
		end
	end
end
,MT_BOUNCYBOT3)

-- -- Fun Tank -- --
--tank projectile--
freeslot(
"MT_TANKPROJECTILE",
"S_TANKPROJECTILEINIT","S_TANKPROJECTILESHOT",
"SPR_FHTP")

mobjinfo[MT_TANKPROJECTILE] = {
	doomednum = 3063,
	radius = 16*FRACUNIT,
	height = 32*FRACUNIT,
	speed = 40*FRACUNIT,
	spawnstate = S_TANKPROJECTILEINIT,
	seesound = sfx_none,
	attacksound	= sfx_none,
	reactiontime = 8,
	spawnhealth = 1,
	painchance = 1000,
	mass = 10,
	damage = 1,
	dispoffset = 0,
	flags = MF_MISSILE|MF_SPECIAL|MF_PAIN|MF_NOGRAVITY
}
states[S_TANKPROJECTILEINIT] = {
	sprite = SPR_FHTP, frame = FF_ADD|A, tics = 1, nextstate = S_TANKPROJECTILESHOT}

states[S_TANKPROJECTILESHOT] = {
	sprite = SPR_FHTP, frame = FF_ADD|A, tics = 10, nextstate = S_TANKPROJECTILESHOT}

--tank--
freeslot(
"MT_TANKBOT",
"S_TANKLOOK", "S_TANKPAIN", "S_TANKMOVE",
"SPR_FHTK",
"sfx_lasr")

--tank shoot sound--
sfxinfo[sfx_lasr] = {
	singular = true,
	priority = 64,
	flags = SF_X4AWAYSOUND
}

mobjinfo[MT_TANKBOT] = {
	--$Category Quantic Funhouse
	--$Name Tank Bot
	--$Sprite FHTKA1
	//$Color 2
	doomednum = 3062,
	radius = 130*FRACUNIT,
	height = 164*FRACUNIT,
	spawnstate = S_TANKLOOK,
	spawnhealth = 3,
	seestate = S_TANKMOVE,
	painstate = S_TANKPAIN,
	raisestate = MT_TANKPROJECTILE,
	reactiontime = 8,
	painsound = sfx_dmpain,
	deathstate = S_XPLD_FLICKY,
	deathsound = sfx_pop,
	mass = 20*FRACUNIT,
	speed = 4,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE
}

states[S_TANKLOOK] = {
	sprite = SPR_FHTK, frame = A, tics = 5, action = A_Look, var1 = 0+4096<<16, var2 = 1, nextstate = S_TANKLOOK}

states[S_TANKMOVE] = {
	sprite = SPR_FHTK, frame = FF_ANIMATE|A, var1 = 14, var2 = 2, tics = 150, nextstate = S_TANKMOVE}

states[S_TANKPAIN] = {
	sprite = SPR_FHTK, frame = A, action = A_Pain, tics = 35, nextstate = S_TANKLOOK}

--thinkers--
addHook("MobjThinker", function(mob)
	if mob.state == S_TANKPROJECTILESHOT then
		return
	end
	
	mob.z = mob.z+(70*FRACUNIT)
	mob.momx = mob.momx+P_RandomRange(-4,4)*FRACUNIT
	mob.momy = mob.momy+P_RandomRange(-4,4)*FRACUNIT
	mob.momz = mob.momz+P_RandomRange(-4,4)*FRACUNIT
end
,MT_TANKPROJECTILE)

addHook("MobjThinker", function(mob)
	if mob.state == S_TANKMOVE then
		A_FaceTarget(mob)
		A_Chase(mob,3)
	
		if mob.health == 3 and mob.tics%3 == 0 and mob.tics < 40 then
			A_PlaySound(mob,sfx_lasr,1+0>>16)
			local bullet = P_SpawnMissile(mob,mob.target,MT_TANKPROJECTILE)
		elseif mob.health < 3 and mob.tics%3 == 0 and mob.tics > 100 and mob.tics < 140 then
			A_PlaySound(mob,sfx_lasr,1+0>>16)
			local bullet = P_SpawnMissile(mob,mob.target,MT_TANKPROJECTILE)
		end
	end
end
,MT_TANKBOT)

--plane--
freeslot(
"MT_PLANEBOT",
"S_PLANELOOK", "S_PLANECHARGE",
"SPR_FHB3",
"sfx_plane")

sfxinfo[sfx_plane] = {
	singular = false,
	priority = 64,
	flags = SF_X4AWAYSOUND
}

mobjinfo[MT_PLANEBOT] = {
	--$Category Quantic Funhouse
	--$Name Plane Bot
	--$Sprite FHB3A1
	//$Color 2
	doomednum = 3070,
	radius = 65*FRACUNIT,
	height = 42*FRACUNIT,
	spawnstate = S_PLANELOOK,
	spawnhealth = 1,
	seestate = S_PLANECHARGE,
	seesound = sfx_plane,
	reactiontime = 8,
	painsound = sfx_dmpain,
	deathstate = S_XPLD_FLICKY,
	deathsound = sfx_pop,
	mass = 20*FRACUNIT,
	speed = 4,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY|MF_SLIDEME
}

states[S_PLANELOOK] = {
	sprite = SPR_FHB3, frame = A, tics = 5, action = A_Look, var1 = 0+2500<<16, var2 = 1, nextstate = S_PLANELOOK}

states[S_PLANECHARGE] = {
	sprite = SPR_FHB3, frame = FF_ANIMATE|A, var1 = 14, var2 = 2, tics = 150, nextstate = S_PLANECHARGE}

addHook("MobjThinker", function(mob)
	if mob.state == S_PLANECHARGE and abs(mob.z-mob.target.z)/FRACUNIT < 256 then
		A_FaceTarget(mob)
		A_HomingChase(mob,32*FRACUNIT,0)
		
		if mob.tics == 150 then
			A_PlaySeeSound(mob)
		end
	else
		A_Thrust(mob,2,1)
		A_ChangeAngleRelative(mob,5,5)
	end
end
,MT_PLANEBOT)

-- -- Electric bullet shooter -- --
freeslot(
"MT_ELECTRICSHOOT","MT_ELECTRICORB",
"S_ELELOOK", "S_ELESHOOT","S_ORBSHOT",
"SPR_ELBL")

mobjinfo[MT_ELECTRICORB] = {
	doomednum = 3072,
	radius = 48*FRACUNIT,
	height = 96*FRACUNIT,
	speed = 30*FRACUNIT,
	spawnstate = S_ORBSHOT,
	seesound = sfx_none,
	attacksound	= sfx_none,
	reactiontime = 8,
	spawnhealth = 1,
	painchance = 1000,
	mass = 10,
	damage = 1,
	dispoffset = 0,
	flags = MF_MISSILE|MF_SPECIAL|MF_PAIN|MF_NOGRAVITY
}
states[S_ORBSHOT] = {
	sprite = SPR_ELBL, frame = FF_ADD|FF_ANIMATE|A, var1 = 10, var2 = 2, tics = 10, nextstate = S_ORBSHOT}

mobjinfo[MT_ELECTRICSHOOT] = {
	--$Category Electric Workbench
	--$Name Electric Shoot
	--$Sprite ELBLA0
	//$Color 3
	doomednum = 3073,
	radius = 64*FRACUNIT,
	height = 128*FRACUNIT,
	spawnstate = S_ELELOOK,
	seestate = S_ELESHOOT,
	raisestate = MT_ELECTRICORB,
	mass = 200,
	speed = 0,
	flags = MF_NOGRAVITY
}

states[S_ELELOOK] = {
	sprite = SPR_NULL, frame = A, tics = 35, action = A_Look, var1 = 0+4096<<16, var2 = 1, nextstate = S_ELELOOK}

states[S_ELESHOOT] = {
	sprite = SPR_NULL, frame = A, tics = 60, nextstate = S_ELELOOK}

addHook("MobjThinker", function(mob)
	if mob.state == S_ELELOOK or mob.tics < 20 then
		return
	end
	
	if mob.tics%5 == 0 then
		A_PlaySound(mob,sfx_lasr,1+0>>16)
		A_TrapShot(mob,MT_ELECTRICORB+0<<16,0+0<<16)
	end
end
,MT_ELECTRICSHOOT)