//Heli-Balloon/Item Balloon By WellDoneSnake (Formerly TSDude)
//Five variants with different awards: "rings, shields, sneakers, invincibility and lives".
//Angle 0 = 5 - 25 Rings
//Angle 90 = Shields
//Angle 180 = Sneakers
//Angle 270 = Invincibility
//Angle 315 = Extra Life

freeslot(
"MT_HELIBALLOON",
"MT_RINGSAWARD",
"MT_SHIELDAWARD",
"MT_SNEAKERSAWARD",
"MT_INVINCIBILITYAWARD",
"MT_LIFEAWARD",
"S_HITEM_SPAWN",
"S_HITEM_HOVER1",
"S_HITEM_HOVER2",
"S_HITEM_HOVER3",
"S_HITEM_HOVER4",
"S_HITEM_HOVER5",
"S_HITEM_HOVER6",
"S_HITEM_FADE1",
"S_HITEM_FADE2",
"S_HITEM_FADE3",
"S_HITEM_FADE4",
"S_HITEM_FADE5",
"S_HICON_RINGS",
"S_HICON_SHIELD",
"S_HICON_SNEAKERS",
"S_HICON_INVINCIBILITY",
"S_HICON_LIFE",
"SPR_HITM",
"sfx_bpop"
)

mobjinfo[MT_HELIBALLOON] = {
	doomednum = 456,
	spawnstate = S_HITEM_SPAWN,
	spawnhealth = 1,
	reactiontime = 8,
	deathstate = S_HITEM_FADE1,
	deathsound = sfx_bpop,
	speed = 2,
	radius = 16*FRACUNIT,
	height = 50*FRACUNIT,
	dispoffset = 0,
	mass = 100,
	flags = MF_SPECIAL|MF_NOGRAVITY
}

mobjinfo[MT_RINGSAWARD] = {
	doomednum = -1,
	spawnstate = S_HICON_RINGS,
	spawnhealth = 1,
	seesound = sfx_itemup,
	reactiontime = 8,
	speed = 2,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	dispoffset = 0,
	mass = 100,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY
}

mobjinfo[MT_SHIELDAWARD] = {
	doomednum = -1,
	spawnstate = S_HICON_SHIELD,
	spawnhealth = 1,
	seesound = sfx_shield,
	reactiontime = 8,
	speed = 2,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	dispoffset = 0,
	mass = 100,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY
}

mobjinfo[MT_SNEAKERSAWARD] = {
	doomednum = -1,
	spawnstate = S_HICON_SNEAKERS,
	spawnhealth = 1,
	reactiontime = 8,
	speed = 2,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	dispoffset = 0,
	mass = 100,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY
}

mobjinfo[MT_INVINCIBILITYAWARD] = {
	doomednum = -1,
	spawnstate = S_HICON_INVINCIBILITY,
	spawnhealth = 1,
	reactiontime = 8,
	speed = 2,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	dispoffset = 0,
	mass = 100,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY
}

mobjinfo[MT_LIFEAWARD] = {
	doomednum = -1,
	spawnstate = S_HICON_LIFE,
	spawnhealth = 1,
	reactiontime = 8,
	speed = 2,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	dispoffset = 0,
	mass = 100,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY
}

