It then never mentions anything about what you can and cannot do with a second string
There is information about the second String (file name) parameter in the Details section of the (save-game:) documentation.
Giving the saved game a file name is optional, but allows that name to be displayed by finding it in the $Saves datamap. This can be combined with a (load-game:)(link:) to clue the players into the save's contents:
Of simply put, you can use the second String parameter to associate a (more meaningful) file name with each save you create, and that file name can be access as the value part of each key/value pair contained within the date-map returned by the (saved-games:) macro. So assuming that you used TwineScript like the following to create a Save.
(link: "Save Game")[
(if: (save-game: 'The Slot Name', 'The File Name'))[Game saved!]
(else:)[Sorry, I couldn't save your game.]
]
... then you could use TwineScript like the following to display a list of the Save Slots associated with the story, and the File Name associated with each of the Save Slots.
Saves Slots: {
(set: _saves to (saved-games:))
(for: each _name, ...(datanames: _saves))[
<br>Slot: _name - File Name: (print: _saves's (_name))
]
}
Why are there backticks?
Because both parts of the above mentioned key/value pair have a data-type of String and in your example the value (file name) part is empty, so the (print:) macro is displaying that value as two back-ticks with nothing between them.
Why does the manual put (parentheses) around the Slot #/File Name?
You can use parentheses to control the order that the individual parts of a complex expression get processed in.
In the case of the example within the Details section of the (save-game:) documentation the writer wanted the file name of the relevant Save to be determine first, so that String value could then be appended to the end of the "Load game: " String literal, and the resulting String value could then be passed as the first parameter of the (link:) macro.
Now to answer your question about how to create Load links for saves that the player supplied the Slot Names of.
Assuming that the Save was created using TwineScript something like the following...
(set: $slotName to "Banana")
(link: "Save Game using variable Slot Name")[
(if: (save-game: $slotName, 'Variable based Slot Name'))[Game saved!]
(else:)[Sorry, I couldn't save your game.]
]
... then you could use TwineScript like the following to display each of the Save key/value pairs within the (save-games:) data-map...
{
(set: _saves to (saved-games:))
(for: each _name, ...(datanames: _saves))[
<br>
(print:
"(link: 'Load Game: " + (_saves's (_name)) + "')[" +
"(load-game: '" + _name + "')" +
"]"
)
]
}
NOTE: The reason why a (print:) macro is used to dynamically create each (link:) is because the body of a link isn't executed until after the end-user selects it, and value of any variable reference in that body isn't determined until that selection occurs. This means that the value of the above _name variable will be exactly the same for all the links created by the (for:) macro loop.
To get around this issue we need to capture the current value of the _name variable for each iteration of the for loop, but unfortunately Harlowe doesn't have such a feature so the Stupid Print Trick (tm) is used as a substitute instead.