diff options
Diffstat (limited to 'src/link.c')
-rw-r--r-- | src/link.c | 162 |
1 files changed, 70 insertions, 92 deletions
diff --git a/src/link.c b/src/link.c index 3e4cc0c05..2f19d7aea 100644 --- a/src/link.c +++ b/src/link.c @@ -1,5 +1,3 @@ - -// Includes #include "global.h" #include "m4a.h" #include "malloc.h" @@ -30,10 +28,6 @@ #include "constants/rgb.h" #include "constants/trade.h" -extern u16 gHeldKeyCodeToSend; - -// Static type declarations - struct BlockTransfer { u16 pos; @@ -51,15 +45,13 @@ struct LinkTestBGInfo u32 dummy_C; }; -// Static RAM declarations - static struct BlockTransfer sBlockSend; static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; static u32 sBlockSendDelayCounter; -static u32 gUnknown_03000D54; -static u8 gUnknown_03000D58; +static bool32 sDummy1; // Never read +static bool8 sDummy2; // Never assigned, read in unused function static u32 sPlayerDataExchangeStatus; -static u32 gUnknown_03000D60; +static bool32 sDummy3; // Never read static u8 sLinkTestLastBlockSendPos; static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; static u8 sNumVBlanksWithoutSerialIntr; @@ -74,15 +66,15 @@ u32 gLinkDebugSeed; struct LinkPlayerBlock gLocalLinkPlayerBlock; bool8 gLinkErrorOccurred; u32 gLinkDebugFlags; -u32 gFiller_03003074; +u32 gLinkFiller1; bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; -u32 gFiller_03003080; +u32 gLinkFiller2; u16 gLinkHeldKeys; u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u32 gLinkStatus; -bool8 gUnknown_030030E4; -bool8 gUnknown_030030E8; +bool8 gLinkDummy1; // Never read +bool8 gLinkDummy2; // Never read bool8 gUnknown_030030EC[MAX_LINK_PLAYERS]; bool8 gUnknown_030030F0[MAX_LINK_PLAYERS]; u16 gUnknown_030030F4; @@ -97,15 +89,15 @@ void (*gLinkCallback)(void); u8 gShouldAdvanceLinkState; u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; u8 gBlockRequestType; -u32 gFiller_03003154; -u32 gFiller_03003158; -u32 gFiller_0300315c; +u32 gLinkFiller3; +u32 gLinkFiller4; +u32 gLinkFiller5; u8 gLastSendQueueCount; struct Link gLink; u8 gLastRecvQueueCount; u16 gLinkSavedIme; -u32 gFiller_03004138; -u32 gFiller_0300413C; +u32 gLinkFiller6; +u32 gLinkFiller7; EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0; EWRAM_DATA u8 gUnknown_020223BD = 0; @@ -130,10 +122,10 @@ static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL; // Static ROM declarations static void InitLocalLinkPlayer(void); -static void sub_80096BC(void); +static void VBlankCB_LinkError(void); static void CB2_LinkTest(void); static void ProcessRecvCmds(u8 unused); -static void sub_8009F70(void); +static void LinkCB_SendHeldKeys(void); static void ResetBlockSend(void); static bool32 InitBlockSend(const void *src, size_t size); static void LinkCB_BlockSendBegin(void); @@ -243,7 +235,7 @@ static const u8 sUnused_082ED224[] = {0x00, 0xFF, 0xFE, 0xFF, 0x00}; bool8 IsWirelessAdapterConnected(void) { SetWirelessCommType1(); - sub_800E700(); + InitRFUAPI(); if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001) { rfu_REQ_stopMode(); @@ -301,7 +293,7 @@ void LinkTestScreen(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - SetVBlankCallback(sub_80096BC); + SetVBlankCallback(VBlankCB_LinkError); ResetBlockSend(); gLinkType = LINKTYPE_TRADE; OpenLink(); @@ -317,7 +309,7 @@ void LinkTestScreen(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - gUnknown_03000D60 = 0; + sDummy3 = FALSE; InitLocalLinkPlayer(); CreateTask(Task_PrintTestData, 0); SetMainCallback2(CB2_LinkTest); @@ -344,7 +336,7 @@ static void InitLocalLinkPlayer(void) } } -static void sub_80096BC(void) +static void VBlankCB_LinkError(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -355,9 +347,9 @@ static void InitLink(void) { int i; - for (i = 0; i < 8; i++) + for (i = 0; i < CMD_LENGTH; i++) { - gSendCmd[i] = 0xefff; + gSendCmd[i] = 0xEfff; } gLinkOpen = TRUE; EnableSerial(); @@ -386,15 +378,15 @@ void OpenLink(void) gSuppressLinkErrorMessage = FALSE; ResetBlockReceivedFlags(); ResetBlockSend(); - gUnknown_03000D54 = 0; - gUnknown_030030E8 = FALSE; - gUnknown_030030E4 = FALSE; + sDummy1 = FALSE; + gLinkDummy2 = FALSE; + gLinkDummy1 = FALSE; gUnknown_030030F4 = 0; CreateTask(Task_TriggerHandshake, 2); } else { - sub_800E700(); + InitRFUAPI(); } gReceivedRemoteLinkPlayers = 0; for (i = 0; i < MAX_LINK_PLAYERS; i++) @@ -503,7 +495,7 @@ u16 LinkMain2(const u16 *heldKeys) { return 0; } - for (i = 0; i < 8; i++) + for (i = 0; i < CMD_LENGTH; i++) { gSendCmd[i] = 0; } @@ -566,10 +558,10 @@ static void ProcessRecvCmds(u8 unused) gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; break; case LINKCMD_0x5555: - gUnknown_030030E8 = TRUE; + gLinkDummy2 = TRUE; break; case LINKCMD_0x5566: - gUnknown_030030E8 = TRUE; + gLinkDummy2 = TRUE; break; case LINKCMD_INIT_BLOCK: { @@ -726,70 +718,56 @@ static void BuildSendCmd(u16 command) } } -void sub_8009F18(void) +void StartSendingKeysToLink(void) { if (gWirelessCommType) - { StartSendingKeysToRfu(); - } - gLinkCallback = sub_8009F70; + + gLinkCallback = LinkCB_SendHeldKeys; } bool32 IsSendingKeysToLink(void) { if (gWirelessCommType) - { return IsSendingKeysToRfu(); - } - if (gLinkCallback == sub_8009F70) - { + + if (gLinkCallback == LinkCB_SendHeldKeys) return TRUE; - } + return FALSE; } -static void sub_8009F70(void) +static void LinkCB_SendHeldKeys(void) { if (gReceivedRemoteLinkPlayers == TRUE) - { BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2); - } } void ClearLinkCallback(void) { if (gWirelessCommType) - { ClearLinkRfuCallback(); - } else - { gLinkCallback = NULL; - } } void ClearLinkCallback_2(void) { if (gWirelessCommType) - { ClearLinkRfuCallback(); - } else - { gLinkCallback = NULL; - } } u8 GetLinkPlayerCount(void) { if (gWirelessCommType) - { return Rfu_GetLinkPlayerCount(); - } + return EXTRACT_PLAYER_COUNT(gLinkStatus); } -static int sub_8009FF8(u32 version1, u32 version2) +static int AreAnyLinkPlayersUsingVersions(u32 version1, u32 version2) { int i; u8 nPlayers; @@ -797,22 +775,22 @@ static int sub_8009FF8(u32 version1, u32 version2) nPlayers = GetLinkPlayerCount(); for (i = 0; i < nPlayers; i++) { - if ((gLinkPlayers[i].version & 0xFF) == version1 || (gLinkPlayers[i].version & 0xFF) == version2) - { + if ((gLinkPlayers[i].version & 0xFF) == version1 + || (gLinkPlayers[i].version & 0xFF) == version2) return 1; - } } return -1; } -u32 sub_800A03C(void) +u32 LinkDummy_Return2(void) { return 2; } -bool32 sub_800A040(void) +// Unused +static bool32 IsFullLinkGroupWithNoRS(void) { - if (GetLinkPlayerCount() != 4 || sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) < 0) + if (GetLinkPlayerCount() != MAX_LINK_PLAYERS || AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) < 0) { return FALSE; } @@ -821,18 +799,18 @@ bool32 sub_800A040(void) bool32 Link_AnyPartnersPlayingRubyOrSapphire(void) { - if (sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) >= 0) + if (AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) >= 0) { return TRUE; } return FALSE; } -bool32 sub_800A07C(void) +bool32 Link_AnyPartnersPlayingFRLG_JP(void) { int i; - i = sub_8009FF8(VERSION_FIRE_RED, VERSION_LEAF_GREEN); + i = AreAnyLinkPlayersUsingVersions(VERSION_FIRE_RED, VERSION_LEAF_GREEN); if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE) { return TRUE; @@ -983,7 +961,7 @@ static bool32 InitBlockSend(const void *src, size_t size) sBlockSend.active = TRUE; sBlockSend.size = size; sBlockSend.pos = 0; - if (size > 0x100) + if (size > BLOCK_BUFFER_SIZE) { sBlockSend.src = src; } @@ -1016,7 +994,7 @@ static void LinkCB_BlockSend(void) src = sBlockSend.src; gSendCmd[0] = LINKCMD_CONT_BLOCK; - for (i = 0; i < 7; i++) + for (i = 0; i < CMD_LENGTH - 1; i++) { gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2]; } @@ -1313,7 +1291,7 @@ void SetLinkDebugValues(u32 seed, u32 flags) gLinkDebugFlags = flags; } -u8 sub_800A9A8(void) +u8 GetSavedLinkPlayerCountAsBitFlags(void) { int i; u8 flags; @@ -1326,7 +1304,7 @@ u8 sub_800A9A8(void) return flags; } -u8 sub_800A9D8(void) +u8 GetLinkPlayerCountAsBitFlags(void) { int i; u8 flags; @@ -1339,11 +1317,11 @@ u8 sub_800A9D8(void) return flags; } -void sub_800AA04(u8 a0) +void SaveLinkPlayers(u8 playerCount) { int i; - gSavedLinkPlayerCount = a0; + gSavedLinkPlayerCount = playerCount; gSavedMultiplayerId = GetMultiplayerId(); for (i = 0; i < MAX_RFU_PLAYERS; i++) { @@ -1358,17 +1336,17 @@ u8 GetSavedPlayerCount(void) return gSavedLinkPlayerCount; } -u8 sub_800AA54(void) +// Unused +static u8 GetSavedMultiplayerId(void) { return gSavedMultiplayerId; } -bool8 sub_800AA60(void) +bool8 DoesLinkPlayerCountMatchSaved(void) { int i; - unsigned count; + u32 count = 0; - count = 0; for (i = 0; i < gSavedLinkPlayerCount; i++) { if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) @@ -1376,9 +1354,7 @@ bool8 sub_800AA60(void) if (gLinkType == LINKTYPE_BATTLE_TOWER) { if (gLinkType == gLinkPlayers[i].linkType) - { count++; - } } else { @@ -1396,7 +1372,7 @@ bool8 sub_800AA60(void) return FALSE; } -void sub_800AAF4(void) +void ClearSavedLinkPlayers(void) { int i; @@ -1407,13 +1383,14 @@ void sub_800AAF4(void) } } -void sub_800AB18(void) +void CheckLinkPlayersMatchSaved(void) { u8 i; for (i = 0; i < gSavedLinkPlayerCount; i++) { - if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) + if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId + || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) { gLinkErrorOccurred = TRUE; CloseLink(); @@ -1442,9 +1419,10 @@ bool8 IsLinkMaster(void) return EXTRACT_MASTER(gLinkStatus); } -u8 sub_800ABE8(void) +// Unused +static u8 GetDummy2(void) { - return gUnknown_03000D58; + return sDummy2; } void sub_800ABF4(u16 a0) @@ -1458,7 +1436,7 @@ void sub_800ABF4(u16 a0) if (gLinkCallback == NULL) { gLinkCallback = sub_800AC80; - gUnknown_030030E4 = FALSE; + gLinkDummy1 = FALSE; gUnknown_030030F4 = a0; } } @@ -1479,7 +1457,7 @@ void sub_800AC34(void) else { gLinkCallback = sub_800AC80; - gUnknown_030030E4 = FALSE; + gLinkDummy1 = FALSE; gUnknown_030030F4 = 0; } } @@ -1515,7 +1493,7 @@ static void sub_800ACAC(void) gLinkVSyncDisabled = TRUE; CloseLink(); gLinkCallback = NULL; - gUnknown_030030E4 = TRUE; + gLinkDummy1 = TRUE; } } @@ -1534,7 +1512,7 @@ void sub_800AD10(void) else { gLinkCallback = sub_800AD5C; - gUnknown_030030E4 = FALSE; + gLinkDummy1 = FALSE; gUnknown_030030F4 = 0; } } @@ -1574,7 +1552,7 @@ static void sub_800AD88(void) gLinkVSyncDisabled = TRUE; CloseLink(); gLinkCallback = NULL; - gUnknown_030030E4 = TRUE; + gLinkDummy1 = TRUE; } } @@ -1590,7 +1568,7 @@ void sub_800ADF8(void) { gLinkCallback = sub_800AE30; } - gUnknown_030030E4 = FALSE; + gLinkDummy1 = FALSE; } } @@ -1642,7 +1620,7 @@ static void CheckErrorStatus(void) } } -void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06) +void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 unk_06) { sLinkErrorBuffer.status = status; sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount; @@ -1673,7 +1651,7 @@ void CB2_LinkError(void) } ResetLinkRfuGFLayer(); } - SetVBlankCallback(sub_80096BC); + SetVBlankCallback(VBlankCB_LinkError); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sLinkErrorBgTemplates, ARRAY_COUNT(sLinkErrorBgTemplates)); sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800); |