Randoloot/tests/levels/equipment_safety_test.gd
2026-10-25 12:34:56 +01:00

70 lines
3.2 KiB
GDScript

extends Node2D
const GEN := preload("res://scripts/items/item_generator.gd")
const RULES := preload("res://scripts/items/equipment_balance.gd")
func _ready() -> void:
GameState.start_new_run()
var player := preload("res://scenes/game/player_ship.tscn").instantiate()
add_child(player)
player.set_physics_process(false)
player.get_node("WeaponController").set_physics_process(false)
var inventory: ShipInventory = player.get_node("ShipInventory")
for level in [1,20,60,120,121,1000]:
inventory.module_slots[2] = null
inventory.module_slots[3] = GEN.generate_for_definition(preload("res://resources/items/compact_generator.tres"),level)
inventory._recalculate_ship_stats()
assert(player.energy_regeneration < player.get_mini_boost_energy_cost())
assert(player.energy_regeneration <= maxf(5.0,player.max_energy*0.15))
var engine := GEN.generate_for_definition(preload("res://resources/items/engine_extension.tres"),level)
inventory.module_slots[2] = engine
var cost: float = player.get_mini_boost_energy_cost()
engine.special_orbs.append("atomic_engine")
assert(is_equal_approx(player.get_mini_boost_energy_cost(),cost*0.5))
engine.special_orbs.append("booster")
assert(is_zero_approx(player.get_mini_boost_energy_cost()))
var shield := GEN.generate_for_definition(preload("res://resources/items/reinforced_shield.tres"),120)
shield.special_orbs.append("polarization")
inventory.module_slots[0] = shield
player.apply_equipment_bonuses({"max_speed":1000.0,"speed_percent":1000.0,"damage_percent":1000.0,"critical_chance_percent":1000.0,"critical_damage_percent":1000.0,"shield_on_damage_percent":1000.0,"max_energy":200.0,"max_shields":900.0,"energy_regeneration":1000.0,"shield_regeneration":1000.0})
assert(player.max_speed == 240.0)
assert(player.damage_multiplier == 2.0)
assert(player.get_critical_chance() <= 0.6 and player.get_critical_multiplier() <= 4.0)
assert(player.energy_regeneration == 45.0 and player.shield_regeneration == 30.0)
player.start_boost(2.0,0.1)
player._boost_speed = 2000.0
assert(player._get_allowed_speed() == 600.0)
player._boost_speed = 0.0
player._boost_target = 0.0
player._mini_boost_active = true
assert(player._get_allowed_speed() == 480.0)
player.shields = 0.0
player._refill_recovery_budgets(1.0)
player.restore_shields_from_damage(1000000.0)
assert(player.shields == 50.0)
player.restore_shields_from_damage(1000000.0)
assert(player.shields == 50.0)
player._refill_recovery_budgets(0.5)
player.restore_shields_from_damage(1000000.0)
assert(player.shields == 75.0)
player.shields = player.max_shields
player.energy = 0.0
player.absorption = Vector3.ZERO
player._refill_recovery_budgets(1.0)
for hit in 5: player.take_damage(1.0)
assert(player.energy == 5.0)
player.take_damage(100.0)
assert(player.energy == 15.0)
player.take_damage(100.0)
assert(player.energy == 15.0)
player._refill_recovery_budgets(1.0)
player.take_damage(100.0)
assert(player.energy == 30.0)
player.shields = 0.0
player.take_damage(1.0)
assert(player.energy == 30.0)
player.is_docked = true
player._refill_recovery_budgets(1.0)
player.take_damage(10.0)
assert(player.energy == 30.0)
print("EQUIPMENT_SAFETY_TEST: PASS (levels 1-1000, boost costs/orbs, speed and offence caps, healing and polarization budgets)")