diff options
author | Evan <eroelke@gmail.com> | 2019-11-18 15:21:22 -0700 |
---|---|---|
committer | Evan <eroelke@gmail.com> | 2019-11-19 14:21:00 -0700 |
commit | 422533386dc2c92de4675fa5f9df10b81cfe6eb1 (patch) | |
tree | 1c2e4c7dca51bf1af9887011b6bfbbf3b762264b | |
parent | a48e03b78c0e4f1b72e9e62b4c927f4c59836339 (diff) |
matching up to sub_8088D8C
-rw-r--r-- | include/menu_helpers.h | 2 | ||||
-rw-r--r-- | src/menu_helpers.c | 2 | ||||
-rw-r--r-- | src/option_menu.c | 657 |
3 files changed, 489 insertions, 172 deletions
diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 6ea771500..8d042825c 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -12,7 +12,7 @@ struct YesNoFuncTable }; bool16 RunTextPrinters_CheckActive(u8 textPrinterId); -bool8 sub_80BF72C(void); +bool32 sub_80BF72C(void); bool8 sub_80BF748(void); bool8 MenuHelpers_LinkSomething(void); void SetVBlankHBlankCallbacksToNull(void); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 06e7bb08b..027280beb 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -125,7 +125,7 @@ bool8 MenuHelpers_LinkSomething(void) return FALSE; } -bool8 sub_80BF72C(void) +bool32 sub_80BF72C(void) { if (!MenuHelpers_LinkSomething()) return FALSE; diff --git a/src/option_menu.c b/src/option_menu.c index 57de35f11..c98a2ec7b 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -39,6 +39,65 @@ enum WIN_OPTIONS }; +/* +static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTemplates +{ + { + .bg = 1, + .tilemapLeft = 2, + .tilemapTop = 3, + .width = 26, + .height = 2, + .paletteNum = 1, + .baseBlock = 2 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop =7, + .width = 26, + .height = 12, + .paletteNum = 1, + .baseBlock = 0x36 + }, + DUMMY_WIN_TEMPLATE +}; +static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 0, + .charBaseIndex = 1, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } +}; + + +static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //sOptionsMenuItemCounts +static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames +{ + [MENUITEM_TEXTSPEED] = gText_TextSpeed, + [MENUITEM_BATTLESCENE] = gText_BattleScene, + [MENUITEM_BATTLESTYLE] = gText_BattleStyle, + [MENUITEM_SOUND] = gText_Sound, + [MENUITEM_BUTTONMODE] = gText_ButtonMode, + [MENUITEM_FRAMETYPE] = gText_Frame, + [MENUITEM_CANCEL] = gText_OptionMenuCancel, +}; +*/ + //This file's functions static void sub_808835C(void); static void sub_8088374(void); @@ -57,27 +116,27 @@ static void sub_8088B00(u8 taskId); static void sub_8088BD0(void); static void sub_8088C0C(void); static void sub_8088D8C(void); -static void sub_8088DE0(u8 selection); - -extern const u16 gUnknown_83CC304[]; //sOptionsMenuItemCounts -extern const struct BgTemplate gUnknown_83CC2D8[]; -extern const u8 gUnknown_83CC360[]; -extern const u16 gUnknown_83CC2E4[]; -extern const struct WindowTemplate gUnknown_83CC2B8[]; -extern const u8 gUnknown_83CC363[]; -extern const u8 gUnknown_83CC330[]; -extern const u8 gUnknown_83CC33C[]; -extern const u8 gUnknown_83CC344[]; -extern const u8 gUnknown_83CC34C[]; -extern const u8 gUnknown_83CC354[]; -extern const u8 gUnknown_8419E52[]; -extern const u8 gUnknown_8419DCC[]; +static void sub_8088DE0(u16 selection); + +extern const struct WindowTemplate gUnknown_83CC2B8[3]; +extern const struct BgTemplate gUnknown_83CC2D8[2]; +extern const u16 gUnknown_83CC2E4[0x20]; +extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; //sOptionsMenuItemCounts extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8 gUnknown_83CC330[0xC]; +extern const u8 gUnknown_83CC33C[0x8]; +extern const u8 gUnknown_83CC344[0x8]; +extern const u8 gUnknown_83CC34C[0x8]; +extern const u8 gUnknown_83CC354[0xC]; +extern const u8 gUnknown_83CC360[0x3]; +extern const u8 gUnknown_83CC363[0x3]; +extern const u8 gUnknown_8419DCC[]; +extern const u8 gUnknown_8419E52[]; extern const u8 gUnknown_8419E57[]; struct OptionsMenu { - /*0x00*/ u16 option[7]; + /*0x00*/ u16 option[7]; //0,2,4,6,8,a,c /*0x0E*/ u16 unkE; /*0x10*/ u8 state3; /*0x11*/ u8 state; @@ -110,7 +169,7 @@ static void sub_8088374(void) //sub_8088388 void CB2_OptionsMenuFromStartMenu(void) { - int i; + u8 i; if (gMain.savedCallback == NULL) gMain.savedCallback = CB2_ReturnToStartMenu; @@ -126,10 +185,10 @@ void CB2_OptionsMenuFromStartMenu(void) sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; - for (i = 0; i < MENUITEM_COUNT-2; i++) + for (i = 0; i < MENUITEM_COUNT-1; i++) { - if (sOptionsMenu->option[i] > gUnknown_83CC304[i]-1) - sOptionsMenu->option[i] = 0; + if (sOptionsMenu->option[i] > (gUnknown_83CC304[i])-1) + sOptionsMenu->option[i] = 0; } HelpSystem_SetSomeVariable2(0xD); SetMainCallback2(sub_8088454); @@ -153,55 +212,46 @@ static void sub_8088444(void) //sub_8088454 static void sub_8088454(void) { - int i; - switch (sOptionsMenu->state) + u8 i, state; + state = sOptionsMenu->state; + switch (state) { case 0: sub_8088430(); - sOptionsMenu->state++; break; case 1: sub_8088530(); - sOptionsMenu->state++; break; case 2: sub_80886D4(); - sOptionsMenu->state++; break; case 3: - if (!(sub_80886F0())); + if (sub_80886F0() != TRUE) //silly matching quirk return; - sOptionsMenu->state++; break; case 4: sub_8088BD0(); - sOptionsMenu->state++; break; case 5: sub_8088C0C(); - sOptionsMenu->state++; break; case 6: sub_8088D8C(); - sOptionsMenu->state++; break; case 7: for (i = 0; i < MENUITEM_COUNT; i++) sub_80889A8(i); - sOptionsMenu->state++; break; case 8: sub_8088DE0(sOptionsMenu->unkE); - sOptionsMenu->state++; break; case 9: sub_8088680(); - sOptionsMenu->state++; break; default: sub_8088514(); - return; } + sOptionsMenu->state++; } //sub_8088514 @@ -217,12 +267,12 @@ static void sub_8088530(void) { void * dest = (void *) VRAM; DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); - + DmaClear32(3, (void *)OAM, OAM_SIZE); DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -233,10 +283,10 @@ static void sub_8088530(void) ChangeBgY(3, 0, 0); InitWindows(gUnknown_83CC2B8); DeactivateAllTextPrinters(); - SetGpuReg(REG_OFFSET_BLDCNT, 193); + SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); SetGpuReg(REG_OFFSET_BLDY, 2); SetGpuReg(REG_OFFSET_WININ, 1); - SetGpuReg(REG_OFFSET_WINOUT, 27); + SetGpuReg(REG_OFFSET_WINOUT, 0x27); SetGpuReg(0, 0x3040); ShowBg(0); ShowBg(1); @@ -248,7 +298,7 @@ static void sub_8088680(void) { s32 x; x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); - FillWindowPixelBuffer(WIN_OPTIONS, 0xFF); + FillWindowPixelBuffer(2, 0xFF); AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); PutWindowTilemap(2); CopyWindowToVram(2, 3); @@ -271,10 +321,10 @@ static bool8 sub_80886F0(void) switch (sOptionsMenu->state2) { case 0: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); break; case 1: - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); break; case 2: LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); @@ -291,72 +341,228 @@ static bool8 sub_80886F0(void) } -//sub_8088780 + +// I could not get this function to match. GOTO statements weren't even compiling correctly. +#ifdef NONMATCHING static void sub_8088780(u8 taskId) { + u8 v2, v5; + struct OptionsMenu v4; + switch (sOptionsMenu->state3) { case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sub_8088444(); sOptionsMenu->state3++; break; case 2: - if (sub_80BF72C) + if (sub_80BF72C() == TRUE) return; switch (sub_80888C0()) { - case 0: - return; case 1: sOptionsMenu->state3++; break; case 2: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); sub_80889A8(sOptionsMenu->unkE); - return; + sOptionsMenu->state3++; + break; case 3: sub_8088DE0(sOptionsMenu->unkE); - return; + break; case 4: sub_80889A8(sOptionsMenu->unkE); - return; + sOptionsMenu->state3++; + break; default: return; } case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); sOptionsMenu->state3++; - break; case 1: case 4: if (gPaletteFade.active) return; sOptionsMenu->state3++; - return; case 5: sub_8088B00(taskId); - return; + break; default: return; } } - - +#else +NAKED +static void sub_8088780(u8 taskId) +{ + asm_unified("\tpush {r4,lr}\n" + "\tsub sp, 0x4\n" + "\tlsls r0, 24\n" + "\tlsrs r2, r0, 24\n" + "\tldr r1, _080887A0 @ =sOptionsMenu\n" + "\tldr r0, [r1]\n" + "\tldrb r0, [r0, 0x10]\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x5\n" + "\tbls _08088796\n" + "\tb _080888B6\n" + "_08088796:\n" + "\tlsls r0, 2\n" + "\tldr r1, _080887A4 @ =_080887A8\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_080887A0: .4byte sOptionsMenu\n" + "_080887A4: .4byte _080887A8\n" + "\t.align 2, 0\n" + "_080887A8:\n" + "\t.4byte _080887C0\n" + "\t.4byte _08088894\n" + "\t.4byte _080887E0\n" + "\t.4byte _08088878\n" + "\t.4byte _08088894\n" + "\t.4byte _080888B0\n" + "_080887C0:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tbl sub_8088444\n" + "\tldr r0, _080887DC @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_080887DC: .4byte sOptionsMenu\n" + "_080887E0:\n" + "\tbl sub_80BF72C\n" + "\tcmp r0, 0x1\n" + "\tbeq _080888B6\n" + "\tbl sub_80888C0\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x4\n" + "\tbhi _080888B6\n" + "\tlsls r0, 2\n" + "\tldr r1, _08088800 @ =_08088804\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08088800: .4byte _08088804\n" + "\t.align 2, 0\n" + "_08088804:\n" + "\t.4byte _080888B6\n" + "\t.4byte _08088818\n" + "\t.4byte _08088824\n" + "\t.4byte _08088858\n" + "\t.4byte _08088868\n" + "_08088818:\n" + "\tldr r0, _08088820 @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_08088820: .4byte sOptionsMenu\n" + "_08088824:\n" + "\tldr r4, _08088854 @ =sOptionsMenu\n" + "\tldr r0, [r4]\n" + "\tldrb r0, [r0, 0xA]\n" + "\tbl GetUserFrameGraphicsInfo\n" + "\tldr r1, [r0]\n" + "\tmovs r2, 0x90\n" + "\tlsls r2, 1\n" + "\tmovs r3, 0xD5\n" + "\tlsls r3, 1\n" + "\tmovs r0, 0x1\n" + "\tbl LoadBgTiles\n" + "\tldr r0, [r4]\n" + "\tldrb r0, [r0, 0xA]\n" + "\tbl GetUserFrameGraphicsInfo\n" + "\tldr r0, [r0, 0x4]\n" + "\tmovs r1, 0x20\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tldr r0, [r4]\n" + "\tb _0808886C\n" + "\t.align 2, 0\n" + "_08088854: .4byte sOptionsMenu\n" + "_08088858:\n" + "\tldr r0, _08088864 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tldrh r0, [r0, 0xE]\n" + "\tbl sub_8088DE0\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_08088864: .4byte sOptionsMenu\n" + "_08088868:\n" + "\tldr r0, _08088874 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "_0808886C:\n" + "\tldrb r0, [r0, 0xE]\n" + "\tbl sub_80889A8\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_08088874: .4byte sOptionsMenu\n" + "_08088878:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x10\n" + "\tbl BeginNormalPaletteFade\n" + "\tldr r0, _08088890 @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_08088890: .4byte sOptionsMenu\n" + "_08088894:\n" + "\tldr r0, _080888AC @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _080888B6\n" + "\tldr r1, [r3]\n" + "_080888A2:\n" + "\tldrb r0, [r1, 0x10]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1, 0x10]\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_080888AC: .4byte gPaletteFade\n" + "_080888B0:\n" + "\tadds r0, r2, 0\n" + "\tbl sub_8088B00\n" + "_080888B6:\n" + "\tadd sp, 0x4\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + + + //OptionsMenu_ProcessInput static u8 sub_80888C0(void) { - u16 current, selection; + u16 current; + u16* curr; if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - selection = 2 * sOptionsMenu->unkE; - current = sOptionsMenu->option[selection]; - - if (current == gUnknown_83CC304[selection] - 1) - sOptionsMenu->option[selection] = 0; + current = sOptionsMenu->option[(sOptionsMenu->unkE)]; + if (current == (gUnknown_83CC304[sOptionsMenu->unkE] - 1)) + sOptionsMenu->option[sOptionsMenu->unkE] = 0; else - sOptionsMenu->option[selection] = current + 1; + sOptionsMenu->option[sOptionsMenu->unkE] = current + 1; if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) return 2; else @@ -364,12 +570,12 @@ static u8 sub_80888C0(void) } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - selection = 2*sOptionsMenu->unkE; - current = sOptionsMenu->option[selection]; - if (current == 0) - sOptionsMenu->option[selection] = gUnknown_83CC304[selection] - 1; + curr = &sOptionsMenu->option[sOptionsMenu->unkE]; + if (*curr == 0) + *curr = gUnknown_83CC304[sOptionsMenu->unkE] - 1; else - sOptionsMenu->option[selection] = current - 1; + --*(curr); + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) return 2; else @@ -377,20 +583,18 @@ static u8 sub_80888C0(void) } else if (gMain.newAndRepeatedKeys & DPAD_UP) { - selection = sOptionsMenu->unkE; - if (selection == MENUITEM_TEXTSPEED) + if (sOptionsMenu->unkE == MENUITEM_TEXTSPEED) sOptionsMenu->unkE = MENUITEM_CANCEL; else - sOptionsMenu->unkE = selection - 1; + sOptionsMenu->unkE = sOptionsMenu->unkE - 1; return 3; } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - selection = sOptionsMenu->unkE; - if (selection == MENUITEM_CANCEL) + if (sOptionsMenu->unkE == MENUITEM_CANCEL) sOptionsMenu->unkE = MENUITEM_TEXTSPEED; else - sOptionsMenu->unkE = selection + 1; + sOptionsMenu->unkE = sOptionsMenu->unkE + 1; return 3; } else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) @@ -403,85 +607,22 @@ static u8 sub_80888C0(void) } } -/* -// must match with goto :( -bool sub_80888C0() -{ - int v0; // r0@2 - _WORD *v1; // r3@2 - int v2; // r4@2 - __int16 v3; // r0@3 - int v4; // r3@8 - __int16 v5; // r0@8 - int v7; // r1@14 - signed __int16 v8; // r0@15 - int v9; // r0@18 - - if (gMain.buttons4_new_and_keyrepeat & DPAD_RIGHT) - { - v0 = 2 * *(_WORD *)(sOptionsMenu + 14); - v1 = (_WORD *)(sOptionsMenu + v0); - v2 = *(_WORD *)(sOptionsMenu + v0); - if ( v2 == *(_WORD *)((char *)&sOptionsMenuItemCounts + v0) - 1 ) - v3 = 0; - else - v3 = v2 + 1; - *v1 = v3; - if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) - return 4; - return 2; - } - if ( gMain.buttons4_new_and_keyrepeat & DPAD_LEFT ) - { - v4 = 2 * *(_WORD *)(sOptionsMenu + 14); - v5 = *(_WORD *)(sOptionsMenu + v4); - if ( !*(_WORD *)(sOptionsMenu + v4) ) - v5 = *(_WORD *)((char *)&sOptionsMenuItemCounts + v4); - *(_WORD *)(sOptionsMenu + v4) = v5 - 1; - if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) - return 4; - return 2; - } - if ( gMain.buttons4_new_and_keyrepeat & 0x40 ) - { - v7 = sOptionsMenu; - if ( *(_WORD *)(sOptionsMenu + 14) ) - v8 = *(_WORD *)(sOptionsMenu + 14) - 1; - else - v8 = 6; - goto LABEL_21; - } - if ( gMain.buttons4_new_and_keyrepeat & 0x80 ) - { - v7 = sOptionsMenu; - v9 = *(_WORD *)(sOptionsMenu + 14); - if ( v9 == 6 ) - { - *(_WORD *)(sOptionsMenu + 14) = 0; - return 3; - } - v8 = v9 + 1; -LABEL_21: - *(_WORD *)(v7 + 14) = v8; - return 3; - } - return gMain.buttons3_new_remapped & 2 || gMain.buttons3_new_remapped & 1; -} -*/ - //sub_80889A8 +#ifdef NONMATCHING // could not get it to match perfectly, no idea how they put so many vars on the stack static void sub_80889A8(u8 selection) { u8* dst; u8* str; - u8* v8; + u8* v8; u8 x, y; + u8** col; - x = 0x82; - memcpy(dst, gUnknown_83CC363, 3); + memcpy(&dst, gUnknown_83CC363, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; + x = 0x82; FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + switch (selection) { case MENUITEM_TEXTSPEED: @@ -501,7 +642,7 @@ static void sub_80889A8(u8 selection) break; case MENUITEM_FRAMETYPE: StringCopy(str, gUnknown_8419E52); - ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); break; @@ -511,6 +652,173 @@ static void sub_80889A8(u8 selection) PutWindowTilemap(1); CopyWindowToVram(1, 3); } +#else +NAKED +static void sub_80889A8(u8 selection) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x30\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadd r4, sp, 0x2C\n" + "\tldr r1, _08088A08 @ =gUnknown_83CC363\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0x3\n" + "\tbl memcpy\n" + "\tmovs r0, 0x82\n" + "\tmov r8, r0\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tbl GetFontAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tsubs r0, 0x1\n" + "\tmuls r0, r5\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tbl GetFontAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmovs r1, 0x46\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x82\n" + "\tadds r3, r7, 0\n" + "\tbl FillWindowPixelRect\n" + "\tadds r6, r4, 0\n" + "\tcmp r5, 0x5\n" + "\tbhi _08088ADE\n" + "\tlsls r0, r5, 2\n" + "\tldr r1, _08088A0C @ =_08088A10\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08088A08: .4byte gUnknown_83CC363\n" + "_08088A0C: .4byte _08088A10\n" + "\t.align 2, 0\n" + "_08088A10:\n" + "\t.4byte _08088A28\n" + "\t.4byte _08088A38\n" + "\t.4byte _08088A48\n" + "\t.4byte _08088A58\n" + "\t.4byte _08088A68\n" + "\t.4byte _08088A9C\n" + "_08088A28:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A34 @ =gUnknown_83CC330\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A34: .4byte gUnknown_83CC330\n" + "_08088A38:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A44 @ =gUnknown_83CC33C\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A44: .4byte gUnknown_83CC33C\n" + "_08088A48:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A54 @ =gUnknown_83CC344\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A54: .4byte gUnknown_83CC344\n" + "_08088A58:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A64 @ =gUnknown_83CC34C\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A64: .4byte gUnknown_83CC34C\n" + "_08088A68:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A94 @ =gUnknown_83CC354\n" + "_08088A72:\n" + "\tldr r0, _08088A98 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0]\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tldr r0, [r0]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x2\n" + "\tmov r2, r8\n" + "\tadds r3, r7, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "\tb _08088ADE\n" + "\t.align 2, 0\n" + "_08088A94: .4byte gUnknown_83CC354\n" + "_08088A98: .4byte sOptionsMenu\n" + "_08088A9C:\n" + "\tldr r1, _08088AF8 @ =gUnknown_8419E52\n" + "\tadd r0, sp, 0xC\n" + "\tbl StringCopy\n" + "\tadd r4, sp, 0x20\n" + "\tldr r0, _08088AFC @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tadds r1, 0x1\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0x1\n" + "\tmovs r3, 0x2\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadd r0, sp, 0xC\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0x3\n" + "\tbl StringAppendN\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tadd r0, sp, 0xC\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x2\n" + "\tmov r2, r8\n" + "\tadds r3, r7, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "_08088ADE:\n" + "\tmovs r0, 0x1\n" + "\tbl PutWindowTilemap\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x3\n" + "\tbl CopyWindowToVram\n" + "\tadd sp, 0x30\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08088AF8: .4byte gUnknown_8419E52\n" + "_08088AFC: .4byte sOptionsMenu\n"); +} +#endif //sub_8088B00 @@ -520,20 +828,20 @@ static void sub_8088B00(u8 taskId) SetMainCallback2(gMain.savedCallback); FreeAllWindowBuffers(); - gSaveBlock2Ptr->optionsTextSpeed = sOptionsMenu->option[MENUITEM_TEXTSPEED] & 0x7; - gSaveBlock2Ptr->optionsBattleSceneOff = sOptionsMenu->option[MENUITEM_BATTLESCENE] & 0x1; - gSaveBlock2Ptr->optionsBattleStyle = sOptionsMenu->option[MENUITEM_BATTLESTYLE] & 0x1; - gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND] & 0x1; - gSaveBlock2Ptr->optionsButtonMode = sOptionsMenu->option[MENUITEM_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = sOptionsMenu->option[MENUITEM_FRAMETYPE]; - + gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenu->option[MENUITEM_TEXTSPEED]; + gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenu->option[MENUITEM_BATTLESCENE]; + gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenu->option[MENUITEM_BATTLESTYLE]; + gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND]; + gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenu->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenu->option[MENUITEM_FRAMETYPE]; SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); - Free(sOptionsMenu); + Free(sOptionsMenu); sOptionsMenu = NULL; - DestroyTask(taskId); + DestroyTask(taskId); } - + + //sub_8088BD0 static void sub_8088BD0(void) { @@ -545,24 +853,28 @@ static void sub_8088BD0(void) //sub_8088C0C +//double check static void sub_8088C0C(void) { + u8 h; + h = 2; + FillBgTilemapBufferRect(1, 0x1B3, 1, 2, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); - FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, 2, 3); - FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, 2, 3); - FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); - FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, 2); - FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, 2); - FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, 2); - FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, 2); - FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, h); + FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, h); + FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, h); + FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, h); + FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, h); CopyBgTilemapBufferToVram(1); } @@ -571,20 +883,25 @@ static void sub_8088C0C(void) static void sub_8088D8C(void) { int i; - u8 attr; + u8 y; FillWindowPixelBuffer(1, 0x11); for (i = 0; i < MENUITEM_COUNT; i++) { - attr = (((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))*i) + 2) - i; - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, attr, 0xFF, 0); + //AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); + //gets registers right, but an lsl/lsr 0x18 after GetFontAttribute that shouldn't be there + y = i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + y += 2; + y -= i; + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, y, 0xFF, 0); + } } //sub_8088DE0 -static void sub_8088DE0(u8 selection) +static void sub_8088DE0(u16 selection) { u8 attr; attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); |