#include #include #include #include #ifdef _WIN32 #include #include #include typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #define mkdir(a, b) _mkdir(a) #define chdir _chdir #else #include #include #include #endif #define be16(x) ((((x)>>8)&0xFF)|((((x)<<8))&0xFF00)) #define be32(x) (((x)<<24)|(((x)>>8)&0xFF00)|(((x)<<8)&0xFF0000)|((x)>>24)) #define mem_free(x) {if (x != NULL){free(x);x=NULL;}} int main() { printf("My Pokemon Ranch Exctractor v0.1 by suloku\n"); printf("------------------------------------------\n"); printf("\tBuilt: " __TIME__ " " __DATE__ "\n"); printf("\tCopyright 2014 suloku>\n" "\tLicensed under the terms of the GNU GPL, version 2\n" "\thttp://www.gnu.org/licenses/old-licenses/gpl-2.0.txt\n\n\n"); FILE *file; char pokemon[136]; //Open file file = fopen("savedata.bin", "rb"); if (!file) { printf("Unable to open savedata.bin\n\n"); printf("Usage: place savedata.bin file in the same folder as the executable.\n"); printf("Use Savegame Manager GX (or alternative) to extract the savegame from the wii. Savedata.bin will be in the savegame folder, amongst other files.\n"); printf("\n\nPress enter to exit."); getchar(); return 0; } //Get file length fseek(file, 0, SEEK_END); fseek(file, 0x22AC, SEEK_SET); uint32_t miientries; fread(&miientries, 4, 1, file); //printf ("Miientries %x\n", be32(miientries)); printf ("There are %4d Miis registered.\n", be32(miientries)); fseek(file, 0x22AC+(40*be32(miientries))+4+4, SEEK_SET); uint32_t miilinkentries; fread(&miilinkentries, 4, 1, file); //printf ("Miientries %x\n", be32(miilinkentries)); printf ("There are %4d trainers with stored pokemon.\n", be32(miilinkentries)); fseek(file, 0x22AC+(40*be32(miientries))+4+4+(44*be32(miilinkentries))+4+4, SEEK_SET); uint32_t pokemonentries; fread(&pokemonentries, 4, 1, file); //printf ("Miientries %x\n", be32(pokemonentries)); printf ("There are %4d pokemon stored (includes Hayley's pokemon).\n", be32(pokemonentries)); int sorting = 0; while(1){ printf ("\nDo you want to sort by trainer? (y/n):\n"); char inputbuff[32]; gets(inputbuff); if (!strcmp (inputbuff, "y")){ printf("\nPokemon will be sorted by trainer ID.\n"); sorting = 1; break; }else if (!strcmp (inputbuff, "n")){ printf("\nPokemon will be sorted by order in which they where deposited at the ranch.\n"); sorting = 0; break; } printf("Wrong input. Please type only 'y' or 'n'.\n"); } printf("\n\tExtracting pokemon..."); FILE *pokefile; int pokecount = 1; int pokecount_hayley = 1; char pkmname[128]; uint8_t poke_type;// 01 trainer, 04 hayley, 05 traded uint8_t tradeable;// 02 is tradeable, normal 00 uint16_t tid; uint16_t sid; uint32_t name1; uint32_t name2; uint32_t name3; uint32_t name4; mkdir("Extracted", 0700); chdir("Extracted"); int i; for (i=0;i