things/enemies/RunnerEliteSpecial.cs
using Sandbox;

public class RunnerEliteSpecial : RunnerElite
{
	public override float FullOpacity => 0f;

	protected override void OnAwake()
	{
		base.OnAwake();

		Radius = 0.5075f;
		Scale = 2.275f;
		Sprite.LocalScale = new Vector3( Scale * Game.Random.Float( 1f - HeightVariance, 1f + HeightVariance ), Scale * Game.Random.Float( 1f - WidthVariance, 1f + WidthVariance ), 1f ) * Globals.SPRITE_SCALE;

		Health = 300f;
		MaxHealth = Health;

		ShadowScale = 2.275f;
		ShadowFullOpacity = 0f;
		ShadowSpriteDirty = true;

		PushStrength = 55f;
		AggroRange = 2.25f;
		
		DamageToPlayer = 5f;

		CoinChance = 1f;
		CoinValueMin = 4;
		CoinValueMax = 8;

		Sprite.Tint = Color.White.WithAlpha( FullOpacity );

		MoveSpeed = 0.35f;

		JUMP_DELAY_MIN = 4f;
		JUMP_DELAY_MAX = 10f;
	}

	protected override void SpawnLandingClouds()
	{
		for ( int i = 0; i < Game.Random.Int( 2, 3 ); i++ )
		{
			var dir = Utils.GetRandomVector();
			SpawnCloudClient( Position2D + dir * Game.Random.Float(0.4f, 0.6f), dir * Game.Random.Float( 0.3f, 1.5f ) );
		}
	}

	public override void DealDamage()
	{
		Flash( 0.1f, Color.Red.WithAlpha( 0.25f ) );
	}

	public override void Celebrate()
	{
		if ( IsSpawning )
			FinishSpawning();

		if ( _isJumping )
			return;

		CelebrateAsync();
	}

	async void CelebrateAsync()
	{
		await Task.Delay( Game.Random.Int( 0, 500 ) );

		Sprite.PlaybackSpeed = Game.Random.Float( 2f, 4f );

		Sprite.Tint = Color.Red.WithAlpha( 0.25f );

		Sprite.PlayAnimation( "cheer" );
	}
}