Difference between revisions of "FF7/Coordinates encoding"

From Final Fantasy Inside
< FF7
Jump to navigation Jump to search
my_wiki>FeuFeu
 
m (5 revisions imported)
 
(4 intermediate revisions by 3 users not shown)
Line 13: Line 13:
 
* Y is an unsigned value ranging from 0 to 0x37FFF
 
* Y is an unsigned value ranging from 0 to 0x37FFF
 
* Z is signed
 
* 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.
+
* 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
  
  
Line 22: Line 22:
 
|-
 
|-
 
| 0x00
 
| 0x00
| Party
+
| Cloud
 +
|-
 +
| 0x01
 +
| Tifa
 +
|-
 +
| 0x02
 +
| Cid
 
|-
 
|-
 
| 0x03
 
| 0x03
 
| Highwind
 
| Highwind
 +
|-
 +
| 0x04
 +
| Yellow Chocobo
 
|-
 
|-
 
| 0x05
 
| 0x05
Line 32: Line 41:
 
| 0x06
 
| 0x06
 
| Buggy
 
| Buggy
 +
|-
 +
| 0x07
 +
| Cannon from Junon
 +
|-
 +
| 0x0C
 +
| Phoenix from Fort Condor
 
|-
 
|-
 
| 0x0D
 
| 0x0D
 
| Submarine
 
| Submarine
 +
|-
 +
| 0x0E
 +
| Gold Saucer
 +
|-
 +
| 0x0F
 +
| Rocket
 +
|-
 +
| 0x10
 +
| Rocket launch pad
 
|-
 
|-
 
| 0x13
 
| 0x13
 
| Chocobo
 
| Chocobo
 +
|-
 +
| 0x18
 +
| North crater dome
 +
|-
 +
| 0x19
 +
| Ancient Forest
 
|-
 
|-
 
| 0x1D
 
| 0x1D
Line 44: Line 74:
  
  
== How to decode coordinates in C ==
+
== How to decode coordinates ==
  
 
Assuming ''1st'' and ''2nd'' are respectively the first and second DWords :
 
Assuming ''1st'' and ''2nd'' are respectively the first and second DWords :

Latest revision as of 05:11, 23 May 2019

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 Cloud
0x01 Tifa
0x02 Cid
0x03 Highwind
0x04 Yellow Chocobo
0x05 Tiny Bronco
0x06 Buggy
0x07 Cannon from Junon
0x0C Phoenix from Fort Condor
0x0D Submarine
0x0E Gold Saucer
0x0F Rocket
0x10 Rocket launch pad
0x13 Chocobo
0x18 North crater dome
0x19 Ancient Forest
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