From 3f97763181c486cf537ac187036b086e1f222cfc Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 3 Jun 2020 18:00:53 -0400 Subject: [PATCH] Document cable_club.c --- .../scripts.inc | 18 +- .../LilycoveCity_ContestLobby/scripts.inc | 10 +- data/scripts/berry_blender.inc | 10 +- data/scripts/cable_club.inc | 32 +- data/specials.inc | 4 +- include/cable_club.h | 8 +- include/constants/cable_club.h | 18 + include/field_message_box.h | 2 +- include/link.h | 20 +- include/mevent2.h | 2 +- include/save.h | 2 +- include/start_menu.h | 4 +- include/strings.h | 2 +- include/union_room.h | 2 +- src/battle_controllers.c | 2 +- src/berry_crush.c | 4 +- src/cable_club.c | 752 +++++++++--------- src/dodrio_berry_picking.c | 4 +- src/ereader_screen.c | 12 +- src/field_message_box.c | 2 +- src/field_screen_effect.c | 2 +- src/link.c | 43 +- src/link_rfu_2.c | 2 +- src/mevent2.c | 2 +- src/mystery_event_menu.c | 4 +- src/pokemon_jump.c | 4 +- src/record_mixing.c | 11 +- src/save.c | 52 +- src/start_menu.c | 74 +- src/strings.c | 2 +- src/trade.c | 8 +- src/union_room.c | 12 +- 32 files changed, 591 insertions(+), 535 deletions(-) diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 843cacef4..79e000bd3 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -786,19 +786,19 @@ BattleFrontier_BattleTowerLobby_EventScript_TryCableLink:: @ 823F2C5 setvar VAR_0x8005, 0 special TryBattleLinkup waitstate - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful - compare VAR_RESULT, 2 + compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, 3 + compare VAR_RESULT, LINKUP_DIFF_SELECTIONS goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, 4 + compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge - compare VAR_RESULT, 6 + compare VAR_RESULT, LINKUP_CONNECTION_ERROR goto_if_eq CableClub_EventScript_AbortLinkConnectionError - compare VAR_RESULT, 11 + compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink end @@ -853,7 +853,7 @@ BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful:: @ 823F3AF message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn waitmessage tower_save CHALLENGE_STATUS_SAVING - special sub_80A08CC + special SaveForBattleTowerLink waitstate playse SE_SAVE waitse @@ -914,7 +914,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful:: @ 823F496 message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn waitmessage tower_save CHALLENGE_STATUS_SAVING - special sub_80A08CC + special SaveForBattleTowerLink waitstate playse SE_SAVE waitse diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc index 12b598346..70d4c106d 100644 --- a/data/maps/LilycoveCity_ContestLobby/scripts.inc +++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc @@ -767,15 +767,15 @@ LilycoveCity_ContestLobby_EventScript_TrySetUpLinkContest:: @ 821AA15 call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode compare VAR_TEMP_C, 2 goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest - compare VAR_RESULT, 4 + compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices - compare VAR_RESULT, 3 + compare VAR_RESULT, LINKUP_DIFF_SELECTIONS goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest - compare VAR_RESULT, 6 + compare VAR_RESULT, LINKUP_CONNECTION_ERROR goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkError - compare VAR_RESULT, 10 + compare VAR_RESULT, LINKUP_FAILED_CONTEST_GMODE goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference message3 LilycoveCity_ContestLobby_Text_Transmitting contestlinktransfer diff --git a/data/scripts/berry_blender.inc b/data/scripts/berry_blender.inc index 975408daf..6501ce129 100644 --- a/data/scripts/berry_blender.inc +++ b/data/scripts/berry_blender.inc @@ -600,15 +600,15 @@ BerryBlender_EventScript_TryDoLinkBlender: @ 82940BB waitmessage special TryBerryBlenderLinkup waitstate - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq BerryBlender_EventScript_SpawnLinkPartners - compare VAR_RESULT, 2 + compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY goto_if_eq BerryBlender_EventScript_CloseLinkNotReady - compare VAR_RESULT, 3 + compare VAR_RESULT, LINKUP_DIFF_SELECTIONS goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq BerryBlender_EventScript_CloseLink - compare VAR_RESULT, 6 + compare VAR_RESULT, LINKUP_CONNECTION_ERROR goto_if_eq BerryBlender_EventScript_LinkError end diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index f206fdd98..df14800cc 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -452,21 +452,21 @@ CableClub_EventScript_TradeCenter:: @ 82770B2 waitmessage special TryTradeLinkup waitstate - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterTradeCenter - compare VAR_RESULT, 2 + compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, 3 + compare VAR_RESULT, LINKUP_DIFF_SELECTIONS goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, 4 + compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_AbortLink - compare VAR_RESULT, 6 + compare VAR_RESULT, LINKUP_CONNECTION_ERROR goto_if_eq CableClub_EventScript_AbortLinkConnectionError - compare VAR_RESULT, 7 + compare VAR_RESULT, LINKUP_PLAYER_NOT_READY goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady - compare VAR_RESULT, 9 + compare VAR_RESULT, LINKUP_PARTNER_NOT_READY goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady end @@ -527,21 +527,21 @@ CableClub_EventScript_RecordCorner:: @ 82771DB waitmessage special TryRecordMixLinkup waitstate - special sub_80B2EA8 + special ValidateMixingGameLanguage waitstate - compare VAR_RESULT, 12 + compare VAR_RESULT, LINKUP_FOREIGN_GAME goto_if_eq CableClub_EventScript_AbortLinkForeignGame - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterRecordCorner - compare VAR_RESULT, 2 + compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, 3 + compare VAR_RESULT, LINKUP_DIFF_SELECTIONS goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, 4 + compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_AbortLink - compare VAR_RESULT, 6 + compare VAR_RESULT, LINKUP_CONNECTION_ERROR goto_if_eq CableClub_EventScript_AbortLinkConnectionError end diff --git a/data/specials.inc b/data/specials.inc index 3cbffb365..5d48e62f9 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -39,7 +39,7 @@ gSpecials:: @ 81DBA64 def_special TryBattleLinkup def_special TryTradeLinkup def_special TryRecordMixLinkup - def_special sub_80B2EA8 + def_special ValidateMixingGameLanguage def_special CloseLink def_special ColosseumPlayerSpotTriggered def_special PlayerEnteredTradeSeat @@ -502,7 +502,7 @@ gSpecials:: @ 81DBA64 def_special CreateAbnormalWeatherEvent def_special GetAbnormalWeatherMapNameAndType def_special GetMartEmployeeObjectEventId - def_special sub_80A08CC + def_special SaveForBattleTowerLink def_special Unused_SetWeatherSunny def_special SetUnlockedPokedexFlags def_special IsTrainerRegistered diff --git a/include/cable_club.h b/include/cable_club.h index 72e344009..515960dfd 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -9,12 +9,12 @@ // Exported ROM declarations -void sub_80B37D4(TaskFunc taskFunc); -u8 sub_80B3050(void); +void CreateTask_EnterCableClubSeat(TaskFunc taskFunc); +u8 CreateTask_ReestablishCableClubLink(void); void CB2_ReturnFromCableClubBattle(void); -bool32 sub_80B2AF4(u16 *arg0, u16 *arg1); +bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2); void sub_80B3AF8(u8 taskId); -void task00_08081A90(u8 taskId); +void Task_WaitForLinkPlayerConnection(u8 taskId); bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex); #endif //GUARD_CABLE_CLUB_H diff --git a/include/constants/cable_club.h b/include/constants/cable_club.h index f2aa4120c..960a27644 100644 --- a/include/constants/cable_club.h +++ b/include/constants/cable_club.h @@ -12,4 +12,22 @@ #define USING_MINIGAME 8 #define USING_BATTLE_TOWER 9 +#define LINKUP_ONGOING 0 +#define LINKUP_SUCCESS 1 +#define LINKUP_SOMEONE_NOT_READY 2 +#define LINKUP_DIFF_SELECTIONS 3 +#define LINKUP_WRONG_NUM_PLAYERS 4 +#define LINKUP_FAILED 5 +#define LINKUP_CONNECTION_ERROR 6 +#define LINKUP_PLAYER_NOT_READY 7 +#define LINKUP_UNK8 8 +#define LINKUP_PARTNER_NOT_READY 9 +#define LINKUP_FAILED_CONTEST_GMODE 10 +#define LINKUP_FAILED_BATTLE_TOWER 11 +#define LINKUP_FOREIGN_GAME 12 + +#define LINK_BATTLE_TOWER_SAME_MON 1 +#define LINK_BATTLE_TOWER_SAME_MONS 2 +#define LINK_BATTLE_TOWER_DIFF_MODE 3 + #endif //GUARD_CONSTANTS_CABLE_CLUB_H diff --git a/include/field_message_box.h b/include/field_message_box.h index 58f782d9c..7bd2a0dca 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -16,7 +16,7 @@ bool8 ShowFieldAutoScrollMessage(const u8 *message); void HideFieldMessageBox(void); bool8 IsFieldMessageBoxHidden(void); u8 GetFieldMessageBoxMode(void); -void sub_8098374(void); +void StopFieldMessage(void); void InitFieldMessageBox(void); #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/include/link.h b/include/link.h index 2818b3a7c..5e75af088 100644 --- a/include/link.h +++ b/include/link.h @@ -73,10 +73,10 @@ #define LINKCMD_CANCEL_TRADE 0xEEBB #define LINKCMD_0xEECC 0xEECC -#define LINKTYPE_0x1111 0x1111 // trade -#define LINKTYPE_0x1122 0x1122 // trade -#define LINKTYPE_0x1133 0x1133 // trade -#define LINKTYPE_0x1144 0x1144 // trade +#define LINKTYPE_TRADE 0x1111 +#define LINKTYPE_TRADE_CONNECTING 0x1122 +#define LINKTYPE_TRADE_SETUP 0x1133 +#define LINKTYPE_TRADE_DISCONNECTED 0x1144 #define LINKTYPE_BATTLE 0x2211 #define LINKTYPE_0x2222 0x2222 // unused battle? #define LINKTYPE_SINGLE_BATTLE 0x2233 @@ -85,13 +85,13 @@ #define LINKTYPE_BATTLE_TOWER_50 0x2266 #define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 #define LINKTYPE_BATTLE_TOWER 0x2288 -#define LINKTYPE_0x3311 0x3311 -#define LINKTYPE_0x3322 0x3322 +#define LINKTYPE_RECORD_MIX_BEFORE 0x3311 +#define LINKTYPE_RECORD_MIX_AFTER 0x3322 #define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 #define LINKTYPE_BERRY_BLENDER 0x4422 -#define LINKTYPE_0x5501 0x5501 // mystery event +#define LINKTYPE_MYSTERY_EVENT 0x5501 #define LINKTYPE_0x5502 0x5502 // unused? -#define LINKTYPE_0x5503 0x5503 // eReader +#define LINKTYPE_EREADER 0x5503 #define LINKTYPE_CONTEST_GMODE 0x6601 #define LINKTYPE_CONTEST_EMODE 0x6602 @@ -126,10 +126,10 @@ enum EXCHANGE_NOT_STARTED, EXCHANGE_COMPLETE, EXCHANGE_TIMED_OUT, - EXCHANGE_IN_PROGRESS, + EXCHANGE_DIFF_SELECTIONS, EXCHANGE_PLAYER_NOT_READY, EXCHANGE_PARTNER_NOT_READY, - EXCHANGE_STAT_6, + EXCHANGE_WRONG_NUM_PLAYERS, EXCHANGE_STAT_7 }; diff --git a/include/mevent2.h b/include/mevent2.h index 80b1fd51b..316a9e6de 100644 --- a/include/mevent2.h +++ b/include/mevent2.h @@ -1,6 +1,6 @@ #ifndef GUARD_MEVENT2_H #define GUARD_MEVENT2_H -void sub_801B990(u32, u32); +void RecordIdOfWonderCardSenderByEventType(u32, u32); #endif //GUARD_MEVENT2_H diff --git a/include/save.h b/include/save.h index 225b2b62c..18b57502b 100644 --- a/include/save.h +++ b/include/save.h @@ -102,7 +102,7 @@ u8 Save_LoadGameData(u8 saveType); u16 sub_815355C(void); u32 TryReadSpecialSaveSection(u8 sector, u8* dst); u32 TryWriteSpecialSaveSection(u8 sector, u8* src); -void sub_8153688(u8 taskId); +void Task_LinkSave(u8 taskId); // save_failed_screen.c void DoSaveFailedScreen(u8 saveType); diff --git a/include/start_menu.h b/include/start_menu.h index df2a290a2..1ddd82066 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -8,8 +8,8 @@ void Task_ShowStartMenu(u8 taskId); void ShowStartMenu(void); void ShowBattlePyramidStartMenu(void); void SaveGame(void); -void sub_80A0514(void); -void sub_80A08CC(void); +void CB2_SetUpSaveAfterLinkBattle(void); +void SaveForBattleTowerLink(void); void HideStartMenu(void); void AppendToList(u8* list, u8* pos, u8 newEntry); diff --git a/include/strings.h b/include/strings.h index dc3653163..1867f0ca4 100644 --- a/include/strings.h +++ b/include/strings.h @@ -962,7 +962,7 @@ extern const u8 gText_TwoDashes[]; extern const u8 *const gReturnToXStringsTable2[]; -extern const u8 gText_XPLink[]; +extern const u8 gText_NumPlayerLink[]; extern const u8 gText_ConfirmLinkWhenPlayersReady[]; extern const u8 gText_ConfirmStartLinkWithXPlayers[]; extern const u8 gText_AwaitingLinkup[]; diff --git a/include/union_room.h b/include/union_room.h index 4cdb17662..7c48a9506 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -161,7 +161,7 @@ extern u8 gUnionRoomRequestedMonType; // Exported ROM declarations -u8 CreateTask_ReturnFromLinkTrade(void); +u8 CreateTask_CreateTradeMenu(void); void nullsub_89(u8 taskId); void var_800D_set_xB(void); void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 43bd9fce6..a0e9e4416 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -36,7 +36,7 @@ void HandleLinkBattleSetup(void) SetWirelessCommType1(); if (!gReceivedRemoteLinkPlayers) OpenLink(); - CreateTask(task00_08081A90, 0); + CreateTask(Task_WaitForLinkPlayerConnection, 0); CreateTasksForSendRecvLinkBuffers(); } } diff --git a/src/berry_crush.c b/src/berry_crush.c index 3ff3156e6..6bc97fad0 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -3013,10 +3013,10 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) DrawDialogueFrame(0, 0); AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3); CopyWindowToVram(0, 3); - CreateTask(sub_8153688, 0); + CreateTask(Task_LinkSave, 0); break; case 3: - if (FuncIsActiveTask(sub_8153688)) + if (FuncIsActiveTask(Task_LinkSave)) return 0; break; case 4: diff --git a/src/cable_club.c b/src/cable_club.c index 2a53c64b2..ffd7bcd8f 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -33,8 +33,9 @@ #include "constants/battle_frontier.h" #include "constants/cable_club.h" #include "constants/songs.h" +#include "constants/trainers.h" -static const struct WindowTemplate gUnknown_08550594 = { +static const struct WindowTemplate sWindowTemplate_LinkPlayerCount = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 11, @@ -43,57 +44,67 @@ static const struct WindowTemplate gUnknown_08550594 = { .paletteNum = 15, .baseBlock = 0x0125, }; -static const u8 *const gTrainerCardColorNames[] = { + +static const u8 *const sTrainerCardColorNames[] = { gText_BronzeCard, gText_CopperCard, gText_SilverCard, gText_GoldCard }; -static void sub_80B2634(u8 taskId); -static void sub_80B2688(u8 taskId); -static void sub_80B270C(u8 taskId); -static void sub_80B275C(u8 taskId); -static void sub_80B2804(u8 taskId); -static void sub_80B28A8(u8 taskId); -static void sub_80B2918(u8 taskId); -static void sub_80B2A08(u8 taskId); -static void sub_80B2C30(u8 taskId); -static void sub_80B2CB0(u8 taskId); -static void sub_80B2CEC(u8 taskId); -static void sub_80B2D2C(u8 taskId); -static bool8 sub_80B2D6C(u8 taskId); -static void sub_80B2EE4(u8 taskId); -static void sub_80B3144(u8 taskId); -static void sub_80B3194(u8 taskId); -static void sub_80B31E8(u8 taskId); -static void sub_80B3220(u8 taskId); +static void Task_LinkupStart(u8 taskId); +static void Task_LinkupAwaitConnection(u8 taskId); +static void Task_LinkupConfirmWhenReady(u8 taskId); +static void Task_LinkupAwaitConfirmation(u8 taskId); +static void Task_LinkupTryConfirmation(u8 taskId); +static void Task_LinkupConfirm(u8 taskId); +static void Task_LinkupExchangeDataWithLeader(u8 taskId); +static void Task_LinkupCheckStatusAfterConfirm(u8 taskId); +static void Task_LinkupAwaitTrainerCardData(u8 taskId); +static void Task_StopLinkup(u8 taskId); +static void Task_LinkupFailed(u8 taskId); +static void Task_LinkupConnectionError(u8 taskId); +static bool8 TryLinkTimeout(u8 taskId); +static void Task_ValidateMixingGameLanguage(u8 taskId); +static void Task_ReestablishLink(u8 taskId); +static void Task_ReestablishLinkAwaitConnection(u8 taskId); +static void Task_ReestablishLinkLeader(u8 taskId); +static void Task_ReestablishLinkAwaitConfirmation(u8 taskId); -static void sub_80B236C(u8 arg0, u8 arg1) +#define tState data[0] + + +#define tMinPlayers data[1] +#define tMaxPlayers data[2] +#define tNumPlayers data[3] +#define tTimer data[4] +#define tWindowId data[5] + +static void CreateLinkupTask(u8 minPlayers, u8 maxPlayers) { - if (FindTaskIdByFunc(sub_80B2634) == 0xFF) + if (FindTaskIdByFunc(Task_LinkupStart) == 0xFF) { u8 taskId1; - taskId1 = CreateTask(sub_80B2634, 80); - gTasks[taskId1].data[1] = arg0; - gTasks[taskId1].data[2] = arg1; + taskId1 = CreateTask(Task_LinkupStart, 80); + gTasks[taskId1].tMinPlayers = minPlayers; + gTasks[taskId1].tMaxPlayers = maxPlayers; } } -static void sub_80B23B0(u16 windowId, u32 value) +static void PrintNumPlayersInLink(u16 windowId, u32 numPlayers) { u8 xPos; - ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, numPlayers, STR_CONV_MODE_LEFT_ALIGN, 1); SetStandardWindowBorderStyle(windowId, 0); - StringExpandPlaceholders(gStringVar4, gText_XPLink); + StringExpandPlaceholders(gStringVar4, gText_NumPlayerLink); xPos = GetStringCenterAlignXOffset(1, gStringVar4, 88); AddTextPrinterParameterized(windowId, 1, gStringVar4, xPos, 1, 0xFF, NULL); CopyWindowToVram(windowId, 3); } -static void sub_80B241C(u16 windowId) +static void ClearLinkPlayerCountWindow(u16 windowId) { // Following this call with a copy-to-vram with mode 3 is identical to // calling ClearStdWindowAndFrame(windowId, TRUE). @@ -101,68 +112,68 @@ static void sub_80B241C(u16 windowId) CopyWindowToVram(windowId, 3); } -static void sub_80B243C(u8 taskId, u8 arg1) +static void UpdateLinkPlayerCountDisplay(u8 taskId, u8 numPlayers) { s16 *data = gTasks[taskId].data; - if (arg1 != data[3]) + if (numPlayers != tNumPlayers) { - if (arg1 <= 1) - sub_80B241C(data[5]); + if (numPlayers <= 1) + ClearLinkPlayerCountWindow(tWindowId); else - sub_80B23B0(data[5], arg1); - data[3] = arg1; + PrintNumPlayersInLink(tWindowId, numPlayers); + tNumPlayers = numPlayers; } } -static u32 sub_80B2478(u8 lower, u8 upper) +static u32 ExchangeDataAndGetLinkupStatus(u8 minPlayers, u8 maxPlayers) { int playerCount; - switch (GetLinkPlayerDataExchangeStatusTimed(lower, upper)) + switch (GetLinkPlayerDataExchangeStatusTimed(minPlayers, maxPlayers)) { case EXCHANGE_COMPLETE: - return 1; - case EXCHANGE_IN_PROGRESS: - return 3; + return LINKUP_SUCCESS; + case EXCHANGE_DIFF_SELECTIONS: + return LINKUP_DIFF_SELECTIONS; case EXCHANGE_PLAYER_NOT_READY: - return 7; + return LINKUP_PLAYER_NOT_READY; case EXCHANGE_PARTNER_NOT_READY: - return 9; - case EXCHANGE_STAT_6: + return LINKUP_PARTNER_NOT_READY; + case EXCHANGE_WRONG_NUM_PLAYERS: ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1); - return 4; + return LINKUP_WRONG_NUM_PLAYERS; case EXCHANGE_STAT_7: - return 10; + return LINKUP_FAILED_CONTEST_GMODE; case EXCHANGE_TIMED_OUT: default: - return 0; + return LINKUP_ONGOING; } } -static bool32 sub_80B24F8(u8 taskId) +static bool32 CheckLinkErrored(u8 taskId) { if (HasLinkErrorOccurred() == TRUE) { - gTasks[taskId].func = sub_80B2D2C; + gTasks[taskId].func = Task_LinkupConnectionError; return TRUE; } return FALSE; } -static bool32 sub_80B252C(u8 taskId) +static bool32 CheckLinkCanceledBeforeConnection(u8 taskId) { if ((gMain.newKeys & B_BUTTON) && IsLinkConnectionEstablished() == FALSE) { gLinkType = 0; - gTasks[taskId].func = sub_80B2CEC; + gTasks[taskId].func = Task_LinkupFailed; return TRUE; } return FALSE; } -static bool32 sub_80B2578(u8 taskId) +static bool32 CheckLinkCanceled(u8 taskId) { if (IsLinkConnectionEstablished()) SetSuppressLinkErrorMessage(TRUE); @@ -170,7 +181,7 @@ static bool32 sub_80B2578(u8 taskId) if (gMain.newKeys & B_BUTTON) { gLinkType = 0; - gTasks[taskId].func = sub_80B2CEC; + gTasks[taskId].func = Task_LinkupFailed; return TRUE; } return FALSE; @@ -180,12 +191,13 @@ static bool32 sub_80B25CC(u8 taskId) { if (GetSioMultiSI() == 1) { - gTasks[taskId].func = sub_80B2D2C; + gTasks[taskId].func = Task_LinkupConnectionError; return TRUE; } return FALSE; } +// Unused static void sub_80B2600(u8 taskId) { gTasks[taskId].data[0]++; @@ -196,7 +208,7 @@ static void sub_80B2600(u8 taskId) } } -static void sub_80B2634(u8 taskId) +static void Task_LinkupStart(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -205,21 +217,21 @@ static void sub_80B2634(u8 taskId) OpenLinkTimed(); ResetLinkPlayerCount(); ResetLinkPlayers(); - data[5] = AddWindow(&gUnknown_08550594); + tWindowId = AddWindow(&sWindowTemplate_LinkPlayerCount); } else if (data[0] > 9) { - gTasks[taskId].func = sub_80B2688; + gTasks[taskId].func = Task_LinkupAwaitConnection; } data[0]++; } -static void sub_80B2688(u8 taskId) +static void Task_LinkupAwaitConnection(u8 taskId) { u32 playerCount = GetLinkPlayerCount_2(); - if (sub_80B252C(taskId) == TRUE - || sub_80B2578(taskId) == TRUE + if (CheckLinkCanceledBeforeConnection(taskId) == TRUE + || CheckLinkCanceled(taskId) == TRUE || playerCount < 2) return; @@ -229,60 +241,60 @@ static void sub_80B2688(u8 taskId) { PlaySE(SE_PIN); ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); - gTasks[taskId].func = sub_80B270C; + gTasks[taskId].func = Task_LinkupConfirmWhenReady; } else { PlaySE(SE_BOO); ShowFieldAutoScrollMessage(gText_AwaitingLinkup); - gTasks[taskId].func = sub_80B2918; + gTasks[taskId].func = Task_LinkupExchangeDataWithLeader; } } -static void sub_80B270C(u8 taskId) +static void Task_LinkupConfirmWhenReady(u8 taskId) { - if (sub_80B252C(taskId) == TRUE + if (CheckLinkCanceledBeforeConnection(taskId) == TRUE || sub_80B25CC(taskId) == TRUE - || sub_80B24F8(taskId) == TRUE) + || CheckLinkErrored(taskId) == TRUE) return; if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) { - gTasks[taskId].data[3] = 0; - gTasks[taskId].func = sub_80B275C; + gTasks[taskId].tNumPlayers = 0; + gTasks[taskId].func = Task_LinkupAwaitConfirmation; } } -static void sub_80B275C(u8 taskId) +static void Task_LinkupAwaitConfirmation(u8 taskId) { s16 *data = gTasks[taskId].data; s32 linkPlayerCount = GetLinkPlayerCount_2(); - if (sub_80B252C(taskId) == TRUE + if (CheckLinkCanceledBeforeConnection(taskId) == TRUE || sub_80B25CC(taskId) == TRUE - || sub_80B24F8(taskId) == TRUE) + || CheckLinkErrored(taskId) == TRUE) return; - sub_80B243C(taskId, linkPlayerCount); + UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount); if (!(gMain.newKeys & A_BUTTON)) return; - if (linkPlayerCount < data[1]) + if (linkPlayerCount < tMinPlayers) return; sub_800AA04(linkPlayerCount); - sub_80B241C(data[5]); + ClearLinkPlayerCountWindow(tWindowId); ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); ShowFieldAutoScrollMessage(gText_ConfirmStartLinkWithXPlayers); - gTasks[taskId].func = sub_80B2804; + gTasks[taskId].func = Task_LinkupTryConfirmation; } -static void sub_80B2804(u8 taskId) +static void Task_LinkupTryConfirmation(u8 taskId) { - if (sub_80B252C(taskId) == TRUE + if (CheckLinkCanceledBeforeConnection(taskId) == TRUE || sub_80B25CC(taskId) == TRUE - || sub_80B24F8(taskId) == TRUE) + || CheckLinkErrored(taskId) == TRUE) return; if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) @@ -290,69 +302,71 @@ static void sub_80B2804(u8 taskId) if (GetSavedPlayerCount() != GetLinkPlayerCount_2()) { ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); - gTasks[taskId].func = sub_80B270C; + gTasks[taskId].func = Task_LinkupConfirmWhenReady; } else if (gMain.heldKeys & B_BUTTON) { ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); - gTasks[taskId].func = sub_80B270C; + gTasks[taskId].func = Task_LinkupConfirmWhenReady; } else if (gMain.heldKeys & A_BUTTON) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); - gTasks[taskId].func = sub_80B28A8; + gTasks[taskId].func = Task_LinkupConfirm; } } } -static void sub_80B28A8(u8 taskId) +static void Task_LinkupConfirm(u8 taskId) { - u8 local1 = gTasks[taskId].data[1]; - u8 local2 = gTasks[taskId].data[2]; + u8 minPlayers = gTasks[taskId].tMinPlayers; + u8 maxPlayers = gTasks[taskId].tMaxPlayers; - if (sub_80B24F8(taskId) == TRUE - || sub_80B2D6C(taskId) == TRUE) + if (CheckLinkErrored(taskId) == TRUE + || TryLinkTimeout(taskId) == TRUE) return; if (GetLinkPlayerCount_2() != GetSavedPlayerCount()) { - gTasks[taskId].func = sub_80B2D2C; + gTasks[taskId].func = Task_LinkupConnectionError; } else { - gSpecialVar_Result = sub_80B2478(local1, local2); - if (gSpecialVar_Result != 0) - gTasks[taskId].func = sub_80B2A08; + gSpecialVar_Result = ExchangeDataAndGetLinkupStatus(minPlayers, maxPlayers); + if (gSpecialVar_Result != LINKUP_ONGOING) + gTasks[taskId].func = Task_LinkupCheckStatusAfterConfirm; } } -static void sub_80B2918(u8 taskId) +static void Task_LinkupExchangeDataWithLeader(u8 taskId) { - u8 local1, local2; + u8 minPlayers, maxPlayers; struct TrainerCard *card; - local1 = gTasks[taskId].data[1]; - local2 = gTasks[taskId].data[2]; + minPlayers = gTasks[taskId].tMinPlayers; + maxPlayers = gTasks[taskId].tMaxPlayers; - if (sub_80B252C(taskId) == TRUE - || sub_80B24F8(taskId) == TRUE) + if (CheckLinkCanceledBeforeConnection(taskId) == TRUE + || CheckLinkErrored(taskId) == TRUE) return; - gSpecialVar_Result = sub_80B2478(local1, local2); - if (gSpecialVar_Result == 0) + gSpecialVar_Result = ExchangeDataAndGetLinkupStatus(minPlayers, maxPlayers); + if (gSpecialVar_Result == LINKUP_ONGOING) return; - if (gSpecialVar_Result == 3 || gSpecialVar_Result == 4) + if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS + || gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS) { sub_800AC34(); HideFieldMessageBox(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } - else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9) + else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY + || gSpecialVar_Result == LINKUP_PARTNER_NOT_READY) { CloseLink(); HideFieldMessageBox(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } else { @@ -363,43 +377,44 @@ static void sub_80B2918(u8 taskId) TrainerCard_GenerateCardForPlayer(card); 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 = sub_80B2C30; + gTasks[taskId].func = Task_LinkupAwaitTrainerCardData; } } -static void sub_80B2A08(u8 taskId) +static void Task_LinkupCheckStatusAfterConfirm(u8 taskId) { struct TrainerCard *card; - if (sub_80B24F8(taskId) == TRUE) + if (CheckLinkErrored(taskId) == TRUE) return; - if (gSpecialVar_Result == 4) + if (gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS) { if (!Link_AnyPartnersPlayingRubyOrSapphire()) { sub_800AC34(); HideFieldMessageBox(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } else { CloseLink(); HideFieldMessageBox(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } } - else if (gSpecialVar_Result == 3) + else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS) { sub_800AC34(); HideFieldMessageBox(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } - else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9) + else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY + || gSpecialVar_Result == LINKUP_PARTNER_NOT_READY) { CloseLink(); HideFieldMessageBox(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } else { @@ -410,90 +425,95 @@ static void sub_80B2A08(u8 taskId) TrainerCard_GenerateCardForPlayer(card); 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 = sub_80B2C30; + gTasks[taskId].func = Task_LinkupAwaitTrainerCardData; sub_800A4D8(2); } } -bool32 sub_80B2AF4(u16 *arg0, u16 *arg1) +bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2) { int i; int j; - bool32 result = FALSE; - int k = 0; + bool32 haveSameSpecies = FALSE; + int numSameSpecies = 0; gStringVar1[0] = EOS; gStringVar2[0] = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < FRONTIER_MULTI_PARTY_SIZE; i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_MULTI_PARTY_SIZE; j++) { - if (arg0[i] == arg1[j]) + if (speciesList1[i] == speciesList2[j]) { - if (k == 0) + if (numSameSpecies == 0) { - StringCopy(gStringVar1, gSpeciesNames[arg0[i]]); - result = TRUE; + StringCopy(gStringVar1, gSpeciesNames[speciesList1[i]]); + haveSameSpecies = TRUE; } - if (k == 1) + if (numSameSpecies == 1) { - StringCopy(gStringVar2, gSpeciesNames[arg0[i]]); - result = TRUE; + StringCopy(gStringVar2, gSpeciesNames[speciesList1[i]]); + haveSameSpecies = TRUE; } - k++; + numSameSpecies++; } } } - gSpecialVar_0x8005 = k; + // var below is read by BattleFrontier_BattleTowerLobby_EventScript_AbortLink + gSpecialVar_0x8005 = numSameSpecies; - return result; + return haveSameSpecies; } -static void task_map_chg_seq_0807EC34(u16 *a0, u32 taskId) +static void FinishLinkup(u16 *linkupStatus, u32 taskId) { struct TrainerCard *trainerCards = gTrainerCards; - if (*a0 == 1) + if (*linkupStatus == LINKUP_SUCCESS) { if (gLinkType == LINKTYPE_BATTLE_TOWER_50 || gLinkType == LINKTYPE_BATTLE_TOWER_OPEN) { - if (sub_80B2AF4(trainerCards[0].monSpecies, trainerCards[1].monSpecies)) + if (AreBattleTowerLinkSpeciesSame(trainerCards[0].monSpecies, trainerCards[1].monSpecies)) { - *a0 = 11; + // Unsuccessful battle tower linkup + *linkupStatus = LINKUP_FAILED_BATTLE_TOWER; sub_800AC34(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } else { - sub_80B241C(gTasks[taskId].data[5]); + // Successful battle tower linkup + ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); EnableBothScriptContexts(); DestroyTask(taskId); } } else { - sub_80B241C(gTasks[taskId].data[5]); + // Successful linkup + ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); EnableBothScriptContexts(); DestroyTask(taskId); } } else { + // Unsuccessful linkup sub_800AC34(); - gTasks[taskId].func = sub_80B2CB0; + gTasks[taskId].func = Task_StopLinkup; } } -static void sub_80B2C30(u8 taskId) +static void Task_LinkupAwaitTrainerCardData(u8 taskId) { u8 index; struct TrainerCard *trainerCards; - if (sub_80B24F8(taskId) == TRUE) + if (CheckLinkErrored(taskId) == TRUE) return; if (GetBlockReceivedStatus() != sub_800A9A8()) @@ -506,74 +526,74 @@ static void sub_80B2C30(u8 taskId) SetSuppressLinkErrorMessage(FALSE); ResetBlockReceivedFlags(); - task_map_chg_seq_0807EC34(&gSpecialVar_Result, taskId); + FinishLinkup(&gSpecialVar_Result, taskId); } -static void sub_80B2CB0(u8 taskId) +static void Task_StopLinkup(u8 taskId) { - if (gReceivedRemoteLinkPlayers == FALSE) + if (!gReceivedRemoteLinkPlayers) { - sub_80B241C(gTasks[taskId].data[5]); + ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); EnableBothScriptContexts(); - RemoveWindow(gTasks[taskId].data[5]); + RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); } } -static void sub_80B2CEC(u8 taskId) +static void Task_LinkupFailed(u8 taskId) { - gSpecialVar_Result = 5; - sub_80B241C(gTasks[taskId].data[5]); - sub_8098374(); - RemoveWindow(gTasks[taskId].data[5]); + gSpecialVar_Result = LINKUP_FAILED; + ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); + StopFieldMessage(); + RemoveWindow(gTasks[taskId].tWindowId); EnableBothScriptContexts(); DestroyTask(taskId); } -static void sub_80B2D2C(u8 taskId) +static void Task_LinkupConnectionError(u8 taskId) { - gSpecialVar_Result = 6; - sub_80B241C(gTasks[taskId].data[5]); - RemoveWindow(gTasks[taskId].data[5]); + gSpecialVar_Result = LINKUP_CONNECTION_ERROR; + ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); + RemoveWindow(gTasks[taskId].tWindowId); HideFieldMessageBox(); EnableBothScriptContexts(); DestroyTask(taskId); } -static bool8 sub_80B2D6C(u8 taskId) +static bool8 TryLinkTimeout(u8 taskId) { - gTasks[taskId].data[4]++; - if (gTasks[taskId].data[4] > 600) + gTasks[taskId].tTimer++; + if (gTasks[taskId].tTimer > 600) { - gTasks[taskId].func = sub_80B2D2C; + gTasks[taskId].func = Task_LinkupConnectionError; return TRUE; } return FALSE; } -void TryBattleLinkup(u8 arg0) +void TryBattleLinkup(void) { - u8 r3 = 2; - u8 r2 = 2; + u8 minPlayers = 2; + u8 maxPlayers = 2; switch (gSpecialVar_0x8004) { case USING_SINGLE_BATTLE: - r3 = 2; + minPlayers = 2; gLinkType = LINKTYPE_SINGLE_BATTLE; break; case USING_DOUBLE_BATTLE: - r3 = 2; + minPlayers = 2; gLinkType = LINKTYPE_DOUBLE_BATTLE; break; case USING_MULTI_BATTLE: - r3 = 4; - r2 = 4; + minPlayers = 4; + maxPlayers = 4; gLinkType = LINKTYPE_MULTI_BATTLE; break; case USING_BATTLE_TOWER: - r3 = 2; + minPlayers = 2; if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50) gLinkType = LINKTYPE_BATTLE_TOWER_50; else @@ -582,46 +602,52 @@ void TryBattleLinkup(u8 arg0) break; } - sub_80B236C(r3, r2); + CreateLinkupTask(minPlayers, maxPlayers); } +#undef tMinPlayers +#undef tMaxPlayers +#undef tNumPlayers +#undef tTimer +#undef tWindowId + void TryTradeLinkup(void) { - gLinkType = LINKTYPE_0x1133; + gLinkType = LINKTYPE_TRADE_SETUP; gBattleTypeFlags = 0; - sub_80B236C(2, 2); + CreateLinkupTask(2, 2); } void TryRecordMixLinkup(void) { - gSpecialVar_Result = 0; - gLinkType = LINKTYPE_0x3311; + gSpecialVar_Result = LINKUP_ONGOING; + gLinkType = LINKTYPE_RECORD_MIX_BEFORE; gBattleTypeFlags = 0; - sub_80B236C(2, 4); + CreateLinkupTask(2, 4); } -void sub_80B2EA8(void) +void ValidateMixingGameLanguage(void) { - u32 taskId = FindTaskIdByFunc(sub_80B2EE4); + u32 taskId = FindTaskIdByFunc(Task_ValidateMixingGameLanguage); if (taskId == 0xFF) { - taskId = CreateTask(sub_80B2EE4, 80); - gTasks[taskId].data[0] = 0; + taskId = CreateTask(Task_ValidateMixingGameLanguage, 80); + gTasks[taskId].tState = 0; } } -static void sub_80B2EE4(u8 taskId) +static void Task_ValidateMixingGameLanguage(u8 taskId) { int playerCount; int i; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - if (gSpecialVar_Result == 1) + if (gSpecialVar_Result == LINKUP_SUCCESS) { - bool32 unk = FALSE; + bool32 mixingForeignGames = FALSE; bool32 isEnglishRSLinked = FALSE; bool32 isJapaneseEmeraldLinked = FALSE; @@ -635,7 +661,7 @@ static void sub_80B2EE4(u8 taskId) { if (language == LANGUAGE_JAPANESE) { - unk = TRUE; + mixingForeignGames = TRUE; break; } else @@ -654,14 +680,14 @@ static void sub_80B2EE4(u8 taskId) if (isEnglishRSLinked && isJapaneseEmeraldLinked) { - unk = TRUE; + mixingForeignGames = TRUE; } - if (unk) + if (mixingForeignGames) { - gSpecialVar_Result = 12; + gSpecialVar_Result = LINKUP_FOREIGN_GAME; sub_800AD10(); - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; return; } } @@ -669,7 +695,7 @@ static void sub_80B2EE4(u8 taskId) DestroyTask(taskId); break; case 1: - if (gReceivedRemoteLinkPlayers == FALSE) + if (!gReceivedRemoteLinkPlayers) { EnableBothScriptContexts(); DestroyTask(taskId); @@ -682,26 +708,26 @@ void TryBerryBlenderLinkup(void) { gLinkType = LINKTYPE_BERRY_BLENDER_SETUP; gBattleTypeFlags = 0; - sub_80B236C(2, 4); + CreateLinkupTask(2, 4); } void TryContestGModeLinkup(void) { gLinkType = LINKTYPE_CONTEST_GMODE; gBattleTypeFlags = 0; - sub_80B236C(4, 4); + CreateLinkupTask(4, 4); } void TryContestEModeLinkup(void) { gLinkType = LINKTYPE_CONTEST_EMODE; gBattleTypeFlags = 0; - sub_80B236C(2, 4); + CreateLinkupTask(2, 4); } -u8 sub_80B3050(void) +u8 CreateTask_ReestablishCableClubLink(void) { - if (FuncIsActiveTask(sub_80B3144) != FALSE) + if (FuncIsActiveTask(Task_ReestablishLink) != FALSE) return 0xFF; switch (gSpecialVar_0x8004) @@ -717,26 +743,22 @@ u8 sub_80B3050(void) break; case USING_BATTLE_TOWER: if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50) - { gLinkType = LINKTYPE_BATTLE_TOWER_50; - } else - { gLinkType = LINKTYPE_BATTLE_TOWER_OPEN; - } break; case USING_TRADE_CENTER: - gLinkType = LINKTYPE_0x1111; + gLinkType = LINKTYPE_TRADE; break; case USING_RECORD_CORNER: - gLinkType = LINKTYPE_0x3322; + gLinkType = LINKTYPE_RECORD_MIX_AFTER; break; } - return CreateTask(sub_80B3144, 80); + return CreateTask(Task_ReestablishLink, 80); } -static void sub_80B3144(u8 taskId) +static void Task_ReestablishLink(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -744,36 +766,36 @@ static void sub_80B3144(u8 taskId) { OpenLink(); ResetLinkPlayers(); - CreateTask(task00_08081A90, 80); + CreateTask(Task_WaitForLinkPlayerConnection, 80); } else if (data[0] >= 10) { - gTasks[taskId].func = sub_80B3194; + gTasks[taskId].func = Task_ReestablishLinkAwaitConnection; } data[0]++; } -static void sub_80B3194(u8 taskId) +static void Task_ReestablishLinkAwaitConnection(u8 taskId) { if (GetLinkPlayerCount_2() >= 2) { if (IsLinkMaster() == TRUE) - gTasks[taskId].func = sub_80B31E8; + gTasks[taskId].func = Task_ReestablishLinkLeader; else - gTasks[taskId].func = sub_80B3220; + gTasks[taskId].func = Task_ReestablishLinkAwaitConfirmation; } } -static void sub_80B31E8(u8 taskId) +static void Task_ReestablishLinkLeader(u8 taskId) { if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) { CheckShouldAdvanceLinkState(); - gTasks[taskId].func = sub_80B3220; + gTasks[taskId].func = Task_ReestablishLinkAwaitConfirmation; } } -static void sub_80B3220(u8 taskId) +static void Task_ReestablishLinkAwaitConfirmation(u8 taskId) { if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) @@ -794,50 +816,52 @@ static void SetLinkBattleTypeFlags(int linkService) { switch (linkService) { - case USING_SINGLE_BATTLE: - gBattleTypeFlags = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; - break; - case USING_DOUBLE_BATTLE: - gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; - break; - case USING_MULTI_BATTLE: - ReducePlayerPartyToSelectedMons(); - gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI; - break; - case USING_BATTLE_TOWER: - gBattleTypeFlags = BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI; - break; + case USING_SINGLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; + break; + case USING_DOUBLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; + break; + case USING_MULTI_BATTLE: + ReducePlayerPartyToSelectedMons(); + gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI; + break; + case USING_BATTLE_TOWER: + gBattleTypeFlags = BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI; + break; } } -static void sub_80B32B4(u8 taskId) +#define tTimer data[1] + +static void Task_StartWiredCableClubBattle(u8 taskId) { struct Task* task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FadeScreen(FADE_TO_BLACK, 0); gLinkType = LINKTYPE_BATTLE; ClearLinkCallback_2(); - task->data[0]++; + task->tState++; break; case 1: if (!gPaletteFade.active) - task->data[0]++; + task->tState++; break; case 2: - task->data[1]++; - if (task->data[1] > 20) - task->data[0]++; + task->tTimer++; + if (task->tTimer > 20) + task->tState++; break; case 3: sub_800AC34(); - task->data[0]++; + task->tState++; break; case 4: if (!gReceivedRemoteLinkPlayers) - task->data[0]++; + task->tState++; break; case 5: if (gLinkPlayers[0].trainerId & 1) @@ -847,7 +871,7 @@ static void sub_80B32B4(u8 taskId) SetLinkBattleTypeFlags(gSpecialVar_0x8004); CleanupOverworldWindowsAndTilemaps(); - gTrainerBattleOpponent_A = 0x800; + gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; SetMainCallback2(CB2_InitBattle); gMain.savedCallback = CB2_ReturnFromCableClubBattle; DestroyTask(taskId); @@ -855,26 +879,26 @@ static void sub_80B32B4(u8 taskId) } } -static void sub_80B33BC(u8 taskId) +static void Task_StartWirelessCableClubBattle(u8 taskId) { int i; s16* data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: FadeScreen(FADE_TO_BLACK, 0); gLinkType = LINKTYPE_BATTLE; ClearLinkCallback_2(); - data[0] = 1; + tState = 1; break; case 1: if (!gPaletteFade.active) - data[0] = 2; + tState = 2; break; case 2: SendBlock(0, &gLocalLinkPlayer, sizeof(gLocalLinkPlayer)); - data[0] = 3; + tState = 3; break; case 3: if (GetBlockReceivedStatus() == sub_800A9D8()) @@ -886,22 +910,22 @@ static void sub_80B33BC(u8 taskId) sub_800B524(&gLinkPlayers[i]); ResetBlockReceivedFlag(i); } - data[0] = 4; + tState = 4; } break; case 4: - data[1]++; - if (data[1] > 20) - data[0] = 5; + tTimer++; + if (tTimer > 20) + tState = 5; break; case 5: sub_800ADF8(); - data[0] = 6; + tState = 6; break; case 6: if (IsLinkTaskFinished()) { - data[0] = 7; + tState = 7; } break; case 7: @@ -913,7 +937,7 @@ static void sub_80B33BC(u8 taskId) gLinkPlayers[0].linkType = LINKTYPE_BATTLE; SetLinkBattleTypeFlags(gSpecialVar_0x8004); CleanupOverworldWindowsAndTilemaps(); - gTrainerBattleOpponent_A = 0x800; + gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; SetMainCallback2(CB2_InitBattle); gMain.savedCallback = CB2_ReturnFromCableClubBattle; DestroyTask(taskId); @@ -921,46 +945,48 @@ static void sub_80B33BC(u8 taskId) } } -static void sub_80B3554(void) +#undef tTimer + +static void CB2_ReturnFromUnionRoomBattle(void) { u8 playerCount; int i; - bool32 r4; + bool32 linkedWithFRLG; switch (gMain.state) { - case 0: - playerCount = GetLinkPlayerCount(); - r4 = FALSE; - for (i = 0; i < playerCount; i++) + case 0: + playerCount = GetLinkPlayerCount(); + linkedWithFRLG = FALSE; + for (i = 0; i < playerCount; i++) + { + u32 version = (u8)gLinkPlayers[i].version; + if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) { - u32 version = (u8)gLinkPlayers[i].version; - if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - { - r4 = TRUE; - break; - } + linkedWithFRLG = TRUE; + break; } + } - if (r4) - { - gMain.state = 2; - } - else - { - sub_800AC34(); - gMain.state = 1; - } - break; - case 1: - if (gReceivedRemoteLinkPlayers == FALSE) - { - SetMainCallback2(CB2_ReturnToField); - } - break; - case 2: + if (linkedWithFRLG) + { + gMain.state = 2; + } + else + { + sub_800AC34(); + gMain.state = 1; + } + break; + case 1: + if (!gReceivedRemoteLinkPlayers) + { SetMainCallback2(CB2_ReturnToField); - break; + } + break; + case 2: + SetMainCallback2(CB2_ReturnToField); + break; } RunTasks(); } @@ -980,26 +1006,22 @@ void CB2_ReturnFromCableClubBattle(void) { switch (gBattleOutcome) { - case B_OUTCOME_WON: - sub_801B990(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - break; - case B_OUTCOME_LOST: - sub_801B990(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - break; + case B_OUTCOME_WON: + RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + break; + case B_OUTCOME_LOST: + RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + break; } } } if (InUnionRoom() == TRUE) - { - gMain.savedCallback = sub_80B3554; - } + gMain.savedCallback = CB2_ReturnFromUnionRoomBattle; else - { gMain.savedCallback = CB2_ReturnToFieldFromMultiplayer; - } - SetMainCallback2(sub_80A0514); + SetMainCallback2(CB2_SetUpSaveAfterLinkBattle); } void CleanupLinkRoomState(void) @@ -1020,22 +1042,23 @@ void ExitLinkRoom(void) QueueExitLinkRoomKey(); } -static void sub_80B3728(u8 taskId) +// Note: gSpecialVar_0x8005 contains the id of the seat the player entered +static void Task_EnterCableClubSeat(u8 taskId) { struct Task* task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: ShowFieldMessage(gText_PleaseWaitForLink); - task->data[0] = 1; + task->tState = 1; break; case 1: if (IsFieldMessageBoxHidden()) { sub_8087288(); SetLocalLinkPlayerId(gSpecialVar_0x8005); - task->data[0] = 2; + task->tState = 2; } break; case 2: @@ -1045,12 +1068,12 @@ static void sub_80B3728(u8 taskId) break; case 1: HideFieldMessageBox(); - task->data[0] = 0; + task->tState = 0; sub_80872C4(); SwitchTaskToFollowupFunc(taskId); break; case 2: - task->data[0] = 3; + task->tState = 3; break; } break; @@ -1063,35 +1086,35 @@ static void sub_80B3728(u8 taskId) } } -void sub_80B37D4(TaskFunc followupFunc) +void CreateTask_EnterCableClubSeat(TaskFunc followupFunc) { - u8 taskId = CreateTask(sub_80B3728, 80); - SetTaskFuncWithFollowupFunc(taskId, sub_80B3728, followupFunc); + u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); + SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followupFunc); ScriptContext1_Stop(); } -static void sub_80B37FC(u8 taskId) +static void Task_StartWiredTrade(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: ScriptContext2_Enable(); FadeScreen(FADE_TO_BLACK, 0); ClearLinkCallback_2(); - task->data[0]++; + task->tState++; break; case 1: if (!gPaletteFade.active) - task->data[0]++; + task->tState++; break; case 2: gSelectedTradeMonPositions[TRADE_PLAYER] = 0; gSelectedTradeMonPositions[TRADE_PARTNER] = 0; m4aMPlayAllStop(); sub_800AC34(); - task->data[0]++; + task->tState++; break; case 3: if (!gReceivedRemoteLinkPlayers) @@ -1103,55 +1126,51 @@ static void sub_80B37FC(u8 taskId) } } -static void sub_80B3894(u8 taskId) +static void Task_StartWirelessTrade(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: ScriptContext2_Enable(); FadeScreen(FADE_TO_BLACK, 0); ClearLinkRfuCallback(); - data[0]++; + tState++; break; case 1: if (!gPaletteFade.active) - data[0]++; + tState++; break; case 2: gSelectedTradeMonPositions[TRADE_PLAYER] = 0; gSelectedTradeMonPositions[TRADE_PARTNER] = 0; m4aMPlayAllStop(); sub_800ADF8(); - data[0]++; + tState++; break; case 3: if (IsLinkTaskFinished()) { - CreateTask_ReturnFromLinkTrade(); + CreateTask_CreateTradeMenu(); DestroyTask(taskId); } break; } } -// Note: VAR_0x8005 is set to the ID of the trade seat. void PlayerEnteredTradeSeat(void) { if (gWirelessCommType != 0) - { - sub_80B37D4(sub_80B3894); - } + CreateTask_EnterCableClubSeat(Task_StartWirelessTrade); else - { - sub_80B37D4(sub_80B37FC); - } + CreateTask_EnterCableClubSeat(Task_StartWiredTrade); } -static void sub_80B3950(void) +// Unused +static void CreateTask_StartWiredTrade(void) { - CreateTask(sub_80B37FC, 80); + CreateTask(Task_StartWiredTrade, 80); } void nullsub_37(void) @@ -1159,25 +1178,20 @@ void nullsub_37(void) } -// Note: VAR_0x8005 is set to the ID of the player spot. void ColosseumPlayerSpotTriggered(void) { gLinkType = LINKTYPE_BATTLE; - if (gWirelessCommType != 0) - { - sub_80B37D4(sub_80B33BC); - } + if (gWirelessCommType) + CreateTask_EnterCableClubSeat(Task_StartWirelessCableClubBattle); else - { - sub_80B37D4(sub_80B32B4); - } + CreateTask_EnterCableClubSeat(Task_StartWiredCableClubBattle); } -// This function is never called. -static void sub_80B39A4(void) +// Unused +static void CreateTask_EnterCableClubSeatNoFollowup(void) { - u8 taskId = CreateTask(sub_80B3728, 80); + u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); ScriptContext1_Stop(); } @@ -1199,16 +1213,18 @@ bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex) if (numStars == 0) return FALSE; - StringCopy(gStringVar2, gTrainerCardColorNames[numStars - 1]); + StringCopy(gStringVar2, sTrainerCardColorNames[numStars - 1]); return TRUE; } -void task00_08081A90(u8 taskId) +#define tTimer data[0] + +void Task_WaitForLinkPlayerConnection(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[0]++; - if (task->data[0] > 300) + task->tTimer++; + if (task->tTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); @@ -1217,6 +1233,7 @@ void task00_08081A90(u8 taskId) if (gReceivedRemoteLinkPlayers) { + // Players connected, destroy task if (gWirelessCommType == 0) { if (!sub_800AA60()) @@ -1233,6 +1250,8 @@ void task00_08081A90(u8 taskId) } } +#undef tTimer + static void sub_80B3AAC(u8 taskId) { if (!gReceivedRemoteLinkPlayers) @@ -1242,67 +1261,72 @@ static void sub_80B3AAC(u8 taskId) } } +// Unused static void sub_80B3AD0(u8 taskId) { sub_800AC34(); gTasks[taskId].func = sub_80B3AAC; } +#define tTimer data[1] + void sub_80B3AF8(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { - case 0: - if (gWirelessCommType != 0) + case 0: + if (gWirelessCommType != 0) + { + DestroyTask(taskId); + } + else + { + OpenLink(); + CreateTask(Task_WaitForLinkPlayerConnection, 1); + tState++; + } + break; + case 1: + if (++tTimer > 11) + { + tTimer = 0; + tState++; + } + break; + case 2: + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + if (IsLinkMaster()) { - DestroyTask(taskId); + if (++tTimer > 30) + { + CheckShouldAdvanceLinkState(); + tState++; + } } else { - OpenLink(); - CreateTask(task00_08081A90, 1); - data[0]++; + tState++; } - break; - case 1: - if (++data[1] > 11) - { - data[1] = 0; - data[0]++; - } - break; - case 2: - if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) - { - if (IsLinkMaster()) - { - if (++data[1] > 30) - { - CheckShouldAdvanceLinkState(); - data[0]++; - } - } - else - { - data[0]++; - } - } - break; - case 3: - if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) - { - DestroyTask(taskId); - } - break; + } + break; + case 3: + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) + { + DestroyTask(taskId); + } + break; } } +#undef tTimer + void TrySetBattleTowerLinkType(void) { if (gWirelessCommType == 0) - { gLinkType = LINKTYPE_BATTLE_TOWER; - } } + +#undef tState diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 1eaedfd64..ccb1e28eb 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -4483,12 +4483,12 @@ static void sub_802A380(void) case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - CreateTask(sub_8153688, 0); + CreateTask(Task_LinkSave, 0); gUnknown_02022CF8->state++; } break; case 3: - if (!FuncIsActiveTask(sub_8153688)) + if (!FuncIsActiveTask(Task_LinkSave)) gUnknown_02022CF8->state++; break; default: diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 754bbe445..26f7eb679 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -85,10 +85,10 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0) return var0; } -static void sub_81D4E30(void) +static void OpenEReaderLink(void) { memset(gDecompressionBuffer, 0, 0x2000); - gLinkType = LINKTYPE_0x5503; + gLinkType = LINKTYPE_EREADER; OpenLink(); SetSuppressLinkErrorMessage(TRUE); } @@ -255,7 +255,7 @@ static void sub_81D5084(u8 taskId) data->unk8 = 1; break; case 1: - sub_81D4E30(); + OpenEReaderLink(); sub_81D505C(&data->unk0); data->unk8 = 2; break; @@ -285,7 +285,7 @@ static void sub_81D5084(u8 taskId) case 5: if (sub_81D5064(&data->unk0, 90)) { - sub_81D4E30(); + OpenEReaderLink(); data->unk8 = 6; } else if (gMain.newKeys & B_BUTTON) @@ -319,7 +319,7 @@ static void sub_81D5084(u8 taskId) else if (sub_81D5064(&data->unk0, 10)) { CloseLink(); - sub_81D4E30(); + OpenEReaderLink(); sub_81D505C(&data->unk0); } break; @@ -360,7 +360,7 @@ static void sub_81D5084(u8 taskId) data->unk8 = 12; break; case 12: - sub_81D4E30(); + OpenEReaderLink(); AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); data->unk8 = 13; break; diff --git a/src/field_message_box.c b/src/field_message_box.c index be76b0c19..da5042221 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -148,7 +148,7 @@ void sub_8098358(void) sFieldMessageBoxMode = 0; } -void sub_8098374(void) +void StopFieldMessage(void) { task_del_textbox(); sFieldMessageBoxMode = 0; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index ea9429ce8..a4d6dd6c9 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -162,7 +162,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId) switch (task->data[0]) { case 0: - task->data[1] = sub_80B3050(); + task->data[1] = CreateTask_ReestablishCableClubLink(); task->data[0]++; break; case 1: diff --git a/src/link.c b/src/link.c index abd9715dd..6647cda8c 100644 --- a/src/link.c +++ b/src/link.c @@ -282,7 +282,7 @@ void LinkTestScreen(void) ResetTasks(); SetVBlankCallback(sub_80096BC); ResetBlockSend(); - gLinkType = LINKTYPE_0x1111; + gLinkType = LINKTYPE_TRADE; OpenLink(); SeedRng(gMain.vblankCounter2); for (i = 0; i < MAX_LINK_PLAYERS; i++) @@ -826,23 +826,23 @@ void OpenLinkTimed(void) OpenLink(); } -u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) +u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers) { int i; int count; u32 index; - u8 cmpVal; + u8 numPlayers; u32 linkType1; u32 linkType2; count = 0; if (gReceivedRemoteLinkPlayers == TRUE) { - cmpVal = GetLinkPlayerCount_2(); - if (lower > cmpVal || cmpVal > upper) + numPlayers = GetLinkPlayerCount_2(); + if (minPlayers > numPlayers || numPlayers > maxPlayers) { - sPlayerDataExchangeStatus = EXCHANGE_STAT_6; - return 6; + sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS; + return sPlayerDataExchangeStatus; } else { @@ -860,19 +860,19 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) } if (count == GetLinkPlayerCount()) { - if (gLinkPlayers[0].linkType == 0x1133) + if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP) { switch (GetGameProgressForLinkTrade()) { - case TRADE_PLAYER_NOT_READY: - sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY; - break; - case TRADE_PARTNER_NOT_READY: - sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY; - break; - case TRADE_BOTH_PLAYERS_READY: - sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; - break; + case TRADE_PLAYER_NOT_READY: + sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY; + break; + case TRADE_PARTNER_NOT_READY: + sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY; + break; + case TRADE_BOTH_PLAYERS_READY: + sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; + break; } } else @@ -882,11 +882,14 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) } else { - sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; + sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS; linkType1 = gLinkPlayers[GetMultiplayerId()].linkType; linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType; - if ((linkType1 == 0x2266 && linkType2 == 0x2277) || (linkType1 == 0x2277 && linkType2 == 0x2266)) + if ((linkType1 == LINKTYPE_BATTLE_TOWER_50 && linkType2 == LINKTYPE_BATTLE_TOWER_OPEN) + || (linkType1 == LINKTYPE_BATTLE_TOWER_OPEN && linkType2 == LINKTYPE_BATTLE_TOWER_50)) { + // 3 below indicates partner made different level mode selection + // See BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections gSpecialVar_0x8005 = 3; } } @@ -921,7 +924,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void) else { retval = FALSE; - sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; + sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS; } return retval; } diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index e13e0d4e1..0d69f9281 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -2408,7 +2408,7 @@ void sub_8011AFC(void) SetVBlankCallback(sub_8011AE8); if (IsWirelessAdapterConnected()) { - gLinkType = LINKTYPE_0x1111; + gLinkType = LINKTYPE_TRADE; SetWirelessCommType1(); OpenLink(); SeedRng(gMain.vblankCounter2); diff --git a/src/mevent2.c b/src/mevent2.c index 3e524ce35..7a2edc7f5 100755 --- a/src/mevent2.c +++ b/src/mevent2.c @@ -569,7 +569,7 @@ bool32 MEventHandleReceivedWonderCard(u16 a0) return TRUE; } -void sub_801B990(u32 a0, u32 a1) +void RecordIdOfWonderCardSenderByEventType(u32 a0, u32 a1) { if (gUnknown_02022C70) { diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 14c00fd96..04902dee8 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void) if (!IsTextPrinterActive(0)) { gMain.state++; - gLinkType = LINKTYPE_0x5501; + gLinkType = LINKTYPE_MYSTERY_EVENT; OpenLink(); } break; @@ -206,7 +206,7 @@ static void CB2_MysteryEventMenu(void) { if (gReceivedRemoteLinkPlayers != 0) { - if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3) + if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS) { sub_800AC34(); GetEventLoadMessage(gStringVar4, 1); diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index da8695247..acfd4d545 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1148,12 +1148,12 @@ static bool32 sub_802B720(void) case 2: if (sub_802C70C()) { - CreateTask(sub_8153688, 6); + CreateTask(Task_LinkSave, 6); gUnknown_02022CFC->unk8++; } break; case 3: - if (!FuncIsActiveTask(sub_8153688)) + if (!FuncIsActiveTask(Task_LinkSave)) { sub_802DA14(); gUnknown_02022CFC->unk8++; diff --git a/src/record_mixing.c b/src/record_mixing.c index 3a93d72f8..274a82e10 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -169,10 +169,9 @@ static const u8 gUnknown_0858CFBE[3][4] = #define BUFFER_CHUNK_SIZE 200 -// Note: VAR_0x8005 contains the spotId. void RecordMixingPlayerSpotTriggered(void) { - sub_80B37D4(Task_RecordMixing_Main); + CreateTask_EnterCableClubSeat(Task_RecordMixing_Main); } // these variables were const in R/S, but had to become changeable because of saveblocks changing RAM position @@ -351,7 +350,7 @@ static void Task_RecordMixing_Main(u8 taskId) { tState = 4; if (gWirelessCommType == 0) - data[10] = sub_80B3050(); + data[10] = CreateTask_ReestablishCableClubLink(); PrintTextOnRecordMixing(gText_RecordMixingComplete); data[8] = 0; @@ -987,12 +986,12 @@ static void Task_DoRecordMixing(u8 taskId) case 6: if (!sub_801048C(FALSE)) { - CreateTask(sub_8153688, 5); + CreateTask(Task_LinkSave, 5); task->data[0] ++; } break; - case 7: // wait for sub_8153688 to finish. - if (!FuncIsActiveTask(sub_8153688)) + case 7: // wait for Task_LinkSave to finish. + if (!FuncIsActiveTask(Task_LinkSave)) { if (gWirelessCommType) { diff --git a/src/save.c b/src/save.c index c19aff4d8..09e1b7aae 100644 --- a/src/save.c +++ b/src/save.c @@ -897,74 +897,78 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src) return SAVE_STATUS_OK; } -void sub_8153688(u8 taskId) -{ - s16* taskData = gTasks[taskId].data; +#define tState data[0] +#define tTimer data[1] +#define tPartialSave data[2] - switch (taskData[0]) +void Task_LinkSave(u8 taskId) +{ + s16* data = gTasks[taskId].data; + + switch (tState) { case 0: gSoftResetDisabled = TRUE; - taskData[0] = 1; + tState = 1; break; case 1: sub_800ADF8(); - taskData[0] = 2; + tState = 2; break; case 2: if (IsLinkTaskFinished()) { - if (taskData[2] == 0) + if (!tPartialSave) save_serialize_map(); - taskData[0] = 3; + tState = 3; } break; case 3: - if (taskData[2] == 0) + if (!tPartialSave) SetContinueGameWarpStatusToDynamicWarp(); sub_8153380(); - taskData[0] = 4; + tState = 4; break; case 4: - if (++taskData[1] == 5) + if (++tTimer == 5) { - taskData[1] = 0; - taskData[0] = 5; + tTimer = 0; + tState = 5; } break; case 5: if (sub_81533AC()) - taskData[0] = 6; + tState = 6; else - taskData[0] = 4; + tState = 4; break; case 6: sub_81533E0(); - taskData[0] = 7; + tState = 7; break; case 7: - if (taskData[2] == 0) + if (!tPartialSave) ClearContinueGameWarpStatus2(); sub_800ADF8(); - taskData[0] = 8; + tState = 8; break; case 8: if (IsLinkTaskFinished()) { sub_8153408(); - taskData[0] = 9; + tState = 9; } break; case 9: sub_800ADF8(); - taskData[0] = 10; + tState = 10; break; case 10: if (IsLinkTaskFinished()) - taskData[0]++; + tState++; break; case 11: - if (++taskData[1] > 5) + if (++tTimer > 5) { gSoftResetDisabled = FALSE; DestroyTask(taskId); @@ -972,3 +976,7 @@ void sub_8153688(u8 taskId) break; } } + +#undef tState +#undef tTimer +#undef tPartialSave diff --git a/src/start_menu.c b/src/start_menu.c index 4b6fce57b..781774f62 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -133,8 +133,8 @@ static u8 BattlePyramidRetireInputCallback(void); // Task callbacks static void StartMenuTask(u8 taskId); static void SaveGameTask(u8 taskId); -static void sub_80A0550(u8 taskId); -static void sub_80A08A4(u8 taskId); +static void Task_SaveAfterLinkBattle(u8 taskId); +static void Task_WaitForBattleTowerLinkSave(u8 taskId); static bool8 FieldCB_ReturnToFieldStartMenu(void); static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; @@ -219,8 +219,8 @@ static bool8 SaveSuccesTimer(void); static bool8 SaveErrorTimer(void); static void InitBattlePyramidRetire(void); static void sub_80A03D8(void); -static bool32 sub_80A03E4(u8 *par1); -static void sub_80A0540(void); +static bool32 InitSaveWindowAfterLinkBattle(u8 *par1); +static void CB2_SaveAfterLinkBattle(void); static void ShowSaveInfoWindow(void); static void RemoveSaveInfoWindow(void); static void HideStartMenuWindow(void); @@ -1159,9 +1159,9 @@ static void sub_80A03D8(void) TransferPlttBuffer(); } -static bool32 sub_80A03E4(u8 *par1) +static bool32 InitSaveWindowAfterLinkBattle(u8 *state) { - switch (*par1) + switch (*state) { case 0: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); @@ -1193,43 +1193,43 @@ static bool32 sub_80A03E4(u8 *par1) return TRUE; } - (*par1)++; + (*state)++; return FALSE; } -void sub_80A0514(void) +void CB2_SetUpSaveAfterLinkBattle(void) { - if (sub_80A03E4(&gMain.state)) + if (InitSaveWindowAfterLinkBattle(&gMain.state)) { - CreateTask(sub_80A0550, 0x50); - SetMainCallback2(sub_80A0540); + CreateTask(Task_SaveAfterLinkBattle, 0x50); + SetMainCallback2(CB2_SaveAfterLinkBattle); } } -static void sub_80A0540(void) +static void CB2_SaveAfterLinkBattle(void) { RunTasks(); UpdatePaletteFade(); } -static void sub_80A0550(u8 taskId) +static void Task_SaveAfterLinkBattle(u8 taskId) { - s16 *step = gTasks[taskId].data; + s16 *state = gTasks[taskId].data; if (!gPaletteFade.active) { - switch (*step) + switch (*state) { case 0: FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, - 255, + TEXT_SPEED_FF, NULL, - 2, - 1, - 3); + TEXT_COLOR_DARK_GREY, + TEXT_COLOR_WHITE, + TEXT_COLOR_LIGHT_GREY); DrawTextBorderOuter(0, 8, 14); PutWindowTilemap(0); CopyWindowToVram(0, 3); @@ -1239,35 +1239,35 @@ static void sub_80A0550(u8 taskId) { if (sub_800A07C()) { - *step = 1; + *state = 1; } else { - *step = 5; + *state = 5; } } else { gSoftResetDisabled = 1; - *step = 1; + *state = 1; } break; case 1: SetContinueGameWarpStatusToDynamicWarp(); FullSaveGame(); - *step = 2; + *state = 2; break; case 2: if (CheckSaveFile()) { ClearContinueGameWarpStatus2(); - *step = 3; + *state = 3; gSoftResetDisabled = 0; } break; case 3: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - *step = 4; + *state = 4; break; case 4: FreeAllWindowBuffers(); @@ -1275,13 +1275,13 @@ static void sub_80A0550(u8 taskId) DestroyTask(taskId); break; case 5: - CreateTask(sub_8153688, 0x5); - *step = 6; + CreateTask(Task_LinkSave, 5); + *state = 6; break; case 6: - if (!FuncIsActiveTask(sub_8153688)) + if (!FuncIsActiveTask(Task_LinkSave)) { - *step = 3; + *state = 3; } break; } @@ -1357,22 +1357,26 @@ static void RemoveSaveInfoWindow(void) RemoveWindow(sSaveInfoWindowId); } -static void sub_80A08A4(u8 taskId) +static void Task_WaitForBattleTowerLinkSave(u8 taskId) { - if (!FuncIsActiveTask(sub_8153688)) + if (!FuncIsActiveTask(Task_LinkSave)) { DestroyTask(taskId); EnableBothScriptContexts(); } } -void sub_80A08CC(void) +#define tPartialSave data[2] + +void SaveForBattleTowerLink(void) { - u8 taskId = CreateTask(sub_8153688, 0x5); - gTasks[taskId].data[2] = 1; - gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId; + u8 taskId = CreateTask(Task_LinkSave, 5); + gTasks[taskId].tPartialSave = TRUE; + gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId; } +#undef tPartialSave + static void HideStartMenuWindow(void) { ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE); diff --git a/src/strings.c b/src/strings.c index 3ba01b0f0..f01ab8ec6 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1492,7 +1492,7 @@ const u8 gText_FrameTypeNumber[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}"); const u8 gText_ButtonTypeNormal[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}NORMAL"); const u8 gText_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR"); const u8 gText_ButtonTypeLEqualsA[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}L=A"); -const u8 gText_XPLink[] = _("{STR_VAR_1}P LINK"); +const u8 gText_NumPlayerLink[] = _("{STR_VAR_1}P LINK"); const u8 gText_BronzeCard[] = _("BRONZE"); const u8 gText_CopperCard[] = _("COPPER"); const u8 gText_SilverCard[] = _("SILVER"); diff --git a/src/trade.c b/src/trade.c index c9fd7b1ed..624f6eae9 100644 --- a/src/trade.c +++ b/src/trade.c @@ -389,7 +389,7 @@ static void CB2_CreateTradeMenu(void) if (!gReceivedRemoteLinkPlayers) { - gLinkType = LINKTYPE_0x1122; + gLinkType = LINKTYPE_TRADE_CONNECTING; sTradeMenuData->timer = 0; if (gWirelessCommType) @@ -402,7 +402,7 @@ static void CB2_CreateTradeMenu(void) { OpenLink(); gMain.state++; - CreateTask(task00_08081A90, 1); + CreateTask(Task_WaitForLinkPlayerConnection, 1); } } else @@ -2750,7 +2750,7 @@ void CB2_LinkTrade(void) case 0: if (!gReceivedRemoteLinkPlayers) { - gLinkType = LINKTYPE_0x1144; + gLinkType = LINKTYPE_TRADE_DISCONNECTED; CloseLink(); } sTradeData = AllocZeroed(sizeof(*sTradeData)); @@ -4597,7 +4597,7 @@ static void CB2_SaveAndEndTrade(void) IncrementGameStat(GAME_STAT_POKEMON_TRADES); if (gWirelessCommType) { - sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); } SetContinueGameWarpStatusToDynamicWarp(); sub_8153380(); diff --git a/src/union_room.c b/src/union_room.c index a13f57c79..8f49add80 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1298,15 +1298,15 @@ static u8 GetNewLeaderCandidate(void) return ret; } -static void Task_ReturnFromLinkTrade(u8 taskId) +static void Task_CreateTradeMenu(u8 taskId) { CB2_StartCreateTradeMenu(); DestroyTask(taskId); } -u8 CreateTask_ReturnFromLinkTrade(void) +u8 CreateTask_CreateTradeMenu(void) { - u8 taskId = CreateTask(Task_ReturnFromLinkTrade, 0); + u8 taskId = CreateTask(Task_CreateTradeMenu, 0); return taskId; } @@ -1589,7 +1589,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) switch (data[0]) { case 0: - gSpecialVar_Result = 1; + gSpecialVar_Result = LINKUP_SUCCESS; switch (gPlayerCurrActivity) { case ACTIVITY_BATTLE_TOWER: @@ -1655,9 +1655,9 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) if (GetBlockReceivedStatus() == 3) { ResetBlockReceivedFlags(); - if (sub_80B2AF4(gBlockRecvBuffer[0], gBlockRecvBuffer[1])) + if (AreBattleTowerLinkSpeciesSame(gBlockRecvBuffer[0], gBlockRecvBuffer[1])) { - gSpecialVar_Result = 11; + gSpecialVar_Result = LINKUP_FAILED_BATTLE_TOWER; data[0] = 7; } else