extends Node # Forgejo #132: the voice of the quest chain. # # GameState walks the chain and QUEUES what it wants said (see # GameState.quest_messages); this node is the thing that says it. The split # is not ceremony: quests advance in the autoload, which keeps running on a # planet surface where there is no narration banner at all, so a line # emitted straight at a banner would simply be lost down there. Queued and # drained, a quest finished on a surface is read out on the way back up. # # Draining every waiting line at once is safe: the banner queues lines # itself and shows them one at a time, and each one stops the game until it # is acknowledged (#128). @onready var narration: Control = get_node_or_null("../UI/NarrationBanner") func _process(_delta: float) -> void: if narration == null: return # The prologue owns the banner while it runs. A quest line arriving in # the middle of the convoy being torn apart would be read as part of it. if GameState.intro_active: return for message in GameState.take_quest_messages(): narration.say(String(message.line), String(message.speaker))