summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-10-15 12:05:19 -0400
committerGriffinR <griffin.g.richards@gmail.com>2021-10-15 12:22:19 -0400
commite3bb257bcf4ec855a0a45794c2838f0e2b5708f5 (patch)
tree3aae3d8d7449ba5d645372cdc24ef626fe012513 /src
parentc02001c46d4ea55db8b59f91413627800d5674e8 (diff)
Fix some trainer card link access
Diffstat (limited to 'src')
-rw-r--r--src/cable_club.c6
-rwxr-xr-xsrc/trainer_card.c34
-rw-r--r--src/union_room.c15
3 files changed, 29 insertions, 26 deletions
diff --git a/src/cable_club.c b/src/cable_club.c
index 8db583989..3a4f723ea 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -372,7 +372,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId)
gLocalLinkPlayerId = GetMultiplayerId();
SaveLinkPlayers(gFieldLinkPlayerCount);
card = (struct TrainerCard *)gBlockSendBuffer;
- TrainerCard_GenerateCardForPlayer(card);
+ TrainerCard_GenerateCardForLinkPlayer(card);
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
@@ -420,7 +420,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
gLocalLinkPlayerId = GetMultiplayerId();
SaveLinkPlayers(gFieldLinkPlayerCount);
card = (struct TrainerCard *)gBlockSendBuffer;
- TrainerCard_GenerateCardForPlayer(card);
+ TrainerCard_GenerateCardForLinkPlayer(card);
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
@@ -518,7 +518,7 @@ static void Task_LinkupAwaitTrainerCardData(u8 taskId)
for (index = 0; index < GetLinkPlayerCount(); index++)
{
- CopyTrainerCardData(&gTrainerCards[index], gBlockRecvBuffer[index], gLinkPlayers[index].version);
+ CopyTrainerCardData(&gTrainerCards[index], (struct TrainerCard *)gBlockRecvBuffer[index], gLinkPlayers[index].version);
}
SetSuppressLinkErrorMessage(FALSE);
diff --git a/src/trainer_card.c b/src/trainer_card.c
index c11ee83c0..bad015644 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -110,7 +110,7 @@ static bool8 HasAllFrontierSymbols(void);
static u8 GetRubyTrainerStars(struct TrainerCard*);
static u16 GetCaughtMonsCount(void);
static void SetPlayerCardData(struct TrainerCard*, u8);
-static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard*);
+static void TrainerCard_GenerateCardForPlayer(struct TrainerCard*);
static u8 VersionToCardType(u8);
static void SetDataFromTrainerCard(void);
static void InitGpuRegs(void);
@@ -750,14 +750,14 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType)
}
}
-static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
+static void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
{
memset(trainerCard, 0, sizeof(struct TrainerCard));
trainerCard->version = GAME_VERSION;
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
- trainerCard->hasAllSymbols = HasAllFrontierSymbols();
+ trainerCard->hasAllFrontierSymbols = HasAllFrontierSymbols();
trainerCard->frontierBP = gSaveBlock2Ptr->frontier.cardBattlePoints;
- if (trainerCard->hasAllSymbols)
+ if (trainerCard->hasAllFrontierSymbols)
trainerCard->stars++;
if (trainerCard->gender == FEMALE)
@@ -766,14 +766,14 @@ static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCar
trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES];
}
-void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
+void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
{
memset(trainerCard, 0, 0x60);
trainerCard->version = GAME_VERSION;
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
- trainerCard->hasAllFrontierSymbols = HasAllFrontierSymbols();
- *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.cardBattlePoints;
- if (trainerCard->hasAllFrontierSymbols)
+ trainerCard->linkHasAllFrontierSymbols = HasAllFrontierSymbols();
+ *((u16*)&trainerCard->linkPoints.frontier) = gSaveBlock2Ptr->frontier.cardBattlePoints;
+ if (trainerCard->linkHasAllFrontierSymbols)
trainerCard->stars++;
if (trainerCard->gender == FEMALE)
@@ -782,7 +782,7 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES];
}
-void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion)
+void CopyTrainerCardData(struct TrainerCard *dst, struct TrainerCard *src, u8 gameVersion)
{
memset(dst, 0, sizeof(struct TrainerCard));
dst->version = gameVersion;
@@ -797,9 +797,9 @@ void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion)
break;
case CARD_TYPE_EMERALD:
memcpy(dst, src, 0x60);
- dst->berryCrushPoints = 0;
- dst->hasAllSymbols = src[29];
- dst->frontierBP = src[30];
+ dst->linkPoints.frontier = 0;
+ dst->hasAllFrontierSymbols = src->linkHasAllFrontierSymbols;
+ dst->frontierBP = *((u16*)&src->linkPoints.frontier);
break;
}
}
@@ -1243,13 +1243,13 @@ static void PrintTradesStringOnCard(void)
static void BufferBerryCrushPoints(void)
{
- if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints)
- ConvertIntToDecimalStringN(sData->textBerryCrushPts, sData->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.linkPoints.berryCrush)
+ ConvertIntToDecimalStringN(sData->textBerryCrushPts, sData->trainerCard.linkPoints.berryCrush, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintBerryCrushStringOnCard(void)
{
- if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints)
+ if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.linkPoints.berryCrush)
PrintStatOnBackOfCard(4, gText_BerryCrush, sData->textBerryCrushPts, sTrainerCardStatColors);
}
@@ -1524,7 +1524,7 @@ static void DrawCardBackStats(void)
FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 1);
FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 1);
}
- if (sData->trainerCard.berryCrushPoints)
+ if (sData->trainerCard.linkPoints.berryCrush)
{
FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1);
FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1);
@@ -1803,7 +1803,7 @@ void ShowPlayerTrainerCard(void (*callback)(void))
sData->isLink = FALSE;
sData->language = GAME_LANGUAGE;
- TrainerCard_GenerateCardForLinkPlayer(&sData->trainerCard);
+ TrainerCard_GenerateCardForPlayer(&sData->trainerCard);
SetMainCallback2(CB2_InitTrainerCard);
}
diff --git a/src/union_room.c b/src/union_room.c
index 0512a1f5c..37d2434dd 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -1532,13 +1532,15 @@ static void Task_ExchangeCards(u8 taskId)
for (i = 0; i < GetLinkPlayerCount(); i++)
{
recvBuff = gBlockRecvBuffer[i];
- CopyTrainerCardData(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version);
+ CopyTrainerCardData(&gTrainerCards[i], (struct TrainerCard *)recvBuff, gLinkPlayers[i].version);
}
if (GetLinkPlayerCount() == 2)
{
+ // Note: hasAllFrontierSymbols is a re-used field.
+ // Here it is set by CreateTrainerCardInBuffer.
recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1];
- MEventHandleReceivedWonderCard(recvBuff[48]);
+ MEventHandleReceivedWonderCard(((struct TrainerCard *)recvBuff)->hasAllFrontierSymbols);
}
else
{
@@ -1626,13 +1628,14 @@ static void CB2_TransitionToCableClub(void)
static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard)
{
- u16 *argAsU16Ptr = dest;
+ struct TrainerCard * card = (struct TrainerCard *)dest;
+ TrainerCard_GenerateCardForLinkPlayer(card);
- TrainerCard_GenerateCardForPlayer((struct TrainerCard *)argAsU16Ptr);
+ // Below field is re-used, to be read by Task_ExchangeCards
if (setWonderCard)
- argAsU16Ptr[48] = GetWonderCardFlagID();
+ card->hasAllFrontierSymbols = GetWonderCardFlagID();
else
- argAsU16Ptr[48] = 0;
+ card->hasAllFrontierSymbols = 0;
}
static void Task_StartActivity(u8 taskId)