summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c2
-rw-r--r--src/battle_anim_sound_tasks.c71
-rwxr-xr-xsrc/pokemon_jump.c692
-rw-r--r--src/pokenav.c12
-rw-r--r--src/pokenav_match_call_ui.c109
-rw-r--r--src/strings.c4
6 files changed, 690 insertions, 200 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index a667c6177..b265bf7bc 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -2936,7 +2936,7 @@ s8 BattleAnimAdjustPanning2(s8 pan)
return pan;
}
-s16 KeepPanInRange(s16 panArg)
+s16 KeepPanInRange(s16 panArg, int oldPan)
{
s16 pan = panArg;
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
index e5f0cd165..573feb41c 100644
--- a/src/battle_anim_sound_tasks.c
+++ b/src/battle_anim_sound_tasks.c
@@ -53,7 +53,7 @@ static void sub_8158B98(u8 taskId)
PlaySE12WithPanning(gTasks[taskId].data[0], pan);
}
pan += panIncrement;
- gTasks[taskId].data[2] = KeepPanInRange(pan);
+ gTasks[taskId].data[2] = KeepPanInRange(pan, panIncrement);
}
}
@@ -116,9 +116,12 @@ static void sub_8158D08(u8 taskId)
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5])
{
+ u16 dPan, oldPan;
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[11] += gTasks[taskId].data[3];
- gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11]);
+ dPan = gTasks[taskId].data[3];
+ oldPan = gTasks[taskId].data[11] ;
+ gTasks[taskId].data[11] = dPan + oldPan;
+ gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
}
}
// task end
@@ -368,71 +371,21 @@ void sub_8159278(u8 taskId)
sub_8159308(taskId);
}
-#ifdef NONMATCHING
void sub_8159308(u8 taskId)
{
- s16 panIncrement = gTasks[taskId].data[3];
+ u16 panIncrement = gTasks[taskId].data[3];
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5])
{
+ u16 oldPan;
gTasks[taskId].data[10] = 0;
-
- gTasks[taskId].data[11] += panIncrement;
- gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11]);
+ oldPan = gTasks[taskId].data[11];
+ gTasks[taskId].data[11] = panIncrement + oldPan;
+ gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
}
gUnknown_02038440 = gTasks[taskId].data[11];
if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
DestroyAnimVisualTask(taskId);
}
-#else
-NAKED
-void sub_8159308(u8 taskId)
-{
- asm_unified(" push {r4,r5,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r5, r0, 0\n\
- ldr r1, =gTasks\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r4, r0, r1\n\
- ldrh r2, [r4, 0xE]\n\
- ldrh r0, [r4, 0x1C]\n\
- adds r1, r0, 0x1\n\
- strh r1, [r4, 0x1C]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- movs r3, 0x12\n\
- ldrsh r1, [r4, r3]\n\
- cmp r0, r1\n\
- bne _08159342\n\
- movs r0, 0\n\
- strh r0, [r4, 0x1C]\n\
- ldrh r1, [r4, 0x1E]\n\
- adds r0, r2, r1\n\
- strh r0, [r4, 0x1E]\n\
- movs r2, 0x1E\n\
- ldrsh r0, [r4, r2]\n\
- bl KeepPanInRange\n\
- strh r0, [r4, 0x1E]\n\
-_08159342:\n\
- ldr r1, =gUnknown_02038440\n\
- ldrh r0, [r4, 0x1E]\n\
- strb r0, [r1]\n\
- movs r3, 0x1E\n\
- ldrsh r1, [r4, r3]\n\
- movs r2, 0xC\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- bne _0815935A\n\
- adds r0, r5, 0\n\
- bl DestroyAnimVisualTask\n\
-_0815935A:\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .pool");
-}
-#endif
+
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index 9603bb884..2ef81bd19 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -1,8 +1,12 @@
#include "global.h"
#include "alloc.h"
+#include "item.h"
#include "link.h"
#include "main.h"
+#include "menu.h"
#include "palette.h"
+#include "random.h"
+#include "save.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
@@ -35,7 +39,7 @@ struct PokemonJump1_82E4
struct PokemonJump1
{
- MainCallback unk0;
+ MainCallback returnCallback;
u8 unk4;
u8 unk5;
u8 unk6;
@@ -53,12 +57,16 @@ struct PokemonJump1
u8 filler28[0x4];
int unk2C;
u32 unk30;
- u8 filler34[0x6];
+ u8 filler34[0x2];
+ u16 unk36;
+ u8 filler38[0x2];
u16 unk3A;
- u8 filler3C[0x6];
+ u16 unk3C;
+ u16 unk3E;
+ u16 unk40;
u16 unk42;
u8 unk44;
- u8 filler45[0x1];
+ u8 unk45;
u8 unk46;
u8 isLeader;
u8 unk48;
@@ -119,43 +127,77 @@ static void sub_802AF80(u8 taskId);
static void sub_802B008(void);
static void sub_802B194(u8 taskId);
static void sub_802B1FC(void);
-bool32 sub_802B248(void);
-bool32 sub_802B2D4(void);
-bool32 sub_802B368(void);
-bool32 sub_802B3D4(void);
-bool32 sub_802B4CC(void);
-bool32 sub_802B5C8(void);
-bool32 sub_802B664(void);
-bool32 sub_802B6B8(void);
-bool32 sub_802B720(void);
-bool32 sub_802B29C(void);
-bool32 sub_802B31C(void);
-bool32 sub_802B3B4(void);
-bool32 sub_802B470(void);
-bool32 sub_802B568(void);
-bool32 sub_802B628(void);
-bool32 sub_802B664(void);
-bool32 sub_802B704(void);
-bool32 sub_802B720(void);
-bool32 sub_802B7E0(void);
-bool32 sub_802B8CC(void);
+static bool32 sub_802B248(void);
+static bool32 sub_802B2D4(void);
+static bool32 sub_802B368(void);
+static bool32 sub_802B3D4(void);
+static bool32 sub_802B470(void);
+static bool32 sub_802B4CC(void);
+static bool32 sub_802B568(void);
+static bool32 sub_802B5C8(void);
+static bool32 sub_802B628(void);
+static bool32 sub_802B664(void);
+static bool32 sub_802B6B8(void);
+static bool32 sub_802B704(void);
+static bool32 sub_802B720(void);
+static bool32 sub_802B7E0(void);
+static bool32 sub_802B8CC(void);
+static bool32 sub_802B964(void);
+static bool32 sub_802B29C(void);
+static bool32 sub_802B31C(void);
+static bool32 sub_802B3B4(void);
+static bool32 sub_802BA58(void);
+static bool32 sub_802BB84(void);
+static bool32 sub_802BC60(void);
+static bool32 sub_802BD30(void);
void sub_802BD84(u8 taskId);
void sub_802BE60(TaskFunc func, u8 taskPriority);
void sub_802BE80(void);
+void sub_802BEA0(void);
+void sub_802BEE4(void);
void sub_802C0B8(void);
void sub_802C0E8(void);
+void sub_802C114(void);
+void sub_802C164(void);
void sub_802C1DC(void);
+bool32 sub_802C130(u16);
+void sub_802C260(void);
+void sub_802C270(void);
void sub_802C43C(void);
+void sub_802C808(u16, u16 *, u16 *);
bool32 sub_802C538(void);
+bool32 sub_802C650(void);
+bool32 sub_802C5DC(void);
bool32 sub_802C70C(void);
+bool32 sub_802C7BC(void);
+u16 sub_802C7E0(void);
+u16 sub_802C880(u16, u16);
void sub_802D074(void *);
void sub_802D0AC(void);
+void sub_802D0C8(int);
int sub_802D0F0(void);
+void sub_802D764(void);
+bool32 sub_802D788(void);
+void sub_802D7E8(u16, u16);
+void sub_802D884(u16);
+void sub_802D8FC(u16);
+bool32 sub_802D974(void);
+void sub_802DA14(void);
+bool32 sub_802DA44(void);
+void sub_802DD64(int);
+s8 sub_802DA8C(void);
+void sub_802DDA0(u8);
+int sub_802DDB8(int);
+void sub_802DDCC(void);
+void sub_802DDE0(void);
+void sub_802DDF4(int);
+int sub_802DE08(void);
void sub_802E138(struct PokemonJump1_82E4 *, u8 *);
bool32 sub_802E1BC(struct PokemonJump1_82E4 *, struct Unk802B078 *);
void sub_802E234(struct PokemonJump1_82E4 *, u8 , u16);
bool32 sub_802E264(struct PokemonJump1_82E4 *, int, u8 *, u16 *);
bool32 sub_802E2D0(struct PokemonJump1_82E4 *, int);
+int sub_802E354(int, u16, u16);
void sub_802E3A8(void);
extern struct PokemonJump1 *gUnknown_02022CFC;
@@ -302,7 +344,7 @@ void sub_802A9A8(u16 partyIndex, MainCallback callback)
ResetTasks();
taskId = CreateTask(sub_802ACA0, 1);
gUnknown_02022CFC->unk8 = 0;
- gUnknown_02022CFC->unk0 = callback;
+ gUnknown_02022CFC->returnCallback = callback;
gUnknown_02022CFC->unk4 = taskId;
gUnknown_02022CFC->unk6 = GetMultiplayerId();
sub_802AC2C(&gUnknown_02022CFC->unk82A8[gUnknown_02022CFC->unk6], &gPlayerParty[partyIndex]);
@@ -316,7 +358,7 @@ void sub_802A9A8(u16 partyIndex, MainCallback callback)
SetMainCallback2(callback);
}
-void sub_802AA48(void)
+static void sub_802AA48(void)
{
sub_802D0AC();
Free(gUnknown_02022CFC);
@@ -728,7 +770,7 @@ static void sub_802B1FC(void)
}
}
-bool32 sub_802B248(void)
+static bool32 sub_802B248(void)
{
switch (gUnknown_02022CFC->unk8)
{
@@ -749,7 +791,7 @@ bool32 sub_802B248(void)
return TRUE;
}
-bool32 sub_802B29C(void)
+static bool32 sub_802B29C(void)
{
switch (gUnknown_02022CFC->unk8)
{
@@ -765,7 +807,7 @@ bool32 sub_802B29C(void)
return TRUE;
}
-bool32 sub_802B2D4(void)
+static bool32 sub_802B2D4(void)
{
switch (gUnknown_02022CFC->unk8)
{
@@ -786,7 +828,7 @@ bool32 sub_802B2D4(void)
return TRUE;
}
-bool32 sub_802B31C(void)
+static bool32 sub_802B31C(void)
{
switch (gUnknown_02022CFC->unk8)
{
@@ -805,7 +847,7 @@ bool32 sub_802B31C(void)
return TRUE;
}
-bool32 sub_802B368(void)
+static bool32 sub_802B368(void)
{
if (!sub_802B8CC())
{
@@ -825,7 +867,7 @@ bool32 sub_802B368(void)
return FALSE;
}
-bool32 sub_802B3B4(void)
+static bool32 sub_802B3B4(void)
{
if (!sub_802B8CC())
;
@@ -836,3 +878,589 @@ bool32 sub_802B3B4(void)
return FALSE;
}
+
+static bool32 sub_802B3D4(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ sub_802C538();
+ if (sub_802C5DC())
+ gUnknown_02022CFC->unk8++;
+ break;
+ case 1:
+ if (!sub_802B964())
+ {
+ if (sub_802C7BC())
+ {
+ gUnknown_02022CFC->unk72 = sub_802C7E0();
+ gUnknown_02022CFC->unk4C = 7;
+ }
+ else if (gUnknown_02022CFC->unk74 >= 200)
+ {
+ gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE;
+ gUnknown_02022CFC->unk4C = 8;
+ }
+ else
+ {
+ gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE;
+ gUnknown_02022CFC->unk4C = 4;
+ }
+
+ gUnknown_02022CFC->unk8++;
+ return FALSE;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B470(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ if (!sub_802C538())
+ sub_802C0B8();
+ if (sub_802C5DC())
+ gUnknown_02022CFC->unk8++;
+ break;
+ case 1:
+ if (!sub_802B964())
+ {
+ gUnknown_02022CFC->unk8++;
+ return FALSE;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B4CC(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ sub_802AE14(4);
+ gUnknown_02022CFC->unk8++;
+ // fall through
+ case 1:
+ if (!sub_802BB84())
+ {
+ sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72);
+ gUnknown_02022CFC->unk8++;
+ }
+ break;
+ case 2:
+ if (gUnknown_02022CFC->unk49)
+ {
+ if (sub_802C650())
+ gUnknown_02022CFC->unk4C = 5;
+ else
+ gUnknown_02022CFC->unk4C = 6;
+
+ gUnknown_02022CFC->unk8++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B568(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ sub_802AE14(0);
+ gUnknown_02022CFC->unk8++;
+ // fall through
+ case 1:
+ if (!sub_802BB84())
+ {
+ sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72);
+ gUnknown_02022CFC->unk42 = gUnknown_02022CFC->unk45;
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B5C8(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ if (!sub_802BD30())
+ gUnknown_02022CFC->unk8++;
+ break;
+ case 1:
+ if (gUnknown_02022CFC->unk49)
+ {
+ sub_802AA94(gUnknown_02022CFC);
+ gUnknown_02022CFC->unk24 = Random();
+ gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk24;
+ gUnknown_02022CFC->unk4C = 0;
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B628(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ if (!sub_802BD30())
+ {
+ sub_802AA94(gUnknown_02022CFC);
+ gUnknown_02022CFC->unk8++;
+ return FALSE;
+ }
+ break;
+ case 1:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B664(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ gUnknown_02022CFC->unk8 = 1;
+ break;
+ case 1:
+ sub_802AE14(0);
+ gUnknown_02022CFC->unk8++;
+ break;
+ case 2:
+ if (!sub_802BC60())
+ {
+ SetMainCallback2(gUnknown_02022CFC->returnCallback);
+ sub_802AA48();
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B6B8(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ sub_802AE14(4);
+ gUnknown_02022CFC->unk8++;
+ break;
+ case 1:
+ if (!sub_802BA58())
+ {
+ gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE;
+ gUnknown_02022CFC->unk4C = 8;
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B704(void)
+{
+ sub_802AE14(0);
+ if (!sub_802BA58())
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static bool32 sub_802B720(void)
+{
+ switch (gUnknown_02022CFC->unk8)
+ {
+ case 0:
+ sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72);
+ sub_802D0C8(5);
+ gUnknown_02022CFC->unk8++;
+ break;
+ case 1:
+ if (!sub_802D0F0())
+ {
+ sub_802AE14(0);
+ gUnknown_02022CFC->unk8++;
+ }
+ break;
+ case 2:
+ if (sub_802C70C())
+ {
+ CreateTask(sub_8153688, 6);
+ gUnknown_02022CFC->unk8++;
+ }
+ break;
+ case 3:
+ if (!FuncIsActiveTask(sub_8153688))
+ {
+ sub_802DA14();
+ gUnknown_02022CFC->unk8++;
+ }
+ break;
+ case 4:
+ if (!sub_802DA44())
+ {
+ gUnknown_02022CFC->unk4C = 4;
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B7E0(void)
+{
+ int var0;
+
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ sub_802D0C8(2);
+ sub_802DDE0();
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 1:
+ var0 = sub_802D0F0();
+ if (!var0)
+ {
+ sub_802DDF4(gUnknown_02022CFC->unk6);
+ gUnknown_02022CFC->unk3C = 0;
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 2:
+ if (++gUnknown_02022CFC->unk3C > 120)
+ {
+ sub_802D0C8(3);
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 3:
+ if (sub_802D0F0() != 1 && sub_802DE08() != 1)
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 4:
+ sub_802D0C8(9);
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 5:
+ if (!sub_802D0F0())
+ {
+ sub_802C260();
+ sub_802D764();
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 6:
+ if (!sub_802D788())
+ {
+ sub_802C270();
+ sub_802BEA0();
+ gUnknown_02022CFC->unkA++;
+ return FALSE;
+ }
+ break;
+ case 7:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B8CC(void)
+{
+ sub_802BEE4();
+ if (gUnknown_02022CFC->unk36)
+ {
+ gUnknown_02022CFC->unk36 = 0;
+ return FALSE;
+ }
+
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ if (sub_802C130(0))
+ gUnknown_02022CFC->unkA++;
+ else
+ break;
+ // fall through
+ case 1:
+ if (gMain.newKeys & A_BUTTON)
+ {
+ sub_802C164();
+ sub_802AE14(3);
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 2:
+ if (sub_802C130(1) == TRUE)
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 3:
+ if (sub_802C130(0) == TRUE)
+ gUnknown_02022CFC->unkA = 0;
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802B964(void)
+{
+ int i;
+
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ for (i = 0; i < gUnknown_02022CFC->unk5; i++)
+ {
+ if (sub_802DDB8(i) == 1)
+ return TRUE;
+ }
+
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 1:
+ for (i = 0; i < gUnknown_02022CFC->unk5; i++)
+ {
+ if (gUnknown_02022CFC->unk82E4[i].unk10 == 2)
+ sub_802DDA0(i);
+ }
+
+ sub_802D0C8(1);
+ gUnknown_02022CFC->unk3C = 0;
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 2:
+ if (++gUnknown_02022CFC->unk3C > 100)
+ {
+ sub_802D0C8(3);
+ gUnknown_02022CFC->unk3C = 0;
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 3:
+ if (!sub_802D0F0())
+ {
+ sub_802DDCC();
+ gUnknown_02022CFC->unk71 = 0;
+ sub_802C114();
+ gUnknown_02022CFC->unkA++;
+ return FALSE;
+ }
+ break;
+ case 4:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802BA58(void)
+{
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ sub_802C808(gUnknown_02022CFC->unk72, &gUnknown_02022CFC->unk3E, &gUnknown_02022CFC->unk40);
+ sub_802D7E8(gUnknown_02022CFC->unk3E, gUnknown_02022CFC->unk40);
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 1:
+ case 4:
+ if (!sub_802D974())
+ {
+ gUnknown_02022CFC->unk3C = 0;
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 2:
+ case 5:
+ gUnknown_02022CFC->unk3C++;
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON) || gUnknown_02022CFC->unk3C > 180)
+ {
+ sub_802DA14();
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 3:
+ if (!sub_802DA44())
+ {
+ gUnknown_02022CFC->unk40 = sub_802C880(gUnknown_02022CFC->unk3E, gUnknown_02022CFC->unk40);
+ if (gUnknown_02022CFC->unk40 && AddBagItem(gUnknown_02022CFC->unk3E, gUnknown_02022CFC->unk40))
+ {
+ if (!CheckBagHasSpace(gUnknown_02022CFC->unk3E, 1))
+ {
+ sub_802D884(gUnknown_02022CFC->unk3E);
+ gUnknown_02022CFC->unkA = 4;
+ }
+ else
+ {
+ gUnknown_02022CFC->unkA = 6;
+ break;
+ }
+ }
+ else
+ {
+ sub_802D8FC(gUnknown_02022CFC->unk3E);
+ gUnknown_02022CFC->unkA = 4;
+ }
+ }
+ break;
+ case 6:
+ if (!sub_802DA44())
+ return FALSE;
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802BB84(void)
+{
+ s8 input;
+
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ sub_802D0C8(4);
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 1:
+ if (!sub_802D0F0())
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 2:
+ input = sub_802DA8C();
+ switch (input)
+ {
+ case MENU_B_PRESSED:
+ case 1:
+ gUnknown_02022CFC->unk45 = 1;
+ sub_802D0C8(6);
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 0:
+ gUnknown_02022CFC->unk45 = 2;
+ sub_802D0C8(6);
+ gUnknown_02022CFC->unkA++;
+ break;
+ }
+ break;
+ case 3:
+ if (!sub_802D0F0())
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 4:
+ sub_802D0C8(8);
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 5:
+ if (!sub_802D0F0())
+ {
+ gUnknown_02022CFC->unkA++;
+ return FALSE;
+ }
+ break;
+ case 6:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802BC60(void)
+{
+ int var0;
+
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ sub_802DA14();
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 1:
+ if (!sub_802DA44())
+ {
+ sub_802D0C8(7);
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 2:
+ var0 = sub_802D0F0();
+ if (!var0)
+ {
+ gUnknown_02022CFC->unk3C = var0;
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 3:
+ if (++gUnknown_02022CFC->unk3C > 120)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ sub_800AC34();
+ gUnknown_02022CFC->unkA++;
+ }
+ break;
+ case 5:
+ if (!gReceivedRemoteLinkPlayers)
+ return FALSE;
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool32 sub_802BD30(void)
+{
+ switch (gUnknown_02022CFC->unkA)
+ {
+ case 0:
+ sub_802DA14();
+ sub_802DD64(0);
+ gUnknown_02022CFC->unkA++;
+ break;
+ case 1:
+ if (!sub_802DA44())
+ {
+ gUnknown_02022CFC->unkA++;
+ return FALSE;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/src/pokenav.c b/src/pokenav.c
index 68cdb0e89..5fcf9e9bb 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -6,18 +6,6 @@
#include "field_weather.h"
#include "palette.h"
#include "pokemon_storage_system.h"
-#include "sound.h"
-#include "constants/songs.h"
-#include "window.h"
-#include "gpu_regs.h"
-#include "bg.h"
-#include "menu.h"
-#include "graphics.h"
-#include "dma3.h"
-#include "gba/macro.h"
-#include "decompress.h"
-#include "strings.h"
-#include "constants/rgb.h"
#include "pokenav.h"
enum
diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c
index c4591da37..36ae1b651 100644
--- a/src/pokenav_match_call_ui.c
+++ b/src/pokenav_match_call_ui.c
@@ -393,42 +393,33 @@ bool32 ShouldShowDownArrow(void)
return subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength;
}
-
-#ifdef NONMATCHING
-// This has some register renaming issues (r4, r5, and r6 are all switched around), and
-// for some reason it's creating two copies of subPtr->unk0.
-// TODO: Now I know why it's making two copies - one of them is UnknownInnerStruct_81C81D4.
-void MatchCall_MoveWindow(s32 a0, bool32 a1)
+void MatchCall_MoveWindow(s32 a0, bool32 a1_)
{
+ register bool32 a1 asm("r4")= a1_;
s32 v1;
- struct MatchCallWindowState *subPtr;
- struct UnknownSubStruct_81C81D4 *structPtr;
- structPtr = GetSubstructPtr(0x11);
- subPtr = &structPtr->unk888;
+ struct UnknownSubStruct_81C81D4 *structPtr = GetSubstructPtr(0x11);
+ register struct MatchCallWindowState *subPtr asm("r5") = &structPtr->unk888;
if (a0 < 0)
{
- // This is where the issue is. subPtr->windowTopIndex is being stored in r1 and then copied to
- // r2... and then r2 is read for the if statement, r1 is read for the function call,
- // and then both are clobbered as expected. Between those two uses, no writes to r1/r2
- // happen; it doesn't need to be duplicated/moved at all.
- if (subPtr->windowTopIndex + a0 < 0)
- v1 = -1 * subPtr->windowTopIndex;
+ u16 temp = subPtr->windowTopIndex;
+ if (temp + a0 < 0)
+ v1 = -1 * temp;
else
v1 = a0;
if (a1)
- sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + v1, v1 * -1, subPtr->unkC, v1, structPtr);
+ sub_81C83AC(subPtr->unk10, temp + v1, v1 * -1, subPtr->unkC, v1, &structPtr->unk0);
}
else if (a1)
{
-
- gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries;
- if ((s32)(gUnknown_0203CF44) + a0 >= (s32)subPtr->listLength)
- v1 = subPtr->listLength - gUnknown_0203CF44;
+ s32 temp = gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries;
+ s32 listLength;
+ if (temp + a0 >= (listLength = subPtr->listLength))
+ v1 = listLength - temp;
else
v1 = a0;
- sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, v1, subPtr->unkC, subPtr->visibleEntries, structPtr);
+ sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, v1, subPtr->unkC, subPtr->visibleEntries, &structPtr->unk0);
// Needed to prevent GCC from combining the two sub_81C83AC calls.
asm("");
}
@@ -437,79 +428,9 @@ void MatchCall_MoveWindow(s32 a0, bool32 a1)
v1 = a0;
}
- sub_81C8568(v1, structPtr);
- subPtr->windowTopIndex++;
-}
-#else
-NAKED
-void MatchCall_MoveWindow(s32 a0, bool32 a1)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- sub sp, 0x8\n\
- adds r6, r0, 0\n\
- adds r4, r1, 0\n\
- movs r0, 0x11\n\
- bl GetSubstructPtr\n\
- adds r7, r0, 0\n\
- ldr r0, =0x00000888\n\
- adds r5, r7, r0\n\
- cmp r6, 0\n\
- bge _081C8524\n\
- ldrh r1, [r5]\n\
- adds r0, r1, r6\n\
- cmp r0, 0\n\
- bge _081C850A\n\
- negs r6, r1\n\
-_081C850A:\n\
- cmp r4, 0\n\
- beq _081C854E\n\
- ldr r0, [r5, 0x10]\n\
- adds r1, r6\n\
- negs r2, r6\n\
- ldr r3, [r5, 0xC]\n\
- str r6, [sp]\n\
- str r7, [sp, 0x4]\n\
- bl sub_81C83AC\n\
- b _081C854E\n\
- .pool\n\
-_081C8524:\n\
- cmp r4, 0\n\
- beq _081C854E\n\
- ldr r2, =gUnknown_0203CF44\n\
- ldrh r1, [r5]\n\
- ldrh r0, [r5, 0x8]\n\
- adds r4, r1, r0\n\
- str r4, [r2]\n\
- adds r0, r4, r6\n\
- ldrh r1, [r5, 0x2]\n\
- cmp r0, r1\n\
- blt _081C853C\n\
- subs r6, r1, r4\n\
-_081C853C:\n\
- ldr r0, [r5, 0x10]\n\
- ldr r3, [r5, 0xC]\n\
- ldrh r1, [r5, 0x8]\n\
- str r1, [sp]\n\
- str r7, [sp, 0x4]\n\
- adds r1, r4, 0\n\
- adds r2, r6, 0\n\
- bl sub_81C83AC\n\
-_081C854E:\n\
- adds r0, r6, 0\n\
- adds r1, r7, 0\n\
- bl sub_81C8568\n\
- ldrh r0, [r5]\n\
- adds r0, r6\n\
- strh r0, [r5]\n\
- add sp, 0x8\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided");
+ sub_81C8568(v1, &structPtr->unk0);
+ subPtr->windowTopIndex += v1;
}
-#endif
void sub_81C8568(s32 a0, struct UnknownInnerStruct_81C81D4 *a1)
{
diff --git a/src/strings.c b/src/strings.c
index ac7a32709..793256edb 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -162,8 +162,8 @@ const u8 gText_DexSearchTypeNone[] = _("NONE");
const u8 gText_SelectorArrow[] = _("▶");
const u8 gUnknown_085E8B3C[] = _(" ");
const u8 gText_WelcomeToHOF[] = _("Welcome to the HALL OF FAME!");
-const u8 gUnknown_085E8B5B[] = _("Spotted POKéMON: {STR_VAR_1}!\nOwned POKéMON: {STR_VAR_2}!\pPROF. BIRCH's POKéDEX rating!\pPROF. BIRCH: Let's see…\p");
-const u8 gUnknown_085E8BBA[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
+const u8 gText_HOFDexRating[] = _("Spotted POKéMON: {STR_VAR_1}!\nOwned POKéMON: {STR_VAR_2}!\pPROF. BIRCH's POKéDEX rating!\pPROF. BIRCH: Let's see…\p");
+const u8 gText_HOFDexSaving[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
const u8 gText_HOFCorrupted[] = _("The HALL OF FAME data is corrupted.");
const u8 gText_HOFNumber[] = _("HALL OF FAME No. {STR_VAR_1}");
const u8 gText_LeagueChamp[] = _("LEAGUE CHAMPION!\nCONGRATULATIONS!");