extends Node const GEAR := preload("res://scripts/planets/captain_equipment.gd") const PROFILES := preload("res://scripts/planets/planet_profiles.gd") const SURFACE := preload("res://scripts/planets/surface_generator.gd") func _ready() -> void: var captain: Resource = preload("res://scripts/captain/captain_progress.gd").new() assert(captain.gear_items.size() == 3) for kind in GEAR.KINDS: assert(GEAR.level(captain,kind) == 1) assert(not GEAR.equip(captain,"suit",1)) var easy := 0 for index in 1000: var profile: Dictionary = PROFILES.generate(821,index,"Test") if profile.easy: easy += 1 assert(profile.oxygen > 80 and profile.temperature >= -10 and profile.temperature <= 40 and profile.flora == 0) assert(profile.landing_damage >= 5 and profile.landing_damage <= 20) assert(easy > 640 and easy < 760) var profile: Dictionary = PROFILES.generate(821,0,"Test") var state: Resource = captain.expedition assert(state.begin_visit(profile)) var seed1: int = state.visit_seed state.add_material("silicon",12) var before := int(captain.minerals.get("silicon",0)) assert(int(captain.minerals.get("silicon",0)) == before) state.finish_visit(captain,true) assert(captain.minerals.silicon == before+12) state.finish_visit(captain,true) assert(captain.minerals.silicon == before+12) assert(not state.begin_visit(profile)) captain.parts = 300 var parts_before: int = captain.parts var cost: int = state.repair_cost() assert(state.repair(captain)) assert(captain.parts == parts_before-cost) assert(state.begin_visit(profile)) assert(state.visit_seed != seed1) state.add_material("silicon",100) state.damage(100) state.finish_visit(captain,true) assert(captain.minerals.silicon == before+12) assert(state.repair_cost() == 100) assert(state.repair(captain)) for key in ["silicon","copper","nickel","iron","tungsten","titanium"]: captain.minerals[key] = 200 var crafted: Dictionary = GEAR.craft(captain,"breathing") assert(crafted.level == 2) assert(GEAR.level(captain,"breathing") == 1) assert(GEAR.equip(captain,"breathing",crafted.uid)) assert(GEAR.level(captain,"breathing") == 2) var world: Dictionary = SURFACE.generate(11447,profile) assert(world.pois.size() >= 8 and world.pois.size() <= 16 and world.trees.size() > 0 and world.mountains.size() > 0 and world.structures.size() > 0) assert(SURFACE.generate(11447,profile).pois == world.pois) assert(SURFACE.generate(11448,profile).pois != world.pois) for seed_value in 100: var system: Dictionary = preload("res://scripts/levels/system_generator.gd").generate(1+seed_value%50,seed_value+711) var landable := 0 for planet in system.planets: if planet.earthlike: landable += 1 assert(PROFILES.is_earthlike(planet.texture)) if planet.protected: assert(planet.earthlike and not planet.profile.is_empty()) assert(landable >= 1) var game := preload("res://scenes/game/game.tscn").instantiate() add_child(game) await get_tree().process_frame var manager := game.get_node("PlanetExpeditions") var player := game.get_node("PlayerShip") for enemy in get_tree().get_nodes_in_group("enemies"): enemy.position = Vector2(9999,9999) player.position = manager.freighter.position await get_tree().process_frame player.landing_combat_lock = 6 manager._process(0) manager.land_nearby() assert(manager.screen == null and not get_tree().paused) player.landing_combat_lock = 0 var blocker := get_tree().get_first_node_in_group("enemies") blocker.position = player.position + Vector2(200,0) assert(manager.combat_blocked()) manager.land_nearby() assert(manager.screen == null) blocker.position = Vector2(9999,9999) assert(not manager.combat_blocked()) var inventory: ShipInventory = player.get_node("ShipInventory") var module := preload("res://scripts/items/item_generator.gd").generate_loot(1,0) for slot in 20: inventory.cargo[slot] = module GameState.captain.expedition.delivered_modules.append(module) assert(GameState.captain.expedition.deliver_modules(inventory) == 0) assert(GameState.captain.expedition.delivered_modules.size() == 1) inventory.cargo[0] = null assert(GameState.captain.expedition.deliver_modules(inventory) == 1) assert(GameState.captain.expedition.delivered_modules.is_empty()) var gear_panel := game.get_node("HUD/HUDRoot/CaptainEquipment") var breathing_slot: Control = gear_panel._wardrobe.find_child("BreathingSlot",true,false) var suit_slot: Control = gear_panel._wardrobe.find_child("SuitSlot",true,false) GameState.captain.parts = 500 GameState.captain.minerals.silicon = 500 GameState.captain.minerals.copper = 500 var upgrade: Dictionary = GEAR.craft(GameState.captain,"breathing") assert(breathing_slot._can_drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid})) assert(not suit_slot._can_drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid})) assert(not breathing_slot._can_drop_data(Vector2.ZERO,{"item":module})) breathing_slot._drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid}) assert(GEAR.level(GameState.captain,"breathing") == 2) manager.land_nearby() assert(get_tree().paused and player.is_docked) assert(manager.screen != null) manager.screen._tab = "workshop" manager.screen._refresh() manager.screen._tab = "lab" manager.screen._refresh() manager._leave() assert(not get_tree().paused and not player.is_docked) player.position = game.protected_planet.position await get_tree().process_frame manager.scan_nearby() manager.land_nearby() assert(get_tree().paused and GameState.captain.expedition.active) assert(manager.screen.world.data.pois.size() >= 8 and manager.screen.world.data.pois.size() <= 16) assert(manager.screen.planet_texture == manager._near_planet.body_texture) assert(manager.screen._telemetry.portrait.texture == manager._near_planet.body_texture) for poi in manager.screen.world.data.pois: manager.screen._poi = poi manager.screen._show_poi() assert(manager.screen._dialog.visible) manager.screen.lander.position = manager.screen.world.data.pois[0].position manager.screen._poi = manager.screen.world.data.pois[0] manager.screen._show_poi() manager.screen._attempt() var missiles_before := inventory.missile_ammunition var credits_before := GameState.captain.credits var owned_parts_before := GameState.captain.parts var ammo_before := inventory.ammunition var irradiated_before := inventory.irradiated_ammunition GameState.captain.expedition.add_material("ammunition",100) GameState.captain.expedition.add_material("irradiated_ammunition",20) GameState.captain.expedition.cargo_missiles = 3 GameState.captain.expedition.cargo_credits = 23 GameState.captain.expedition.cargo_parts = 4 manager.finish_surface(true) assert(inventory.missile_ammunition == missiles_before+3) assert(GameState.captain.credits == credits_before+23) assert(GameState.captain.parts == owned_parts_before+4) assert(inventory.ammunition >= ammo_before+100) assert(inventory.irradiated_ammunition == irradiated_before+20) assert(not get_tree().paused) game.queue_free() await get_tree().process_frame print("PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return") get_tree().quit()