extends Node func _ready() -> void: GameState.start_new_run() var game := preload("res://scenes/game/game.tscn").instantiate() add_child(game) await get_tree().process_frame var manager := game.get_node("PlanetExpeditions") var music: AudioStreamPlayer = game.get_node("GameMusic") var original_buses := AudioServer.bus_count for visit in 3: manager.open_freighter() var screen: Control = manager.screen var audio: Node = screen.get_node("FreighterAudio") assert(get_tree().paused and audio.can_process()) assert(audio._streams.size() == 15) assert(audio._beds.size() == 2 and audio._voices.size() == 4) assert(AudioServer.bus_count == original_buses+4) for id in audio._streams: var stream: AudioStream = audio._streams[id] assert(stream != null and stream.get_length() > 0.1) for bed in audio._beds: assert(bed.stream.loop_mode == AudioStreamWAV.LOOP_FORWARD) assert(bed.stream.loop_end > bed.stream.loop_begin) assert(bed.playing and not bed.stream_paused) var music_before := music.get_playback_position() var bed_before: float = audio._beds[0].get_playback_position() await get_tree().create_timer(0.25,true).timeout assert(music.get_playback_position() > music_before) assert(audio._beds[0].get_playback_position() > bed_before) screen._select_section("workshop") var actions: int = audio.played_count screen._select_section("workshop") screen._hover_section("hangar") assert(audio.played_count == actions,"Repeated clicks and hover must not spam doors") audio._next_tool = audio._elapsed audio._process(0.1) assert(audio._last_tool != "") for index in 20: audio.play_effect("metal_1",0,-20,true) assert(audio._voices.size() == 4,"Rapid actions must keep bounded polyphony") for voice in audio._voices: voice.stop() audio.set_maintenance_needed(true) audio._next_tool = INF audio._next_console = INF audio._next_pressure = INF audio._process(4.1) assert(is_inf(audio._alarm_due)) var warnings: int = audio.played_count audio._process(1.0) assert(audio.played_count == warnings,"No repeated false emergency loop") audio.set_maintenance_needed(false) assert(is_inf(audio._alarm_due)) screen.closed.emit() assert(not get_tree().paused) assert(AudioServer.bus_count == original_buses,"All temporary panning buses must be removed on departure") assert(music.playing and not music.stream_paused) await get_tree().process_frame game.queue_free() await get_tree().process_frame print("FREIGHTER AUDIO PASS: 15 streams, seamless loop configuration, paused playback with uninterrupted music, room foley, hover/click debounce, bounded voices, one maintenance warning, cleanup across three docking visits") get_tree().quit()