
kActor@ QuadSound; // actor to source quad fire sound from
int QuadDamTick; // player tick when quad damage began

void QuadInit()
{
	@QuadSound = ActorFactory.Spawn( -1, Player.Actor().Origin().x, Player.Actor().Origin().y, Player.Actor().Origin().z, 0, Player.Actor().SectorIndex() );
	QuadDamTick = -3600;
}

int QuadRemaining()
{
	return 30*60 - (Player.Actor().GameTicks() - QuadDamTick);
}

bool QuadDamage()
{
	if ( QuadRemaining() > 0 )
	{
		if ( QuadSound !is null )
		{
			QuadSound.StopSound();
			QuadSound.PlaySound( "sounds/pickup/Quad_Shot.ksnd" );
		}
		return true;
	}
	return false;
}

void QuadTick( kWeapon@ wep )
{
	int remaining = QuadRemaining();
	if ( remaining > -1.15f*60 && QuadSound !is null )
		QuadSound.Origin() = EyePos();
	if ( remaining <= 0 )
		return;
	if ( remaining == 3*60 )
		wep.PlaySound( "sounds/pickup/Quad_Expire.ksnd" );
	if ( remaining > 3*60 // before expire sound
		|| (remaining <= 2.5f*60 && remaining > 2*60) // as first tone fades
		|| (remaining <= 1.5f*60 && remaining > 60) // as second tone fades
		|| remaining <= 0.5f*60 ) // as third tone fades
			wep.RunFxEvent( "QuadDamage" );
}

class QuadPickup : ScriptObject
{
	QuadPickup( kActor@ a ) {}

	// actor was removed, which means it was picked up
	// (or level end, in which case it will be undone by Q2Init())
	~QuadPickup()
	{
		QuadDamTick = Player.Actor().GameTicks();
	}

	void OnSpawn() {}
	void OnTick() {}
}
