extends RefCounted const MAX_LEVEL := 1000 const COUNT_POINTS := [Vector2(1, 5), Vector2(10, 10), Vector2(50, 18), Vector2(100, 23), Vector2(250, 29), Vector2(500, 34), Vector2(1000, 40)] const ELITES_PER_LEVEL := 2 static func enemy_count(level: int) -> int: var clamped_level := clampi(level, 1, MAX_LEVEL) for index in range(1, COUNT_POINTS.size()): var before: Vector2 = COUNT_POINTS[index - 1] var after: Vector2 = COUNT_POINTS[index] if clamped_level <= after.x: return roundi(lerpf(before.y, after.y, inverse_lerp(before.x, after.x, clamped_level))) return 40 static func enemy_tiers(level: int) -> Array[int]: var count := enemy_count(level) # One boss and two elites on every level, included in the total count. var bosses := 1 var elites := ELITES_PER_LEVEL var tiers: Array[int] = [2] for elite in elites: tiers.append(1) for normal in count - bosses - elites: tiers.append(0) return tiers static func power_scale(level: int) -> float: return 1.0 + 0.05 * (clampi(level, 1, MAX_LEVEL) - 1)