extends Node const EVENTS := preload("res://scripts/planets/surface_events.gd") func settle() -> void: for frame in 4: await get_tree().process_frame await RenderingServer.frame_post_draw func _ready() -> void: GameState.system_level = 3 GameState.captain.credits = 100000 GameState.captain.parts = 100 for key in ["iron","copper","nickel","silicon","tungsten","mercury","sulfur","uranium"]: GameState.captain.minerals[key] = 100 var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(777,1,"Spotkania na powierzchni") var hard := "--hard" in OS.get_cmdline_user_args() var prefix := "hard_" if hard else "" profile.temperature = 100 if hard else 20 profile.oxygen = 0 if hard else 95 profile.flora = 50 if hard else 0 profile.difficulty = 1.0 if hard else 0.0 profile.easy = not hard var progress: Resource = GameState.captain.expedition assert(progress.begin_visit(profile)) progress.visit_seed = 0 var surface := Control.new() surface.set_script(preload("res://scripts/planets/surface_screen.gd")) surface.captain = GameState.captain surface.progress = progress add_child(surface) surface.set_process(false) surface.set_physics_process(false) assert(surface.world.data.events.size() == 1) var event: Dictionary = surface.world.data.events[0] var at: Vector2 = event.position surface.lander.position = at+Vector2(-100,0) surface._previous_position = surface.lander.position surface.camera.position = surface.lander.position surface.camera.reset_smoothing() var sheet := Image.create(1280,1800,false,Image.FORMAT_RGBA8) for index in EVENTS.KINDS.size(): event.clear() event.merge({"kind":EVENTS.KINDS[index],"seed":101+index,"position":at,"complete":false,"discovered":true}) surface._dialog.hide() surface._event_armed = true surface._check_events() assert(surface._dialog.visible) var snapshot := var_to_str(EVENTS.options(event,GameState.captain,progress)) surface._dialog.hide() surface._show_event(event) assert(snapshot == var_to_str(EVENTS.options(event,GameState.captain,progress))) await settle() assert(surface._dialog.position.y+surface._dialog.size.y <= get_viewport().get_visible_rect().size.y) var screenshot := get_viewport().get_texture().get_image() screenshot.save_png("res://artifacts/%sevent_%s.png" % [prefix,event.kind]) screenshot.convert(Image.FORMAT_RGBA8) screenshot.resize(640,360,Image.INTERPOLATE_LANCZOS) sheet.blit_rect(screenshot,Rect2i(0,0,640,360),Vector2i(index%2*640,index/2*360)) if event.kind == "trader": var pressed := false for child in surface._choices.get_children(): if child is Button and child.text.begins_with("Kup ") and child.text.contains("rakiet"): child.pressed.emit() pressed = true break assert(pressed and event.complete and progress.cargo_missiles == event.missile_count) if event.kind == "scan_cache": surface._event_action("scan") assert(event.scanned and not event.complete) await settle() get_viewport().get_texture().get_image().save_png("res://artifacts/%sevent_scan_result.png" % prefix) if event.kind == "evacuation": event.rolls = [0.0,0.0,0.0] surface._event_action("help") assert(event.stage == 1 and not event.complete) await settle() get_viewport().get_texture().get_image().save_png("res://artifacts/%sevent_evacuation_stage2.png" % prefix) sheet.save_png("res://artifacts/%sevents_overview.png" % prefix) # Lethal event damage follows the same destruction path as a failed POI. event.clear() event.merge({"kind":"rescue","seed":333,"position":at,"complete":false}) EVENTS.prepare(event,GameState.captain,progress) event.rolls = [1.0,1.0,1.0] progress.lander_hp = 1 var ended := [] surface.finished.connect(func(success: bool): ended.append(success)) await surface._event_action("rescue") assert(surface._ending and not surface.lander.visible and ended == [false]) progress.finish_visit(GameState.captain,false) surface.queue_free() print("EVENT UI PASS: ten dialogs, auto-open, fixed reopened offers, purchase button, scan, evacuation, bounds, lethal damage") get_tree().quit()