Teach where research data comes from, and say so when it runs out
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
This commit is contained in:
parent
aca04ad4cf
commit
8462099068
8 changed files with 327 additions and 26 deletions
|
|
@ -3052,6 +3052,12 @@ func register_planet_garrison(planet_key: String, enemy_count: int,
|
|||
# re-registered on a second visit must not become payable again.
|
||||
"research_point_reward": point_reward,
|
||||
"research_awarded": bool(existing.get("research_awarded", false)),
|
||||
# Which kind of world this was. A quest can then ask for a research
|
||||
# lab specifically - "any planet" and "the one worth research data"
|
||||
# are different lessons - and the record is the only place that
|
||||
# survives leaving the surface.
|
||||
"definition_id": definition_id if definition_id != "" \
|
||||
else String(existing.get("definition_id", "")),
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3985,10 +3991,18 @@ func quest_progress(quest: Dictionary) -> Vector2i:
|
|||
return Vector2i(mini(visited_planet_kinds.size(), kinds), kinds)
|
||||
QUESTS.GOAL_CONQUERED:
|
||||
var wanted: int = int(goal.get("count", 1))
|
||||
# An optional kind: "take a planet" and "take a research lab" are
|
||||
# different asks, and the second is how a player learns where
|
||||
# research data comes from in quantity.
|
||||
var of_kind: String = String(goal.get("definition", ""))
|
||||
var held: int = 0
|
||||
for key in planet_capture:
|
||||
if bool(planet_capture[key].get("conquered", false)):
|
||||
held += 1
|
||||
var record: Dictionary = planet_capture[key]
|
||||
if not bool(record.get("conquered", false)):
|
||||
continue
|
||||
if of_kind != "" and String(record.get("definition_id", "")) != of_kind:
|
||||
continue
|
||||
held += 1
|
||||
return Vector2i(mini(held, wanted), wanted)
|
||||
# An unknown goal kind must not be quietly "already done" - that would
|
||||
# run the whole chain off in one frame.
|
||||
|
|
|
|||
Loading…
Reference in a new issue