diff --git a/source/box_menu.cpp b/source/box_menu.cpp index cbe8b0e..22e5265 100644 --- a/source/box_menu.cpp +++ b/source/box_menu.cpp @@ -36,7 +36,7 @@ int Box_Menu::box_main(PokeBox* box) obj_unhide(box_select, 0); int index = 0; - PKMN_NAMES.decompress(get_compressed_PKMN_NAMES_table()); + PKMN_NAMES.decompress(get_compressed_text_table(PKMN_NAMES_INDEX)); while (true) { diff --git a/source/gameboy_colour.cpp b/source/gameboy_colour.cpp index 8be2d06..4db3084 100644 --- a/source/gameboy_colour.cpp +++ b/source/gameboy_colour.cpp @@ -169,7 +169,7 @@ void setup(const u16 *debug_charset) u8 general_text_table_buffer[2048]; text_data_table general_text(general_text_table_buffer); - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); ptgb_write(general_text.get_text_entry(GENERAL_connecting), true); } } @@ -228,7 +228,7 @@ byte handleIncomingByte(byte in, byte *box_data_storage, byte *curr_payload, GB_ u8 general_text_table_buffer[2048]; text_data_table general_text(general_text_table_buffer); - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); ptgb_write(general_text.get_text_entry(curr_gb_rom->version != YELLOW_ID ? GENERAL_link_success : GENERAL_link_success_yellow), true); } @@ -280,7 +280,7 @@ byte handleIncomingByte(byte in, byte *box_data_storage, byte *curr_payload, GB_ u8 general_text_table_buffer[2048]; text_data_table general_text(general_text_table_buffer); - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); ptgb_write(general_text.get_text_entry(GENERAL_transferring), true); } diff --git a/source/global_frame_controller.cpp b/source/global_frame_controller.cpp index 1a45688..f6626b8 100644 --- a/source/global_frame_controller.cpp +++ b/source/global_frame_controller.cpp @@ -27,7 +27,7 @@ static void __attribute__((noinline)) show_pulled_cart_error() u8 general_text_table_buffer[2048]; text_data_table general_text(general_text_table_buffer); - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); ptgb_write(general_text.get_text_entry(GENERAL_pulled_cart_error), true); } diff --git a/source/main.cpp b/source/main.cpp index eba3e03..dc547b7 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -147,7 +147,7 @@ void game_load_error(void) u8 general_text_table_buffer[2048]; text_data_table general_text(general_text_table_buffer); - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); ptgb_write(general_text.get_text_entry(GENERAL_cart_load_error), true); } @@ -189,7 +189,7 @@ void first_load_message(void) u8 general_text_table_buffer[2048]; text_data_table general_text(general_text_table_buffer); - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); ptgb_write(general_text.get_text_entry(GENERAL_intro_first), true); } @@ -206,7 +206,7 @@ int credits() text_data_table credits_text_table(text_decompression_buffer); int curr_credits_num = 0; - credits_text_table.decompress(get_compressed_CREDITS_table()); + credits_text_table.decompress(get_compressed_text_table(CREDITS_INDEX)); bool update = true; global_next_frame(); @@ -329,7 +329,7 @@ int main_menu_loop() int return_values[NUM_MENU_OPTIONS] = {BTN_TRANSFER, BTN_POKEDEX, BTN_CREDITS}; u16 test = 0; - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); while (true) { @@ -429,7 +429,7 @@ static void __attribute__((noinline)) show_intro() text_data_table general_text(general_text_table_buffer); const u8 *text_entry; - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); text_entry = general_text.get_text_entry(GENERAL_press_start); press_start_text_length = get_string_length(text_entry); diff --git a/source/multiboot_upload.cpp b/source/multiboot_upload.cpp index 6712018..a4b5ab9 100644 --- a/source/multiboot_upload.cpp +++ b/source/multiboot_upload.cpp @@ -19,7 +19,7 @@ void multiboot_upload_screen() text_data_table general_text(general_text_table_buffer); LinkCableMultiboot linkCableMultiboot; - general_text.decompress(get_compressed_GENERAL_table()); + general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); multiboot_show_textbox(); ptgb_write(general_text.get_text_entry(GENERAL_send_multiboot_instructions), true); diff --git a/source/mystery_gift_builder.cpp b/source/mystery_gift_builder.cpp index 7651f86..820b167 100644 --- a/source/mystery_gift_builder.cpp +++ b/source/mystery_gift_builder.cpp @@ -378,7 +378,7 @@ void mystery_gift_script::build_script(PokeBox *box) // this decompresses the ZX0 compressed text table into the buffer inside of the decompressed_store union // thereby reusing the stack (=IWRAM) memory used earlier for the PokemonTables instance we used above - decompressed_text_table.decompress(get_compressed_RSEFRLG_table()); + decompressed_text_table.decompress(get_compressed_text_table(RSEFRLG_INDEX)); switch (curr_GBA_rom.gamecode) { case RUBY_ID: diff --git a/source/pokedex.cpp b/source/pokedex.cpp index 129400f..92c4166 100644 --- a/source/pokedex.cpp +++ b/source/pokedex.cpp @@ -41,7 +41,7 @@ static void load_text_entry_into_buffer(text_data_table& data_table, u8 *output_ static void load_general_table_text_entries(u8 *decompression_buffer, u8 *kanto_buffer, u8 *johto_buffer) { text_data_table data_table(decompression_buffer); - data_table.decompress(get_compressed_GENERAL_table()); + data_table.decompress(get_compressed_text_table(GENERAL_INDEX)); load_text_entry_into_buffer(data_table, kanto_buffer, GENERAL_kanto_name); load_text_entry_into_buffer(data_table, johto_buffer, GENERAL_johto_name); @@ -105,7 +105,7 @@ int pokedex_loop() load_general_table_text_entries(decompression_buffer, kanto_name, johto_name); text_data_table PKMN_NAMES(decompression_buffer); - PKMN_NAMES.decompress(get_compressed_PKMN_NAMES_table()); + PKMN_NAMES.decompress(get_compressed_text_table(PKMN_NAMES_INDEX)); pokedex_init(); pokedex_show(); diff --git a/source/select_menu.cpp b/source/select_menu.cpp index 3257f59..2f51ffe 100644 --- a/source/select_menu.cpp +++ b/source/select_menu.cpp @@ -106,7 +106,7 @@ void Select_Menu::show_menu() { u8 decompression_buffer[2048]; text_data_table text_data(decompression_buffer); - text_data.decompress(get_compressed_GENERAL_table()); + text_data.decompress(get_compressed_text_table(GENERAL_INDEX)); add_menu_box(menu_options.size(), startTileX, startTileY); for (unsigned int i = 0; i < menu_options.size(); i++) diff --git a/source/text_engine.cpp b/source/text_engine.cpp index 51d94be..4a00b7e 100644 --- a/source/text_engine.cpp +++ b/source/text_engine.cpp @@ -35,7 +35,7 @@ static __attribute__((noinline)) const u8* read_dialogue_text_entry(uint8_t inde text_data_table dialogue_table(text_decompression_buffer); - dialogue_table.decompress(get_compressed_PTGB_table()); + dialogue_table.decompress(get_compressed_text_table(PTGB_INDEX)); text_entry = dialogue_table.get_text_entry(index); memcpy(output_buffer, text_entry, dialogue_table.get_text_entry_size(index)); diff --git a/text_helper/main.py b/text_helper/main.py index 32bc684..9f540d3 100755 --- a/text_helper/main.py +++ b/text_helper/main.py @@ -433,7 +433,7 @@ def write_enum_to_header_file(hFile, prefix, dictionary): for key, line in dictionary.items(): hFile.write(f"#define {prefix}{key} {num}\n") num += 1 - hFile.write(f"\n#define {prefix}_LENGTH {num}\n") + hFile.write(f"\n#define {prefix}LENGTH {num}\n") hFile.write("\n") return num @@ -476,16 +476,26 @@ print("\tGenerating header file") with open (os.curdir + '/include/translated_text.h', 'w') as hFile: hFile.write("// THIS FILE HAS BEEN GENERATED BY text_helper/main.py !\n\n#ifndef TRANSLATED_TEXT_H\n#define TRANSLATED_TEXT_H\n\n#include \n\n") - + sectionEnds = [] + index = 0 for section in textSections: num = write_enum_to_header_file(hFile, section + "_", mainDict[lang.name][section]) + hFile.write("#define " + section + "_INDEX " + str(index)) if(section == "PTGB"): hFile.write(f"\n#define DIA_END {num}\n") hFile.write("/** Returns the LZ10 compressed " + section + " text table.*/\n") - hFile.write("const u8* get_compressed_" + section + "_table();\n\n") + sectionEnds.append(num) + index += 1 + + hFile.write("#define NUM_TEXT_SECTIONS " + str(index) + "\n") + hFile.write("const int text_section_lengths[] = {\n") + for end in sectionEnds: + hFile.write("\t" + str(end) + ",\n") + hFile.write("};\n\n") + + hFile.write("const u8* get_compressed_text_table(int table_index);\n") - hFile.write("") hFile.write("\n#endif") hFile.close() @@ -508,12 +518,17 @@ with open(os.curdir + '/source/translated_text.cpp', 'w') as cppFile: for lang in Languages: cppFile.write(f"\n#if PTGB_BUILD_LANGUAGE == {lang.value + 1}\n") + cppFile.write("const u8* get_compressed_text_table(int table_index)\n") + cppFile.write("{\n") + cppFile.write("\tswitch (table_index)\n\t{\n") for section in textSections: - cppFile.write("const u8* get_compressed_" + section + "_table()\n") - cppFile.write("{\n") - cppFile.write("\treturn " + section + "_" + lang.name.lower() + "_lz10_bin;\n") - cppFile.write("}\n\n") - + cppFile.write("\tcase(" + section + "_INDEX):\n") + if(section == "PTGB"): + cppFile.write("\tdefault:\n") + cppFile.write("\t\treturn " + section + "_" + lang.name.lower() + "_lz10_bin;\n") + cppFile.write("\t\tbreak;\n") + cppFile.write("\t}\n") + cppFile.write("}\n\n") cppFile.write(f"#endif\n\n\n")