summaryrefslogtreecommitdiff
path: root/src/contest.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/contest.c')
-rw-r--r--src/contest.c220
1 files changed, 206 insertions, 14 deletions
diff --git a/src/contest.c b/src/contest.c
index 9c115840e..5cdaf7d09 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -33,6 +33,8 @@
#include "util.h"
#include "contest_ai.h"
+extern u8 gUnknown_020297ED;
+
extern u8 AreMovesContestCombo(u16, u16); // I don't think this is a bool
extern void sub_80C8A38(u8);
extern void sub_80C8AD0(u8);
@@ -45,7 +47,7 @@ extern u16 gBattleTypeFlags;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBanksBySide[];
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
extern struct Window gUnknown_03004210;
extern u32 gContestRngValue; // saved RNG value
@@ -226,6 +228,7 @@ void sub_80B0BC4(u8, bool8);
void sub_80B0C5C(struct Sprite *);
void sub_80B0CB0(struct Sprite *);
void sub_80B0CDC(u8, int);
+void unref_sub_80B0CF4(void);
void sub_80B0D7C(void);
void sub_80B1118(void);
void sub_80B114C(u8);
@@ -538,7 +541,7 @@ u8 sub_80AB70C(u8 *a)
gBattleTypeFlags = 0;
gBankAttacker = 2;
gBankTarget = 3;
- gObjectBankIDs[gBankAttacker] = CreateJudgeSprite();
+ gBankSpriteIds[gBankAttacker] = CreateJudgeSprite();
sub_80B292C();
break;
default:
@@ -600,6 +603,10 @@ void sub_80AB9A0(u8 taskId)
void ContestMainCallback2(void)
{
+#if DEBUG
+ if (gUnknown_020297ED == 1 && gMain.newKeys == 4)
+ unref_sub_80B0CF4();
+#endif
AnimateSprites();
RunTasks();
BuildOamBuffer();
@@ -719,6 +726,8 @@ void sub_80ABCDC(u8 taskId)
gTasks[taskId].func = sub_80ABEA0;
}
+void debug_sub_80B9EBC(u8);
+
// Handle move selection input
void sub_80ABEA0(u8 taskId)
{
@@ -791,10 +800,193 @@ void sub_80ABEA0(u8 taskId)
if (numMoves > 1)
PlaySE(SE_SELECT);
break;
+#if DEBUG
+ case START_BUTTON:
+ if (gUnknown_020297ED == 1 && !(gIsLinkContest & 1))
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = gContestMons[gContestPlayerMonIndex].moves[0];
+ gTasks[taskId].func = debug_sub_80B9EBC;
+ }
+ break;
+#endif
}
}
}
+#if DEBUG
+
+void debug_sub_80BA054(u8);
+
+void debug_sub_80B9EBC(u8 taskId)
+{
+ u8 text[100];
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ Text_FillWindowRectDefPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA340[0][0],
+ gUnknown_083CA340[0][1],
+ gUnknown_083CA340[0][2],
+ gUnknown_083CA340[0][3]);
+ Text_InitWindowAndPrintText(
+ &gUnknown_03004210,
+ gMoveNames[gTasks[taskId].data[1]],
+ 776,
+ gUnknown_083CA340[0][0],
+ gUnknown_083CA340[0][1]);
+ ConvertIntToDecimalStringN(text, gTasks[taskId].data[1], 2, 3);
+ Text_InitWindowAndPrintText(
+ &gUnknown_03004210,
+ text,
+ 796,
+ gUnknown_083CA340[1][0],
+ gUnknown_083CA340[1][1]);
+ sub_80AED58();
+ sub_80AEBEC(gTasks[taskId].data[1]);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ switch (gMain.newAndRepeatedKeys)
+ {
+ case 0x20:
+ gTasks[taskId].data[1] -= 1;
+ if (gTasks[taskId].data[1] < 1)
+ gTasks[taskId].data[1] = 354;
+ gTasks[taskId].data[0]--;
+ break;
+ case 0x200:
+ gTasks[taskId].data[1] -= 10;
+ if (gTasks[taskId].data[1] < 1)
+ gTasks[taskId].data[1] = 354;
+ gTasks[taskId].data[0]--;
+ break;
+ case 0x10:
+ gTasks[taskId].data[1] += 1;
+ if (gTasks[taskId].data[1] > 354)
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId].data[0]--;
+ break;
+ case 0x100:
+ gTasks[taskId].data[1] += 10;
+ if (gTasks[taskId].data[1] > 354)
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId].data[0]--;
+ break;
+ case 4:
+ case 8:
+ gBattle_BG0_Y = 0;
+ gBattle_BG2_Y = 0;
+ sub_80B1BDC();
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = debug_sub_80BA054;
+ break;
+ case 2:
+ gBattle_BG0_Y = DISPLAY_HEIGHT;
+ gBattle_BG2_Y = DISPLAY_HEIGHT;
+ gContestMons[gContestPlayerMonIndex].moves[0] = gTasks[taskId].data[1];
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].func = sub_80ABCDC;
+ break;
+ }
+ break;
+ }
+}
+
+void debug_sub_80BA054(u8 taskId)
+{
+ s32 i;
+ u8 r6;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+ memset(&shared19348, 0, sizeof(shared19348));
+ sub_80B28F0(gContestPlayerMonIndex);
+ r6 = sub_80AE9FC(
+ gContestMons[gContestPlayerMonIndex].species,
+ gContestMons[gContestPlayerMonIndex].otId,
+ gContestMons[gContestPlayerMonIndex].personality);
+ gSprites[r6].pos2.x = 120;
+ gSprites[r6].callback = sub_80AD8FC;
+ gTasks[taskId].data[2] = r6;
+ gBankSpriteIds[gBankAttacker] = r6;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[0]++;
+ sContest.unk1925E = 0;
+ break;
+ case 1:
+ r6 = gTasks[taskId].data[2];
+ if (gSprites[r6].callback == SpriteCallbackDummy)
+ {
+ sContestantStatus[gContestPlayerMonIndex].currMove = gTasks[taskId].data[1];
+ sub_80B2790(gContestPlayerMonIndex);
+ sub_80B28F0(gContestPlayerMonIndex);
+ SelectContestMoveBankTarget(gTasks[taskId].data[1]);
+ DoMoveAnim(gTasks[taskId].data[1]);
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80B28CC(gContestPlayerMonIndex);
+ if (sContest.unk1925E != 0)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 20;
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 3:
+ gTasks[taskId].data[3]++;
+ if (gTasks[taskId].data[3] == 21)
+ {
+ r6 = gTasks[taskId].data[2];
+ gSprites[r6].callback = sub_80AD92C;
+ sub_80B1B14();
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ r6 = gTasks[taskId].data[2];
+ if (gSprites[r6].invisible)
+ {
+ FreeSpriteOamMatrix(&gSprites[r6]);
+ DestroySprite(&gSprites[r6]);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = debug_sub_80B9EBC;
+ gBattle_BG0_Y = DISPLAY_HEIGHT;
+ gBattle_BG2_Y = DISPLAY_HEIGHT;
+ }
+ break;
+ case 20:
+ if (gTasks[taskId].data[10]++ > 30)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 1;
+ }
+ break;
+ }
+}
+
+#endif
+
void sub_80AC0AC(s8 a)
{
MenuCursor_SetPos814A880(4, 88 + a * 16);
@@ -938,7 +1130,7 @@ void sub_80AC2CC(u8 taskId)
gSprites[spriteId].pos2.x = 120;
gSprites[spriteId].callback = sub_80AD8FC;
gTasks[taskId].data[2] = spriteId;
- gObjectBankIDs[gBankAttacker] = spriteId;
+ gBankSpriteIds[gBankAttacker] = spriteId;
sub_80B0BC4(sub_80B09E4(sContest.unk19215), FALSE);
gTasks[taskId].data[0] = 4;
return;
@@ -1941,7 +2133,7 @@ void Contest_CreatePlayerMon(u8 partyIndex)
else
gContestMons[gContestPlayerMonIndex].trainerGfxId = MAP_OBJ_GFX_LINK_MAY;
gContestMons[gContestPlayerMonIndex].flags = 0;
- gContestMons[gContestPlayerMonIndex].unk2C = 0;
+ gContestMons[gContestPlayerMonIndex].unk2C[0] = 0;
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
StringGetEnd10(name);
@@ -2008,7 +2200,7 @@ void Contest_CreatePlayerMon(u8 partyIndex)
gContestMons[gContestPlayerMonIndex].tough = tough;
}
-void Contest_InitAllPokemon(u8 a, u8 b)
+void Contest_InitAllPokemon(u8 contestType, u8 rank)
{
s32 i;
u8 opponentsCount = 0;
@@ -2019,17 +2211,17 @@ void Contest_InitAllPokemon(u8 a, u8 b)
// Find all suitable opponents
for (i = 0; i < 60; i++)
{
- if (b == gContestOpponents[i].unk1C_0)
+ if (rank == gContestOpponents[i].whichRank)
{
- if (a == 0 && gContestOpponents[i].unk1C_2)
+ if (contestType == 0 && gContestOpponents[i].aiPool_Cool)
opponents[opponentsCount++] = i;
- else if (a == 1 && gContestOpponents[i].unk1C_3)
+ else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty)
opponents[opponentsCount++] = i;
- else if (a == 2 && gContestOpponents[i].unk1C_4)
+ else if (contestType == 2 && gContestOpponents[i].aiPool_Cute)
opponents[opponentsCount++] = i;
- else if (a == 3 && gContestOpponents[i].unk1C_5)
+ else if (contestType == 3 && gContestOpponents[i].aiPool_Smart)
opponents[opponentsCount++] = i;
- else if (a == 4 && gContestOpponents[i].unk1C_6)
+ else if (contestType == 4 && gContestOpponents[i].aiPool_Tough)
opponents[opponentsCount++] = i;
}
}
@@ -5207,14 +5399,14 @@ void sub_80B28F0(u8 a)
void sub_80B292C(void)
{
- gObjectBankIDs[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
- InitSpriteAffineAnim(&gSprites[gObjectBankIDs[gBankTarget]]);
+ gBankSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ InitSpriteAffineAnim(&gSprites[gBankSpriteIds[gBankTarget]]);
sub_80B2968();
}
void sub_80B2968(void)
{
- struct Sprite *sprite = &gSprites[gObjectBankIDs[3]];
+ struct Sprite *sprite = &gSprites[gBankSpriteIds[3]];
sprite->pos2.x = 0;
sprite->pos2.y = 0;