//Lua to spawn in the other two rats when dying as Race Rats

//Dead Race Rat Thinker
function A_RaceRatThinker(mobj, var1, var2)
	local mo = mobj.tracer
	if not (mo and mo.valid and mo.state == S_KART_DEAD and mo.fuse)
		P_RemoveMobj(mobj)
		return
	end
	
	//Set timers
	mobj.fuse = mo.fuse
	mobj.hitlag = mo.hitlag*4/5
	
	//Set color and frame
	mobj.color = mo.color
	mobj.colorized = mo.colorized
	mobj.frame = ($ &~ FF_FRAMEMASK) | (mobj.cusval - 1)
	
	//Set render vars
	mobj.renderflags = mo.renderflags
end

//Dead Race Rat State
freeslot("S_RACERAT_DEAD")
states[S_RACERAT_DEAD] = {SPR_PLAY,
SPR2_SIGL | FF_SEMIBRIGHT,
1, A_RaceRatThinker, A, 0, S_RACERAT_DEAD}

//Rat Death Thinker
addHook("PostThinkFrame", do for player in players.iterate
	local mo = player.mo
	if mo and mo.valid and mo.skin == "kossorirat"
	and mo.state == S_KART_DEAD and mo.tics != -1
		//Stop player dead state
		mo.tics = -1
		
		//Get data from base player
		local dist = mo.radius
		local speed = FixedHypot(mo.momx, mo.momy)
		local angle = R_PointToAngle2(0,0, mo.momx, mo.momy)
		
		//Spawn the rats and set their momentum
		for i = 1, 2
			local mobj = P_SpawnMobjFromMobjUnscaled(mo, 0, 0, dist*i, MT_KART_TIRE)
			
			//Momentum, send flying in a horizontal triangle motion
			mobj.momz = mo.momz
			P_InstaThrust(mobj, angle + ANGLE_22h * ((i & 1) or -1), speed)
			
			//Set necessary vars
			mobj.cusval = i
			mobj.tracer = mo
			mobj.skin = mo.skin
			mobj.eflags = MFE_DAMAGEHITLAG
			
			//Set state
			mobj.state = S_RACERAT_DEAD
		end
		
		//Raise the base player up so the main rat is at the top of the stack
		mo.z = $ + dist*3*P_MobjFlip(mo)
	end
end end, MT_PLAYER)