extends Node const PROFILES := preload("res://scripts/planets/planet_profiles.gd") const EVENTS := preload("res://scripts/planets/surface_events.gd") var sheet: Image var panel_index := 0 func settle() -> void: for frame in 5: await get_tree().process_frame await RenderingServer.frame_post_draw func capture(name: String) -> void: await settle() var screenshot := get_viewport().get_texture().get_image() screenshot.save_png("res://artifacts/threat_%s.png" % name) screenshot.convert(Image.FORMAT_RGBA8) screenshot.resize(640,360,Image.INTERPOLATE_LANCZOS) sheet.blit_rect(screenshot,Rect2i(0,0,640,360),Vector2i(panel_index%2*640,panel_index/2*360)) panel_index += 1 func _ready() -> void: GameState.system_seed = 8428159 var game := preload("res://scenes/game/game.tscn").instantiate() add_child(game) await settle() var manager := game.get_node("PlanetExpeditions") for enemy in get_tree().get_nodes_in_group("enemies"): enemy.position = Vector2(9999,9999) var planet: Node2D = game.protected_planet game.player.position = planet.position game.player.landing_combat_lock = 0 var profile: Dictionary = planet.planet_profile sheet = Image.create(1280,1080,false,Image.FORMAT_RGBA8) for scenario in [{"name":"scan_safe","rank":1,"oxygen":98,"temperature":30,"flora":0,"difficulty":0.0},{"name":"scan_150","rank":25,"oxygen":0,"temperature":100,"flora":50,"difficulty":1.0},{"name":"scan_l50","rank":50,"oxygen":0,"temperature":100,"flora":50,"difficulty":1.0}]: profile.oxygen = scenario.oxygen profile.temperature = scenario.temperature profile.flora = scenario.flora profile.difficulty = scenario.difficulty profile.easy = scenario.difficulty == 0 profile.landing_damage = 5 if profile.easy else 20 for gear in GameState.captain.gear_items: gear.level = scenario.rank GameState.captain.emit_changed() await capture(scenario.name) assert(manager._text.text.contains("ŁUP POI")) assert(get_viewport().get_visible_rect().encloses(manager._prompt.get_global_rect())) for gear in GameState.captain.gear_items: gear.level = 25 GameState.captain.emit_changed() manager.land_nearby() var surface: Control = manager.screen assert(surface != null) surface.set_process(false) surface.set_physics_process(false) var poi: Dictionary = surface.world.data.pois[0] surface._poi = poi surface._show_poi() assert(poi.complete and not surface.progress.cargo.is_empty()) await capture("single_visit_poi") var event := {"kind":"evacuation","seed":77,"position":Vector2.ZERO,"complete":false} EVENTS.prepare(event,GameState.captain,surface.progress) event.stage = 2 surface._show_event(event) var blocked_event := false for child in surface._choices.get_children(): if child is Button and child.text.begins_with("Etap 3/3"): assert(child.disabled) blocked_event = true assert(blocked_event) await capture("zero_chance_event") surface._show_event({"kind":"rescue","seed":78,"position":Vector2.ZERO,"complete":false}) await capture("rescue_150") sheet.save_png("res://artifacts/threat_system_overview.png") manager.finish_surface(true) game.queue_free() await get_tree().process_frame print("THREAT UI PASS: three prelanding loot scans, L50 mitigation, on-screen prompt, single-visit POI, disabled zero-chance special event, rescue threat") get_tree().quit()