summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2018-01-27 16:51:06 -0600
committerCameron Hall <cameronghall@cox.net>2018-01-27 16:51:06 -0600
commit0597628ae78755f4e30ae6bc79b3075e5b9c8ab8 (patch)
tree0b2964103554e55ba4e03d4dbe8103bc8f06fc41 /src
parent8aae2583eb851d1442b85e28d7bcb13a15c1818d (diff)
parente92ead0e159ccaa8301b189b9ef2bb1a33b2ea62 (diff)
Merge branch 'master' into german_debug
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/guard.c3
-rw-r--r--src/battle/battle_2.c17
-rw-r--r--src/battle/contest_link_80C857C.c723
-rw-r--r--src/contest.c6
-rw-r--r--src/contest_ai.c1
-rw-r--r--src/debug/matsuda_debug_menu.c9
-rw-r--r--src/engine/link.c9
-rw-r--r--src/engine/trade.c16
-rw-r--r--src/field/field_fadetransition.c2
-rw-r--r--src/rom3.c2
-rw-r--r--src/scene/berry_blender.c16
-rw-r--r--src/script_pokemon_util_80C4BF0.c17
12 files changed, 756 insertions, 65 deletions
diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c
index ab093eab1..254160109 100644
--- a/src/battle/anim/guard.c
+++ b/src/battle/anim/guard.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "battle.h"
#include "battle_anim.h"
#include "rom_8077ABC.h"
@@ -12,7 +13,7 @@ extern u16 gBattleTypeFlags;
void sub_80D3014(struct Sprite *sprite)
{
- if ((gBattleTypeFlags & 1) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2))
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2))
{
sub_807A3FC(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
sprite->pos1.y += 40;
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index e72a875fb..2171c6ef6 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -414,7 +414,7 @@ void sub_800EC9C(void)
case 0:
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished())
{
gBattleStruct->unk0 = 1;
gBattleStruct->unk1 = 1;
@@ -491,7 +491,7 @@ void sub_800EC9C(void)
}
break;
case 2:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2);
gBattleCommunication[0]++;
@@ -506,7 +506,7 @@ void sub_800EC9C(void)
}
break;
case 4:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2);
gBattleCommunication[0]++;
@@ -521,7 +521,7 @@ void sub_800EC9C(void)
}
break;
case 6:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2);
gBattleCommunication[0]++;
@@ -623,7 +623,7 @@ void sub_800F104(void)
}
}
#endif
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
sub_800F02C();
SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60);
@@ -696,7 +696,7 @@ void sub_800F298(void)
}
}
#endif
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gBattleStruct->unk0 = 1;
gBattleStruct->unk1 = 1;
@@ -790,7 +790,7 @@ void sub_800F298(void)
break;
case 2:
step_2:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2);
gBattleCommunication[0]++;
@@ -853,7 +853,7 @@ void sub_800F298(void)
}
break;
case 4:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon));
gBattleCommunication[0]++;
@@ -940,7 +940,6 @@ void sub_800F298(void)
if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0)
{
gPreBattleCallback1 = gMain.callback1;
- // debug
#if DEBUG
gMain.callback1 = debug_sub_80139E4;
#else
diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c
index 616a72d27..4fb236294 100644
--- a/src/battle/contest_link_80C857C.c
+++ b/src/battle/contest_link_80C857C.c
@@ -1,9 +1,728 @@
#include "global.h"
+#include "ewram.h"
+#include "random.h"
+#include "task.h"
+#include "contest.h"
+#include "text.h"
+#include "string_util.h"
#include "link.h"
+static void sub_80C8644(u8 taskId);
+static void sub_80C8660(u8 taskId);
+#if GERMAN
+static void de_sub_80C9274(bool32 arg0);
+static void de_sub_80C9294(bool32 arg0);
+#endif
+
+static void SendBlockToAllOpponents(const void *data, u16 size)
+{
+ memcpy(eContestLinkSendBuffer, data, size);
+ SendBlock(bitmask_all_link_players_but_self(), eContestLinkSendBuffer, size);
+}
+
+static bool8 HasPlayerReceivedBlock(u8 who)
+{
+ u8 flag = 1 << who;
+ if (!(GetBlockReceivedStatus() & flag))
+ return FALSE;
+ ResetBlockReceivedFlag(flag);
+ return TRUE;
+}
+
+static bool8 HaveAllPlayersReceivedBlock(void)
+{
+ int i;
+
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if (!((GetBlockReceivedStatus() >> i) & 1))
+ return FALSE;
+ }
+ ResetBlockReceivedFlags();
+ return TRUE;
+}
+
+void sub_80C8604(u8 taskId)
+{
+#if ENGLISH
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ gBlockRecvBuffer[i][0] = 0xff;
+#endif
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80C8644;
+}
+
+static void sub_80C8644(u8 taskId)
+{
+ gTasks[taskId].func = sub_80C8660;
+}
+
+static void sub_80C8660(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers)
+ {
+ gContestPlayerMonIndex = GetMultiplayerId();
+ if (GetLinkPlayerCount() == MAX_LINK_PLAYERS)
+ {
+ gIsLinkContest = TRUE;
+ SwitchTaskToFollowupFunc(taskId);
+ }
+ }
+}
+
+#ifdef NONMATCHING
+u8 sub_80C86A0(const u8 *string)
+{
+ u8 language = GAME_LANGUAGE;
+ if (string[0] == EXT_CTRL_CODE_BEGIN && string[1] == 0x15)
+ return language;
+ if (StringLength(string) > 5)
+ return language;
+ for (; *string != EOS; string++)
+ {
+ if (!((*string >= CHAR_A && *string <= CHAR_z) ||
+ (*string >= CHAR_0 + 0 && *string <= CHAR_0 + 9) ||
+ *string == CHAR_SPACE ||
+ *string == CHAR_PERIOD ||
+ *string == CHAR_COMMA ||
+ *string == 0xAB ||
+ *string == CHAR_QUESTION_MARK ||
+ *string == CHAR_MALE ||
+ *string == CHAR_FEMALE ||
+ *string == CHAR_SLASH ||
+ *string == CHAR_HYPHEN ||
+ *string == CHAR_ELLIPSIS ||
+ *string == 0xB1 ||
+ *string == 0xB2 ||
+ *string == 0xB3 ||
+ *string == 0xB1
+ ))
+ {
+ language = LANGUAGE_JAPANESE;
+ break;
+ }
+ }
+ return language;
+}
+#else
+__attribute__((naked)) u8 sub_80C86A0(const u8 *string)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tadds r4, r0, 0\n"
+ ".ifdef ENGLISH\n"
+ "\tmovs r5, 0x2\n"
+ ".else\n"
+ "\tmovs r5, 0x5\n"
+ ".endif\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFC\n"
+ "\tbne _080C86B6\n"
+ "\tldrb r0, [r4, 0x1]\n"
+ "\tcmp r0, 0x15\n"
+ "\tbne _080C86B6\n"
+ ".ifdef ENGLISH\n"
+ "\tmovs r0, 0x2\n"
+ ".else\n"
+ "\tmovs r0, 0x5\n"
+ ".endif\n"
+ "\tb _080C872C\n"
+ "_080C86B6:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl StringLength\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x5\n"
+ "\tbhi _080C872A\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _080C872A\n"
+ "_080C86CA:\n"
+ "\tldrb r1, [r4]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x45\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x33\n"
+ "\tbls _080C871E\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x5F\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x9\n"
+ "\tbls _080C871E\n"
+ "\tadds r0, r1, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAD\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB8\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAB\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAC\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB5\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB6\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xBA\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAE\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB0\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB1\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB2\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB3\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB1\n"
+ "\tbne _080C8728\n"
+ "_080C871E:\n"
+ "\tadds r4, 0x1\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _080C86CA\n"
+ "\tb _080C872A\n"
+ "_080C8728:\n"
+ "\tmovs r5, 0x1\n"
+ "_080C872A:\n"
+ "\tadds r0, r5, 0\n"
+ "_080C872C:\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+void sub_80C8734(u8 taskId)
+{
+ int i;
+ u8 *name;
+
+ switch (gTasks[taskId].data[0]) {
+#if ENGLISH
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+#elif GERMAN
+ case 8:
+#endif
+ case 0:
+ if (GetMultiplayerId() == 0) {
+ if (IsLinkTaskFinished()) {
+#if ENGLISH
+ memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon));
+ sub_8007E9C(2);
+ gTasks[taskId].data[0]++;
+#elif GERMAN
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[0] = 3;
+ }
+ else
+ {
+ memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon));
+ de_sub_80C9274(FALSE);
+ sub_8007E9C(2);
+ gTasks[taskId].data[0] = 1;
+ }
+#endif
+ }
+ }
+ else
+ {
+ memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon));
+#if GERMAN
+ de_sub_80C9294(FALSE);
+#endif
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ memcpy(gContestMons + i, gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
+ name = gContestMons[i].nickname;
+ if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
+ {
+ ConvertInternationalString(name, sub_80C86A0(name));
+ }
+ else if (name[10] == EXT_CTRL_CODE_BEGIN)
+ {
+ ConvertInternationalString(name, LANGUAGE_JAPANESE);
+ } else
+ {
+ name[5] = name[10];
+ name[10] = EOS;
+ }
+ name = gContestMons[i].trainerName;
+ if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
+ {
+ name[7] = EOS;
+ name[6] = name[4];
+ name[5] = name[3];
+ name[4] = name[2];
+ name[3] = name[1];
+ name[2] = name[0];
+ name[1] = 0x15;
+ name[0] = EXT_CTRL_CODE_BEGIN;
+ }
+ else
+ {
+ name[5] = name[7];
+ name[7] = EOS;
+ }
+ }
+ gTasks[taskId].data[0]++;
+ }
+ break;
+#if GERMAN
+ case 2:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ default:
+ gTasks[taskId].data[0]++;
+ break;
+#endif
+ }
+}
+
+void sub_80C88AC(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(&gRngValue, sizeof(u32));
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HasPlayerReceivedBlock(0))
+ {
+ memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(u32));
+ memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(u32));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+void sub_80C8938(u8 taskId)
+{
+ int i;
+
+ switch (gTasks[taskId].data[0])
+ {
+#if ENGLISH
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+#elif GERMAN
+ case 8:
+#endif
+ case 0:
+ gBlockSendBuffer[0] = gTasks[taskId].data[9];
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished())
+ {
+#if ENGLISH
+ sub_8007E9C(2);
+ gTasks[taskId].data[0]++;
+#elif GERMAN
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[0] = 3;
+ }
+ else
+ {
+ de_sub_80C9274(TRUE);
+ sub_8007E9C(2);
+ gTasks[taskId].data[0] = 1;
+ }
+#endif
+ }
+ }
+ else
+ {
+#if GERMAN
+ de_sub_80C9294(TRUE);
+#endif
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
+ }
+ gTasks[taskId].data[0]++;
+ }
+ break;
+#if GERMAN
+ case 2:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ default:
+ gTasks[taskId].data[0]++;
+ break;
+#endif
+ }
+}
+
+void sub_80C89DC(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(&gContestPlayerMonIndex, sizeof(u8));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+void sub_80C8A38(u8 taskId)
+{
+ int i;
+
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(&sContestantStatus[gContestPlayerMonIndex].currMove, sizeof(u16));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ *&sContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
+ }
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+void sub_80C8AD0(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gUnknown_02038678, sizeof gUnknown_02038678);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gUnknown_02038678, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038678);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ case 5:
+ case 8:
+ case 11:
+ if (gTasks[taskId].data[1]++ > 10)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gUnknown_02038680, sizeof gUnknown_02038680);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gUnknown_02038680, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038680);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 6:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gUnknown_02038688, sizeof gUnknown_02038688);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 7:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gUnknown_02038688, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038688);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 9:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gContestFinalStandings, sizeof gContestFinalStandings);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 10:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestFinalStandings);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void sub_80C8C80(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(sContestantStatus, 4 * sizeof(struct ContestantStatus));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(sContestantStatus, gBlockRecvBuffer[gUnknown_0203869B], 4 * sizeof(struct ContestantStatus));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ case 5:
+ case 8:
+ case 11:
+ if (gTasks[taskId].data[1]++ > 10)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(&shared192D0, sizeof shared192D0);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(&shared192D0, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared192D0);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 6:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(&shared19328, sizeof shared19328);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 7:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(&shared19328, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared19328);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 9:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 10:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void sub_80C8E1C(u8 taskId)
+{
+ int i;
+
+ switch (gTasks[taskId].data[0])
+ {
+#if ENGLISH
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+#elif GERMAN
+ case 8:
+#endif
+ case 0:
+ gBlockSendBuffer[0] = 0x64;
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished())
+ {
+#if ENGLISH
+ sub_8007E9C(2);
+ gTasks[taskId].data[0]++;
+#elif GERMAN
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[0] = 3;
+ }
+ else
+ {
+ de_sub_80C9274(FALSE);
+ sub_8007E9C(2);
+ gTasks[taskId].data[0] = 1;
+ }
+#endif
+ }
+ }
+ else
+ {
+#if GERMAN
+ de_sub_80C9294(FALSE);
+#endif
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gTasks[taskId].data[5 + i] = gBlockRecvBuffer[i][0];
+ }
+ gTasks[taskId].data[0]++;
+ }
+ break;
+#if GERMAN
+ case 2:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ default:
+ gTasks[taskId].data[0]++;
+ break;
+#endif
+ }
+}
+
+void sub_80C8EBC(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gUnknown_02038670, sizeof gUnknown_02038670);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gUnknown_02038670, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038670);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+void sub_80C8F34(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (HaveAllPlayersReceivedBlock())
+ {
+ memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
#if GERMAN
-void de_sub_80C9274(bool32 arg0)
+static void de_sub_80C9274(bool32 arg0)
{
if (deUnkValue2 == 1)
{
@@ -14,7 +733,7 @@ void de_sub_80C9274(bool32 arg0)
}
}
-void de_sub_80C9294(bool32 arg0)
+static void de_sub_80C9294(bool32 arg0)
{
if (deUnkValue2 == 1)
{
diff --git a/src/contest.c b/src/contest.c
index 2f988b9e4..e2695627e 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -61,7 +61,7 @@ extern u16 gBattle_BG0_Y;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG1_X;
extern u16 gBattle_WIN0H;
-extern u32 gUnknown_03005D28; // saved RNG value
+extern u32 gContestRngValue; // saved RNG value
extern struct SpriteTemplate gUnknown_02024E8C;
@@ -498,7 +498,7 @@ void sub_80AB6B4(u8 taskId)
GetMultiplayerId(); // unused return value
DestroyTask(taskId);
gTasks[sContest.mainTaskId].func = sub_80AB960;
- gRngValue = gUnknown_03005D28;
+ gRngValue = gContestRngValue;
}
}
@@ -2004,7 +2004,7 @@ void sub_80ADDA4(u8 taskId)
sub_80AF668();
sub_80AF138();
sub_80BE23C(sContestantStatus[gContestPlayerMonIndex].prevMove);
- gUnknown_03005D28 = gRngValue;
+ gContestRngValue = gRngValue;
StringExpandPlaceholders(gStringVar4, gUnknown_083CB02C);
Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
gTasks[taskId].data[2] = 0;
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 66b387270..1e249083b 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -8,7 +8,6 @@ extern u8 AreMovesContestCombo(u16, u16);
extern bool8 sub_80B214C(u8);
extern bool8 Contest_IsMonsTurnDisabled(u8);
-extern s16 gUnknown_02038670[];
extern u16 gSpecialVar_ContestCategory;
extern u8 *gAIScriptPtr;
diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index da1937adb..efd952ef7 100644
--- a/src/debug/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
@@ -18,14 +18,7 @@
#include "ewram.h"
extern u8 gUnknown_0203856C;
-extern s16 gUnknown_02038670[];
-extern s16 gUnknown_02038678[];
-extern s16 gUnknown_02038680[];
-extern u8 gContestFinalStandings[];
extern u8 gUnknown_02038694;
-extern u8 gIsLinkContest;
-extern u8 gUnknown_0203869B;
-extern u8 gContestPlayerMonIndex;
extern u16 gSpecialVar_ContestCategory;
extern u16 gSpecialVar_ContestRank;
@@ -40,8 +33,6 @@ extern u16 gBattle_BG3_Y;
extern u8 (*gMenuCallback)(void);
-extern bool8 gReceivedRemoteLinkPlayers;
-
static bool8 sub_80A9B78(void);
static void sub_80A9BE4(u8 taskId);
static void sub_80A9C98(u8);
diff --git a/src/engine/link.c b/src/engine/link.c
index 31311d345..8888f22f5 100644
--- a/src/engine/link.c
+++ b/src/engine/link.c
@@ -916,14 +916,9 @@ bool8 sub_8007E9C(u8 a1)
}
}
-bool8 sub_8007ECC(void)
+bool8 IsLinkTaskFinished(void)
{
- u8 retVal = FALSE;
-
- if (!gLinkCallback)
- retVal = TRUE;
-
- return retVal;
+ return gLinkCallback == NULL;
}
u8 GetBlockReceivedStatus(void)
diff --git a/src/engine/trade.c b/src/engine/trade.c
index c878f62db..36e6fc757 100644
--- a/src/engine/trade.c
+++ b/src/engine/trade.c
@@ -1711,7 +1711,7 @@ static bool8 sub_8048D44(void)
gUnknown_03004824->unk_0075 ++;
break;
case 1:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
if (GetBlockReceivedStatus() == 0)
{
@@ -2210,7 +2210,7 @@ static void sub_8049A20(void)
{
sub_804AADC(3, 1);
gUnknown_03004824->linkData[0] = 0xbbbb;
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
Trade_SendData(gUnknown_03004824);
}
@@ -2239,7 +2239,7 @@ static void sub_8049AC0(void)
else
{
sub_804AADC(3, 1);
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gUnknown_03004824->linkData[0] = 0xbbcc;
Trade_SendData(gUnknown_03004824);
@@ -4632,7 +4632,7 @@ static void sub_804BB78(void)
switch (gUnknown_03004828->unk_00bd)
{
case 1:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
Trade_SendData(gUnknown_03004828);
gUnknown_03004828->unk_00bd ++;
@@ -5534,13 +5534,13 @@ static void sub_804DC88(void)
gMain.state = 101;
gUnknown_03004828->unk_00c0 = 0;
}
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gMain.state = 2;
}
break;
case 101:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gMain.state = 2;
}
@@ -5592,7 +5592,7 @@ static void sub_804DC88(void)
gMain.state = 42;
break;
case 42:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
sub_8125E04();
gSoftResetDisabled = FALSE;
@@ -5607,7 +5607,7 @@ static void sub_804DC88(void)
}
break;
case 6:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gMain.state ++;
diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c
index 16ba50e4b..21235500a 100644
--- a/src/field/field_fadetransition.c
+++ b/src/field/field_fadetransition.c
@@ -146,7 +146,7 @@ void sub_8080A5C(u8 taskId)
task->data[0]++;
break;
case 1:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
pal_fill_for_map_transition();
task->data[0]++;
diff --git a/src/rom3.c b/src/rom3.c
index 34746c1a8..7b3051b86 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -477,7 +477,7 @@ void sub_800C1A8(u8 taskId)
}
break;
case 4:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
var = (ewram14004arr(0, gTasks[taskId].data[15]) | (ewram14004arr(1, gTasks[taskId].data[15]) << 8));
gTasks[taskId].data[13] = 1;
diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c
index c636e245c..24cbcb9c0 100644
--- a/src/scene/berry_blender.c
+++ b/src/scene/berry_blender.c
@@ -1163,7 +1163,7 @@ static void sub_804E9F8(void)
gBerryBlenderData->framesToWait = 0;
break;
case 9:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
ResetBlockReceivedFlags();
if (GetMultiplayerId() == 0)
@@ -1215,7 +1215,7 @@ static void sub_804E9F8(void)
}
break;
case 13:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gBerryBlenderData->field_0++;
sub_8051414(&gBerryBlenderData->field_168);
@@ -1257,7 +1257,7 @@ static void sub_804E9F8(void)
gBerryBlenderData->field_0++;
break;
case 20:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
sub_8007E24();
gBerryBlenderData->field_0++;
@@ -2506,7 +2506,7 @@ static void sub_8050954(void)
case 3:
if (/*multiplayerID != 0*/ GetMultiplayerId() != 0)
gBerryBlenderData->field_6F++;
- else if (sub_8007ECC())
+ else if (IsLinkTaskFinished())
{
gBerryBlenderData->field_1BC = gBerryBlenderData->gameFrameTime;
gBerryBlenderData->field_1C0 = gBerryBlenderData->max_RPM;
@@ -2646,7 +2646,7 @@ bool8 sub_8050CE8(void)
gBerryBlenderData->framesToWait = 0;
break;
case 1:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gBerryBlenderData->field_1C4++;
gSoftResetDisabled = TRUE;
@@ -2665,7 +2665,7 @@ bool8 sub_8050CE8(void)
}
break;
case 4:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
if (sub_8125E6C())
gBerryBlenderData->field_1C4 = 5;
@@ -2752,7 +2752,7 @@ static void sub_8050E30(void)
gBerryBlenderData->field_6F++;
break;
case 6:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
gBerryBlenderData->framesToWait = 0;
gBerryBlenderData->field_6F++;
@@ -2771,7 +2771,7 @@ static void sub_8050E30(void)
sub_80084A4();
break;
case 9:
- if (sub_8007ECC())
+ if (IsLinkTaskFinished())
{
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gBerryBlenderData->field_6F++;
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index f991297ab..02e66d313 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -32,26 +32,13 @@ extern void sub_80C4698(u8 *, u8);
extern struct SpriteTemplate gUnknown_02024E8C;
-extern u8 gContestPlayerMonIndex;
-extern u8 gIsLinkContest;
-extern u8 gPlayerPartyCount;
extern u8 gSelectedOrderFromParty[];
-extern u16 gSpecialVar_0x8004;
-extern u16 gSpecialVar_0x8005;
-extern u16 gSpecialVar_0x8006;
-
extern u16 gSpecialVar_ContestCategory;
extern u16 gSpecialVar_ContestRank;
-extern u16 gSpecialVar_Result;
-
-extern u32 gUnknown_03005D28;
extern u8 gUnknown_02038694;
extern u8 gUnknown_0203856C;
-extern u8 gContestFinalStandings[];
-extern s16 gUnknown_02038670[];
-extern s16 gUnknown_02038678[];
void SetContestTrainerGfxIds(void)
{
@@ -373,8 +360,8 @@ void ScriptRandom(void)
if(gIsLinkContest & 1)
{
- gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691;
- random = gUnknown_03005D28 >> 16;
+ gContestRngValue = 1103515245 * gContestRngValue + 24691;
+ random = gContestRngValue >> 16;
scriptPtr = &gSpecialVar_Result;
}
else