extends Node func settle() -> void: for frame in 5: await get_tree().process_frame func _ready() -> void: GameState.start_new_run() GameState.selected_ship_path = "res://assets/Ships/player/bastion.png" var game := preload("res://scenes/game/game.tscn").instantiate() add_child(game) await settle() var inv: ShipInventory = game.player.get_node("ShipInventory") var captain := GameState.captain assert(inv.unlocked_weapon_slots == 1 and inv.unlocked_extension_slots == 1) assert(inv.is_slot_unlocked("weapon",0) and not inv.is_slot_unlocked("weapon",1)) var weapon: ItemInstance = inv.weapon_slots[0] inv.cargo[0] = weapon assert(not inv.can_move_item("cargo",0,"weapon",1)) var extension: ItemInstance = preload("res://scripts/items/item_generator.gd").generate_for_definition(preload("res://resources/items/teleport.tres"),1) inv.cargo[1] = extension assert(inv.can_move_item("cargo",1,"extension",0)) assert(not inv.can_move_item("cargo",1,"extension",1)) captain.minerals["iron"] = 100 assert(not inv.unlock_slot("weapon",captain),"Unlock requires docking") assert(captain.minerals.iron == 100) var manager := game.get_node("PlanetExpeditions") manager.open_freighter() var screen: Control = manager.screen screen._select_section("hangar") captain.minerals["iron"] = 9 screen._refresh() assert(not inv.unlock_slot("weapon",captain)) assert(captain.minerals.iron == 9 and inv.unlocked_weapon_slots == 1) captain.minerals["iron"] = 60 screen._refresh() await settle() await RenderingServer.frame_post_draw get_viewport().get_texture().get_image().save_png("res://artifacts/hangar_slot_unlock.png") var button: Button for node in screen._content.find_children("*","Button",true,false): if node.name == "UnlockWeapon": button = node assert(button != null and not button.disabled) button.pressed.emit() assert(inv.unlocked_weapon_slots == 2 and captain.minerals.iron == 50) assert(inv.can_move_item("cargo",0,"weapon",1)) assert(inv.unlock_slot("weapon",captain)) for index in 4: assert(inv.unlock_slot("extension",captain)) assert(inv.unlocked_weapon_slots == 3 and inv.unlocked_extension_slots == 5) assert(captain.minerals.iron == 0) captain.minerals["iron"] = 100 assert(not inv.unlock_slot("weapon",captain) and not inv.unlock_slot("extension",captain)) assert(not inv.unlock_slot("module",captain) and captain.minerals.iron == 100) inv.preserve_for_restart() screen.closed.emit() game.free() game = preload("res://scenes/game/game.tscn").instantiate() add_child(game) await settle() inv = game.player.get_node("ShipInventory") assert(inv.unlocked_weapon_slots == 3 and inv.unlocked_extension_slots == 5) game.free() GameState.start_new_run() game = preload("res://scenes/game/game.tscn").instantiate() add_child(game) await settle() inv = game.player.get_node("ShipInventory") assert(inv.unlocked_weapon_slots == 1 and inv.unlocked_extension_slots == 1) game.free() print("SLOT UNLOCK PASS: starter 1/1, locked mounting, dock requirement, affordability, hangar button, 10 iron per slot, limits 3/5, restart persistence, new run reset") get_tree().quit()