45 lines
2.5 KiB
GDScript
45 lines
2.5 KiB
GDScript
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)")
|