Immortal_no1 said:
how_do_i_do_that, some good investigative work there, i've had a look over the gamesave for 006 and can see that the filesystem partitions change around and i can see the gamedata move too, i beleive that the whole data may 'shift' as part of a flash-wear protection so the EEPROM doesn't get bad blocks as easily. There must be a lookup table somewhere which points to the location, i've found something that looks promising but don't get your hopes up. 3DS Save De/Encrypter v1.5 may be a little while longer, i'm adding in a 'VERY experimental' search function (more to be revealed at a later date).
I can release a 1.5.1 version which has some CRC (Checksum) information, at this point though it's nice to have but you can't really use it for anything. You may be able to use it to get Offsets to various locations of the Save information, but that'll come in time.
I'm working on an internal game save Export/Import feature to do exactly what it says to in effect replace the contents of the save with another from another country and re CRC it to see if i can get a US gam esave working on a UK cartridge, Slow progress on that, i need to find the starting offsets for the files, i think i have a way of getting there but once again it's slow progress.
CollosalPokemon can you upload the original Encrypted save you got your screenshot from and i'll have a look over it.
Sure, I don't think having it will do you any better with the save De/Encryptor though
I just thought it looked cool.
http://www.mediafire.com/?jbsev2a8e94m4f0
EDIT: I dumped some databases and typeinfos for Legend Of Zelda OoT (US) using IDA Pro 6.1. I don't think they'll be useful but just in case:
static main(void)
{
// set 'loading idc file' mode
SetCharPrm(INF_GENFLAGS, INFFL_LOADIDC|GetCharPrm(INF_GENFLAGS));
GenInfo(); // various settings
Segments(); // segmentation
Enums(); // enumerations
Structures(); // structure types
Patches(); // manual patches
SegRegs(); // segment register values
Bytes(); // individual bytes (code,data)
Functions(); // function definitions
// clear 'loading idc file' mode
SetCharPrm(INF_GENFLAGS, ~INFFL_LOADIDC&GetCharPrm(INF_GENFLAGS));
}
//------------------------------------------------------------------------
// General information
static GenInfo(void) {
DeleteAll(); // purge database
SetPrcsr("metapc");
SetCharPrm(INF_COMPILER, 0);
StringStp(0xA);
Tabs(1);
Comments(0);
Voids(0);
XrefShow(2);
AutoShow(1);
Indent(16);
CmtIndent(40);
TailDepth(0x10);
}
//------------------------------------------------------------------------
// Information about segmentation
static Segments(void) {
SetSelector(0X1,0);
;
SegCreate(0,0X20000,0X1,0,1,2);
SegRename(0,"seg000");
SegClass (0,"CODE");
SegDefReg(0x0,"es",0x0);
SegDefReg(0x0,"ss",0x0);
SegDefReg(0x0,"ds",0x0);
SegDefReg(0x0,"fs",0x0);
SegDefReg(0x0,"gs",0x0);
SetSegmentType(0,2);
LowVoids(0x20);
HighVoids(0x20000);
}
//------------------------------------------------------------------------
// Information about enum types
static Enums(void) {
auto id;
BeginTypeUpdating(UTP_ENUM);
}
//------------------------------------------------------------------------
// Information about structure types
static Structures(void) {
auto id;
BeginTypeUpdating(UTP_STRUCT);}
//------------------------------------------------------------------------
// Information about bytes
static Bytes_0(void) {
auto x;
#define id x
ExtLinA (0, 1, "; Format : Binary file");
ExtLinA (0, 2, "; Base Address: 0000h Range: 0000h - 20000h Loaded length: 20000h");
}
//------------------------------------------------------------------------
// Information about functions
static Functions(void) {
}
//------------------------------------------------------------------------
// Information about segment registers
static SegRegs(void) {
SetRegEx(0,"es",0,3);
SetRegEx(0,"ss",0,3);
SetRegEx(0,"ds",0,3);
SetRegEx(0,"fs",0,3);
SetRegEx(0,"gs",0,3);
}
//------------------------------------------------------------------------
// Information about all patched bytes:
static Patches(void) {
}
//------------------------------------------------------------------------
// Call all byte feature functions:
static Bytes(void) {
Bytes_0();
EndTypeUpdating(UTP_STRUCT);
}
static main(void)
{
Enums(); // enumerations
Structures(); // structure types
LowVoids(0x20);
HighVoids(0x20000);
}
//------------------------------------------------------------------------
// Information about enum types
static Enums(void) {
auto id;
BeginTypeUpdating(UTP_ENUM);
}
//------------------------------------------------------------------------
// Information about structure types
static Structures(void) {
auto id;
BeginTypeUpdating(UTP_STRUCT); EndTypeUpdating(UTP_STRUCT);
}
Again, I don't see these as useful but I figured as long as I had them I might as well show them.