FF7 Savemap

  • Thread starter Thread starter FeuFeu
  • Start date Start date
Status
Not open for further replies.
Some new data :)

Offset 0x0BFF (3 bytes) : Ultimate Weapon's remaining HP

Offset 0x0F84 (3 bytes) : Ultimate Weapon's X coordinates.
Offset 0x0F87 (1 byte) : Ultimate Weapon's heading.
Offset 0x0F88 (3 bytes) : Ultimate Weapon's Y coordinates.
Offset 0x0F8B (1 byte) : Ultimate Weapon's Z coordinates.

I'm sure there are others variables related to this Weapon, but there's so many offsets modified (0x0C23, 0x0CAE, 0x0CBA, 0x0F32, 0x0F36, 0x0FA1, etc) I have no idea what purpose they have (modifying them "wildly" have no apparent effect). I think the following is likely to be kept :
- is Ultimate Weapon visible/moving/dead or not
- what's its next destination
- the dead status and the appearance of a crater near the Ancient Forest might not stored at the same offset.
- the appearance of Ruby Weapon should also be flagged somewhere

Apart from that, I'm short of new ideas.
Should I look for chest flags (since we know it begins at offset 0x0FC4) ? It'll be tedious, but still useful to know. Or is there anything else I should focus on ?
Comment welcome :wink:
 
FeuFeu are the 3byte X/Y values just 24bit integers or 8:16 binary fractions?
I've decided to update my Jenova editor for the playstation version of the game (LOL) and was wondering how the encoding worked.  My guess is it's either an integer or a fraction of sorts but I'm not too sure.

The heading is it in in fractions of a full revolution?
I suppose this means I should have a map of FF7 world and put little marks on it representing these things (sigh) LOL.

Cyb
 
Sorry, took me a while to answer.

I'm fairly sure the X and Y coordinates are just an integer, provided how Cloud moves when I modify the values. Let's take the X coordinate :
- 00 00 00 is the origin, at the left of the world map
- FF 00 00 will barely move Cloud to the right (I don't know the exact scale, though).
- 00 10 00 will move Cloud a few screens away from its original location
- 00 00 01, finally, will almost move Cloud a third of the map away from the origin

I've noticed some strange behavior, by the way. A value like 00 00 04 seemed to create an overflow (Cloud is replaced at the origin), but I've also seen some higher values and Cloud was still placed "correctly" on the map, as if there's some sort of 'mod' formula applied on the value.


As for the heading, here's what the wiki says :
e.g: 00: South, 40: East, 80: North, C0: West
So... yeah, this is a fraction of a full revolution.

A map would certainly help, indeed  :)
 
Sorry, took me a while to answer.

I'm fairly sure the X and Y coordinates are just an integer, provided how Cloud moves when I modify the values. Let's take the X coordinate :
- 00 00 00 is the origin, at the left of the world map
- FF 00 00 will barely move Cloud to the right (I don't know the exact scale, though).
- 00 10 00 will move Cloud a few screens away from its original location
- 00 00 01, finally, will almost move Cloud a third of the map away from the origin
All right this means it's stored as a little endian value.
A proper 'conversion' to an unsigned int might be
(LOC[2] & 0xFF) << 16 | (LOC[1] & 0xFF) << 8 | (LOC[0] & 0xFF)
It may be a two's compliment number, so I recomend for fun try this number
00 EF FF
(FFEF00) it should move Cloud a few screens to the left if it's little endian based (IE signed)
I've noticed some strange behavior, by the way. A value like 00 00 04 seemed to create an overflow (Cloud is replaced at the origin), but I've also seen some higher values and Cloud was still placed "correctly" on the map, as if there's some sort of 'mod' formula applied on the value.


As for the heading, here's what the wiki says :
e.g: 00: South, 40: East, 80: North, C0: West
So... yeah, this is a fraction of a full revolution.

A map would certainly help, indeed  :)
Ahhh doh :D oh well in any case I'll see if I can twiddle the numbers and stuff to make sense of them.

Cyb
 
Here are some tests I've just done.

http://img137.imageshack.us/img137/9980/ff7map12fu.png
Cloud's coordinates (red point)
X : 00 EF FF (equivalent to 00 00 00)
Y : 00 00 00

Highwind's coordinates (white point, near Cosmo Canyon)
X : 39 4A 19
Y : C1 78 02

