[FE8] Save/Suspend Expansion Project

Okay, so since we time warped a week and a half back, I’ll just repost my plans quickly:

SAVE NAME       SAVE OFFSET     SAVE LENGTH     DEFAULT LENGTH  EXPANSION SIZE
meta            0x00            0xD4            0xD4            0x0
suspend         0xD4            0x2E78          0x1F78          0xF00
save1           0x2F4C          0x1344          0xDC8           0x57C
save2           0x4290          0x1344          0xDC8           0x57C
save3           0x55D4          0x1344          0xDC8           0x57C
empty           0x6918          0x04            0x0             0x04
link_arena      0x691C          0xAE4           0xAE4           0x0
other           0x7400          ???             ???             0x0

Notes:
80A3064 is a function that gets the offset of a section.

Allocation within a suspend save:

NAME            OFFSET          LENGTH          NOTES
???             0x0             0x4C            Saves from location in *0x3000014 = 0x0202BCF0
???             0x4C            0x38            Saves directly from 0x203A958
player_units    0x84            0xA5C           Copies units first to 0x2020188(working space), then saves that. 51 units' space
???             0xAE0           0x18            ???
???             0xAF8           0x1C            Not saved to?
all_other_units 0xB14           0xC30           Room for 60 units (50 enemies, 10 other)
trap_data       0x1744          0x200           Copied directly from 0x0203A614
???             0x1944          0xB0            ?
???             0x19F4          0x460           B/W/L data? Copied directly from 0x0203E894?
???             0x1E54          0xC0            Copied directly from 0x0203ECF4?
???             0x1F14          0x10
???             0x1F24          0x19            Might not go up to the next section exactly. Investigate routine at 0x80A3150.
???             0x1F3D          0x7             Not word aligned!?
???             0x1F44          0x24
???             0x1F68          0xC
???             0x1F74          0x4
expanded_data   0x1F78          0xF00

Allocation within a save file:

NAME            OFFSET          LENGTH          NOTES
3 Likes

[Whatever I said when I posted here previously]

2 Likes

“crazycolorz irl” (or something to that effect–it was just a caption for this zomg 2awsum completely fitting image)

http://tattooos.org/wp-content/uploads/parser/Magic-Wizard-And-Dragon-Tattoo-Flash-1.jpg

2 Likes

Updated documentation within the suspend data save. This accounts for all sections, though I haven’t yet documented what each section is saving.

First up: Saving the whole unit struct. Should be fairly easy to do; look forward to a tech demo probably sometime this week.

Benefits?

  • Status up to 127.
  • Item Uses up to 255.
  • Levels up to 255.
  • Basically, any limit in the RAM is the limit in the save.

With the current plan, I can fit this much, with 10 additional Other units (total of 20), and still have 8 bytes for each unit, with some space left over.

Current Suspend Plan:

NAME            OFFSET          LENGTH          NOTES
???             0x0             0x4C            Saves from location in *0x3000014 = 0x0202BCF0
???             0x4C            0x38            Saves directly from 0x203A958
player_units    0x84            0xE58           Change to copy all 0x48 bytes of the unit struct. 
???             0xEDC           0x18            ???
???             0xEF4           0x1C            Not saved to?
enemy_units     0xF10           0xE10           Separate from other units for simplicity
other_units     0x1D20          0x5A0           Room for 20(+10) units
trap_data       0x22C0          0x200           Copied directly from 0x0203A614
???             0x24C0          0xB0            ?
???             0x          0x460           B/W/L data? Copied directly from 0x0203E894?
???             0x          0xC0            Copied directly from 0x0203ECF4?
???             0x          0x10
???             0x          0x19            Might not go up to the next section exactly. Investigate routine at 0x80A3150.
???             0x          0x7             Not word aligned!?
???             0x          0x24
???             0x          0xC
???             0x          0x4
expanded_data   0x          0x474           Up to hackers to use however. 0xF00 - 0x14/unit * 111 units - 10 new units*0x48/unit. For the record, is still enough for 8 bytes per unit (at least, the ones saved to suspend data), while still having 0xAC left over.
2 Likes

Yeah.

0203E894 : Eirika’s loss count (1 byte)
0203E89F : Eirika’s battles and wins are combined into 3 bytes. Lowest 10 bits = wins. Next 12 bits = battles. Highest 2 bits unused.
Example: enter E7 9F 0F (0x0F9FE7) for 999 battles and 999 wins.
Then 0203E8A4 is Seth’s loss count, 0203E8AF is his battles/wins and so on…
The game stops increasing battles at 4000, wins at 1000 and losses at 200.

Yeah I know it is based on previous notes. The ? just indicated I hadn’t directly confirmed it myself.

Oh. I hadn’t seen any B/W/L documentation before, that was from my own notes. Uh, never mind then.

@Brendor mentioned it to me when I was previously documenting save data.

Considering making this my FEE3 project.
Some things /easily/ possible once this is complete:

  • True str/mag split
  • Learnable skills
  • Debuffs
  • Big stats
  • Really, anything that was previously limited by suspending the game.