The scanner quest moves ahead of the gas burner and gains the hunt it exists for: a research lab world, which pays several times what an ordinary planet does and is the only reliable source of research data. Finding one is what the scanner is FOR, so the conquest record now remembers which kind of world was taken and a quest can ask for that kind. Bombers get a pair of quests after the transporters. That pulled the ship lab up with them - a vessel is unlocked AT the lab, so asking for a bomber before one exists would have been unfinishable, the same trap second_hull fell into. And both research screens now explain a shortfall instead of hiding it. The skill tree refused a doctrine in silence; the ship lab said "already queued or complete", which is not why it refused and sends the player to look at the wrong thing. Both open an explainer naming what was wanted, what is held, and where data actually comes from. #192's rule - a tool is taught immediately before the quest that needs it - now points at the scanner's FIRST use rather than its only one, with the world survey still required to follow it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019AJMdB7iuHuLFZM1aBu3GD
25 lines
1.2 KiB
GDScript
25 lines
1.2 KiB
GDScript
extends "res://ui/menus/ModalMenu.gd"
|
|
|
|
# Where research data comes from, said at the moment the player finds out they
|
|
# have none.
|
|
#
|
|
# Both research screens used to answer a shortfall badly: the skill tree
|
|
# refused the node and said nothing at all, and the ship lab said "already
|
|
# queued or complete", which is not why it refused. Research data is the one
|
|
# currency in the game with a single non-obvious source - you take it off
|
|
# planets, and lab worlds carry most of it - so a player short of it needs
|
|
# telling where to go, not a silent button.
|
|
|
|
@onready var have_label: Label = $HaveLabel
|
|
@onready var detail_label: Label = $DetailLabel
|
|
|
|
|
|
func open_for_shortfall(needed: int, subject: String) -> void:
|
|
open_menu()
|
|
have_label.text = "%s NEEDS %d - YOU HAVE %d" % [
|
|
subject.to_upper(), needed, GameState.research_points]
|
|
detail_label.text = ("Research data is not mined and not built. It comes off worlds "
|
|
+ "you take from whatever is holding them, and a research lab world pays "
|
|
+ "several times what an ordinary one does.\n\n"
|
|
+ "Build a planet scanner to find the nearest lab world, fly there, and "
|
|
+ "destroy its garrison. What they were working on becomes yours.")
|