if pcall(do return _G["MT_BIGBUBBLEPATCH"] end)
    print("\131NOTICE:\128 Flow Bubble objects already loaded.")
    return
end



freeslot(
"MT_BIGBUBBLEPATCH",
"S_BIGBUBBLEPATCH",
"MT_BIGFLOWBUBBLE",
"S_BIGFLOWBUBBLE0",
"S_BIGFLOWBUBBLE1",
"S_BIGFLOWBUBBLE2",
"S_BIGFLOWBUBBLE3"
)


function A_BigBubbleSpawner(actor, var1, var2) 
	A_BubbleCheck(actor, 0, 0)
	if (actor.tracer) and (actor.tracer.valid) then
		actor.tracer.momz = ($*95)/100
		return
	end
	if (actor.eflags & MFE_UNDERWATER) then
		local bubble = P_SpawnMobj(actor.x, actor.y, actor.z, MT_BIGFLOWBUBBLE)
		bubble.scale = 0
		bubble.destscale = FRACUNIT
		bubble.scalespeed = FRACUNIT/35
		bubble.momz = 2*FRACUNIT
		actor.tracer = bubble
	end
	


end

mobjinfo[MT_BIGFLOWBUBBLE] = {
spawnstate = S_BIGFLOWBUBBLE0,
deathstate = S_BIGFLOWBUBBLE3,
reactiontime = 16,
speed = 10*FRACUNIT,
radius = 64*FRACUNIT,
height = 64*FRACUNIT,
damage = 3,
spawnhealth = 0,
dispoffset = 0,
flags = MF_NOGRAVITY,
}

states[S_BIGFLOWBUBBLE0] = {
sprite = SPR_BUBS,
frame = J|FF_ANIMATE|FF_GLOBALANIM,
var1 = 2,
var2 = 6,
tics = 35,
nextstate = S_BIGFLOWBUBBLE1
}


states[S_BIGFLOWBUBBLE1] = {
sprite = SPR_BUBS,
frame = J,
action = A_SetObjectFlags,
var1 =  MF_SPECIAL|MF_NOGRAVITY,
tics = 0,
nextstate = S_BIGFLOWBUBBLE2
}

states[S_BIGFLOWBUBBLE2] = {
sprite = SPR_BUBS,
frame = J|FF_ANIMATE|FF_GLOBALANIM,
action = A_BubbleCheck,
var1 = 2,
var2 = 6,
tics = 1,
nextstate = S_BIGFLOWBUBBLE2
}



states[S_BIGFLOWBUBBLE3] = {
sprite = SPR_BUBS,
frame = J,
action = A_CapeChase,
var1 = 26<<16,
tics = 1,
nextstate = S_BIGFLOWBUBBLE3
}

mobjinfo[MT_BIGBUBBLEPATCH] = {
//$Name Flow Bubble
//$Category Generic Items & Hazards
//$Sprite BBLSA0
spawnstate = S_BIGBUBBLEPATCH,
reactiontime = 16,
speed = 10*FRACUNIT,
radius = 32*FRACUNIT,
height = 32*FRACUNIT,
damage = 3,
spawnhealth = 0,
dispoffset = 0,
doomednum = 343,
flags = MF_NOBLOCKMAP
}


states[S_BIGBUBBLEPATCH] = {
sprite = SPR_BBLS,
frame = A|FF_ANIMATE|FF_GLOBALANIM,
action = A_BigBubbleSpawner,
var1 = 3,
var2 = 6,
tics = 1,
nextstate = S_BIGBUBBLEPATCH
}



addHook("TouchSpecial", function(actor, toucher) 
	if (toucher.player) and (toucher.eflags & MFE_UNDERWATER) then
		toucher.state = S_PLAY_GASP
		toucher.player.powers[pw_underwater] = underwatertics
		P_RestoreMusic(toucher.player)
		actor.fuse = 10
		//actor.scalespeed = FRACUNIT/20
		actor.destscale = 0
		S_StartSound(toucher, sfx_gasp, toucher.player)
	end
	
end, MT_BIGFLOWBUBBLE)
