// The Raining Events

local ck = chaosmod

local cv_alwaysitemrain = CV_RegisterVar({
  name = "ck_itemrain",
  defaultvalue = "Off",
  flags = CV_NETVAR,
  PossibleValue = {Off = 0, On = 1},
})

addHook("ThinkFrame", function(p)	
	local possiblePlayers = {}
	if ck.springtimer >= 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers and (leveltime%10)
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local possibleHazards = {MT_BLUESPRING, MT_YELLOWSPRING, MT_REDSPRING, MT_GRAYSPRING, MT_BLUEDIAG, MT_YELLOWDIAG, MT_REDDIAG}
			local spring = P_SpawnMobj(tmo.x+P_RandomRange(-1500, 1500)<<FRACBITS, tmo.y+P_RandomRange(-1500, 1500)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, possibleHazards[P_RandomRange(1, #possibleHazards)])
			spring.angle = P_RandomRange(0, 360)*ANG1
			spring.fuse = 30*TICRATE
		end
		ck.springtimer = $1 - 1
	end	
	if ck.itemrain >= 1
	or cv_alwaysitemrain.value == 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers and not (leveltime%10)
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local possibleHazards = {MT_BANANA, MT_EGGMANITEM, MT_SSMINE_SHIELD, MT_ORBINAUT, MT_JAWZ_DUD, MT_GIANTBANANA}
			local itemrain = P_SpawnMobj(tmo.x+P_RandomRange(-1250, 1250)<<FRACBITS, tmo.y+P_RandomRange(-1250, 1250)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, possibleHazards[P_RandomRange(1, #possibleHazards)])
			itemrain.angle = P_RandomRange(0, 360)*ANG1
			if itemrain.type == MT_JAWZ_DUD
				itemrain.target = tmo
			end
			itemrain.fuse = 30*TICRATE
		end
		ck.itemrain = $1 - 1
	end
	if ck.bananarain >= 1
		ck.bananarain = $1 - 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers
			local bananas = {MT_BANANA, MT_BANANA, MT_BANANA, MT_BANANA, MT_BANANA, MT_BANANA, MT_BANANA, MT_BANANA, MT_BANANA, MT_GIANTBANANA}
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local banana = P_SpawnMobj(tmo.x+P_RandomRange(-2500, 2500)<<FRACBITS, tmo.y+P_RandomRange(-2500, 2500)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, bananas[P_RandomRange(1, #bananas)])
			banana.fuse = 30*TICRATE
		end
	end
	if ck.rockrain >= 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers and (leveltime%5)
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local rock = P_SpawnMobj(tmo.x+P_RandomRange(-1250, 1250)<<FRACBITS, tmo.y+P_RandomRange(-1250, 1250)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, MT_FALLINGROCK)
			rock.scale = P_RandomRange(1, 3)*FRACUNIT
			rock.fuse = 20*TICRATE
		end
		ck.rockrain = $1 - 1
	end
	if ck.tacorain >= 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers and not (leveltime%(2*TICRATE))
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local taco = P_SpawnMobj(tmo.x+P_RandomRange(-2000, 2000)<<FRACBITS, tmo.y+P_RandomRange(-2000, 2000)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, MT_TACO)
		end
		ck.tacorain = $1 - 1
	end
	if ck.badnikrain >= 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers and not (leveltime%10)
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local possibleHazards = {MT_BLUECRAWLA, MT_REDCRAWLA, MT_GFZFISH, MT_JETTBOMBER, MT_JETTGUNNER, MT_CRAWLACOMMANDER, MT_SKIM, MT_POPUPTURRET, MT_ROBOHOOD, MT_FACESTABBER, MT_EGGGUARD, MT_GSNAPPER}
			local badnik = P_SpawnMobj(tmo.x+P_RandomRange(-1250, 1250)<<FRACBITS, tmo.y+P_RandomRange(-1250, 1250)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, possibleHazards[P_RandomRange(1, #possibleHazards)])
			badnik.angle = P_RandomRange(0, 360)*ANG1
			badnik.fuse = 40*TICRATE
		end
		ck.badnikrain = $1 - 1
	end
	if ck.hail >= 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers and (leveltime%8)
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local ice = P_SpawnMobj(tmo.x+P_RandomRange(-1500, 1500)<<FRACBITS, tmo.y+P_RandomRange(-1500, 1500)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 150)<<FRACBITS, MT_ICEBALL)
			ice.noparticles = true
			ice.fuse = 10*TICRATE
		end
		ck.hail = $1 - 1
	end
	if ck.firerain >= 1
		for p in players.iterate
			if (p and p.mo) and not p.spectator then table.insert(possiblePlayers, p.mo) end
		end
		if #possiblePlayers
			local tmo = possiblePlayers[P_RandomRange(1, #possiblePlayers)]
			local fire = P_SpawnMobj(tmo.x+P_RandomRange(-2000, 2000)<<FRACBITS, tmo.y+P_RandomRange(-2000, 2000)<<FRACBITS, tmo.ceilingz-P_RandomRange(0, 300)<<FRACBITS, MT_CYBRAKDEMON_FLAMEREST)
			fire.noparticles = true
			fire.fuse = 10*TICRATE
		end
		ck.firerain = $1 - 1
	end
end)