extends Node const BALANCE := preload("res://scripts/levels/level_balance.gd") const GENERATOR := preload("res://scripts/items/item_generator.gd") const DATABASE := preload("res://resources/items/affix_database.tres") func _ready() -> void: for sample in [[1,1.0,1.0],[2,1.1,1.07],[60,6.9,5.13],[61,7.0,5.2],[120,12.9,9.33],[121,13.1,9.4],[130,14.9,10.03],[1000,188.9,70.93]]: assert(is_equal_approx(BALANCE.enemy_stat_scale(sample[0]),sample[1])) assert(is_equal_approx(BALANCE.item_stat_scale(sample[0]),sample[2])) for level in range(2,1001): assert(is_equal_approx(BALANCE.enemy_stat_scale(level)-BALANCE.enemy_stat_scale(level-1),0.1 if level<=120 else 0.2)) assert(is_equal_approx(BALANCE.item_stat_scale(level)-BALANCE.item_stat_scale(level-1),0.07)) for affix in DATABASE.affixes: for level in [1,2,60,120,121,500,1000]: var bounds: Vector2 = affix.get_value_range(level) var factor: float = 1.0 + 0.07 * (level-1) var lower: float = affix.minimum_value_level_1 * factor var upper: float = affix.maximum_value_level_1 * factor if affix.unit == "%" or affix.stat_key == "missile_cooldown_reduction": lower = minf(lower,affix.minimum_value_cap) upper = minf(upper,affix.maximum_value_cap) assert(bounds.is_equal_approx(Vector2(lower,upper))) for definition in GENERATOR.DEFINITIONS: for level in [1,60,120,121,130,1000]: seed(8700) var baseline := ItemInstance.new() baseline.definition = definition GENERATOR.roll_base_values(baseline,1) seed(8700) var scaled := ItemInstance.new() scaled.definition = definition GENERATOR.roll_base_values(scaled,level) var factor: float = 1.0 + 0.07 * (level-1) if definition.category == ItemDefinition.Category.WEAPON: assert(is_equal_approx(scaled.damage_min,roundf(baseline.damage_min*factor))) assert(is_equal_approx(scaled.damage_max,roundf(baseline.damage_max*factor))) else: assert(is_equal_approx(scaled.primary_value_override,baseline.primary_value_override*factor)) assert(is_equal_approx(scaled.energy_regeneration_override,baseline.energy_regeneration_override*factor)) var speed := preload("res://resources/items/affixes/attack_speed_percent.tres") assert(speed.get_value_range(1).is_equal_approx(Vector2(2,3))) assert(speed.get_value_range(120).is_equal_approx(Vector2(15,25))) assert(speed.get_value_range(1000).is_equal_approx(Vector2(15,25))) print("PROGRESSION_SCALING_TEST: PASS (all 1000 levels; 120/121 boundary; all equipment bases and affix ranges; attack speed caps)")