Document link_rfu_3.c

This commit is contained in:
GriffinR
2020-06-07 17:37:09 -04:00
parent e6f5c4f264
commit c98342c973
4 changed files with 421 additions and 316 deletions
+27 -50
View File
@@ -24,12 +24,11 @@ struct GFtgtGnameSub
u16 language:4; u16 language:4;
u16 hasNews:1; u16 hasNews:1;
u16 hasCard:1; u16 hasCard:1;
u16 unk_00_6:1; u16 unknown:1; // Never read
u16 isChampion:1; u16 isChampion:1;
u16 hasNationalDex:1; u16 hasNationalDex:1;
u16 gameClear:1; u16 gameClear:1;
u16 version:4; u16 version:4;
u16 unk_01_6:2;
u8 playerTrainerId[2]; u8 playerTrainerId[2];
}; };
@@ -92,39 +91,30 @@ struct RfuBlockSend
struct RfuRecvQueue struct RfuRecvQueue
{ {
/* 0x000 */ u8 unk_00[32][70]; /* 0x000 */ u8 slots[32][70];
/* 0x8c0 */ vu8 unk_8c0; /* 0x8c0 */ vu8 recvSlot;
/* 0x8c1 */ vu8 unk_8c1; /* 0x8c1 */ vu8 sendSlot;
/* 0x8c2 */ vu8 count; /* 0x8c2 */ vu8 count;
/* 0x8c3 */ vu8 full; /* 0x8c3 */ vu8 full;
}; };
struct RfuSendQueue struct RfuSendQueue
{ {
/* 0x000 */ u8 unk_00[40][14]; /* 0x000 */ u8 slots[40][14];
/* 0x230 */ vu8 unk_230; /* 0x230 */ vu8 recvSlot;
/* 0x231 */ vu8 unk_231; /* 0x231 */ vu8 sendSlot;
/* 0x232 */ vu8 count; /* 0x232 */ vu8 count;
/* 0x233 */ vu8 full; /* 0x233 */ vu8 full;
}; };
struct UnkRfuStruct_2_Sub_c1c struct RfuBackupQueue
{ {
/* 0x00 */ u8 unk_00[2][14]; /* 0x00 */ u8 slots[2][14];
/* 0x1c */ vu8 unk_1c; /* 0x1c */ vu8 recvSlot;
/* 0x1d */ vu8 unk_1d; /* 0x1d */ vu8 sendSlot;
/* 0x1e */ vu8 count; /* 0x1e */ vu8 count;
}; };
struct UnkRfuStruct_Sub_Unused
{
/* 0x000 */ u8 unk_00[2][256];
/* 0x200 */ vu8 unk_200;
/* 0x201 */ vu8 unk_201;
/* 0x202 */ vu8 unk_202;
/* 0x203 */ vu8 unk_203;
};
struct GFRfuManager struct GFRfuManager
{ {
/* 0x000 */ void (*callback)(void); /* 0x000 */ void (*callback)(void);
@@ -141,8 +131,8 @@ struct GFRfuManager
/* 0x04c */ u8 unk_4c[14]; /* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a; /* 0x05a */ u8 unk_5a;
/* 0x05b */ u8 unk_5b; /* 0x05b */ u8 unk_5b;
/* 0x05c */ bool8 unk_5c[MAX_RFU_PLAYERS]; /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
/* 0x061 */ bool8 unk_61[MAX_RFU_PLAYERS]; /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
/* 0x066 */ u8 idleTaskId; /* 0x066 */ u8 idleTaskId;
/* 0x067 */ u8 searchTaskId; /* 0x067 */ u8 searchTaskId;
/* 0x068 */ u8 filler_68[4]; /* 0x068 */ u8 filler_68[4];
@@ -164,8 +154,8 @@ struct GFRfuManager
u8 playerName[PLAYER_NAME_LENGTH + 1]; u8 playerName[PLAYER_NAME_LENGTH + 1];
/* 0x124 */ struct RfuRecvQueue recvQueue; /* 0x124 */ struct RfuRecvQueue recvQueue;
/* 0x9e8 */ struct RfuSendQueue sendQueue; /* 0x9e8 */ struct RfuSendQueue sendQueue;
/* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c; /* 0xc1c */ struct RfuBackupQueue backupQueue;
/* 0xc3c */ vu8 unk_c3c; /* 0xc3c */ vu8 linkRecovered;
/* 0xc3d */ u8 unk_c3d; /* 0xc3d */ u8 unk_c3d;
/* 0xc3e */ vu8 childSlot; /* 0xc3e */ vu8 childSlot;
/* 0xc3f */ u8 unk_c3f[70]; /* 0xc3f */ u8 unk_c3f[70];
@@ -223,7 +213,7 @@ bool8 Rfu_IsMaster(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
void sub_8010434(void); void sub_8010434(void);
void ResetLinkRfuGFLayer(void); void ResetLinkRfuGFLayer(void);
void sub_800E174(void); void UpdateWirelessStatusIndicatorSprite(void);
void InitRFU(void); void InitRFU(void);
bool32 sub_8010EC0(void); bool32 sub_8010EC0(void);
bool32 sub_8010F1C(void); bool32 sub_8010F1C(void);
@@ -250,7 +240,6 @@ u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1);
void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1); void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1);
bool8 LmanAcceptSlotFlagIsNotZero(void); bool8 LmanAcceptSlotFlagIsNotZero(void);
bool32 WaitRfuState(bool32 a0); bool32 WaitRfuState(bool32 a0);
void DestroyWirelessStatusIndicatorSprite(void);
void sub_801103C(void); void sub_801103C(void);
void InitializeRfuLinkManager_JoinGroup(void); void InitializeRfuLinkManager_JoinGroup(void);
void LinkRfuNIsend8(void); void LinkRfuNIsend8(void);
@@ -282,36 +271,24 @@ bool32 sub_8011A9C(void);
void sub_80104B0(void); void sub_80104B0(void);
void sub_8011A50(void); void sub_8011A50(void);
void sub_80110B8(u32 a0); void sub_80110B8(u32 a0);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); bool32 IsRfuSerialNumberValid(u32 serialNo);
void sub_800ED34(u16 unused); bool8 IsRfuRecoveringFromLinkLoss(void);
bool32 RfuSerialNumberIsValid(u32 serialNo);
bool8 sub_8012224(void);
void sub_8011BA4(void); void sub_8011BA4(void);
void sub_800D6C8(struct RfuRecvQueue *ptr); void RfuRecvQueue_Reset(struct RfuRecvQueue *queue);
void sub_800D724(struct RfuSendQueue *ptr); void RfuSendQueue_Reset(struct RfuSendQueue *queue);
void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr); void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data);
void sub_800D7D8(struct RfuRecvQueue *q1, u8 *q2); void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data);
void sub_800D888(struct RfuSendQueue *q1, u8 *q2); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest);
bool8 sub_800D934(struct RfuRecvQueue *q1, u8 *q2); bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest);
bool8 sub_800D9DC(struct RfuSendQueue *q1, u8 *q2); void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2);
void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2); bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
void sub_800DBF8(u8 *q1, u8 mode); void sub_800DBF8(u8 *q1, u8 mode);
void PkmnStrToASCII(u8 *q1, const u8 *q2);
void ASCIIToPkmnStr(u8 *q1, const u8 *q2);
u8 sub_800DD1C(u8 maxFlags); u8 sub_800DD1C(u8 maxFlags);
void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3); void InitHostRFUtgtGname(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3);
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y); void CreateWirelessStatusIndicatorSprite(u8 x, u8 y);
void DestroyWirelessStatusIndicatorSprite(void); void DestroyWirelessStatusIndicatorSprite(void);
void LoadWirelessStatusIndicatorSpriteGfx(void); void LoadWirelessStatusIndicatorSpriteGfx(void);
u8 sub_800E124(void); u8 sub_800E124(void);
void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum); void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum);
void sub_800E174(void);
void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name);
bool32 NameIsNotEmpty(const u8 *name);
void RecordMixTrainerNames(void);
void WipeTrainerNameRecords(void);
#endif //GUARD_LINK_RFU_H #endif //GUARD_LINK_RFU_H
+52 -53
View File
@@ -43,8 +43,9 @@ EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_02022B44 = {};
static void ResetSendDataManager(struct RfuBlockSend *); static void ResetSendDataManager(struct RfuBlockSend *);
static void sub_800EAB4(void); static void sub_800EAB4(void);
static void sub_800EAFC(void); static void sub_800EAFC(void);
static void sub_800ED34(u16);
static void sub_800EDBC(u16); static void sub_800EDBC(u16);
static void sub_800F048(void); static void UpdateBackupQueue(void);
static void Task_ExchangeLinkPlayers(u8); static void Task_ExchangeLinkPlayers(u8);
static void RfuHandleReceiveCommand(u8); static void RfuHandleReceiveCommand(u8);
static void CallRfuFunc(void); static void CallRfuFunc(void);
@@ -56,7 +57,7 @@ static u8 GetPartnerIndexByNameAndTrainerID(const u8 *, u16);
static void sub_8010750(void); static void sub_8010750(void);
static s32 sub_80107A0(void); static s32 sub_80107A0(void);
static void sub_801084C(u8); static void sub_801084C(u8);
static void sub_80109E8(u16); static void ClearSelectedLinkPlayerIds(u16);
static void ValidateAndReceivePokemonSioInfo(void *); static void ValidateAndReceivePokemonSioInfo(void *);
static void sub_8010D0C(u8); static void sub_8010D0C(u8);
static void sub_80115EC(s32); static void sub_80115EC(s32);
@@ -229,8 +230,8 @@ void ResetLinkRfuGFLayer(void)
ResetSendDataManager(Rfu.unk_80 + i); ResetSendDataManager(Rfu.unk_80 + i);
} }
ResetSendDataManager(&Rfu.unk_6c); ResetSendDataManager(&Rfu.unk_6c);
sub_800D6C8(&Rfu.recvQueue); RfuRecvQueue_Reset(&Rfu.recvQueue);
sub_800D724(&Rfu.sendQueue); RfuSendQueue_Reset(&Rfu.sendQueue);
CpuFill16(0, gSendCmd, sizeof gSendCmd); CpuFill16(0, gSendCmd, sizeof gSendCmd);
CpuFill16(0, gRecvCmds, sizeof gRecvCmds); CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers); CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers);
@@ -498,7 +499,7 @@ void LinkRfu_StopManagerBeforeEnteringChat(void)
rfu_LMAN_stopManager(FALSE); rfu_LMAN_stopManager(FALSE);
} }
void sub_800ED34(u16 unused) static void sub_800ED34(u16 unused)
{ {
s32 i; s32 i;
@@ -511,9 +512,9 @@ void sub_800ED34(u16 unused)
if (gRfuSlotStatusUNI[Rfu.childSlot]->recv.newDataFlag) if (gRfuSlotStatusUNI[Rfu.childSlot]->recv.newDataFlag)
{ {
Rfu.unk_cd0++; Rfu.unk_cd0++;
sub_800D7D8(&Rfu.recvQueue, Rfu.unk_c3f); RfuRecvQueue_Enqueue(&Rfu.recvQueue, Rfu.unk_c3f);
gUnknown_02022B44.unk_06++; gUnknown_02022B44.unk_06++;
sub_800F048(); UpdateBackupQueue();
rfu_UNI_readySendData(Rfu.childSlot); rfu_UNI_readySendData(Rfu.childSlot);
rfu_UNI_clearRecvNewDataFlag(Rfu.childSlot); rfu_UNI_clearRecvNewDataFlag(Rfu.childSlot);
} }
@@ -666,24 +667,22 @@ static void sub_800F014(void)
} }
} }
static void sub_800F048(void) static void UpdateBackupQueue(void)
{ {
if (Rfu.unk_c3c) if (Rfu.linkRecovered)
{ {
u8 r2 = sub_800DAC8(&Rfu.unk_c1c, Rfu.unk_4c); bool8 backupEmpty = RfuBackupQueue_Dequeue(&Rfu.backupQueue, Rfu.unk_4c);
if (Rfu.unk_c1c.count == 0)
{ if (Rfu.backupQueue.count == 0)
Rfu.unk_c3c = 0; Rfu.linkRecovered = FALSE;
}
if (r2) if (backupEmpty)
{
return; return;
}
} }
if (Rfu.unk_c3c == 0) if (!Rfu.linkRecovered)
{ {
sub_800D9DC(&Rfu.sendQueue, Rfu.unk_4c); RfuSendQueue_Dequeue(&Rfu.sendQueue, Rfu.unk_4c);
sub_800DA68(&Rfu.unk_c1c, Rfu.unk_4c); RfuBackupQueue_Enqueue(&Rfu.backupQueue, Rfu.unk_4c);
} }
} }
@@ -872,7 +871,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void)
u8 sp48[2 * (CMD_LENGTH - 1)]; u8 sp48[2 * (CMD_LENGTH - 1)];
u8 switchval; u8 switchval;
sub_800D934(&Rfu.recvQueue, sp00); RfuRecvQueue_Dequeue(&Rfu.recvQueue, sp00);
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
for (j = 0; j < CMD_LENGTH - 1; j++) for (j = 0; j < CMD_LENGTH - 1; j++)
@@ -904,7 +903,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void)
Rfu.unk_cd0--; Rfu.unk_cd0--;
CallRfuFunc(); CallRfuFunc();
sub_800F498(gSendCmd, sp48); sub_800F498(gSendCmd, sp48);
sub_800D888(&Rfu.sendQueue, sp48); RfuSendQueue_Enqueue(&Rfu.sendQueue, sp48);
for (i = 0; i < CMD_LENGTH - 1; i++) for (i = 0; i < CMD_LENGTH - 1; i++)
gSendCmd[i] = 0; gSendCmd[i] = 0;
} }
@@ -932,7 +931,7 @@ static void HandleSendFailure(u8 unused, u32 flags)
j++;j--; // Needed to match; j++;j--; // Needed to match;
} }
sub_800D888(&Rfu.sendQueue, sResendBlock8); RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8);
Rfu.unk_6c.failedFlags |= (1 << i); Rfu.unk_6c.failedFlags |= (1 << i);
} }
flags >>= 1; flags >>= 1;
@@ -942,14 +941,14 @@ static void HandleSendFailure(u8 unused, u32 flags)
void Rfu_SetBlockReceivedFlag(u8 linkPlayerId) void Rfu_SetBlockReceivedFlag(u8 linkPlayerId)
{ {
if (Rfu.parentChild == MODE_PARENT && linkPlayerId) if (Rfu.parentChild == MODE_PARENT && linkPlayerId)
Rfu.unk_61[linkPlayerId] = TRUE; Rfu.numBlocksReceived[linkPlayerId] = 1;
else else
Rfu.unk_5c[linkPlayerId] = TRUE; Rfu.blockReceived[linkPlayerId] = TRUE;
} }
void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId) void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId)
{ {
Rfu.unk_5c[linkPlayerId] = FALSE; Rfu.blockReceived[linkPlayerId] = FALSE;
Rfu.unk_80[linkPlayerId].receiving = 0; Rfu.unk_80[linkPlayerId].receiving = 0;
} }
@@ -1040,7 +1039,7 @@ static void RfuHandleReceiveCommand(u8 unused)
Rfu.unk_80[i].owner = gRecvCmds[i][2]; Rfu.unk_80[i].owner = gRecvCmds[i][2];
Rfu.unk_80[i].receivedFlags = 0; Rfu.unk_80[i].receivedFlags = 0;
Rfu.unk_80[i].receiving = 1; Rfu.unk_80[i].receiving = 1;
Rfu.unk_5c[i] = 0; Rfu.blockReceived[i] = FALSE;
} }
break; break;
case RFU_COMMAND_0x8900: case RFU_COMMAND_0x8900:
@@ -1081,7 +1080,7 @@ static void RfuHandleReceiveCommand(u8 unused)
Rfu.unk_ce4 = gRecvCmds[i][2]; Rfu.unk_ce4 = gRecvCmds[i][2];
} }
Rfu.playerCount = gRecvCmds[i][3]; Rfu.playerCount = gRecvCmds[i][3];
sub_80109E8(gRecvCmds[i][1]); ClearSelectedLinkPlayerIds(gRecvCmds[i][1]);
} }
} }
else else
@@ -1097,7 +1096,7 @@ static void RfuHandleReceiveCommand(u8 unused)
{ {
Rfu.unk_ce3 |= gRecvCmds[i][1]; Rfu.unk_ce3 |= gRecvCmds[i][1];
Rfu.unk_ce4 = gRecvCmds[i][2]; Rfu.unk_ce4 = gRecvCmds[i][2];
sub_80109E8(gRecvCmds[i][1]); ClearSelectedLinkPlayerIds(gRecvCmds[i][1]);
} }
break; break;
case RFU_COMMAND_0x4400: case RFU_COMMAND_0x4400:
@@ -1105,20 +1104,20 @@ static void RfuHandleReceiveCommand(u8 unused)
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break; break;
} }
if (Rfu.parentChild == MODE_PARENT && Rfu.unk_61[i]) if (Rfu.parentChild == MODE_PARENT && Rfu.numBlocksReceived[i])
{ {
if (Rfu.unk_61[i] == 4) if (Rfu.numBlocksReceived[i] == 4)
{ {
Rfu.unk_5c[i] = 1; Rfu.blockReceived[i] = TRUE;
Rfu.unk_61[i] = 0; Rfu.numBlocksReceived[i] = 0;
} }
else else
Rfu.unk_61[i]++; Rfu.numBlocksReceived[i]++;
} }
} }
} }
static bool8 sub_800FC60(void) static bool8 AreNoPlayersReceiving(void)
{ {
s32 i; s32 i;
@@ -1136,7 +1135,7 @@ static bool8 sub_800FC88(void)
for (i = 0; i < Rfu.playerCount; i++) for (i = 0; i < Rfu.playerCount; i++)
{ {
if (Rfu.unk_80[i].receiving != 2 || Rfu.unk_5c[i] != 1) if (Rfu.unk_80[i].receiving != 2 || Rfu.blockReceived[i] != TRUE)
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@@ -1160,7 +1159,7 @@ u8 Rfu_GetBlockReceivedStatus(void)
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
if (Rfu.unk_80[i].receiving == 2 && Rfu.unk_5c[i] == 1) if (Rfu.unk_80[i].receiving == 2 && Rfu.blockReceived[i] == TRUE)
{ {
flags |= (1 << i); flags |= (1 << i);
} }
@@ -1182,7 +1181,7 @@ static void RfuPrepareSendBuffer(u16 command)
gSendCmd[2] = Rfu.unk_6c.owner + 0x80; gSendCmd[2] = Rfu.unk_6c.owner + 0x80;
break; break;
case RFU_COMMAND_0xA100: case RFU_COMMAND_0xA100:
if (sub_800FC60()) if (AreNoPlayersReceiving())
gSendCmd[1] = Rfu.unk_5a; gSendCmd[1] = Rfu.unk_5a;
break; break;
case RFU_COMMAND_0x7700: case RFU_COMMAND_0x7700:
@@ -1483,7 +1482,7 @@ void sub_8010434(void)
} }
} }
bool32 RfuSerialNumberIsValid(u32 serialNo) bool32 IsRfuSerialNumberValid(u32 serialNo)
{ {
s32 i; s32 i;
for (i = 0; sAcceptedSerialNos[i] != serialNo; i++) for (i = 0; sAcceptedSerialNos[i] != serialNo; i++)
@@ -1554,7 +1553,7 @@ static bool8 sub_8010540(void)
} }
} }
else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == 0x47) else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
rfu_clearSlot(TYPE_NI_RECV, i); rfu_clearSlot(TYPE_NI_RECV, i);
{ {
@@ -1657,7 +1656,7 @@ static s32 sub_80107A0(void)
RfuSetErrorStatus(Rfu.unk_c86, 0); RfuSetErrorStatus(Rfu.unk_c86, 0);
retval = Rfu.unk_c86; retval = Rfu.unk_c86;
} }
else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == 0x47) else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
{ {
rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot); rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot);
retval = 6; retval = 6;
@@ -1677,7 +1676,7 @@ static void sub_801084C(u8 taskId)
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].data[0])
{ {
case 0: case 0:
if (sub_800FC60()) if (AreNoPlayersReceiving())
{ {
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
sub_800B348(); sub_800B348();
@@ -1707,7 +1706,7 @@ static void sub_801084C(u8 taskId)
case 3: case 3:
if (Rfu.parentChild == MODE_PARENT) if (Rfu.parentChild == MODE_PARENT)
{ {
if (sub_800FC60()) if (AreNoPlayersReceiving())
{ {
Rfu.unk_5a = 0; Rfu.unk_5a = 0;
RfuPrepareSendBuffer(RFU_COMMAND_0xA100); RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
@@ -1749,13 +1748,13 @@ static void sub_801084C(u8 taskId)
} }
} }
static void sub_80109E8(u16 a0) static void ClearSelectedLinkPlayerIds(u16 selected)
{ {
s32 i; s32 i;
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if ((a0 >> i) & 1) if ((selected >> i) & 1)
Rfu.linkPlayerIdx[i] = 0; Rfu.linkPlayerIdx[i] = 0;
} }
} }
@@ -1965,12 +1964,12 @@ static void CopyPlayerNameToUnameBuffer(void)
void ClearAndInitHostRFUtgtGname(void) void ClearAndInitHostRFUtgtGname(void)
{ {
memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH); memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH);
sub_800DD94(&gHostRFUtgtGnameBuffer, 0, FALSE, 0); InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, FALSE, 0);
} }
void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started) void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started)
{ {
sub_800DD94(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders); InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders);
} }
void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard) void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard)
@@ -2123,7 +2122,7 @@ static void sub_801120C(u8 msg, u8 paramCount)
rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag); rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag);
rfu_waitREQComplete(); rfu_waitREQComplete();
} }
Rfu.state = 0x11; Rfu.state = 17;
break; break;
case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
Rfu.linkLossRecoveryState = 1; Rfu.linkLossRecoveryState = 1;
@@ -2213,7 +2212,7 @@ void sub_8011404(u8 msg, u8 unused1)
break; break;
case LMAN_MSG_LINK_RECOVERY_SUCCESSED: case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
Rfu.linkLossRecoveryState = 3; Rfu.linkLossRecoveryState = 3;
Rfu.unk_c3c = 1; Rfu.linkRecovered = TRUE;
break; break;
case 0x34: case 0x34:
break; break;
@@ -2256,7 +2255,7 @@ static u8 GetNewChildrenInUnionRoomChat(s32 a0)
u8 ret = 0; u8 ret = 0;
u8 i; u8 i;
for (i = 0; i < 4; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if ((a0 >> i) & 1) if ((a0 >> i) & 1)
{ {
@@ -2362,7 +2361,7 @@ static void sub_8011674(u8 msg, u8 paramCount)
case LMAN_MSG_LINK_RECOVERY_SUCCESSED: case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
Rfu.linkLossRecoveryState = 3; Rfu.linkLossRecoveryState = 3;
if (gRfuLinkStatus->parentChild == MODE_CHILD) if (gRfuLinkStatus->parentChild == MODE_CHILD)
Rfu.unk_c3c = 1; Rfu.linkRecovered = TRUE;
break; break;
case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
Rfu.linkLossRecoveryState = 2; Rfu.linkLossRecoveryState = 2;
@@ -2562,7 +2561,7 @@ static u8 GetPartnerIndexByNameAndTrainerID(const u8 *name, u16 id)
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2); u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2);
if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[i].serialNo) if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[i].serialNo)
&& !StringCompare(name, gRfuLinkStatus->partner[i].uname) && !StringCompare(name, gRfuLinkStatus->partner[i].uname)
&& id == trainerId) && id == trainerId)
{ {
@@ -2784,7 +2783,7 @@ void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 activity)
} }
} }
bool8 sub_8012224(void) bool8 IsRfuRecoveringFromLinkLoss(void)
{ {
if (Rfu.linkLossRecoveryState == 1) if (Rfu.linkLossRecoveryState == 1)
return TRUE; return TRUE;
+341 -212
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -367,7 +367,7 @@ static void VBlankIntr(void)
if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED))) if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED)))
Random(); Random();
sub_800E174(); UpdateWirelessStatusIndicatorSprite();
INTR_CHECK |= INTR_FLAG_VBLANK; INTR_CHECK |= INTR_FLAG_VBLANK;
gMain.intrCheck |= INTR_FLAG_VBLANK; gMain.intrCheck |= INTR_FLAG_VBLANK;