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


freeslot(
"MT_BOTL",
"S_BOTLSIT",
"S_BOTLFLY",
"S_BOTLFALL",
"SPR_BOTL"
)



function A_BottleFly(actor, var1, var2)
	local xyspeed = R_PointToDist2(0, 0, actor.momx, actor.momy)
	local speed = R_PointToDist2(0, 0, xyspeed, actor.momz)/FRACUNIT
	actor.reactiontime = $+speed
	actor.frame = 7-((actor.reactiontime/80)%7)
	if (actor.eflags & MFE_JUSTHITFLOOR) then
		if (speed > 30) then
			actor.state = mobjinfo[actor.type].deathstate
		else
			actor.momx = $/2
			actor.momy = $/2
			A_PlaySeeSound(actor, 0, 0)
			if (actor.frame > 1 and actor.frame < 6) then
				actor.state = mobjinfo[actor.type].missilestate
			else
				actor.state = mobjinfo[actor.type].spawnstate
			end
		end
	end

end


mobjinfo[MT_BOTL] = {
spawnstate = S_BOTLSIT,
seestate = S_BOTLFLY,
missilestate = S_BOTLFALL,
deathstate = S_XPLD1,
deathsound = sfx_iceb,
seesound = sfx_tink,
doomednum = 340,
reactiontime = 65,
speed = 6,
radius = 7*FRACUNIT,
height = 49*FRACUNIT,
damage = 9,
spawnhealth = 0,
dispoffset = 0,
flags = MF_SOLID
}

states[S_BOTLSIT] = {
sprite = SPR_BOTL,
frame = A,
tics = -1,
nextstate = S_BOTLSIT
}

states[S_BOTLFALL] = {
sprite = SPR_BOTL,
frame = G,
tics = -1,
nextstate = S_BOTLFALL
}

states[S_BOTLFLY] = {
sprite = SPR_BOTL,
frame = A,
action = A_BottleFly,
tics = 1,
nextstate = S_BOTLFLY
}



addHook("MobjCollide", function(actor, collider)
	if (actor.z > collider.z+collider.height) or (actor.z+actor.height < collider.z) then return false end
	local speed = (R_PointToDist2(0, 0, collider.momx, collider.momy)*11)/(10*FRACUNIT)
	local teledist = (actor.radius+collider.radius)/FRACUNIT
	if (speed > 8) then
		A_PlaySeeSound(actor, 0, 0)
		actor.state = mobjinfo[actor.type].seestate
		speed = $+teledist/10
	end
	actor.angle = R_PointToAngle2(collider.x, collider.y, actor.x, actor.y)
	actor.momx = cos(actor.angle)*speed
	actor.momy = sin(actor.angle)*speed
	actor.momz = speed*(FRACUNIT/5)
	P_TeleportMove(actor, actor.x+cos(actor.angle)*teledist, actor.y+sin(actor.angle)*teledist, actor.z)
	actor.reactiontime = 0
	return false
	
end, MT_BOTL)

addHook("MobjSpawn", function(actor) 
	actor.color = P_RandomRange(1, 68)
	actor.scale = $+(P_RandomRange(-30, 30)*(FRACUNIT/100))
	
end, MT_BOTL)


addHook("MobjMoveBlocked", function(actor) 
	local xyspeed = R_PointToDist2(0, 0, actor.momx, actor.momy)
	local speed = R_PointToDist2(0, 0, xyspeed, actor.momz)/FRACUNIT
	if (speed > 20) then
		actor.state = mobjinfo[actor.type].deathstate
	else
		actor.momx = $*-1
		actor.momy = $*-1
	A_PlaySeeSound(actor, 0, 0)
	end
	
	
end, MT_BOTL)
