70 lines
3.2 KiB
GDScript
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)")
|