summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-08-13 03:09:47 -0400
committerGriffinR <griffin.g.richards@gmail.com>2020-08-13 16:27:40 -0400
commit4911849723195b1b7228a28bb294072070376b2e (patch)
treedccaea194d86b3145b2a8b1ad5b80b50bfd1e1a3 /src
parentaca50c87beaa88f66ca2a8602c23411fd20b0884 (diff)
Document link contest connection
Diffstat (limited to 'src')
-rw-r--r--src/battle_controller_player.c4
-rw-r--r--src/battle_main.c14
-rw-r--r--src/battle_tower.c4
-rw-r--r--src/berry_blender.c16
-rwxr-xr-xsrc/berry_crush.c30
-rw-r--r--src/cable_club.c28
-rw-r--r--src/contest.c35
-rw-r--r--src/contest_link.c66
-rw-r--r--src/contest_link_util.c133
-rw-r--r--src/contest_util.c107
-rw-r--r--src/dodrio_berry_picking.c8
-rwxr-xr-xsrc/ereader_screen.c4
-rw-r--r--src/field_screen_effect.c6
-rw-r--r--src/field_specials.c4
-rw-r--r--src/link.c156
-rw-r--r--src/link_rfu_2.c109
-rw-r--r--src/mystery_event_menu.c4
-rw-r--r--src/mystery_gift.c4
-rwxr-xr-xsrc/pokemon_jump.c2
-rw-r--r--src/record_mixing.c6
-rw-r--r--src/save.c6
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c2
-rw-r--r--src/trade.c46
-rwxr-xr-xsrc/trainer_card.c2
-rw-r--r--src/union_room.c22
-rw-r--r--src/union_room_battle.c4
-rwxr-xr-xsrc/union_room_chat.c6
27 files changed, 421 insertions, 407 deletions
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 6dd9cd2f4..1dc81f1a9 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -886,9 +886,9 @@ void sub_80587B0(void)
if (IsLinkTaskFinished())
{
if (gWirelessCommType == 0)
- sub_800AC34();
+ SetCloseLinkCallback();
else
- sub_800ADF8();
+ SetLinkStandbyCallback();
gBattlerControllerFuncs[gActiveBattler] = sub_80586F8;
}
diff --git a/src/battle_main.c b/src/battle_main.c
index dd31e12d5..72890d6da 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void)
{
gBattleCommunication[MULTIUSE_STATE]++;
if (gWirelessCommType)
- sub_800ADF8();
+ SetLinkStandbyCallback();
else
- sub_800AC34();
+ SetCloseLinkCallback();
}
break;
case 3:
@@ -2368,7 +2368,7 @@ static void sub_8038F34(void)
case 6:
if (IsLinkTaskFinished() == TRUE)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2382,7 +2382,7 @@ static void sub_8038F34(void)
break;
case 8:
if (!gWirelessCommType)
- sub_800AC34();
+ SetCloseLinkCallback();
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 9:
@@ -2556,7 +2556,7 @@ static void sub_803939C(void)
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
if (gMain.field_439_x4)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
@@ -2566,7 +2566,7 @@ static void sub_803939C(void)
if (--gBattleCommunication[1] == 0)
{
if (gMain.field_439_x4 && !gWirelessCommType)
- sub_800AC34();
+ SetCloseLinkCallback();
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2605,7 +2605,7 @@ static void sub_803939C(void)
{
if (gMain.field_439_x4)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 4695d9aa0..7377a6798 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -2627,7 +2627,7 @@ static void LoadLinkMultiOpponentsData(void)
}
break;
case 4:
- sub_800AC34();
+ SetCloseLinkCallback();
gSpecialVar_Result = 5;
break;
case 5:
@@ -2644,7 +2644,7 @@ static void LoadLinkMultiOpponentsData(void)
static void sub_8164DCC(void)
{
if (gWirelessCommType != 0)
- sub_800AC34();
+ SetCloseLinkCallback();
}
static void SetMultiPartnerGfx(void)
diff --git a/src/berry_blender.c b/src/berry_blender.c
index a2a96c089..14a1ffff8 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -1230,7 +1230,7 @@ static void sub_8080018(void)
sBerryBlenderData->field_114 = 0;
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->framesToWait = 0;
break;
case 9:
@@ -1238,7 +1238,7 @@ static void sub_8080018(void)
{
ResetBlockReceivedFlags();
if (GetMultiplayerId() == 0)
- sub_800A4D8(4);
+ SendBlockRequest(4);
sBerryBlenderData->mainState++;
}
break;
@@ -1332,7 +1332,7 @@ static void sub_8080018(void)
sBerryBlenderData->mainState++;
break;
case 19:
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->mainState++;
break;
case 20:
@@ -2587,7 +2587,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
switch (sBerryBlenderData->field_1A0)
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->field_1A0 = 1;
sBerryBlenderData->framesToWait = 0;
break;
@@ -2606,7 +2606,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
case 3:
if (++sBerryBlenderData->framesToWait == 10)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->field_1A0++;
}
break;
@@ -2682,7 +2682,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
break;
case 5:
Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->gameEndState++;
break;
case 6:
@@ -2702,7 +2702,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
break;
case 8:
sBerryBlenderData->gameEndState++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 9:
if (IsLinkTaskFinished())
@@ -2732,7 +2732,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
case 11:
if (++sBerryBlenderData->framesToWait > 30)
{
- sub_800AC34();
+ SetCloseLinkCallback();
sBerryBlenderData->gameEndState++;
}
break;
diff --git a/src/berry_crush.c b/src/berry_crush.c
index 90a299a74..42199e757 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -1125,7 +1125,7 @@ int sub_802130C(void)
switch (var0->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -2027,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
r4->unkC = 3;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
++r4->unkC;
return 0;
case 2:
@@ -2110,7 +2110,7 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (IsLinkTaskFinished())
@@ -2167,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
sub_8022BEC(3, 1, NULL);
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -2213,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
{
case 0:
sub_80214A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -2233,7 +2233,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
return 0;
r4->unk138.unk38[r4->unk138.unk0] = NULL;
++r4->unk138.unk0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 4:
if (!IsLinkTaskFinished())
@@ -2247,7 +2247,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
break;
case 5:
sub_80216A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 6:
if (!IsLinkTaskFinished())
@@ -2295,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2323,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
return 0;
// fallthrough
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2703,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
case 4:
if (!sub_80218D4(r4, &r4->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r4->unk10 = 0;
break;
case 5:
@@ -2737,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
case 2:
if (!sub_80218D4(r5, &r5->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r5->unk10 = 0;
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
@@ -3005,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
r5->unkC = 0;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -3084,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -3184,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1
switch (r5->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
return 0;
- sub_800AC34();
+ SetCloseLinkCallback();
break;
case 2:
if (gReceivedRemoteLinkPlayers != 0)
diff --git a/src/cable_club.c b/src/cable_club.c
index 15e468390..b6fba361e 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -203,7 +203,7 @@ static void sub_80B2600(u8 taskId)
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 10)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
DestroyTask(taskId);
}
}
@@ -357,7 +357,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId)
if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS
|| gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -392,7 +392,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
{
if (!Link_AnyPartnersPlayingRubyOrSapphire())
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -405,7 +405,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
}
else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -426,7 +426,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
- sub_800A4D8(2);
+ SendBlockRequest(2);
}
}
@@ -481,7 +481,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
{
// Unsuccessful battle tower linkup
*linkupStatus = LINKUP_FAILED_BATTLE_TOWER;
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_StopLinkup;
}
else
@@ -503,7 +503,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
else
{
// Unsuccessful linkup
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_StopLinkup;
}
}
@@ -686,7 +686,7 @@ static void Task_ValidateMixingGameLanguage(u8 taskId)
if (mixingForeignGames)
{
gSpecialVar_Result = LINKUP_FOREIGN_GAME;
- sub_800AD10();
+ SetCloseLinkCallbackHandleJP();
gTasks[taskId].tState = 1;
return;
}
@@ -856,7 +856,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
task->tState++;
break;
case 3:
- sub_800AC34();
+ SetCloseLinkCallback();
task->tState++;
break;
case 4:
@@ -919,7 +919,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
tState = 5;
break;
case 5:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 6;
break;
case 6:
@@ -974,7 +974,7 @@ static void CB2_ReturnFromUnionRoomBattle(void)
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
gMain.state = 1;
}
break;
@@ -1113,7 +1113,7 @@ static void Task_StartWiredTrade(u8 taskId)
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800AC34();
+ SetCloseLinkCallback();
task->tState++;
break;
case 3:
@@ -1146,7 +1146,7 @@ static void Task_StartWirelessTrade(u8 taskId)
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState++;
break;
case 3:
@@ -1264,7 +1264,7 @@ static void sub_80B3AAC(u8 taskId)
// Unused
static void sub_80B3AD0(u8 taskId)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = sub_80B3AAC;
}
diff --git a/src/contest.c b/src/contest.c
index b90f89498..ab3897fa1 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -69,7 +69,7 @@ static void Task_EndCommunicateMoveSelections(u8 taskId);
static void Task_HideMoveSelectScreen(u8 taskId);
static void Task_HideApplauseMeterForAppealStart(u8 taskId);
static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId);
-static void sub_80D8A88(u8 taskId);
+static void Task_AppealSetup(u8 taskId);
static void Task_DoAppeals(u8 taskId);
static void sub_80DA110(u8);
static void sub_80DA134(struct Sprite *);
@@ -94,7 +94,7 @@ static void Task_CommunicateFinalStandings(u8);
static void Task_EndCommunicateFinalStandings(u8);
static void Task_ContestReturnToField(u8);
static void FieldCB_ContestReturnToField(void);
-static bool8 sub_80DA8A4(void);
+static bool8 IsPlayerLinkLeader(void);
static void PrintContestantTrainerName(u8);
static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1);
static void PrintContestantMonName(u8);
@@ -250,7 +250,7 @@ EWRAM_DATA u8 gContestantTurnOrder[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gLinkContestFlags = 0;
// Bit 0: Is a link contest
// Bit 1: Link contest uses wireless adapter
-EWRAM_DATA u8 gUnknown_02039F2B = 0;
+EWRAM_DATA u8 gContestLinkLeaderIndex = 0;
EWRAM_DATA u16 gSpecialVar_ContestCategory = 0;
EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
EWRAM_DATA u8 gNumLinkContestPlayers = 0;
@@ -1118,7 +1118,7 @@ static void Task_TryStartLinkContest(u8 taskId)
case 1:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
return;
@@ -1566,16 +1566,16 @@ static void Task_HideApplauseMeterForAppealStart(u8 taskId)
static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId)
{
if (!eContest.applauseMeterIsMoving && !eContest.sliderHeartsAnimating)
- gTasks[taskId].func = sub_80D8A88;
+ gTasks[taskId].func = Task_AppealSetup;
}
-static void sub_80D8A88(u8 taskId)
+static void Task_AppealSetup(u8 taskId)
{
if (++gTasks[taskId].data[0] > 19)
{
eContest.turnNumber = 0;
eContest.unk1921C = gRngValue;
- if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && sub_80DA8A4())
+ if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && IsPlayerLinkLeader())
{
s32 i;
@@ -1611,7 +1611,7 @@ static void Task_DoAppeals(u8 taskId)
u8 taskId2;
eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
+ if (IsPlayerLinkLeader())
sub_80DD080(eContest.currentContestant);
taskId2 = CreateTask(sub_80FCC88, 0);
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
@@ -2339,7 +2339,7 @@ static void sub_80DA198(u8 taskId)
u8 taskId2;
eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
+ if (IsPlayerLinkLeader())
{
RankContestants();
SetAttentionLevels();
@@ -2619,9 +2619,9 @@ static void TryPutPlayerLast(void)
gContestPlayerMonIndex = CONTESTANT_COUNT - 1;
}
-static bool8 sub_80DA8A4(void)
+static bool8 IsPlayerLinkLeader(void)
{
- if (gContestPlayerMonIndex == gUnknown_02039F2B)
+ if (gContestPlayerMonIndex == gContestLinkLeaderIndex)
return TRUE;
return FALSE;
}
@@ -2902,7 +2902,7 @@ static void PrintContestantMonNameWithColor(u8 contestant, u8 color)
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, 7);
}
-static u16 sub_80DAFE0(u8 who, u8 contestCategory)
+static u16 CalculateContestantRound1Points(u8 who, u8 contestCategory)
{
u8 statMain;
u8 statSub1;
@@ -2940,12 +2940,12 @@ static u16 sub_80DAFE0(u8 who, u8 contestCategory)
return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
}
-void sub_80DB09C(u8 contestCategory)
+void CalculateRound1Points(u8 contestCategory)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gContestMonRound1Points[i] = sub_80DAFE0(i, contestCategory);
+ gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory);
}
static u8 sub_80DB0C4(void)
@@ -4252,13 +4252,12 @@ static void sub_80DD080(u8 contestant)
u16 move;
u8 effect;
u8 rnd;
- bool8 r8;
+ bool8 canUseTurn;
s32 i;
eContestantStatus[contestant].appeal2 = 0;
eContestantStatus[contestant].appeal1 = 0;
- r8 = ContestantCanUseTurn(contestant);
- if (!r8)
+ if (!ContestantCanUseTurn(contestant))
return;
move = eContestantStatus[contestant].currMove;
@@ -4974,7 +4973,7 @@ static void sub_80DE4A8(u8 taskId)
u8 taskId2;
eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
+ if (IsPlayerLinkLeader())
sub_80DBAA0();
taskId2 = CreateTask(sub_80FCC88, 0);
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
diff --git a/src/contest_link.c b/src/contest_link.c
index 172a2b2ba..aff24052a 100644
--- a/src/contest_link.c
+++ b/src/contest_link.c
@@ -9,8 +9,8 @@
#include "contest_link.h"
#include "constants/flags.h"
-static void sub_80FC5C0(u8);
-static void sub_80FC5DC(u8);
+static void Task_LinkContest_StartInitFlags(u8);
+static void Task_LinkContest_InitFlags(u8);
#define tState data[0]
#define tCategory data[9]
@@ -52,7 +52,7 @@ bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
}
}
-void sub_80FC580(u8 taskId)
+void Task_LinkContest_Init(u8 taskId)
{
u8 i;
@@ -60,15 +60,15 @@ void sub_80FC580(u8 taskId)
gBlockRecvBuffer[i][0] = 0xFF;
gTasks[taskId].tState = 0;
- gTasks[taskId].func = sub_80FC5C0;
+ gTasks[taskId].func = Task_LinkContest_StartInitFlags;
}
-static void sub_80FC5C0(u8 taskId)
+static void Task_LinkContest_StartInitFlags(u8 taskId)
{
- gTasks[taskId].func = sub_80FC5DC;
+ gTasks[taskId].func = Task_LinkContest_InitFlags;
}
-static void sub_80FC5DC(u8 taskId)
+static void Task_LinkContest_InitFlags(u8 taskId)
{
int i;
@@ -91,8 +91,9 @@ static void sub_80FC5DC(u8 taskId)
SwitchTaskToFollowupFunc(taskId);
}
-bool32 sub_80FC670(s16 *state)
+bool32 LinkContest_TryLinkStandby(s16 *state)
{
+ // Skip standby for RS cabled links
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
return TRUE;
@@ -101,7 +102,7 @@ bool32 sub_80FC670(s16 *state)
case 0:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
(*state)++;
}
return FALSE;
@@ -116,16 +117,17 @@ bool32 sub_80FC670(s16 *state)
}
}
-void sub_80FC6BC(u8 taskId)
+void Task_LinkContest_CommunicateMonsRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].tState)
{
case 0:
+ // Send players mon
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
@@ -141,6 +143,7 @@ void sub_80FC6BC(u8 taskId)
}
break;
case 1:
+ // Wait for other players data
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
@@ -153,9 +156,10 @@ void sub_80FC6BC(u8 taskId)
}
break;
case 10:
+ // Only if leader. Request other players data
if (++gTasks[taskId].tTimer > 300)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].tState = 1;
}
break;
@@ -168,7 +172,7 @@ void sub_80FC6BC(u8 taskId)
}
}
-void sub_80FC804(u8 taskId)
+void Task_LinkContest_CommunicateRngRS(u8 taskId)
{
switch (gTasks[taskId].tState)
{
@@ -198,11 +202,11 @@ void sub_80FC804(u8 taskId)
}
}
-void sub_80FC894(u8 taskId)
+void Task_LinkContest_CommunicateCategoryRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].tState)
@@ -231,7 +235,7 @@ void sub_80FC894(u8 taskId)
case 10:
if (++gTasks[taskId].tTimer > 10)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].tState = 1;
}
break;
@@ -311,7 +315,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
case 1:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints));
+ memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints));
gTasks[taskId].tState++;
}
break;
@@ -335,7 +339,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
case 4:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonAppealPointTotals));
+ memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals));
gTasks[taskId].tState++;
}
break;
@@ -349,7 +353,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
case 7:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points));
+ memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points));
gTasks[taskId].tState++;
}
break;
@@ -363,7 +367,7 @@ void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
case 10:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
+ memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings));
gTasks[taskId].tState++;
}
break;
@@ -388,7 +392,7 @@ void sub_80FCC88(u8 taskId)
case 1:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
+ memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
gTasks[taskId].tState++;
}
break;
@@ -412,7 +416,7 @@ void sub_80FCC88(u8 taskId)
case 4:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
+ memcpy(gContestResources->field_8, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct UnknownContestStruct7));
gTasks[taskId].tState++;
}
break;
@@ -426,7 +430,7 @@ void sub_80FCC88(u8 taskId)
case 7:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
+ memcpy(gContestResources->field_10, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct UnknownContestStruct5));
gTasks[taskId].tState++;
}
break;
@@ -440,7 +444,7 @@ void sub_80FCC88(u8 taskId)
case 10:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
gTasks[taskId].tState++;
}
break;
@@ -451,11 +455,11 @@ void sub_80FCC88(u8 taskId)
}
}
-void sub_80FCE48(u8 taskId)
+void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].tState)
@@ -484,7 +488,7 @@ void sub_80FCE48(u8 taskId)
case 10:
if (++gTasks[taskId].tTimer > 10)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].tState = 1;
}
break;
@@ -499,7 +503,7 @@ void sub_80FCE48(u8 taskId)
void Task_LinkContest_CommunicateRound1Points(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].tState)
@@ -514,7 +518,7 @@ void Task_LinkContest_CommunicateRound1Points(u8 taskId)
case 1:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonRound1Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound1Points));
+ memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points));
gTasks[taskId].tState++;
}
break;
@@ -528,7 +532,7 @@ void Task_LinkContest_CommunicateRound1Points(u8 taskId)
void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].tState)
@@ -543,7 +547,7 @@ void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
case 1:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
gTasks[taskId].tState++;
}
break;
diff --git a/src/contest_link_util.c b/src/contest_link_util.c
index 02c94f0ba..31ffb5fdb 100644
--- a/src/contest_link_util.c
+++ b/src/contest_link_util.c
@@ -6,21 +6,31 @@
#include "random.h"
#include "task.h"
-static void sub_81D9F14(u8);
-static void sub_81D9F30(u8);
-static void sub_81D9F4C(u8);
-static void sub_81D9F68(u8);
-static void sub_81DA10C(u8);
-static void sub_81DA138(u8);
-static void sub_81DA160(u8);
-static void sub_81DA244(u8);
-static void sub_81DA2E8(u8);
-static void sub_81DA3B8(u8);
-static void sub_81DA488(u8);
+/*
+ The functions in this file handle preliminary communication
+ for Emerald-only link contests. If the link contest has an RS
+ player linked, none of these functions are used.
+
+ The equivalent functions for RS-linked contests are spread
+ between contest_link.c and contest_util.c, and are suffixed RS
+ instead of Em
+*/
+
+static void Task_LinkContest_CommunicateMonsEm(u8);
+static void Task_LinkContest_StartCommunicateRngEm(u8);
+static void Task_LinkContest_CommunicateRngEm(u8);
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8);
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8);
+static void Task_LinkContest_StartCommunicateCategoryEm(u8);
+static void Task_LinkContest_CommunicateCategoryEm(u8);
+static void Task_LinkContest_SetUpContestEm(u8);
+static void Task_LinkContest_CommunicateAIMonsEm(u8);
+static void Task_LinkContest_CalculateRound1Em(u8);
+static void Task_LinkContest_CalculateTurnOrderEm(u8);
#define tCategory data[9]
-void sub_81D9DE4(u8 taskId)
+void Task_LinkContest_StartCommunicationEm(u8 taskId)
{
int gameCleared;
@@ -47,57 +57,51 @@ void sub_81D9DE4(u8 taskId)
gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank;
gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared;
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm);
}
-static void sub_81D9F14(u8 taskId)
+static void Task_LinkContest_StartCommunicateRngEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm);
}
-static void sub_81D9F30(u8 taskId)
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm);
}
-static void sub_81D9F4C(u8 taskId)
+static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm);
}
-static void sub_81D9F68(u8 taskId)
+static void Task_LinkContest_SetUpContestEm(u8 taskId)
{
u8 i;
u8 rank;
int gameCleared;
- u8 contestCategories[CONTESTANT_COUNT];
- u8 data2[CONTESTANT_COUNT];
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
- memset(contestCategories, 0, sizeof(contestCategories));
- memset(data2, 0, sizeof(data2));
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
for (i = 0; i < gNumLinkContestPlayers; i++)
- contestCategories[i] = gTasks[taskId].data[i + 1];
+ categories[i] = gTasks[taskId].data[i + 1];
// Ensure all players are doing the same category
- i = 0;
- if (i < gNumLinkContestPlayers)
- {
- while (++i < gNumLinkContestPlayers)
- {
- if (contestCategories[0] != contestCategories[i])
- break;
- }
- }
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = FALSE;
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
else
- gSpecialVar_0x8004 = TRUE;
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
for (i = 0; i < gNumLinkContestPlayers; i++)
- data2[i] = gTasks[taskId].data[i + 5];
+ leaderIds[i] = gTasks[taskId].data[i + 5];
+ // If < 4 players and player is leader, set AI contestants based on rank and game clear
if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0)
{
rank = gContestMons[0].highestRank;
@@ -110,43 +114,45 @@ static void sub_81D9F68(u8 taskId)
if (rank)
rank--;
- gameCleared = 1;
+ gameCleared = TRUE;
for (i = 0; i < gNumLinkContestPlayers; i++)
{
if (!gContestMons[i].gameCleared)
{
- gameCleared = 0;
+ gameCleared = FALSE;
break;
}
}
- SetLinkAIContestants(contestCategories[0], rank, gameCleared);
+ SetLinkAIContestants(categories[0], rank, gameCleared);
}
- gUnknown_02039F2B = sub_80F86E0(data2);
+ // Assign link leader. After initial communication all players will read data only from them
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+
if (gNumLinkContestPlayers < CONTESTANT_COUNT)
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateAIMonsEm, Task_LinkContest_CalculateRound1Em);
else
- gTasks[taskId].func = sub_81DA10C;
+ gTasks[taskId].func = Task_LinkContest_CalculateRound1Em;
}
-static void sub_81DA10C(u8 taskId)
+static void Task_LinkContest_CalculateRound1Em(u8 taskId)
{
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_81DA138);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm);
}
-static void sub_81DA138(u8 taskId)
+static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
}
-static void sub_81DA160(u8 taskId)
+static void Task_LinkContest_CommunicateMonsEm(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -178,9 +184,9 @@ static void sub_81DA160(u8 taskId)
}
}
-static void sub_81DA244(u8 taskId)
+static void Task_LinkContest_CommunicateRngEm(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -193,6 +199,7 @@ static void sub_81DA244(u8 taskId)
case 0:
if (GetMultiplayerId() == 0)
{
+ // Only the leader sends the RNG seed
if (!IsLinkTaskFinished())
return;
@@ -201,10 +208,12 @@ static void sub_81DA244(u8 taskId)
}
else
{
+ // Other link members skip to waiting
gTasks[taskId].data[0]++;
}
break;
case 1:
+ // Wait to receive RNG data
if (LinkContest_GetBlockReceived(0))
{
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
@@ -215,13 +224,13 @@ static void sub_81DA244(u8 taskId)
}
}
-static void sub_81DA2E8(u8 taskId)
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId)
{
int i;
- u16 data[4];
- u16 var0;
+ u16 data[CONTESTANT_COUNT];
+ u16 leaderId;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -234,8 +243,8 @@ static void sub_81DA2E8(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- var0 = 0x6E;
- if (LinkContest_SendBlock(&var0, sizeof(var0)) == 1)
+ leaderId = 0x6E;
+ if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1)
gTasks[taskId].data[0]++;
}
break;
@@ -254,13 +263,13 @@ static void sub_81DA2E8(u8 taskId)
}
}
-static void sub_81DA3B8(u8 taskId)
+static void Task_LinkContest_CommunicateCategoryEm(u8 taskId)
{
int i;
u16 data[CONTESTANT_COUNT];
u16 category;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -293,11 +302,11 @@ static void sub_81DA3B8(u8 taskId)
}
}
-static void sub_81DA488(u8 taskId)
+static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
diff --git a/src/contest_util.c b/src/contest_util.c
index 1fd3e0482..23b9dcaaa 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -151,14 +151,14 @@ static void Task_CreateConfetti(u8);
static void SpriteCB_TextBoxSlideIn(struct Sprite *);
static void SpriteCB_TextBoxSlideOut(struct Sprite *);
static void SpriteCB_EndTextBoxSlideIn(struct Sprite *);
-static void sub_80F8508(u8);
-static void sub_80F8568(u8);
-static void sub_80F8584(u8);
-static void sub_80F85A0(u8);
-static void sub_80F85BC(u8);
-static void sub_80F86B8(u8);
-static void sub_80F878C(u8);
-static void sub_80F87B4(u8);
+static void Task_StartCommunication(u8);
+static void Task_StartCommunicateRngRS(u8);
+static void Task_StartCommunicateLeaderIdsRS(u8);
+static void Task_StartCommunicateCategoryRS(u8);
+static void Task_LinkContest_SetUpContestRS(u8);
+static void Task_LinkContest_CalculateTurnOrderRS(u8);
+static void Task_LinkContest_Disconnect(u8);
+static void Task_LinkContest_WaitDisconnect(u8);
static void SpriteCB_Confetti(struct Sprite *sprite);
static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
@@ -602,7 +602,7 @@ static void Task_ShowContestResults(u8 taskId)
case 2:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].tState++;
}
return;
@@ -975,7 +975,7 @@ static void Task_TryDisconnectLinkPartners(u8 taskId)
if (!gTasks[taskId].data[10])
{
ShowLinkResultsTextBox(gText_CommunicationStandby);
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect;
}
}
@@ -2207,7 +2207,7 @@ void TryEnterContestMon(void)
if (eligibility)
{
SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
- sub_80DB09C(gSpecialVar_ContestCategory);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
}
gSpecialVar_Result = eligibility;
@@ -2409,103 +2409,102 @@ void ContestLinkTransfer(u8 category)
{
u8 newTaskId;
ScriptContext2_Enable();
- newTaskId = CreateTask(sub_80FC580, 0);
- SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508);
+ newTaskId = CreateTask(Task_LinkContest_Init, 0);
+ SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
gTasks[newTaskId].data[9] = category;
}
-static void sub_80F8508(u8 taskId)
+static void Task_StartCommunication(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
{
CreateContestMonFromParty(gContestMonPartyIndex);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS);
}
else
{
CreateContestMonFromParty(gContestMonPartyIndex);
- gTasks[taskId].func = sub_81D9DE4;
+ gTasks[taskId].func = Task_LinkContest_StartCommunicationEm;
}
}
-static void sub_80F8568(u8 taskId)
+static void Task_StartCommunicateRngRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS);
}
-static void sub_80F8584(u8 taskId)
+static void Task_StartCommunicateLeaderIdsRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS);
}
-static void sub_80F85A0(u8 taskId)
+static void Task_StartCommunicateCategoryRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS);
}
-static void sub_80F85BC(u8 taskId)
+static void Task_LinkContest_SetUpContestRS(u8 taskId)
{
u8 i;
- u8 sp0[4];
- u8 sp4[4];
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
- memset(sp0, 0, sizeof(sp0));
- memset(sp4, 0, sizeof(sp4));
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
for (i = 0; i < gNumLinkContestPlayers; i++)
- sp0[i] = gTasks[taskId].data[i + 1];
+ categories[i] = gTasks[taskId].data[i + 1];
- for (i = 0; i < gNumLinkContestPlayers;)
- {
- i++;
- if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i])
- break;
- }
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
for (i = 0; i < gNumLinkContestPlayers; i++)
- sp4[i] = gTasks[taskId].data[i + 5];
+ leaderIds[i] = gTasks[taskId].data[i + 5];
- gUnknown_02039F2B = sub_80F86E0(sp4);
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_80F86B8);
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS);
}
-static void sub_80F86B8(u8 taskId)
+static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
}
-u8 sub_80F86E0(u8 *arg0)
+u8 LinkContest_GetLeaderIndex(u8 *ids)
{
int i;
- u8 result = 0;
+ u8 leaderIdx = 0;
for (i = 1; i < gNumLinkContestPlayers; i++)
{
- if (arg0[result] < arg0[i])
- result = i;
+ if (ids[leaderIdx] < ids[i])
+ leaderIdx = i;
}
- return result;
+ return leaderIdx;
}
-void sub_80F8714(u8 taskId)
+void Task_LinkContest_FinalizeConnection(u8 taskId)
{
int i;
- if (gSpecialVar_0x8004 == 1)
+ if (gSpecialVar_0x8004 == TRUE)
{
+ // Link partner data doesn't agree, disconnect
if (IsLinkTaskFinished())
- gTasks[taskId].func = sub_80F878C;
+ gTasks[taskId].func = Task_LinkContest_Disconnect;
}
else
{
+ // Succesfully connected
for (i = 0; i < CONTESTANT_COUNT; i++)
StringGetEnd10(gContestMons[i].nickname);
@@ -2516,13 +2515,13 @@ void sub_80F8714(u8 taskId)
}
}
-static void sub_80F878C(u8 taskId)
+static void Task_LinkContest_Disconnect(u8 taskId)
{
- sub_800AC34();
- gTasks[taskId].func = sub_80F87B4;
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_LinkContest_WaitDisconnect;
}
-static void sub_80F87B4(u8 taskId)
+static void Task_LinkContest_WaitDisconnect(u8 taskId)
{
if (!gReceivedRemoteLinkPlayers)
{
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index 3ca7a1cf7..fc132943c 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -558,7 +558,7 @@ static void sub_8024BC8(u8 taskId)
case 2:
if (!sub_802A770())
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk0C++;
}
break;
@@ -671,7 +671,7 @@ static void sub_8024E38(void)
gUnknown_02022C98->unk10++;
break;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk10++;
break;
case 2:
@@ -690,7 +690,7 @@ static void sub_8024E38(void)
case 4:
if (++gUnknown_02022C98->unk30 > 5)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk10++;
}
break;
@@ -1081,7 +1081,7 @@ static void sub_8025644(void)
switch (gUnknown_02022C98->unk10)
{
case 0:
- sub_800AC34();
+ SetCloseLinkCallback();
sub_80292E0(7);
gUnknown_02022C98->unk10++;
break;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 26f7eb679..823e03dd4 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -192,7 +192,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
}
break;
case 4:
- sub_800ABF4(0);
+ SetCloseLinkCallbackAndType(0);
*arg0 = 5;
break;
case 5:
@@ -403,7 +403,7 @@ static void sub_81D5084(u8 taskId)
break;
case 15:
data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer);
- sub_800ABF4(data->unkE);
+ SetCloseLinkCallbackAndType(data->unkE);
data->unk8 = 16;
break;
case 16:
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 53057fc31..183bd67fa 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -197,7 +197,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -230,7 +230,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -623,7 +623,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
case 1:
if (!PaletteFadeActive() && BGMusicStopped())
{
- sub_800AC34();
+ SetCloseLinkCallback();
data[0]++;
}
break;
diff --git a/src/field_specials.c b/src/field_specials.c
index e806440f7..db82f35b4 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -3865,7 +3865,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 7:
if (IsLinkTaskFinished() == 1)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
break;
@@ -3878,7 +3878,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 9:
if (gWirelessCommType == 0)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
EnableBothScriptContexts();
diff --git a/src/link.c b/src/link.c
index e04e5e29d..62a9e4151 100644
--- a/src/link.c
+++ b/src/link.c
@@ -75,9 +75,9 @@ u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus;
bool8 gLinkDummy1; // Never read
bool8 gLinkDummy2; // Never read
-bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
-bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
-u16 gUnknown_030030F4;
+bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
+bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
+u16 gReadyCloseLinkType; // Never read
u8 gSuppressLinkErrorMessage;
bool8 gWirelessCommType;
bool8 gSavedLinkPlayerCount;
@@ -114,7 +114,7 @@ EWRAM_DATA struct {
u8 lastSendQueueCount;
u8 unk_06;
} sLinkErrorBuffer = {};
-static EWRAM_DATA u16 sUnknown_02022B08 = 0;
+static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
// Static ROM declarations
@@ -135,12 +135,12 @@ static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
static void LinkCB_RequestPlayerDataExchange(void);
static void Task_PrintTestData(u8 taskId);
-static void sub_800AC80(void);
-static void sub_800ACAC(void);
-static void sub_800AD5C(void);
-static void sub_800AD88(void);
-static void sub_800AE30(void);
-static void sub_800AE5C(void);
+static void LinkCB_ReadyCloseLink(void);
+static void LinkCB_WaitCloseLink(void);
+static void LinkCB_ReadyCloseLinkWithJP(void);
+static void LinkCB_WaitCloseLinkWithJP(void);
+static void LinkCB_Standby(void);
+static void LinkCB_StandbyForAll(void);
static void CheckErrorStatus(void);
static void CB2_PrintErrorMessage(void);
@@ -379,7 +379,7 @@ void OpenLink(void)
sDummy1 = FALSE;
gLinkDummy2 = FALSE;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
CreateTask(Task_TriggerHandshake, 2);
}
else
@@ -390,8 +390,8 @@ void OpenLink(void)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
gRemoteLinkPlayersNotReceived[i] = TRUE;
- gUnknown_030030F0[i] = FALSE;
- gUnknown_030030EC[i] = FALSE;
+ gReadyToCloseLink[i] = FALSE;
+ gReadyToExitStandby[i] = FALSE;
}
}
@@ -467,7 +467,7 @@ static void LinkTestProcessKeyInput(void)
}
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
if (gLinkTestDebugValuesEnabled)
{
@@ -630,16 +630,16 @@ static void ProcessRecvCmds(u8 unused)
}
}
break;
- case LINKCMD_0x5FFF:
- gUnknown_030030F0[i] = TRUE;
+ case LINKCMD_READY_CLOSE_LINK:
+ gReadyToCloseLink[i] = TRUE;
break;
- case LINKCMD_0x2FFE:
- gUnknown_030030EC[i] = TRUE;
+ case LINKCMD_READY_EXIT_STANDBY:
+ gReadyToExitStandby[i] = TRUE;
break;
case LINKCMD_0xAAAA:
sub_800A418();
break;
- case LINKCMD_0xCCCC:
+ case LINKCMD_SEND_BLOCK_REQ:
SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
break;
case LINKCMD_SEND_HELD_KEYS_2:
@@ -657,8 +657,8 @@ static void BuildSendCmd(u16 command)
gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
gSendCmd[1] = gLinkType;
break;
- case LINKCMD_0x2FFE:
- gSendCmd[0] = LINKCMD_0x2FFE;
+ case LINKCMD_READY_EXIT_STANDBY:
+ gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY;
break;
case LINKCMD_SEND_HELD_KEYS:
gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
@@ -694,13 +694,13 @@ static void BuildSendCmd(u16 command)
gSendCmd[0] = LINKCMD_0xAAAB;
gSendCmd[1] = gSpecialVar_ItemId;
break;
- case LINKCMD_0xCCCC:
- gSendCmd[0] = LINKCMD_0xCCCC;
+ case LINKCMD_SEND_BLOCK_REQ:
+ gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ;
gSendCmd[1] = gBlockRequestType;
break;
- case LINKCMD_0x5FFF:
- gSendCmd[0] = LINKCMD_0x5FFF;
- gSendCmd[1] = gUnknown_030030F4;
+ case LINKCMD_READY_CLOSE_LINK:
+ gSendCmd[0] = LINKCMD_READY_CLOSE_LINK;
+ gSendCmd[1] = gReadyCloseLinkType;
break;
case LINKCMD_0x5566:
gSendCmd[0] = LINKCMD_0x5566;
@@ -1065,16 +1065,16 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
return InitBlockSend(src, size);
}
-bool8 sub_800A4D8(u8 a0)
+bool8 SendBlockRequest(u8 blockReqType)
{
if (gWirelessCommType == TRUE)
{
- return sub_8010100(a0);
+ return Rfu_SendBlockRequest(blockReqType);
}
if (gLinkCallback == NULL)
{
- gBlockRequestType = a0;
- BuildSendCmd(LINKCMD_0xCCCC);
+ gBlockRequestType = blockReqType;
+ BuildSendCmd(LINKCMD_SEND_BLOCK_REQ);
return TRUE;
}
return FALSE;
@@ -1423,70 +1423,70 @@ static u8 GetDummy2(void)
return sDummy2;
}
-void sub_800ABF4(u16 a0)
+void SetCloseLinkCallbackAndType(u16 type)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AC80;
+ gLinkCallback = LinkCB_ReadyCloseLink;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = a0;
+ gReadyCloseLinkType = type;
}
}
}
-void sub_800AC34(void)
+void SetCloseLinkCallback(void)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback != NULL)
{
- sUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AC80;
+ gLinkCallback = LinkCB_ReadyCloseLink;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
}
}
}
-static void sub_800AC80(void)
+static void LinkCB_ReadyCloseLink(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800ACAC;
+ BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
+ gLinkCallback = LinkCB_WaitCloseLink;
}
}
-static void sub_800ACAC(void)
+static void LinkCB_WaitCloseLink(void)
{
int i;
unsigned count;
- u8 linkPlayerCount;
- linkPlayerCount = GetLinkPlayerCount();
+ // Wait for all players to be ready
+ u8 linkPlayerCount = GetLinkPlayerCount();
count = 0;
for (i = 0; i < linkPlayerCount; i++)
{
- if (gUnknown_030030F0[i])
- {
+ if (gReadyToCloseLink[i])
count++;
- }
}
+
if (count == linkPlayerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
gLinkVSyncDisabled = TRUE;
CloseLink();
@@ -1495,37 +1495,38 @@ static void sub_800ACAC(void)
}
}
-void sub_800AD10(void)
+// Used instead of SetCloseLinkCallback when disconnecting from an attempt to link with a foreign game
+void SetCloseLinkCallbackHandleJP(void)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback != NULL)
{
- sUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AD5C;
+ gLinkCallback = LinkCB_ReadyCloseLinkWithJP;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
}
}
}
-static void sub_800AD5C(void)
+static void LinkCB_ReadyCloseLinkWithJP(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800AD88;
+ BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
+ gLinkCallback = LinkCB_WaitCloseLinkWithJP;
}
}
-static void sub_800AD88(void)
+static void LinkCB_WaitCloseLinkWithJP(void)
{
int i;
unsigned count;
@@ -1533,19 +1534,21 @@ static void sub_800AD88(void)
linkPlayerCount = GetLinkPlayerCount();
count = 0;
+
+ // Wait for all non-foreign players to be ready
for (i = 0; i < linkPlayerCount; i++)
{
+ // Rather than communicate with the foreign game
+ // just assume they're ready to disconnect
if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
- {
count++;
- }
- else if (gUnknown_030030F0[i])
- {
+ else if (gReadyToCloseLink[i])
count++;
- }
}
+
if (count == linkPlayerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
gLinkVSyncDisabled = TRUE;
CloseLink();
@@ -1554,50 +1557,47 @@ static void sub_800AD88(void)
}
}
-void sub_800ADF8(void)
+void SetLinkStandbyCallback(void)
{
if (gWirelessCommType == TRUE)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AE30;
+ gLinkCallback = LinkCB_Standby;
}
gLinkDummy1 = FALSE;
}
}
-static void sub_800AE30(void)
+static void LinkCB_Standby(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x2FFE);
- gLinkCallback = sub_800AE5C;
+ BuildSendCmd(LINKCMD_READY_EXIT_STANDBY);
+ gLinkCallback = LinkCB_StandbyForAll;
}
}
-static void sub_800AE5C(void)
+static void LinkCB_StandbyForAll(void)
{
u8 i;
- u8 linkPlayerCount;
-
- linkPlayerCount = GetLinkPlayerCount();
+ u8 linkPlayerCount = GetLinkPlayerCount();
for (i = 0; i < linkPlayerCount; i++)
{
- if (!gUnknown_030030EC[i])
- {
+ if (!gReadyToExitStandby[i])
break;
- }
}
+
+ // If true, all players ready to exit standby
if (i == linkPlayerCount)
{
for (i = 0; i < MAX_LINK_PLAYERS; i++)
- {
- gUnknown_030030EC[i] = FALSE;
- }
+ gReadyToExitStandby[i] = FALSE;
+
gLinkCallback = NULL;
}
}
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 34e9f719b..3372aa766 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -148,10 +148,7 @@ static const u8 sUnknown_082ED6A5[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
-static const struct {
- u8 *buffer;
- u32 size;
-} sUnknown_082ED6B8[] = {
+static const struct BlockRequest sBlockRequests[] = {
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 100 },
@@ -1072,15 +1069,15 @@ static void RfuHandleReceiveCommand(u8 unused)
}
}
break;
- case RFU_COMMAND_0xA100:
- Rfu_InitBlockSend(sUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)sUnknown_082ED6B8[gRecvCmds[i][1]].size);
+ case RFU_COMMAND_SEND_BLOCK_REQ:
+ Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size);
break;
- case RFU_COMMAND_0x5F00:
- Rfu.unk_e4[i] = 1;
+ case RFU_COMMAND_READY_CLOSE_LINK:
+ Rfu.readyCloseLink[i] = TRUE;
break;
- case RFU_COMMAND_0x6600:
+ case RFU_COMMAND_READY_EXIT_STANDBY:
if (Rfu.unk_100 == gRecvCmds[i][1])
- Rfu.unk_e9[i] = 1;
+ Rfu.readyExitStandby[i] = TRUE;
break;
case RFU_COMMAND_0xED00:
if (Rfu.parentChild == MODE_CHILD)
@@ -1194,9 +1191,9 @@ static void RfuPrepareSendBuffer(u16 command)
gSendCmd[1] = Rfu.sendBlock.count;
gSendCmd[2] = Rfu.sendBlock.owner + 0x80;
break;
- case RFU_COMMAND_0xA100:
+ case RFU_COMMAND_SEND_BLOCK_REQ:
if (AreNoPlayersReceiving())
- gSendCmd[1] = Rfu.unk_5a;
+ gSendCmd[1] = Rfu.blockRequestType;
break;
case RFU_COMMAND_0x7700:
case RFU_COMMAND_0x7800:
@@ -1207,8 +1204,8 @@ static void RfuPrepareSendBuffer(u16 command)
for (i = 0; i < RFU_CHILD_MAX; i++)
buff[i] = Rfu.linkPlayerIdx[i];
break;
- case RFU_COMMAND_0x6600:
- case RFU_COMMAND_0x5F00:
+ case RFU_COMMAND_READY_EXIT_STANDBY:
+ case RFU_COMMAND_READY_CLOSE_LINK:
gSendCmd[1] = Rfu.unk_100;
break;
case RFU_COMMAND_0x4400:
@@ -1327,10 +1324,10 @@ static void SendLastBlock(void)
Rfu.callback = NULL;
}
-bool8 sub_8010100(u8 blockRequestType)
+bool8 Rfu_SendBlockRequest(u8 type)
{
- Rfu.unk_5a = blockRequestType;
- RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
+ Rfu.blockRequestType = type;
+ RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
return TRUE;
}
@@ -1343,14 +1340,14 @@ static void sub_801011C(void)
Rfu.callback = NULL;
}
-static void sub_8010148(void)
+static void DisconnectRfu(void)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
sub_801011C();
}
-static void sub_8010168(void)
+static void TryDisconnectRfu(void)
{
if (Rfu.parentChild == MODE_CHILD)
{
@@ -1358,7 +1355,7 @@ static void sub_8010168(void)
Rfu.unk_ce4 = 2;
}
else
- Rfu.callback = sub_8010148;
+ Rfu.callback = DisconnectRfu;
}
void LinkRfu_FatalError(void)
@@ -1368,131 +1365,137 @@ void LinkRfu_FatalError(void)
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
}
-static void sub_80101CC(void)
+// RFU equivalent of LinkCB_WaitCloseLink
+static void WaitAllReadyToCloseLink(void)
{
s32 i;
u8 playerCount = Rfu.playerCount;
s32 count = 0;
+ // Wait for all players to be ready
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (Rfu.unk_e4[i])
+ if (Rfu.readyCloseLink[i])
count++;
}
if (count == playerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
if (Rfu.parentChild == MODE_CHILD)
{
Rfu.errorState = 3;
- sub_8010168();
+ TryDisconnectRfu();
}
else
- Rfu.callback = sub_8010168;
+ Rfu.callback = TryDisconnectRfu;
}
}
-static void sub_801022C(void)
+static void SendReadyCloseLink(void)
{
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x5F00);
- Rfu.callback = sub_80101CC;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_CLOSE_LINK);
+ Rfu.callback = WaitAllReadyToCloseLink;
}
}
-static void sub_8010264(u8 taskId)
+static void Task_TryReadyCloseLink(u8 taskId)
{
if (Rfu.callback == NULL)
{
Rfu.unk_cd9 = 1;
- Rfu.callback = sub_801022C;
+ Rfu.callback = SendReadyCloseLink;
DestroyTask(taskId);
}
}
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
+void Rfu_SetCloseLinkCallback(void)
{
- if (!FuncIsActiveTask(sub_8010264))
- CreateTask(sub_8010264, 5);
+ if (!FuncIsActiveTask(Task_TryReadyCloseLink))
+ CreateTask(Task_TryReadyCloseLink, 5);
}
-static void sub_80102B8(void)
+static void SendReadyExitStandbyUntilAllReady(void)
{
u8 playerCount;
u8 i;
if (GetMultiplayerId() != 0)
{
- if (Rfu.recvQueue.count == 0 && Rfu.unk_fe > 60)
+ if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.unk_fe = 0;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.resendExitStandbyTimer = 0;
}
}
playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (!Rfu.readyExitStandby[i])
break;
}
if (i == playerCount)
{
for (i = 0; i < MAX_RFU_PLAYERS; i++)
- Rfu.unk_e9[i] = 0;
+ Rfu.readyExitStandby[i] = FALSE;
Rfu.unk_100++;
Rfu.callback = NULL;
}
- Rfu.unk_fe++;
+ Rfu.resendExitStandbyTimer++;
}
-static void sub_8010358(void)
+static void LinkLeaderReadyToExitStandby(void)
{
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_80102B8;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
-static void sub_8010390(void)
+// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
+static void Rfu_LinkStandby(void)
{
u8 i;
u8 playerCount;
if (GetMultiplayerId() != 0)
{
+ // Not link leader, send exit standby when ready
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_80102B8;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
else
{
+ // Link leader, wait for all members to send exit ready
playerCount = GetLinkPlayerCount();
for (i = 1; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (!Rfu.readyExitStandby[i])
break;
}
if (i == playerCount)
{
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_8010358;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = LinkLeaderReadyToExitStandby;
}
}
}
}
-void sub_8010434(void)
+void Rfu_SetLinkStandbyCallback(void)
{
if (Rfu.callback == NULL)
{
- Rfu.callback = sub_8010390;
- Rfu.unk_fe = 0;
+ Rfu.callback = Rfu_LinkStandby;
+ Rfu.resendExitStandbyTimer = 0;
}
}
@@ -1724,8 +1727,8 @@ static void sub_801084C(u8 taskId)
{
if (AreNoPlayersReceiving())
{
- Rfu.unk_5a = 0;
- RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
+ Rfu.blockRequestType = 0;
+ RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
gTasks[taskId].data[0]++;
}
}
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 04902dee8..032cc3340 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -208,7 +208,7 @@ static void CB2_MysteryEventMenu(void)
{
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
GetEventLoadMessage(gStringVar4, 1);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
@@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void)
gMain.state++;
break;
case 10:
- sub_800AC34();
+ SetCloseLinkCallback();
gMain.state++;
break;
case 11:
diff --git a/src/mystery_gift.c b/src/mystery_gift.c
index 9672fe0ec..b8ae470a9 100644
--- a/src/mystery_gift.c
+++ b/src/mystery_gift.c
@@ -1284,7 +1284,7 @@ void task00_mystery_gift(u8 taskId)
switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 13;
break;
@@ -1647,7 +1647,7 @@ void task00_mystery_gift(u8 taskId)
}
break;
case 33:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
StringCopy(gStringVar1, gLinkPlayers[1].name);
data->state = 34;
break;
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index 33ddee1b5..c5f4ef1a4 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -1463,7 +1463,7 @@ static bool32 sub_802BC60(void)
case 4:
if (!gPaletteFade.active)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gUnknown_02022CFC->unkA++;
}
break;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 075bc6aee..a4229b91e 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -501,7 +501,7 @@ static void Task_SendPacket(u8 taskId)
break;
case 1:
if (GetMultiplayerId() == 0)
- sub_800A4D8(1);
+ SendBlockRequest(1);
task->data[0]++;
break;
case 2:
@@ -973,7 +973,7 @@ static void Task_DoRecordMixing(u8 taskId)
case 4: // Wait 10 frames
if (++task->data[1] > 10)
{
- sub_800AC34();
+ SetCloseLinkCallback();
task->data[0] ++;
}
break;
@@ -1005,7 +1005,7 @@ static void Task_DoRecordMixing(u8 taskId)
}
break;
case 8:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0] ++;
break;
case 9:
diff --git a/src/save.c b/src/save.c
index 09e1b7aae..3ae2f6fd5 100644
--- a/src/save.c
+++ b/src/save.c
@@ -912,7 +912,7 @@ void Task_LinkSave(u8 taskId)
tState = 1;
break;
case 1:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 2;
break;
case 2:
@@ -949,7 +949,7 @@ void Task_LinkSave(u8 taskId)
case 7:
if (!tPartialSave)
ClearContinueGameWarpStatus2();
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 8;
break;
case 8:
@@ -960,7 +960,7 @@ void Task_LinkSave(u8 taskId)
}
break;
case 9:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 10;
break;
case 10:
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index 89029210b..b151b5650 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -472,7 +472,7 @@ static void Task_LinkContestWaitForConnection(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
break;
diff --git a/src/trade.c b/src/trade.c
index 3a0f07ac6..17967733a 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -246,9 +246,9 @@ static bool8 SendLinkData(const void *linkData, u32 size)
}
}
-static void sub_80771AC(u8 a0)
+static void RequestLinkData(u8 type)
{
- sub_800A4D8(a0);
+ SendBlockRequest(type);
}
static bool32 sub_80771BC(void)
@@ -295,9 +295,9 @@ static bool32 IsWirelessTrade(void)
return FALSE;
}
-static void sub_8077288(u8 unused)
+static void SetTradeLinkStandbyCallback(u8 unused)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
static bool32 _IsLinkTaskFinished(void)
@@ -445,7 +445,7 @@ static void CB2_CreateTradeMenu(void)
if (gWirelessCommType)
{
sub_801048C(TRUE);
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
}
break;
@@ -825,7 +825,7 @@ static void LinkTradeWaitForFade(void)
}
else
{
- sub_800ABF4(32);
+ SetCloseLinkCallbackAndType(32);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -983,7 +983,7 @@ static bool8 BufferTradeParties(void)
case 3:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1002,7 +1002,7 @@ static bool8 BufferTradeParties(void)
case 7:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1021,7 +1021,7 @@ static bool8 BufferTradeParties(void)
case 11:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1040,7 +1040,7 @@ static bool8 BufferTradeParties(void)
case 15:
if (id == 0)
{
- sub_80771AC(3);
+ RequestLinkData(3);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1059,7 +1059,7 @@ static bool8 BufferTradeParties(void)
case 19:
if (id == 0)
{
- sub_80771AC(4);
+ RequestLinkData(4);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1652,11 +1652,11 @@ static void CancelTrade_1(void)
{
if (gWirelessCommType)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
else
{
- sub_800ABF4(12);
+ SetCloseLinkCallbackAndType(12);
}
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
@@ -1692,7 +1692,7 @@ static void LinkTradeWaitForQueue(void)
{
if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -4566,7 +4566,7 @@ static void CB2_SaveAndEndTrade(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_8077288(0);
+ SetTradeLinkStandbyCallback(0);
gMain.state = 100;
sTradeData->timer = 0;
break;
@@ -4644,7 +4644,7 @@ static void CB2_SaveAndEndTrade(void)
case 41:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 42;
}
else
@@ -4663,7 +4663,7 @@ static void CB2_SaveAndEndTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 6:
@@ -4685,11 +4685,11 @@ static void CB2_SaveAndEndTrade(void)
{
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gMain.state++;
}
@@ -4902,7 +4902,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_8077288(0);
+ SetTradeLinkStandbyCallback(0);
gMain.state = 2;
sTradeData->timer = 0;
break;
@@ -4950,7 +4950,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 7:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 8;
}
else
@@ -4969,7 +4969,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 10:
@@ -4983,7 +4983,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 11:
if (!gPaletteFade.active && IsBGMStopped() == TRUE)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
gMain.state = 12;
}
break;
diff --git a/src/trainer_card.c b/src/trainer_card.c
index fb92dc336..3a9dbba8a 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -498,7 +498,7 @@ static void Task_TrainerCard(u8 taskId)
}
break;
case STATE_WAIT_LINK_PARTNER:
- sub_800AC34();
+ SetCloseLinkCallback();
DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
CopyWindowToVram(0, 3);
diff --git a/src/union_room.c b/src/union_room.c
index 1ef8cd4cb..f2c35ac8e 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -1483,7 +1483,7 @@ static void Task_ExchangeCards(u8 taskId)
{
case 0:
if (GetMultiplayerId() == 0)
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -1759,7 +1759,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
}
else
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
data[0] = 3;
}
}
@@ -1795,7 +1795,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
DestroyTask(taskId);
break;
case 7:
- sub_800AC34();
+ SetCloseLinkCallback();
data[0] = 8;
break;
case 8:
@@ -2018,7 +2018,7 @@ static void Task_MEvent_Leader(u8 taskId)
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
- sub_800ADF8();
+ SetLinkStandbyCallback();
data->state++;
break;
case 17:
@@ -2188,7 +2188,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
break;
case 11:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 12:
if (IsLinkTaskFinished())
@@ -2367,7 +2367,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
break;
case 13:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 14:
if (IsLinkTaskFinished())
@@ -2714,7 +2714,7 @@ static void Task_RunUnionRoom(u8 taskId)
}
break;
case UR_STATE_REQUEST_DECLINED:
- sub_800AC34();
+ SetCloseLinkCallback();
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
case UR_STATE_SEND_TRADE_REQUST:
@@ -2763,7 +2763,7 @@ static void Task_RunUnionRoom(u8 taskId)
if (PrintOnTextbox(&uroom->textState, gStringVar4))
{
uroom->state = UR_STATE_WAIT_FINISH_READING_CARD;
- sub_800ADF8();
+ SetLinkStandbyCallback();
uroom->partnerYesNoResponse = 0;
uroom->recvActivityRequest[0] = 0;
}
@@ -2940,7 +2940,7 @@ static void Task_RunUnionRoom(u8 taskId)
}
break;
case UR_STATE_DECLINE_ACTIVITY_REQUEST:
- sub_800AC34();
+ SetCloseLinkCallback();
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
case UR_STATE_CANCEL_REQUEST_PRINT_MSG:
@@ -2962,7 +2962,7 @@ static void Task_RunUnionRoom(u8 taskId)
ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4);
break;
case UR_STATE_START_ACTIVITY_LINK:
- sub_800ADF8();
+ SetLinkStandbyCallback();
uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK;
break;
case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK:
@@ -3231,7 +3231,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *
else if (id == 2) // No activity
{
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
- sub_800AC34();
+ SetCloseLinkCallback();
return FALSE;
}
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index 4b2aa0bb1..b9ddd74a7 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -174,7 +174,7 @@ void CB2_UnionRoomBattle(void)
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
gMain.state = 6;
@@ -190,7 +190,7 @@ void CB2_UnionRoomBattle(void)
case 50:
if (!UpdatePaletteFade())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gMain.state++;
}
break;
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index fefb285a8..0e7cacf31 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -1267,7 +1267,7 @@ static void Chat_Exit(void)
case 5:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1302,7 +1302,7 @@ static void Chat_Drop(void)
case 1:
if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1348,7 +1348,7 @@ static void Chat_Disbanded(void)
case 2:
if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}