diff --git a/rom_builder/rom_builder.py b/rom_builder/rom_builder.py index d034415..e84b63e 100644 --- a/rom_builder/rom_builder.py +++ b/rom_builder/rom_builder.py @@ -5,7 +5,7 @@ import sys, os, glob, json, math, re, struct, hashlib, argparse, datetime # Configuration -app_version = "0.10" +app_version = "0.11" default_file = "LK_MULTIMENU_.gba" ################################ @@ -225,6 +225,7 @@ for game in games: elif key.upper() == "L": keys |= (1 << 9) game["keys"] = keys + if keys > 0: roms_keys.append(keys) roms_keys = list(set(roms_keys)) @@ -328,7 +329,7 @@ for key in roms_keys: title = game["title"] if len(title) > 0x30: title = title[:0x2F] + "…" - + table_line = \ f"{game['index'] + 1:3d} | " \ f"0x{game['block_offset'] * block_size:07X} | "\ @@ -339,7 +340,12 @@ for key in roms_keys: else: table_line += " | " table_line += f"{title}" - if c % 8 == 0: logp(toc_sep) + if c % 8 == 0: + if game['keys'] != 0: + temp = toc_sep[:-9] + "[Hidden]-" + logp(temp) + else: + logp(toc_sep) logp(table_line) c += 1 diff --git a/source/flash.c b/source/flash.c index 7b2e4b1..00c57c7 100644 --- a/source/flash.c +++ b/source/flash.c @@ -12,6 +12,7 @@ Author: Lesserkuma (github.com/lesserkuma) u8 flash_type; u8 *itemlist; +u16 itemlist_offset; u32 flash_sector_size; u32 flash_itemlist_sector_offset; u32 flash_status_sector_offset; diff --git a/source/main.c b/source/main.c index 0c4be77..5c9bf9b 100644 --- a/source/main.c +++ b/source/main.c @@ -27,6 +27,7 @@ extern s8 FontMarginBottom; extern const u8* font; extern u8 *itemlist; extern u8 flash_type; +extern u16 itemlist_offset; extern u32 flash_sector_size; extern u32 flash_itemlist_sector_offset; extern u32 flash_status_sector_offset; @@ -101,20 +102,19 @@ int main(void) { show_debug = TRUE; } if (kHeld) { - u16 itemlist_offset = 0; BOOL found_keys = FALSE; - for (itemlist_offset = 0; itemlist_offset < 0x924; itemlist_offset += 0x70) { + for (itemlist_offset = 0; itemlist_offset < 0xE000; itemlist_offset += 0x70) { memcpy(&sItemConfig, ((u8*)itemlist)+itemlist_offset, sizeof(sItemConfig)); if (sItemConfig.title_length == 0) break; if (sItemConfig.title_length == 0xFF) break; if (sItemConfig.keys == kHeld) { - itemlist += itemlist_offset; found_keys = TRUE; break; } } if (!found_keys) { kHeld = 0; + itemlist_offset = 0; } } @@ -133,7 +133,7 @@ int main(void) { // Count number of ROMs for (roms_total = 0; roms_total < 512; roms_total++) { - memcpy(&sItemConfig, ((u8*)itemlist)+(0x70*roms_total), sizeof(sItemConfig)); + memcpy(&sItemConfig, ((u8*)itemlist+itemlist_offset)+(0x70*roms_total), sizeof(sItemConfig)); if (sItemConfig.keys != kHeld) break; if (sItemConfig.title_length == 0) break; if (sItemConfig.title_length == 0xFF) break; @@ -148,7 +148,7 @@ int main(void) { REG_DISPCNT ^= 0x0010; while (1) { VBlankIntrWait(); } } else if (roms_total == 1) { - memcpy(&sItemConfig, ((u8*)itemlist), sizeof(sItemConfig)); + memcpy(&sItemConfig, ((u8*)itemlist+itemlist_offset), sizeof(sItemConfig)); u8 error_code = BootGame(sItemConfig, sFlashStatus); boot_failed = error_code; } @@ -169,9 +169,8 @@ int main(void) { } if (roms_page < 7) ClearList((void*)AGB_VRAM+0xA000, 26+(roms_page+1)*14, 14*(8-roms_page)); if (cursor_pos > roms_page) cursor_pos = roms_page; - for (u8 i = 0; i <= roms_page; i++) { - memcpy(&sItemConfig, ((u8*)itemlist)+0x70*(page_active*8+i), sizeof(sItemConfig)); + memcpy(&sItemConfig, ((u8*)itemlist+itemlist_offset)+0x70*(page_active*8+i), sizeof(sItemConfig)); ClearList((void*)AGB_VRAM+0xA000, 27+i*14, 14); LoadFont(sItemConfig.font); DrawText(28, 26+i*14, ALIGN_LEFT, sItemConfig.title, sItemConfig.title_length, font, (void*)AGB_VRAM+0xA000, i == cursor_pos); @@ -180,7 +179,7 @@ int main(void) { // Re-draw only changed list items (cursor moved up or down) for (u8 i = 0; i < 8; i++) { if ((redraw_items >> i) & 1) { - memcpy(&sItemConfig, ((u8*)itemlist)+0x70*(page_active*8+i), sizeof(sItemConfig)); + memcpy(&sItemConfig, ((u8*)itemlist+itemlist_offset)+0x70*(page_active*8+i), sizeof(sItemConfig)); ClearList((void*)AGB_VRAM+0xA000, 27+i*14, 14); LoadFont(sItemConfig.font); DrawText(28, 26+i*14, ALIGN_LEFT, sItemConfig.title, sItemConfig.title_length, font, (void*)AGB_VRAM+0xA000, i == cursor_pos); @@ -188,7 +187,7 @@ int main(void) { } } - memcpy(&sItemConfig, ((u8*)itemlist)+0x70*(page_active*8+cursor_pos), sizeof(sItemConfig)); + memcpy(&sItemConfig, ((u8*)itemlist+itemlist_offset)+0x70*(page_active*8+cursor_pos), sizeof(sItemConfig)); // Draw cursor LoadFont(1);