The first thing I looked for was guild levels. Since the game likes to pack bits and nibbles, as observed with the chaos gems, it is likely that the Guild level structure is the same in ram as well.
In the savefile, it is a sequence of nibles BS LT R0 where B=Blacksmith S=Signimancy L=Library T=Tactics, and R=recon
So if you have the following levels(notice the order is different then what is in the menu)
Blacksmith 2
Signimancy 3
Library 8
Tactics 5
Recon 1
Which is represented as this sequence of bytes at offset 0x079C
23 85 10
Change it to AA AA A0 to have level 10 for all 5 guilds.
----
The other thing I checked was chaos gems and talent, it seemd that chaos was a little endian word containing the bytes at offset 0x14 & 0x15 in the save file, and talent was a little endian double word formed from the bytes 0xC to 0xF
But they didn't seem to work, I'll probably look at this a bit more later.
---
Update:
Now that I am trying to solve talents a different way, I can add some notes about that.
The characters in the save file are seperated by an offset of 0x42C bytes and some bits in this order 'Galil','Renzo','Gene','Tiggy','Azura','Rachel','Vivian','Ignace','Barbarosa','Shiki','Matilda','Robbins'
Talents are done by the bit, in this order of categories 'Unarm','Sword','GSword','Axe','Spear','Staff','Bow','Shield','Cannon', A flag that enables the Spell talent, then "Spell", "Sigil", "Ability", "Move".
The talents have an interleave I am unfamiliar with. For example for Galil, Unarm talent starts at bit 2 of byte 0xE51 runs to bit 7 then does 0xE50 bit 0, then 0xE51 bit 1. So when going down the list of talents you increment the bits up to 7, then when you wrap around to bit 0 the address is previous byte, then bit 1-7 is on the next byte, and repeat.
Then for Renzo it starts at 1313 bit 4 with Talent: Novice and continues in this pattern of address and bits, this time bits 0-2 are the previous address, 3-7 are the next address.
1313: Bit 7 - Talent Heroic
1312: Bit 0 - Talent Legend
1312: Bit 1 - Attack Com
1312: Bit 2 - Guard Com
1314: Bit 3 - Support Com
I generated the talents table with python code, here is an excerpt which shows how to calculate the starting address/bit and interleave for each character
Code: Select all
chars = ['Galil','Renzo','Gene','Tiggy','Azura','Rachel','Vivian','Ignace','Barbarosa','Shiki','Matilda','Robbins']
starting_address = 0xE51
starting_bit = [2,4,6,0,2,4,6,0,2,4,6,0]
starting_byte = [0,0,0,-1,-1,-1,-1,-2,-2,-2,-2,-3]
char_offset = 0x4C2
#talents are in the same sequence as in the cheat table if you need full list in order
talents = ['talent1','talent2','etc']
def bit_addr_i():
global bit
global x
global addr
bit += 1
if bit > 7: bit = 0
if bit == 0: addr -= 1
if x % 4 == 0:
if bit == 1: addr += 2
elif x % 4 == 1:
if bit == 3: addr += 2
elif x % 4 == 2:
if bit == 5: addr += 2
elif x % 4 == 3:
if bit == 7: addr += 2
return(bit)
for x, c in enumerate(chars):
bit = starting_bit[x]
#calc the starting address for the character's talent table
addr = starting_address + char_offset*x + starting_byte[x]
#iterate the talent sequence with their addr and bit location for the current character.
for talent in talents:
print_talent(talent,addr,bit)
bit_addr_i()