I am not sure what you mean by "triangulation". There is no such thing here. It's just reading values from static memory addresses.
It's too much messing to say how the savestate works - but suffice to say, I backup the Savemap and temp map
SaveMapArray: Array [0..$10F6] of byte;
LastSaveMapArray: Array [0..$10F6] of byte;
TempBankArray: Array [0..$FF] of byte;
LastTempBankArray: Array [0..$FF] of byte;
SaveMap = $DBFD38; //Save map ends DC0E2C /Bank1/2 starts DC08DC
TempBank = $CC14D0;
and then restore it before calling the operation that initiates a field / wm jump. The game engine does the rest. This will never be fool proof, because the game engine was never designed to be loaded in-between scenes and so on. It can break the game in certain places, but generally it works very well - especially for debugging purposes. There is no easy method for "save state saving". I invented my own format and procedure for doing it.
Case TargetModule Of
1: begin // Field to Field
Wword($CC0D8A,pWord(@FieldArray[254]) ^); //Screen ID
Wsint($CC0D8C,pLongint(@FieldArray[0 + (15 * CharacterID)])^ div 4096); //X
Wsint($CC0D8E,pLongint(@FieldArray[4 + (15 * CharacterID)])^ div 4096); //Y
Wword($CC0DAA,pWord(@FieldArray[12 + (15 * CharacterID)])^ ); //T
Wbyte($CC0DAC,pByte(@FieldArray[14 + (15 * CharacterID)])^ ); //D
end;
3: Wword($CC0D8A, 45); // Set jump to World Map
4: Wword($CC0D8A, 30); // Set jump to Submarine
5: Wword($CC0D8A, 60); // Set jump to Snowfield
else
End;
Wbyte($CC0D89, 1); // Initiate Field jump
end else // Current location is world map
if TargetModule = 1 then // World Map to Field
begin
Wword($CC0D8A,pWord(@FieldArray[254]) ^); //Screen ID
Wsint($CC0D8C,pLongint(@FieldArray[0 + (15 * CharacterID)])^ div 4096); //X
Wsint($CC0D8E,pLongint(@FieldArray[4 + (15 * CharacterID)])^ div 4096); //Y
Wword($CC0DAA,pWord(@FieldArray[12 + (15 * CharacterID)])^ ); //T
Wbyte($CC0DAC,pByte(@FieldArray[14 + (15 * CharacterID)])^ ); //D
Wbyte($CC1644, 0); //may not be needed, but setting to 0 just in case.
Wbyte($E3A884, 0); //This decides the type of jump. 00 = field/normal world map jump. 01 = Battle. 02 = fmv.
//Battle ID is set at E3A88C
Wbyte($E045E4, 3); //Initiate wm jump - Wbyte($E045F0, 1);
// 03 = jump to field. 04 = jump to submerged submarine. 05 = Jump to World map.
end;
I'd help more but I am really busy with The Reunion.