states[S_HITEM_SPAWN] = {SPR_HITM, A, 1, nil, 0, 0, S_HITEM_HOVER1}
states[S_HITEM_HOVER1] = {SPR_HITM, A, 1, nil, 0, 0, S_HITEM_HOVER2}
states[S_HITEM_HOVER2] = {SPR_HITM, B, 1, nil, 0, 0, S_HITEM_HOVER3}
states[S_HITEM_HOVER3] = {SPR_HITM, C, 1, nil, 0, 0, S_HITEM_HOVER4}
states[S_HITEM_HOVER4] = {SPR_HITM, D, 1, nil, 0, 0, S_HITEM_HOVER5}
states[S_HITEM_HOVER5] = {SPR_HITM, E, 1, nil, 0, 0, S_HITEM_HOVER6}
states[S_HITEM_HOVER6] = {SPR_HITM, F, 1, nil, 0, 0, S_HITEM_HOVER1}
states[S_HITEM_FADE1] = {SPR_HITM, TR_TRANS20|D, 3, nil, 0, 0, S_HITEM_FADE2}
states[S_HITEM_FADE2] = {SPR_HITM, TR_TRANS40|D, 3, A_SetScale, 2*FRACUNIT, 0, S_HITEM_FADE3}
states[S_HITEM_FADE3] = {SPR_HITM, TR_TRANS60|D, 3, A_SetScale, 3*FRACUNIT, 0, S_HITEM_FADE4}
states[S_HITEM_FADE4] = {SPR_HITM, TR_TRANS80|D, 3, A_SetScale, 4*FRACUNIT, 0, S_HITEM_FADE5}
states[S_HITEM_FADE5] = {SPR_HITM, TR_TRANS90|D, 3, A_SetScale, 5*FRACUNIT, 0, S_NULL}
states[S_HICON_RINGS] = {SPR_TVRI, C, 35, nil, 0, 0, S_SPRK1}
states[S_HICON_SHIELD] = {SPR_TVPI, C, 35, nil, 0, 0, S_SPRK1}
states[S_HICON_SNEAKERS] = {SPR_TVSS, C, 35, nil, 0, 0, S_SPRK1}
states[S_HICON_INVINCIBILITY] = {SPR_TVIV, C, 35, nil, 0, 0, S_SPRK1}
states[S_HICON_LIFE] = {SPR_TV1U, C, 35, nil, 0, 0, S_SPRK1}

local function BalloonReward(balloon, receiver)
	local randomtype = P_RandomByte()
	if balloon.angle == 0 then
		if (randomtype < 52)
			P_GivePlayerRings(receiver.player, 5)
		elseif (randomtype > 51 and randomtype < 103)
			P_GivePlayerRings(receiver.player, 10)
		elseif (randomtype > 102 and randomtype < 154)
			P_GivePlayerRings(receiver.player, 15)
		elseif (randomtype > 153 and randomtype < 205)
			P_GivePlayerRings(receiver.player, 20)
		elseif (randomtype > 204)
			P_GivePlayerRings(receiver.player, 25)
		end
		P_SpawnMobj(balloon.x, balloon.y, balloon.z + 32*FRACUNIT, MT_RINGSAWARD)
		S_StartSoundAtVolume(receiver.origin, 108, 150, receiver.player)
	elseif balloon.angle == ANGLE_90 then
		if (randomtype < 52)
			receiver.player.powers[pw_shield] = SH_WHIRLWIND
			P_SpawnShieldOrb(receiver.player)
		elseif (randomtype > 51 and randomtype < 103)
			receiver.player.powers[pw_shield] = SH_ELEMENTAL
			P_SpawnShieldOrb(receiver.player)
		elseif (randomtype > 102 and randomtype < 154)
			receiver.player.powers[pw_shield] = SH_ATTRACT
			P_SpawnShieldOrb(receiver.player)
		elseif (randomtype > 153 and randomtype < 205)
			receiver.player.powers[pw_shield] = SH_ARMAGEDDON
			P_SpawnShieldOrb(receiver.player)
		elseif (randomtype > 204)
			receiver.player.powers[pw_shield] = SH_FORCE|1
			P_SpawnShieldOrb(receiver.player)
		end
		P_SpawnMobj(balloon.x, balloon.y, balloon.z + 32*FRACUNIT, MT_SHIELDAWARD)
		S_StartSoundAtVolume(receiver.origin, 120, 150, receiver.player)
	elseif balloon.angle == ANGLE_180 then
		balloon.target = receiver
		A_SuperSneakers(balloon, 0, 0)
		P_SpawnMobj(balloon.x, balloon.y, balloon.z + 32*FRACUNIT, MT_SNEAKERSAWARD)
	elseif balloon.angle == ANGLE_270 then
		balloon.target = receiver
		A_Invincibility(balloon, 0, 0)
		P_SpawnMobj(balloon.x, balloon.y, balloon.z + 32*FRACUNIT, MT_INVINCIBILITYAWARD)
	elseif balloon.angle == ANGLE_315 then
		balloon.target = receiver
		P_GivePlayerLives(receiver.player, 1)
		P_PlayLivesJingle(receiver.player)
		P_SpawnMobj(balloon.x, balloon.y, balloon.z + 32*FRACUNIT, MT_LIFEAWARD)
	end
	S_StartSoundAtVolume(balloon.origin, balloon.info.deathsound, 255)
end
addHook("TouchSpecial", BalloonReward, MT_HELIBALLOON)