Submarine's coordinates (pink point, near Junon)
X : 12 99 6A
Y : FC 48 42


http://img527.imageshack.us/img527/3114/ff7map20au.png

Cloud's coordinates
X : 2A 80 02
Y : 53 AC E1

Highwind's coordinates
X : 03 87 7D
Y : 80 44 AF

Yes, Cloud and Highwind are at the same place this time, but the coordinates are completely different :x
 
If you get 2 DWords which describe Object coordinates on the world map, you have to decode them first:
First DWord:
Code: [Select]
Code:
[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:
Code: [Select]
Code:
[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             |
Coordinates:
0 <= X < 0x48000  -  cannot be negative or greater than 0x47FFF
0 <= Y < 0x38000
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.

Object's ID:
Determines what kind of object are we dealing with. Few IDs I've seen:
Code: [Select]
Code:
0x00 - Party0x03 - Highwind0x05 - Tiny Bronco0x06 - Buggy0x0D - Submarine0x13 - Chocobo0x1D - Weapon

Example:
We have these RAW bytes from SaveGame (offset 0xF5C):Code: [Select]
Code:
ED AE 03 40 30 1E B2 03
Our DWords are:Code: [Select]
Code:
1st: 0x4003AEED2nd: 0x03B21E30
Unpacking:Code: [Select]
Code:
X = 1st & 0x7FFFFY = 2nd & 0x3FFFFZ = 2nd >> 0x12 (shift arithmetic right)ID = (1st >> 0x13)&0x1FDIR = (1st >> 0x14)&0x0FF0
Results:Code: [Select]
Code:
X = 0x03AEEDY = 0x021E30Z = 0x00ECID = 0x00 (Party)DIR = 0x0400

This will hopefully throw some light on this part of SaveGame. Good luck with discoveries.

dziugo
 
Wow, just... wow :D This is really great, dziugo.
(I wish I had enough time to learn Assembler and familiarize myself with the disassembled code -_- )

As for discoveries, there's nothing really interesting so far. The directory where I stored everything related to the savemap was deleted and I had to code again the checksum and the binary diff tools. That and the fact my new job starts the following Wednesday, free time will quickly disappear...

Anyway, the new bits discovered are the following :

Offset 0x0C86
Mask 0x04 applied when you first reach the bottom of the first reactor and there's a camera effect to show the place.

Offset 0x0BA4 (Plot Progression Variable)
Unlike the other items, Restore must be gotten in order to continue the story. Therefore, the PPV is incremented (0E -> 0F) to indicate the Materia has been picked up.


I have to take a look at another savegame where I've seen the word 'Female' (26 45 4D 41 4C 45, in 'FF Text' format) stored. It's apparently related to the only Chocobo I have, and it seems nothing like this has been reported in the savemap.
 
I have to take a look at another savegame where I've seen the word 'Female' (26 45 4D 41 4C 45, in 'FF Text' format) stored. It's apparently related to the only Chocobo I have, and it seems nothing like this has been reported in the savemap.
Oh, yes, I'm quite interested in this.  :D
I think it should be referred to the sex of the Chocobos... I've checked another save and there is the word "male" on it, not Female...

Besides, I don't find this word anywhere in the game's files, nor I found infos about it.
 
It's pretty much decoded. See wiki.

dziugo
Mh, I had already checked it without success... but I can't still find infos about this "damn sex" (lol). :o
Could you please tell me more or linking the right section of the wiki? ;)
Thanks in advance.
 
Could you please tell me more or linking the right section of the wiki?
From wiki:Code: [Select]
Code:
Table 3: Chocobo Record  Offset: 0xE  Length: 1 byte  Description:  1: female
dziugo
 
Yeah, there's this one byte.
But what I (and Sephiroth 1311 as well) noticed is a FFText field containing the sex word "male/female". I find it strange to find it stored twice and in different formats. I haven't had time to work on it since the last time, but I'll try to this weekend.
 
Oh... <goes to do some debugging work> It looks like a string which is used to describe the sex of the chocobo which is currently on the screen (if that info is actually displayed). Yeah... I'm pretty sure it's always updated before reading from it.

dziugo
 
It looks like a string which is used to describe the sex of the chocobo which is currently on the screen (if that info is actually displayed).

That was exactly the guess I had. And this information is indeed displayed on several screens (when you feed a Chocobo, select which one to use on the world map, etc).
 
Status
Not open for further replies.
Back
Top