diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-12-23 21:26:28 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-23 21:26:28 -0600 |
commit | 30c77aa4ca5502b07a9ccdf2012a7da265e8bffa (patch) | |
tree | 1e3119fbe79abf3c211d65a1832e56f9f8ed9408 | |
parent | aa13f45ebb79aed62171fbfe654d8b542fc9aa6c (diff) | |
parent | 8c1aac3746bd2599014579428878645f4f38f2fd (diff) |
Merge pull request #499 from camthesaxman/fix_nonmatching
fix some nonmatching functions
-rw-r--r-- | include/region_map.h | 8 | ||||
-rw-r--r-- | src/debug/matsuda_debug_menu.c | 229 | ||||
-rw-r--r-- | src/pokemon/pokemon_summary_screen.c | 253 | ||||
-rw-r--r-- | src/pokenav_before.c | 677 | ||||
-rw-r--r-- | src/script_pokemon_util_80C4BF0.c | 281 | ||||
-rw-r--r-- | src/script_pokemon_util_80F99CC.c | 144 |
6 files changed, 211 insertions, 1381 deletions
diff --git a/include/region_map.h b/include/region_map.h index 4061c5e3d..254307052 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -4,10 +4,10 @@ struct RegionMap { u8 mapSectionName[20]; - u16 mapSectionId; - u8 unk16; - u8 everGrandeCityArea; - u8 (*inputCallback)(void); + /*0x14*/ u16 mapSectionId; + /*0x16*/ u8 unk16; + /*0x17*/ u8 everGrandeCityArea; + /*0x18*/ u8 (*inputCallback)(void); struct Sprite *cursorSprite; struct Sprite *playerIconSprite; s32 bg2x; diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 728562b81..d797e8850 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -18,9 +18,9 @@ #include "ewram.h" extern u8 gUnknown_0203856C; -extern u16 gUnknown_02038670[]; -extern u16 gUnknown_02038678[]; -extern u16 gUnknown_02038680[]; +extern s16 gUnknown_02038670[]; +extern s16 gUnknown_02038678[]; +extern s16 gUnknown_02038680[]; extern u8 gContestFinalStandings[]; extern u8 gUnknown_02038694; extern u8 gIsLinkContest; @@ -922,211 +922,40 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2) } } -//Do this later -/* void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) { - u32 r5; - u16 r7; - u8 r7_2; - //u32 sp44; - //u32 sp48; - u32 sp58; + u16 len; + u8 r7; + s32 i; + u8 sp0[32]; + u8 sp20[32]; + u8 str2[2]; - gMain.state = 0; + DmaClear32(3, (void *)(VRAM + 0x18000 - (d + 1) * 256), 0x100); - r5 = d + 1; - //Could also be DmaClear32 - DmaFill32(3, 0, (u8 *)VRAM + 0x18000 - r5 * 256, 0x100); + len = StringLength(string); + if (len > 8) + len = 8; - r7 = StringLength(string); - if (r7 > 8) - r7 = 8; - sp58 = d * 2; + for (i = 0; i < len; i++) + { + str2[0] = string[i]; + str2[1] = EOS; + sub_80034D4(sp0, str2); + DmaCopy32Defvars(3, sp20, (void *)(VRAM + 0x18000 - (d + 1) * 256 + i * 32), sizeof(sp0)); + } - //More stuff + r7 = 124 - d * 2; - r7_2 = 0x7C - sp58; + gMain.oamBuffer[r7] = gUnknown_083C9400; + gMain.oamBuffer[r7].tileNum = 1024 - (d + 1) * 8; + gMain.oamBuffer[r7].x = b; + gMain.oamBuffer[r7].y = c; -} -*/ - -__attribute__((naked)) -void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x64\n\ - mov r9, r0\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - str r1, [sp, 0x48]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - str r2, [sp, 0x4C]\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r10, r3\n\ - mov r5, r10\n\ - adds r5, 0x1\n\ - lsls r1, r5, 8\n\ - ldr r0, _080AAEC4 @ =0x06018000\n\ - subs r1, r0, r1\n\ - movs r0, 0\n\ - str r0, [sp, 0x44]\n\ - ldr r4, _080AAEC8 @ =0x040000d4\n\ - add r0, sp, 0x44\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - ldr r0, _080AAECC @ =0x85000040\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - mov r0, r9\n\ - bl StringLength\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - cmp r7, 0x8\n\ - bls _080AADD0\n\ - movs r7, 0x8\n\ -_080AADD0:\n\ - movs r6, 0\n\ - mov r8, r5\n\ - mov r1, r10\n\ - lsls r1, 1\n\ - str r1, [sp, 0x58]\n\ - ldr r2, [sp, 0x48]\n\ - adds r2, 0x20\n\ - str r2, [sp, 0x5C]\n\ - cmp r6, r7\n\ - bge _080AAE1E\n\ - add r5, sp, 0x40\n\ - add r0, sp, 0x20\n\ - mov r10, r0\n\ - ldr r2, _080AAEC4 @ =0x06018000\n\ -_080AADEC:\n\ - mov r1, r9\n\ - adds r0, r1, r6\n\ - ldrb r0, [r0]\n\ - strb r0, [r5]\n\ - movs r0, 0xFF\n\ - strb r0, [r5, 0x1]\n\ - mov r0, sp\n\ - adds r1, r5, 0\n\ - str r2, [sp, 0x60]\n\ - bl sub_80034D4\n\ - mov r1, r8\n\ - lsls r0, r1, 8\n\ - ldr r2, [sp, 0x60]\n\ - subs r0, r2, r0\n\ - mov r1, r10\n\ - str r1, [r4]\n\ - str r0, [r4, 0x4]\n\ - ldr r0, _080AAED0 @ =0x84000008\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - adds r2, 0x20\n\ - adds r6, 0x1\n\ - cmp r6, r7\n\ - blt _080AADEC\n\ -_080AAE1E:\n\ - movs r1, 0x7C\n\ - ldr r2, [sp, 0x58]\n\ - subs r1, r2\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - ldr r0, _080AAED4 @ =gMain\n\ - mov r9, r0\n\ - lsls r3, r7, 3\n\ - add r3, r9\n\ - ldr r0, _080AAED8 @ =gUnknown_083C9400\n\ - ldr r1, [r0]\n\ - ldr r2, [r0, 0x4]\n\ - str r1, [sp, 0x50]\n\ - str r2, [sp, 0x54]\n\ - str r1, [r3, 0x3C]\n\ - str r2, [r3, 0x40]\n\ - mov r2, r8\n\ - lsls r0, r2, 3\n\ - movs r1, 0x80\n\ - lsls r1, 3\n\ - adds r2, r1, 0\n\ - subs r2, r0\n\ - adds r6, r3, 0\n\ - adds r6, 0x40\n\ - ldr r0, _080AAEDC @ =0x000003ff\n\ - mov r8, r0\n\ - mov r1, r8\n\ - ands r2, r1\n\ - ldrh r5, [r6]\n\ - ldr r4, _080AAEE0 @ =0xfffffc00\n\ - adds r0, r4, 0\n\ - ands r0, r5\n\ - orrs r0, r2\n\ - strh r0, [r6]\n\ - ldrh r5, [r3, 0x3E]\n\ - ldr r2, _080AAEE4 @ =0xfffffe00\n\ - adds r0, r2, 0\n\ - ands r0, r5\n\ - ldr r1, [sp, 0x48]\n\ - orrs r0, r1\n\ - strh r0, [r3, 0x3E]\n\ - adds r3, 0x3C\n\ - add r0, sp, 0x4C\n\ - ldrb r0, [r0]\n\ - strb r0, [r3]\n\ - adds r1, r7, 0x1\n\ - lsls r1, 3\n\ - mov r0, r9\n\ - adds r7, r1, r0\n\ - ldr r0, [sp, 0x50]\n\ - ldr r1, [sp, 0x54]\n\ - str r0, [r7, 0x3C]\n\ - str r1, [r7, 0x40]\n\ - ldrh r0, [r6]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r0, 0x4\n\ - adds r5, r7, 0\n\ - adds r5, 0x40\n\ - mov r1, r8\n\ - ands r0, r1\n\ - ldrh r3, [r5]\n\ - ands r4, r3\n\ - orrs r4, r0\n\ - strh r4, [r5]\n\ - ldrh r0, [r7, 0x3E]\n\ - ands r2, r0\n\ - ldr r0, [sp, 0x5C]\n\ - orrs r2, r0\n\ - strh r2, [r7, 0x3E]\n\ - adds r1, r7, 0\n\ - adds r1, 0x3C\n\ - add r2, sp, 0x4C\n\ - ldrb r2, [r2]\n\ - strb r2, [r1]\n\ - add sp, 0x64\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080AAEC4: .4byte 0x06018000\n\ -_080AAEC8: .4byte 0x040000d4\n\ -_080AAECC: .4byte 0x85000040\n\ -_080AAED0: .4byte 0x84000008\n\ -_080AAED4: .4byte gMain\n\ -_080AAED8: .4byte gUnknown_083C9400\n\ -_080AAEDC: .4byte 0x000003ff\n\ -_080AAEE0: .4byte 0xfffffc00\n\ -_080AAEE4: .4byte 0xfffffe00\n\ - .syntax divided\n"); + gMain.oamBuffer[r7 + 1] = gUnknown_083C9400; + gMain.oamBuffer[r7 + 1].tileNum = gMain.oamBuffer[r7].tileNum + 4; + gMain.oamBuffer[r7 + 1].x = b + 32; + gMain.oamBuffer[r7 + 1].y = c; } void unref_sub_80AAEE8(s32 a, u8 b, u8 c, u8 d) diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 4de5f5345..cd3793cb5 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1167,13 +1167,13 @@ static void sub_809E5C4(void) struct Pokemon *pkmn = &party[pssData.monIndex]; u8 moveIndex1 = pssData.selectedMoveIndex; u8 moveIndex2 = pssData.switchMoveIndex; - + u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); u8 move1pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1); u8 move2pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2); u8 ppBonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES); - + // Calculate PP bonuses u8 r9 = gUnknown_08208238[moveIndex1]; u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); @@ -1182,7 +1182,7 @@ static void sub_809E5C4(void) ppBonuses &= ~r9; ppBonuses &= ~r3; ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); - + // Swap the moves SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); @@ -1197,13 +1197,13 @@ static void sub_809E6D8(void) struct BoxPokemon *pkmn = &boxMons[pssData.monIndex]; u8 moveIndex1 = pssData.selectedMoveIndex; u8 moveIndex2 = pssData.switchMoveIndex; - + u16 move1 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); u16 move2 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); u8 move1pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1); u8 move2pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2); u8 ppBonuses = GetBoxMonData(pkmn, MON_DATA_PP_BONUSES); - + // Calculate PP bonuses u8 r9 = gUnknown_08208238[moveIndex1]; u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); @@ -1212,7 +1212,7 @@ static void sub_809E6D8(void) ppBonuses &= ~r9; ppBonuses &= ~r3; ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); - + // Swap the moves SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); @@ -2078,7 +2078,7 @@ s8 sub_809F344(u8 partyIndex) { while (1) { - partyIndex++; + partyIndex++; if (partyIndex == PARTY_SIZE) { return -1; @@ -2100,7 +2100,7 @@ s8 sub_809F388(u8 partyIndex) return -1; } - partyIndex--; + partyIndex--; if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE) { return sDoubleBattlePartyOrder[partyIndex]; @@ -2332,7 +2332,7 @@ static bool8 sub_809F7D0(u8 taskId) u16 move; sub_809F678(&mon); - move = GetMonMove(&mon, pssData.selectedMoveIndex); + move = GetMonMove(&mon, pssData.selectedMoveIndex); if (IsHMMove(move) == TRUE && pssData.mode != PSS_MODE_UNKNOWN) { return FALSE; @@ -2341,17 +2341,13 @@ static bool8 sub_809F7D0(u8 taskId) return TRUE; } -#ifdef NONMATCHING // The two "pssData.selectedMoveIndex = taskData[15];" lines have small register differences. void sub_809F814(u8 taskId) { - u16 var1; - s16 *taskData = gTasks[taskId].data; - var1 = taskData[14]; if (taskData[14] < 4) { - taskData[14] = var1 + 1; + taskData[14]++; } else if (gMain.newKeys & DPAD_UP) { @@ -2359,7 +2355,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; pssData.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, -1); + sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { @@ -2367,7 +2363,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; pssData.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, 1); + sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { @@ -2410,229 +2406,6 @@ void sub_809F814(u8 taskId) } } -#else -__attribute__((naked)) -void sub_809F814(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r6, r0, 3\n\ - ldr r0, _0809F83C @ =gTasks + 0x8\n\ - mov r8, r0\n\ - adds r4, r6, r0\n\ - ldrh r1, [r4, 0x1C]\n\ - movs r2, 0x1C\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0x3\n\ - bgt _0809F840\n\ - adds r0, r1, 0x1\n\ - strh r0, [r4, 0x1C]\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F83C: .4byte gTasks + 0x8\n\ -_0809F840:\n\ - ldr r7, _0809F874 @ =gMain\n\ - ldrh r1, [r7, 0x2E]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0809F880\n\ - mov r0, r8\n\ - subs r0, 0x8\n\ - adds r0, r6, r0\n\ - ldr r1, _0809F878 @ =sub_809E260\n\ - str r1, [r0]\n\ - movs r0, 0x4\n\ - strh r0, [r4]\n\ - movs r0, 0x1\n\ - strh r0, [r4, 0x1A]\n\ - ldr r2, _0809F87C @ =gSharedMem + 0x18000\n\ - ldrh r0, [r4, 0x1E]\n\ - adds r2, 0x79\n\ - strb r0, [r2]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - adds r0, r5, 0\n\ - bl sub_809E8F0\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F874: .4byte gMain\n\ -_0809F878: .4byte sub_809E260\n\ -_0809F87C: .4byte gSharedMem + 0x18000\n\ -_0809F880:\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0809F8B4\n\ - mov r0, r8\n\ - subs r0, 0x8\n\ - adds r0, r6, r0\n\ - ldr r1, _0809F8AC @ =sub_809E260\n\ - str r1, [r0]\n\ - movs r0, 0x4\n\ - strh r0, [r4]\n\ - movs r0, 0x1\n\ - strh r0, [r4, 0x1A]\n\ - ldr r2, _0809F8B0 @ =gSharedMem + 0x18000\n\ - ldrh r0, [r4, 0x1E]\n\ - adds r2, 0x79\n\ - strb r0, [r2]\n\ - adds r0, r5, 0\n\ - movs r1, 0x1\n\ - bl sub_809E8F0\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F8AC: .4byte sub_809E260\n\ -_0809F8B0: .4byte gSharedMem + 0x18000\n\ -_0809F8B4:\n\ - movs r0, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0809F8C8\n\ - bl sub_80F9284\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0809F918\n\ -_0809F8C8:\n\ - ldr r1, _0809F90C @ =gSharedMem + 0x18000\n\ - ldrb r0, [r1, 0xB]\n\ - cmp r0, 0x2\n\ - beq _0809F9C0\n\ - cmp r0, 0x3\n\ - bne _0809F8F4\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bne _0809F8E8\n\ - adds r0, r1, 0\n\ - adds r0, 0x7C\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _0809F8F4\n\ -_0809F8E8:\n\ - movs r0, 0\n\ - movs r1, 0xE\n\ - movs r2, 0x9\n\ - movs r3, 0x12\n\ - bl MenuZeroFillWindowRect\n\ -_0809F8F4:\n\ - ldr r1, _0809F910 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0809F914 @ =sub_809E260\n\ - str r1, [r0]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - adds r0, r5, 0\n\ - b _0809F972\n\ - .align 2, 0\n\ -_0809F90C: .4byte gSharedMem + 0x18000\n\ -_0809F910: .4byte gTasks\n\ -_0809F914: .4byte sub_809E260\n\ -_0809F918:\n\ - ldrh r1, [r7, 0x2E]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0809F92E\n\ - bl sub_80F9284\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bne _0809F994\n\ -_0809F92E:\n\ - ldr r1, _0809F988 @ =gSharedMem + 0x18000\n\ - adds r2, r1, 0\n\ - adds r2, 0x76\n\ - ldrb r0, [r1, 0xB]\n\ - ldrb r2, [r2]\n\ - cmp r0, r2\n\ - beq _0809F9C0\n\ - cmp r0, 0x2\n\ - bne _0809F960\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bne _0809F954\n\ - adds r0, r1, 0\n\ - adds r0, 0x7C\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _0809F960\n\ -_0809F954:\n\ - movs r0, 0\n\ - movs r1, 0xE\n\ - movs r2, 0x9\n\ - movs r3, 0x12\n\ - bl MenuZeroFillWindowRect\n\ -_0809F960:\n\ - ldr r1, _0809F98C @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0809F990 @ =sub_809E260\n\ - str r1, [r0]\n\ - adds r0, r5, 0\n\ - movs r1, 0x1\n\ -_0809F972:\n\ - bl SummaryScreenHandleLeftRightInput\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x1\n\ - bl sub_80A1488\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x1\n\ - bl sub_80A1654\n\ - b _0809F9C0\n\ - .align 2, 0\n\ -_0809F988: .4byte gSharedMem + 0x18000\n\ -_0809F98C: .4byte gTasks\n\ -_0809F990: .4byte sub_809E260\n\ -_0809F994:\n\ - ldrh r1, [r7, 0x2E]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0809F9A6\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0809F9C0\n\ -_0809F9A6:\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x2\n\ - bl sub_80A1488\n\ - ldrb r1, [r4, 0x1E]\n\ - movs r0, 0x2\n\ - bl sub_80A1654\n\ - mov r0, r8\n\ - subs r0, 0x8\n\ - adds r0, r6, r0\n\ - ldr r1, _0809F9CC @ =sub_809E260\n\ - str r1, [r0]\n\ -_0809F9C0:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0809F9CC: .4byte sub_809E260\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - static void sub_809F9D0(u8 taskId, u8 b) { s16 *taskData = gTasks[taskId].data; @@ -3012,7 +2785,7 @@ static void sub_80A015C(struct Pokemon *mon) sub_80A1FF8(gMoveNames[move], 13, 15, (2 * i) + 4); GetStringCenterAlignXOffset(1, 24, (2 * i) + 4); - + ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); maxPP = CalculatePPWithBonus(move, ppBonuses, i); diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 6e83c6f97..7693cba7d 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -308,7 +308,7 @@ void sub_80EBA5C() { gMain.state++; SetMainCallback2(&sub_80EBBE8); break; - } + } break; case 1: SetVBlankCallback(NULL); @@ -331,7 +331,7 @@ void sub_80EBA5C() { case 7: sub_80F1A90(); gMain.state++; - case 8: + case 8: if (sub_80F1AC4()) return; break; case 9: @@ -535,7 +535,7 @@ void sub_80EBDD8() { sub_80EBDBC(&sub_80EC268); } return; - + } } @@ -584,7 +584,7 @@ void sub_80EC00C() { ewram0_10.var304++; return; case 9: - sub_80F2598(); + sub_80F2598(); ewram0_10.var304++; break; case 10: @@ -3479,8 +3479,6 @@ void sub_80EF840(void) } } -// The only non-matching part is the gSaveBlock2.regionMapZoom access. -#ifdef NONMATCHING bool8 sub_80EF874(void) { switch (gUnknown_083DFEC4->unkD160) @@ -3504,7 +3502,7 @@ bool8 sub_80EF874(void) MenuZeroFillScreen(); break; case 5: - sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom); + sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom ? TRUE : FALSE); break; case 6: if (sub_80FA940()) @@ -3552,501 +3550,75 @@ bool8 sub_80EF874(void) gUnknown_083DFEC4->unkD160++; return TRUE; } -#else -asm(".include \"constants/gba_constants.inc\"\n"); -__attribute__((naked)) -bool8 sub_80EF874(void) -{ - asm(".syntax unified\n\ - push {lr}\n\ - ldr r0, _080EF890 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r1, _080EF894 @ =0x0000d160\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xB\n\ - bls _080EF886\n\ - b _080EF9D8\n\ -_080EF886:\n\ - lsls r0, 2\n\ - ldr r1, _080EF898 @ =_080EF89C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080EF890: .4byte gUnknown_083DFEC4\n\ -_080EF894: .4byte 0x0000d160\n\ -_080EF898: .4byte _080EF89C\n\ - .align 2, 0\n\ -_080EF89C:\n\ - .4byte _080EF8CC\n\ - .4byte _080EF8D2\n\ - .4byte _080EF8E0\n\ - .4byte _080EF8EC\n\ - .4byte _080EF8F6\n\ - .4byte _080EF8FC\n\ - .4byte _080EF920\n\ - .4byte _080EF92C\n\ - .4byte _080EF940\n\ - .4byte _080EF954\n\ - .4byte _080EF960\n\ - .4byte _080EF972\n\ -_080EF8CC:\n\ - bl sub_80EEDE8\n\ - b _080EF9DC\n\ -_080EF8D2:\n\ - ldr r0, _080EF8DC @ =gWindowConfig_81E7224\n\ - bl SetUpWindowConfig\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF8DC: .4byte gWindowConfig_81E7224\n\ -_080EF8E0:\n\ - ldr r0, _080EF8E8 @ =gWindowConfig_81E7224\n\ - bl MultistepInitMenuWindowBegin\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF8E8: .4byte gWindowConfig_81E7224\n\ -_080EF8EC:\n\ - bl MultistepInitMenuWindowContinue\n\ - cmp r0, 0\n\ - bne _080EF9DC\n\ - b _080EF9EA\n\ -_080EF8F6:\n\ - bl MenuZeroFillScreen\n\ - b _080EF9DC\n\ -_080EF8FC:\n\ - ldr r0, _080EF914 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r2, _080EF918 @ =0x00006e18\n\ - adds r0, r2\n\ - ldr r1, _080EF91C @ =gSaveBlock2\n\ - ldrb r1, [r1, 0x15]\n\ - lsrs r1, 3\n\ - movs r2, 0x1\n\ - ands r1, r2\n\ - bl sub_80FA904\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF914: .4byte gUnknown_083DFEC4\n\ -_080EF918: .4byte 0x00006e18\n\ -_080EF91C: .4byte gSaveBlock2\n\ -_080EF920:\n\ - bl sub_80FA940\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080EF9DC\n\ - b _080EF9EA\n\ -_080EF92C:\n\ - ldr r0, _080EF938 @ =gPokenavHoennMapSquares_Gfx\n\ - ldr r1, _080EF93C @ =0x06005000\n\ - bl LZ77UnCompVram\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF938: .4byte gPokenavHoennMapSquares_Gfx\n\ -_080EF93C: .4byte 0x06005000\n\ -_080EF940:\n\ - ldr r0, _080EF950 @ =gPokenavHoennMapSquares_Pal\n\ - movs r1, 0x30\n\ - movs r2, 0x20\n\ - bl LoadPalette\n\ - bl sub_80EFC3C\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF950: .4byte gPokenavHoennMapSquares_Pal\n\ -_080EF954:\n\ - bl sub_80EFC64\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080EF9DC\n\ - b _080EF9EA\n\ -_080EF960:\n\ - movs r0, 0xD\n\ - movs r1, 0x3\n\ - movs r2, 0x1D\n\ - movs r3, 0x11\n\ - bl MenuDrawTextWindow\n\ - bl sub_80EF9F8\n\ - b _080EF9DC\n\ -_080EF972:\n\ - ldr r0, _080EF990 @ =gUnknown_083DFEC4\n\ - ldr r1, [r0]\n\ - ldr r2, _080EF994 @ =0x00006e90\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080EF9A0\n\ - ldr r2, _080EF998 @ =0x00007698\n\ - adds r0, r1, r2\n\ - movs r1, 0xA0\n\ - strh r1, [r0]\n\ - ldr r0, _080EF99C @ =REG_BG0VOFS\n\ - strh r1, [r0]\n\ - b _080EF9B0\n\ - .align 2, 0\n\ -_080EF990: .4byte gUnknown_083DFEC4\n\ -_080EF994: .4byte 0x00006e90\n\ -_080EF998: .4byte 0x00007698\n\ -_080EF99C: .4byte REG_BG0VOFS\n\ -_080EF9A0:\n\ - ldr r0, _080EF9C8 @ =0x00007698\n\ - adds r1, r0\n\ - movs r2, 0\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - strh r0, [r1]\n\ - ldr r0, _080EF9CC @ =REG_BG0VOFS\n\ - strh r2, [r0]\n\ -_080EF9B0:\n\ - ldr r2, _080EF9D0 @ =REG_BG0CNT\n\ - ldrh r0, [r2]\n\ - strh r0, [r2]\n\ - ldrh r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strh r0, [r2]\n\ - ldr r1, _080EF9D4 @ =REG_BLDCNT\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - b _080EF9DC\n\ - .align 2, 0\n\ -_080EF9C8: .4byte 0x00007698\n\ -_080EF9CC: .4byte REG_BG0VOFS\n\ -_080EF9D0: .4byte REG_BG0CNT\n\ -_080EF9D4: .4byte REG_BLDCNT\n\ -_080EF9D8:\n\ - movs r0, 0\n\ - b _080EF9EC\n\ -_080EF9DC:\n\ - ldr r0, _080EF9F0 @ =gUnknown_083DFEC4\n\ - ldr r1, [r0]\n\ - ldr r2, _080EF9F4 @ =0x0000d160\n\ - adds r1, r2\n\ - ldrh r0, [r1]\n\ - adds r0, 0x1\n\ - strh r0, [r1]\n\ -_080EF9EA:\n\ - movs r0, 0x1\n\ -_080EF9EC:\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080EF9F0: .4byte gUnknown_083DFEC4\n\ -_080EF9F4: .4byte 0x0000d160\n\ - .syntax divided\n"); -} -#endif // NONMATCHING +asm(".include \"constants/gba_constants.inc\"\n"); -#ifdef NONMATCHING void sub_80EF9F8(void) { - s32 zero; - u16 i; - u8 *mapSectionName; - u32 offset; + bool8 someBool = FALSE; + u16 top = 4; u16 mapSectionId; u8 b; - u8 **pointer; - u16 var1 = 4; - switch (gUnknown_083DFEC4->regionMap.unk16) { + case 0: + break; case 1: case 4: - sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1); + top += 2; if (gLinkOpen == TRUE) { sub_80F1A80(); + someBool = TRUE; } else { - i = 0; - while (i < 4 && (mapSectionName = GetLandmarkName(gUnknown_083DFEC4->regionMap.mapSectionId, gUnknown_083DFEC4->regionMap.everGrandeCityArea, i)) != NULL) - { - sub_8072A18(mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - i++; - } - - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) - { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); - } + u16 i; + + for (i = 0; i < 4; i++) + { + const u8 *secName = GetLandmarkName( + gUnknown_083DFEC4->regionMap.mapSectionId, + gUnknown_083DFEC4->regionMap.everGrandeCityArea, + i); + + if (secName == NULL) + break; + sub_8072A18(secName, 0x70, top * 8, 0x78, 1); + top += 2; + } } break; case 2: - sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1); + top += 2; mapSectionId = gUnknown_083DFEC4->regionMap.mapSectionId; - b = gUnknown_083DFEC4->regionMap.everGrandeCityArea; - offset = (b << 2) + (mapSectionId << 3); - pointer = (u8 **)((u8 *)&gUnknown_083DFEC4->unkCDCC + offset); - if (*pointer != NULL) - { - MenuFillWindowRectWithBlankTile(14, var1, 15, 15); - MenuFillWindowRectWithBlankTile(26, var1, 28, 15); - - sub_8095C8C((void *)VRAM + 0xF800, 16, 6, *pointer, 0, 0, 10, 10, 10); - - var1 += 11; - } - - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) + b = gUnknown_083DFEC4->regionMap.everGrandeCityArea; + if (gUnknown_083DFEC4->unkCDCC[mapSectionId][b] != NULL) { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); + MenuFillWindowRectWithBlankTile(14, top, 15, 15); + MenuFillWindowRectWithBlankTile(26, top, 28, 15); + sub_8095C8C((void *)(VRAM + 0xF800), 16, 6, gUnknown_083DFEC4->unkCDCC[mapSectionId][b], 0, 0, 10, 10, 10); + top += 11; } break; case 3: - sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); - var1 += 2; - - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) - { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); - } - break; - case 0: - default: - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (!zero && var1 < 16) - { - MenuFillWindowRectWithBlankTile(14, var1, 28, 15); - } + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1); + top += 2; break; } + // Epic fail by the compiler at optimizing this. + if (!someBool && top < 16) + MenuFillWindowRectWithBlankTile(14, top, 28, 15); + if (gUnknown_083DFEC4->regionMap.unk16 == 2) - { sub_80EFD74(); - } else - { sub_80EFDA0(); - } -} -#else -__attribute__((naked)) -void sub_80EF9F8(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x14\n\ - movs r5, 0x4\n\ - ldr r0, _080EFA18 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r1, _080EFA1C @ =0x00006e2e\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bls _080EFA0E\n\ - b _080EFB6A\n\ -_080EFA0E:\n\ - lsls r0, 2\n\ - ldr r1, _080EFA20 @ =_080EFA24\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080EFA18: .4byte gUnknown_083DFEC4\n\ -_080EFA1C: .4byte 0x00006e2e\n\ -_080EFA20: .4byte _080EFA24\n\ - .align 2, 0\n\ -_080EFA24:\n\ - .4byte _080EFB6A\n\ - .4byte _080EFA38\n\ - .4byte _080EFAC0\n\ - .4byte _080EFB4C\n\ - .4byte _080EFA38\n\ -_080EFA38:\n\ - ldr r0, _080EFA64 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r2, _080EFA68 @ =0x00006e18\n\ - adds r0, r2\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r1, 0x1\n\ - str r1, [sp]\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldr r0, _080EFA6C @ =gLinkOpen\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bne _080EFA70\n\ - bl sub_80F1A80\n\ - b _080EFB82\n\ - .align 2, 0\n\ -_080EFA64: .4byte gUnknown_083DFEC4\n\ -_080EFA68: .4byte 0x00006e18\n\ -_080EFA6C: .4byte gLinkOpen\n\ -_080EFA70:\n\ - movs r4, 0\n\ - b _080EFA92\n\ -_080EFA74:\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - adds r0, r1, 0\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080EFA92:\n\ - cmp r4, 0x3\n\ - bhi _080EFB6A\n\ - ldr r0, _080EFAB8 @ =gUnknown_083DFEC4\n\ - ldr r1, [r0]\n\ - ldr r2, _080EFABC @ =0x00006e2c\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - adds r2, 0x3\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - lsls r2, r4, 24\n\ - lsrs r2, 24\n\ - bl GetLandmarkName\n\ - adds r1, r0, 0\n\ - cmp r1, 0\n\ - bne _080EFA74\n\ - b _080EFB6A\n\ - .align 2, 0\n\ -_080EFAB8: .4byte gUnknown_083DFEC4\n\ -_080EFABC: .4byte 0x00006e2c\n\ -_080EFAC0:\n\ - ldr r0, _080EFB38 @ =gUnknown_083DFEC4\n\ - ldr r4, [r0]\n\ - ldr r1, _080EFB3C @ =0x00006e18\n\ - adds r0, r4, r1\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r1, 0x1\n\ - str r1, [sp]\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldr r2, _080EFB40 @ =0x00006e2c\n\ - adds r0, r4, r2\n\ - ldrh r1, [r0]\n\ - adds r2, 0x3\n\ - adds r0, r4, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - lsls r1, 3\n\ - adds r0, r1\n\ - ldr r1, _080EFB44 @ =0x0000cdcc\n\ - adds r4, r1\n\ - adds r6, r4, r0\n\ - ldr r0, [r6]\n\ - cmp r0, 0\n\ - beq _080EFB6A\n\ - lsls r4, r5, 24\n\ - lsrs r4, 24\n\ - movs r0, 0xE\n\ - adds r1, r4, 0\n\ - movs r2, 0xF\n\ - movs r3, 0xF\n\ - bl MenuFillWindowRectWithBlankTile\n\ - movs r0, 0x1A\n\ - adds r1, r4, 0\n\ - movs r2, 0x1C\n\ - movs r3, 0xF\n\ - bl MenuFillWindowRectWithBlankTile\n\ - ldr r0, _080EFB48 @ =0x0600f800\n\ - ldr r3, [r6]\n\ - movs r1, 0\n\ - str r1, [sp]\n\ - str r1, [sp, 0x4]\n\ - movs r1, 0xA\n\ - str r1, [sp, 0x8]\n\ - str r1, [sp, 0xC]\n\ - str r1, [sp, 0x10]\n\ - movs r1, 0x10\n\ - movs r2, 0x6\n\ - bl sub_8095C8C\n\ - adds r0, r5, 0\n\ - adds r0, 0xB\n\ - b _080EFB66\n\ - .align 2, 0\n\ -_080EFB38: .4byte gUnknown_083DFEC4\n\ -_080EFB3C: .4byte 0x00006e18\n\ -_080EFB40: .4byte 0x00006e2c\n\ -_080EFB44: .4byte 0x0000cdcc\n\ -_080EFB48: .4byte 0x0600f800\n\ -_080EFB4C:\n\ - ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r2, _080EFB9C @ =0x00006e18\n\ - adds r0, r2\n\ - lsls r2, r5, 19\n\ - lsrs r2, 16\n\ - movs r1, 0x1\n\ - str r1, [sp]\n\ - movs r1, 0x70\n\ - movs r3, 0x78\n\ - bl sub_8072A18\n\ - adds r0, r5, 0x2\n\ -_080EFB66:\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ -_080EFB6A:\n\ - movs r0, 0\n\ - cmp r0, 0\n\ - bne _080EFB82\n\ - cmp r5, 0xF\n\ - bhi _080EFB82\n\ - lsls r1, r5, 24\n\ - lsrs r1, 24\n\ - movs r0, 0xE\n\ - movs r2, 0x1C\n\ - movs r3, 0xF\n\ - bl MenuFillWindowRectWithBlankTile\n\ -_080EFB82:\n\ - ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - ldr r1, _080EFBA0 @ =0x00006e2e\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bne _080EFBA4\n\ - bl sub_80EFD74\n\ - b _080EFBA8\n\ - .align 2, 0\n\ -_080EFB98: .4byte gUnknown_083DFEC4\n\ -_080EFB9C: .4byte 0x00006e18\n\ -_080EFBA0: .4byte 0x00006e2e\n\ -_080EFBA4:\n\ - bl sub_80EFDA0\n\ -_080EFBA8:\n\ - add sp, 0x14\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); } -#endif // NONMATCHING void sub_80EFBB0(void) { @@ -4103,152 +3675,37 @@ void sub_80EFC3C(void) sub_80EFD3C(); } -#ifdef NONMATCHING // "var1 = gUnknown_083DFEC4->unkBC9A;" is the only thing that doesnt' match. bool8 sub_80EFC64(void) { u16 i; - u16 var1; + u8 var1; u16 var2; - if (gUnknown_083DFEC4->unkBC9A < 16) - { - var1 = gUnknown_083DFEC4->unkBC9A; - var2 = gUnknown_083DFEC4->unkBC9B; - for (i = 0; i < 2; i++) - { - if (gPokenavCityMaps[var1][i] != 0) - { - LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]); - gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2]; - var2++; - } - else - { - gUnknown_083DFEC4->unkCDCC[var1][i] = NULL; - } - } - - gUnknown_083DFEC4->unkBC9A++; - if (gUnknown_083DFEC4->unkBC9A < 16) - { - gUnknown_083DFEC4->unkBC9B = var2; - return TRUE; - } - } - - return FALSE; -} -#else -__attribute__((naked)) -bool8 sub_80EFC64(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x8\n\ - ldr r4, _080EFCD0 @ =gUnknown_083DFEC4\n\ - ldr r2, [r4]\n\ - ldr r0, _080EFCD4 @ =0x0000bc9a\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xF\n\ - bhi _080EFD2C\n\ - ldrb r1, [r1]\n\ - mov r8, r1\n\ - ldr r1, _080EFCD8 @ =0x0000bc9b\n\ - adds r0, r2, r1\n\ - ldrb r7, [r0]\n\ - movs r2, 0\n\ - ldr r0, _080EFCDC @ =gPokenavCityMaps\n\ - mov r9, r0\n\ - adds r3, r4, 0\n\ -_080EFC8E:\n\ - lsls r0, r2, 2\n\ - mov r4, r8\n\ - lsls r1, r4, 3\n\ - adds r6, r0, r1\n\ - mov r1, r9\n\ - adds r0, r6, r1\n\ - ldr r1, [r0]\n\ - cmp r1, 0\n\ - beq _080EFCE8\n\ - movs r0, 0xC8\n\ - adds r5, r7, 0\n\ - muls r5, r0\n\ - ldr r4, _080EFCE0 @ =0x0000bc9c\n\ - adds r5, r4\n\ - ldr r4, [r3]\n\ - adds r5, r4, r5\n\ - adds r0, r1, 0\n\ - adds r1, r5, 0\n\ - str r2, [sp]\n\ - str r3, [sp, 0x4]\n\ - bl LZ77UnCompVram\n\ - ldr r0, _080EFCE4 @ =0x0000cdcc\n\ - adds r4, r0\n\ - adds r4, r6\n\ - str r5, [r4]\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - ldr r2, [sp]\n\ - ldr r3, [sp, 0x4]\n\ - b _080EFCF2\n\ - .align 2, 0\n\ -_080EFCD0: .4byte gUnknown_083DFEC4\n\ -_080EFCD4: .4byte 0x0000bc9a\n\ -_080EFCD8: .4byte 0x0000bc9b\n\ -_080EFCDC: .4byte gPokenavCityMaps\n\ -_080EFCE0: .4byte 0x0000bc9c\n\ -_080EFCE4: .4byte 0x0000cdcc\n\ -_080EFCE8:\n\ - ldr r0, [r3]\n\ - ldr r4, _080EFD1C @ =0x0000cdcc\n\ - adds r0, r4\n\ - adds r0, r6\n\ - str r1, [r0]\n\ -_080EFCF2:\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x1\n\ - bls _080EFC8E\n\ - ldr r0, _080EFD20 @ =gUnknown_083DFEC4\n\ - ldr r2, [r0]\n\ - ldr r0, _080EFD24 @ =0x0000bc9a\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xF\n\ - bhi _080EFD2C\n\ - ldr r1, _080EFD28 @ =0x0000bc9b\n\ - adds r0, r2, r1\n\ - strb r7, [r0]\n\ - movs r0, 0x1\n\ - b _080EFD2E\n\ - .align 2, 0\n\ -_080EFD1C: .4byte 0x0000cdcc\n\ -_080EFD20: .4byte gUnknown_083DFEC4\n\ -_080EFD24: .4byte 0x0000bc9a\n\ -_080EFD28: .4byte 0x0000bc9b\n\ -_080EFD2C:\n\ - movs r0, 0\n\ -_080EFD2E:\n\ - add sp, 0x8\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + if (gUnknown_083DFEC4->unkBC9A >= 16) + return FALSE; + + var1 = gUnknown_083DFEC4->unkBC9A; + var2 = gUnknown_083DFEC4->unkBC9B; + for (i = 0; i < 2; i++) + { + if (gPokenavCityMaps[var1][i] != 0) + { + LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]); + gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2]; + var2++; + } + else + { + gUnknown_083DFEC4->unkCDCC[var1][i] = NULL; + } + } + + if (++gUnknown_083DFEC4->unkBC9A >= 16) + return FALSE; + + gUnknown_083DFEC4->unkBC9B = var2; + return TRUE; } -#endif // NONMATCHING void sub_80EFD3C(void) { @@ -4335,7 +3792,7 @@ void sub_80EFE7C(void) case 2: sub_80EFDE4(1); gUnknown_083DFEC4->unk769D = 1; - break; + break; } } diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 164d71cb5..0f409bfe1 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -24,6 +24,9 @@ #include "task.h" #include "ewram.h" +extern void sub_80C4674(); +extern void sub_80C4698(u8 *, u8); + #define CONTEST_ENTRY_PIC_LEFT 10 #define CONTEST_ENTRY_PIC_TOP 3 @@ -47,7 +50,8 @@ extern u32 gUnknown_03005D28; extern u8 gUnknown_02038694; extern u8 gUnknown_0203856C; extern u8 gContestFinalStandings[]; -extern u16 gUnknown_02038678[]; +extern s16 gUnknown_02038670[]; +extern s16 gUnknown_02038678[]; void sub_80C4BF0(void) { @@ -128,7 +132,7 @@ void sub_80C4CF8(void) { if(!gContestFinalStandings[gContestPlayerMonIndex] && gSpecialVar_ContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gUnknown_02038678[gContestPlayerMonIndex] >= 800) { gSpecialVar_0x8004 = 1; } @@ -150,209 +154,78 @@ u8 sub_80C4D50(void) return retVar; } -// nope. too hard -__attribute__((naked)) void sub_80C4D80(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - ldr r0, _080C4EA0 @ =gUnknown_02038670\n\ - mov r12, r0\n\ - ldr r1, _080C4EA4 @ =gSpecialVar_0x8006\n\ - mov r8, r1\n\ - ldr r2, _080C4EA8 @ =gStringVar1\n\ - mov r9, r2\n\ - mov r2, r12\n\ - mov r1, sp\n\ - movs r6, 0x3\n\ -_080C4D9E:\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080C4D9E\n\ - movs r6, 0\n\ -_080C4DAE:\n\ - movs r1, 0x3\n\ - cmp r1, r6\n\ - ble _080C4DD8\n\ -_080C4DB4:\n\ - subs r4, r1, 0x1\n\ - lsls r0, r4, 1\n\ - mov r5, sp\n\ - adds r3, r5, r0\n\ - lsls r0, r1, 1\n\ - adds r2, r5, r0\n\ - ldrh r5, [r3]\n\ - movs r7, 0\n\ - ldrsh r1, [r3, r7]\n\ - movs r7, 0\n\ - ldrsh r0, [r2, r7]\n\ - cmp r1, r0\n\ - bge _080C4DD2\n\ - strh r5, [r2]\n\ - strh r0, [r3]\n\ -_080C4DD2:\n\ - adds r1, r4, 0\n\ - cmp r1, r6\n\ - bgt _080C4DB4\n\ -_080C4DD8:\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _080C4DAE\n\ - mov r2, r8\n\ - ldrh r0, [r2]\n\ - lsls r0, 1\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - movs r2, 0\n\ - movs r7, 0\n\ - movs r6, 0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - adds r3, r0, 0\n\ - mov r1, sp\n\ -_080C4DF6:\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r0, r4\n\ - bne _080C4E12\n\ - lsls r0, r2, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r2\n\ - lsrs r2, r0, 24\n\ - mov r5, r8\n\ - ldrh r5, [r5]\n\ - cmp r6, r5\n\ - bne _080C4E12\n\ - adds r7, r2, 0\n\ -_080C4E12:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - ble _080C4DF6\n\ - movs r6, 0\n\ - mov r0, sp\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - asrs r1, r3, 16\n\ - lsls r2, 24\n\ - mov r10, r2\n\ - cmp r0, r1\n\ - beq _080C4E40\n\ - adds r2, r1, 0\n\ - mov r1, sp\n\ -_080C4E30:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E40\n\ - movs r4, 0\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, r2\n\ - bne _080C4E30\n\ -_080C4E40:\n\ - lsls r0, r6, 24\n\ - lsrs r4, r0, 24\n\ - adds r2, r7, 0\n\ - movs r6, 0\n\ - asrs r5, r3, 16\n\ - mov r8, r5\n\ - mov r1, r12\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r8, r0\n\ - bne _080C4E60\n\ - cmp r7, 0x1\n\ - beq _080C4E78\n\ -_080C4E5A:\n\ - subs r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ -_080C4E60:\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E78\n\ - lsls r0, r6, 1\n\ - add r0, r12\n\ - asrs r1, r3, 16\n\ - movs r5, 0\n\ - ldrsh r0, [r0, r5]\n\ - cmp r1, r0\n\ - bne _080C4E60\n\ - cmp r2, 0x1\n\ - bne _080C4E5A\n\ -_080C4E78:\n\ - lsls r1, r6, 24\n\ - lsrs r1, 24\n\ - mov r0, r9\n\ - bl sub_80C4698\n\ - ldr r0, _080C4EAC @ =gIsLinkContest\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080C4EB8\n\ - ldr r0, _080C4EB0 @ =gStringVar2\n\ - lsls r1, r6, 3\n\ - subs r1, r6\n\ - lsls r1, 2\n\ - ldr r2, _080C4EB4 @ =gLinkPlayers + 0x8\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ - b _080C4EC4\n\ - .align 2, 0\n\ -_080C4EA0: .4byte gUnknown_02038670\n\ -_080C4EA4: .4byte gSpecialVar_0x8006\n\ -_080C4EA8: .4byte gStringVar1\n\ -_080C4EAC: .4byte gIsLinkContest\n\ -_080C4EB0: .4byte gStringVar2\n\ -_080C4EB4: .4byte gLinkPlayers + 0x8\n\ -_080C4EB8:\n\ - ldr r0, _080C4ED8 @ =gStringVar2\n\ - lsls r1, r6, 6\n\ - ldr r2, _080C4EDC @ =gUnknown_0203857D\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ -_080C4EC4:\n\ - mov r1, r10\n\ - asrs r0, r1, 24\n\ - cmp r0, 0x1\n\ - beq _080C4ED0\n\ - cmp r7, r0\n\ - bne _080C4EE4\n\ -_080C4ED0:\n\ - ldr r0, _080C4EE0 @ =gSpecialVar_0x8006\n\ - strh r4, [r0]\n\ - b _080C4EEA\n\ - .align 2, 0\n\ -_080C4ED8: .4byte gStringVar2\n\ -_080C4EDC: .4byte gUnknown_0203857D\n\ -_080C4EE0: .4byte gSpecialVar_0x8006\n\ -_080C4EE4:\n\ - ldr r1, _080C4EFC @ =gSpecialVar_0x8006\n\ - adds r0, r4, 0x4\n\ - strh r0, [r1]\n\ -_080C4EEA:\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080C4EFC: .4byte gSpecialVar_0x8006\n\ - .syntax divided"); + s16 sp0[4]; + s32 i; + s32 j; + s16 r4; + u8 r2; + u8 r7; + s8 r10; + u8 r4_; + + for (i = 0; i < 4; i++) + sp0[i] = gUnknown_02038670[i]; + + for (i = 0; i < 3; i++) + { + for (j = 3; j > i; j--) + { + if (sp0[j - 1] < sp0[j]) + { + s32 temp = sp0[j]; + + sp0[j] = sp0[j - 1]; + sp0[j - 1] = temp; + } + } + } + + r4 = sp0[gSpecialVar_0x8006]; + r10 = 0; + r7 = 0; + + for (i = 0; i < 4; i++) + { + if (sp0[i] == r4) + { + r10++; + if (i == gSpecialVar_0x8006) + r7 = r10; + } + } + + for (i = 0; i < 4; i++) + { + if (sp0[i] == r4) + break; + } + + r4_ = i; + r2 = r7; + + for (i = 0; i < 4; i++) + { + if (r4 == gUnknown_02038670[i]) + { + if (r2 == 1) + break; + r2--; + } + } + + sub_80C4698(gStringVar1, i); + + if (gIsLinkContest & 1) + sub_80C4674(gStringVar2, gLinkPlayers[i].name); + else + sub_80C4674(gStringVar2, gContestMons[i].trainerName); + + if (r10 == 1 || r7 == r10) + gSpecialVar_0x8006 = r4_; + else + gSpecialVar_0x8006 = r4_ + 4; } void ShowContestWinnerCleanup(void) @@ -389,7 +262,7 @@ bool8 GiveMonArtistRibbon(void) if(ribbon == FALSE && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gUnknown_02038678[gContestPlayerMonIndex] >= 800) { ribbon = TRUE; SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 33e7620f7..b58363d31 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -19,6 +19,8 @@ #include "text.h" #include "ewram.h" +extern const u8 gUnknown_08208238[]; + extern u8 gPlayerPartyCount; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; @@ -297,130 +299,26 @@ void ScrSpecial_GetPokemonNicknameAndMoveName(void) StringCopy(gStringVar2, gMoveNames[data]); } -// no. hard -__attribute__((naked)) -void sub_80F9FDC(struct Pokemon *party, u8 var, u8 var2) +void sub_80F9FDC(struct Pokemon *pkmn, u8 moveIndex1, u8 moveIndex2) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - mov r8, r0\n\ - adds r5, r1, 0\n\ - adds r4, r2, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0xD\n\ - str r3, [sp, 0xC]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - adds r7, r5, 0\n\ - adds r7, 0x11\n\ - str r7, [sp, 0x10]\n\ - mov r0, r8\n\ - adds r1, r7, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x5\n\ - str r1, [sp, 0x18]\n\ - strb r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x1C]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - add r7, sp, 0x4\n\ - mov r10, r7\n\ - strb r0, [r7]\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - bl GetMonData\n\ - mov r6, sp\n\ - adds r6, 0x6\n\ - strb r0, [r6]\n\ - ldr r1, _080FA0D8 @ =gUnknown_08208238\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r6]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - lsls r5, 1\n\ - asrs r2, r5\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r4, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r4, 1\n\ - asrs r1, r4\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r6]\n\ - ldrb r0, [r6]\n\ - bics r0, r3\n\ - strb r0, [r6]\n\ - lsls r2, r4\n\ - lsls r1, r5\n\ - adds r2, r1\n\ - ldrb r0, [r6]\n\ - orrs r0, r2\n\ - strb r0, [r6]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - adds r2, r6, 0\n\ - bl SetMonData\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080FA0D8: .4byte gUnknown_08208238\n\ - .syntax divided"); + u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); + u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); + u8 pp1 = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1); + u8 pp2 = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2); + u8 bonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES); + + u8 r2 = (bonuses & gUnknown_08208238[moveIndex1]) >> (moveIndex1 * 2); + u8 r1 = (bonuses & gUnknown_08208238[moveIndex2]) >> (moveIndex2 * 2); + + bonuses &= ~gUnknown_08208238[moveIndex1]; + bonuses &= ~gUnknown_08208238[moveIndex2]; + bonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); + + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex1, &pp2); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex2, &pp1); + SetMonData(pkmn, MON_DATA_PP_BONUSES, &bonuses); } void sub_80FA0DC(void) |