After further investigation, another alternative would be...
[pascal]
uses
{$IFDEF WIN32}
ShlObj; // Only one unit, yeah!
{$ELSE}
libc; // Not sure where getpwuid(), getuid() and PPasswordRecord live
{$ENDIF}

function GetPersonalPath : string;
var
{$IFDEF WIN32}
Res: Bool;
Path: array[0..Max_Path] of Char;
{$ELSE}
ppwd PasswordRecord;
{$ENDIF}
begin
{$IFDEF WIN32}
Res := ShGetSpecialFolderPath(0, Path, , False);
if not Res then raise Exception.Create(
'Could not determine My Documents path');
Result := Path;
{$ELSE}
ppwd := getpwuid( getuid() );
Result := ppwd^.pw_dir;
{$ENDIF}
end;
[/pascal]

NOTE :if you change CSIDL_PERSONAL to CSIDL_APPDATA this will give you the path to where Applications store their data, which for games would be a much better place to store things than in the My Documents folder.