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)")