Funny enough, my own testing had just led me there. I wasn't sure whether it was supposed to be argprint or or writeDebugNewBlock, so I was just about to test both.
writeDebug() will print formatted or unformatted text, so it's useful for descriptive debugging messages:
-- Plain text
AD.writeDebug("Hello, world!")
-- Formatted text
AD.writeDebug("Hello, %s!", {"world"})
-- Formatted text forced to be in one line
AD.writeDebug("Position: %s", {serpent.block(position)}, "line")
writeDebugNewBlock() does just the same, but it outputs a line break first, so blocks can be visually separated in the log file.
argprint() will show the object in a reasonable way:
-- Not useful: {__self = "userdata"}
game.print(serpent.line(game.get_player(1)))
-- Human-readable output: LuaPlayer 1 ("Pi-C")
game.print(AD.argprint(game.get_player(1)))
With those three things resolved, it appears that my save will now migrate correctly to this version. Thanks very much!
You're welcome! :-)