Solution requires synthesizing information from multiple sources and acting on a conclusion the game never states explicitly. Design pattern rather than a distinct Godot system — the deduction happens in the player's head.
The answer is never stated — each clue rules suspects out by a property until only one remains, deduced by elimination.
There's no DeductionManager — the deduction happens in the player's head. The game only tracks clue flags and silently checks them at the conclusion, never telling the player which were needed.
Set a clue flag whenever the player sees the relevant information. The flag records exposure, not understanding — the leap is theirs to make.
func on_clue_seen(id):
clues[id] = true # player may or may not connect itThe conclusion action stores its required clues as data, but that requirement is never surfaced — the player acts on a hunch, and it either works or doesn't.
class_name Conclusion extends Resource
@export var needs_clues: Array[String] # hidden from the playerOn the attempted action, silently test the clue flags; emit succeeded or failed with no explanation of what was missing.
func attempt(c):
if c.needs_clues.all(func(k): return clues.get(k, false)):
succeeded.emit()
else: failed.emit() # no hint about which clueIn short: No DeductionManager node. Clue flags set on dialogue completion or object inspection; conclusion action only succeeds if required clue flags are all set — but the game never tells the player which flags are needed.
9 catalogued game(s) use this mechanic, spanning 1987–1998.
▶ Explore Logic Deduction interactively — see every game + the Godot system