From 2d9327a1ff21ac142c17e270755c658491eee5aa Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 27 Feb 2020 14:21:13 -0500 Subject: Document Four Island scripts, trainer_card.inc --- src/field_specials.c | 2 +- src/trainer_card.c | 55 +++++++++++++++++++++++----------------------------- 2 files changed, 25 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/field_specials.c b/src/field_specials.c index 6554f6116..8904178c0 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1695,7 +1695,7 @@ void Special_UpdateTrainerCardPhotoIcons(void) VarSet(VAR_TRAINER_CARD_MON_ICON_TINT_IDX, gSpecialVar_0x8004); } -u16 Special_StickerLadyGetBragFlags(void) +u16 StickerManGetBragFlags(void) { u16 result = 0; u32 numEggs; diff --git a/src/trainer_card.c b/src/trainer_card.c index d60738ee6..3157b6cdb 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -32,13 +32,6 @@ #define BADGE_COUNT 8 -// Trainer Card Types -enum -{ - CARD_TYPE_FRLG, - CARD_TYPE_EMERALD, -}; - // Trainer Card Strings enum { @@ -620,13 +613,13 @@ static bool8 LoadCardGfx(void) switch (sTrainerCardDataPtr->gfxLoadState) { case 0: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LZ77UnCompWram(sUnknown_83CCE30, &sTrainerCardDataPtr->var_E1C); else LZ77UnCompWram(sUnknown_83CCEC8, &sTrainerCardDataPtr->var_E1C); break; case 1: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LZ77UnCompWram(sUnknown_83CC8A8, &sTrainerCardDataPtr->var_96C); else LZ77UnCompWram(sUnknown_83CC984, &sTrainerCardDataPtr->var_96C); @@ -634,14 +627,14 @@ static bool8 LoadCardGfx(void) case 2: if (!sTrainerCardDataPtr->isLink) { - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LZ77UnCompWram(sUnknown_83CC4DC, &sTrainerCardDataPtr->var_4BC); else LZ77UnCompWram(sUnknown_83CC6F0, &sTrainerCardDataPtr->var_4BC); } else { - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LZ77UnCompWram(sUnknown_83CCAB0, &sTrainerCardDataPtr->var_4BC); else LZ77UnCompWram(sUnknown_83CCCA4, &sTrainerCardDataPtr->var_4BC); @@ -651,7 +644,7 @@ static bool8 LoadCardGfx(void) LZ77UnCompWram(sFireRedTrainerCardBadges_Tile, &sTrainerCardDataPtr->cardTiles); break; case 4: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LZ77UnCompWram(gEmeraldTrainerCard_Gfx, &sTrainerCardDataPtr->var_18CC); else LZ77UnCompWram(gFireRedTrainerCard_Gfx, &sTrainerCardDataPtr->var_18CC); @@ -810,7 +803,7 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) { trainerCard->stars = GetTrainerStarCount(trainerCard); } - else if (cardType == CARD_TYPE_EMERALD) + else if (cardType == CARD_TYPE_RSE) { trainerCard->stars = 0; if (trainerCard->hofDebutHours != 0 || (trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)) @@ -829,7 +822,7 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) u8 id = 0; trainerCard->version = GAME_VERSION; - SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); + SetPlayerCardData(trainerCard, CARD_TYPE_RSE); if (GetCardType() != CARD_TYPE_FRLG) return; @@ -1118,7 +1111,7 @@ static void PrintMoneyOnCard(void) txtPtr = StringCopy(buffer, gText_TrainerCardYen); ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { x = -122 - 6 * StringLength(buffer); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 56, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); @@ -1148,7 +1141,7 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.caughtMonsCount, 0, 3); - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { x = -120 - 6 * StringLength(buffer); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); @@ -1186,7 +1179,7 @@ static void PrintTimeOnCard(void) minutes = 59; FillWindowPixelRect(1, PIXEL_FILL(0), sTrainerCardTimeHoursXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], 50, 12); - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 88, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardTime); else AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 89, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardTime); @@ -1223,7 +1216,7 @@ static void PrintNameOnCard2(void) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.playerName); ConvertInternationalString(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->language); - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) { StringAppend(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], gText_Var1sTrainerCard); } @@ -1321,7 +1314,7 @@ static void PrintTradesStringOnCard(void) static void PrintBerryCrushNumOnCard(void) { - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH], gText_BerryCrushes); ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH_COUNT], sTrainerCardDataPtr->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5); @@ -1330,7 +1323,7 @@ static void PrintBerryCrushNumOnCard(void) static void PrintBerryCrushStringOnCard(void) { - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.berryCrushPoints) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.berryCrushPoints) { AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 99, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH]); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 99, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH_COUNT]); @@ -1339,7 +1332,7 @@ static void PrintBerryCrushStringOnCard(void) static void PrintUnionNumOnCard(void) { - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM], gText_UnionRoomTradesBattles); ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM_NUM], sTrainerCardDataPtr->trainerCard.unionRoomNum, STR_CONV_MODE_RIGHT_ALIGN, 5); @@ -1348,7 +1341,7 @@ static void PrintUnionNumOnCard(void) static void PrintUnionStringOnCard(void) { - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.unionRoomNum) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.unionRoomNum) { AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 83, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM]); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 83, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM_NUM]); @@ -1363,7 +1356,7 @@ static void TrainerCard_PrintPokemonIconsOnCard(void) memcpy(buffer, sUnknown_83CD94C, sizeof(sUnknown_83CD94C)); memcpy(buffer2, sUnknown_83CD952, sizeof(sUnknown_83CD952)); - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { for (i = 0; i < 6; i++) { @@ -1446,19 +1439,19 @@ static bool8 SetTrainerCardBgsAndPals(void) LoadBgTiles(0, sTrainerCardDataPtr->var_18CC, 6144, 0); break; case 2: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); else LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); break; case 3: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) LoadPalette(sEmeraldTrainerCardBadges_Pal, 48, 32); else LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32); break; case 4: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.gender != MALE) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.gender != MALE) LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32); else if (sTrainerCardDataPtr->trainerCard.gender != MALE) LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32); @@ -1546,7 +1539,7 @@ static void TrainerCard_PrintStarsAndBadgesOnCard(void) static void sub_808B090(void) { - if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) + if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { if (sTrainerCardDataPtr->hasTrades) { @@ -1848,8 +1841,8 @@ static void sub_808B774(void) sTrainerCardDataPtr->var_7 = 0; sTrainerCardDataPtr->var_8 = 0; sTrainerCardDataPtr->var_456 = 0; - if (GetCardType() == CARD_TYPE_EMERALD) - sTrainerCardDataPtr->cardType = CARD_TYPE_EMERALD; + if (GetCardType() == CARD_TYPE_RSE) + sTrainerCardDataPtr->cardType = CARD_TYPE_RSE; else sTrainerCardDataPtr->cardType = CARD_TYPE_FRLG; @@ -1866,14 +1859,14 @@ static u8 GetCardType(void) if (gGameVersion == VERSION_FIRE_RED || gGameVersion == VERSION_LEAF_GREEN) return CARD_TYPE_FRLG; else - return CARD_TYPE_EMERALD; + return CARD_TYPE_RSE; } else { if (sTrainerCardDataPtr->trainerCard.version == VERSION_FIRE_RED || sTrainerCardDataPtr->trainerCard.version == VERSION_LEAF_GREEN) return CARD_TYPE_FRLG; else - return CARD_TYPE_EMERALD; + return CARD_TYPE_RSE; } } -- cgit v1.2.3 From 968ac4742adbc86148e344c7c0cb9b9f27addc6c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 27 Feb 2020 17:15:27 -0500 Subject: Sync trainer_card.c --- src/battle_controller_link_opponent.c | 8 +- src/data/pokemon/trainer_class_lookups.h | 16 +- src/graphics.c | 8 +- src/trainer_card.c | 861 ++++++++++++++++--------------- src/trainer_pokemon_sprites.c | 2 +- src/union_room.c | 5 +- 6 files changed, 474 insertions(+), 426 deletions(-) (limited to 'src') diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 3d8729824..a80e79bf4 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1127,11 +1127,11 @@ static void LinkOpponentHandleDrawTrainerPic(void) } else if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE) { - trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_4]; + trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_LEAF]; } else { - trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_3]; + trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_RED]; } } else @@ -1152,11 +1152,11 @@ static void LinkOpponentHandleDrawTrainerPic(void) } else if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != MALE) { - trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_4]; + trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_LEAF]; } else { - trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_3]; + trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_RED]; } } DecompressTrainerFrontPic(trainerPicId, gActiveBattler); diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index faf23bf31..2309f85a1 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -133,10 +133,10 @@ const u8 gFacilityClassToPicIndex[] = [FACILITY_CLASS_CRUSH_KIN] = 130, [FACILITY_CLASS_SIS_AND_BRO_2] = 131, [FACILITY_CLASS_PKMN_PROF] = 132, - [FACILITY_CLASS_PLAYER] = 133, - [FACILITY_CLASS_PLAYER_2] = 134, - [FACILITY_CLASS_PLAYER_3] = 135, - [FACILITY_CLASS_PLAYER_4] = 136, + [FACILITY_CLASS_BRENDAN] = TRAINER_PIC_RS_BRENDAN_2, + [FACILITY_CLASS_MAY] = TRAINER_PIC_RS_MAY_2, + [FACILITY_CLASS_RED] = TRAINER_PIC_RED, + [FACILITY_CLASS_LEAF] = TRAINER_PIC_LEAF, [FACILITY_CLASS_TEAM_ROCKET_2] = 137, [FACILITY_CLASS_PSYCHIC_4] = 138, [FACILITY_CLASS_CRUSH_GIRL] = 139, @@ -287,10 +287,10 @@ const u8 gFacilityClassToTrainerClass[] = [FACILITY_CLASS_CRUSH_KIN] = CLASS_CRUSH_KIN, [FACILITY_CLASS_SIS_AND_BRO_2] = CLASS_SIS_AND_BRO_2, [FACILITY_CLASS_PKMN_PROF] = CLASS_PKMN_PROF, - [FACILITY_CLASS_PLAYER] = CLASS_PLAYER, - [FACILITY_CLASS_PLAYER_2] = CLASS_PLAYER, - [FACILITY_CLASS_PLAYER_3] = CLASS_PLAYER, - [FACILITY_CLASS_PLAYER_4] = CLASS_PLAYER, + [FACILITY_CLASS_BRENDAN] = CLASS_PLAYER, + [FACILITY_CLASS_MAY] = CLASS_PLAYER, + [FACILITY_CLASS_RED] = CLASS_PLAYER, + [FACILITY_CLASS_LEAF] = CLASS_PLAYER, [FACILITY_CLASS_TEAM_ROCKET_2] = CLASS_TEAM_ROCKET, [FACILITY_CLASS_PSYCHIC_4] = CLASS_PSYCHIC_2, [FACILITY_CLASS_CRUSH_GIRL] = CLASS_CRUSH_GIRL, diff --git a/src/graphics.c b/src/graphics.c index 47d699fdd..eaa49247c 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1210,10 +1210,10 @@ const u32 gUnknown_8E990F8[] = INCBIN_U32("graphics/interface/naming_screen_8E99 const u8 gUnknown_8E99118[] = INCBIN_U8("graphics/tm_case/unk_8E99118.4bpp"); -const u16 gFireRedTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal"); -const u32 gFireRedTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz"); -const u16 gEmeraldTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal"); -const u32 gEmeraldTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz"); +const u16 gKantoTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal"); +const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz"); +const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal"); +const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz"); const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); const u32 gUnknown_8E99DAC[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); diff --git a/src/trainer_card.c b/src/trainer_card.c index 3157b6cdb..4e8d7da16 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -29,8 +29,7 @@ #include "constants/game_stat.h" #include "constants/vars.h" #include "constants/species.h" - -#define BADGE_COUNT 8 +#include "constants/facility_trainer_classes.h" // Trainer Card Strings enum @@ -52,46 +51,43 @@ enum struct TrainerCardData { - /*0x0000*/ u8 taskState; - /*0x0001*/ u8 printState; - /*0x0002*/ u8 gfxLoadState; - /*0x0003*/ u8 bgPalLoadState; - /*0x0004*/ u8 var_4; - /*0x0005*/ bool8 isLink; - /*0x0006*/ u8 var_6; - /*0x0007*/ u8 var_7; - /*0x0008*/ u8 var_8; - /*0x0009*/ bool8 allowDMACopy; - /*0x000A*/ bool8 hasPokedex; - /*0x000B*/ bool8 hasHofResult; - /*0x000C*/ bool8 hasLinkResults; - /*0x000D*/ bool8 hasBattleTowerWins; - /*0x000E*/ u8 var_E; - /*0x000F*/ u8 var_F; - /*0x0010*/ bool8 hasTrades; - /*0x0011*/ bool8 hasBadge[BADGE_COUNT]; - /*0x0019*/ u8 var_19[4][13]; - /*0x004D*/ u8 strings[TRAINER_CARD_STRING_COUNT][70]; - /*0x0395*/ u8 var_395; - /*0x0396*/ u16 monIconPals[0x30]; - /*0x03F6*/ u8 var_3DB[0x60]; - /*0x0456*/ s8 var_456; - /*0x0457*/ u8 cardType; - /*0x0458*/ void (*callback2)(void); - /*0x045C*/ struct TrainerCard trainerCard; - /*0x04BC*/ u16 var_4BC; - /*0x04BE*/ u8 var_4BE[0x4AE]; - /*0x096C*/ u16 var_96C[0x258]; - /*0x0E1C*/ u16 var_E1C; - /*0x0E1E*/ u8 unk_E1E[0x4AE]; - /*0x12CC*/ u16 cardTiles[0x200]; - /*0x16CC*/ u16 bgTiles[0x100]; - /*0x18CC*/ u16 var_18CC[0x1180]; - /*0x3BCC*/ u16 bgTilemap0[0x1000]; - /*0x5BCC*/ u16 bgTilemap2[0x1000]; - /*0x7BCC*/ u16 var_7BCC; - /*0x7BCE*/ bool8 var_7BCE; - /*0x7BCF*/ u8 language; + u8 mainState; + u8 printState; + u8 gfxLoadState; + u8 bgPalLoadState; + u8 flipDrawState; + bool8 isLink; + u8 timeColonBlinkTimer; + bool8 timeColonInvisible; + bool8 onBack; + bool8 allowDMACopy; + bool8 hasPokedex; + bool8 hasHofResult; + bool8 hasLinkResults; + bool8 hasBattleTowerWins; + bool8 var_E; + bool8 var_F; + bool8 hasTrades; + bool8 hasBadge[NUM_BADGES]; + u8 easyChatProfile[TRAINER_CARD_PROFILE_LENGTH][13]; + u8 strings[TRAINER_CARD_STRING_COUNT][70]; + u8 var_395; + u16 monIconPals[16 * PARTY_SIZE]; + s8 flipBlendY; + u8 cardType; + void (*callback2)(void); + struct TrainerCard trainerCard; + u16 frontTilemap[600]; + u16 backTilemap[600]; + u16 bgTilemap[600]; + u8 badgeTiles[0x80 * NUM_BADGES]; + u16 stickerTiles[0x100]; + u16 cardTiles[0x1180]; + u16 cardTilemapBuffer[0x1000]; + u16 bgTilemapBuffer[0x1000]; + u16 var_7BCC; + bool8 timeColonNeedDraw; + u8 language; }; /* size = 0x7BD0 */ // RAM @@ -117,84 +113,84 @@ static void TrainerCardNull(void); static void sub_8089C5C(void); static void sub_8089C80(void); static void sub_8089CA4(void); -static void ResetTrainerCard(void); +static void InitBgsAndWindows(void); static void SetTrainerCardCB2(void); -static void sub_8089DA4(void); -static bool8 PrintAllOnCardPage1(void); -static bool8 PrintStringsOnCardPage2(void); -static void sub_8089ECC(void); -static void PrintNameOnCard(void); +static void SetUpTrainerCardTask(void); +static bool8 PrintAllOnCardFront(void); +static bool8 PrintAllOnCardBack(void); +static void BufferTextForCardBack(void); +static void PrintNameOnCardFront(void); static void PrintIdOnCard(void); static void PrintMoneyOnCard(void); static u16 GetCaughtMonsCount(void); static void PrintPokedexOnCard(void); static void PrintTimeOnCard(void); static void PrintProfilePhraseOnCard(void); -static void PrintNameOnCard2(void); -static void sub_808A4FC(void); -static void PrintHofTimeOnCard(void); -static void PrintHofDebutStringOnCard(void); -static void PrintLinkResultsNumsOnCard(void); -static void PrintWinsLossesStringOnCard(void); -static void PrintTradesNumOnCard(void); +static void BufferNameForCardBack(void); +static void PrintNameOnCardBack(void); +static void BufferHofDebutTime(void); +static void PrintHofDebutTimeOnCard(void); +static void BufferLinkBattleResults(void); +static void PrintLinkBattleResultsOnCard(void); +static void BufferNumTrades(void); static void PrintTradesStringOnCard(void); -static void PrintBerryCrushNumOnCard(void); +static void BufferBerryCrushPoints(void); static void PrintBerryCrushStringOnCard(void); -static void PrintUnionNumOnCard(void); +static void BufferUnionRoomStats(void); static void PrintUnionStringOnCard(void); -static void TrainerCard_PrintPokemonIconsOnCard(void); -static void sub_808AB10(void); -static void sub_808ABE0(void); -static void TrainerCardLoadStickerPals(void); -static void PutTrainerCardWindow(u8 windowId); +static void PrintPokemonIconsOnCard(void); +static void LoadMonIconGfx(void); +static void PrintStickersOnCard(void); +static void LoadStickerGfx(void); +static void DrawTrainerCardWindow(u8 windowId); static bool8 SetTrainerCardBgsAndPals(void); -static void LoadTrainerCardTilemap2(const u16* ptr); -static void LoadTrainerCardTilemap0(const u16* ptr); -static void TrainerCard_PrintStarsAndBadgesOnCard(void); -static void sub_808B090(void); -static void sub_808B180(void); -static void sub_808B1D4(void); -static bool8 sub_808B1FC(void); -static void sub_808B21C(u8 taskId); -static bool8 sub_808B254(struct Task* task); -static bool8 sub_808B294(struct Task* task); -static bool8 sub_808B3C4(struct Task* task); -static bool8 sub_808B4D8(struct Task* task); -static bool8 sub_808B540(struct Task* task); -static bool8 sub_808B66C(struct Task *task); -static void sub_808B774(void); +static void DrawCardScreenBackground(const u16* ptr); +static void DrawCardFrontOrBack(const u16* ptr); +static void DrawStarsAndBadgesOnCard(void); +static void DrawCardBackStats(void); +static void BlinkTimeColon(void); +static void FlipTrainerCard(void); +static bool8 IsCardFlipTaskActive(void); +static void Task_DoCardFlipTask(u8 taskId); +static bool8 Task_BeginCardFlip(struct Task* task); +static bool8 Task_AnimateCardFlipDown(struct Task* task); +static bool8 Task_DrawFlippedCardSide(struct Task* task); +static bool8 Task_SetCardFlipped(struct Task* task); +static bool8 Task_AnimateCardFlipUp(struct Task* task); +static bool8 Task_EndCardFlip(struct Task *task); +static void InitTrainerCardData(void); static u8 GetCardType(void); -static void sub_808B838(void); +static void CreateTrainerCardTrainerPic(void); // Data -static const u32 sTrainerCardStickers[] = INCBIN_U32("graphics/trainer_card/stickers.4bpp.lz"); -static const u32 sUnknown_83CC4DC[] = INCBIN_U32("graphics/trainer_card/unk_83CC4DC.bin"); -static const u32 sUnknown_83CC6F0[] = INCBIN_U32("graphics/trainer_card/unk_83CC6F0.bin"); -static const u32 sUnknown_83CC8A8[] = INCBIN_U32("graphics/trainer_card/unk_83CC8A8.bin"); -static const u32 sUnknown_83CC984[] = INCBIN_U32("graphics/trainer_card/unk_83CC984.bin"); -static const u32 sUnknown_83CCAB0[] = INCBIN_U32("graphics/trainer_card/unk_83CCAB0.bin"); -static const u32 sUnknown_83CCCA4[] = INCBIN_U32("graphics/trainer_card/unk_83CCCA4.bin"); -static const u32 sUnknown_83CCE30[] = INCBIN_U32("graphics/trainer_card/unk_83CCE30.bin"); -static const u32 sUnknown_83CCEC8[] = INCBIN_U32("graphics/trainer_card/unk_83CCEC8.bin"); -static const u16 sEmeraldTrainerCard1Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_1stars_pals.gbapal"); -static const u16 sFireRedTrainerCard1Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_1stars_pals.gbapal"); -static const u16 sEmeraldTrainerCard2Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_2stars_pals.gbapal"); -static const u16 sFireRedTrainerCard2Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_2stars_pals.gbapal"); -static const u16 sEmeraldTrainerCard3Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_3stars_pals.gbapal"); -static const u16 sFireRedTrainerCard3Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_3stars_pals.gbapal"); -static const u16 sEmeraldTrainerCard4Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_4stars_pals.gbapal"); -static const u16 sFireRedTrainerCard4Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_4stars_pals.gbapal"); -static const u16 sEmeraldTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/em_female_bg.gbapal"); -static const u16 sFireRedTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/fr_female_bg.gbapal"); -static const u16 sEmeraldTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/em_badges.gbapal"); -static const u16 sFireRedTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/fr_badges.gbapal"); -static const u16 sUnknown_83CD300[] = INCBIN_U16("graphics/trainer_card/unk_83CD300.gbapal"); +static const u32 sTrainerCardStickers_Gfx[] = INCBIN_U32("graphics/trainer_card/stickers.4bpp.lz"); +static const u32 sHoennTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_hoenn.bin"); +static const u32 sKantoTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/front.bin"); +static const u32 sHoennTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/back_hoenn.bin"); +static const u32 sKantoTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/back.bin"); +static const u32 sHoennTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_hoenn_link.bin"); +static const u32 sKantoTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_link.bin"); +static const u32 sHoennTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/bg_hoenn.bin"); +static const u32 sKantoTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/bg.bin"); +static const u16 sHoennTrainerCard1Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_1stars_pals.gbapal"); +static const u16 sKantoTrainerCard1Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_1stars_pals.gbapal"); +static const u16 sHoennTrainerCard2Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_2stars_pals.gbapal"); +static const u16 sKantoTrainerCard2Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_2stars_pals.gbapal"); +static const u16 sHoennTrainerCard3Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_3stars_pals.gbapal"); +static const u16 sKantoTrainerCard3Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_3stars_pals.gbapal"); +static const u16 sHoennTrainerCard4Stars_Pals[] = INCBIN_U16("graphics/trainer_card/em_4stars_pals.gbapal"); +static const u16 sKantoTrainerCard4Stars_Pals[] = INCBIN_U16("graphics/trainer_card/fr_4stars_pals.gbapal"); +static const u16 sHoennTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/em_female_bg.gbapal"); +static const u16 sKantoTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/fr_female_bg.gbapal"); +static const u16 sHoennTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/em_badges.gbapal"); +static const u16 sKantoTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/fr_badges.gbapal"); +static const u16 sTrainerCardGold_Pal[] = INCBIN_U16("graphics/trainer_card/gold.gbapal"); static const u16 sTrainerCardStickerPal1[] = INCBIN_U16("graphics/trainer_card/sticker1.gbapal"); static const u16 sTrainerCardStickerPal2[] = INCBIN_U16("graphics/trainer_card/sticker2.gbapal"); static const u16 sTrainerCardStickerPal3[] = INCBIN_U16("graphics/trainer_card/sticker3.gbapal"); static const u16 sTrainerCardStickerPal4[] = INCBIN_U16("graphics/trainer_card/sticker4.gbapal"); -static const u32 sEmeraldTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/em_badges.4bpp.lz"); -static const u32 sFireRedTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz"); +static const u32 sHoennTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/em_badges.4bpp.lz"); +static const u32 sKantoTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz"); static const struct BgTemplate sTrainerCardBgTemplates[4] = { @@ -268,76 +264,112 @@ static const struct WindowTemplate sTrainerCardWindowTemplates[4] = DUMMY_WIN_TEMPLATE }; -static const u16 *const sEmeraldTrainerCardStarPals[] = +static const u16 *const sHoennTrainerCardStarPals[] = { - gEmeraldTrainerCard_Pal, - sEmeraldTrainerCard1Stars_Pals, - sEmeraldTrainerCard2Stars_Pals, - sEmeraldTrainerCard3Stars_Pals, - sEmeraldTrainerCard4Stars_Pals + gHoennTrainerCard_Pal, + sHoennTrainerCard1Stars_Pals, + sHoennTrainerCard2Stars_Pals, + sHoennTrainerCard3Stars_Pals, + sHoennTrainerCard4Stars_Pals }; -static const u16 *const sFireRedTrainerCardStarPals[] = +static const u16 *const sKantoTrainerCardStarPals[] = { - gFireRedTrainerCard_Pal, - sFireRedTrainerCard1Stars_Pals, - sFireRedTrainerCard2Stars_Pals, - sFireRedTrainerCard3Stars_Pals, - sFireRedTrainerCard4Stars_Pals + gKantoTrainerCard_Pal, + sKantoTrainerCard1Stars_Pals, + sKantoTrainerCard2Stars_Pals, + sKantoTrainerCard3Stars_Pals, + sKantoTrainerCard4Stars_Pals }; -static const u8 sFireRedTrainerCardPage1TextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; -static const u8 sTrainerCardPage2TextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; -static const u8 sEmeraldTrainerCardPage1TextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT}; +static const u8 sTrainerCardTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; +static const u8 sTrainerCardStatColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; +static const u8 sTimeColonInvisibleTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT}; static const u8 sTrainerCardFontIds[] = {0, 2, 0}; -static const u8 sTrainerCardPicPositions[][2][2] = +static const u8 sTrainerPicOffsets[2][GENDER_COUNT][2] = { - {{13, 4}, {13, 4}}, - {{1, 0}, {1, 0}} + // Kanto + { + [MALE] = {13, 4}, + [FEMALE] = {13, 4} + }, + // Hoenn + { + [MALE] = {1, 0}, + [FEMALE] = {1, 0} + } }; -static const u8 sLinkTrainerCardFrontPics[][2] = +static const u8 sTrainerPicFacilityClasses[][2] = { - {TRAINER_PIC_RS_MAY_2, TRAINER_PIC_RED}, - {TRAINER_PIC_PROFESSOR_OAK, TRAINER_PIC_RS_BRENDAN_2}, + [CARD_TYPE_FRLG] = + { + [MALE] = FACILITY_CLASS_RED, + [FEMALE] = FACILITY_CLASS_LEAF + }, + [CARD_TYPE_RSE] = + { + [MALE] = FACILITY_CLASS_BRENDAN, + [FEMALE] = FACILITY_CLASS_MAY + }, }; -static const u8 sLinkTrainerCardFacilityClasses[][8] = +static const u8 sLinkTrainerPicFacilityClasses[GENDER_COUNT][NUM_LINK_TRAINER_CARD_CLASSES] = { - {0x74, 0x6F, 0x5C, 0x58, 0x6A, 0x59, 0x6D, 0x6C}, - {0x75, 0x7D, 0x5D, 0x5A, 0x16, 0x30, 0x41, 0x68} + [MALE] = + { + FACILITY_CLASS_COOLTRAINER_3, + FACILITY_CLASS_BLACK_BELT_2, + FACILITY_CLASS_CAMPER_2, + FACILITY_CLASS_YOUNGSTER_2, + FACILITY_CLASS_PSYCHIC_3, + FACILITY_CLASS_BUG_CATCHER_2, + FACILITY_CLASS_TAMER, + FACILITY_CLASS_JUGGLER + }, + [FEMALE] = + { + FACILITY_CLASS_COOLTRAINER_4, + FACILITY_CLASS_CHANNELER, + FACILITY_CLASS_PICNICKER_2, + FACILITY_CLASS_LASS_2, + FACILITY_CLASS_PSYCHIC_2, + FACILITY_CLASS_BATTLE_GIRL, + FACILITY_CLASS_PKMN_BREEDER_2, + FACILITY_CLASS_BEAUTY_2 + } }; -static bool8 (*const sTrainerCardTasks[])(struct Task *) = +static bool8 (*const sTrainerCardFlipTasks[])(struct Task *) = { - sub_808B254, - sub_808B294, - sub_808B3C4, - sub_808B4D8, - sub_808B540, - sub_808B66C + Task_BeginCardFlip, + Task_AnimateCardFlipDown, + Task_DrawFlippedCardSide, + Task_SetCardFlipped, + Task_AnimateCardFlipUp, + Task_EndCardFlip }; -static const u8 sTrainerCardPlayerNameXPositions[] = {0x14, 0x10}; -static const u8 sTrainerCardPlayerNameYPositions[] = {0x1D, 0x21}; +static const u8 sTrainerCardFrontNameXPositions[] = {0x14, 0x10}; +static const u8 sTrainerCardFrontNameYPositions[] = {0x1D, 0x21}; static const u8 sTrainerCardIdXPositions[] = {0x8E, 0x80}; static const u8 sTrainerCardIdYPositions[] = {0xA, 0x9}; -static const u8 *const sTrainerCardTextColors[] = {sFireRedTrainerCardPage1TextColors, sEmeraldTrainerCardPage1TextColors}; +static const u8 *const sTimeColonTextColors[] = {sTrainerCardTextColors, sTimeColonInvisibleTextColors}; static const u8 sTrainerCardTimeHoursXPositions[] = {0x65, 0x55}; static const u8 sTrainerCardTimeHoursYPositions[] = {0x77, 0x67}; static const u8 sTrainerCardTimeMinutesXPositions[] = {0x7C, 0x6C}; static const u8 sTrainerCardTimeMinutesYPositions[] = {0x58, 0x59}; static const u8 sTrainerCardProfilePhraseXPositions[] = {0x73, 0x69}; static const u8 sTrainerCardProfilePhraseYPositions[] = {0x82, 0x78}; -static const u8 sUnknown_83CD93C[] = {0x8A, 0xD8}; -static const u8 sUnknown_83CD93E[] = {0xB, 0xA}; +static const u8 sTrainerCardBackNameXPositions[] = {0x8A, 0xD8}; +static const u8 sTrainerCardBackNameYPositions[] = {0xB, 0xA}; static const u8 sTrainerCardHofDebutXPositions[] = {0xA, 0x10, 0x0, 0x0}; static const u8 *const sLinkTrainerCardRecordStrings[] = {gText_LinkBattles, gText_LinkCableBattles}; -static const u8 sUnknown_83CD94C[] = {5, 6, 7, 8, 9, 10}; -static const u8 sUnknown_83CD952[] = {0, 4, 8, 12, 16, 20}; -static const u8 sUnknown_83CD958[] = {11, 12, 13, 14}; -static const u8 sUnknown_83CD95C[] = {7, 6, 0, 0}; +static const u8 sPokemonIconPalSlots[] = {5, 6, 7, 8, 9, 10}; +static const u8 sPokemonIconXOffsets[] = {0, 4, 8, 12, 16, 20}; +static const u8 sStickerPalSlots[] = {11, 12, 13, 14}; +static const u8 sStarYOffsets[] = {7, 6, 0, 0}; static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 = { @@ -361,19 +393,19 @@ static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 = .pokeblocksWithFriends = 44444, .pokemonTrades = 33333, .money = 999999, - .var_28 = {0, 0, 0, 0}, + .easyChatProfile = {0, 0, 0, 0}, .playerName = _("あかみ どりお"), .version = VERSION_FIRE_RED, - .var_3A = 0, + .hasAllFrontierSymbols = FALSE, .berryCrushPoints = 5555, .unionRoomNum = 8500, .berriesPicked = 5456, .jumpsInRow = 6300, - .var_4C = TRUE, + .shouldDrawStickers = TRUE, .hasAllMons = TRUE, - .var_4E = 2, - .var_4F = 0, - .var_50 = {1, 2, 3, 0}, + .monIconTint = MON_ICON_TINT_PINK, + .facilityClass = 0, + .stickers = {1, 2, 3}, .monSpecies = {SPECIES_CHARIZARD, SPECIES_DIGLETT, SPECIES_NIDORINA, SPECIES_FEAROW, SPECIES_PARAS, SPECIES_SLOWBRO} }; @@ -399,19 +431,19 @@ static const struct TrainerCard sLinkPlayerTrainerCardTemplate2 = .pokeblocksWithFriends = 44444, .pokemonTrades = 33333, .money = 999999, - .var_28 = {0, 0, 0, 0}, + .easyChatProfile = {0, 0, 0, 0}, .playerName = _("るびさふぁこ!"), .version = 0, - .var_3A = 0, + .hasAllFrontierSymbols = FALSE, .berryCrushPoints = 555, .unionRoomNum = 500, .berriesPicked = 456, .jumpsInRow = 300, - .var_4C = TRUE, + .shouldDrawStickers = TRUE, .hasAllMons = TRUE, - .var_4E = 2, - .var_4F = 0, - .var_50 = {1, 2, 3, 0}, + .monIconTint = MON_ICON_TINT_PINK, + .facilityClass = 0, + .stickers = {1, 2, 3}, .monSpecies = {SPECIES_CHARIZARD, SPECIES_DIGLETT, SPECIES_NIDORINA, SPECIES_FEAROW, SPECIES_PARAS, SPECIES_SLOWBRO} }; @@ -421,7 +453,7 @@ static void VBlankCB_TrainerCard(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_808B180(); + BlinkTimeColon(); if (sTrainerCardDataPtr->allowDMACopy) DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140); } @@ -454,43 +486,54 @@ static void CloseTrainerCard(u8 taskId) DestroyTask(taskId); } +// States for Task_TrainerCard. Skips the initial states, which are done once in order +#define STATE_HANDLE_INPUT_FRONT 10 +#define STATE_HANDLE_INPUT_BACK 11 +#define STATE_WAIT_FLIP_TO_BACK 12 +#define STATE_WAIT_FLIP_TO_FRONT 13 +#define STATE_CLOSE_CARD 14 +#define STATE_WAIT_LINK_PARTNER 15 +#define STATE_CLOSE_CARD_LINK 16 + static void Task_TrainerCard(u8 taskId) { - switch (sTrainerCardDataPtr->taskState) + switch (sTrainerCardDataPtr->mainState) { + // Draw card initially case 0: if (!IsDma3ManagerBusyWithBgCopy()) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); - sTrainerCardDataPtr->taskState++; + sTrainerCardDataPtr->mainState++; } break; case 1: - if (PrintAllOnCardPage1()) - sTrainerCardDataPtr->taskState++; + if (PrintAllOnCardFront()) + sTrainerCardDataPtr->mainState++; break; case 2: - PutTrainerCardWindow(1); - sTrainerCardDataPtr->taskState++; + DrawTrainerCardWindow(1); + sTrainerCardDataPtr->mainState++; break; case 3: FillWindowPixelBuffer(2, PIXEL_FILL(0)); - sub_808B838(); - PutTrainerCardWindow(2); - sTrainerCardDataPtr->taskState++; + CreateTrainerCardTrainerPic(); + DrawTrainerCardWindow(2); + sTrainerCardDataPtr->mainState++; break; case 4: - LoadTrainerCardTilemap2(&sTrainerCardDataPtr->var_E1C); - sTrainerCardDataPtr->taskState++; + DrawCardScreenBackground(sTrainerCardDataPtr->bgTilemap); + sTrainerCardDataPtr->mainState++; break; case 5: - LoadTrainerCardTilemap0(&sTrainerCardDataPtr->var_4BC); - sTrainerCardDataPtr->taskState++; + DrawCardFrontOrBack(sTrainerCardDataPtr->frontTilemap); + sTrainerCardDataPtr->mainState++; break; case 6: - TrainerCard_PrintStarsAndBadgesOnCard(); - sTrainerCardDataPtr->taskState++; + DrawStarsAndBadgesOnCard(); + sTrainerCardDataPtr->mainState++; break; + // Fade in case 7: if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) { @@ -499,71 +542,72 @@ static void Task_TrainerCard(u8 taskId) } BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(VBlankCB_TrainerCard); - sTrainerCardDataPtr->taskState++; + sTrainerCardDataPtr->mainState++; break; case 8: if (!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy()) { PlaySE(SE_CARD3); - sTrainerCardDataPtr->taskState = 10; + sTrainerCardDataPtr->mainState = STATE_HANDLE_INPUT_FRONT; } break; case 9: if (!IsSEPlaying()) - sTrainerCardDataPtr->taskState++; + sTrainerCardDataPtr->mainState++; break; - case 10: - if (!gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->var_7BCE) + case STATE_HANDLE_INPUT_FRONT: + // Blink the : in play time + if (!gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->timeColonNeedDraw) { PrintTimeOnCard(); - PutTrainerCardWindow(1); - sTrainerCardDataPtr->var_7BCE = FALSE; + DrawTrainerCardWindow(1); + sTrainerCardDataPtr->timeColonNeedDraw = FALSE; } if (JOY_NEW(A_BUTTON)) { HelpSystem_SetSomeVariable2(11); - sub_808B1D4(); + FlipTrainerCard(); PlaySE(SE_CARD1); - sTrainerCardDataPtr->taskState = 12; + sTrainerCardDataPtr->mainState = STATE_WAIT_FLIP_TO_BACK; } else if (JOY_NEW(B_BUTTON)) { if (gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->isLink && InUnionRoom() == TRUE) { - sTrainerCardDataPtr->taskState = 15; + sTrainerCardDataPtr->mainState = STATE_WAIT_LINK_PARTNER; } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTrainerCardDataPtr->taskState = 14; + sTrainerCardDataPtr->mainState = STATE_CLOSE_CARD; } } break; - case 12: - if (sub_808B1FC() && sub_8058244() != TRUE) + case STATE_WAIT_FLIP_TO_BACK: + if (IsCardFlipTaskActive() && sub_8058244() != TRUE) { PlaySE(SE_CARD3); - sTrainerCardDataPtr->taskState = 11; + sTrainerCardDataPtr->mainState = STATE_HANDLE_INPUT_BACK; } break; - case 11: + case STATE_HANDLE_INPUT_BACK: if (JOY_NEW(B_BUTTON)) { if (gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->isLink && InUnionRoom() == TRUE) { - sTrainerCardDataPtr->taskState = 15; + sTrainerCardDataPtr->mainState = STATE_WAIT_LINK_PARTNER; } else if (gReceivedRemoteLinkPlayers) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTrainerCardDataPtr->taskState = 14; + sTrainerCardDataPtr->mainState = STATE_CLOSE_CARD; } else { HelpSystem_SetSomeVariable2(10); - sub_808B1D4(); - sTrainerCardDataPtr->taskState = 13; + FlipTrainerCard(); + sTrainerCardDataPtr->mainState = STATE_WAIT_FLIP_TO_FRONT; PlaySE(SE_CARD1); } } @@ -571,37 +615,37 @@ static void Task_TrainerCard(u8 taskId) { if (gReceivedRemoteLinkPlayers && sTrainerCardDataPtr->isLink && InUnionRoom() == TRUE) { - sTrainerCardDataPtr->taskState = 15; + sTrainerCardDataPtr->mainState = STATE_WAIT_LINK_PARTNER; } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTrainerCardDataPtr->taskState = 14; + sTrainerCardDataPtr->mainState = STATE_CLOSE_CARD; } } break; - case 15: + case STATE_WAIT_LINK_PARTNER: Link_TryStartSend5FFF(); DrawDialogueFrame(0, 1); AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0); CopyWindowToVram(0, 3); - sTrainerCardDataPtr->taskState = 16; + sTrainerCardDataPtr->mainState = STATE_CLOSE_CARD_LINK; break; - case 16: + case STATE_CLOSE_CARD_LINK: if (!gReceivedRemoteLinkPlayers) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTrainerCardDataPtr->taskState = 14; + sTrainerCardDataPtr->mainState = STATE_CLOSE_CARD; } break; - case 14: + case STATE_CLOSE_CARD: if (!UpdatePaletteFade()) CloseTrainerCard(taskId); break; - case 13: - if (sub_808B1FC() && sub_8058244() != TRUE) + case STATE_WAIT_FLIP_TO_FRONT: + if (IsCardFlipTaskActive() && sub_8058244() != TRUE) { - sTrainerCardDataPtr->taskState = 10; + sTrainerCardDataPtr->mainState = STATE_HANDLE_INPUT_FRONT; PlaySE(SE_CARD3); } break; @@ -614,44 +658,45 @@ static bool8 LoadCardGfx(void) { case 0: if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LZ77UnCompWram(sUnknown_83CCE30, &sTrainerCardDataPtr->var_E1C); + LZ77UnCompWram(sHoennTrainerCardBg_Tilemap, sTrainerCardDataPtr->bgTilemap); else - LZ77UnCompWram(sUnknown_83CCEC8, &sTrainerCardDataPtr->var_E1C); + LZ77UnCompWram(sKantoTrainerCardBg_Tilemap, sTrainerCardDataPtr->bgTilemap); break; case 1: if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LZ77UnCompWram(sUnknown_83CC8A8, &sTrainerCardDataPtr->var_96C); + LZ77UnCompWram(sHoennTrainerCardBack_Tilemap, sTrainerCardDataPtr->backTilemap); else - LZ77UnCompWram(sUnknown_83CC984, &sTrainerCardDataPtr->var_96C); + LZ77UnCompWram(sKantoTrainerCardBack_Tilemap, sTrainerCardDataPtr->backTilemap); break; case 2: if (!sTrainerCardDataPtr->isLink) { if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LZ77UnCompWram(sUnknown_83CC4DC, &sTrainerCardDataPtr->var_4BC); + LZ77UnCompWram(sHoennTrainerCardFront_Tilemap, sTrainerCardDataPtr->frontTilemap); else - LZ77UnCompWram(sUnknown_83CC6F0, &sTrainerCardDataPtr->var_4BC); + LZ77UnCompWram(sKantoTrainerCardFront_Tilemap, sTrainerCardDataPtr->frontTilemap); } else { if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LZ77UnCompWram(sUnknown_83CCAB0, &sTrainerCardDataPtr->var_4BC); + LZ77UnCompWram(sHoennTrainerCardFrontLink_Tilemap, sTrainerCardDataPtr->frontTilemap); else - LZ77UnCompWram(sUnknown_83CCCA4, &sTrainerCardDataPtr->var_4BC); + LZ77UnCompWram(sKantoTrainerCardFrontLink_Tilemap, sTrainerCardDataPtr->frontTilemap); } break; case 3: - LZ77UnCompWram(sFireRedTrainerCardBadges_Tile, &sTrainerCardDataPtr->cardTiles); + // ? Doesnt check for RSE, sHoennTrainerCardBadges_Gfx goes unused + LZ77UnCompWram(sKantoTrainerCardBadges_Gfx, sTrainerCardDataPtr->badgeTiles); break; case 4: if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LZ77UnCompWram(gEmeraldTrainerCard_Gfx, &sTrainerCardDataPtr->var_18CC); + LZ77UnCompWram(gHoennTrainerCard_Gfx, &sTrainerCardDataPtr->cardTiles); else - LZ77UnCompWram(gFireRedTrainerCard_Gfx, &sTrainerCardDataPtr->var_18CC); + LZ77UnCompWram(gKantoTrainerCard_Gfx, &sTrainerCardDataPtr->cardTiles); break; case 5: if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG) - LZ77UnCompWram(sTrainerCardStickers, &sTrainerCardDataPtr->bgTiles); + LZ77UnCompWram(sTrainerCardStickers_Gfx, sTrainerCardDataPtr->stickerTiles); break; default: sTrainerCardDataPtr->gfxLoadState = 0; @@ -667,7 +712,7 @@ static void CB2_InitTrainerCard(void) { case 0: ResetGpuRegs(); - sub_8089DA4(); + SetUpTrainerCardTask(); gMain.state++; break; case 1: @@ -687,7 +732,7 @@ static void CB2_InitTrainerCard(void) gMain.state++; break; case 5: - ResetTrainerCard(); + InitBgsAndWindows(); gMain.state++; break; case 6: @@ -695,7 +740,7 @@ static void CB2_InitTrainerCard(void) gMain.state++; break; case 7: - sub_808AB10(); + LoadMonIconGfx(); gMain.state++; break; case 8: @@ -703,7 +748,7 @@ static void CB2_InitTrainerCard(void) gMain.state++; break; case 9: - TrainerCardLoadStickerPals(); + LoadStickerGfx(); gMain.state++; break; case 10: @@ -711,7 +756,7 @@ static void CB2_InitTrainerCard(void) gMain.state++; break; case 11: - sub_8089ECC(); + BufferTextForCardBack(); gMain.state++; break; case 12: @@ -794,8 +839,8 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) trainerCard->money = GetMoney(&gSaveBlock1Ptr->money); - for (i = 0; i < 4; i++) - trainerCard->var_28[i] = gSaveBlock1Ptr->easyChatProfile[i]; + for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++) + trainerCard->easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i]; StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName); @@ -837,7 +882,7 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) trainerCard->berryCrushPoints = GetCappedGameStat(GAME_STAT_BERRY_CRUSH_POINTS, 0xFFFF); trainerCard->unionRoomNum = GetCappedGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES, 0xFFFF); - trainerCard->var_4C = TRUE; + trainerCard->shouldDrawStickers = TRUE; if (trainerCard->caughtAllHoenn) trainerCard->stars++; @@ -848,17 +893,17 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) if (trainerCard->berriesPicked >= 200 && trainerCard->jumpsInRow >= 200) trainerCard->stars++; - id = ((u16)trainerCard->trainerId) % 8; + id = ((u16)trainerCard->trainerId) % NUM_LINK_TRAINER_CARD_CLASSES; if (trainerCard->gender == FEMALE) - trainerCard->var_4F = sLinkTrainerCardFacilityClasses[1][id]; + trainerCard->facilityClass = sLinkTrainerPicFacilityClasses[FEMALE][id]; else - trainerCard->var_4F = sLinkTrainerCardFacilityClasses[0][id]; + trainerCard->facilityClass = sLinkTrainerPicFacilityClasses[MALE][id]; - trainerCard->var_50[0] = VarGet(VAR_HOF_BRAG_STATE); - trainerCard->var_50[1] = VarGet(VAR_EGG_BRAG_STATE); - trainerCard->var_50[2] = VarGet(VAR_LINK_WIN_BRAG_STATE); + trainerCard->stickers[0] = VarGet(VAR_HOF_BRAG_STATE); + trainerCard->stickers[1] = VarGet(VAR_EGG_BRAG_STATE); + trainerCard->stickers[2] = VarGet(VAR_LINK_WIN_BRAG_STATE); - trainerCard->var_4E = VarGet(VAR_TRAINER_CARD_MON_ICON_TINT_IDX); + trainerCard->monIconTint = VarGet(VAR_TRAINER_CARD_MON_ICON_TINT_IDX); trainerCard->monSpecies[0] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_1)); trainerCard->monSpecies[1] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_2)); @@ -881,7 +926,7 @@ static void SetDataFromTrainerCard(void) sTrainerCardDataPtr->var_F = FALSE; sTrainerCardDataPtr->hasTrades = FALSE; - memset(&sTrainerCardDataPtr->hasBadge, FALSE, BADGE_COUNT); + memset(sTrainerCardDataPtr->hasBadge, FALSE, sizeof(sTrainerCardDataPtr->hasBadge)); if (sTrainerCardDataPtr->trainerCard.hasPokedex) sTrainerCardDataPtr->hasPokedex++; @@ -922,6 +967,7 @@ static void HandleGpuRegs(void) EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); } +// Part of animating card flip static void sub_8089BD8(u16 arg0) { s8 quotient = (arg0 + 40) / 10; @@ -929,8 +975,8 @@ static void sub_8089BD8(u16 arg0) if (quotient <= 4) quotient = 0; - sTrainerCardDataPtr->var_456 = quotient; - SetGpuReg(REG_OFFSET_BLDY, sTrainerCardDataPtr->var_456); + sTrainerCardDataPtr->flipBlendY = quotient; + SetGpuReg(REG_OFFSET_BLDY, sTrainerCardDataPtr->flipBlendY); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(sTrainerCardDataPtr->var_7BCC, 160 - sTrainerCardDataPtr->var_7BCC)); } @@ -971,7 +1017,7 @@ static void sub_8089CA4(void) SetGpuReg(REG_OFFSET_BG3VOFS, DISPCNT_MODE_0); } -static void ResetTrainerCard(void) +static void InitBgsAndWindows(void) { ResetSpriteData(); ResetPaletteFade(); @@ -995,21 +1041,21 @@ static void SetTrainerCardCB2(void) HelpSystem_SetSomeVariable2(10); } -static void sub_8089DA4(void) +static void SetUpTrainerCardTask(void) { ResetTasks(); ScanlineEffect_Stop(); CreateTask(Task_TrainerCard, 0); - sub_808B774(); + InitTrainerCardData(); SetDataFromTrainerCard(); } -static bool8 PrintAllOnCardPage1(void) +static bool8 PrintAllOnCardFront(void) { switch (sTrainerCardDataPtr->printState) { case 0: - PrintNameOnCard(); + PrintNameOnCardFront(); break; case 1: PrintIdOnCard(); @@ -1034,18 +1080,18 @@ static bool8 PrintAllOnCardPage1(void) return FALSE; } -static bool8 PrintStringsOnCardPage2(void) +static bool8 PrintAllOnCardBack(void) { switch (sTrainerCardDataPtr->printState) { case 0: - sub_808A4FC(); + PrintNameOnCardBack(); break; case 1: - PrintHofDebutStringOnCard(); + PrintHofDebutTimeOnCard(); break; case 2: - PrintWinsLossesStringOnCard(); + PrintLinkBattleResultsOnCard(); break; case 3: PrintTradesStringOnCard(); @@ -1057,10 +1103,10 @@ static bool8 PrintStringsOnCardPage2(void) PrintUnionStringOnCard(); break; case 6: - TrainerCard_PrintPokemonIconsOnCard(); + PrintPokemonIconsOnCard(); break; case 7: - sub_808ABE0(); + PrintStickersOnCard(); break; default: sTrainerCardDataPtr->printState = 0; @@ -1070,17 +1116,17 @@ static bool8 PrintStringsOnCardPage2(void) return FALSE; } -static void sub_8089ECC(void) +static void BufferTextForCardBack(void) { - PrintNameOnCard2(); - PrintHofTimeOnCard(); - PrintLinkResultsNumsOnCard(); - PrintTradesNumOnCard(); - PrintBerryCrushNumOnCard(); - PrintUnionNumOnCard(); + BufferNameForCardBack(); + BufferHofDebutTime(); + BufferLinkBattleResults(); + BufferNumTrades(); + BufferBerryCrushPoints(); + BufferUnionRoomStats(); } -static void PrintNameOnCard(void) +static void PrintNameOnCardFront(void) { u8 buffer[2][32]; u8* txtPtr; @@ -1090,7 +1136,7 @@ static void PrintNameOnCard(void) StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.playerName); ConvertInternationalString(txtPtr, sTrainerCardDataPtr->language); StringAppend(buffer[0], txtPtr); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardPlayerNameXPositions[sTrainerCardDataPtr->cardType], sTrainerCardPlayerNameYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer[0]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardFrontNameXPositions[sTrainerCardDataPtr->cardType], sTrainerCardFrontNameYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, buffer[0]); } static void PrintIdOnCard(void) @@ -1100,7 +1146,7 @@ static void PrintIdOnCard(void) txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardIdXPositions[sTrainerCardDataPtr->cardType], sTrainerCardIdYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardIdXPositions[sTrainerCardDataPtr->cardType], sTrainerCardIdYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, buffer); } static void PrintMoneyOnCard(void) @@ -1114,14 +1160,14 @@ static void PrintMoneyOnCard(void) if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { x = -122 - 6 * StringLength(buffer); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 56, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 56, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 56, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 56, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); } else { x = 118 - 6 * StringLength(buffer); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 57, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 57, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 57, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 57, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); } } @@ -1144,16 +1190,16 @@ static void PrintPokedexOnCard(void) if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { x = -120 - 6 * StringLength(buffer); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 138, 72, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardNull); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 72, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 72, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 138, 72, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardNull); } else { x = 120 - 6 * StringLength(buffer); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 73, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 73, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 138, 73, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardNull); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 73, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, 73, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 138, 73, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardNull); } } } @@ -1180,18 +1226,18 @@ static void PrintTimeOnCard(void) FillWindowPixelRect(1, PIXEL_FILL(0), sTrainerCardTimeHoursXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], 50, 12); if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 88, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardTime); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 20, 88, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime); else - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 89, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_TrainerCardTime); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 16, 89, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime); ConvertIntToDecimalStringN(buffer, hours, STR_CONV_MODE_RIGHT_ALIGN, 3); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeHoursXPositions[sTrainerCardDataPtr->cardType], - sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); + sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, buffer); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeHoursYPositions[sTrainerCardDataPtr->cardType], - sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors[sTrainerCardDataPtr->var_7], TEXT_SPEED_FF, gText_Colon2); + sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sTimeColonTextColors[sTrainerCardDataPtr->timeColonInvisible], TEXT_SPEED_FF, gText_Colon2); ConvertIntToDecimalStringN(buffer, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeMinutesXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardTimeMinutesXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTimeMinutesYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, buffer); } static void PrintProfilePhraseOnCard(void) @@ -1199,20 +1245,20 @@ static void PrintProfilePhraseOnCard(void) if (sTrainerCardDataPtr->isLink) { AddTextPrinterParameterized3(1, 2, 10, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], - sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[0]); + sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->easyChatProfile[0]); - AddTextPrinterParameterized3(1, 2, GetStringWidth(2, sTrainerCardDataPtr->var_19[0], 0) + 16, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], - sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[1]); + AddTextPrinterParameterized3(1, 2, GetStringWidth(2, sTrainerCardDataPtr->easyChatProfile[0], 0) + 16, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], + sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->easyChatProfile[1]); AddTextPrinterParameterized3(1, 2, 10, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], - sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[2]); + sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->easyChatProfile[2]); - AddTextPrinterParameterized3(1, 2, GetStringWidth(2, sTrainerCardDataPtr->var_19[2], 0) + 16, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], - sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->var_19[3]); + AddTextPrinterParameterized3(1, 2, GetStringWidth(2, sTrainerCardDataPtr->easyChatProfile[2], 0) + 16, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], + sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->easyChatProfile[3]); } } -static void PrintNameOnCard2(void) +static void BufferNameForCardBack(void) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.playerName); ConvertInternationalString(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->language); @@ -1222,25 +1268,25 @@ static void PrintNameOnCard2(void) } } -static void sub_808A4FC(void) +static void PrintNameOnCardBack(void) { u8 x; if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG) { - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sUnknown_83CD93C[sTrainerCardDataPtr->cardType], - sUnknown_83CD93E[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardBackNameXPositions[sTrainerCardDataPtr->cardType], + sTrainerCardBackNameYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME]); } else { - x = sUnknown_83CD93C[sTrainerCardDataPtr->cardType] - GetStringWidth(sTrainerCardFontIds[1], sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], GetFontAttribute(sTrainerCardFontIds[1], FONTATTR_LETTER_SPACING)); + x = sTrainerCardBackNameXPositions[sTrainerCardDataPtr->cardType] - GetStringWidth(sTrainerCardFontIds[1], sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], GetFontAttribute(sTrainerCardFontIds[1], FONTATTR_LETTER_SPACING)); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, sUnknown_83CD93E[sTrainerCardDataPtr->cardType], - sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], x, sTrainerCardBackNameYPositions[sTrainerCardDataPtr->cardType], + sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME]); } } -static void PrintHofTimeOnCard(void) +static void BufferHofDebutTime(void) { u8 buffer[10]; u8* txtPtr; @@ -1258,16 +1304,16 @@ static void PrintHofTimeOnCard(void) } } -static void PrintHofDebutStringOnCard(void) +static void PrintHofDebutTimeOnCard(void) { if (sTrainerCardDataPtr->hasHofResult) { - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 35, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, gText_HallOfFameDebut); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 164, 35, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 35, sTrainerCardTextColors, TEXT_SPEED_FF, gText_HallOfFameDebut); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 164, 35, sTrainerCardStatColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME]); } } -static void PrintLinkResultsNumsOnCard(void) +static void BufferLinkBattleResults(void) { u8 buffer[30]; @@ -1282,19 +1328,19 @@ static void PrintLinkResultsNumsOnCard(void) } } -static void PrintWinsLossesStringOnCard(void) +static void PrintLinkBattleResultsOnCard(void) { if (sTrainerCardDataPtr->hasLinkResults) { AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 51, - sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD]); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 130, 51, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS]); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 144, 51, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS]); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 192, 51, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES]); + sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 130, 51, sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 144, 51, sTrainerCardStatColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 192, 51, sTrainerCardStatColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES]); } } -static void PrintTradesNumOnCard(void) +static void BufferNumTrades(void) { if (sTrainerCardDataPtr->hasTrades) { @@ -1307,12 +1353,12 @@ static void PrintTradesStringOnCard(void) { if (sTrainerCardDataPtr->hasTrades) { - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 67, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES]); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 67, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 67, sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 67, sTrainerCardStatColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT]); } } -static void PrintBerryCrushNumOnCard(void) +static void BufferBerryCrushPoints(void) { if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { @@ -1325,12 +1371,12 @@ static void PrintBerryCrushStringOnCard(void) { if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.berryCrushPoints) { - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 99, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH]); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 99, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH_COUNT]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 99, sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 99, sTrainerCardStatColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_BERRY_CRUSH_COUNT]); } } -static void PrintUnionNumOnCard(void) +static void BufferUnionRoomStats(void) { if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { @@ -1343,86 +1389,86 @@ static void PrintUnionStringOnCard(void) { if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.unionRoomNum) { - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 83, sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM]); - AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 83, sTrainerCardPage2TextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM_NUM]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardHofDebutXPositions[sTrainerCardDataPtr->cardType], 83, sTrainerCardTextColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM]); + AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], 186, 83, sTrainerCardStatColors, TEXT_SPEED_FF, sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_UNION_ROOM_NUM]); } } -static void TrainerCard_PrintPokemonIconsOnCard(void) +static void PrintPokemonIconsOnCard(void) { u8 i; - u8 buffer[6]; - u8 buffer2[6]; + u8 paletteSlots[PARTY_SIZE]; + u8 xOffsets[PARTY_SIZE]; - memcpy(buffer, sUnknown_83CD94C, sizeof(sUnknown_83CD94C)); - memcpy(buffer2, sUnknown_83CD952, sizeof(sUnknown_83CD952)); + memcpy(paletteSlots, sPokemonIconPalSlots, sizeof(sPokemonIconPalSlots)); + memcpy(xOffsets, sPokemonIconXOffsets, sizeof(sPokemonIconXOffsets)); if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { if (sTrainerCardDataPtr->trainerCard.monSpecies[i]) { u8 monSpecies = GetMonIconPaletteIndexFromSpecies(sTrainerCardDataPtr->trainerCard.monSpecies[i]); - WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1); + WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, xOffsets[i] + 3, 15, 4, 4, paletteSlots[monSpecies], 1); } } } } -static void sub_808AB10(void) +static void LoadMonIconGfx(void) { u8 i; - CpuSet(gMonIconPalettes, sTrainerCardDataPtr->monIconPals, 32 * 3); - switch (sTrainerCardDataPtr->trainerCard.var_4E) + CpuSet(gMonIconPalettes, sTrainerCardDataPtr->monIconPals, NELEMS(sTrainerCardDataPtr->monIconPals)); + switch (sTrainerCardDataPtr->trainerCard.monIconTint) { - case 0: + case MON_ICON_TINT_NORMAL: break; - case 1: + case MON_ICON_TINT_BLACK: TintPalette_CustomTone(sTrainerCardDataPtr->monIconPals, 96, 0, 0, 0); break; - case 2: + case MON_ICON_TINT_PINK: TintPalette_CustomTone(sTrainerCardDataPtr->monIconPals, 96, 500, 330, 310); break; - case 3: + case MON_ICON_TINT_SEPIA: TintPalette_SepiaTone(sTrainerCardDataPtr->monIconPals, 96); break; } LoadPalette(sTrainerCardDataPtr->monIconPals, 80, 192); - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { LoadBgTiles(3, GetMonIconTiles(sTrainerCardDataPtr->trainerCard.monSpecies[i], 0), 512, 16 * i + 32); } } -static void sub_808ABE0(void) +static void PrintStickersOnCard(void) { u8 i; - u8 buffer[4]; + u8 palSlots[4]; - memcpy(buffer, sUnknown_83CD958, sizeof(sUnknown_83CD958)); - if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG && sTrainerCardDataPtr->trainerCard.var_4C == 1) + memcpy(palSlots, sStickerPalSlots, sizeof(sStickerPalSlots)); + if (sTrainerCardDataPtr->cardType == CARD_TYPE_FRLG && sTrainerCardDataPtr->trainerCard.shouldDrawStickers == TRUE) { - for (i = 0; i < 3; i++) + for (i = 0; i < TRAINER_CARD_STICKER_TYPES; i++) { - u8 var_50 = sTrainerCardDataPtr->trainerCard.var_50[i]; - if (sTrainerCardDataPtr->trainerCard.var_50[i]) - WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, buffer[var_50 - 1], 1); + u8 sticker = sTrainerCardDataPtr->trainerCard.stickers[i]; + if (sTrainerCardDataPtr->trainerCard.stickers[i]) + WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, palSlots[sticker - 1], 1); } } } -static void TrainerCardLoadStickerPals(void) +static void LoadStickerGfx(void) { LoadPalette(sTrainerCardStickerPal1, 176, 32); LoadPalette(sTrainerCardStickerPal2, 192, 32); LoadPalette(sTrainerCardStickerPal3, 208, 32); LoadPalette(sTrainerCardStickerPal4, 224, 32); - LoadBgTiles(3, sTrainerCardDataPtr->bgTiles, 1024, 128); + LoadBgTiles(3, sTrainerCardDataPtr->stickerTiles, 1024, 128); } -static void PutTrainerCardWindow(u8 windowId) +static void DrawTrainerCardWindow(u8 windowId) { PutWindowTilemap(windowId); CopyWindowToVram(windowId, 3); @@ -1433,35 +1479,35 @@ static bool8 SetTrainerCardBgsAndPals(void) switch (sTrainerCardDataPtr->bgPalLoadState) { case 0: - LoadBgTiles(3, sTrainerCardDataPtr->cardTiles, 1024, 0); + LoadBgTiles(3, sTrainerCardDataPtr->badgeTiles, ARRAY_COUNT(sTrainerCardDataPtr->badgeTiles), 0); break; case 1: - LoadBgTiles(0, sTrainerCardDataPtr->var_18CC, 6144, 0); + LoadBgTiles(0, sTrainerCardDataPtr->cardTiles, 0x1800, 0); break; case 2: if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); + LoadPalette(sHoennTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); else - LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); + LoadPalette(sKantoTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); break; case 3: if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE) - LoadPalette(sEmeraldTrainerCardBadges_Pal, 48, 32); + LoadPalette(sHoennTrainerCardBadges_Pal, 48, 32); else - LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32); + LoadPalette(sKantoTrainerCardBadges_Pal, 48, 32); break; case 4: if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.gender != MALE) - LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32); + LoadPalette(sHoennTrainerCardFemaleBackground_Pal, 16, 32); else if (sTrainerCardDataPtr->trainerCard.gender != MALE) - LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32); + LoadPalette(sKantoTrainerCardFemaleBackground_Pal, 16, 32); break; case 5: - LoadPalette(sUnknown_83CD300, 64, 32); + LoadPalette(sTrainerCardGold_Pal, 64, 32); break; case 6: - SetBgTilemapBuffer(0, sTrainerCardDataPtr->bgTilemap0); - SetBgTilemapBuffer(2, sTrainerCardDataPtr->bgTilemap2); + SetBgTilemapBuffer(0, sTrainerCardDataPtr->cardTilemapBuffer); + SetBgTilemapBuffer(2, sTrainerCardDataPtr->bgTilemapBuffer); break; default: FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); @@ -1474,10 +1520,10 @@ static bool8 SetTrainerCardBgsAndPals(void) return FALSE; } -static void LoadTrainerCardTilemap2(const u16* ptr) +static void DrawCardScreenBackground(const u16* ptr) { s16 i, j; - u16 *dst = sTrainerCardDataPtr->bgTilemap2; + u16 *dst = sTrainerCardDataPtr->bgTilemapBuffer; for (i = 0; i < 20; i++) { @@ -1493,10 +1539,10 @@ static void LoadTrainerCardTilemap2(const u16* ptr) CopyBgTilemapBufferToVram(2); } -static void LoadTrainerCardTilemap0(const u16* ptr) +static void DrawCardFrontOrBack(const u16* ptr) { s16 i, j; - u16 *dst = sTrainerCardDataPtr->bgTilemap0; + u16 *dst = sTrainerCardDataPtr->cardTilemapBuffer; for (i = 0; i < 20; i++) { @@ -1512,17 +1558,17 @@ static void LoadTrainerCardTilemap0(const u16* ptr) CopyBgTilemapBufferToVram(0); } -static void TrainerCard_PrintStarsAndBadgesOnCard(void) +static void DrawStarsAndBadgesOnCard(void) { s16 i, x; u16 tileNum = 192; u8 palNum = 3; - FillBgTilemapBufferRect(3, 143, 15, sUnknown_83CD95C[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.stars, 1, 4); + FillBgTilemapBufferRect(3, 143, 15, sStarYOffsets[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.stars, 1, 4); if (!sTrainerCardDataPtr->isLink) { x = 4; - for (i = 0; i < BADGE_COUNT; i++, tileNum += 2, x += 3) + for (i = 0; i < NUM_BADGES; i++, tileNum += 2, x += 3) { if (sTrainerCardDataPtr->hasBadge[i]) { @@ -1537,7 +1583,7 @@ static void TrainerCard_PrintStarsAndBadgesOnCard(void) CopyBgTilemapBufferToVram(3); } -static void sub_808B090(void) +static void DrawCardBackStats(void) { if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE) { @@ -1571,13 +1617,13 @@ static void sub_808B090(void) CopyBgTilemapBufferToVram(3); } -static void sub_808B180(void) +static void BlinkTimeColon(void) { - if (++sTrainerCardDataPtr->var_6 > 60) + if (++sTrainerCardDataPtr->timeColonBlinkTimer > 60) { - sTrainerCardDataPtr->var_6 = 0; - sTrainerCardDataPtr->var_7 ^= 1; - sTrainerCardDataPtr->var_7BCE = TRUE; + sTrainerCardDataPtr->timeColonBlinkTimer = 0; + sTrainerCardDataPtr->timeColonInvisible ^= 1; + sTrainerCardDataPtr->timeColonNeedDraw = TRUE; } } @@ -1586,28 +1632,30 @@ u8 GetTrainerCardStars(u8 cardId) return gTrainerCards[cardId].stars; } -static void sub_808B1D4(void) +#define tFlipState data[0] + +static void FlipTrainerCard(void) { - u8 taskId = CreateTask(sub_808B21C, 0); - sub_808B21C(taskId); + u8 taskId = CreateTask(Task_DoCardFlipTask, 0); + Task_DoCardFlipTask(taskId); SetHBlankCallback(HBlankCB_TrainerCard); } -static bool8 sub_808B1FC(void) +static bool8 IsCardFlipTaskActive(void) { - if (FindTaskIdByFunc(sub_808B21C) == 0xFF) + if (FindTaskIdByFunc(Task_DoCardFlipTask) == 0xFF) return TRUE; else return FALSE; } -static void sub_808B21C(u8 taskId) +static void Task_DoCardFlipTask(u8 taskId) { - while(sTrainerCardTasks[gTasks[taskId].data[0]](&gTasks[taskId])) + while(sTrainerCardFlipTasks[gTasks[taskId].tFlipState](&gTasks[taskId])) ; } -static bool8 sub_808B254(struct Task* task) +static bool8 Task_BeginCardFlip(struct Task* task) { u32 i; @@ -1616,15 +1664,12 @@ static bool8 sub_808B254(struct Task* task) ScanlineEffect_Stop(); ScanlineEffect_Clear(); for (i = 0; i < 160; i++) - { gScanlineEffectRegBuffers[1][i] = 0; - } - - task->data[0]++; + task->tFlipState++; return FALSE; } -static bool8 sub_808B294(struct Task* task) +static bool8 Task_AnimateCardFlipDown(struct Task* task) { u32 r4, r5, r10, r7, r6, var_24, r9, var; s16 i; @@ -1670,12 +1715,12 @@ static bool8 sub_808B294(struct Task* task) sTrainerCardDataPtr->allowDMACopy = TRUE; if (task->data[1] >= 77) - task->data[0]++; + task->tFlipState++; return FALSE; } -static bool8 sub_808B3C4(struct Task* task) +static bool8 Task_DrawFlippedCardSide(struct Task* task) { sTrainerCardDataPtr->allowDMACopy = FALSE; if (sub_8058244() == TRUE) @@ -1683,72 +1728,74 @@ static bool8 sub_808B3C4(struct Task* task) do { - switch (sTrainerCardDataPtr->var_4) + switch (sTrainerCardDataPtr->flipDrawState) { case 0: FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); break; case 1: - if (!sTrainerCardDataPtr->var_8) + if (!sTrainerCardDataPtr->onBack) { - if (!PrintStringsOnCardPage2()) + if (!PrintAllOnCardBack()) return FALSE; } else { - if (!PrintAllOnCardPage1()) + if (!PrintAllOnCardFront()) return FALSE; } break; case 2: - if (!sTrainerCardDataPtr->var_8) - LoadTrainerCardTilemap0(sTrainerCardDataPtr->var_96C); + if (!sTrainerCardDataPtr->onBack) + DrawCardFrontOrBack(sTrainerCardDataPtr->backTilemap); else - PutTrainerCardWindow(1); + DrawTrainerCardWindow(1); break; case 3: - if (!sTrainerCardDataPtr->var_8) - sub_808B090(); + if (!sTrainerCardDataPtr->onBack) + DrawCardBackStats(); else FillWindowPixelBuffer(2, PIXEL_FILL(0)); break; case 4: - if (sTrainerCardDataPtr->var_8) - sub_808B838(); + if (sTrainerCardDataPtr->onBack) + CreateTrainerCardTrainerPic(); break; default: - task->data[0]++; + task->tFlipState++; sTrainerCardDataPtr->allowDMACopy = TRUE; - sTrainerCardDataPtr->var_4 = 0; + sTrainerCardDataPtr->flipDrawState = 0; return FALSE; } - sTrainerCardDataPtr->var_4++; + sTrainerCardDataPtr->flipDrawState++; } while (gReceivedRemoteLinkPlayers == 0); return FALSE; } -static bool8 sub_808B4D8(struct Task* task) +static bool8 Task_SetCardFlipped(struct Task* task) { sTrainerCardDataPtr->allowDMACopy = FALSE; - if (sTrainerCardDataPtr->var_8) + + // If on back of card, draw front of card because its being flipped + if (sTrainerCardDataPtr->onBack) { - PutTrainerCardWindow(2); - LoadTrainerCardTilemap2(&sTrainerCardDataPtr->var_E1C); - LoadTrainerCardTilemap0(&sTrainerCardDataPtr->var_4BC); - TrainerCard_PrintStarsAndBadgesOnCard(); + DrawTrainerCardWindow(2); + DrawCardScreenBackground(sTrainerCardDataPtr->bgTilemap); + DrawCardFrontOrBack(sTrainerCardDataPtr->frontTilemap); + DrawStarsAndBadgesOnCard(); } - PutTrainerCardWindow(1); - sTrainerCardDataPtr->var_8 ^= 1; - task->data[0]++; + DrawTrainerCardWindow(1); + sTrainerCardDataPtr->onBack ^= 1; + task->tFlipState++; sTrainerCardDataPtr->allowDMACopy = TRUE; PlaySE(SE_CARD2); return FALSE; } -static bool8 sub_808B540(struct Task* task) +static bool8 Task_AnimateCardFlipUp(struct Task* task) { u32 r4, r5, r10, r7, r6, var_24, r9, var; s16 i; @@ -1794,17 +1841,17 @@ static bool8 sub_808B540(struct Task* task) sTrainerCardDataPtr->allowDMACopy = TRUE; if (task->data[1] <= 0) - task->data[0]++; + task->tFlipState++; return FALSE; } -static bool8 sub_808B66C(struct Task *task) +static bool8 Task_EndCardFlip(struct Task *task) { ShowBg(1); ShowBg(3); SetHBlankCallback(NULL); - DestroyTask(FindTaskIdByFunc(sub_808B21C)); + DestroyTask(FindTaskIdByFunc(Task_DoCardFlipTask)); return FALSE; } @@ -1832,23 +1879,23 @@ void ShowTrainerCardInLink(u8 cardId, void (*callback)(void)) SetMainCallback2(CB2_InitTrainerCard); } -static void sub_808B774(void) +static void InitTrainerCardData(void) { u8 i; - sTrainerCardDataPtr->taskState = 0; - sTrainerCardDataPtr->var_6 = gSaveBlock2Ptr->playTimeVBlanks; - sTrainerCardDataPtr->var_7 = 0; - sTrainerCardDataPtr->var_8 = 0; - sTrainerCardDataPtr->var_456 = 0; + sTrainerCardDataPtr->mainState = 0; + sTrainerCardDataPtr->timeColonBlinkTimer = gSaveBlock2Ptr->playTimeVBlanks; + sTrainerCardDataPtr->timeColonInvisible = FALSE; + sTrainerCardDataPtr->onBack = FALSE; + sTrainerCardDataPtr->flipBlendY = 0; if (GetCardType() == CARD_TYPE_RSE) sTrainerCardDataPtr->cardType = CARD_TYPE_RSE; else sTrainerCardDataPtr->cardType = CARD_TYPE_FRLG; - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++) { - CopyEasyChatWord(sTrainerCardDataPtr->var_19[i], sTrainerCardDataPtr->trainerCard.var_28[i]); + CopyEasyChatWord(sTrainerCardDataPtr->easyChatProfile[i], sTrainerCardDataPtr->trainerCard.easyChatProfile[i]); } } @@ -1870,28 +1917,28 @@ static u8 GetCardType(void) } } -static void sub_808B838(void) +static void CreateTrainerCardTrainerPic(void) { - u8 val = sLinkTrainerCardFrontPics[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender]; + u8 facilityClass = sTrainerPicFacilityClasses[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender]; if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1) { - val = sTrainerCardDataPtr->trainerCard.var_4F; - sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); + facilityClass = sTrainerCardDataPtr->trainerCard.facilityClass; + CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(facilityClass), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], + sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); } else { if (sTrainerCardDataPtr->cardType != CARD_TYPE_FRLG) { - sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); + CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(facilityClass), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], + sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); } else { - sub_810C330(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.gender, TRUE), TRUE, - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], + CreateTrainerCardTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.gender, TRUE), TRUE, + sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], + sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); } } diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 9f706c6d5..8567d791b 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -300,7 +300,7 @@ u16 sub_810C2FC(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) return sub_810C050(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); } -u16 sub_810C330(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) +u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) { return sub_810C0C0(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE); } diff --git a/src/union_room.c b/src/union_room.c index f3aeeebc5..aea4d7000 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -46,6 +46,7 @@ #include "constants/cable_club.h" #include "constants/field_weather.h" #include "constants/species.h" +#include "constants/trainer_card.h" #include "constants/union_room.h" static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; @@ -4727,9 +4728,9 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++) { - CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->var_28[i]); + CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->easyChatProfile[i]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]); } -- cgit v1.2.3 From 7d7c51973ca025f03de1391b87b37876d3d9e90d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 28 Feb 2020 00:22:34 -0500 Subject: Document Five Island scripts --- src/field_specials.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/field_specials.c b/src/field_specials.c index 6554f6116..25585fea6 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -165,7 +165,7 @@ void Special_SetHiddenItemFlag(void) FlagSet(gSpecialVar_0x8004); } -u8 Special_GetLeadMonFriendship(void) +u8 GetLeadMonFriendship(void) { struct Pokemon * pokemon = &gPlayerParty[GetLeadMonIndex()]; if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) == 255) @@ -672,10 +672,10 @@ void IncrementResortGorgeousStepCounter(void) } } -void Special_SampleResortGorgeousMonAndReward(void) +void SampleResortGorgeousMonAndReward(void) { - u16 var4036 = VarGet(VAR_RESORT_GORGEOUS_REQUESTED_MON); - if (var4036 == SPECIES_NONE || var4036 == 0xFFFF) + u16 requestedSpecies = VarGet(VAR_RESORT_GORGEOUS_REQUESTED_MON); + if (requestedSpecies == SPECIES_NONE || requestedSpecies == 0xFFFF) { VarSet(VAR_RESORT_GORGEOUS_REQUESTED_MON, SampleResortGorgeousMon()); VarSet(VAR_RESORT_GORGEOUS_REWARD, SampleResortGorgeousReward()); @@ -2458,14 +2458,15 @@ void Special_BrailleCursorToggle(void) } } -bool8 Special_PlayerPartyContainsSpeciesWithPlayerID(void) +bool8 PlayerPartyContainsSpeciesWithPlayerID(void) { // 8004 = species u8 playerCount = CalculatePlayerPartyCount(); u8 i; for (i = 0; i < playerCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == gSpecialVar_0x8004 && GetPlayerTrainerId() == GetMonData(&gPlayerParty[i], MON_DATA_OT_ID, NULL)) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == gSpecialVar_0x8004 + && GetPlayerTrainerId() == GetMonData(&gPlayerParty[i], MON_DATA_OT_ID, NULL)) return TRUE; } return FALSE; -- cgit v1.2.3 From 9b9ae3d3374dd61870d47f025ffc0346a0b6839c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 29 Feb 2020 14:30:01 -0500 Subject: through sub_8080E6C --- src/battle_records.c | 6 +- src/cable_club.c | 397 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/link.c | 8 +- src/trainer_card.c | 248 ++++++++++++++++---------------- src/union_room.c | 20 +-- 5 files changed, 540 insertions(+), 139 deletions(-) create mode 100644 src/cable_club.c (limited to 'src') diff --git a/src/battle_records.c b/src/battle_records.c index 07ff665d9..e2ae94f65 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -419,7 +419,7 @@ void ClearPlayerLinkBattleRecords(void) static void IncTrainerCardWinCount(s32 battlerId) { - u16 *wins = &gTrainerCards[battlerId].linkBattleWins; + u16 *wins = &gTrainerCards[battlerId].rse.linkBattleWins; (*wins)++; if (*wins > 9999) *wins = 9999; @@ -427,7 +427,7 @@ static void IncTrainerCardWinCount(s32 battlerId) static void IncTrainerCardLossCount(s32 battlerId) { - u16 *losses = &gTrainerCards[battlerId].linkBattleLosses; + u16 *losses = &gTrainerCards[battlerId].rse.linkBattleLosses; (*losses)++; if (*losses > 9999) *losses = 9999; @@ -453,7 +453,7 @@ void TryRecordLinkBattleOutcome(s32 battlerId) if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(UNION_ROOM) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(UNION_ROOM)) { UpdateBattleOutcomeOnTrainerCards(battlerId); - AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].playerName, gTrainerCards[battlerId].trainerId, gBattleOutcome, gLinkPlayers[battlerId].language); + AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].rse.playerName, gTrainerCards[battlerId].rse.trainerId, gBattleOutcome, gLinkPlayers[battlerId].language); } } diff --git a/src/cable_club.c b/src/cable_club.c new file mode 100644 index 000000000..348a2a83d --- /dev/null +++ b/src/cable_club.c @@ -0,0 +1,397 @@ +#include "global.h" +#include "gflib.h" +#include "event_data.h" +#include "event_scripts.h" +#include "field_message_box.h" +#include "link.h" +#include "overworld.h" +#include "new_menu_helpers.h" +#include "script.h" +#include "strings.h" +#include "task.h" +#include "trainer_card.h" +#include "constants/songs.h" + +void sub_80809F8(u8 taskId); +void sub_8080A4C(u8 taskId); +void sub_8080AD0(u8 taskId); +void sub_8080B20(u8 taskId); +void sub_8080BC8(u8 taskId); +void sub_8080C6C(u8 taskId); +void sub_8080CDC(u8 taskId); +void sub_8080DC0(u8 taskId); +void sub_8080E6C(u8 taskId); +void sub_8080F78(u8 taskId); +void sub_8080FB4(u8 taskId); +void sub_8080FF0(u8 taskId); +bool8 sub_808102C(u8 taskId); + +static const struct WindowTemplate gUnknown_83C6AB0 = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 11, + .width = 11, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x125 +}; + +const u8 *const gUnknown_83C6AB8[] = { + gUnknown_841DF8B, + gUnknown_841DF92, + gUnknown_841DF99, + gUnknown_841DFA0 +}; + +void sub_8080748(u8 a0, u8 a1) +{ + u8 taskId; + if (FindTaskIdByFunc(sub_80809F8) == 0xFF) + { + taskId = CreateTask(sub_80809F8, 80); + gTasks[taskId].data[1] = a0; + gTasks[taskId].data[2] = a1; + } +} + +void sub_808078C(u16 windowId, s32 num) +{ + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEFT_ALIGN, 1); + SetStdWindowBorderStyle(windowId, FALSE); + StringExpandPlaceholders(gStringVar4, gUnknown_841DF82); + AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 0, TEXT_SPEED_FF, NULL); + CopyWindowToVram(windowId, 3); +} + +void sub_80807E8(u16 windowId) +{ + ClearStdWindowAndFrame(windowId, FALSE); + CopyWindowToVram(windowId, 3); +} + +void sub_8080808(u8 taskId, u8 num) +{ + s16 *data = gTasks[taskId].data; + if (num != data[3]) + { + if (num < 2) + sub_80807E8(data[5]); + else + sub_808078C(data[5], num); + data[3] = num; + } +} + +u16 sub_8080844(u8 lower, u8 higher) +{ + switch (GetLinkPlayerDataExchangeStatusTimed(lower, higher)) + { + case EXCHANGE_COMPLETE: + return 1; + case EXCHANGE_IN_PROGRESS: + return 3; + case EXCHANGE_STAT_4: + return 7; + case EXCHANGE_STAT_5: + return 9; + case EXCHANGE_STAT_6: + ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1); + return 4; + default: + return 0; + } +} + +bool32 sub_80808BC(u8 taskId) +{ + if (HasLinkErrorOccurred() == TRUE) + { + gTasks[taskId].func = sub_8080FF0; + return TRUE; + } + return FALSE; +} + +bool32 sub_80808F0(u8 taskId) +{ + if (JOY_NEW(B_BUTTON) && !IsLinkConnectionEstablished()) + { + gLinkType = 0; + gTasks[taskId].func = sub_8080FB4; + return TRUE; + } + return FALSE; +} + +bool32 sub_808093C(u8 taskId) +{ + if (IsLinkConnectionEstablished()) + { + SetSuppressLinkErrorMessage(TRUE); + } + if (JOY_NEW(B_BUTTON)) + { + gLinkType = 0; + gTasks[taskId].func = sub_8080FB4; + return TRUE; + } + return FALSE; +} + +bool32 sub_8080990(u8 taskId) +{ + if (GetSioMultiSI() == TRUE) + { + gTasks[taskId].func = sub_8080FF0; + return TRUE; + } + return FALSE; +} + +void sub_80809C4(u8 taskId) +{ + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 10) + { + sub_800A474(2); + DestroyTask(taskId); + } +} + +void sub_80809F8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (data[0] == 0) + { + OpenLinkTimed(); + sub_800AA24(); + ResetLinkPlayers(); + data[5] = AddWindow(&gUnknown_83C6AB0); + } + else if (data[0] > 9) + { + gTasks[taskId].func = sub_8080A4C; + } + data[0]++; +} + +void sub_8080A4C(u8 taskId) +{ + u8 linkPlayerCount = GetLinkPlayerCount_2(); + if (sub_80808F0(taskId) != TRUE && sub_808093C(taskId) != TRUE && linkPlayerCount >= 2) + { + SetSuppressLinkErrorMessage(TRUE); + gTasks[taskId].data[3] = 0; + if (IsLinkMaster() == TRUE) + { + PlaySE(SE_PIN); + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = sub_8080AD0; + } + else + { + PlaySE(SE_BOO); + ShowFieldAutoScrollMessage(CableClub_Text_AwaitingLinkupBCancel); + gTasks[taskId].func = sub_8080CDC; + } + } +} + +void sub_8080AD0(u8 taskId) +{ + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].func = sub_8080B20; + } +} + +void sub_8080B20(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 linkPlayerCount = GetLinkPlayerCount_2(); + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE) + { + sub_8080808(taskId, linkPlayerCount); + if (JOY_NEW(A_BUTTON) && linkPlayerCount >= data[1]) + { + sub_800A900(linkPlayerCount); + sub_80807E8(data[5]); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage(CableClub_Text_StartLinkWithXPlayersAConfirmBCancel); + gTasks[taskId].func = sub_8080BC8; + } + } +} + +void sub_8080BC8(u8 taskId) +{ + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) + { + if (GetSavedPlayerCount() != GetLinkPlayerCount_2()) + { + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = sub_8080AD0; + } + else if (JOY_HELD(B_BUTTON)) + { + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = sub_8080AD0; + } + else if (JOY_HELD(A_BUTTON)) + { + PlaySE(SE_SELECT); + CheckShouldAdvanceLinkState(); + gTasks[taskId].func = sub_8080C6C; + } + } +} + +void sub_8080C6C(u8 taskId) +{ + u8 lower = gTasks[taskId].data[1]; + u8 higher = gTasks[taskId].data[2]; + u16 *res; + if (sub_80808BC(taskId) != TRUE && sub_808102C(taskId) != TRUE) + { + if (GetLinkPlayerCount_2() != GetSavedPlayerCount()) + { + gTasks[taskId].func = sub_8080FF0; + } + else + { + res = &gSpecialVar_Result; + *res = sub_8080844(lower, higher); + if (*res) + gTasks[taskId].func = sub_8080DC0; + } + } +} + +void sub_8080CDC(u8 taskId) +{ + u8 lower = gTasks[taskId].data[1]; + u8 higher = gTasks[taskId].data[2]; + u16 *res; + if (sub_80808F0(taskId) != TRUE && sub_80808BC(taskId) != TRUE) + { + res = &gSpecialVar_Result; + *res = sub_8080844(lower, higher); + if (*res) + { + if (*res == 3 || *res == 4) + { + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else if (*res == 7 || *res == 9) + { + CloseLink(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gLocalLinkPlayerId = GetMultiplayerId(); + sub_800A900(gFieldLinkPlayerCount); + TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); + gTasks[taskId].func = sub_8080E6C; + } + } + } +} + +bool32 sub_8080D8C(void) +{ + int i; + u16 version; + + for (i = 0; i < GetLinkPlayerCount(); i++) + { + version = gLinkPlayers[i].version & 0xFF; + if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + return TRUE; + } + return FALSE; +} + +void sub_8080DC0(u8 taskId) +{ + if (sub_80808BC(taskId) != TRUE) + { + if (gSpecialVar_Result == 4) + { + if (sub_8080D8C() == TRUE) + CloseLink(); + else + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else if (gSpecialVar_Result == 3) + { + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9) + { + CloseLink(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gLocalLinkPlayerId = GetMultiplayerId(); + sub_800A900(gFieldLinkPlayerCount); + TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); + gTasks[taskId].func = sub_8080E6C; + sub_800A474(2); + } + } +} + +void sub_8080E6C(u8 taskId) +{ + u8 i; + u16 version; + u8 * dest; + if (sub_80808BC(taskId) != TRUE && GetBlockReceivedStatus() == sub_800A8A4()) + { + for(i = 0; i < GetLinkPlayerCount(); i++) + { + version = gLinkPlayers[i].version & 0xFF; + if (version != VERSION_FIRE_RED && version != VERSION_LEAF_GREEN) + { + const struct TrainerCardRSE * src = (const struct TrainerCardRSE *)gBlockRecvBuffer[i]; + gTrainerCards[i].rse = *src; + gTrainerCards[i].version = gLinkPlayers[i].version; + } + else + { + const struct TrainerCard * src = (const struct TrainerCard *)gBlockRecvBuffer[i]; + gTrainerCards[i] = *src; + } + } + SetSuppressLinkErrorMessage(FALSE); + ResetBlockReceivedFlags(); + HideFieldMessageBox(); + if (gSpecialVar_Result == 1) + { + // Dumb trick required to match + if (gLinkType == 0x4411) + gFieldLinkPlayerCount += 0; + sub_80807E8(gTasks[taskId].data[5]); + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else + { + Link_TryStartSend5FFF(); + gTasks[taskId].func = sub_8080F78; + } + } +} diff --git a/src/link.c b/src/link.c index 26e223153..cb46a50ff 100644 --- a/src/link.c +++ b/src/link.c @@ -796,7 +796,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) if (lower > cmpVal || cmpVal > upper) { sPlayerDataExchangeStatus = EXCHANGE_STAT_6; - return 6; + return EXCHANGE_STAT_6; } else { @@ -1006,15 +1006,15 @@ bool8 SendBlock(u8 unused, const void *src, u16 size) return InitBlockSend(src, size); } -bool8 sub_800A474(u8 a0) +bool8 sub_800A474(u8 blockRequestType) { if (gWirelessCommType == 1) { - return sub_80FA0F8(a0); + return sub_80FA0F8(blockRequestType); } if (gLinkCallback == NULL) { - gBlockRequestType = a0; + gBlockRequestType = blockRequestType; BuildSendCmd(LINKCMD_0xCCCC); return TRUE; } diff --git a/src/trainer_card.c b/src/trainer_card.c index d60738ee6..c35b09386 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -348,28 +348,30 @@ static const u8 sUnknown_83CD95C[] = {7, 6, 0, 0}; static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 = { - .gender = MALE, - .stars = 4, - .hasPokedex = TRUE, - .caughtAllHoenn = TRUE, - .hasAllPaintings = TRUE, - .hofDebutHours = 999, - .hofDebutMinutes = 59, - .hofDebutSeconds = 59, - .caughtMonsCount = 200, - .trainerId = 0x6072, - .playTimeHours = 999, - .playTimeMinutes = 59, - .linkBattleWins = 5535, - .linkBattleLosses = 5535, - .battleTowerWins = 5535, - .battleTowerStraightWins = 5535, - .contestsWithFriends = 55555, - .pokeblocksWithFriends = 44444, - .pokemonTrades = 33333, - .money = 999999, - .var_28 = {0, 0, 0, 0}, - .playerName = _("あかみ どりお"), + .rse = { + .gender = MALE, + .stars = 4, + .hasPokedex = TRUE, + .caughtAllHoenn = TRUE, + .hasAllPaintings = TRUE, + .hofDebutHours = 999, + .hofDebutMinutes = 59, + .hofDebutSeconds = 59, + .caughtMonsCount = 200, + .trainerId = 0x6072, + .playTimeHours = 999, + .playTimeMinutes = 59, + .linkBattleWins = 5535, + .linkBattleLosses = 5535, + .battleTowerWins = 5535, + .battleTowerStraightWins = 5535, + .contestsWithFriends = 55555, + .pokeblocksWithFriends = 44444, + .pokemonTrades = 33333, + .money = 999999, + .var_28 = {0, 0, 0, 0}, + .playerName = _("あかみ どりお") + }, .version = VERSION_FIRE_RED, .var_3A = 0, .berryCrushPoints = 5555, @@ -386,28 +388,30 @@ static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 = static const struct TrainerCard sLinkPlayerTrainerCardTemplate2 = { - .gender = FEMALE, - .stars = 2, - .hasPokedex = TRUE, - .caughtAllHoenn = TRUE, - .hasAllPaintings = TRUE, - .hofDebutHours = 999, - .hofDebutMinutes = 59, - .hofDebutSeconds = 59, - .caughtMonsCount = 200, - .trainerId = 0x6072, - .playTimeHours = 999, - .playTimeMinutes = 59, - .linkBattleWins = 5535, - .linkBattleLosses = 5535, - .battleTowerWins = 65535, - .battleTowerStraightWins = 65535, - .contestsWithFriends = 55555, - .pokeblocksWithFriends = 44444, - .pokemonTrades = 33333, - .money = 999999, - .var_28 = {0, 0, 0, 0}, - .playerName = _("るびさふぁこ!"), + .rse = { + .gender = FEMALE, + .stars = 2, + .hasPokedex = TRUE, + .caughtAllHoenn = TRUE, + .hasAllPaintings = TRUE, + .hofDebutHours = 999, + .hofDebutMinutes = 59, + .hofDebutSeconds = 59, + .caughtMonsCount = 200, + .trainerId = 0x6072, + .playTimeHours = 999, + .playTimeMinutes = 59, + .linkBattleWins = 5535, + .linkBattleLosses = 5535, + .battleTowerWins = 65535, + .battleTowerStraightWins = 65535, + .contestsWithFriends = 55555, + .pokeblocksWithFriends = 44444, + .pokemonTrades = 33333, + .money = 999999, + .var_28 = {0, 0, 0, 0}, + .playerName = _("るびさふぁこ!") + }, .version = 0, .var_3A = 0, .berryCrushPoints = 555, @@ -744,16 +748,16 @@ static u8 GetTrainerStarCount(struct TrainerCard *trainerCard) { u8 stars = 0; - if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0) + if (trainerCard->rse.hofDebutHours != 0 || trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0) stars++; - if (trainerCard->caughtAllHoenn) + if (trainerCard->rse.caughtAllHoenn) stars++; - if (trainerCard->battleTowerStraightWins > 49) + if (trainerCard->rse.battleTowerStraightWins > 49) stars++; - if (trainerCard->hasAllPaintings) + if (trainerCard->rse.hasAllPaintings) stars++; return stars; @@ -764,63 +768,63 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) u32 playTime; u8 i; - trainerCard->gender = gSaveBlock2Ptr->playerGender; - trainerCard->playTimeHours = gSaveBlock2Ptr->playTimeHours; - trainerCard->playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes; + trainerCard->rse.gender = gSaveBlock2Ptr->playerGender; + trainerCard->rse.playTimeHours = gSaveBlock2Ptr->playTimeHours; + trainerCard->rse.playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes; playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); if (!GetGameStat(GAME_STAT_ENTERED_HOF)) playTime = 0; - trainerCard->hofDebutHours = playTime >> 16; - trainerCard->hofDebutMinutes = (playTime >> 8) & 0xFF; - trainerCard->hofDebutSeconds = playTime & 0xFF; + trainerCard->rse.hofDebutHours = playTime >> 16; + trainerCard->rse.hofDebutMinutes = (playTime >> 8) & 0xFF; + trainerCard->rse.hofDebutSeconds = playTime & 0xFF; if ((playTime >> 16) > 999) { - trainerCard->hofDebutHours = 999; - trainerCard->hofDebutMinutes = 59; - trainerCard->hofDebutSeconds = 59; + trainerCard->rse.hofDebutHours = 999; + trainerCard->rse.hofDebutMinutes = 59; + trainerCard->rse.hofDebutSeconds = 59; } - trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); - trainerCard->caughtAllHoenn = HasAllHoennMons(); - trainerCard->caughtMonsCount = GetCaughtMonsCount(); + trainerCard->rse.hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); + trainerCard->rse.caughtAllHoenn = HasAllHoennMons(); + trainerCard->rse.caughtMonsCount = GetCaughtMonsCount(); - trainerCard->trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; + trainerCard->rse.trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; - trainerCard->linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999); - trainerCard->linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999); - trainerCard->pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF); + trainerCard->rse.linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999); + trainerCard->rse.linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + trainerCard->rse.pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF); - trainerCard->battleTowerWins = 0; - trainerCard->battleTowerStraightWins = 0; - trainerCard->contestsWithFriends = 0; - trainerCard->pokeblocksWithFriends = 0; + trainerCard->rse.battleTowerWins = 0; + trainerCard->rse.battleTowerStraightWins = 0; + trainerCard->rse.contestsWithFriends = 0; + trainerCard->rse.pokeblocksWithFriends = 0; - trainerCard->hasAllPaintings = FALSE; + trainerCard->rse.hasAllPaintings = FALSE; - trainerCard->money = GetMoney(&gSaveBlock1Ptr->money); + trainerCard->rse.money = GetMoney(&gSaveBlock1Ptr->money); for (i = 0; i < 4; i++) - trainerCard->var_28[i] = gSaveBlock1Ptr->easyChatProfile[i]; + trainerCard->rse.var_28[i] = gSaveBlock1Ptr->easyChatProfile[i]; - StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName); + StringCopy(trainerCard->rse.playerName, gSaveBlock2Ptr->playerName); if (cardType == CARD_TYPE_FRLG) { - trainerCard->stars = GetTrainerStarCount(trainerCard); + trainerCard->rse.stars = GetTrainerStarCount(trainerCard); } else if (cardType == CARD_TYPE_EMERALD) { - trainerCard->stars = 0; - if (trainerCard->hofDebutHours != 0 || (trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)) - trainerCard->stars = cardType; + trainerCard->rse.stars = 0; + if (trainerCard->rse.hofDebutHours != 0 || (trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0)) + trainerCard->rse.stars = cardType; if (HasAllKantoMons()) - trainerCard->stars++; + trainerCard->rse.stars++; if (HasAllMons()) - trainerCard->stars++; + trainerCard->rse.stars++; } } @@ -833,11 +837,11 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) if (GetCardType() != CARD_TYPE_FRLG) return; - trainerCard->stars = id; - if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0) - trainerCard->stars = 1; + trainerCard->rse.stars = id; + if (trainerCard->rse.hofDebutHours != 0 || trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0) + trainerCard->rse.stars = 1; - trainerCard->caughtAllHoenn = HasAllKantoMons(); + trainerCard->rse.caughtAllHoenn = HasAllKantoMons(); trainerCard->hasAllMons = HasAllMons(); trainerCard->berriesPicked = gSaveBlock2Ptr->berryPick.berriesPicked; trainerCard->jumpsInRow = gSaveBlock2Ptr->pokeJump.jumpsInRow; @@ -846,17 +850,17 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) trainerCard->unionRoomNum = GetCappedGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES, 0xFFFF); trainerCard->var_4C = TRUE; - if (trainerCard->caughtAllHoenn) - trainerCard->stars++; + if (trainerCard->rse.caughtAllHoenn) + trainerCard->rse.stars++; if (trainerCard->hasAllMons) - trainerCard->stars++; + trainerCard->rse.stars++; if (trainerCard->berriesPicked >= 200 && trainerCard->jumpsInRow >= 200) - trainerCard->stars++; + trainerCard->rse.stars++; - id = ((u16)trainerCard->trainerId) % 8; - if (trainerCard->gender == FEMALE) + id = ((u16)trainerCard->rse.trainerId) % 8; + if (trainerCard->rse.gender == FEMALE) trainerCard->var_4F = sLinkTrainerCardFacilityClasses[1][id]; else trainerCard->var_4F = sLinkTrainerCardFacilityClasses[0][id]; @@ -889,18 +893,18 @@ static void SetDataFromTrainerCard(void) sTrainerCardDataPtr->hasTrades = FALSE; memset(&sTrainerCardDataPtr->hasBadge, FALSE, BADGE_COUNT); - if (sTrainerCardDataPtr->trainerCard.hasPokedex) + if (sTrainerCardDataPtr->trainerCard.rse.hasPokedex) sTrainerCardDataPtr->hasPokedex++; - if (sTrainerCardDataPtr->trainerCard.hofDebutHours != 0 - || sTrainerCardDataPtr->trainerCard.hofDebutMinutes != 0 - || sTrainerCardDataPtr->trainerCard.hofDebutSeconds != 0) + if (sTrainerCardDataPtr->trainerCard.rse.hofDebutHours != 0 + || sTrainerCardDataPtr->trainerCard.rse.hofDebutMinutes != 0 + || sTrainerCardDataPtr->trainerCard.rse.hofDebutSeconds != 0) sTrainerCardDataPtr->hasHofResult++; - if (sTrainerCardDataPtr->trainerCard.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.linkBattleLosses != 0) + if (sTrainerCardDataPtr->trainerCard.rse.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.rse.linkBattleLosses != 0) sTrainerCardDataPtr->hasLinkResults++; - if (sTrainerCardDataPtr->trainerCard.pokemonTrades != 0) + if (sTrainerCardDataPtr->trainerCard.rse.pokemonTrades != 0) sTrainerCardDataPtr->hasTrades++; for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++, i++) @@ -1094,7 +1098,7 @@ static void PrintNameOnCard(void) txtPtr = StringCopy(buffer[0], gText_TrainerCardName); txtPtr = buffer[1]; - StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.playerName); + StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.rse.playerName); ConvertInternationalString(txtPtr, sTrainerCardDataPtr->language); StringAppend(buffer[0], txtPtr); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardPlayerNameXPositions[sTrainerCardDataPtr->cardType], sTrainerCardPlayerNameYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer[0]); @@ -1106,7 +1110,7 @@ static void PrintIdOnCard(void) u8* txtPtr; txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); - ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.rse.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardIdXPositions[sTrainerCardDataPtr->cardType], sTrainerCardIdYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); } @@ -1117,7 +1121,7 @@ static void PrintMoneyOnCard(void) u8 x; txtPtr = StringCopy(buffer, gText_TrainerCardYen); - ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.rse.money, STR_CONV_MODE_LEFT_ALIGN, 6); if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) { x = -122 - 6 * StringLength(buffer); @@ -1147,7 +1151,7 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.caughtMonsCount, 0, 3); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.caughtMonsCount, 0, 3); if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) { x = -120 - 6 * StringLength(buffer); @@ -1175,8 +1179,8 @@ static void PrintTimeOnCard(void) minutes = gSaveBlock2Ptr->playTimeMinutes; if (sTrainerCardDataPtr->isLink) { - hours = sTrainerCardDataPtr->trainerCard.playTimeHours; - minutes = sTrainerCardDataPtr->trainerCard.playTimeMinutes; + hours = sTrainerCardDataPtr->trainerCard.rse.playTimeHours; + minutes = sTrainerCardDataPtr->trainerCard.rse.playTimeMinutes; } if (hours > 999) @@ -1221,7 +1225,7 @@ static void PrintProfilePhraseOnCard(void) static void PrintNameOnCard2(void) { - StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.playerName); + StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.rse.playerName); ConvertInternationalString(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->language); if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) { @@ -1254,13 +1258,13 @@ static void PrintHofTimeOnCard(void) if (sTrainerCardDataPtr->hasHofResult) { - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3); txtPtr = StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3); } } @@ -1282,9 +1286,9 @@ static void PrintLinkResultsNumsOnCard(void) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD], sLinkTrainerCardRecordStrings[sTrainerCardDataPtr->cardType]); StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS], gText_WinLossRatio); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4); StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS], buffer); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4); StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES], buffer); } } @@ -1306,7 +1310,7 @@ static void PrintTradesNumOnCard(void) if (sTrainerCardDataPtr->hasTrades) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES], gText_PokemonTrades); - ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); + ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.rse.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); } } @@ -1447,9 +1451,9 @@ static bool8 SetTrainerCardBgsAndPals(void) break; case 2: if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) - LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); + LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.rse.stars], 0, 96); else - LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); + LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.rse.stars], 0, 96); break; case 3: if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) @@ -1458,9 +1462,9 @@ static bool8 SetTrainerCardBgsAndPals(void) LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32); break; case 4: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.gender != MALE) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.rse.gender != MALE) LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32); - else if (sTrainerCardDataPtr->trainerCard.gender != MALE) + else if (sTrainerCardDataPtr->trainerCard.rse.gender != MALE) LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32); break; case 5: @@ -1525,7 +1529,7 @@ static void TrainerCard_PrintStarsAndBadgesOnCard(void) u16 tileNum = 192; u8 palNum = 3; - FillBgTilemapBufferRect(3, 143, 15, sUnknown_83CD95C[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.stars, 1, 4); + FillBgTilemapBufferRect(3, 143, 15, sUnknown_83CD95C[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.rse.stars, 1, 4); if (!sTrainerCardDataPtr->isLink) { x = 4; @@ -1590,7 +1594,7 @@ static void sub_808B180(void) u8 GetTrainerCardStars(u8 cardId) { - return gTrainerCards[cardId].stars; + return gTrainerCards[cardId].rse.stars; } static void sub_808B1D4(void) @@ -1855,7 +1859,7 @@ static void sub_808B774(void) for (i = 0; i < 4; i++) { - CopyEasyChatWord(sTrainerCardDataPtr->var_19[i], sTrainerCardDataPtr->trainerCard.var_28[i]); + CopyEasyChatWord(sTrainerCardDataPtr->var_19[i], sTrainerCardDataPtr->trainerCard.rse.var_28[i]); } } @@ -1879,26 +1883,26 @@ static u8 GetCardType(void) static void sub_808B838(void) { - u8 val = sLinkTrainerCardFrontPics[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender]; + u8 val = sLinkTrainerCardFrontPics[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender]; if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1) { val = sTrainerCardDataPtr->trainerCard.var_4F; - sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); + sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); } else { if (sTrainerCardDataPtr->cardType != CARD_TYPE_FRLG) { - sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); + sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); } else { - sub_810C330(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.gender, TRUE), TRUE, - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], + sub_810C330(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.rse.gender, TRUE), TRUE, + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); } } diff --git a/src/union_room.c b/src/union_room.c index f3aeeebc5..40582ef0d 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4692,23 +4692,23 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->rse.playerName); - StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->stars]); + StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->rse.stars]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->field_174); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->rse.playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->rse.playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, uroom->trainerCardStrbufs[3]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, uroom->trainerCardStrbufs[4]); DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_84594C4); StringCopy(gStringVar4, uroom->field_1A4); - n = trainerCard->linkBattleWins; + n = trainerCard->rse.linkBattleWins; if (n > 9999) { n = 9999; @@ -4716,7 +4716,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); - n = trainerCard->linkBattleLosses; + n = trainerCard->rse.linkBattleLosses; if (n > 9999) { n = 9999; @@ -4724,12 +4724,12 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrbufs[1]); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); for (i = 0; i < 4; i++) { - CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->var_28[i]); + CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->rse.var_28[i]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]); } @@ -4743,7 +4743,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro } else if (parent_child == MODE_CHILD) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->gender]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->rse.gender]); StringAppend(gStringVar4, uroom->field_1A4); } } -- cgit v1.2.3 From 21dddd57605cf4cbc31f0a903cc50a8f588817ff Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 29 Feb 2020 16:31:57 -0500 Subject: Finish cable_club.c --- src/cable_club.c | 579 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 573 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/cable_club.c b/src/cable_club.c index 348a2a83d..246e08a3b 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -1,16 +1,32 @@ #include "global.h" #include "gflib.h" +#include "battle.h" +#include "battle_records.h" +#include "cable_club.h" #include "event_data.h" #include "event_scripts.h" #include "field_message_box.h" +#include "field_weather.h" #include "link.h" -#include "overworld.h" +#include "load_save.h" +#include "m4a.h" +#include "mevent.h" #include "new_menu_helpers.h" +#include "overworld.h" +#include "quest_log.h" #include "script.h" +#include "script_pokemon_util.h" +#include "start_menu.h" #include "strings.h" #include "task.h" +#include "trade.h" #include "trainer_card.h" +#include "union_room.h" #include "constants/songs.h" +#include "constants/cable_club.h" +#include "constants/field_weather.h" + +u32 UnusedVarNeededToMatch; void sub_80809F8(u8 taskId); void sub_8080A4C(u8 taskId); @@ -25,6 +41,10 @@ void sub_8080F78(u8 taskId); void sub_8080FB4(u8 taskId); void sub_8080FF0(u8 taskId); bool8 sub_808102C(u8 taskId); +void sub_80811FC(u8 taskId); +void sub_808124C(u8 taskId); +void sub_80812A0(u8 taskId); +void sub_80812D8(u8 taskId); static const struct WindowTemplate gUnknown_83C6AB0 = { .bg = 0, @@ -43,14 +63,14 @@ const u8 *const gUnknown_83C6AB8[] = { gUnknown_841DFA0 }; -void sub_8080748(u8 a0, u8 a1) +void sub_8080748(u8 lower, u8 higher) { u8 taskId; if (FindTaskIdByFunc(sub_80809F8) == 0xFF) { taskId = CreateTask(sub_80809F8, 80); - gTasks[taskId].data[1] = a0; - gTasks[taskId].data[2] = a1; + gTasks[taskId].data[1] = lower; + gTasks[taskId].data[2] = higher; } } @@ -382,8 +402,8 @@ void sub_8080E6C(u8 taskId) if (gSpecialVar_Result == 1) { // Dumb trick required to match - if (gLinkType == 0x4411) - gFieldLinkPlayerCount += 0; + if (gLinkType == LINKTYPE_0x4411) + UnusedVarNeededToMatch += 0; sub_80807E8(gTasks[taskId].data[5]); EnableBothScriptContexts(); DestroyTask(taskId); @@ -395,3 +415,550 @@ void sub_8080E6C(u8 taskId) } } } + +void sub_8080F78(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + sub_80807E8(gTasks[taskId].data[5]); + EnableBothScriptContexts(); + RemoveWindow(gTasks[taskId].data[5]); + DestroyTask(taskId); + } +} + +void sub_8080FB4(u8 taskId) +{ + gSpecialVar_Result = 5; + sub_80807E8(gTasks[taskId].data[5]); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +void sub_8080FF0(u8 taskId) +{ + gSpecialVar_Result = 6; + sub_80807E8(gTasks[taskId].data[5]); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +bool8 sub_808102C(u8 taskId) +{ + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] > 600) + { + gTasks[taskId].func = sub_8080FF0; + return TRUE; + } + return FALSE; +} + +void TryBattleLinkup(void) +{ + u8 lower, higher; + higher = lower = 2; + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + higher = lower = 2; + gLinkType = LINKTYPE_SINGLE_BATTLE; + break; + case USING_DOUBLE_BATTLE: + higher = lower = 2; + gLinkType = LINKTYPE_DOUBLE_BATTLE; + break; + case USING_MULTI_BATTLE: + higher = lower = 4; + gLinkType = LINKTYPE_MULTI_BATTLE; + break; + } + sub_8080748(lower, higher); +} + +void TryTradeLinkup(void) +{ + gLinkType = LINKTYPE_0x1133; + gBattleTypeFlags = 0; + sub_8080748(2, 2); +} + +void TryRecordMixLinkup(void) +{ + gSpecialVar_Result = 0; + gLinkType = LINKTYPE_0x3311; + gBattleTypeFlags = 0; + sub_8080748(2, 4); +} + +void sub_8081128(void) +{ + gLinkType = LINKTYPE_0x6601; + gBattleTypeFlags = 0; + sub_8080748(4, 4); +} + +u8 sub_8081150(void) +{ + if (FuncIsActiveTask(sub_80811FC)) + return 0xFF; + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + gLinkType = LINKTYPE_SINGLE_BATTLE; + break; + case USING_DOUBLE_BATTLE: + gLinkType = LINKTYPE_DOUBLE_BATTLE; + break; + case USING_MULTI_BATTLE: + gLinkType = LINKTYPE_MULTI_BATTLE; + break; + case USING_TRADE_CENTER: + gLinkType = LINKTYPE_0x1111; + break; + case USING_RECORD_CORNER: + gLinkType = LINKTYPE_0x3322; + break; + } + return CreateTask(sub_80811FC, 80); +} + +void sub_80811FC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (data[0] == 0) + { + OpenLink(); + ResetLinkPlayers(); + CreateTask(sub_8081A90, 80); + } + else if (data[0] > 9) + gTasks[taskId].func = sub_808124C; + data[0]++; +} + +void sub_808124C(u8 taskId) +{ + if (GetLinkPlayerCount_2() >= 2) + { + if (IsLinkMaster() == TRUE) + { + gTasks[taskId].func = sub_80812A0; + } + else + { + gTasks[taskId].func = sub_80812D8; + } + } +} + +void sub_80812A0(u8 taskId) +{ + if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) + { + CheckShouldAdvanceLinkState(); + gTasks[taskId].func = sub_80812D8; + } +} + +void sub_80812D8(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_800A9A4(); + sub_8009FE8(); + DestroyTask(taskId); + } +} + +void sub_808130C(void) +{ + Field_AskSaveTheGame(); +} + +void sub_8081318(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + FadeScreen(FADE_TO_BLACK, 0); + gLinkType = LINKTYPE_BATTLE; + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + task->data[1]++; + if (task->data[1] > 20) + task->data[0]++; + break; + case 3: + Link_TryStartSend5FFF(); + task->data[0]++; + break; + case 4: + if (!gReceivedRemoteLinkPlayers) + task->data[0]++; + break; + case 5: + if (gLinkPlayers[0].trainerId & 1) + PlayMapChosenOrBattleBGM(MUS_BATTLE32); + else + PlayMapChosenOrBattleBGM(MUS_BATTLE20); + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; + break; + case USING_DOUBLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; + break; + case USING_MULTI_BATTLE: + ReducePlayerPartyToThree(); + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; + break; + } + CleanupOverworldWindowsAndTilemaps(); + gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + SetMainCallback2(CB2_InitBattle); + gMain.savedCallback = sub_8081668; + DestroyTask(taskId); + break; + } +} + +void sub_8081454(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + int i; + switch (data[0]) + { + case 0: + FadeScreen(FADE_TO_BLACK, 0); + gLinkType = LINKTYPE_BATTLE; + ClearLinkCallback_2(); + data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) + data[0] = 2; + break; + case 2: + SendBlock(0, &gLocalLinkPlayer, sizeof(struct LinkPlayer)); + data[0] = 3; + break; + case 3: + if (GetBlockReceivedStatus() == sub_800A8D4()) + { + for (i = 0; i < GetLinkPlayerCount(); i++) + { + gLinkPlayers[i] = *(struct LinkPlayer *)gBlockRecvBuffer[i]; + IntlConvertLinkPlayerName(&gLinkPlayers[i]); + ResetBlockReceivedFlag(i); + } + data[0] = 4; + } + break; + case 4: + data[1]++; + if (data[1] > 20) + data[0] = 5; + break; + case 5: + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + data[0] = 6; + break; + case 6: + if (IsLinkTaskFinished()) + data[0] = 7; + break; + case 7: + if (gLinkPlayers[0].trainerId & 1) + PlayMapChosenOrBattleBGM(MUS_BATTLE32); + else + PlayMapChosenOrBattleBGM(MUS_BATTLE20); + gLinkPlayers[0].linkType = LINKTYPE_BATTLE; + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; + break; + case USING_DOUBLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; + break; + case USING_MULTI_BATTLE: + ReducePlayerPartyToThree(); + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; + break; + } + CleanupOverworldWindowsAndTilemaps(); + gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + SetMainCallback2(CB2_InitBattle); + gMain.savedCallback = sub_8081668; + DestroyTask(taskId); + break; + } +} + +void sub_8081624(void) +{ + switch (gMain.state) + { + case 0: + Link_TryStartSend5FFF(); + gMain.state++; + break; + case 1: + if (IsLinkTaskFinished()) + SetMainCallback2(CB2_ReturnToField); + break; + } +} + +void sub_8081668(void) +{ + gBattleTypeFlags &= (u16)~BATTLE_TYPE_20; + sub_8055DB8(); + LoadPlayerParty(); + SavePlayerBag(); + Special_UpdateTrainerFansAfterLinkBattle(); + if (gSpecialVar_0x8004 != USING_MULTI_BATTLE) + { + TryRecordLinkBattleOutcome(gLocalLinkPlayerId ^ 1); + if (gWirelessCommType != 0) + { + switch (gBattleOutcome) + { + case B_OUTCOME_WON: + MEvent_RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + break; + case B_OUTCOME_LOST: + MEvent_RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + break; + } + } + } + if (InUnionRoom() == TRUE) + { + gMain.savedCallback = sub_8081624; + } + else + { + gMain.savedCallback = c2_8056854; + } + SetMainCallback2(CB2_SetUpSaveAfterLinkBattle); +} + +void CleanupLinkRoomState(void) +{ + if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE || gSpecialVar_0x8004 == USING_MULTI_BATTLE) + { + LoadPlayerParty(); + SavePlayerBag(); + } + copy_saved_warp2_bank_and_enter_x_to_warp1(127); +} + +void sub_8081770(void) +{ + sub_8057F5C(); +} + +void sub_808177C(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + ShowFieldMessage(CableClub_Text_PleaseWaitBCancel); + task->data[0] = 1; + break; + case 1: + if (IsFieldMessageBoxHidden()) + { + sub_8057F34(); + SetLocalLinkPlayerId(gSpecialVar_0x8005); + task->data[0] = 2; + } + break; + case 2: + switch (sub_8057EC0()) + { + case 0: + break; + case 1: + HideFieldMessageBox(); + task->data[0] = 0; + sub_8057F70(); + SwitchTaskToFollowupFunc(taskId); + break; + case 2: + task->data[0] = 3; + break; + } + break; + case 3: + sub_8057F48(); + sub_80F771C(TRUE); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +void sub_8081828(TaskFunc followUpFunc) +{ + u8 taskId = CreateTask(sub_808177C, 80); + SetTaskFuncWithFollowupFunc(taskId, sub_808177C, followUpFunc); + ScriptContext1_Stop(); +} + +void sub_8081850(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + ScriptContext2_Enable(); + FadeScreen(FADE_TO_BLACK, 0); + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + gSelectedTradeMonPositions[0] = 0; + gSelectedTradeMonPositions[1] = 0; + m4aMPlayAllStop(); + Link_TryStartSend5FFF(); + task->data[0]++; + break; + case 3: + if (!gReceivedRemoteLinkPlayers) + { + SetMainCallback2(CB2_ReturnFromLinkTrade); + DestroyTask(taskId); + } + break; + } +} + +void sub_80818E8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + switch (data[0]) + { + case 0: + ScriptContext2_Enable(); + FadeScreen(FADE_TO_BLACK, 0); + Rfu_set_zero(); + data[0]++; + break; + case 1: + if (!gPaletteFade.active) + data[0]++; + break; + case 2: + gSelectedTradeMonPositions[0] = 0; + gSelectedTradeMonPositions[1] = 0; + m4aMPlayAllStop(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + data[0]++; + break; + case 3: + if (IsLinkTaskFinished()) + { + UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(); + DestroyTask(taskId); + } + break; + } +} + +void EnterTradeSeat(void) +{ + if (gWirelessCommType) + sub_8081828(sub_80818E8); + else + sub_8081828(sub_8081850); +} + +void sub_80819A4(void) +{ + CreateTask(sub_8081850, 80); +} + +void sub_80819B8(void) +{ + sub_80819A4(); + ScriptContext1_Stop(); +} + +void EnterColosseumPlayerSpot(void) +{ + gLinkType = LINKTYPE_BATTLE; + if (gWirelessCommType) + sub_8081828(sub_8081454); + else + sub_8081828(sub_8081318); +} + +void sub_8081A04(void) +{ + CreateTask(sub_808177C, 80); + ScriptContext1_Stop(); +} + +void Script_ShowLinkTrainerCard(void) +{ + ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +bool32 sub_8081A34(u8 who) +{ + u8 stars; + gSpecialVar_0x8006 = who; + StringCopy(gStringVar1, gLinkPlayers[who].name); + stars = GetTrainerCardStars(who); + if (stars == 0) + return FALSE; + StringCopy(gStringVar2, gUnknown_83C6AB8[stars - 1]); + return TRUE; +} + +void sub_8081A90(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + task->data[0]++; + if (task->data[0] > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + DestroyTask(taskId); + } + if (gReceivedRemoteLinkPlayers) + DestroyTask(taskId); +} + +void sub_8081AE4(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void sub_8081B08(u8 taskId) +{ + Link_TryStartSend5FFF(); + gTasks[taskId].func = sub_8081AE4; +} -- cgit v1.2.3 From 13687bb97fe2332c7d81059a2cbee42a4905da15 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 29 Feb 2020 16:35:23 -0500 Subject: Static symbols in cable_club.c --- src/cable_club.c | 114 +++++++++++++++++++++++++++---------------------------- 1 file changed, 57 insertions(+), 57 deletions(-) (limited to 'src') diff --git a/src/cable_club.c b/src/cable_club.c index 246e08a3b..1762366a7 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -28,23 +28,23 @@ u32 UnusedVarNeededToMatch; -void sub_80809F8(u8 taskId); -void sub_8080A4C(u8 taskId); -void sub_8080AD0(u8 taskId); -void sub_8080B20(u8 taskId); -void sub_8080BC8(u8 taskId); -void sub_8080C6C(u8 taskId); -void sub_8080CDC(u8 taskId); -void sub_8080DC0(u8 taskId); -void sub_8080E6C(u8 taskId); -void sub_8080F78(u8 taskId); -void sub_8080FB4(u8 taskId); -void sub_8080FF0(u8 taskId); -bool8 sub_808102C(u8 taskId); -void sub_80811FC(u8 taskId); -void sub_808124C(u8 taskId); -void sub_80812A0(u8 taskId); -void sub_80812D8(u8 taskId); +static void sub_80809F8(u8 taskId); +static void sub_8080A4C(u8 taskId); +static void sub_8080AD0(u8 taskId); +static void sub_8080B20(u8 taskId); +static void sub_8080BC8(u8 taskId); +static void sub_8080C6C(u8 taskId); +static void sub_8080CDC(u8 taskId); +static void sub_8080DC0(u8 taskId); +static void sub_8080E6C(u8 taskId); +static void sub_8080F78(u8 taskId); +static void sub_8080FB4(u8 taskId); +static void sub_8080FF0(u8 taskId); +static bool8 sub_808102C(u8 taskId); +static void sub_80811FC(u8 taskId); +static void sub_808124C(u8 taskId); +static void sub_80812A0(u8 taskId); +static void sub_80812D8(u8 taskId); static const struct WindowTemplate gUnknown_83C6AB0 = { .bg = 0, @@ -56,14 +56,14 @@ static const struct WindowTemplate gUnknown_83C6AB0 = { .baseBlock = 0x125 }; -const u8 *const gUnknown_83C6AB8[] = { +static const u8 *const gUnknown_83C6AB8[] = { gUnknown_841DF8B, gUnknown_841DF92, gUnknown_841DF99, gUnknown_841DFA0 }; -void sub_8080748(u8 lower, u8 higher) +static void sub_8080748(u8 lower, u8 higher) { u8 taskId; if (FindTaskIdByFunc(sub_80809F8) == 0xFF) @@ -74,7 +74,7 @@ void sub_8080748(u8 lower, u8 higher) } } -void sub_808078C(u16 windowId, s32 num) +static void sub_808078C(u16 windowId, s32 num) { ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEFT_ALIGN, 1); SetStdWindowBorderStyle(windowId, FALSE); @@ -83,13 +83,13 @@ void sub_808078C(u16 windowId, s32 num) CopyWindowToVram(windowId, 3); } -void sub_80807E8(u16 windowId) +static void sub_80807E8(u16 windowId) { ClearStdWindowAndFrame(windowId, FALSE); CopyWindowToVram(windowId, 3); } -void sub_8080808(u8 taskId, u8 num) +static void sub_8080808(u8 taskId, u8 num) { s16 *data = gTasks[taskId].data; if (num != data[3]) @@ -102,7 +102,7 @@ void sub_8080808(u8 taskId, u8 num) } } -u16 sub_8080844(u8 lower, u8 higher) +static u16 sub_8080844(u8 lower, u8 higher) { switch (GetLinkPlayerDataExchangeStatusTimed(lower, higher)) { @@ -122,7 +122,7 @@ u16 sub_8080844(u8 lower, u8 higher) } } -bool32 sub_80808BC(u8 taskId) +static bool32 sub_80808BC(u8 taskId) { if (HasLinkErrorOccurred() == TRUE) { @@ -132,7 +132,7 @@ bool32 sub_80808BC(u8 taskId) return FALSE; } -bool32 sub_80808F0(u8 taskId) +static bool32 sub_80808F0(u8 taskId) { if (JOY_NEW(B_BUTTON) && !IsLinkConnectionEstablished()) { @@ -143,7 +143,7 @@ bool32 sub_80808F0(u8 taskId) return FALSE; } -bool32 sub_808093C(u8 taskId) +static bool32 sub_808093C(u8 taskId) { if (IsLinkConnectionEstablished()) { @@ -158,7 +158,7 @@ bool32 sub_808093C(u8 taskId) return FALSE; } -bool32 sub_8080990(u8 taskId) +static bool32 sub_8080990(u8 taskId) { if (GetSioMultiSI() == TRUE) { @@ -168,7 +168,7 @@ bool32 sub_8080990(u8 taskId) return FALSE; } -void sub_80809C4(u8 taskId) +static void sub_80809C4(u8 taskId) { gTasks[taskId].data[0]++; if (gTasks[taskId].data[0] == 10) @@ -178,7 +178,7 @@ void sub_80809C4(u8 taskId) } } -void sub_80809F8(u8 taskId) +static void sub_80809F8(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) @@ -195,7 +195,7 @@ void sub_80809F8(u8 taskId) data[0]++; } -void sub_8080A4C(u8 taskId) +static void sub_8080A4C(u8 taskId) { u8 linkPlayerCount = GetLinkPlayerCount_2(); if (sub_80808F0(taskId) != TRUE && sub_808093C(taskId) != TRUE && linkPlayerCount >= 2) @@ -217,7 +217,7 @@ void sub_8080A4C(u8 taskId) } } -void sub_8080AD0(u8 taskId) +static void sub_8080AD0(u8 taskId) { if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) { @@ -226,7 +226,7 @@ void sub_8080AD0(u8 taskId) } } -void sub_8080B20(u8 taskId) +static void sub_8080B20(u8 taskId) { s16 *data = gTasks[taskId].data; s32 linkPlayerCount = GetLinkPlayerCount_2(); @@ -244,7 +244,7 @@ void sub_8080B20(u8 taskId) } } -void sub_8080BC8(u8 taskId) +static void sub_8080BC8(u8 taskId) { if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) { @@ -267,7 +267,7 @@ void sub_8080BC8(u8 taskId) } } -void sub_8080C6C(u8 taskId) +static void sub_8080C6C(u8 taskId) { u8 lower = gTasks[taskId].data[1]; u8 higher = gTasks[taskId].data[2]; @@ -288,7 +288,7 @@ void sub_8080C6C(u8 taskId) } } -void sub_8080CDC(u8 taskId) +static void sub_8080CDC(u8 taskId) { u8 lower = gTasks[taskId].data[1]; u8 higher = gTasks[taskId].data[2]; @@ -323,7 +323,7 @@ void sub_8080CDC(u8 taskId) } } -bool32 sub_8080D8C(void) +static bool32 sub_8080D8C(void) { int i; u16 version; @@ -337,7 +337,7 @@ bool32 sub_8080D8C(void) return FALSE; } -void sub_8080DC0(u8 taskId) +static void sub_8080DC0(u8 taskId) { if (sub_80808BC(taskId) != TRUE) { @@ -374,7 +374,7 @@ void sub_8080DC0(u8 taskId) } } -void sub_8080E6C(u8 taskId) +static void sub_8080E6C(u8 taskId) { u8 i; u16 version; @@ -416,7 +416,7 @@ void sub_8080E6C(u8 taskId) } } -void sub_8080F78(u8 taskId) +static void sub_8080F78(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { @@ -427,7 +427,7 @@ void sub_8080F78(u8 taskId) } } -void sub_8080FB4(u8 taskId) +static void sub_8080FB4(u8 taskId) { gSpecialVar_Result = 5; sub_80807E8(gTasks[taskId].data[5]); @@ -436,7 +436,7 @@ void sub_8080FB4(u8 taskId) DestroyTask(taskId); } -void sub_8080FF0(u8 taskId) +static void sub_8080FF0(u8 taskId) { gSpecialVar_Result = 6; sub_80807E8(gTasks[taskId].data[5]); @@ -445,7 +445,7 @@ void sub_8080FF0(u8 taskId) DestroyTask(taskId); } -bool8 sub_808102C(u8 taskId) +static bool8 sub_808102C(u8 taskId) { gTasks[taskId].data[4]++; if (gTasks[taskId].data[4] > 600) @@ -525,7 +525,7 @@ u8 sub_8081150(void) return CreateTask(sub_80811FC, 80); } -void sub_80811FC(u8 taskId) +static void sub_80811FC(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) @@ -539,7 +539,7 @@ void sub_80811FC(u8 taskId) data[0]++; } -void sub_808124C(u8 taskId) +static void sub_808124C(u8 taskId) { if (GetLinkPlayerCount_2() >= 2) { @@ -554,7 +554,7 @@ void sub_808124C(u8 taskId) } } -void sub_80812A0(u8 taskId) +static void sub_80812A0(u8 taskId) { if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) { @@ -563,7 +563,7 @@ void sub_80812A0(u8 taskId) } } -void sub_80812D8(u8 taskId) +static void sub_80812D8(u8 taskId) { if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) { @@ -578,7 +578,7 @@ void sub_808130C(void) Field_AskSaveTheGame(); } -void sub_8081318(u8 taskId) +static void sub_8081318(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -633,7 +633,7 @@ void sub_8081318(u8 taskId) } } -void sub_8081454(u8 taskId) +static void sub_8081454(u8 taskId) { s16 *data = gTasks[taskId].data; int i; @@ -706,7 +706,7 @@ void sub_8081454(u8 taskId) } } -void sub_8081624(void) +static void sub_8081624(void) { switch (gMain.state) { @@ -770,7 +770,7 @@ void sub_8081770(void) sub_8057F5C(); } -void sub_808177C(u8 taskId) +static void sub_808177C(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -812,14 +812,14 @@ void sub_808177C(u8 taskId) } } -void sub_8081828(TaskFunc followUpFunc) +static void sub_8081828(TaskFunc followUpFunc) { u8 taskId = CreateTask(sub_808177C, 80); SetTaskFuncWithFollowupFunc(taskId, sub_808177C, followUpFunc); ScriptContext1_Stop(); } -void sub_8081850(u8 taskId) +static void sub_8081850(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -851,7 +851,7 @@ void sub_8081850(u8 taskId) } } -void sub_80818E8(u8 taskId) +static void sub_80818E8(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) @@ -891,7 +891,7 @@ void EnterTradeSeat(void) sub_8081828(sub_8081850); } -void sub_80819A4(void) +static void sub_80819A4(void) { CreateTask(sub_8081850, 80); } @@ -911,7 +911,7 @@ void EnterColosseumPlayerSpot(void) sub_8081828(sub_8081318); } -void sub_8081A04(void) +static void sub_8081A04(void) { CreateTask(sub_808177C, 80); ScriptContext1_Stop(); @@ -948,7 +948,7 @@ void sub_8081A90(u8 taskId) DestroyTask(taskId); } -void sub_8081AE4(u8 taskId) +static void sub_8081AE4(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { @@ -957,7 +957,7 @@ void sub_8081AE4(u8 taskId) } } -void sub_8081B08(u8 taskId) +static void sub_8081B08(u8 taskId) { Link_TryStartSend5FFF(); gTasks[taskId].func = sub_8081AE4; -- cgit v1.2.3 From cbd380f2bf6738ec9222a2284e9de2297f0dc413 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 29 Feb 2020 17:01:03 -0500 Subject: Name many functions in cable_club.c --- src/cable_club.c | 220 ++++++++++++++++++++++----------------------- src/field_fadetransition.c | 4 +- src/union_room.c | 2 +- 3 files changed, 113 insertions(+), 113 deletions(-) (limited to 'src') diff --git a/src/cable_club.c b/src/cable_club.c index 1762366a7..c2f87a7a7 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -28,23 +28,23 @@ u32 UnusedVarNeededToMatch; -static void sub_80809F8(u8 taskId); -static void sub_8080A4C(u8 taskId); -static void sub_8080AD0(u8 taskId); -static void sub_8080B20(u8 taskId); -static void sub_8080BC8(u8 taskId); -static void sub_8080C6C(u8 taskId); -static void sub_8080CDC(u8 taskId); -static void sub_8080DC0(u8 taskId); -static void sub_8080E6C(u8 taskId); -static void sub_8080F78(u8 taskId); -static void sub_8080FB4(u8 taskId); -static void sub_8080FF0(u8 taskId); -static bool8 sub_808102C(u8 taskId); -static void sub_80811FC(u8 taskId); -static void sub_808124C(u8 taskId); -static void sub_80812A0(u8 taskId); -static void sub_80812D8(u8 taskId); +static void Task_Linkup0(u8 taskId); +static void Task_Linkup1(u8 taskId); +static void Task_LinkupMaster_2(u8 taskId); +static void Task_LinkupMaster_3(u8 taskId); +static void Task_LinkupMaster_4(u8 taskId); +static void Task_LinkupMaster_5(u8 taskId); +static void Task_LinkupSlave_2(u8 taskId); +static void Task_LinkupMaster_6(u8 taskId); +static void Task_Linkup_6a(u8 taskId); +static void Task_Linkup_7(u8 taskId); +static void Task_Linkup_Canceled(u8 taskId); +static void Task_Linkup_ErroredOut(u8 taskId); +static bool8 Task_Linkup_TimedOut(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_0(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_1(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_Master(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_2(u8 taskId); static const struct WindowTemplate gUnknown_83C6AB0 = { .bg = 0, @@ -56,25 +56,25 @@ static const struct WindowTemplate gUnknown_83C6AB0 = { .baseBlock = 0x125 }; -static const u8 *const gUnknown_83C6AB8[] = { +static const u8 *const sStarsMessagePtrs[] = { gUnknown_841DF8B, gUnknown_841DF92, gUnknown_841DF99, gUnknown_841DFA0 }; -static void sub_8080748(u8 lower, u8 higher) +static void CreateLinkupTask(u8 lower, u8 higher) { u8 taskId; - if (FindTaskIdByFunc(sub_80809F8) == 0xFF) + if (FindTaskIdByFunc(Task_Linkup0) == 0xFF) { - taskId = CreateTask(sub_80809F8, 80); + taskId = CreateTask(Task_Linkup0, 80); gTasks[taskId].data[1] = lower; gTasks[taskId].data[2] = higher; } } -static void sub_808078C(u16 windowId, s32 num) +static void PrintNewCountOnLinkPlayerCountDisplayWindow(u16 windowId, s32 num) { ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEFT_ALIGN, 1); SetStdWindowBorderStyle(windowId, FALSE); @@ -83,21 +83,21 @@ static void sub_808078C(u16 windowId, s32 num) CopyWindowToVram(windowId, 3); } -static void sub_80807E8(u16 windowId) +static void DestroyLinkPlayerCountDisplayWindow(u16 windowId) { ClearStdWindowAndFrame(windowId, FALSE); CopyWindowToVram(windowId, 3); } -static void sub_8080808(u8 taskId, u8 num) +static void UpdateLinkPlayerCountDisplay(u8 taskId, u8 num) { s16 *data = gTasks[taskId].data; if (num != data[3]) { if (num < 2) - sub_80807E8(data[5]); + DestroyLinkPlayerCountDisplayWindow(data[5]); else - sub_808078C(data[5], num); + PrintNewCountOnLinkPlayerCountDisplayWindow(data[5], num); data[3] = num; } } @@ -126,7 +126,7 @@ static bool32 sub_80808BC(u8 taskId) { if (HasLinkErrorOccurred() == TRUE) { - gTasks[taskId].func = sub_8080FF0; + gTasks[taskId].func = Task_Linkup_ErroredOut; return TRUE; } return FALSE; @@ -137,7 +137,7 @@ static bool32 sub_80808F0(u8 taskId) if (JOY_NEW(B_BUTTON) && !IsLinkConnectionEstablished()) { gLinkType = 0; - gTasks[taskId].func = sub_8080FB4; + gTasks[taskId].func = Task_Linkup_Canceled; return TRUE; } return FALSE; @@ -152,7 +152,7 @@ static bool32 sub_808093C(u8 taskId) if (JOY_NEW(B_BUTTON)) { gLinkType = 0; - gTasks[taskId].func = sub_8080FB4; + gTasks[taskId].func = Task_Linkup_Canceled; return TRUE; } return FALSE; @@ -162,7 +162,7 @@ static bool32 sub_8080990(u8 taskId) { if (GetSioMultiSI() == TRUE) { - gTasks[taskId].func = sub_8080FF0; + gTasks[taskId].func = Task_Linkup_ErroredOut; return TRUE; } return FALSE; @@ -178,7 +178,7 @@ static void sub_80809C4(u8 taskId) } } -static void sub_80809F8(u8 taskId) +static void Task_Linkup0(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) @@ -190,12 +190,12 @@ static void sub_80809F8(u8 taskId) } else if (data[0] > 9) { - gTasks[taskId].func = sub_8080A4C; + gTasks[taskId].func = Task_Linkup1; } data[0]++; } -static void sub_8080A4C(u8 taskId) +static void Task_Linkup1(u8 taskId) { u8 linkPlayerCount = GetLinkPlayerCount_2(); if (sub_80808F0(taskId) != TRUE && sub_808093C(taskId) != TRUE && linkPlayerCount >= 2) @@ -206,89 +206,89 @@ static void sub_8080A4C(u8 taskId) { PlaySE(SE_PIN); ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); - gTasks[taskId].func = sub_8080AD0; + gTasks[taskId].func = Task_LinkupMaster_2; } else { PlaySE(SE_BOO); ShowFieldAutoScrollMessage(CableClub_Text_AwaitingLinkupBCancel); - gTasks[taskId].func = sub_8080CDC; + gTasks[taskId].func = Task_LinkupSlave_2; } } } -static void sub_8080AD0(u8 taskId) +static void Task_LinkupMaster_2(u8 taskId) { if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) { gTasks[taskId].data[3] = 0; - gTasks[taskId].func = sub_8080B20; + gTasks[taskId].func = Task_LinkupMaster_3; } } -static void sub_8080B20(u8 taskId) +static void Task_LinkupMaster_3(u8 taskId) { s16 *data = gTasks[taskId].data; s32 linkPlayerCount = GetLinkPlayerCount_2(); if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE) { - sub_8080808(taskId, linkPlayerCount); + UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount); if (JOY_NEW(A_BUTTON) && linkPlayerCount >= data[1]) { sub_800A900(linkPlayerCount); - sub_80807E8(data[5]); + DestroyLinkPlayerCountDisplayWindow(data[5]); ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); ShowFieldAutoScrollMessage(CableClub_Text_StartLinkWithXPlayersAConfirmBCancel); - gTasks[taskId].func = sub_8080BC8; + gTasks[taskId].func = Task_LinkupMaster_4; } } } -static void sub_8080BC8(u8 taskId) +static void Task_LinkupMaster_4(u8 taskId) { if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) { if (GetSavedPlayerCount() != GetLinkPlayerCount_2()) { ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); - gTasks[taskId].func = sub_8080AD0; + gTasks[taskId].func = Task_LinkupMaster_2; } else if (JOY_HELD(B_BUTTON)) { ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); - gTasks[taskId].func = sub_8080AD0; + gTasks[taskId].func = Task_LinkupMaster_2; } else if (JOY_HELD(A_BUTTON)) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); - gTasks[taskId].func = sub_8080C6C; + gTasks[taskId].func = Task_LinkupMaster_5; } } } -static void sub_8080C6C(u8 taskId) +static void Task_LinkupMaster_5(u8 taskId) { u8 lower = gTasks[taskId].data[1]; u8 higher = gTasks[taskId].data[2]; u16 *res; - if (sub_80808BC(taskId) != TRUE && sub_808102C(taskId) != TRUE) + if (sub_80808BC(taskId) != TRUE && Task_Linkup_TimedOut(taskId) != TRUE) { if (GetLinkPlayerCount_2() != GetSavedPlayerCount()) { - gTasks[taskId].func = sub_8080FF0; + gTasks[taskId].func = Task_Linkup_ErroredOut; } else { res = &gSpecialVar_Result; *res = sub_8080844(lower, higher); if (*res) - gTasks[taskId].func = sub_8080DC0; + gTasks[taskId].func = Task_LinkupMaster_6; } } } -static void sub_8080CDC(u8 taskId) +static void Task_LinkupSlave_2(u8 taskId) { u8 lower = gTasks[taskId].data[1]; u8 higher = gTasks[taskId].data[2]; @@ -303,13 +303,13 @@ static void sub_8080CDC(u8 taskId) { Link_TryStartSend5FFF(); HideFieldMessageBox(); - gTasks[taskId].func = sub_8080F78; + gTasks[taskId].func = Task_Linkup_7; } else if (*res == 7 || *res == 9) { CloseLink(); HideFieldMessageBox(); - gTasks[taskId].func = sub_8080F78; + gTasks[taskId].func = Task_Linkup_7; } else { @@ -317,13 +317,13 @@ static void sub_8080CDC(u8 taskId) gLocalLinkPlayerId = GetMultiplayerId(); sub_800A900(gFieldLinkPlayerCount); TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); - gTasks[taskId].func = sub_8080E6C; + gTasks[taskId].func = Task_Linkup_6a; } } } } -static bool32 sub_8080D8C(void) +static bool32 AnyConnectedPartnersPlayingRS(void) { int i; u16 version; @@ -337,30 +337,30 @@ static bool32 sub_8080D8C(void) return FALSE; } -static void sub_8080DC0(u8 taskId) +static void Task_LinkupMaster_6(u8 taskId) { if (sub_80808BC(taskId) != TRUE) { if (gSpecialVar_Result == 4) { - if (sub_8080D8C() == TRUE) + if (AnyConnectedPartnersPlayingRS() == TRUE) CloseLink(); else Link_TryStartSend5FFF(); HideFieldMessageBox(); - gTasks[taskId].func = sub_8080F78; + gTasks[taskId].func = Task_Linkup_7; } else if (gSpecialVar_Result == 3) { Link_TryStartSend5FFF(); HideFieldMessageBox(); - gTasks[taskId].func = sub_8080F78; + gTasks[taskId].func = Task_Linkup_7; } else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9) { CloseLink(); HideFieldMessageBox(); - gTasks[taskId].func = sub_8080F78; + gTasks[taskId].func = Task_Linkup_7; } else { @@ -368,13 +368,13 @@ static void sub_8080DC0(u8 taskId) gLocalLinkPlayerId = GetMultiplayerId(); sub_800A900(gFieldLinkPlayerCount); TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); - gTasks[taskId].func = sub_8080E6C; + gTasks[taskId].func = Task_Linkup_6a; sub_800A474(2); } } } -static void sub_8080E6C(u8 taskId) +static void Task_Linkup_6a(u8 taskId) { u8 i; u16 version; @@ -404,53 +404,53 @@ static void sub_8080E6C(u8 taskId) // Dumb trick required to match if (gLinkType == LINKTYPE_0x4411) UnusedVarNeededToMatch += 0; - sub_80807E8(gTasks[taskId].data[5]); + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); EnableBothScriptContexts(); DestroyTask(taskId); } else { Link_TryStartSend5FFF(); - gTasks[taskId].func = sub_8080F78; + gTasks[taskId].func = Task_Linkup_7; } } } -static void sub_8080F78(u8 taskId) +static void Task_Linkup_7(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { - sub_80807E8(gTasks[taskId].data[5]); + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); EnableBothScriptContexts(); RemoveWindow(gTasks[taskId].data[5]); DestroyTask(taskId); } } -static void sub_8080FB4(u8 taskId) +static void Task_Linkup_Canceled(u8 taskId) { gSpecialVar_Result = 5; - sub_80807E8(gTasks[taskId].data[5]); + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); HideFieldMessageBox(); EnableBothScriptContexts(); DestroyTask(taskId); } -static void sub_8080FF0(u8 taskId) +static void Task_Linkup_ErroredOut(u8 taskId) { gSpecialVar_Result = 6; - sub_80807E8(gTasks[taskId].data[5]); + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); HideFieldMessageBox(); EnableBothScriptContexts(); DestroyTask(taskId); } -static bool8 sub_808102C(u8 taskId) +static bool8 Task_Linkup_TimedOut(u8 taskId) { gTasks[taskId].data[4]++; if (gTasks[taskId].data[4] > 600) { - gTasks[taskId].func = sub_8080FF0; + gTasks[taskId].func = Task_Linkup_ErroredOut; return TRUE; } return FALSE; @@ -475,14 +475,14 @@ void TryBattleLinkup(void) gLinkType = LINKTYPE_MULTI_BATTLE; break; } - sub_8080748(lower, higher); + CreateLinkupTask(lower, higher); } void TryTradeLinkup(void) { gLinkType = LINKTYPE_0x1133; gBattleTypeFlags = 0; - sub_8080748(2, 2); + CreateLinkupTask(2, 2); } void TryRecordMixLinkup(void) @@ -490,19 +490,19 @@ void TryRecordMixLinkup(void) gSpecialVar_Result = 0; gLinkType = LINKTYPE_0x3311; gBattleTypeFlags = 0; - sub_8080748(2, 4); + CreateLinkupTask(2, 4); } void sub_8081128(void) { gLinkType = LINKTYPE_0x6601; gBattleTypeFlags = 0; - sub_8080748(4, 4); + CreateLinkupTask(4, 4); } -u8 sub_8081150(void) +u8 CreateTask_ReestablishLinkInCableClubRoom(void) { - if (FuncIsActiveTask(sub_80811FC)) + if (FuncIsActiveTask(Task_ReestablishLinkInCableClubRoom_0)) return 0xFF; switch (gSpecialVar_0x8004) { @@ -522,10 +522,10 @@ u8 sub_8081150(void) gLinkType = LINKTYPE_0x3322; break; } - return CreateTask(sub_80811FC, 80); + return CreateTask(Task_ReestablishLinkInCableClubRoom_0, 80); } -static void sub_80811FC(u8 taskId) +static void Task_ReestablishLinkInCableClubRoom_0(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) @@ -535,35 +535,35 @@ static void sub_80811FC(u8 taskId) CreateTask(sub_8081A90, 80); } else if (data[0] > 9) - gTasks[taskId].func = sub_808124C; + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_1; data[0]++; } -static void sub_808124C(u8 taskId) +static void Task_ReestablishLinkInCableClubRoom_1(u8 taskId) { if (GetLinkPlayerCount_2() >= 2) { if (IsLinkMaster() == TRUE) { - gTasks[taskId].func = sub_80812A0; + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_Master; } else { - gTasks[taskId].func = sub_80812D8; + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_2; } } } -static void sub_80812A0(u8 taskId) +static void Task_ReestablishLinkInCableClubRoom_Master(u8 taskId) { if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) { CheckShouldAdvanceLinkState(); - gTasks[taskId].func = sub_80812D8; + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_2; } } -static void sub_80812D8(u8 taskId) +static void Task_ReestablishLinkInCableClubRoom_2(u8 taskId) { if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) { @@ -573,12 +573,12 @@ static void sub_80812D8(u8 taskId) } } -void sub_808130C(void) +void Special_CableClub_AskSaveTheGame(void) { Field_AskSaveTheGame(); } -static void sub_8081318(u8 taskId) +static void Task_StartWiredCableClubBattle(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -627,13 +627,13 @@ static void sub_8081318(u8 taskId) CleanupOverworldWindowsAndTilemaps(); gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; SetMainCallback2(CB2_InitBattle); - gMain.savedCallback = sub_8081668; + gMain.savedCallback = CB2_ReturnFromCableClubBattle; DestroyTask(taskId); break; } } -static void sub_8081454(u8 taskId) +static void Task_StartWirelessCableClubBattle(u8 taskId) { s16 *data = gTasks[taskId].data; int i; @@ -700,7 +700,7 @@ static void sub_8081454(u8 taskId) CleanupOverworldWindowsAndTilemaps(); gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; SetMainCallback2(CB2_InitBattle); - gMain.savedCallback = sub_8081668; + gMain.savedCallback = CB2_ReturnFromCableClubBattle; DestroyTask(taskId); break; } @@ -721,7 +721,7 @@ static void sub_8081624(void) } } -void sub_8081668(void) +void CB2_ReturnFromCableClubBattle(void) { gBattleTypeFlags &= (u16)~BATTLE_TYPE_20; sub_8055DB8(); @@ -770,7 +770,7 @@ void sub_8081770(void) sub_8057F5C(); } -static void sub_808177C(u8 taskId) +static void Task_EnterCableClubSeat(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -812,14 +812,14 @@ static void sub_808177C(u8 taskId) } } -static void sub_8081828(TaskFunc followUpFunc) +static void CreateEnterCableClubSeatTaskWithFollowupFunc(TaskFunc followUpFunc) { - u8 taskId = CreateTask(sub_808177C, 80); - SetTaskFuncWithFollowupFunc(taskId, sub_808177C, followUpFunc); + u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); + SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followUpFunc); ScriptContext1_Stop(); } -static void sub_8081850(u8 taskId) +static void Task_StartWiredCableClubTrade(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -851,7 +851,7 @@ static void sub_8081850(u8 taskId) } } -static void sub_80818E8(u8 taskId) +static void Task_StartWirelessCableClubTrade(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) @@ -886,19 +886,19 @@ static void sub_80818E8(u8 taskId) void EnterTradeSeat(void) { if (gWirelessCommType) - sub_8081828(sub_80818E8); + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWirelessCableClubTrade); else - sub_8081828(sub_8081850); + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWiredCableClubTrade); } -static void sub_80819A4(void) +static void CreateTask_StartWiredCableClubTrade(void) { - CreateTask(sub_8081850, 80); + CreateTask(Task_StartWiredCableClubTrade, 80); } -void sub_80819B8(void) +void Special_WiredCableClubTrade(void) { - sub_80819A4(); + CreateTask_StartWiredCableClubTrade(); ScriptContext1_Stop(); } @@ -906,14 +906,14 @@ void EnterColosseumPlayerSpot(void) { gLinkType = LINKTYPE_BATTLE; if (gWirelessCommType) - sub_8081828(sub_8081454); + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWirelessCableClubBattle); else - sub_8081828(sub_8081318); + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWiredCableClubBattle); } -static void sub_8081A04(void) +static void Debug_CreateTaskEnterCableClubSeat(void) { - CreateTask(sub_808177C, 80); + CreateTask(Task_EnterCableClubSeat, 80); ScriptContext1_Stop(); } @@ -922,7 +922,7 @@ void Script_ShowLinkTrainerCard(void) ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); } -bool32 sub_8081A34(u8 who) +bool32 GetSeeingLinkPlayerCardMsg(u8 who) { u8 stars; gSpecialVar_0x8006 = who; @@ -930,7 +930,7 @@ bool32 sub_8081A34(u8 who) stars = GetTrainerCardStars(who); if (stars == 0) return FALSE; - StringCopy(gStringVar2, gUnknown_83C6AB8[stars - 1]); + StringCopy(gStringVar2, sStarsMessagePtrs[stars - 1]); return TRUE; } diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 16f691a2d..3118061d8 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -172,7 +172,7 @@ static void task_mpl_807DD60(u8 taskId) switch (task->data[0]) { case 0: - task->data[1] = sub_8081150(); + task->data[1] = CreateTask_ReestablishLinkInCableClubRoom(); task->data[0]++; break; case 1: @@ -192,7 +192,7 @@ static void task_mpl_807DD60(u8 taskId) } } -void sub_807DDD0(void) +void FieldCB_ReturnToFieldWiredLink(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); diff --git a/src/union_room.c b/src/union_room.c index 40582ef0d..03517b408 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1848,7 +1848,7 @@ void StartUnionRoomBattle(u16 battleFlags) gLinkPlayers[0].linkType = LINKTYPE_BATTLE; gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId(); gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1; - gMain.savedCallback = sub_8081668; + gMain.savedCallback = CB2_ReturnFromCableClubBattle; gBattleTypeFlags = battleFlags; PlayBattleBGM(); } -- cgit v1.2.3 From c36ef94a0dae1e60a8e641aced35ee2084c183eb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 29 Feb 2020 21:00:31 -0500 Subject: address review comments --- src/cable_club.c | 6 +++--- src/union_room.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/cable_club.c b/src/cable_club.c index c2f87a7a7..e7277ed07 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -26,7 +26,7 @@ #include "constants/cable_club.h" #include "constants/field_weather.h" -u32 UnusedVarNeededToMatch; +u32 UnusedVarNeededToMatch[8]; static void Task_Linkup0(u8 taskId); static void Task_Linkup1(u8 taskId); @@ -403,7 +403,7 @@ static void Task_Linkup_6a(u8 taskId) { // Dumb trick required to match if (gLinkType == LINKTYPE_0x4411) - UnusedVarNeededToMatch += 0; + *UnusedVarNeededToMatch += 0; DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); EnableBothScriptContexts(); DestroyTask(taskId); @@ -876,7 +876,7 @@ static void Task_StartWirelessCableClubTrade(u8 taskId) case 3: if (IsLinkTaskFinished()) { - UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(); + UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(); DestroyTask(taskId); } break; diff --git a/src/union_room.c b/src/union_room.c index 03517b408..f4169b65b 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1735,7 +1735,7 @@ static void Task_CallCB2ReturnFromLinkTrade(u8 taskId) DestroyTask(taskId); } -u8 UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(void) +u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void) { u8 taskId = CreateTask(Task_CallCB2ReturnFromLinkTrade, 0); -- cgit v1.2.3