freeslot("MT_GLASSGIB", "S_GLASSGIB", "SPR_GLASSGIB")

states[S_GLASSGIB] = {
	sprite = SPR_GLASSGIB,
	frame = A|FF_SEMIBRIGHT|FF_RANDOMANIM|FF_ANIMATE,
	var1 = 8,
	var2 = 2,
	tics = 10*TICRATE
}
mobjinfo[MT_GLASSGIB] = {
	radius = 4*FU,
	height = 8*FU,
	flags = MF_NOCLIPTHING|MF_SLIDEME,
	spawnstate = S_GLASSGIB
}

local clk_sfx = GlassEveryone.sounds.clink
addHook("MobjThinker",function(gib)
	if gib.angleroll == nil
		gib.angleroll = FixedAngle(P_RandomRange(-15,15)*FU)
	end
	
	if (gib.hitlag)
		gib.hitlag = $ - 1
		if gib.blocked
			gib.spritexscale = FU/2
			gib.spriteyscale = FU*2
		else
			gib.spritexscale = 2*FU
			gib.spriteyscale = FU/2
		end
		
		if gib.hitlag == 0
			local frac = FU*3/4
			
			if not gib.blocked
				gib.momx,gib.momy = FixedMul($1, frac),FixedMul($2, frac)
			end
			gib.blocked = nil
		end
		return true
	end
	gib.spritexscale = FU
	gib.spriteyscale = FU
	if abs(gib.momz) >= 7*gib.scale
		local mom = FixedDiv(abs(gib.momz),gib.scale) - 7*FU
		mom = $/50
		mom = -min($,FU*4/5)
		gib.spritexscale,
		gib.spriteyscale = $1+mom,$2-(mom*9/10)
	end
	if not gib.bouncecount
		gib.momz = $ + P_GetMobjGravity(gib)*3/5
	end
	
	gib.bouncecount = $ or 0
	if (gib.z <= gib.floorz or gib.z + gib.height >= gib.ceilingz)
	and not (gib.bounced or gib.flags & MF_NOCLIPHEIGHT)
		gib.momz = -FixedMul((gib.lastmomz ~= nil and gib.lastmomz or gib.momz), tofixed("0.89"))
		
		gib.bouncecount = $ + 1
		gib.hitlag = P_RandomRange(1,5)
		gib.spritexscale = 2*FU
		gib.spriteyscale = FU/2
		
		S_StartSound(gib,
			clk_sfx[P_RandomRange(1, #clk_sfx)]
		)
	end
	
	if gib.lastmomz ~= nil
	and abs(gib.lastmomz) < 3*gib.scale
	and (gib.bouncecount >= 2)
		gib.bounced = true
		gib.flags = $|MF_NOCLIPHEIGHT|MF_NOCLIP
	end
	
	gib.lastmomz = gib.momz
	gib.rollangle = $ + gib.angleroll
	
	if (gib.justbumped)
		gib.justbumped = $ - 1
	else
		gib.justbumped = 0
	end
end,MT_GLASSGIB)

addHook("MobjMoveBlocked",function(gib)
	P_BounceMove(gib)
	gib.hitlag = P_RandomRange(1,5)
	gib.spritexscale = FU/2
	gib.spriteyscale = FU*2
	gib.blocked = true
	gib.momx = $ * 2
	gib.momy = $ * 2
	S_StartSound(gib,
		clk_sfx[P_RandomRange(1, #clk_sfx)]
	)
end,MT_GLASSGIB)