As far as I can tell, yes. We first check for Success, then check for a Talisman, wherever it's relevant. So, if we're checking for a Talisman then we have to have reached a Success result.
That doesn't answer my worry.
Reason: You're not exiting the monster, you're continuing into tests that care for (not success), but not for (not talisman) and overwrite the result that depended on your test for success:
... things that depend on success but don't exit early ...
if (Game.StateIsUnplayable or Game.IsOutOfTime)
and not Game.GameResultRec.gSuccess then
fReplays[i].ReplayResult := CR_FAIL;
This is a problem when the
supplier of that result struct
GameResultRec allows to have (
gSuccess false at the same time as
g.GotTalisman true). When I wrote "imply", I meant this supplier's side of concerns, not the consuming code that you showed. Your code seems to assume that the supplier always has
gSuccess whenever he has
g.GotTalisman. I ask you if that assumption is justified.
Your unassuming line would be:
and not (Game.GameResultRec.gSuccess or Game.GameResultRec.gGotTalisman) then
I'll have time for code review tonight, Friday 3rd, 17:00 UTC, or anytime on the weekend.
-- Simon