Mass Replay Verification for different username fails to report talismans

Started by Simon, May 06, 2024, 11:32:48 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Simon

NL 12.12.5.

1. Build a level pack including some talisman levels.
2. In NL's options, name yourself X.
3. Cover your levelpack including all talismans with replays played by X.
4. As X, mass-verify your replay collection.
5. In NL's options, name yourself Y.
6. As Y, mass-verify your replay collection.

Expected: Identical output in steps 4 and 6 for each replay.
Observed: Different output in steps 4 and 6 for each talisman-winning replay.

When Y mass-verifies replays from X, then NL will still test for pass/fail correctly. NL will print pass/fail correctly to the screen and to the results file (the text output file in your NL worktree). But NL will refuse to tell Y whether X's replay achieved a talisman. NL will print talisman-winning replays as plain wins.

I understand that Y doesn't want X's talismans recorded in Y's personal statistics, but Y doesn't want X's plain wins written there, either. Then why does NL still print win/loss, but not talisman, during Y's mass-replay verification of X's replays?

Experienced NL designers/level maintainers: When you co-author a pack, or when you inherit a pack with talismans from another maintainer, how do you work with his replay collection? Do you mass-rename the player to yourself in the covering replays before you mass-verify the replays? Especially co-authoring a pack sounds impossible under this NL behavior without constantly renaming the players in all those replays.

-- Simon

WillLem


WillLem

Fixed this in SLX commit 53dd28045.

@namida - The key is to let the talisman check run for all replays, but only update records if it's the user's replay. It's such a small change that it's probably not worth a PR, plus the postview text creation method has been refactored in SLX so wouldn't merge nicely anyway. Besides, you may wish to do it slightly differently.

Here's the suggested change anyway, in LemGame (scroll code to see addition):

procedure TLemmingGame.DoTalismanCheck;
var
  i: Integer;

  //// (Nested procedures)

begin
  if fReplayManager.IsThisUsersReplay then   <-----------------get rid of this
    Exit;                                    <-----------------get rid of this

  for i := 0 to Level.Talismans.Count-1 do
  begin
    if CheckTalisman(Level.Talismans[i]) then
    begin
      fTalismanReceived := true;

      if fReplayManager.IsThisUsersReplay then             <------------------------------add this
      begin                                                <-------------------------------------{
        if not GameParams.CurrentLevel.TalismanStatus[Level.Talismans[i].ID] then
          fNewTalismanReceived := true;

        GameParams.CurrentLevel.TalismanStatus[Level.Talismans[i].ID] := true;
      end;                                                 <-------------------------------------{
    end;
  end;
end;


And in GamePostviewScreen, when creating the "talisman unlocked" text string (corrected for NL):


    // top text
    if gGotNewTalisman
    and GlobalGame.ReplayManager.IsThisUsersReplay <----------------- add this
    then
        Add(STalismanUnlocked)