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.
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;
}
}
}