perks/CurseEnemySpawnTime.cs

A Perk class named CurseEnemySpawnTime that registers a unique curse called "Shallow Graves" and modifies enemy spawn time for the player. It applies a multiplicative modifier to PlayerStat.EnemySpawnTimeModifier based on perk level and provides helper methods to compute displayed percentage and raw modifier values.

Reflection
🐞 GetSpeedIncreasePercentage uses 1f/amount while Refresh applies amount directly (0.2f * level), so at level 1 the UI shows 400% faster even though the modifier is 0.2x time, which is an incorrect display.
using System;
using Sandbox;

[Perk( Rarity.Unique, curse: true, alwaysOfferDebug: false )]
public class CurseEnemySpawnTime : Perk
{
	private enum Mod { SpawnTimeModifier };

	static CurseEnemySpawnTime()
	{
		Register<CurseEnemySpawnTime>(
			name: "Shallow Graves",
			imagePath: "textures/icons/vector/curse_enemy_spawn_time.png",
			description: level => $"Enemies dig out of\nthe ground [-]{GetSpeedIncreasePercentage( level )}%[/-] faster"
		);
	}

	public override void Start()
	{
		base.Start();
	}

	public override void Refresh()
	{
		base.Refresh();

		Player.Modify( this, PlayerStat.EnemySpawnTimeModifier, GetValue( Level, Mod.SpawnTimeModifier ), ModifierType.Mult );
	}

	private static int GetSpeedIncreasePercentage( int level )
	{
		var amount = GetValue( level, Mod.SpawnTimeModifier );
		var mult = 1f / amount;
		return MathX.CeilToInt((mult - 1f) * 100f);
	}

	private static float GetValue( int level, Mod mod, bool isPercent = false )
	{
		switch ( mod )
		{
			case Mod.SpawnTimeModifier:
			default:
				return isPercent
					? 80f * level
					: 0.20f * level;
		}
	}
}