summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-12-23 21:26:28 -0600
committerGitHub <noreply@github.com>2017-12-23 21:26:28 -0600
commit30c77aa4ca5502b07a9ccdf2012a7da265e8bffa (patch)
tree1e3119fbe79abf3c211d65a1832e56f9f8ed9408
parentaa13f45ebb79aed62171fbfe654d8b542fc9aa6c (diff)
parent8c1aac3746bd2599014579428878645f4f38f2fd (diff)
Merge pull request #499 from camthesaxman/fix_nonmatching
fix some nonmatching functions
-rw-r--r--include/region_map.h8
-rw-r--r--src/debug/matsuda_debug_menu.c229
-rw-r--r--src/pokemon/pokemon_summary_screen.c253
-rw-r--r--src/pokenav_before.c677
-rw-r--r--src/script_pokemon_util_80C4BF0.c281
-rw-r--r--src/script_pokemon_util_80F99CC.c144
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)