/* Unidasu and Uni-Uni */
freeslot(
"MT_SSZBUBBLE",
"S_SSZBUBBLE_IDLE",
"S_SSZBUBBLE_FLING",
"S_SSZBUBBLE_POP1",
"S_SSZBUBBLE_POP2",
"SPR_FLBL")

mobjinfo[MT_SSZBUBBLE] = {
	--$Name Fling Bubble
	--$Sprite FLBLA0
	--$Category Sempiternity Shores
	doomednum = 2341,
	radius = 64*FRACUNIT,
	height = 128*FRACUNIT,
	spawnstate = S_SSZBUBBLE_IDLE,
	deathstate = S_SSZBUBBLE_POP1,
	flags = MF_SPECIAL|MF_NOGRAVITY
}

states[S_SSZBUBBLE_IDLE] = {
	sprite = SPR_FLBLL,
	frame = A|TR_TRANS40,
	tics = 1,
	action = A_SetObjectFlags,
	var1 = MF_SPECIAL|MF_NOGRAVITY,
	var2 = 0,
	nextstate = S_SSZBUBBLE_IDLE
}

states[S_SSZBUBBLE_FLING] = {
	sprite = SPR_FLBL,
	frame = A|TR_TRANS40,
	tics = 15,
	action = A_PlaySound,
	var1 = sfx_splash,
	var2 = 1,
	nextstate = S_SSZBUBBLE_FLING
}

states[S_SSZBUBBLE_POP1] = {
	sprite = SPR_FLBL,
	frame = A|TR_TRANS40,
	tics = 1,
	nextstate = S_SSZBUBBLE_POP1
}

states[S_SSZBUBBLE_POP2] = {
	sprite = SPR_NULL,
	tics = (TICRATE*2)-1,
	nextstate = S_SSZBUBBLE_IDLE
}
addHook("MobjThinker", function(mo)
	if not mo.orig_x
		mo.orig_x = mo.x
		mo.orig_y = mo.y
		mo.orig_z = mo.z
	end
	if mo.state == S_SSZBUBBLE_FLING
		P_SpawnGhostMobj(mo)
		P_InstaThrust(mo,mo.angle,32*FRACUNIT)
		if mo.target.valid
			mo.target.state = S_PLAY_PAIN
			mo.target.momx = 0
			mo.target.momy = 0
			mo.target.momz = 0
			P_MoveOrigin(mo.target,mo.x,mo.y,mo.z+48*FRACUNIT)
			mo.target.player.drawangle = mo.angle
		end
			
	elseif mo.state == S_SSZBUBBLE_POP1
		P_InstaThrust(mo,mo.angle,0)
		P_SetOrigin(mo,mo.orig_x,mo.orig_y,mo.orig_z)
		if mo.target.valid
			S_StartSound(mo.target,sfx_s3k77)
			P_InstaThrust(mo.target,mo.target.angle,-4*FRACUNIT)
		end
		mo.target.momz = 6*FRACUNIT
		mo.flags = MF_NOGRAVITY
		mo.state = S_SSZBUBBLE_POP2
		mo.target = nil
	end
end, MT_SSZBUBBLE)

addHook("TouchSpecial", function(special,toucher)
	if special.state == S_SSZBUBBLE_IDLE
		if toucher.player.bot == 0
			P_ResetPlayer(toucher.player)
			special.target = toucher
			special.flags = MF_NOGRAVITY|MF_MISSILE
			special.state = S_SSZBUBBLE_FLING
			toucher.angle = special.angle
		end
	end
	return true
end, MT_SSZBUBBLE)