//Death Particle Thinker
function A_OriParticleThinker(mo, var1, var2)
	mo.frame = ($ &~ FF_FRAMEMASK) | var1
	
	local mobj = P_SpawnGhostMobj(mo)
	mobj.type = mo.type
	mobj.destscale = 0
	mobj.renderflags = 0
	mobj.frame = $ + 1
	
	if P_IsObjectOnGround(mo)
		mo.momz = -mo.cusval
	else
		mo.cusval = mo.momz
	end
end

//Death Particle State
freeslot("S_ORI_PARTICLE")
states[S_ORI_PARTICLE] = {SPR_PLAY,
SPR2_XTRA | FF_SPR2ENDSTATE | FF_FULLBRIGHT | FF_ADD,
1, A_OriParticleThinker, D, 0, S_ORI_PARTICLE}

//Death Explosion State
freeslot("S_ORI_DEAD")
states[S_ORI_DEAD] = {SPR_PLAY,
SPR2_DEAD | FF_SPR2ENDSTATE | FF_FULLBRIGHT | FF_ADD,
2, nil, S_NULL, 0, S_ORI_DEAD}

//Ori Death Thinker
addHook("PostThinkFrame", do for player in players.iterate
	local mo = player.mo
	if mo and mo.valid and mo.skin == "ori"
	and mo.state == S_KART_DEAD and mo.sprite
		mo.sprite = SPR_NULL
		mo.tics = -1
		S_StartSound(mo, sfx_altdi1)
		
		//Explosion
		local mobj = P_SpawnMobjFromMobjUnscaled(mo, 0,0, mo.height >> 1, MT_THOK)
		mobj.skin = mo.skin
		
		mobj.state = S_ORI_DEAD
		mobj.hitlag = 0
		//mobj.spritexscale = FRACUNIT << 1
		//mobj.spriteyscale = FRACUNIT << 1
		
		//Flash
		mobj = P_SpawnMobjFromMobjUnscaled(mo, 0,0, mo.height >> 1, MT_GHOST)
		mobj.skin = mo.skin
		
		mobj.state = S_KART_STILL
		mobj.tics = -1
		mobj.sprite2 = SPR2_XTRA
		mobj.frame = F | FF_FULLBRIGHT | FF_ADD
		
		mobj.fuse = TICRATE >> 1
		mobj.hitlag = 0
		
		mobj.scale = $ << 3
		//mobj.scalespeed = mobj.scale / mobj.fuse
		//mobj.destscale = 0
		//mobj.height = 1
		
		//Particles
		for i = 1, 4
			mobj = P_SpawnMobjFromMobjUnscaled(mo, 0,0, mo.height >> 1, MT_THOK)
			mobj.skin = mo.skin
			
			mobj.flags = $ &~ (MF_NOCLIP | MF_NOCLIPHEIGHT | MF_NOGRAVITY)
			
			mobj.state = S_ORI_PARTICLE
			mobj.fuse = TICRATE << 1
			mobj.hitlag = 0
			
			local angle = ANGLE_90 * i + mo.angle + ANGLE_45
			P_InstaThrust(mobj, angle, mo.scale << 3)
			P_SetObjectMomZ(mobj, FRACUNIT * 12)
		end
	end
end end)