FF7/Coordinates encoding

From Final Fantasy Inside
< FF7
Revision as of 13:31, 12 April 2006 by my_wiki>FeuFeu (How to decode coordinates in C)
Jump to navigation Jump to search

Coordinates on the world map are stored on 2 DWords and some basic decoding has to be done before you can manipulate them.

First DWord :

[1F 1E 1D 1C 1B 1A 19 18:17 16 15 14 13 12 11 10:0F 0E 0D 0C 0B 0A 09 08:07 06 05 04 03 02 01 00]
|     DIRECTION/0x10    |  OBJECT'S ID |               X COORDINATE OF THE OBJECT               |

Second DWord :

[1F 1E 1D 1C 1B 1A 19 18:17 16 15 14 13 12 11 10:0F 0E 0D 0C 0B 0A 09 08:07 06 05 04 03 02 01 00]
|        Z COORDINATE OF THE OBJECT       |              Y COORDINATE OF THE OBJECT             |

Notes :

  • X is an unsigned value ranging from 0 to 0x47FFF
  • Y is an unsigned value ranging from 0 to 0x37FFF
  • Z is signed
  • Direction is multiplied by 0x10 after reading from save-game, but that's not affecting anything so we can think of it as a byte value. e.g: 00: South, 40: East, 80: North, C0: West


Table: Object ID
Value Object
0x00 Party
0x03 Highwind
0x05 Tiny Bronco
0x06 Buggy
0x0D Submarine
0x13 Chocobo
0x1D Weapon


How to decode coordinates

Assuming 1st and 2nd are respectively the first and second DWords :

X = 1st & 0x7FFFF
Y = 2nd & 0x3FFFF
Z = 2nd >> 0x12     // shift arithmetic right
ID = (1st >> 0x13) & 0x1F
DIR = (1st >> 0x14) & 0x0FF0