void gamePluginEntry() { u32 ret, key; INIT_SHARED_FUNC(plgGetIoBase, 8); // wait for game starts up (5 seconds) svc_sleepThread(5000000000); if (((NS_CONFIG*)(NS_CONFIGURE_ADDR))->sharedFunc[8]) { isNewNtr = 1; } else { isNewNtr = 0; } if (isNewNtr) { IoBasePad = plgGetIoBase(IO_BASE_PAD); } while (1) { svc_sleepThread(100000000); key = getKey(); if (key == BUTTON_R) { u16 *id = (u16*)0x16F4C460; char id_str[5] = {0}; for (size_t i = 0; i < 4u; ++i) { id_str[i] = (char)READU16(id + i); } u16 result = (u16)strtoul(id_str, NULL, 16); WRITEU16(0x15FBEDD0, result); waitKeyUp(); } } }
void seed_jap(void) //JAP { u16 result; if (is_pressed(BUTTON_R + BUTTON_DD)) { u16 *id = (u16 *)0x16FE3C60; char id_str[5] = { 0 }; int i; for (i = 0; i < 4; i++) id_str[i] = (char)READU16(id + i); result = (u16)strtoul(id_str, NULL, 16); reset_search(); add_search_replace(0x20A7, result); find_and_replace_multiple((void *)0x1609D158, 0x5000); find_and_replace_multiple((void *)0x160B9B28, 0x1000); wait_all_released(); } if (is_pressed(BUTTON_R + BUTTON_DU)) { u16 *id = (u16 *)0x16FE3C60; char id_str[5] = { 0 }; int i; for (i = 0; i < 4; i++) id_str[i] = (char)READU16(id + i); result = (u16)strtoul(id_str, NULL, 16); reset_search(); add_search_replace(result, 0x7FFE); find_and_replace_multiple((void *)0x1609D158, 0x5000); find_and_replace_multiple((void *)0x160B9B28, 0x1000); wait_all_released(); } if (is_pressed(BUTTON_R + BUTTON_DL)) { u16 *id = (u16 *)0x16FE3C60; char id_str[5] = { 0 }; int i; for (i = 0; i < 4; i++) id_str[i] = (char)READU16(id + i); result = (u16)strtoul(id_str, NULL, 16); reset_search(); add_search_replace(result, 0x20A7); find_and_replace_multiple((void *)0x1609D158, 0x5000); find_and_replace_multiple((void *)0x160B9B28, 0x1000); wait_all_released(); } }
void text2item4_jap(void)//jap { u16 *id = (u16 *)0x16FE3C60; char id_str[5] = { 0 }; int i; u16 result; if (!is_pressed(BUTTON_X + BUTTON_DR)) return; for (i = 0; i < 4; i++) id_str[i] = (char)READU16(id + i); result = (u16)strtoul(id_str, NULL, 16); WRITEU16(0x16074000, result); WRITEU16(0xAEEC28, result); WRITEU16(0xAF8B38, result); WRITEU16(0xB02A48, result); WRITEU16(0xB0C958, result); WRITEU16(0xB0BA58, result); wait_keys_released(X + DR); }
void quench(void) { u32 address; u32 item; if (!is_pressed(BUTTON_R + BUTTON_A) && !g_text_activated) return; // Parse all items in Town for (address = g_town_items; address < g_town_items + RANGE_TOWN_ITEMS; address += ITEM_BYTES) { item = READU16(address); // Deal with wilted flower if (item >= 0xCE && item <= 0xF7) { item -= 0x2F; } // If item is a flower add water flag if (item >= 0x9F && item <= 0xC8) { item |= 0x40000000; WRITEU32(address, item); } } }
void extract_strings(uint8_t * buffer, size_t len) { size_t off = 0; int i; uint16_t id; uint32_t l; char lang[8]; char fname[32]; FILE * f; while((off = find_word(buffer, locl, off, len)) < len) { /* 002e3c4c: 4c4f434c LOCL long word 002e3c50: 00000000 002e3c54: 00010000 ??? 002e3c58: 002e3c4c LOCL 002e3c5c: 002e3c04 (C) Copyright Hewlett-Packard Company 1987-1994. All Rights Reserved. 002e3c60: 01309572 ??? 002e3c64: 00000101 ??? 002e3c68: 002e7c84 en 002e3c6c: 002e7c87 US 002e3c70: 000007d4 ? sometimes 00000005 or 0000000C (tr-TR) 002e3c74: adf80000 string id (word) 002e3c78: 002e7c8c Insert memory card */ if((READU32((buffer+off+4))) == 0) { for(i = 0; i < 64; i += 4) { l = READU32((buffer+off+i)); printf("%08lx: %08x", off+i, l); if(l > 0x10000 && l < len) printf(" %s", buffer + l); printf("\n"); } snprintf(lang, sizeof(lang), "%s-%s", buffer + (READU32((buffer+off+0x1C))), buffer + (READU32((buffer+off+0x20)))); /*n = READU32((buffer+off+0x24));*/ /*printf("%s : %d strings\n", lang, n);*/ snprintf(fname, sizeof(fname), "strings.%s", lang); f = fopen(fname, "w"); for(i = 0; /*i < n*/; i++) { id = READU16((buffer+off+0x28+i*8)); if(id == 0 || READU16((buffer+off+0x28+i*8+2)) != 0) break; l = READU32((buffer+off+0x28+i*8+4)); fprintf(f, "%04X (=%d):\n%s\n\n", id, id, buffer + l); } fclose(f); printf("\n"); } else { printf("%08lx : LOCL\n", off); } off += 4; } off = 0; while((off = find_word(buffer, locm, off, len)) < len) { if((READU32((buffer+off+8))) == 0x00010000) { for(i = 0; i < 64; i += 4) { l = READU32((buffer+off+i)); printf("%08lx: %08x", off+i, l); if(l > 0x10000 && l < len) printf(" %s", buffer + l); printf("\n"); } snprintf(fname, sizeof(fname), "strings.LOCM_%06lX%s", off); f = fopen(fname, "w"); for(i = 0; /*i < n*/; i++) { uint16_t flags; id = READU16((buffer+off+0x28+i*8)); flags = READU16((buffer+off+0x28+i*8+2)); if(id == 0) break; l = READU32((buffer+off+0x28+i*8+4)); fprintf(f, "%04X (=%d) flags=%04X :\n%s\n\n", id, id, flags, buffer + l); } fclose(f); printf("\n"); } else { printf("%08lx LOCM\n", off); } off += 4; } }
void quench_jap() { // define flowers (include wilted) static const u16 flowers[] = { // src, replace 0x009F, 0x009F, // Red Tulips 0x00A0, 0x00A0, // White Tulips 0x00A1, 0x00A1, // Yellow Tulips 0x00A2, 0x00A2, // Pink Tulips 0x00A3, 0x00A3, // Purple Tulips 0x00A4, 0x00A4, // Black Tulips 0x00A5, 0x00A5, // Orange Tulips 0x00A6, 0x00A6, // White Pansies 0x00A7, 0x00A7, // Yellow Pansies 0x00A8, 0x00A8, // Red Pansies 0x00A9, 0x00A9, // Purple Pansies 0x00AA, 0x00AA, // Orange Pansies 0x00AB, 0x00AB, // Blue Pansies 0x00AC, 0x00AC, // White Comsos 0x00AD, 0x00AD, // Red Cosmos 0x00AE, 0x00AE, // Sun Cosmos 0x00AF, 0x00AF, // Pink Cosmos 0x00B0, 0x00B0, // Orange Cosmos 0x00B1, 0x00B1, // Black Cosmos 0x00B2, 0x00B2, // Red Roses 0x00B3, 0x00B3, // White Roses 0x00B4, 0x00B4, // Yellow Roses 0x00B5, 0x00B5, // Pink Roses 0x00B6, 0x00B6, // Orange Roses 0x00B7, 0x00B7, // Purple Roses 0x00B8, 0x00B8, // Black Roses 0x00B9, 0x00B9, // Blue Roses 0x00BB, 0x00BB, // Red Carnations 0x00BC, 0x00BC, // Pink Carnations 0x00BD, 0x00BD, // White Carnations 0x00BE, 0x00BE, // White Lilies 0x00BF, 0x00BF, // Yellow Lilies 0x00C0, 0x00C0, // Red Lilies 0x00C1, 0x00C1, // Orange Lilies 0x00C2, 0x00C2, // Pink Lilies 0x00C3, 0x00C3, // Black Lilies 0x00C4, 0x00C4, // Purple Violets 0x00C5, 0x00C5, // Blue Violets 0x00C6, 0x00C6, // White Violets 0x00C7, 0x00C7, // Yellow Violets 0x00C8, 0x00C8, // Jacob's Ladder 0x00CE, 0x009F, // Red Tulips (Wilted) 0x00CF, 0x00A0, // White Tulips (Wilted) 0x00D0, 0x00A1, // Yellow Tulips (Wilted) 0x00D1, 0x00A2, // Pink Tulips (Wilted) 0x00D2, 0x00A3, // Purple Tulips (Wilted) 0x00D3, 0x00A4, // Black Tulips (Wilted) 0x00D4, 0x00A5, // Orange Tulips (Wilted) 0x00D5, 0x00A6, // White Pansies (Wilted) 0x00D6, 0x00A7, // Yellow Pansies (Wilted) 0x00D7, 0x00A8, // Red Pansies (Wilted) 0x00D8, 0x00A9, // Purple Pansies (Wilted) 0x00D9, 0x00AA, // Orange Pansies (Wilted) 0x00DA, 0x00AB, // Blue Pansies (Wilted) 0x00DB, 0x00AC, // White Cosmos (Wilted) 0x00DC, 0x00AD, // Red Cosmos (Wilted) 0x00DD, 0x00AE, // Sun Cosmos (Wilted) 0x00DE, 0x00AF, // Pink Cosmos (Wilted) 0x00DF, 0x00B0, // Orange Cosmos (Wilted) 0x00E0, 0x00B1, // Black Cosmos (Wilted) 0x00E1, 0x00B2, // Red Roses (Wilted) 0x00E2, 0x00B3, // White Roses (Wilted) 0x00E3, 0x00B4, // Yellow Roses (Wilted) 0x00E4, 0x00B5, // Pink Roses (Wilted) 0x00E5, 0x00B6, // Orange Roses (Wilted) 0x00E6, 0x00B7, // Purple Roses (Wilted) 0x00E7, 0x00B8, // Black Roses (Wilted) 0x00E8, 0x00B9, // Blue Roses (Wilted) 0x00E9, 0x00BA, // Gold Roses (Wilted) 0x00EA, 0x00BB, // Red Carnations (Wilted) 0x00EB, 0x00BC, // Pink Carnations (Wilted) 0x00EC, 0x00BD, // White Carnations (Wilted) 0x00ED, 0x00BE, // White Lilies (Wilted) 0x00EE, 0x00BF, // Yellow Lilies (Wilted) 0x00EF, 0x00C0, // Red Lilies (Wilted) 0x00F0, 0x00C1, // Orange Lilies (Wilted) 0x00F1, 0x00C2, // Pink Lilies (Wilted) 0x00F2, 0x00C3, // Black Lilies (Wilted) 0x00F3, 0x00C4, // Purple Violets (Wilted) 0x00F4, 0x00C5, // Blue Violets (Wilted) 0x00F5, 0x00C6, // White Violets (Wilted) 0x00F6, 0x00C7, // Yellow Violets (Wilted) 0x00F7, 0x00C8, // Jacob's Ladder (Wilted) }; int i; u32 address, item; if (is_pressed(BUTTON_R + BUTTON_A)) // find all items in Town for(address = OFFSET_TOWN_ITEMS; address < OFFSET_TOWN_ITEMS_JAP + RANGE_TOWN_ITEMS; address += ITEM_BYTES){ item = READU16(address); // find flowers for(i = 0; i < sizeof(flowers) / sizeof(u16); i += 2){ if(item == flowers[i]){ // replace item WRITEU16(address, flowers[i + 1]); // add water flag WRITEU16(address + 0x02, 0x4000); break; } } } }