//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"
		if mo.state == S_KART_DEAD and mo.ratstate != S_KART_DEAD
			//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
		mo.ratstate = mo.state //Set previous state
	end
end end, MT_PLAYER)