summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/contest.c208
-rw-r--r--src/pokemon/pokemon_summary_screen.c7
2 files changed, 202 insertions, 13 deletions
diff --git a/src/contest.c b/src/contest.c
index 34c66c66c..c6ef5774d 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -20,13 +20,15 @@
#include "unknown_task.h"
extern bool8 AreMovesContestCombo(u16, u16);
+extern void sub_80C8A38(u8);
struct Shared18000
{
/*0x18000*/ u8 unk18000;
/*0x18001*/ u8 filler18001[3];
/*0x18004*/ u16 unk18004[16][16];
- /*0x18204*/ u8 unk18204[0xA04-0x204];
+ /*0x18204*/ u16 unk18204[0x200];
+ /*0x18604*/ u16 unk18604[0x200];
/*0x18A04*/ u8 unk18A04[0x800];
};
@@ -35,19 +37,26 @@ struct Shared19204
/*0x19204*/ u8 unk19204;
/*0x19205*/ u8 unk19205;
/*0x19206*/ u8 unk19206[4];
- /*0x1920A*/ u8 unk1920A;
- /*0x1920B*/ u8 filler1920B;
+ /*0x1920A*/ u16 unk1920A_0:6;
+ u16 unk1920A_6:1;
+ u16 unk1920A_7:2;
+ u16 unk1920B_1:1;
/*0x1920C*/ u8 unk1920C;
- /*0x1920D*/ u8 filler1920D[0x16-0xD];
+ /*0x1920D*/ u8 filler1920D[0x14-0xD];
+ /*0x19214*/ u8 unk19214;
+ /*0x19215*/ u8 unk19215;
/*0x19216*/ u8 unk19216;
/*0x19217*/ u8 filler19217;
- /*0x19218*/ u8 unk19218[0x5D-0x18];
+ /*0x19218*/ u8 unk19218[4];
+ /*0x1921C*/ u32 unk1921C;
+ u8 filler19220[0x5D-0x20];
/*0x1925D*/ u8 unk1925D[3];
};
struct UnknownContestStruct1
{
- u8 filler0[8];
+ u8 filler0[6];
+ u16 unk6;
u16 unk8;
u8 fillerA;
u8 unkB_0:2;
@@ -81,7 +90,7 @@ extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBanksBySide[];
extern u8 gObjectBankIDs[];
-extern bool8 gIsLinkContest;
+extern u8 gIsLinkContest;
extern u8 gContestPlayerMonIndex;
extern u16 gUnknown_030041B0;
extern s16 gUnknown_030041B4;
@@ -122,13 +131,23 @@ void sub_80ABC70(u8);
void sub_80ABCDC(u8);
void sub_80ABEA0(u8);
void sub_80AC0AC(s8);
+void nullsub_17(s8);
void sub_80AC0C8(u8);
+void sub_80AC15C(u8);
+void sub_80AC188(u8);
+void sub_80AC204(u8);
+void sub_80AC250(u8);
+void sub_80AC284(u8);
+void sub_80AC2CC(u8);
void sub_80AE020();
u8 sub_80AE858(void);
u8 sub_80AE8B4(void);
void sub_80AEB30(void);
void sub_80AEBEC(u16);
+void sub_80AED58(void);
void sub_80AF138(void);
+u16 sub_80AF15C(u8);
+void sub_80AF1B8(void);
u8 sub_80AF59C(u8);
void sub_80AF860(void);
void sub_80AFA5C(void);
@@ -142,11 +161,14 @@ void sub_80B0D7C(void);
void sub_80B1118(void);
void sub_80B159C(void);
void sub_80B1B14(void);
+void sub_80B1BDC(void);
u8 sub_80B214C(u8);
void sub_80B2184(void);
void sub_80B2280(void);
+void sub_80B25E4();
void sub_80B292C(void);
+
void nullsub_89(u8 taskId)
{
}
@@ -400,8 +422,6 @@ u8 sub_80AB70C(u8 *a)
break;
case 4:
LZDecompressVram(gUnknown_08D17424, (void *)(VRAM + 0xE000));
- //DmaCopy32(3, (void *)(VRAM + 0xE000), shared18000.unk18A04, 0x800);
- //asm("");
{
void *src = (void *)(VRAM + 0xE000);
void *dest = shared18000.unk18A04;
@@ -490,7 +510,7 @@ void sub_80AB9A0(u8 taskId)
break;
case 4:
default:
- if (shared19204.unk1920A & 0x40)
+ if (shared19204.unk1920A_6)
break;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
@@ -854,3 +874,171 @@ _080ABE9C: .4byte sub_80ABEA0\n\
.syntax divided\n");
}
#endif
+
+void sub_80ABEA0(u8 taskId)
+{
+ u8 r6 = 0;
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestMons[gContestPlayerMonIndex].moves[i] != 0)
+ r6++;
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gTasks[taskId].func = sub_80AC0C8;
+ }
+ else
+ {
+ switch (gMain.newAndRepeatedKeys)
+ {
+ case B_BUTTON:
+ sub_814A904();
+ PlaySE(SE_SELECT);
+ sub_80AFFE0(0);
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA340[0][0],
+ gUnknown_083CA340[0][1],
+ gUnknown_083CA340[0][2],
+ gUnknown_083CA340[0][3]);
+ if (sub_80AF59C(gContestPlayerMonIndex) == 0)
+ StringCopy(gDisplayedStringBattle, gUnknown_083CAF84);
+ else
+ StringCopy(gDisplayedStringBattle, gUnknown_083CAFAE);
+ sub_80AE020(gDisplayedStringBattle, shared19204.unk19205 + 1);
+ sub_80AF138();
+ StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
+ sub_8003460(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ gTasks[taskId].func = sub_80ABC70;
+ break;
+ case DPAD_LEFT:
+ case DPAD_RIGHT:
+ break;
+ case DPAD_UP:
+ nullsub_17(shared19204.unk19204);
+ if (shared19204.unk19204 == 0)
+ shared19204.unk19204 = r6 - 1;
+ else
+ shared19204.unk19204--;
+ sub_80AC0AC(shared19204.unk19204);
+ sub_80AED58();
+ sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[shared19204.unk19204]);
+ if (r6 > 1)
+ PlaySE(SE_SELECT);
+ break;
+ case DPAD_DOWN:
+ nullsub_17(shared19204.unk19204);
+ if (shared19204.unk19204 == r6 - 1)
+ shared19204.unk19204 = 0;
+ else
+ shared19204.unk19204++;
+ sub_80AC0AC(shared19204.unk19204);
+ sub_80AED58();
+ sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[shared19204.unk19204]);
+ if (r6 > 1)
+ PlaySE(SE_SELECT);
+ break;
+ }
+ }
+}
+
+void sub_80AC0AC(s8 a)
+{
+ sub_814A880(4, 88 + a * 16);
+}
+
+void nullsub_17(s8 a)
+{
+}
+
+void sub_80AC0C8(u8 taskId)
+{
+ if (gIsLinkContest & 1)
+ {
+ u16 var = sub_80AF15C(gContestPlayerMonIndex);
+ struct UnknownContestStruct1 *s = &shared19260.unk19260[gContestPlayerMonIndex];
+ u8 taskId2;
+
+ s->unk6 = var;
+ taskId2 = CreateTask(sub_80C8A38, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8A38, sub_80AC15C);
+ gTasks[taskId].func = nullsub_89;
+ sub_80AF860();
+ sub_80AFFE0(0);
+ }
+ else
+ {
+ sub_80AF1B8();
+ gTasks[taskId].func = sub_80AC188;
+ }
+}
+
+void sub_80AC15C(u8 taskId)
+{
+ DestroyTask(taskId);
+ gTasks[shared19204.unk1920C].func = sub_80AC188;
+}
+
+void sub_80AC188(u8 taskId)
+{
+ sub_80AF138();
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ sub_80AFFE0(0);
+ {
+ void *src = gPlttBufferFaded;
+ void *dest = shared18000.unk18604;
+ u32 size = 0x400;
+ DmaCopy32(3, src, dest, size);
+ }
+ LoadPalette(shared18000.unk18204, 0, 0x400);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80AC204;
+}
+
+void sub_80AC204(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] > 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (++gTasks[taskId].data[1] == 2)
+ {
+ sub_80B1BDC();
+ sub_80B25E4(1);
+ gTasks[taskId].func = sub_80AC250;
+ }
+ }
+}
+
+void sub_80AC250(u8 taskId)
+{
+ if (!shared19204.unk1920A_6 && !shared19204.unk1920B_1)
+ gTasks[taskId].func = sub_80AC284;
+}
+
+void sub_80AC284(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] > 19)
+ {
+ shared19204.unk19214 = 0;
+ shared19204.unk1921C = gRngValue;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80AC2CC;
+ }
+}
+
+/*
+void sub_80AC2CC(u8 taskId)
+{
+
+}
+*/
diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c
index 532f30aaa..4de5f5345 100644
--- a/src/pokemon/pokemon_summary_screen.c
+++ b/src/pokemon/pokemon_summary_screen.c
@@ -1,11 +1,14 @@
#include "global.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+#include "constants/species.h"
#include "battle.h"
+#include "contest.h"
#include "data2.h"
#include "decompress.h"
#include "event_data.h"
#include "ewram.h"
#include "item.h"
-#include "constants/items.h"
#include "learn_move.h"
#include "link.h"
#include "m4a.h"
@@ -19,9 +22,7 @@
#include "pokemon.h"
#include "pokemon_summary_screen.h"
#include "region_map.h"
-#include "constants/songs.h"
#include "sound.h"
-#include "constants/species.h"
#include "sprite.h"
#include "string_util.h"
#include "strings.h"