status/MoreDamageShrinkingBulletsStatus.cs

A Status-derived gameplay buff that increases initial bullet damage and also applies a per-second damage shrink over time. It sets title and icon, applies additive modifiers for flat bullet damage and damage shrink on Refresh, and provides descriptive text and upgrade descriptions.

File Access
using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;

[Status(7, 0, 1f, 0, false )]
public class MoreDamageShrinkingBulletsStatus : Status
{
	public MoreDamageShrinkingBulletsStatus()
    {
		Title = "Frontloaded";
		IconPath = "textures/icons/more_damage_shrinking_bullets.png";
	}

	public override void Init(Player player)
	{
		base.Init(player);
	}

	public override void Refresh()
    {
		Description = GetDescription(Level);

        Player.Modify(this, PlayerStat.BulletFlatDamageAddition, GetDamageAdd(Level), ModifierType.Add);
        Player.Modify(this, PlayerStat.BulletDamageShrink, GetShrinkForLevel(Level), ModifierType.Add);
    }

	public override string GetDescription(int newLevel)
	{
		return string.Format("Your bullets do +{0} damage but shrink by {1} damage per second", GetDamageAddPrint(Level), GetShrinkPrintForLevel(Level));
	}

	public override string GetUpgradeDescription(int newLevel)
    {
		return newLevel > 1 ? string.Format(" Your bullets do +{0}→+{1} damage but shrink by {2}→{3} damage per second", GetDamageAddPrint(newLevel - 1), GetDamageAddPrint(newLevel), GetShrinkPrintForLevel(newLevel - 1), GetShrinkPrintForLevel(newLevel)) : GetDescription(newLevel);
	}

    public float GetDamageAdd(int level)
    {
        return 1.3f * level;
    }

    public string GetDamageAddPrint(int level)
    {
        return string.Format( "{0:0.0}", GetDamageAdd( level ) );
	}

    public float GetShrinkForLevel(int level)
    {
        return 1.8f * level;
    }

    public string GetShrinkPrintForLevel(int level)
    {
        return string.Format("{0:0.0}", GetShrinkForLevel(level));
    }
}