DamageNumbersLegacy.cs
using Sandbox;
using Sandbox.Utility;
using System.Drawing;

public static class DamageNumbersLegacy
{
	public static LegacyParticle Create( float amount, Vector2 pos, Color color, float sizeMultiplier = 1f )
	{
		amount = Math.Min( amount, 999f );

		if ( amount < 1f )
		{
			amount = MathF.Ceiling( amount );
		}
		else
		{
			float fractional = amount - MathF.Floor( amount );
			if ( fractional > 0f && Game.Random.Float( 0f, 1f ) > fractional )
				amount = MathF.Floor( amount );
			else
				amount = MathF.Ceiling( amount );
		}

		var number = amount;

		var ps = LegacyParticle.Create( "particles/damagenumber_ss2/dmg_number_ss2.vpcf", new Vector3(pos.x, pos.y, Globals.DAMAGE_NUMBER_DEPTH), Rotation.Identity );

		var vec21 = Vector3.Zero;
		var vec22 = Vector3.Zero;

		if ( amount < 10 )
		{
			vec21 = vec21.WithX( number % 10 );
		}
		else if ( amount < 100 )
		{
			vec21 = vec21.WithY( number % 10 );
			vec22 = vec22.WithY( 1 );

			number /= 10;
			vec21 = vec21.WithX( MathF.Floor( number % 10 ) );
		}
		else
		{
			vec21 = vec21.WithZ( number % 10 );
			vec22 = vec22.WithZ( 1 );

			number /= 10;
			vec21 = vec21.WithY( MathF.Floor( number % 10 ) );
			vec22 = vec22.WithY( 1 );

			number /= 10;
			vec21 = vec21.WithX( MathF.Floor( number % 100 ) );
			vec22 = vec22.WithX( 1 );
		}

		ps.SetVector( 21, vec21 );
		ps.SetVector( 22, vec22 );

		float size = Utils.Map( amount, 1f, 20f, 0.15f, 0.18f, EasingType.Linear ) * Utils.Map( amount, 20f, 100f, 0.1f, 0.15f, EasingType.Linear ) * 1.6f * sizeMultiplier;
		Vector3 velocity = new Vector3( Game.Random.Float( -1f, 1f ) * 2f, Game.Random.Float( 3.5f, 4.5f ), 0f );
		Vector3 gravity = new Vector3( 0f, -7f, 0f );

		ps.SetNamedValue( "Color", color );
		ps.SetNamedValue( "Size", size );
		ps.SetVector( 1, velocity );
		ps.SetNamedValue( "Gravity", gravity );

		return ps;
	}
}