extends Node const GENERATOR := preload("res://scripts/items/item_generator.gd") const BALANCE := preload("res://scripts/levels/level_balance.gd") func _ready() -> void: GameState.start_new_run() for definition in [preload("res://resources/items/reinforced_shield.tres"),preload("res://resources/items/shield_recharger.tres")]: var legacy := ItemInstance.new() legacy.definition = definition assert(legacy.get_stat_total("max_shields") == definition.primary_value) assert(legacy.get_stat_total("shield_regeneration") == 2.0) legacy.item_level = 50 assert(is_equal_approx(legacy.get_base_shield_regeneration(),2.0*BALANCE.item_stat_scale(50))) for level in [1,10,50,120]: for roll in 20: var item := GENERATOR.generate_for_definition(definition,level) var expected := 2.0*BALANCE.item_stat_scale(level) assert(item.get_base_shield_regeneration() >= expected*0.8-0.001) assert(item.get_base_shield_regeneration() <= expected*1.2+0.001) assert(item.get_tooltip_text().contains("Regeneracja tarcz:")) var addon := ItemStatModifier.new() addon.stat_key = "shield_regeneration" addon.value = 1.25 legacy.additional_modifiers.append(addon) assert(is_equal_approx(legacy.get_stat_total("shield_regeneration"),legacy.get_base_shield_regeneration()+1.25)) assert(GENERATOR.advance(legacy)) assert(legacy.item_level == 51 and legacy.shield_regeneration_override > 0.0) assert(ResourceSaver.save(legacy,"res://tmp/shield_regen_roundtrip.tres") == OK) var restored := ResourceLoader.load("res://tmp/shield_regen_roundtrip.tres","",ResourceLoader.CACHE_MODE_IGNORE) as ItemInstance assert(is_equal_approx(restored.get_stat_total("shield_regeneration"),legacy.get_stat_total("shield_regeneration"))) DirAccess.remove_absolute(ProjectSettings.globalize_path("res://tmp/shield_regen_roundtrip.tres")) var game := preload("res://scenes/game/game.tscn").instantiate() add_child(game) await get_tree().process_frame var ship := game.get_node("PlayerShip") ship.set_physics_process(false) var inventory: ShipInventory = ship.get_node("ShipInventory") var item := ItemInstance.new() item.definition = preload("res://resources/items/reinforced_shield.tres") assert(inventory.add_item(item)) assert(inventory.move_item("cargo",inventory.cargo.find(item),"module",0)) assert(is_equal_approx(ship.max_shields,ship.base_max_shields+30.0)) assert(is_equal_approx(ship.shield_regeneration,2.0)) ship.shields = 0.0 ship._physics_process(0.5) assert(is_equal_approx(ship.shields,1.0)) print("SHIELD MODULE REGENERATION PASS: both definitions, legacy items, level scaling, affixes, upgrade, persistence, equipped capacity and actual regeneration") game.queue_free() await get_tree().process_frame get_tree().quit()