diff --git a/include/flash_mem.h b/include/flash_mem.h index ef69916..dfb8d67 100644 --- a/include/flash_mem.h +++ b/include/flash_mem.h @@ -4,10 +4,10 @@ #include "pokemon.h" -#define MEM_CRAM 0x0E000000 //!< Cart RAM +#define MEM_CRAM 0x0E000000 // Cart RAM -#define SAVE_A_OFFSET 0x00000000 //!< Offset of Game Save A -#define SAVE_B_OFFSET 0x0000E000 //!< Offset of Game Save B +#define SAVE_A_OFFSET 0x00000000 // Offset of Game Save A +#define SAVE_B_OFFSET 0x0000E000 // Offset of Game Save B #define SECTION_ID_OFFSET 0x00000FF4 #define SAVE_INDEX_OFFSET 0x00000FFC @@ -15,6 +15,7 @@ extern vu32 newest_save_offset; extern vu32 memory_section_array[14]; extern char mem_name; +extern u8 global_memory_buffer[0x1000]; void initalize_memory_locations(); bool insert_pokemon(Pokemon party_array[], int num); diff --git a/include/script.h b/include/script.h index 2b30761..f91a639 100644 --- a/include/script.h +++ b/include/script.h @@ -12,6 +12,6 @@ #define EVENT_SCRIPT_DATA_OFFSET_FRLG 0x079C #define EVENT_SCRIPT_DATA_OFFSET_EMER 0x08A8 -void inject_script(); +void inject_mystery(); #endif \ No newline at end of file diff --git a/source/flash_mem.cpp b/source/flash_mem.cpp index 1bf6271..c59ea59 100644 --- a/source/flash_mem.cpp +++ b/source/flash_mem.cpp @@ -8,7 +8,7 @@ vu32 newest_save_offset = MEM_CRAM + SAVE_A_OFFSET; vu32 memory_section_array[14] = {}; -u8 memory_buffer[1]; +u8 global_memory_buffer[0x1000]; char mem_name = 'A'; @@ -53,22 +53,22 @@ bool insert_pokemon(Pokemon party[], int total_num){ int pkmn_byte = 0; bool write_pkmn = false; - flash_read(memory_section_array[mem_section], &memory_buffer[0], 0x1000); + flash_read(memory_section_array[mem_section], &global_memory_buffer[0], 0x1000); while(pkmn_num < total_num){ // Checks if we are currently beyond PC box information bounds. If so, return false if ((mem_section == 13) && (byte_location >= 1860)){ update_memory_buffer_checksum(); - flash_write(memory_section_array[mem_section], &memory_buffer[0], 0x1000); + flash_write(memory_section_array[mem_section], &global_memory_buffer[0], 0x1000); return false; } // Determines if there is space to write a Pokemon, or if a Pokemon is currently being written - write_pkmn = (write_pkmn | (memory_buffer[byte_location] == 0x00)); + write_pkmn = (write_pkmn | (global_memory_buffer[byte_location] == 0x00)); // Writes a byte of the current Pokemon to the current spot if (write_pkmn){ - memory_buffer[byte_location] = party[pkmn_num].get_full_gen_3_array()[pkmn_byte]; + global_memory_buffer[byte_location] = party[pkmn_num].get_full_gen_3_array()[pkmn_byte]; byte_location++; pkmn_byte++; // Determines if the whole Pokemon has been written @@ -84,14 +84,14 @@ bool insert_pokemon(Pokemon party[], int total_num){ // we move to the next memory buffer and save the current one if (byte_location >= 3968){ update_memory_buffer_checksum(); - flash_write(memory_section_array[mem_section], &memory_buffer[0], 0x1000); + flash_write(memory_section_array[mem_section], &global_memory_buffer[0], 0x1000); mem_section++; - flash_read(memory_section_array[mem_section], &memory_buffer[0], 0x1000); + flash_read(memory_section_array[mem_section], &global_memory_buffer[0], 0x1000); byte_location = byte_location % 3968; } } update_memory_buffer_checksum(); - flash_write(memory_section_array[mem_section], &memory_buffer[0], 0x1000); + flash_write(memory_section_array[mem_section], &global_memory_buffer[0], 0x1000); return true; } @@ -100,15 +100,15 @@ void update_memory_buffer_checksum(){ vu32 checksum = 0x00; vu32 num_of_bytes = 3968; - if (memory_buffer[0x0FF4] == 13){ + if (global_memory_buffer[0x0FF4] == 13){ num_of_bytes = 2000; } for (unsigned int i = 0; i < num_of_bytes / 4; i++){ - checksum += (memory_buffer[(4*i) + 3] << 24) | (memory_buffer[(4*i) + 2] << 16) | (memory_buffer[(4*i) + 1] << 8) | (memory_buffer[(4*i) + 0] << 0); + checksum += (global_memory_buffer[(4*i) + 3] << 24) | (global_memory_buffer[(4*i) + 2] << 16) | (global_memory_buffer[(4*i) + 1] << 8) | (global_memory_buffer[(4*i) + 0] << 0); } vu16 small_checksum = ((checksum & 0xFFFF0000) >> 16) + (checksum & 0x0000FFFF); - memory_buffer[0x0FF6] = small_checksum & 0x00FF; - memory_buffer[0x0FF7] = (small_checksum & 0xFF00) >> 8; + global_memory_buffer[0x0FF6] = small_checksum & 0x00FF; + global_memory_buffer[0x0FF7] = (small_checksum & 0xFF00) >> 8; } \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp index f030466..6dec5a5 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -4,7 +4,7 @@ #include #include "debug.h" -//#include "flash_mem.h" +#include "flash_mem.h" #include "gba_flash.h" #include "interrupt.h" #include "gb_link.h" @@ -113,8 +113,7 @@ int main(void) irq_enable(II_VBLANK); flash_init(FLASH_SIZE_128KB); - //initalize_memory_locations(); - load_save_data(); + initalize_memory_locations(); rand_set_seed(0x12162001); init_text_engine(); add_script_party_var(party); @@ -149,6 +148,7 @@ int main(void) Button credits_btn = Button(btn_c_l, btn_c_r, 256, 288); pokedex_init(); + load_save_data(); main_menu_init(transfer_btn, pokedex_btn, credits_btn); @@ -209,6 +209,8 @@ int main(void) // Set up blend to fade to white/black + inject_mystery(); + // MAIN LOOP while (1) { diff --git a/source/save_data_manager.cpp b/source/save_data_manager.cpp index 007a487..c4443ff 100644 --- a/source/save_data_manager.cpp +++ b/source/save_data_manager.cpp @@ -1,24 +1,24 @@ #include #include "save_data_manager.h" #include "gba_flash.h" - -u8 save_data_buffer[0x1000]; - +#include "flash_mem.h" void load_save_data(){ - flash_read(HALL_OF_FAME + 0x1000, &save_data_buffer[0], 0x1000); + flash_read(HALL_OF_FAME + 0x1000, &global_memory_buffer[0], 0x1000); } void write_save_data(){ - flash_write(HALL_OF_FAME + 0x1000, &save_data_buffer[0], 0x1000); + flash_write(HALL_OF_FAME + 0x1000, &global_memory_buffer[0], 0x1000); } bool is_caught(int dex_num){ - return (((save_data_buffer[HOF_SECTION + (dex_num / 8)]) >> dex_num % 8) & 1); + return (((global_memory_buffer[HOF_SECTION + (dex_num / 8)]) >> dex_num % 8) & 1); } void set_caught(int dex_num){ - save_data_buffer[HOF_SECTION + (dex_num / 8)] = save_data_buffer[HOF_SECTION + (dex_num / 8)] | (1 << (dex_num % 8)); + load_save_data(); + global_memory_buffer[HOF_SECTION + (dex_num / 8)] = global_memory_buffer[HOF_SECTION + (dex_num / 8)] | (1 << (dex_num % 8)); + write_save_data(); } /* Data map: diff --git a/source/script.cpp b/source/script.cpp index e12f54e..b561526 100644 --- a/source/script.cpp +++ b/source/script.cpp @@ -1,14 +1,35 @@ #include #include "script.h" +#include "flash_mem.h" +#include "gba_flash.h" static u32 wonder_card[0x14E] = { -0xFC, 0x85, 0x00, 0x00, 0xE8, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xCF, 0xCC, 0xC9, 0xCC, 0xBB, 0xCE, 0xC3, 0xBD, 0xC5, 0xBF, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xEC, 0xD7, 0xDC, 0xD5, 0xE2, 0xDB, 0xD9, 0x00, 0xBD, 0xD5, 0xE6, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xE3, 0x00, 0xE8, 0xE3, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xE7, 0xD9, 0xD7, 0xE3, 0xE2, 0xD8, 0x00, 0xDA, 0xE0, 0xE3, 0xE3, 0xE6, 0x00, 0xE3, 0xDA, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xCA, 0xC9, 0xC5, 0x1B, 0xC7, 0xC9, 0xC8, 0x00, 0x00, 0x00, 0xBD, 0xBF, 0xC8, 0xCE, 0xBF, 0xCC, 0x00, 0xD5, 0xE2, 0xD8, 0x00, 0xE1, 0xD9, 0xD9, 0xE8, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xD8, 0xD9, 0xE0, 0xDD, 0xEA, 0xD9, 0xE6, 0xED, 0x00, 0xE4, 0xD9, 0xE6, 0xE7, 0xE3, 0xE2, 0x00, 0xDD, 0xE2, 0x00, 0x00, 0xDB, 0xE6, 0xD9, 0xD9, 0xE2, 0xAD, 0x00, 0xCC, 0xD9, 0xD7, 0xD9, 0xDD, 0xEA, 0xD9, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xBB, 0xCF, 0xCC, 0xC9, 0xCC, 0xBB, 0xCE, 0xC3, 0xBD, 0xC5, 0xBF, 0xCE, 0x00, 0xD5, 0xE2, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xDC, 0xD9, 0xE2, 0x00, 0xE7, 0xD5, 0xEA, 0xD9, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xDB, 0xD5, 0xE1, 0xD9, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xE3, 0x00, 0xE2, 0xE3, 0xE8, 0x00, 0xE8, 0xE3, 0xE7, 0xE7, 0x00, 0xE8, 0xDC, 0xDD, 0xE7, 0x00, 0xBF, 0xEC, 0xD7, 0xDC, 0xD5, 0xE2, 0xDB, 0xD9, 0x00, 0xBD, 0xD5, 0xE6, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD9, 0xDA, 0xE3, 0xE6, 0xD9, 0x00, 0xE6, 0xD9, 0xD7, 0xD9, 0xDD, 0xEA, 0xDD, 0xE2, 0xDB, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xBB, 0xCF, 0xCC, 0xC9, 0xCC, 0xBB, 0xCE, 0xC3, 0xBD, 0xC5, 0xBF, 0xCE, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00 -}; + 0xFC, 0x85, 0x00, 0x00, 0xE8, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xCF, 0xCC, 0xC9, 0xCC, 0xBB, 0xCE, 0xC3, 0xBD, 0xC5, 0xBF, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xEC, 0xD7, 0xDC, 0xD5, 0xE2, 0xDB, 0xD9, 0x00, 0xBD, 0xD5, 0xE6, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xE3, 0x00, 0xE8, 0xE3, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xE7, 0xD9, 0xD7, 0xE3, 0xE2, 0xD8, 0x00, 0xDA, 0xE0, 0xE3, 0xE3, 0xE6, 0x00, 0xE3, 0xDA, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xCA, 0xC9, 0xC5, 0x1B, 0xC7, 0xC9, 0xC8, 0x00, 0x00, 0x00, 0xBD, 0xBF, 0xC8, 0xCE, 0xBF, 0xCC, 0x00, 0xD5, 0xE2, 0xD8, 0x00, 0xE1, 0xD9, 0xD9, 0xE8, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xD8, 0xD9, 0xE0, 0xDD, 0xEA, 0xD9, 0xE6, 0xED, 0x00, 0xE4, 0xD9, 0xE6, 0xE7, 0xE3, 0xE2, 0x00, 0xDD, 0xE2, 0x00, 0x00, 0xDB, 0xE6, 0xD9, 0xD9, 0xE2, 0xAD, 0x00, 0xCC, 0xD9, 0xD7, 0xD9, 0xDD, 0xEA, 0xD9, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xBB, 0xCF, 0xCC, 0xC9, 0xCC, 0xBB, 0xCE, 0xC3, 0xBD, 0xC5, 0xBF, 0xCE, 0x00, 0xD5, 0xE2, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xDC, 0xD9, 0xE2, 0x00, 0xE7, 0xD5, 0xEA, 0xD9, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xDB, 0xD5, 0xE1, 0xD9, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xE3, 0x00, 0xE2, 0xE3, 0xE8, 0x00, 0xE8, 0xE3, 0xE7, 0xE7, 0x00, 0xE8, 0xDC, 0xDD, 0xE7, 0x00, 0xBF, 0xEC, 0xD7, 0xDC, 0xD5, 0xE2, 0xDB, 0xD9, 0x00, 0xBD, 0xD5, 0xE6, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD9, 0xDA, 0xE3, 0xE6, 0xD9, 0x00, 0xE6, 0xD9, 0xD7, 0xD9, 0xDD, 0xEA, 0xDD, 0xE2, 0xDB, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xBB, 0xCF, 0xCC, 0xC9, 0xCC, 0xBB, 0xCE, 0xC3, 0xBD, 0xC5, 0xBF, 0xCE, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00}; static u32 script[0x3EC] = { -0xEA, 0xA6, 0x00, 0x00, 0x33, 0xFF, 0xFF, 0xFF, 0xB8, 0x58, 0x02, 0x00, 0x08, 0x6A, 0x5A, 0x2B, 0x3A, 0x01, 0xBB, 0x01, 0xBC, 0x02, 0x00, 0x08, 0x2B, 0xAD, 0x01, 0xBB, 0x01, 0xBC, 0x02, 0x00, 0x08, 0x47, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x01, 0x00, 0xBB, 0x01, 0xBC, 0x02, 0x00, 0x08, 0xBD, 0xC5, 0x02, 0x00, 0x08, 0x66, 0x6D, 0x46, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x00, 0x00, 0xBB, 0x01, 0xB3, 0x02, 0x00, 0x08, 0x1A, 0x00, 0x80, 0x73, 0x01, 0x1A, 0x01, 0x80, 0x01, 0x00, 0x09, 0x00, 0x29, 0xD5, 0x08, 0x29, 0x3A, 0x01, 0xBD, 0x22, 0x03, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0xB3, 0x03, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x86, 0x03, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xCE, 0xDC, 0xD5, 0xE2, 0xDF, 0x00, 0xED, 0xE3, 0xE9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE9, 0xE7, 0xDD, 0xE2, 0xDB, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xBF, 0xCC, 0xD3, 0xFE, 0xC1, 0xC3, 0xC0, 0xCE, 0x00, 0xCD, 0xED, 0xE7, 0xE8, 0xD9, 0xE1, 0xAD, 0xFB, 0xD3, 0xE3, 0xE9, 0x00, 0xE1, 0xE9, 0xE7, 0xE8, 0x00, 0xD6, 0xD9, 0x00, 0xFD, 0x01, 0xAD, 0xFE, 0xCE, 0xDC, 0xD9, 0xE6, 0xD9, 0x00, 0xDD, 0xE7, 0x00, 0xD5, 0x00, 0xE8, 0xDD, 0xD7, 0xDF, 0xD9, 0xE8, 0x00, 0xDC, 0xD9, 0xE6, 0xD9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xED, 0xE3, 0xE9, 0xAD, 0xFF, 0xC3, 0xE8, 0x00, 0xD5, 0xE4, 0xE4, 0xD9, 0xD5, 0xE6, 0xE7, 0x00, 0xE8, 0xE3, 0x00, 0xD6, 0xD9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE9, 0xE7, 0xD9, 0x00, 0xD5, 0xE8, 0x00, 0xE8, 0xDC, 0xD9, 0xFE, 0xC6, 0xC3, 0xC6, 0xD3, 0xBD, 0xC9, 0xD0, 0xBF, 0x00, 0xBD, 0xC3, 0xCE, 0xD3, 0x00, 0xE4, 0xE3, 0xE6, 0xE8, 0xAD, 0xFB, 0xD1, 0xDC, 0xED, 0x00, 0xE2, 0xE3, 0xE8, 0x00, 0xDB, 0xDD, 0xEA, 0xD9, 0x00, 0xDD, 0xE8, 0x00, 0xD5, 0x00, 0xE8, 0xE6, 0xED, 0x00, 0xD5, 0xE2, 0xD8, 0x00, 0xE7, 0xD9, 0xD9, 0x00, 0xEB, 0xDC, 0xD5, 0xE8, 0xFE, 0xDD, 0xE8, 0x00, 0xDD, 0xE7, 0x00, 0xD5, 0xD6, 0xE3, 0xE9, 0xE8, 0xAC, 0xFF, 0xCE, 0xDC, 0xD5, 0xE2, 0xDF, 0x00, 0xED, 0xE3, 0xE9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE9, 0xE7, 0xDD, 0xE2, 0xDB, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xBF, 0xCC, 0xD3, 0xFE, 0xC1, 0xC3, 0xC0, 0xCE, 0x00, 0xCD, 0xED, 0xE7, 0xE8, 0xD9, 0xE1, 0xAD, 0xFF, 0xC9, 0xDC, 0xB8, 0x00, 0xC3, 0xB4, 0xE1, 0x00, 0xE7, 0xE3, 0xE6, 0xE6, 0xED, 0xB8, 0x00, 0xFD, 0x01, 0xAD, 0xFE, 0xD3, 0xE3, 0xE9, 0xE6, 0x00, 0xBC, 0xBB, 0xC1, 0xB4, 0xE7, 0x00, 0xC5, 0xBF, 0xD3, 0x00, 0xC3, 0xCE, 0xBF, 0xC7, 0xCD, 0x00, 0xCA, 0xC9, 0xBD, 0xC5, 0xBF, 0xCE, 0x00, 0xDD, 0xE7, 0x00, 0xDA, 0xE9, 0xE0, 0xE0, 0xAD, 0xFB, 0xCA, 0xE0, 0xD9, 0xD5, 0xE7, 0xD9, 0x00, 0xE7, 0xE8, 0xE3, 0xE6, 0xD9, 0x00, 0xE7, 0xE3, 0xE1, 0xD9, 0xE8, 0xDC, 0xDD, 0xE2, 0xDB, 0x00, 0xE3, 0xE2, 0x00, 0xED, 0xE3, 0xE9, 0xE6, 0x00, 0xCA, 0xBD, 0xB8, 0xFE, 0xE8, 0xDC, 0xD9, 0xE2, 0x00, 0xD7, 0xE3, 0xE1, 0xD9, 0x00, 0xD6, 0xD5, 0xD7, 0xDF, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE8, 0xDC, 0xDD, 0xE7, 0xAD, 0xFF, 0xB8, 0x27, 0x04, 0x00, 0x08, 0x6A, 0x5A, 0x2B, 0x3A, 0x01, 0xBB, 0x01, 0x8B, 0x04, 0x00, 0x08, 0x2B, 0xAD, 0x01, 0xBB, 0x01, 0x8B, 0x04, 0x00, 0x08, 0x47, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x01, 0x00, 0xBB, 0x01, 0x8B, 0x04, 0x00, 0x08, 0xBD, 0x94, 0x04, 0x00, 0x08, 0x66, 0x6D, 0x46, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x00, 0x00, 0xBB, 0x01, 0x82, 0x04, 0x00, 0x08, 0x1A, 0x00, 0x80, 0x73, 0x01, 0x1A, 0x01, 0x80, 0x01, 0x00, 0x09, 0x00, 0x29, 0xD5, 0x08, 0x29, 0x3A, 0x01, 0xBD, 0xED, 0x04, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x6B, 0x05, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x42, 0x05, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xC7, 0xD9, 0xE6, 0xD7, 0xDD, 0x00, 0xD8, 0xB4, 0xE9, 0xE8, 0xDD, 0xE0, 0xDD, 0xE7, 0xD9, 0xE6, 0x00, 0xE0, 0xD9, 0x00, 0xE7, 0xED, 0xE7, 0xE8, 0x1A, 0xE1, 0xD9, 0xFE, 0xBD, 0xBB, 0xBE, 0xBF, 0xBB, 0xCF, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xAD, 0xFB, 0xD0, 0xE3, 0xE9, 0xE7, 0x00, 0xD8, 0xD9, 0xEA, 0xD9, 0xEE, 0x00, 0x1C, 0xE8, 0xE6, 0xD9, 0x00, 0xFD, 0x01, 0xAD, 0xFE, 0xC3, 0xE0, 0x00, 0xED, 0x00, 0xD5, 0x00, 0xE9, 0xE2, 0x00, 0xE8, 0xDD, 0xD7, 0xDF, 0xD9, 0xE8, 0x00, 0xE4, 0xE3, 0xE9, 0xE6, 0x00, 0xEA, 0xE3, 0xE9, 0xE7, 0xAD, 0xFF, 0xC3, 0xE0, 0x00, 0xE4, 0xD9, 0xE9, 0xE8, 0x00, 0x1C, 0xE8, 0xE6, 0xD9, 0x00, 0xE9, 0xE8, 0xDD, 0xE0, 0xDD, 0xE7, 0x1B, 0x00, 0xD5, 0xE9, 0x00, 0xE4, 0xE3, 0xE6, 0xE8, 0x00, 0xD8, 0xD9, 0xFE, 0xC8, 0xBF, 0xC8, 0xCF, 0xBD, 0xCC, 0xC3, 0xCB, 0xCF, 0xBF, 0xAD, 0xFB, 0xBF, 0xE7, 0xE7, 0xD5, 0xED, 0xD9, 0xEE, 0xAE, 0xE0, 0xD9, 0x00, 0xE4, 0xE3, 0xE9, 0xE6, 0x00, 0xEA, 0xE3, 0xDD, 0xE6, 0x00, 0xD8, 0xD9, 0x00, 0xE5, 0xE9, 0xE3, 0xDD, 0x00, 0xFE, 0xDD, 0xE0, 0x00, 0xE7, 0xB4, 0xD5, 0xDB, 0xDD, 0xE8, 0xAD, 0xFF, 0xC7, 0xD9, 0xE6, 0xD7, 0xDD, 0x00, 0xD8, 0xB4, 0xE9, 0xE8, 0xDD, 0xE0, 0xDD, 0xE7, 0xD9, 0xE6, 0x00, 0xE0, 0xD9, 0x00, 0xE7, 0xED, 0xE7, 0xE8, 0x1A, 0xE1, 0xD9, 0xFE, 0xBD, 0xBB, 0xBE, 0xBF, 0xBB, 0xCF, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xAD, 0xFF, 0xC9, 0xDC, 0xB8, 0x00, 0xDE, 0xD9, 0x00, 0xE6, 0xD9, 0xDB, 0xE6, 0xD9, 0xE8, 0xE8, 0xD9, 0x00, 0xFD, 0x01, 0xAD, 0x00, 0xC6, 0xD5, 0x00, 0xCA, 0xC9, 0xBD, 0xC2, 0xBF, 0xFE, 0xC9, 0xBC, 0xC4, 0xAD, 0x00, 0xCC, 0xBB, 0xCC, 0xBF, 0xCD, 0x00, 0xD8, 0xE9, 0x00, 0xCD, 0xBB, 0xBD, 0x00, 0xD9, 0xE7, 0xE8, 0x00, 0xE4, 0xE0, 0xD9, 0xDD, 0xE2, 0xD9, 0xAD, 0xFB, 0xC0, 0xD5, 0xDD, 0xE8, 0xD9, 0xE7, 0x00, 0xE0, 0xD9, 0x00, 0xE8, 0xE6, 0xDD, 0x00, 0xD8, 0xD5, 0xE2, 0xE7, 0x00, 0xEA, 0xE3, 0xE8, 0xE6, 0xD9, 0x00, 0xCD, 0xBB, 0xBD, 0x00, 0xD9, 0xE8, 0xFE, 0xE6, 0xD9, 0xEA, 0xD9, 0xE2, 0xD9, 0xEE, 0x00, 0xE4, 0xE0, 0xE9, 0xE7, 0x00, 0xE8, 0xD5, 0xE6, 0xD8, 0xAD, 0xFF, 0xB8, 0xD9, 0x05, 0x00, 0x08, 0x6A, 0x5A, 0x2B, 0x3A, 0x01, 0xBB, 0x01, 0x3D, 0x06, 0x00, 0x08, 0x2B, 0xAD, 0x01, 0xBB, 0x01, 0x3D, 0x06, 0x00, 0x08, 0x47, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x01, 0x00, 0xBB, 0x01, 0x3D, 0x06, 0x00, 0x08, 0xBD, 0x46, 0x06, 0x00, 0x08, 0x66, 0x6D, 0x46, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x00, 0x00, 0xBB, 0x01, 0x34, 0x06, 0x00, 0x08, 0x1A, 0x00, 0x80, 0x73, 0x01, 0x1A, 0x01, 0x80, 0x01, 0x00, 0x09, 0x00, 0x29, 0xD5, 0x08, 0x29, 0x3A, 0x01, 0xBD, 0xA9, 0x06, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x3A, 0x07, 0x00, 0x08, 0x66, 0x6D, 0x00 -}; + 0xEA, 0xA6, 0x00, 0x00, 0x33, 0xFF, 0xFF, 0xFF, 0xB8, 0x58, 0x02, 0x00, 0x08, 0x6A, 0x5A, 0x2B, 0x3A, 0x01, 0xBB, 0x01, 0xBC, 0x02, 0x00, 0x08, 0x2B, 0xAD, 0x01, 0xBB, 0x01, 0xBC, 0x02, 0x00, 0x08, 0x47, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x01, 0x00, 0xBB, 0x01, 0xBC, 0x02, 0x00, 0x08, 0xBD, 0xC5, 0x02, 0x00, 0x08, 0x66, 0x6D, 0x46, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x00, 0x00, 0xBB, 0x01, 0xB3, 0x02, 0x00, 0x08, 0x1A, 0x00, 0x80, 0x73, 0x01, 0x1A, 0x01, 0x80, 0x01, 0x00, 0x09, 0x00, 0x29, 0xD5, 0x08, 0x29, 0x3A, 0x01, 0xBD, 0x22, 0x03, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0xB3, 0x03, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x86, 0x03, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xCE, 0xDC, 0xD5, 0xE2, 0xDF, 0x00, 0xED, 0xE3, 0xE9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE9, 0xE7, 0xDD, 0xE2, 0xDB, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xBF, 0xCC, 0xD3, 0xFE, 0xC1, 0xC3, 0xC0, 0xCE, 0x00, 0xCD, 0xED, 0xE7, 0xE8, 0xD9, 0xE1, 0xAD, 0xFB, 0xD3, 0xE3, 0xE9, 0x00, 0xE1, 0xE9, 0xE7, 0xE8, 0x00, 0xD6, 0xD9, 0x00, 0xFD, 0x01, 0xAD, 0xFE, 0xCE, 0xDC, 0xD9, 0xE6, 0xD9, 0x00, 0xDD, 0xE7, 0x00, 0xD5, 0x00, 0xE8, 0xDD, 0xD7, 0xDF, 0xD9, 0xE8, 0x00, 0xDC, 0xD9, 0xE6, 0xD9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xED, 0xE3, 0xE9, 0xAD, 0xFF, 0xC3, 0xE8, 0x00, 0xD5, 0xE4, 0xE4, 0xD9, 0xD5, 0xE6, 0xE7, 0x00, 0xE8, 0xE3, 0x00, 0xD6, 0xD9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE9, 0xE7, 0xD9, 0x00, 0xD5, 0xE8, 0x00, 0xE8, 0xDC, 0xD9, 0xFE, 0xC6, 0xC3, 0xC6, 0xD3, 0xBD, 0xC9, 0xD0, 0xBF, 0x00, 0xBD, 0xC3, 0xCE, 0xD3, 0x00, 0xE4, 0xE3, 0xE6, 0xE8, 0xAD, 0xFB, 0xD1, 0xDC, 0xED, 0x00, 0xE2, 0xE3, 0xE8, 0x00, 0xDB, 0xDD, 0xEA, 0xD9, 0x00, 0xDD, 0xE8, 0x00, 0xD5, 0x00, 0xE8, 0xE6, 0xED, 0x00, 0xD5, 0xE2, 0xD8, 0x00, 0xE7, 0xD9, 0xD9, 0x00, 0xEB, 0xDC, 0xD5, 0xE8, 0xFE, 0xDD, 0xE8, 0x00, 0xDD, 0xE7, 0x00, 0xD5, 0xD6, 0xE3, 0xE9, 0xE8, 0xAC, 0xFF, 0xCE, 0xDC, 0xD5, 0xE2, 0xDF, 0x00, 0xED, 0xE3, 0xE9, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE9, 0xE7, 0xDD, 0xE2, 0xDB, 0x00, 0xE8, 0xDC, 0xD9, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xBF, 0xCC, 0xD3, 0xFE, 0xC1, 0xC3, 0xC0, 0xCE, 0x00, 0xCD, 0xED, 0xE7, 0xE8, 0xD9, 0xE1, 0xAD, 0xFF, 0xC9, 0xDC, 0xB8, 0x00, 0xC3, 0xB4, 0xE1, 0x00, 0xE7, 0xE3, 0xE6, 0xE6, 0xED, 0xB8, 0x00, 0xFD, 0x01, 0xAD, 0xFE, 0xD3, 0xE3, 0xE9, 0xE6, 0x00, 0xBC, 0xBB, 0xC1, 0xB4, 0xE7, 0x00, 0xC5, 0xBF, 0xD3, 0x00, 0xC3, 0xCE, 0xBF, 0xC7, 0xCD, 0x00, 0xCA, 0xC9, 0xBD, 0xC5, 0xBF, 0xCE, 0x00, 0xDD, 0xE7, 0x00, 0xDA, 0xE9, 0xE0, 0xE0, 0xAD, 0xFB, 0xCA, 0xE0, 0xD9, 0xD5, 0xE7, 0xD9, 0x00, 0xE7, 0xE8, 0xE3, 0xE6, 0xD9, 0x00, 0xE7, 0xE3, 0xE1, 0xD9, 0xE8, 0xDC, 0xDD, 0xE2, 0xDB, 0x00, 0xE3, 0xE2, 0x00, 0xED, 0xE3, 0xE9, 0xE6, 0x00, 0xCA, 0xBD, 0xB8, 0xFE, 0xE8, 0xDC, 0xD9, 0xE2, 0x00, 0xD7, 0xE3, 0xE1, 0xD9, 0x00, 0xD6, 0xD5, 0xD7, 0xDF, 0x00, 0xDA, 0xE3, 0xE6, 0x00, 0xE8, 0xDC, 0xDD, 0xE7, 0xAD, 0xFF, 0xB8, 0x27, 0x04, 0x00, 0x08, 0x6A, 0x5A, 0x2B, 0x3A, 0x01, 0xBB, 0x01, 0x8B, 0x04, 0x00, 0x08, 0x2B, 0xAD, 0x01, 0xBB, 0x01, 0x8B, 0x04, 0x00, 0x08, 0x47, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x01, 0x00, 0xBB, 0x01, 0x8B, 0x04, 0x00, 0x08, 0xBD, 0x94, 0x04, 0x00, 0x08, 0x66, 0x6D, 0x46, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x00, 0x00, 0xBB, 0x01, 0x82, 0x04, 0x00, 0x08, 0x1A, 0x00, 0x80, 0x73, 0x01, 0x1A, 0x01, 0x80, 0x01, 0x00, 0x09, 0x00, 0x29, 0xD5, 0x08, 0x29, 0x3A, 0x01, 0xBD, 0xED, 0x04, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x6B, 0x05, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x42, 0x05, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xC7, 0xD9, 0xE6, 0xD7, 0xDD, 0x00, 0xD8, 0xB4, 0xE9, 0xE8, 0xDD, 0xE0, 0xDD, 0xE7, 0xD9, 0xE6, 0x00, 0xE0, 0xD9, 0x00, 0xE7, 0xED, 0xE7, 0xE8, 0x1A, 0xE1, 0xD9, 0xFE, 0xBD, 0xBB, 0xBE, 0xBF, 0xBB, 0xCF, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xAD, 0xFB, 0xD0, 0xE3, 0xE9, 0xE7, 0x00, 0xD8, 0xD9, 0xEA, 0xD9, 0xEE, 0x00, 0x1C, 0xE8, 0xE6, 0xD9, 0x00, 0xFD, 0x01, 0xAD, 0xFE, 0xC3, 0xE0, 0x00, 0xED, 0x00, 0xD5, 0x00, 0xE9, 0xE2, 0x00, 0xE8, 0xDD, 0xD7, 0xDF, 0xD9, 0xE8, 0x00, 0xE4, 0xE3, 0xE9, 0xE6, 0x00, 0xEA, 0xE3, 0xE9, 0xE7, 0xAD, 0xFF, 0xC3, 0xE0, 0x00, 0xE4, 0xD9, 0xE9, 0xE8, 0x00, 0x1C, 0xE8, 0xE6, 0xD9, 0x00, 0xE9, 0xE8, 0xDD, 0xE0, 0xDD, 0xE7, 0x1B, 0x00, 0xD5, 0xE9, 0x00, 0xE4, 0xE3, 0xE6, 0xE8, 0x00, 0xD8, 0xD9, 0xFE, 0xC8, 0xBF, 0xC8, 0xCF, 0xBD, 0xCC, 0xC3, 0xCB, 0xCF, 0xBF, 0xAD, 0xFB, 0xBF, 0xE7, 0xE7, 0xD5, 0xED, 0xD9, 0xEE, 0xAE, 0xE0, 0xD9, 0x00, 0xE4, 0xE3, 0xE9, 0xE6, 0x00, 0xEA, 0xE3, 0xDD, 0xE6, 0x00, 0xD8, 0xD9, 0x00, 0xE5, 0xE9, 0xE3, 0xDD, 0x00, 0xFE, 0xDD, 0xE0, 0x00, 0xE7, 0xB4, 0xD5, 0xDB, 0xDD, 0xE8, 0xAD, 0xFF, 0xC7, 0xD9, 0xE6, 0xD7, 0xDD, 0x00, 0xD8, 0xB4, 0xE9, 0xE8, 0xDD, 0xE0, 0xDD, 0xE7, 0xD9, 0xE6, 0x00, 0xE0, 0xD9, 0x00, 0xE7, 0xED, 0xE7, 0xE8, 0x1A, 0xE1, 0xD9, 0xFE, 0xBD, 0xBB, 0xBE, 0xBF, 0xBB, 0xCF, 0x00, 0xC7, 0xD3, 0xCD, 0xCE, 0xAD, 0xFF, 0xC9, 0xDC, 0xB8, 0x00, 0xDE, 0xD9, 0x00, 0xE6, 0xD9, 0xDB, 0xE6, 0xD9, 0xE8, 0xE8, 0xD9, 0x00, 0xFD, 0x01, 0xAD, 0x00, 0xC6, 0xD5, 0x00, 0xCA, 0xC9, 0xBD, 0xC2, 0xBF, 0xFE, 0xC9, 0xBC, 0xC4, 0xAD, 0x00, 0xCC, 0xBB, 0xCC, 0xBF, 0xCD, 0x00, 0xD8, 0xE9, 0x00, 0xCD, 0xBB, 0xBD, 0x00, 0xD9, 0xE7, 0xE8, 0x00, 0xE4, 0xE0, 0xD9, 0xDD, 0xE2, 0xD9, 0xAD, 0xFB, 0xC0, 0xD5, 0xDD, 0xE8, 0xD9, 0xE7, 0x00, 0xE0, 0xD9, 0x00, 0xE8, 0xE6, 0xDD, 0x00, 0xD8, 0xD5, 0xE2, 0xE7, 0x00, 0xEA, 0xE3, 0xE8, 0xE6, 0xD9, 0x00, 0xCD, 0xBB, 0xBD, 0x00, 0xD9, 0xE8, 0xFE, 0xE6, 0xD9, 0xEA, 0xD9, 0xE2, 0xD9, 0xEE, 0x00, 0xE4, 0xE0, 0xE9, 0xE7, 0x00, 0xE8, 0xD5, 0xE6, 0xD8, 0xAD, 0xFF, 0xB8, 0xD9, 0x05, 0x00, 0x08, 0x6A, 0x5A, 0x2B, 0x3A, 0x01, 0xBB, 0x01, 0x3D, 0x06, 0x00, 0x08, 0x2B, 0xAD, 0x01, 0xBB, 0x01, 0x3D, 0x06, 0x00, 0x08, 0x47, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x01, 0x00, 0xBB, 0x01, 0x3D, 0x06, 0x00, 0x08, 0xBD, 0x46, 0x06, 0x00, 0x08, 0x66, 0x6D, 0x46, 0x73, 0x01, 0x01, 0x00, 0x21, 0x0D, 0x80, 0x00, 0x00, 0xBB, 0x01, 0x34, 0x06, 0x00, 0x08, 0x1A, 0x00, 0x80, 0x73, 0x01, 0x1A, 0x01, 0x80, 0x01, 0x00, 0x09, 0x00, 0x29, 0xD5, 0x08, 0x29, 0x3A, 0x01, 0xBD, 0xA9, 0x06, 0x00, 0x08, 0x66, 0x6D, 0x6C, 0x02, 0xBD, 0x3A, 0x07, 0x00, 0x08, 0x66, 0x6D, 0x00}; +// CRC16 checksum +void inject_mystery() +{ + flash_read(memory_section_array[4], &global_memory_buffer[0], 0x1000); + for (int i = 0; i < 0x14E; i++) + { + global_memory_buffer[INTER_WONDER_CARD_OFFSET_EMER + i] = wonder_card[i]; + } + for (int i = 0; i < 0x3EC; i++){ + global_memory_buffer[EVENT_SCRIPT_DATA_OFFSET_EMER + i] = script[i]; + } + update_memory_buffer_checksum(); + flash_write(memory_section_array[4], &global_memory_buffer[0], 0x1000); +} -void inject_script(){ +unsigned int __fastcall crc16(int a1, unsigned int a2) +{ + unsigned int v2; // r2 + unsigned int i; // r3 + v2 = 0x1121; // This is the seed + for ( i = 0; i < a2; i = (i + 1) & 0xFFFF ) + v2 = *(unsigned __int16 *)((char *)crc16_ccitt_table + (2 * (v2 ^ *(unsigned __int8 *)(a1 + i)) & 0x1FF)) ^ (v2 >> 8); + return ~v2 & 0xFFFF; } \ No newline at end of file