From 8a793e73a515e9c66aa98ef6c14e923b18dd4ce3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 19 Aug 2022 15:22:32 -0400 Subject: [PATCH 01/42] Sync link_rfu_2 --- common_syms/link_rfu_2.txt | 4 +- include/link_rfu.h | 28 +++++----- include/trade.h | 4 +- include/union_room.h | 4 +- src/link_rfu_2.c | 102 ++++++++++++++++++------------------- src/link_rfu_3.c | 12 ++--- src/party_menu.c | 4 +- src/rfu_union_tool.c | 10 ++-- src/trade.c | 4 +- src/union_room.c | 10 ++-- 10 files changed, 91 insertions(+), 91 deletions(-) diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt index 5e6f69ff6..abd9a5f93 100644 --- a/common_syms/link_rfu_2.txt +++ b/common_syms/link_rfu_2.txt @@ -1,3 +1,3 @@ -gHostRFUtgtGnameBuffer +gHostRfuGameData Rfu -gHostRFUtgtUnameBuffer +gHostRfuUsername diff --git a/include/link_rfu.h b/include/link_rfu.h index 1792781ff..1e4a72c6c 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -57,7 +57,7 @@ #define RFU_RECV_FINISHED 2 // RfuTgtData.gname is read as these structs. -struct GFtgtGnameSub +struct RfuGameCompatibilityData { u16 language:4; u16 hasNews:1; @@ -71,9 +71,9 @@ struct GFtgtGnameSub u8 playerTrainerId[2]; }; -struct __attribute__((packed, aligned(2))) GFtgtGname +struct __attribute__((packed, aligned(2))) RfuGameData { - struct GFtgtGnameSub unk_00; + struct RfuGameCompatibilityData unk_00; u8 child_sprite_gender[RFU_CHILD_MAX]; // u8 sprite_idx:3; // u8 gender:1; // u8 unk_4:3 @@ -139,7 +139,7 @@ struct RfuUnusedQueue /* 0x203 */ vu8 full; }; -typedef struct UnkRfuStruct_2 +struct RfuManager { /* 0x000 */ void (*RfuFunc)(void); /* 0x004 */ u16 state; @@ -204,11 +204,11 @@ typedef struct UnkRfuStruct_2 /* 0x9a1 */ u8 unk_ce9; /* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX]; /* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX]; -} GF_RFU_MANAGER; // size: 0x9AC +}; // size: 0x9AC -extern struct GFtgtGname gHostRFUtgtGnameBuffer; -extern u8 gHostRFUtgtUnameBuffer[]; -extern GF_RFU_MANAGER Rfu; +extern struct RfuGameData gHostRfuGameData; +extern u8 gHostRfuUsername[]; +extern struct RfuManager Rfu; // GameFreak signatures void AddTextPrinterToWindow1(const u8 *str); @@ -246,7 +246,7 @@ void LinkRfu_Shutdown(void); void LinkRfu_CreateIdleTask(void); bool8 ToggleLMANlinkRecovery(bool32 enable); void var_800D_set_xB(void); -struct GFtgtGname *GetHostRFUtgtGname(void); +struct RfuGameData *GetHostRFUtgtGname(void); void UpdateWirelessStatusIndicatorSprite(void); void InitRFU(void); bool32 RfuHasErrored(void); @@ -262,7 +262,7 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *dest); void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *dest); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue * queue, u8 *dest); void RfuSendQueue_Enqueue(struct RfuSendQueue * queue, u8 *src); -void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders); +void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 started, s32 child_sprite_genders); void UpdateGameData_GroupLockedIn(bool8 started); bool32 IsRfuSerialNumberValid(u32 serialNo); bool8 IsRfuRecoveringFromLinkLoss(void); @@ -277,7 +277,7 @@ u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1); void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 a2); void InitializeRfuLinkManager_LinkLeader(u32 availSlots); void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId); -void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname); +void LinkRfu3_SetGnameUnameFromStaticBuffers(struct RfuGameData *gname, u8 *uname); void InitializeRfuLinkManager_JoinGroup(void); void SendLeaveGroupNotice(void); void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId); @@ -292,10 +292,10 @@ void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level); bool32 IsUnionRoomListenTaskActive(void); void InitializeRfuLinkManager_EnterUnionRoom(void); void sub_80FBD6C(u32 a0); -void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2); +void sub_80FC114(const u8 *name, struct RfuGameData *structPtr, u8 a2); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); -bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx); -bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx); +bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx); +bool8 LinkRfu_GetNameIfSerial7F7D(struct RfuGameData *gname, u8 *uname, u8 idx); bool32 RfuHasFoundNewLeader(void); void Rfu_UnionRoomChat_StopLinkManager(void); void sub_80FB9D0(void); diff --git a/include/trade.h b/include/trade.h index 036c470a1..ede68b05d 100644 --- a/include/trade.h +++ b/include/trade.h @@ -15,8 +15,8 @@ extern const u8 gText_GenderlessSymbol[]; extern const u16 gTradeOrHatchMonShadowTilemap[]; void CB2_ReturnFromLinkTrade(void); s32 Trade_CalcLinkPlayerCompatibilityParam(void); -s32 CanRegisterMonForTradingBoard(struct GFtgtGnameSub rfuPlayer, u16 species2, u16 species, u8 isEventLegal); -s32 GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGnameSub rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal); +s32 CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData rfuPlayer, u16 species2, u16 species, u8 isEventLegal); +s32 GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData rfuPlayer, struct RfuGameCompatibilityData rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal); void CB2_ReturnToTradeMenuFromSummary(void); #endif //GUARD_TRADE_H diff --git a/include/union_room.h b/include/union_room.h index d520e8763..c39513ec2 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -14,7 +14,7 @@ struct UnionGnameUnamePair { - struct GFtgtGname gname; + struct RfuGameData gname; u8 ALIGNED(4) uname[PLAYER_NAME_LENGTH + 1]; }; @@ -158,7 +158,7 @@ struct UnionRoomTrade u32 personality; }; -extern struct GFtgtGnameSub gPartnerTgtGnameSub; +extern struct RfuGameCompatibilityData gPartnerTgtGnameSub; extern u16 gUnionRoomOfferedSpecies; extern u8 gUnionRoomRequestedMonType; diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 2cac8210a..3d5f5b11e 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -13,37 +13,37 @@ struct SioInfo { - char magic[15]; // PokemonSioInfo + char magic[sizeof("PokemonSioInfo")]; u8 playerCount; u8 linkPlayerIdx[RFU_CHILD_MAX]; struct LinkPlayer linkPlayers[MAX_RFU_PLAYERS]; - u8 fill_a0[0x5c]; + u8 filler[92]; }; struct RfuDebug { - u8 fill_00[6]; - u16 unk_06; - u8 fill_08[6]; - vu8 unk_0e; - u8 unk_0f; - u8 fill_10[0x54]; - u16 unk_64; - u8 fill_66[0x1d]; - u8 unk_83; - u8 fill_84[0x58]; + u8 unused0[6]; + u16 recvCount; + u8 unused1[6]; + vu8 unkFlag; + bool8 childJoined; + u8 unused2[84]; + u16 blockSendFailures; + u8 unused3[29]; + u8 blockSendTime; + u8 unused4[88]; }; static EWRAM_DATA INIT_PARAM sRfuReqConfig = {}; static EWRAM_DATA struct RfuDebug sRfuDebug = {}; -static u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4]; -static u8 sResendBlock8[14]; -static u16 sResendBlock16[7]; +static u32 sRfuAPIBuffer[RFU_API_BUFF_SIZE_RAM / 4]; +static u8 sResendBlock8[CMD_LENGTH * 2]; +static u16 sResendBlock16[CMD_LENGTH]; -struct GFtgtGname gHostRFUtgtGnameBuffer; -GF_RFU_MANAGER Rfu; -u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1]; +struct RfuGameData gHostRfuGameData; +struct RfuManager Rfu; +u8 gHostRfuUsername[PLAYER_NAME_LENGTH + 1]; static void sub_80F8AA4(void); static void sub_80F8AEC(void); @@ -80,8 +80,8 @@ static const INIT_PARAM sRfuReqConfigTemplate = { .availSlot_flag = 0, .mboot_flag = 0, .serialNo = 0x0002, - .gameName = (void *)&gHostRFUtgtGnameBuffer, - .userName = gHostRFUtgtUnameBuffer, + .gameName = (void *)&gHostRfuGameData, + .userName = gHostRfuUsername, .fastSearchParent_flag = TRUE, .linkRecovery_enable = FALSE, .linkRecovery_period = 600, @@ -257,7 +257,7 @@ void InitRFU(void) void InitRFUAPI(void) { - if (!rfu_initializeAPI(gf_rfu_REQ_api, RFU_API_BUFF_SIZE_RAM, gIntrTable + 1, TRUE)) + if (!rfu_initializeAPI(sRfuAPIBuffer, RFU_API_BUFF_SIZE_RAM, gIntrTable + 1, TRUE)) { gLinkType = 0; // ClearSavedLinkPlayers(); // Em fix @@ -402,10 +402,10 @@ static void Task_JoinGroupSearchForParent(u8 taskId) rfu_UNI_setSendData(bmChildSlot, Rfu.lastCmdBeforeCommInterrupt, sizeof(Rfu.lastCmdBeforeCommInterrupt)); gTasks[taskId].data[1] = 8; DestroyTask(taskId); - if (sRfuDebug.unk_0f == 0) + if (!sRfuDebug.childJoined) { Debug_PrintEmpty(); - sRfuDebug.unk_0f++; + sRfuDebug.childJoined++; } CreateTask(sub_80FA834, 5); break; @@ -523,7 +523,7 @@ static void MscCallback_Child(u16 unused) { Rfu.sem_UNI_SendRecv++; RfuRecvQueue_Enqueue(&Rfu.recvQueue, Rfu.unk_c3f); - sRfuDebug.unk_06++; + sRfuDebug.recvCount++; UpdateBackupQueue(); rfu_UNI_readySendData(Rfu.child_slot); rfu_UNI_clearRecvNewDataFlag(Rfu.child_slot); @@ -662,7 +662,7 @@ static void MoveRecvCmdsToRfuBuffer(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - GF_RFU_MANAGER *ptr = &Rfu; + struct RfuManager *ptr = &Rfu; for (j = 0; j < CMD_LENGTH - 1; j++) { ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8; @@ -797,7 +797,7 @@ static bool32 sub_80F9204(void) if ((lman.parentAck_flag & Rfu.bm_PartnerFlags) == Rfu.bm_PartnerFlags) { Rfu.unk_cdc = 0; - sRfuDebug.unk_06++; + sRfuDebug.recvCount++; flags = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { @@ -833,7 +833,7 @@ static bool32 sub_80F9204(void) CallRfuFunc(); if (Rfu.bmChatLeaderMaybe && !Rfu.linkClosing) { - sRfuDebug.unk_0e = FALSE; + sRfuDebug.unkFlag = FALSE; rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, Rfu.unk_cda); for (i = 0; i < RFU_CHILD_MAX; i++) { @@ -1000,9 +1000,9 @@ static void RfuFunc_SendKeysToRfu(void) } } -struct GFtgtGname *GetHostRFUtgtGname(void) +struct RfuGameData *GetHostRFUtgtGname(void) { - return &gHostRFUtgtGnameBuffer; + return &gHostRfuGameData; } bool32 IsSendingKeysToRfu(void) @@ -1239,7 +1239,7 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size) return FALSE; if (Rfu.sendBlock.sending != 0) { - sRfuDebug.unk_83++; + sRfuDebug.blockSendTime++; return FALSE; } sizeHasModulo = (size % 12) != 0; @@ -1308,7 +1308,7 @@ static void SendLastBlock(void) if (Rfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[Rfu.recvBlock[mpId].count]) { HandleSendFailure(mpId, Rfu.recvBlock[mpId].receivedFlags); - sRfuDebug.unk_64++; + sRfuDebug.blockSendFailures++; } else Rfu.RfuFunc = NULL; @@ -1965,44 +1965,44 @@ bool32 LinkRfuMain2(void) static void CopyPlayerNameToUnameBuffer(void) { - StringCopy(gHostRFUtgtUnameBuffer, gSaveBlock2Ptr->playerName); + StringCopy(gHostRfuUsername, gSaveBlock2Ptr->playerName); } void ClearAndInitHostRFUtgtGname(void) { - memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH); - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, ACTIVITY_NONE, FALSE, 0); + memset(&gHostRfuGameData, 0, RFU_GAME_NAME_LENGTH); + InitHostRFUtgtGname(&gHostRfuGameData, ACTIVITY_NONE, FALSE, 0); } void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started) { - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders); + InitHostRFUtgtGname(&gHostRfuGameData, activity, started, child_sprite_genders); } void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard) { - gHostRFUtgtGnameBuffer.unk_00.hasNews = hasNews; - gHostRFUtgtGnameBuffer.unk_00.hasCard = hasCard; + gHostRfuGameData.unk_00.hasNews = hasNews; + gHostRfuGameData.unk_00.hasCard = hasCard; } void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level) { - gHostRFUtgtGnameBuffer.type = type; - gHostRFUtgtGnameBuffer.species = species; - gHostRFUtgtGnameBuffer.level = level; + gHostRfuGameData.type = type; + gHostRfuGameData.species = species; + gHostRfuGameData.level = level; } void UpdateGameData_GroupLockedIn(bool8 started) { - gHostRFUtgtGnameBuffer.started = started; - rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); + gHostRfuGameData.started = started; + rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRfuGameData, gHostRfuUsername); } void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started) { if (activity) SetHostRFUtgtGname(activity, child_sprite_genders, started); - rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); + rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRfuGameData, gHostRfuUsername); } void sub_80FB030(u32 linkPlayerCount) @@ -2086,7 +2086,7 @@ static void LmanCallback_Parent2(u8 msg, u8 param_count) { if ((lman.param[0] >> i) & 1) { - struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; + struct RfuGameData *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; if (structPtr->activity == GetHostRFUtgtGname()->activity) { Rfu.partnerSendStatuses[i] = RFU_STATUS_OK; @@ -2254,7 +2254,7 @@ static u8 GetNewChildrenInUnionRoomChat(s32 bmNewChildSlot) { if ((bmNewChildSlot >> i) & 1) { - struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; + struct RfuGameData *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; if (structPtr->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) ret |= (1 << i); } @@ -2564,7 +2564,7 @@ static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId for (i = 0; i < RFU_CHILD_MAX; i++) { - u16 partnerTrainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId); + u16 partnerTrainerId = ReadU16(((struct RfuGameData *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId); if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[i].serialNo) && !StringCompare(trainerName, gRfuLinkStatus->partner[i].uname) && trainerId == partnerTrainerId) @@ -2696,7 +2696,7 @@ void CreateTask_RfuReconnectWithParent(const u8 *trainerName, u16 trainerId) data[8] = trainerId; } -static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct GFtgtGname *partnerGname) +static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct RfuGameData *partnerGname) { if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { @@ -2709,7 +2709,7 @@ static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct } else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM)) { - struct GFtgtGname *myTradeGname = (struct GFtgtGname *)&Rfu.tgtData.gname; + struct RfuGameData *myTradeGname = (struct RfuGameData *)&Rfu.tgtData.gname; if (myTradeGname->species == SPECIES_EGG) { if (partnerGname->species == myTradeGname->species) @@ -2741,11 +2741,11 @@ static void sub_80FC028(u8 taskId) if (Rfu.parentId != 0 && lman.parent_child == MODE_CHILD) { - u16 trainerId = ReadU16(((struct GFtgtGname *)&Rfu.tgtData.gname)->unk_00.playerTrainerId); + u16 trainerId = ReadU16(((struct RfuGameData *)&Rfu.tgtData.gname)->unk_00.playerTrainerId); u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.tgtData.uname, trainerId); if (id != 0xFF) { - if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (struct GFtgtGname *)&gRfuLinkStatus->partner[id].gname)) + if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (struct RfuGameData *)&gRfuLinkStatus->partner[id].gname)) { if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 90)) { @@ -2762,7 +2762,7 @@ static void sub_80FC028(u8 taskId) } } -void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 activity) +void sub_80FC114(const u8 *name, struct RfuGameData *structPtr, u8 activity) { u8 taskId, taskId2; diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index de0a63490..fb6828053 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -661,7 +661,7 @@ static u8 GetConnectedChildStrength(u8 maxFlags) return 0; } -void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders) +void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 started, s32 child_sprite_genders) { s32 i; @@ -694,7 +694,7 @@ void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s * Otherwise, blanks these. * ========================================================== */ -bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx) +bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx) { bool8 retVal; @@ -735,7 +735,7 @@ bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx) * which comes from ??? * ========================================================== */ -bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx) +bool8 LinkRfu_GetNameIfSerial7F7D(struct RfuGameData *gname, u8 *uname, u8 idx) { bool8 retVal = FALSE; if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_7F7D) @@ -752,10 +752,10 @@ bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx) return retVal; } -void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname) +void LinkRfu3_SetGnameUnameFromStaticBuffers(struct RfuGameData *gname, u8 *uname) { - memcpy(gname, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH); - memcpy(uname, gHostRFUtgtUnameBuffer, RFU_USER_NAME_LENGTH); + memcpy(gname, &gHostRfuGameData, RFU_GAME_NAME_LENGTH); + memcpy(uname, gHostRfuUsername, RFU_USER_NAME_LENGTH); } #define sNextAnimNum data[0] diff --git a/src/party_menu.c b/src/party_menu.c index ee2800801..ad8300a9f 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3874,7 +3874,7 @@ static void CursorCB_Register(u8 taskId) u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, isEventLegal)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRFUtgtGname(), species2, species, isEventLegal)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3900,7 +3900,7 @@ static void CursorCB_Trade1(u8 taskId) u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index d6c1c411e..0d848a69e 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -466,7 +466,7 @@ void MakeGroupAssemblyAreasPassable(void) } } -static u8 UnionPartnerObjectGetFacing(u32 member, u32 group, struct GFtgtGname * gname) +static u8 UnionPartnerObjectGetFacing(u32 member, u32 group, struct RfuGameData * gname) { if (member != 0) { @@ -487,7 +487,7 @@ static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member) return RfuUnionObjectIsInvisible(5 * group + member - 0x38); } -static void SpawnGroupMember(u32 groupNo, u32 memberNo, u8 direction, struct GFtgtGname * gname) +static void SpawnGroupMember(u32 groupNo, u32 memberNo, u8 direction, struct RfuGameData * gname) { s32 x, y; s32 objId = 5 * groupNo + memberNo; @@ -510,7 +510,7 @@ static void DespawnGroupMember(u32 group, u32 member) MapGridSetMetatileImpassabilityAt(x, y, FALSE); } -static void AssembleGroup(u32 group, struct GFtgtGname * gname) +static void AssembleGroup(u32 group, struct RfuGameData * gname) { s16 x, y, x2, y2; s32 i; @@ -538,7 +538,7 @@ static void AssembleGroup(u32 group, struct GFtgtGname * gname) } } -static void SpawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname) +static void SpawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname) { u32 i; switch (gname->activity) @@ -566,7 +566,7 @@ static void SpawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname) } } -static void DespawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname) +static void DespawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname) { s32 i; DespawnGroupLeader(group); diff --git a/src/trade.c b/src/trade.c index 392a23061..92d14090d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2730,7 +2730,7 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) return FALSE; } -int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGnameSub partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData playerSub, struct RfuGameCompatibilityData partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isEventLegal) { u8 playerHasNationalDex = playerSub.hasNationalDex; u8 playerIsChampion = playerSub.isChampion; @@ -2810,7 +2810,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGname return 0; } -int CanRegisterMonForTradingBoard(struct GFtgtGnameSub playerSub, u16 species2, u16 species, u8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData playerSub, u16 species2, u16 species, u8 isEventLegal) { u8 canTradeEggAndNational = playerSub.hasNationalDex; diff --git a/src/union_room.c b/src/union_room.c index cc7df613a..00baa9802 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -53,7 +53,7 @@ static EWRAM_DATA u8 sPlayerCurrActivity = 0; static EWRAM_DATA u8 sPlayerActivityGroupSize = 0; static EWRAM_DATA union UnkUnion_Main sUnionRoomMain = {}; static EWRAM_DATA u32 sUnref_203B060 = 0; -EWRAM_DATA struct GFtgtGnameSub gPartnerTgtGnameSub = {}; +EWRAM_DATA struct RfuGameCompatibilityData gPartnerTgtGnameSub = {}; EWRAM_DATA u16 gUnionRoomOfferedSpecies = SPECIES_NONE; EWRAM_DATA u8 gUnionRoomRequestedMonType = TYPE_NORMAL; static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; @@ -86,7 +86,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uR static void Task_InitUnionRoom(u8 taskId); static u8 HandlePlayerListUpdate(void); static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4, struct UnkStruct_Main4 * arg1, u32 arg2); -static bool32 GetGnameWonderFlagByLinkGroup(struct GFtgtGname * gname, s16 linkGroup); +static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 linkGroup); static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup); static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup); static bool32 UR_PrintFieldMessage(const u8 * str); @@ -3719,7 +3719,7 @@ static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId) } } -static bool32 GetGnameWonderFlagByLinkGroup(struct GFtgtGname * gname, s16 linkGroup) +static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 linkGroup) { if (linkGroup == LINK_GROUP_WONDER_CARD) { @@ -4315,7 +4315,7 @@ static void nullsub_92(u8 windowId, u32 itemId, u8 y) { } -static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) +static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * gname, const u8 * uname, u8 colorIdx) { u8 level_t[4]; u16 species = gname->species; @@ -4339,7 +4339,7 @@ static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) { struct UnkStruct_Leader * leader = sUnionRoomMain.leader; - struct GFtgtGname * rfu; + struct RfuGameData * rfu; s32 i, j; u8 uname[RFU_USER_NAME_LENGTH]; From edc478c1c47202e582737294b10fd1c630a3b199 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 8 Oct 2022 20:15:22 -0400 Subject: [PATCH 02/42] Sync -num_tiles flags --- tools/gbagfx/gfx.c | 32 ++++++++++++++++++++++++++------ tools/gbagfx/gfx.h | 8 +++++++- tools/gbagfx/main.c | 9 ++++++++- tools/gbagfx/options.h | 2 ++ 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index b28bb4021..4fbf9b7d3 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -397,7 +397,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int free(buffer); } -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { int tileSize = bitDepth * 8; @@ -424,7 +424,8 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m FATAL_ERROR("The specified number of tiles (%d) is greater than the maximum possible value (%d).\n", numTiles, maxNumTiles); int bufferSize = numTiles * tileSize; - unsigned char *buffer = malloc(bufferSize); + int maxBufferSize = maxNumTiles * tileSize; + unsigned char *buffer = malloc(maxBufferSize); if (buffer == NULL) FATAL_ERROR("Failed to allocate memory for pixels.\n"); @@ -433,17 +434,36 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m switch (bitDepth) { case 1: - ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 4: - ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles4Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 8: - ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles8Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; } - WriteWholeFile(path, buffer, bufferSize); + bool zeroPadded = true; + for (int i = bufferSize; i < maxBufferSize && zeroPadded; i++) { + if (buffer[i] != 0) + { + switch (numTilesMode) + { + case NUM_TILES_IGNORE: + break; + case NUM_TILES_WARN: + fprintf(stderr, "Ignoring -num_tiles %d because tile %d contains non-transparent pixels.\n", numTiles, 1 + i / tileSize); + zeroPadded = false; + break; + case NUM_TILES_ERROR: + FATAL_ERROR("Tile %d contains non-transparent pixels.\n", 1 + i / tileSize); + break; + } + } + } + + WriteWholeFile(path, buffer, zeroPadded ? bufferSize : maxBufferSize); free(buffer); } diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index edb9e62c4..f1dbfcf4f 100644 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -44,8 +44,14 @@ struct Image { bool isAffine; }; +enum NumTilesMode { + NUM_TILES_IGNORE, + NUM_TILES_WARN, + NUM_TILES_ERROR, +}; + void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); void FreeImage(struct Image *image); void ReadGbaPalette(char *path, struct Palette *palette); void WriteGbaPalette(char *path, struct Palette *palette); diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index cf3031696..5d4faacab 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -77,7 +77,7 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions * ReadPng(inputPath, &image); - WriteImage(outputPath, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + WriteImage(outputPath, options->numTilesMode, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); FreeImage(&image); } @@ -179,6 +179,7 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a char *outputFileExtension = GetFileExtensionAfterDot(outputPath); int bitDepth = outputFileExtension[0] - '0'; struct PngToGbaOptions options; + options.numTilesMode = NUM_TILES_IGNORE; options.numTiles = 0; options.bitDepth = bitDepth; options.metatileWidth = 1; @@ -203,6 +204,12 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.numTiles < 1) FATAL_ERROR("Number of tiles must be positive.\n"); } + else if (strcmp(option, "-Wnum_tiles") == 0) { + options.numTilesMode = NUM_TILES_WARN; + } + else if (strcmp(option, "-Werror=num_tiles") == 0) { + options.numTilesMode = NUM_TILES_ERROR; + } else if (strcmp(option, "-mwidth") == 0) { if (i + 1 >= argc) diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h index 3b038f572..250b72345 100644 --- a/tools/gbagfx/options.h +++ b/tools/gbagfx/options.h @@ -4,6 +4,7 @@ #define OPTIONS_H #include +#include "gfx.h" struct GbaToPngOptions { char *paletteFilePath; @@ -18,6 +19,7 @@ struct GbaToPngOptions { struct PngToGbaOptions { int numTiles; + enum NumTilesMode numTilesMode; int bitDepth; int metatileWidth; int metatileHeight; From 7178aa8b99a78d08726110aa954c951095e2f78c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 8 Oct 2022 20:44:08 -0400 Subject: [PATCH 03/42] Set unused tiles to transparent, document adjacent files --- graphics/item_pc/{unk_8E85458.bin => bg.bin} | Bin graphics/item_pc/{unk_8E85408.pal => bg.pal} | 0 graphics/item_pc/bg.png | Bin 0 -> 807 bytes graphics/item_pc/unk_8E85090.png | Bin 746 -> 0 bytes graphics/ss_anne/smoke.png | Bin 0 -> 315 bytes graphics/ss_anne/unk_8479838.png | Bin 188 -> 0 bytes graphics/ss_anne/unk_8479A38.png | Bin 271 -> 0 bytes graphics/ss_anne/wake.png | Bin 0 -> 244 bytes graphics/teachy_tv/tiles.png | Bin 1761 -> 1760 bytes .../tm_case/{unk_8E84D90.png => disc.png} | Bin .../{unk_8E84F20.pal => disc_types_1.pal} | 0 .../{unk_8E85068.pal => disc_types_2.pal} | 0 graphics/tm_case/{unk_8E99118.png => hm.png} | Bin .../tm_case/{unk_8E84A24.bin => menu.bin} | Bin .../{unk_8E84D20.pal => menu_female.pal} | 0 .../{unk_8E84CB0.pal => menu_male.pal} | 0 .../tm_case/{unk_8E84B70.bin => tm_case.bin} | Bin graphics/tm_case/tm_case.png | Bin 0 -> 1012 bytes graphics/tm_case/unk_8E845D8.png | Bin 951 -> 0 bytes graphics_file_rules.mk | 250 +++++++++--------- include/graphics.h | 18 +- src/graphics.c | 24 +- src/ss_anne.c | 4 +- src/tm_case.c | 37 +-- tileset_rules.mk | 134 +++++----- 25 files changed, 235 insertions(+), 232 deletions(-) rename graphics/item_pc/{unk_8E85458.bin => bg.bin} (100%) rename graphics/item_pc/{unk_8E85408.pal => bg.pal} (100%) create mode 100644 graphics/item_pc/bg.png delete mode 100644 graphics/item_pc/unk_8E85090.png create mode 100644 graphics/ss_anne/smoke.png delete mode 100644 graphics/ss_anne/unk_8479838.png delete mode 100644 graphics/ss_anne/unk_8479A38.png create mode 100644 graphics/ss_anne/wake.png rename graphics/tm_case/{unk_8E84D90.png => disc.png} (100%) rename graphics/tm_case/{unk_8E84F20.pal => disc_types_1.pal} (100%) rename graphics/tm_case/{unk_8E85068.pal => disc_types_2.pal} (100%) rename graphics/tm_case/{unk_8E99118.png => hm.png} (100%) rename graphics/tm_case/{unk_8E84A24.bin => menu.bin} (100%) rename graphics/tm_case/{unk_8E84D20.pal => menu_female.pal} (100%) rename graphics/tm_case/{unk_8E84CB0.pal => menu_male.pal} (100%) rename graphics/tm_case/{unk_8E84B70.bin => tm_case.bin} (100%) create mode 100644 graphics/tm_case/tm_case.png delete mode 100644 graphics/tm_case/unk_8E845D8.png diff --git a/graphics/item_pc/unk_8E85458.bin b/graphics/item_pc/bg.bin similarity index 100% rename from graphics/item_pc/unk_8E85458.bin rename to graphics/item_pc/bg.bin diff --git a/graphics/item_pc/unk_8E85408.pal b/graphics/item_pc/bg.pal similarity index 100% rename from graphics/item_pc/unk_8E85408.pal rename to graphics/item_pc/bg.pal diff --git a/graphics/item_pc/bg.png b/graphics/item_pc/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4db6a6bcbc7f4407b8eed2ff5d7aef89e2c28d91 GIT binary patch literal 807 zcmV+?1K9kDP)S7??v}7${13iH4 z6V&z%tjvntXe!VSMO41W_vlB8vWDab*p$hSpZHI*QaUH0T#Yc$uHr=GbB2i>;A&uV z5e7y!mtRYa2V7oLd(r^38QzLPj)R87AU}ReF&40DYB0Zu_JG?;2Y(EC&Mt7))nNgD zOQ2%I5Zi&caDXlw&`n^_Kmxo_d`n>%f`Gpi&q)}t4Mzw7_oUvYdSsB(e*a8yPwEYT zZXH4~fV#TDuEAgcb#;RP!Ul1Rut5wmWN@bF7=HKr=l&w0K`txUPQ>wp9Z+&(z!tke zqU6?sA-+zWD0w*0kobT&UTAoiI#Kd~qM;7hUw}RAdnU= z+rA8dsr!JlNFm@4T;5P)2(W>TYXwrh3HCoTP4%f5?=)Fvx|}Z-Q0^BB7kUy$A2fad z_A>&O%Iv}>2@euBnRwhqqF%|kr9 z=pc<9^9m{Nct;;4$_9%5fJ}+}_=zGZ8D31DL%Cg00D-bl`I=Em54c^q+=qdM%iZUQ zQUmU8xV>lrjv0QdLC%AQ{UE=8%P9_UYHqMsOxJ)bFrka3JhKlxZcRiWzZw8BEU6ud zdk@%(f!quR4J@D&kXtIl5(V-D@=VG=Z8Smzq$l^b)eDO}t=EqrJ-Igmrge$MiYglh zHwUW~)-??Z2piNb!Ui?SkimOI&+vA=erQY*Mo%l+p4Ill6#%_3Xe)i70KK$mC~pcc zpf?8@iaMaS7a4x#UO;b9GBg1N>al>$ zQJ`;Ps$StTUxxs$dOtP!cmViW9JiKxe|h5bP?< zswWTVju;rg*@YR&r>p`2CRS~McSEqdA-nu3z*qyFJ_Bc$Vwi|wNCpJD(+^RcZ5bHz z=tlzu7$RfCWWvBu41>Ns>8Dtp;{1^f->i)(VJJXv51OJvuh-&xEpvgIpGH43|=Vr?t0C>|L2C{a*y*O==SFaV2m$wzD ceIpzB3qTndJYBc9ZU6uP07*qoM6N<$f|f@?mjD0& diff --git a/graphics/ss_anne/smoke.png b/graphics/ss_anne/smoke.png new file mode 100644 index 0000000000000000000000000000000000000000..5560247873a1899b9b9b78babc2202a244d7e808 GIT binary patch literal 315 zcmV-B0mS}^P)G4{<$tdv?(Qfk%J?rLg_gNv-qw0r;m{}2!urC*hD0002S zNkl6@F7{3f^#%4L5VeO+o_}wpJu#yjzUkuf;yB`8~|O zyK?mbdAiA$_7CuFgIq)jVul&HvJ@xH*8*9T96fETQ&YGMEY N002ovPDHLkV1jDsg_-~W literal 0 HcmV?d00001 diff --git a/graphics/ss_anne/unk_8479838.png b/graphics/ss_anne/unk_8479838.png deleted file mode 100644 index e7d0d8c44e47da28b5eac793aab7f3a89d432ecd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*0wfqdKXdg4Qq7(&jv*Qo=T6wo+hD-s5_zyS zJ8jX9Tfg}yNIiN|Bh)paA;f>8{rf$0Yi_GIC~%1BavWf>|Krj$b9>y31OunzO#MtY z|L@$k4A9=P#Y9EzYQ5)u2c7hfnHOu9g85>WS!c*Kgc^f7)x9>uq`oa+as7pUXO@geCygiASXX diff --git a/graphics/ss_anne/unk_8479A38.png b/graphics/ss_anne/unk_8479A38.png deleted file mode 100644 index 98fbc8d9710804158618579484e2b5f24a6a1a6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmV+q0r38bP)IDVBnWRCl9!72fry4YRfQhx|F?ty95M6xaisMYatA3v@XhQGFOsF%J zh-5gvu5QJt?)^eumo8r*%d96*DT5ZQ0^oP$aCSG%$i>9Nu;qqcdB2#3E-Ix)et;>T z+p7GDyA`dE((*7$mLfccR?Ze*_R;{J5${KyBxEne_{e=UofGml)Keo&Tyy>hJ^;%N Vo!X^08+8Bx002ovPDHLkV1l$eb8`Ry diff --git a/graphics/ss_anne/wake.png b/graphics/ss_anne/wake.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ce6763fba36308c99e366a5f17afb583fd7951 GIT binary patch literal 244 zcmVG4{<$tdv?(Qfk%J?rLg_gNv-qw0r;m{}2!urC*hD0001g zNkl(Xn23a0BVtkgUpeZ^YFQNJRdWLfPWSRQYr*Ng0D|8A u3B&_l4`{!_Z4NX!q1LciR3o2tzNk0o3%=<}y$lxs0000{k=tddZb_!E3Z z0v&cMNQb{}<+)Cj+SI4Vbbp#cdzx-(wSNduG3L1@!;jhlwivK^ zjO|<619TJ#&|PwYMy@zd0^lRI>tz7Fi!RW}l~V~g#lh)*37~66-mt6Ob&~*_Dcbaw z1N82N2WaJT0lp{Tz%koMz@G_70E~(N%mo29F@ho>$pNSUx_9BLfU!d^F!)4~10{eu z$SWzXu*s1SZhu4D7nK(;B;XGMh$*oE@Hg6S>}>25lDHy(WT&$IaxK8dv&!~bfXd4? zJ=m_id^Qj850Rb391PIC4@Vz0@$uR+fm*d4V-D+wc|WbQLpQssl!69zh;K-CoFI{^;AJK)y^06il) zfS2_BQ-1;3ni2qswKhRz+F(tzCB-&pdE)_7>!g`Af;L^KW!_Td`dixwTCz|JBdL7< z)rChQ0Nh;nAlsuo>$OjowNYNP!Oq&(SS|!SfQ6qUd-m2TqmnkzVw<&Z3tujfC$A$19m1Iq{ z<^Y)QcJMj?*k%y(6$=^xLpP7w;l@v-Xp>8L1VA_TDvsd+*B%hu;uvGXhoNmq)1bpH zp73IlZt<)iV3$?|bV>ki0`wd}2Hy6z#(&QlZlghmaf!BRKcFn~a`*4#=)sW*+d!D7 zSfGI`lIw#z(wbY^)W+TZNdS)F>41l|TyRI*?Q+9{^dbNb=Wo9CYUTcXV$$($*@sVd zuDzbs+?nqH4|Lk=Pkf}GjfIfeXgvPn`?Cfo{I%A5?iDAz*pMTa{$c;;FD?Ss7|`Sw#c9%s$zUOR=1NmH>QHwSwRQWjXkFf1g4RiU35yR8|4p5LNI4M^^#> z-w0;_ZXPh8$GO8K#0UW3Ubam?0x>eNHJl+JE;8?Wi~#0=2bil>0B&dzfw2K#_9DQ} z17P{yjop7U3+M+xBkl|{05|rN%mgTZto<}_fVduF7H0vJ1oYx-E{B=IBTLjVWN{Wi zF~kT)0?;--oJ?-<1pvkni+IHgK;hYkH_oYeOcekaLntE5!zKexuxm5(g$*$j08~gW zVu%0$guBb2us1S>A^?-XDL4;HSb+o7*BADI>rez-iXz&OHr4hu0qC8pgLC13?8}GW zJfPnTN$^FyiYr)gN{suS#r@fj=l2qL>Jy6_a?fYrE)M|rd0UwBDFyv`*83H5$;fld zHDCZFA*7|@?MGU3!nrhO&Vjz%N0m3a3DBv{ea5*DUilK!7n>jh3)cYZec_W^E^{UhKmn0mX$ljVQbEpL{YWMAO`0000J_!;jhlHW;ve zg#8=Z19TJ#(5K`A&0KSy1i(k^*NXsp8(pB8YbO$Lf|FBw0pQe(yy2;GpX&rzPtm5g z7@)T=JU}a#3-CPw2aecA0{%=u0$@}GU@i!-ju8|ANe(~-(7g*^1&keXfx#z=94G-a zL0(C5g-s5HaDN}#zNo!;Apw67KrD$0z~5-QwzalZNaB(JlC9e2%as6Y&uW`10ctN- z^kB30^4UDVKUmT-fVAC$B&Zeuln@@Y3}CbNY)g4>G;pR(*N^KwMZKwerU@IliQE4q zr9Sj{AD^M@*Xt6Hl>jarK(FHtoB`BPl=mhr2W$&~&VK<|ssN`=ZE8)uhJe2$puPm) z2=pERVDRR1?tctGfxg|;7ch8jgZuZ(0Kb$1F#Fm#z=^5^ye|Ws8W?=afOH0MkASdn zJT2uTpy|tspSW=L;gf2PH4`OgQ9pWs5d#Z=eJXkVr!s(E0H~XSd?&#EcL)4h0njs& z19(Z_KYtaFttbJISZfnhrU$HvzNFaaEN?tuYMr#QgP=_-wai44N_RG(9$~rCq0V{Xa150Kla{0NSLGu?dQM-eCZ72l#&ofZI52HxC#DKs$KV z#<7lt58D9vRt7lE10ob34cM7q#)IBLMz!n*oNYIRL~POt}x| zX@3W7ngg(faQu(~U9M)DdoBROQoul@UILCewOs*_1@k%V8U`Gf0dOUh0pK?1_^v}| zn*(6JJHhJ!V4FeAS1f1*4Ba~Fgoa;8(I%Jh2!LViRh+{Eu00^Q#WBW&4@2LOmO+n(St)1j)AaF zu|NY?BsT_6q!o{}sg0-olK>pU(*X}Fx!|t0+r@?j=|uos&fk3R)zahn#-!`rvJao^ zTzfsMxjWwh9_Y5$pZH2Y8w(+`(RlpDk7o^T_-n0q+$&Cau^~q;$2nnS&*Zcn@qdOA z3AfJXLzLgieEj+C_$vW|cAf)d{`HBHIsQ)oKA`z%{KM|gUt9#NF`&gSiqoVutpdCo zyYO}cpp_*_rtD38>#PL4rC82BO8~y9T0!uDvK;)oyGx-5MF1jUDysl)h${GrqbmV` zZ-g@dw+# z0kC}U#_qqF1@r^pAf5~}05|uO%mgTZt^G1^fVdxG7H0vJ1oYx-E{B=ID@)WdWN{Wi zF~kT)0?;u&oJ=0^1pvkni+IHwK;hko4d+z6rV0RzArukTVT%FBIJA}d!iE?M04gLG zF+>0W!rf(1*c%x`5r9eH6r6`GtiS;p>kIq9btnQZMGJy6xa?fYrE)M|r`B<3pEd}Fw)%zWC$;fld zHDCZFA*AKN+mE#7gmY=moCAG%jw)|-6QEO@`x@uI@XD8%zBmLKU=R>@lpx^v8~$!h zf`{l`5gexaE}JEIX>np$ za^oW)*Bc2pBDH1X=K3dp#00000NkvXXu0mjf DlGYF4 diff --git a/graphics/tm_case/unk_8E84D90.png b/graphics/tm_case/disc.png similarity index 100% rename from graphics/tm_case/unk_8E84D90.png rename to graphics/tm_case/disc.png diff --git a/graphics/tm_case/unk_8E84F20.pal b/graphics/tm_case/disc_types_1.pal similarity index 100% rename from graphics/tm_case/unk_8E84F20.pal rename to graphics/tm_case/disc_types_1.pal diff --git a/graphics/tm_case/unk_8E85068.pal b/graphics/tm_case/disc_types_2.pal similarity index 100% rename from graphics/tm_case/unk_8E85068.pal rename to graphics/tm_case/disc_types_2.pal diff --git a/graphics/tm_case/unk_8E99118.png b/graphics/tm_case/hm.png similarity index 100% rename from graphics/tm_case/unk_8E99118.png rename to graphics/tm_case/hm.png diff --git a/graphics/tm_case/unk_8E84A24.bin b/graphics/tm_case/menu.bin similarity index 100% rename from graphics/tm_case/unk_8E84A24.bin rename to graphics/tm_case/menu.bin diff --git a/graphics/tm_case/unk_8E84D20.pal b/graphics/tm_case/menu_female.pal similarity index 100% rename from graphics/tm_case/unk_8E84D20.pal rename to graphics/tm_case/menu_female.pal diff --git a/graphics/tm_case/unk_8E84CB0.pal b/graphics/tm_case/menu_male.pal similarity index 100% rename from graphics/tm_case/unk_8E84CB0.pal rename to graphics/tm_case/menu_male.pal diff --git a/graphics/tm_case/unk_8E84B70.bin b/graphics/tm_case/tm_case.bin similarity index 100% rename from graphics/tm_case/unk_8E84B70.bin rename to graphics/tm_case/tm_case.bin diff --git a/graphics/tm_case/tm_case.png b/graphics/tm_case/tm_case.png new file mode 100644 index 0000000000000000000000000000000000000000..ce013967e2ae10760838705505a6634d187cbb1a GIT binary patch literal 1012 zcmVDm4Fh+)sEmU2*v|W?UduTv(%NS3lqfLioted54HF+$Y?RYF$ zg;2U#XS}x(okB^Ws)j&nl16<$?#_}dB@haIC)s-Lx%YQDUrq?9pj17qgYQ0;s0Ys0 zK(DI)8<0@d0|ymAS!q7L8w}n&gW3QxtczX`pZB3e@0Fyg0@xsnK#cYEL(XsmP-(zX z-GZUi1CH7*7;-5v+J*sXGn$_Da>cqtHwSbXpt3-PflBEr81}p0vT|ud!U?u30G>BF zNv};Xeu^n1*||0nA7@b1MigmTxA)rpjeO4ODg4*XTKHDQ<%J)zy$;AKxIJ3 zycK{1%PJtzCE$z0D!~4+%CTwzzozUI?V1AM{qjbGiDQSn#82n+SXc)$qBFpH>kqTl z5TAs}tH*Z+uW1_`UMIhP(|#~EpW~kZIL?F9Js7@=fbPoxlbC@$4-~uB&>55g z4;9t`VK)F&SVI|j;y4~ETJDxM9Q6ypCj>y@B0vUN1U@^?Jy1M%UBw1i0|NX%U-|}u zMt}n5ky2B%z&p`4K=_dwc?c^8eX1#15U_@DjPtZwEf?ERtD-?pqHv^8fd-f%JTDkz zJXwSi51OZ15EcwFj>eIijftT56vP^2yjaYY26Rn*Hb^wYQ4|5db8t}$Xov-6rriU5 zC@0sc|3H!(&yzq5XVP;;TZB&tgl9Q i1VqDLjqVEETz>%(Gcw2;GSzng0000HV%7{;%(3Y9t-BT=DDl?{88b2fx3;Yf^Wl9L!SnU$r4u^mt{qD<-74OuGco~>Ph zg%u;gh!iWzKVaUE^TnU7sE~N3i~W0_d!Lj2#v%dv1x-<>j{}sb2lh9>v`YUCuu1j6 zX$4TUOn<%}kKcXmX-olbFm1`^Zvic|%#gUSOA>dDKD!wo>C16Iv)4uu}D>MG}u zNrBNy4oIifwARPvXo*<{m@z;yK!pQIYULcxW(T4qcCb0YRRzHN+WXw~%rSe5ZQ6<* zv;~|%2I$cFXa{~$&N32$Pf%3D{*|qasjJ4FCyRRe-G};KE52 zV45$+ss(}?nJpGI0^n8aMu$|UEpQDEW#PQGOIh0=@p!-UJzQe$I2o@K{VLmPbAzBy*2wMWs!Z;LxuW=lr z#WK3q4#$%m@EifKh!7wLl?R^1@o%vB6h)F9;0y=|?meBP5Htc5FyE!@p$ps-ixlu) zP$NI!#Gp^vLl*>$gEzo^mdj;?ZOBI6LG@j4DA58PU483^1W>AtRi_~+Gd+JU zT_1RU*I0SIg}|2h`D+s}gbxgr5~>jh%uG-4VjJzfu1^HP3XW4;Yaj>^@O*#B1Whx1 zH!(B6hnKj&?{|slDm6UBCrafW%}^ zl4>B~?3Ny&>8DZ#fbl5OWi?RJ`riTT%(qkJU-~-pX>>OrSszqh{|g{lXFiSY25eMy Z{|~29B7fdUcNzcy002ovPDHLkV1h#Lu$TY< diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 0aa81586d..d9ac26cfa 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -100,13 +100,13 @@ graphics/title_screen/pokemon_logo.gbapal: %.gbapal: %.pal $(GFX) $< $@ -num_colors 224 graphics/pokemon_jump/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 63 + $(GFX) $< $@ -num_tiles 63 -Wnum_tiles $(MISCGFXDIR)/japanese_hof.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 29 + $(GFX) $< $@ -num_tiles 29 -Wnum_tiles $(MISCGFXDIR)/markings2.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 25 + $(GFX) $< $@ -num_tiles 25 -Wnum_tiles $(INTERFACEGFXDIR)/menu.gbapal: $(INTERFACEGFXDIR)/menu_0.gbapal \ $(INTERFACEGFXDIR)/menu_1.gbapal @@ -150,13 +150,13 @@ $(UNUSEDGFXDIR)/redyellowgreen_frame.bin: $(UNUSEDGFXDIR)/red_frame.bin \ @cat $^ >$@ $(UNUSEDGFXDIR)/color_frames.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 353 + $(GFX) $< $@ -num_tiles 353 -Wnum_tiles $(BATINTGFXDIR)/unused_window2bar.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 5 + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles $(BATINTGFXDIR)/level_up_banner.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 36 + $(GFX) $< $@ -num_tiles 36 -Wnum_tiles $(BATINTGFXDIR)/window.gbapal: $(BATINTGFXDIR)/window1.gbapal $(BATINTGFXDIR)/window2.gbapal cat $^ > $@ @@ -175,7 +175,7 @@ $(UNUSEDGFXDIR)/old_contest_2.4bpp: $(UNUSEDGFXDIR)/old_contest_2_1.4bpp \ @cat $^ >$@ $(UNKNOWNGFXDIR)/unknown_D196E4.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 36 + $(GFX) $< $@ -num_tiles 36 -Wnum_tiles $(BTLANMSPRGFXDIR)/ice_crystals.4bpp: $(BTLANMSPRGFXDIR)/ice_crystals_0.4bpp \ $(BTLANMSPRGFXDIR)/ice_crystals_1.4bpp \ @@ -197,13 +197,13 @@ $(BTLANMSPRGFXDIR)/spark.4bpp: $(BTLANMSPRGFXDIR)/spark_0.4bpp \ @cat $^ >$@ $(MASKSGFXDIR)/unknown_D2EC24.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 14 + $(GFX) $< $@ -num_tiles 14 -Wnum_tiles $(BATTRANSGFXDIR)/vs_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 16 + $(GFX) $< $@ -num_tiles 16 -Wnum_tiles $(INTERFACEGFXDIR)/party_menu_misc.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 62 + $(GFX) $< $@ -num_tiles 62 -Wnum_tiles $(TYPESGFXDIR)/move_types.4bpp: $(types:%=$(TYPESGFXDIR)/%.4bpp) $(contest_types:%=$(TYPESGFXDIR)/contest_%.4bpp) @cat $^ >$@ @@ -214,29 +214,29 @@ $(TYPESGFXDIR)/move_types.gbapal: $(TYPESGFXDIR)/move_types_1.gbapal \ @cat $^ >$@ $(INTERFACEGFXDIR)/bag_screen.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(RAYQUAZAGFXDIR)/rayquaza.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 227 + $(GFX) $< $@ -num_tiles 227 -Wnum_tiles $(RAYQUAZAGFXDIR)/overcast.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 313 + $(GFX) $< $@ -num_tiles 313 -Wnum_tiles $(RAYQUAZAGFXDIR)/rayquaza_fly1.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 124 + $(GFX) $< $@ -num_tiles 124 -Wnum_tiles $(RAYQUAZAGFXDIR)/rayquaza_tail_fix.4bpp: $(RAYQUAZAGFXDIR)/rayquaza_tail.4bpp cp $< $@ head -c 12 /dev/zero >> $@ $(RAYQUAZAGFXDIR)/chase_streaks.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 19 + $(GFX) $< $@ -num_tiles 19 -Wnum_tiles $(RAYQUAZAGFXDIR)/rayquaza_chase.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 155 + $(GFX) $< $@ -num_tiles 155 -Wnum_tiles graphics/picture_frame/frame5.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 86 + $(GFX) $< $@ -num_tiles 86 -Wnum_tiles $(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \ $(ROULETTEGFXDIR)/tailow.4bpp @@ -249,10 +249,10 @@ $(ROULETTEGFXDIR)/poke_icons2.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ @cat $^ >$@ $(BATTRANSGFXDIR)/85BBC14.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(BATTRANSGFXDIR)/rayquaza.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 938 + $(GFX) $< $@ -num_tiles 938 -Wnum_tiles $(BATTRANSGFXDIR)/frontier_square_1.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ $(BATTRANSGFXDIR)/frontier_squares_1.4bpp @@ -275,16 +275,16 @@ $(SLOTMACHINEGFXDIR)/reel_time_gfx.4bpp: $(SLOTMACHINEGFXDIR)/reel_time_pikachu. @cat $^ >$@ $(UNUSEDGFXDIR)/intro_birch_beauty.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 822 + $(GFX) $< $@ -num_tiles 822 -Wnum_tiles $(PSSGFXDIR)/forest_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 55 + $(GFX) $< $@ -num_tiles 55 -Wnum_tiles $(PSSGFXDIR)/forest.4bpp: $(PSSGFXDIR)/forest_frame.4bpp $(PSSGFXDIR)/forest_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/city_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 52 + $(GFX) $< $@ -num_tiles 52 -Wnum_tiles $(PSSGFXDIR)/city.4bpp: $(PSSGFXDIR)/city_frame.4bpp $(PSSGFXDIR)/city_bg.4bpp @cat $^ >$@ @@ -293,97 +293,97 @@ $(PSSGFXDIR)/desert.4bpp: $(PSSGFXDIR)/desert_frame.4bpp $(PSSGFXDIR)/desert_bg. @cat $^ >$@ $(PSSGFXDIR)/savanna_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 45 + $(GFX) $< $@ -num_tiles 45 -Wnum_tiles $(PSSGFXDIR)/savanna_bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 23 + $(GFX) $< $@ -num_tiles 23 -Wnum_tiles $(PSSGFXDIR)/savanna.4bpp: $(PSSGFXDIR)/savanna_frame.4bpp $(PSSGFXDIR)/savanna_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/crag_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 49 + $(GFX) $< $@ -num_tiles 49 -Wnum_tiles $(PSSGFXDIR)/crag.4bpp: $(PSSGFXDIR)/crag_frame.4bpp $(PSSGFXDIR)/crag_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/volcano_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 56 + $(GFX) $< $@ -num_tiles 56 -Wnum_tiles $(PSSGFXDIR)/volcano.4bpp: $(PSSGFXDIR)/volcano_frame.4bpp $(PSSGFXDIR)/volcano_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/snow_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(PSSGFXDIR)/snow.4bpp: $(PSSGFXDIR)/snow_frame.4bpp $(PSSGFXDIR)/snow_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/cave_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 55 + $(GFX) $< $@ -num_tiles 55 -Wnum_tiles $(PSSGFXDIR)/cave.4bpp: $(PSSGFXDIR)/cave_frame.4bpp $(PSSGFXDIR)/cave_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/beach_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 46 + $(GFX) $< $@ -num_tiles 46 -Wnum_tiles $(PSSGFXDIR)/beach_bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 23 + $(GFX) $< $@ -num_tiles 23 -Wnum_tiles $(PSSGFXDIR)/beach.4bpp: $(PSSGFXDIR)/beach_frame.4bpp $(PSSGFXDIR)/beach_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/seafloor_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 54 + $(GFX) $< $@ -num_tiles 54 -Wnum_tiles $(PSSGFXDIR)/seafloor.4bpp: $(PSSGFXDIR)/seafloor_frame.4bpp $(PSSGFXDIR)/seafloor_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/river_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 51 + $(GFX) $< $@ -num_tiles 51 -Wnum_tiles $(PSSGFXDIR)/river_bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 11 + $(GFX) $< $@ -num_tiles 11 -Wnum_tiles $(PSSGFXDIR)/river.4bpp: $(PSSGFXDIR)/river_frame.4bpp $(PSSGFXDIR)/river_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/sky_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 45 + $(GFX) $< $@ -num_tiles 45 -Wnum_tiles $(PSSGFXDIR)/sky.4bpp: $(PSSGFXDIR)/sky_frame.4bpp $(PSSGFXDIR)/sky_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/polkadot_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 54 + $(GFX) $< $@ -num_tiles 54 -Wnum_tiles $(PSSGFXDIR)/polkadot.4bpp: $(PSSGFXDIR)/polkadot_frame.4bpp $(PSSGFXDIR)/polkadot_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/pokecenter_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 35 + $(GFX) $< $@ -num_tiles 35 -Wnum_tiles $(PSSGFXDIR)/pokecenter.4bpp: $(PSSGFXDIR)/pokecenter_frame.4bpp $(PSSGFXDIR)/pokecenter_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/machine_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 33 + $(GFX) $< $@ -num_tiles 33 -Wnum_tiles $(PSSGFXDIR)/machine.4bpp: $(PSSGFXDIR)/machine_frame.4bpp $(PSSGFXDIR)/machine_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/plain_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 18 + $(GFX) $< $@ -num_tiles 18 -Wnum_tiles $(PSSGFXDIR)/plain.4bpp: $(PSSGFXDIR)/plain_frame.4bpp $(PSSGFXDIR)/plain_bg.4bpp @cat $^ >$@ $(PSSGFXDIR)/friends_frame1.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(PSSGFXDIR)/friends_frame2.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(PSSGFXDIR)/zigzagoon.4bpp: $(PSSGFXDIR)/friends_frame1.4bpp $(PSSGFXDIR)/zigzagoon_bg.4bpp @cat $^ >$@ @@ -449,70 +449,70 @@ $(FIELDEFFECTSGFXDIR)/pics/tree_disguise.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 $(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 8 + $(GFX) $< $@ -num_tiles 8 -Wnum_tiles $(BATTRANSGFXDIR)/frontier_transition.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 43 + $(GFX) $< $@ -num_tiles 43 -Wnum_tiles -graphics/tm_case/unk_8E845D8.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 91 +graphics/tm_case/tm_case.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 91 -Wnum_tiles $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(PKNAVGFXDIR)/outline.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(PKNAVGFXDIR)/ui_matchcall.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 13 + $(GFX) $< $@ -num_tiles 13 -Wnum_tiles $(INTERFACEGFXDIR)/region_map.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 232 + $(GFX) $< $@ -num_tiles 232 -Wnum_tiles $(INTERFACEGFXDIR)/region_map_affine.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 233 + $(GFX) $< $@ -num_tiles 233 -Wnum_tiles $(MISCGFXDIR)/birch_help.4bpp: $(MISCGFXDIR)/birch_bag.4bpp $(MISCGFXDIR)/birch_grass.4bpp @cat $^ >$@ $(FAMECHECKERGFXDIR)/spinning_pokeball.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 15 + $(GFX) $< $@ -num_tiles 15 -Wnum_tiles $(FAMECHECKERGFXDIR)/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 165 + $(GFX) $< $@ -num_tiles 165 -Wnum_tiles graphics/seagallop/water.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 41 + $(GFX) $< $@ -num_tiles 41 -Wnum_tiles graphics/link/321start.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(TEXTWINDOWGFXDIR)/unk_8470B0C.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 19 + $(GFX) $< $@ -num_tiles 19 -Wnum_tiles $(SLOTMACHINEGFXDIR)/unk_8466620.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 66 + $(GFX) $< $@ -num_tiles 66 -Wnum_tiles $(SLOTMACHINEGFXDIR)/unk_84659d0.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 138 + $(GFX) $< $@ -num_tiles 138 -Wnum_tiles $(TEACHYTVGFXDIR)/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 233 + $(GFX) $< $@ -num_tiles 233 -Wnum_tiles -$(SSANNEGFXDIR)/unk_8479A38.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 17 +$(SSANNEGFXDIR)/smoke.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 17 -Wnum_tiles -$(ITEMPCGFXDIR)/unk_8E85090.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 82 +$(ITEMPCGFXDIR)/bg.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TITLESCREENGFXDIR)/firered/box_art_mon.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 135 + $(GFX) $< $@ -num_tiles 135 -Wnum_tiles $(TITLESCREENGFXDIR)/leafgreen/box_art_mon.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 123 + $(GFX) $< $@ -num_tiles 123 -Wnum_tiles $(CREDITSGFXDIR)/unk_8EAE548.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 77 + $(GFX) $< $@ -num_tiles 77 -Wnum_tiles POKEDEXAREAMARKERSDATADIR := graphics/pokedex/area_markers @@ -535,188 +535,188 @@ graphics/misc/emoticons.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 $(ITEMMENUGFXDIR)/bag_tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 55 + $(GFX) $< $@ -num_tiles 55 -Wnum_tiles $(INTROGFXDIR)/scene_1/grass.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 397 + $(GFX) $< $@ -num_tiles 397 -Wnum_tiles $(INTROGFXDIR)/scene_2/plants.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 17 + $(GFX) $< $@ -num_tiles 17 -Wnum_tiles $(INTROGFXDIR)/scene_2/nidorino_close.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 170 + $(GFX) $< $@ -num_tiles 170 -Wnum_tiles $(INTROGFXDIR)/scene_2/gengar_close.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 114 + $(GFX) $< $@ -num_tiles 114 -Wnum_tiles $(INTROGFXDIR)/scene_3/gengar_anim.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 348 + $(GFX) $< $@ -num_tiles 348 -Wnum_tiles $(BATTLETERRAINGFXDIR)/building/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 77 + $(GFX) $< $@ -num_tiles 77 -Wnum_tiles $(BATTLETERRAINGFXDIR)/cave/anim.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 106 + $(GFX) $< $@ -num_tiles 106 -Wnum_tiles $(BATTLETERRAINGFXDIR)/cave/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 84 + $(GFX) $< $@ -num_tiles 84 -Wnum_tiles $(BATTLETERRAINGFXDIR)/grass/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 98 + $(GFX) $< $@ -num_tiles 98 -Wnum_tiles $(BATTLETERRAINGFXDIR)/indoor/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 77 + $(GFX) $< $@ -num_tiles 77 -Wnum_tiles $(BATTLETERRAINGFXDIR)/longgrass/anim.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 133 + $(GFX) $< $@ -num_tiles 133 -Wnum_tiles $(BATTLETERRAINGFXDIR)/longgrass/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 98 + $(GFX) $< $@ -num_tiles 98 -Wnum_tiles $(BATTLETERRAINGFXDIR)/mountain/anim.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 47 + $(GFX) $< $@ -num_tiles 47 -Wnum_tiles $(BATTLETERRAINGFXDIR)/pond/anim.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 36 + $(GFX) $< $@ -num_tiles 36 -Wnum_tiles $(BATTLETERRAINGFXDIR)/pond/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 75 + $(GFX) $< $@ -num_tiles 75 -Wnum_tiles $(BATTLETERRAINGFXDIR)/sand/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(BATTLETERRAINGFXDIR)/underwater/anim.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 26 + $(GFX) $< $@ -num_tiles 26 -Wnum_tiles $(BATTLETERRAINGFXDIR)/underwater/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 85 + $(GFX) $< $@ -num_tiles 85 -Wnum_tiles $(BATTLETERRAINGFXDIR)/water/terrain.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 81 + $(GFX) $< $@ -num_tiles 81 -Wnum_tiles $(BERRYPOUCHGFXDIR)/background.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 52 + $(GFX) $< $@ -num_tiles 52 -Wnum_tiles $(HALLOFFAMEGFXDIR)/hall_of_fame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 29 + $(GFX) $< $@ -num_tiles 29 -Wnum_tiles $(TILESETGFXDIR)/primary/general/anim/water_current_landwatersedge/7.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 47 + $(GFX) $< $@ -num_tiles 47 -Wnum_tiles $(MAPPREVIEWGFXDIR)/altering_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 391 + $(GFX) $< $@ -num_tiles 391 -Wnum_tiles $(MAPPREVIEWGFXDIR)/berry_forest/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 395 + $(GFX) $< $@ -num_tiles 395 -Wnum_tiles $(MAPPREVIEWGFXDIR)/digletts_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 398 + $(GFX) $< $@ -num_tiles 398 -Wnum_tiles $(MAPPREVIEWGFXDIR)/dotted_hole/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 317 + $(GFX) $< $@ -num_tiles 317 -Wnum_tiles $(MAPPREVIEWGFXDIR)/icefall_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 399 + $(GFX) $< $@ -num_tiles 399 -Wnum_tiles $(MAPPREVIEWGFXDIR)/lost_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 404 + $(GFX) $< $@ -num_tiles 404 -Wnum_tiles $(MAPPREVIEWGFXDIR)/monean_chamber/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 326 + $(GFX) $< $@ -num_tiles 326 -Wnum_tiles $(MAPPREVIEWGFXDIR)/mt_ember/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 355 + $(GFX) $< $@ -num_tiles 355 -Wnum_tiles $(MAPPREVIEWGFXDIR)/mt_moon/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 364 + $(GFX) $< $@ -num_tiles 364 -Wnum_tiles $(MAPPREVIEWGFXDIR)/pokemon_mansion/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 388 + $(GFX) $< $@ -num_tiles 388 -Wnum_tiles $(MAPPREVIEWGFXDIR)/pokemon_tower/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 290 + $(GFX) $< $@ -num_tiles 290 -Wnum_tiles $(MAPPREVIEWGFXDIR)/power_plant/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 368 + $(GFX) $< $@ -num_tiles 368 -Wnum_tiles $(MAPPREVIEWGFXDIR)/rock_tunnel/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 407 + $(GFX) $< $@ -num_tiles 407 -Wnum_tiles $(MAPPREVIEWGFXDIR)/rocket_hideout/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 194 + $(GFX) $< $@ -num_tiles 194 -Wnum_tiles $(MAPPREVIEWGFXDIR)/rocket_warehouse/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 234 + $(GFX) $< $@ -num_tiles 234 -Wnum_tiles $(MAPPREVIEWGFXDIR)/safari_zone/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 330 + $(GFX) $< $@ -num_tiles 330 -Wnum_tiles $(MAPPREVIEWGFXDIR)/seafoam_islands/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 408 + $(GFX) $< $@ -num_tiles 408 -Wnum_tiles $(MAPPREVIEWGFXDIR)/silph_co/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 355 + $(GFX) $< $@ -num_tiles 355 -Wnum_tiles $(MAPPREVIEWGFXDIR)/victory_road/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 375 + $(GFX) $< $@ -num_tiles 375 -Wnum_tiles $(MAPPREVIEWGFXDIR)/viridian_forest/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 389 + $(GFX) $< $@ -num_tiles 389 -Wnum_tiles $(NAMINGGFXDIR)/cursor.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 5 + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles $(NAMINGGFXDIR)/cursor_squished.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 5 + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles $(NAMINGGFXDIR)/cursor_filled.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 5 + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles $(WALLPAPERGFXDIR)/beach/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 60 + $(GFX) $< $@ -num_tiles 60 -Wnum_tiles $(WALLPAPERGFXDIR)/cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 61 + $(GFX) $< $@ -num_tiles 61 -Wnum_tiles $(WALLPAPERGFXDIR)/city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 40 + $(GFX) $< $@ -num_tiles 40 -Wnum_tiles $(WALLPAPERGFXDIR)/crag/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 54 + $(GFX) $< $@ -num_tiles 54 -Wnum_tiles $(WALLPAPERGFXDIR)/desert/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 52 + $(GFX) $< $@ -num_tiles 52 -Wnum_tiles $(WALLPAPERGFXDIR)/forest/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(WALLPAPERGFXDIR)/pokecenter/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(WALLPAPERGFXDIR)/river/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 63 + $(GFX) $< $@ -num_tiles 63 -Wnum_tiles $(WALLPAPERGFXDIR)/savanna/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 45 + $(GFX) $< $@ -num_tiles 45 -Wnum_tiles $(WALLPAPERGFXDIR)/seafloor/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(WALLPAPERGFXDIR)/simple/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 25 + $(GFX) $< $@ -num_tiles 25 -Wnum_tiles $(WALLPAPERGFXDIR)/sky/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 52 + $(GFX) $< $@ -num_tiles 52 -Wnum_tiles $(WALLPAPERGFXDIR)/snow/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 51 + $(GFX) $< $@ -num_tiles 51 -Wnum_tiles $(WALLPAPERGFXDIR)/stars/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 37 + $(GFX) $< $@ -num_tiles 37 -Wnum_tiles $(WALLPAPERGFXDIR)/tiles/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 31 + $(GFX) $< $@ -num_tiles 31 -Wnum_tiles $(WALLPAPERGFXDIR)/volcano/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles diff --git a/include/graphics.h b/include/graphics.h index c486aa058..5efc885bc 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2866,15 +2866,15 @@ extern const u16 gFameCheckerBg3Tilemap[0x400]; extern const u16 gFameCheckerBg2Tilemap[0x400]; // tm_case -extern const u32 gUnknown_8E845D8[]; -extern const u32 gUnknown_8E84A24[]; -extern const u32 gUnknown_8E84B70[]; -extern const u32 gUnknown_8E84CB0[]; -extern const u32 gUnknown_8E84D20[]; -extern const u32 gTMCase_TMSpriteGfx[]; -extern const u32 gUnknown_8E84F20[]; -extern const u32 gUnknown_8E85068[]; -extern const u8 gUnknown_8E99118[]; +extern const u32 gTMCase_Gfx[]; +extern const u32 gTMCaseMenu_Tilemap[]; +extern const u32 gTMCase_Tilemap[]; +extern const u32 gTMCaseMenu_Male_Pal[]; +extern const u32 gTMCaseMenu_Female_Pal[]; +extern const u32 gTMCaseDisc_Gfx[]; +extern const u32 gTMCaseDiscTypes1_Pal[]; +extern const u32 gTMCaseDiscTypes2_Pal[]; +extern const u8 gTMCaseHM_Gfx[]; extern const u16 gTMCaseMainWindowPalette[]; // egg_hatch diff --git a/src/graphics.c b/src/graphics.c index 440083539..b4ab91a60 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1123,18 +1123,18 @@ const u32 gBag_Pal[] = INCBIN_U32("graphics/interface/bag.gbapal.lz"); const u32 gSwapLine_Gfx[] = INCBIN_U32("graphics/interface/bag_swap.4bpp.lz"); const u32 gSwapLine_Pal[] = INCBIN_U32("graphics/interface/bag_swap.gbapal.lz"); -const u32 gUnknown_8E845D8[] = INCBIN_U32("graphics/tm_case/unk_8E845D8.4bpp.lz"); -const u32 gUnknown_8E84A24[] = INCBIN_U32("graphics/tm_case/unk_8E84A24.bin.lz"); -const u32 gUnknown_8E84B70[] = INCBIN_U32("graphics/tm_case/unk_8E84B70.bin.lz"); -const u32 gUnknown_8E84CB0[] = INCBIN_U32("graphics/tm_case/unk_8E84CB0.gbapal.lz"); -const u32 gUnknown_8E84D20[] = INCBIN_U32("graphics/tm_case/unk_8E84D20.gbapal.lz"); -const u32 gTMCase_TMSpriteGfx[] = INCBIN_U32("graphics/tm_case/unk_8E84D90.4bpp.lz"); -const u32 gUnknown_8E84F20[] = INCBIN_U32("graphics/tm_case/unk_8E84F20.gbapal.lz"); -const u32 gUnknown_8E85068[] = INCBIN_U32("graphics/tm_case/unk_8E85068.gbapal.lz"); +const u32 gTMCase_Gfx[] = INCBIN_U32("graphics/tm_case/tm_case.4bpp.lz"); +const u32 gTMCaseMenu_Tilemap[] = INCBIN_U32("graphics/tm_case/menu.bin.lz"); +const u32 gTMCase_Tilemap[] = INCBIN_U32("graphics/tm_case/tm_case.bin.lz"); +const u32 gTMCaseMenu_Male_Pal[] = INCBIN_U32("graphics/tm_case/menu_male.gbapal.lz"); +const u32 gTMCaseMenu_Female_Pal[] = INCBIN_U32("graphics/tm_case/menu_female.gbapal.lz"); +const u32 gTMCaseDisc_Gfx[] = INCBIN_U32("graphics/tm_case/disc.4bpp.lz"); +const u32 gTMCaseDiscTypes1_Pal[] = INCBIN_U32("graphics/tm_case/disc_types_1.gbapal.lz"); +const u32 gTMCaseDiscTypes2_Pal[] = INCBIN_U32("graphics/tm_case/disc_types_2.gbapal.lz"); -const u8 gItemPcTiles[] = INCBIN_U8("graphics/item_pc/unk_8E85090.4bpp.lz"); -const u32 gItemPcBgPals[] = INCBIN_U32("graphics/item_pc/unk_8E85408.gbapal.lz"); -const u8 gItemPcTilemap[] = INCBIN_U8("graphics/item_pc/unk_8E85458.bin.lz"); +const u8 gItemPcTiles[] = INCBIN_U8("graphics/item_pc/bg.4bpp.lz"); +const u32 gItemPcBgPals[] = INCBIN_U32("graphics/item_pc/bg.gbapal.lz"); +const u8 gItemPcTilemap[] = INCBIN_U8("graphics/item_pc/bg.bin.lz"); const u32 gBerryPouchSpriteTiles[] = INCBIN_U32("graphics/berry_pouch/berry_pouch.4bpp.lz"); const u8 gBerryPouchBgGfx[] = INCBIN_U8("graphics/berry_pouch/background.4bpp.lz"); @@ -1212,7 +1212,7 @@ const u32 gNamingScreenPageSwapButton_Gfx[] = INCBIN_U32("graphics/naming_screen const u32 gNamingScreenInputArrow_Gfx[] = INCBIN_U32("graphics/naming_screen/input_arrow.4bpp"); const u32 gNamingScreenUnderscore_Gfx[] = INCBIN_U32("graphics/naming_screen/underscore.4bpp"); -const u8 gUnknown_8E99118[] = INCBIN_U8("graphics/tm_case/unk_8E99118.4bpp"); +const u8 gTMCaseHM_Gfx[] = INCBIN_U8("graphics/tm_case/hm.4bpp"); const u16 gKantoTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal"); const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz"); diff --git a/src/ss_anne.c b/src/ss_anne.c index ce46bc6f6..71335915a 100644 --- a/src/ss_anne.c +++ b/src/ss_anne.c @@ -18,8 +18,8 @@ static void WakeSpriteCallback(struct Sprite *sprite); static void CreateSmokeSprite(void); static void SmokeSpriteCallback(struct Sprite *sprite); -static const u16 sWakeTiles[] = INCBIN_U16("graphics/ss_anne/unk_8479838.4bpp"); -static const u16 sSmokeTiles[] = INCBIN_U16("graphics/ss_anne/unk_8479A38.4bpp"); +static const u16 sWakeTiles[] = INCBIN_U16("graphics/ss_anne/wake.4bpp"); +static const u16 sSmokeTiles[] = INCBIN_U16("graphics/ss_anne/smoke.4bpp"); static const struct SpriteSheet sSpriteSheets[] = { {(const void *)sWakeTiles, sizeof(sWakeTiles), SPRITE_TAG_WAKE}, diff --git a/src/tm_case.c b/src/tm_case.c index 73807c670..8ef9e7fbb 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -226,7 +226,7 @@ static const union AnimCmd *const sTMSpriteAnims[] = { }; static const struct CompressedSpriteSheet sTMSpriteSheet = { - (const void *)gTMCase_TMSpriteGfx, + (const void *)gTMCaseDisc_Gfx, 0x400, TM_CASE_TM_TAG }; @@ -241,7 +241,7 @@ static const struct SpriteTemplate sTMSpriteTemplate = { SpriteCallbackDummy }; -static const u16 sTMSpritePaletteOffsetByType[] = { +static const u16 sTMSpritePaletteOffsetByType[NUMBER_OF_MON_TYPES] = { [TYPE_NORMAL] = 0x000, [TYPE_FIRE] = 0x010, [TYPE_WATER] = 0x020, @@ -440,25 +440,25 @@ static bool8 HandleLoadTMCaseGraphicsAndPalettes(void) { case 0: ResetTempTileDataBuffers(); - DecompressAndCopyTileDataToVram(1, gUnknown_8E845D8, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gTMCase_Gfx, 0, 0, 0); sTMCaseDynamicResources->seqId++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - LZDecompressWram(gUnknown_8E84A24, sTilemapBuffer); + LZDecompressWram(gTMCaseMenu_Tilemap, sTilemapBuffer); sTMCaseDynamicResources->seqId++; } break; case 2: - LZDecompressWram(gUnknown_8E84B70, GetBgTilemapBuffer(1)); + LZDecompressWram(gTMCase_Tilemap, GetBgTilemapBuffer(1)); sTMCaseDynamicResources->seqId++; break; case 3: if (gSaveBlock2Ptr->playerGender == MALE) - LoadCompressedPalette(gUnknown_8E84CB0, 0, 0x80); + LoadCompressedPalette(gTMCaseMenu_Male_Pal, 0, 0x80); else - LoadCompressedPalette(gUnknown_8E84D20, 0, 0x80); + LoadCompressedPalette(gTMCaseMenu_Female_Pal, 0, 0x80); sTMCaseDynamicResources->seqId++; break; case 4: @@ -1387,7 +1387,7 @@ static void TMCase_MoveCursor_UpdatePrintedTMInfo(u16 itemId) static void PlaceHMTileInWindow(u8 windowId, u8 x, u8 y) { - BlitBitmapToWindow(windowId, gUnknown_8E99118, x, y, 16, 12); + BlitBitmapToWindow(windowId, gTMCaseHM_Gfx, x, y, 16, 12); } static void HandlePrintMoneyOnHand(void) @@ -1423,7 +1423,7 @@ static void RemoveTMContextMenu(u8 * a0) static u8 CreateTMSprite(u16 itemId) { u8 spriteId = CreateSprite(&sTMSpriteTemplate, 0x29, 0x2E, 0); - u8 r5; + u8 tmIdx; if (itemId == ITEM_NONE) { UpdateTMSpritePosition(&gSprites[spriteId], 0xFF); @@ -1431,17 +1431,17 @@ static u8 CreateTMSprite(u16 itemId) } else { - r5 = itemId - 33; - SetTMSpriteAnim(&gSprites[spriteId], r5); + tmIdx = itemId - ITEM_TM01; + SetTMSpriteAnim(&gSprites[spriteId], tmIdx); TintTMSpriteByType(gBattleMoves[ItemIdToBattleMoveId(itemId)].type); - UpdateTMSpritePosition(&gSprites[spriteId], r5); + UpdateTMSpritePosition(&gSprites[spriteId], tmIdx); return spriteId; } } static void SetTMSpriteAnim(struct Sprite *sprite, u8 idx) { - if (idx >= 50) + if (idx >= NUM_TECHNICAL_MACHINES) StartSpriteAnim(sprite, 1); else StartSpriteAnim(sprite, 0); @@ -1517,14 +1517,17 @@ static void SpriteCB_MoveTMSpriteInCase(struct Sprite *sprite) } } +// - 1 excludes TYPE_MYSTERY +#define NUM_TM_COLORS ((NUMBER_OF_MON_TYPES - 1) * 16) + static void LoadTMTypePalettes(void) { struct SpritePalette spritePalette; - sTMSpritePaletteBuffer = Alloc(0x110 * sizeof(u16)); - LZDecompressWram(gUnknown_8E84F20, sTMSpritePaletteBuffer); - LZDecompressWram(gUnknown_8E85068, sTMSpritePaletteBuffer + 0x100); - spritePalette.data = sTMSpritePaletteBuffer + 0x110; + sTMSpritePaletteBuffer = Alloc(NUM_TM_COLORS * sizeof(u16)); + LZDecompressWram(gTMCaseDiscTypes1_Pal, sTMSpritePaletteBuffer); // Decompress the first 16 + LZDecompressWram(gTMCaseDiscTypes2_Pal, sTMSpritePaletteBuffer + 0x100); // Decompress the rest (Only 17 total, this is just Dragon type) + spritePalette.data = sTMSpritePaletteBuffer + NUM_TM_COLORS; spritePalette.tag = TM_CASE_TM_TAG; LoadSpritePalette(&spritePalette); } diff --git a/tileset_rules.mk b/tileset_rules.mk index 707bceb8d..a868248cf 100644 --- a/tileset_rules.mk +++ b/tileset_rules.mk @@ -1,202 +1,202 @@ TILESETGFXDIR := data/tilesets $(TILESETGFXDIR)/primary/building/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 640 + $(GFX) $< $@ -num_tiles 640 -Wnum_tiles $(TILESETGFXDIR)/primary/general/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 640 + $(GFX) $< $@ -num_tiles 640 -Wnum_tiles $(TILESETGFXDIR)/secondary/pallet_town/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 76 + $(GFX) $< $@ -num_tiles 76 -Wnum_tiles $(TILESETGFXDIR)/secondary/lavender_town/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 256 + $(GFX) $< $@ -num_tiles 256 -Wnum_tiles $(TILESETGFXDIR)/secondary/cinnabar_island/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 128 + $(GFX) $< $@ -num_tiles 128 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_center/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 376 + $(GFX) $< $@ -num_tiles 376 -Wnum_tiles $(TILESETGFXDIR)/secondary/cable_club/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 632 + $(GFX) $< $@ -num_tiles 632 -Wnum_tiles $(TILESETGFXDIR)/secondary/fuchsia_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 92 + $(GFX) $< $@ -num_tiles 92 -Wnum_tiles $(TILESETGFXDIR)/secondary/pewter_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 207 + $(GFX) $< $@ -num_tiles 207 -Wnum_tiles $(TILESETGFXDIR)/secondary/saffron_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/viridian_forest/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 101 + $(GFX) $< $@ -num_tiles 101 -Wnum_tiles $(TILESETGFXDIR)/secondary/seafoam_islands/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 318 + $(GFX) $< $@ -num_tiles 318 -Wnum_tiles $(TILESETGFXDIR)/secondary/generic_building_2/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 152 + $(GFX) $< $@ -num_tiles 152 -Wnum_tiles $(TILESETGFXDIR)/secondary/underground_path/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 50 + $(GFX) $< $@ -num_tiles 50 -Wnum_tiles $(TILESETGFXDIR)/secondary/restaurant_hotel/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 76 + $(GFX) $< $@ -num_tiles 76 -Wnum_tiles $(TILESETGFXDIR)/secondary/burgled_house/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 172 + $(GFX) $< $@ -num_tiles 172 -Wnum_tiles $(TILESETGFXDIR)/secondary/berry_forest/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 101 + $(GFX) $< $@ -num_tiles 101 -Wnum_tiles $(TILESETGFXDIR)/secondary/sevii_islands_45/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 374 + $(GFX) $< $@ -num_tiles 374 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_league/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 340 + $(GFX) $< $@ -num_tiles 340 -Wnum_tiles $(TILESETGFXDIR)/secondary/viridian_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 112 + $(GFX) $< $@ -num_tiles 112 -Wnum_tiles $(TILESETGFXDIR)/secondary/vermilion_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 140 + $(GFX) $< $@ -num_tiles 140 -Wnum_tiles $(TILESETGFXDIR)/secondary/indigo_plateau/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 247 + $(GFX) $< $@ -num_tiles 247 -Wnum_tiles $(TILESETGFXDIR)/secondary/cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 256 + $(GFX) $< $@ -num_tiles 256 -Wnum_tiles $(TILESETGFXDIR)/secondary/bike_shop/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 60 + $(GFX) $< $@ -num_tiles 60 -Wnum_tiles $(TILESETGFXDIR)/secondary/viridian_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 90 + $(GFX) $< $@ -num_tiles 90 -Wnum_tiles $(TILESETGFXDIR)/secondary/cerulean_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 119 + $(GFX) $< $@ -num_tiles 119 -Wnum_tiles $(TILESETGFXDIR)/secondary/cinnabar_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 146 + $(GFX) $< $@ -num_tiles 146 -Wnum_tiles $(TILESETGFXDIR)/secondary/unused_gatehouse_1/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 144 + $(GFX) $< $@ -num_tiles 144 -Wnum_tiles $(TILESETGFXDIR)/secondary/unused_gatehouse_2/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 144 + $(GFX) $< $@ -num_tiles 144 -Wnum_tiles $(TILESETGFXDIR)/secondary/power_plant/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 80 + $(GFX) $< $@ -num_tiles 80 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_tower/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 128 + $(GFX) $< $@ -num_tiles 128 -Wnum_tiles $(TILESETGFXDIR)/secondary/school/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 50 + $(GFX) $< $@ -num_tiles 50 -Wnum_tiles $(TILESETGFXDIR)/secondary/dummy_3/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 2 + $(GFX) $< $@ -num_tiles 2 -Wnum_tiles $(TILESETGFXDIR)/secondary/navel_rock/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 282 + $(GFX) $< $@ -num_tiles 282 -Wnum_tiles $(TILESETGFXDIR)/secondary/sevii_islands_67/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 374 + $(GFX) $< $@ -num_tiles 374 -Wnum_tiles $(TILESETGFXDIR)/secondary/hall_of_fame/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 208 + $(GFX) $< $@ -num_tiles 208 -Wnum_tiles $(TILESETGFXDIR)/secondary/pewter_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 280 + $(GFX) $< $@ -num_tiles 280 -Wnum_tiles $(TILESETGFXDIR)/secondary/celadon_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 244 + $(GFX) $< $@ -num_tiles 244 -Wnum_tiles $(TILESETGFXDIR)/secondary/saffron_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 262 + $(GFX) $< $@ -num_tiles 262 -Wnum_tiles $(TILESETGFXDIR)/secondary/dummy_1/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 2 + $(GFX) $< $@ -num_tiles 2 -Wnum_tiles $(TILESETGFXDIR)/secondary/generic_building_1/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 63 + $(GFX) $< $@ -num_tiles 63 -Wnum_tiles $(TILESETGFXDIR)/secondary/hoenn_building/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 383 + $(GFX) $< $@ -num_tiles 383 -Wnum_tiles $(TILESETGFXDIR)/secondary/vermilion_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 247 + $(GFX) $< $@ -num_tiles 247 -Wnum_tiles $(TILESETGFXDIR)/secondary/ss_anne/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 245 + $(GFX) $< $@ -num_tiles 245 -Wnum_tiles $(TILESETGFXDIR)/secondary/rock_tunnel/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 256 + $(GFX) $< $@ -num_tiles 256 -Wnum_tiles $(TILESETGFXDIR)/secondary/cerulean_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 246 + $(GFX) $< $@ -num_tiles 246 -Wnum_tiles $(TILESETGFXDIR)/secondary/sea_cottage/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 68 + $(GFX) $< $@ -num_tiles 68 -Wnum_tiles $(TILESETGFXDIR)/secondary/safari_zone_building/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 90 + $(GFX) $< $@ -num_tiles 90 -Wnum_tiles $(TILESETGFXDIR)/secondary/fan_club_daycare/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 85 + $(GFX) $< $@ -num_tiles 85 -Wnum_tiles $(TILESETGFXDIR)/secondary/dummy_4/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 2 + $(GFX) $< $@ -num_tiles 2 -Wnum_tiles $(TILESETGFXDIR)/secondary/tanoby_ruins/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 74 + $(GFX) $< $@ -num_tiles 74 -Wnum_tiles $(TILESETGFXDIR)/secondary/trainer_tower/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 343 + $(GFX) $< $@ -num_tiles 343 -Wnum_tiles $(TILESETGFXDIR)/secondary/cerulean_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 158 + $(GFX) $< $@ -num_tiles 158 -Wnum_tiles $(TILESETGFXDIR)/secondary/fuchsia_city/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 191 + $(GFX) $< $@ -num_tiles 191 -Wnum_tiles $(TILESETGFXDIR)/secondary/mart/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 36 + $(GFX) $< $@ -num_tiles 36 -Wnum_tiles $(TILESETGFXDIR)/secondary/museum/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 137 + $(GFX) $< $@ -num_tiles 137 -Wnum_tiles $(TILESETGFXDIR)/secondary/lab/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 102 + $(GFX) $< $@ -num_tiles 102 -Wnum_tiles $(TILESETGFXDIR)/secondary/game_corner/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 171 + $(GFX) $< $@ -num_tiles 171 -Wnum_tiles $(TILESETGFXDIR)/secondary/celadon_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 103 + $(GFX) $< $@ -num_tiles 103 -Wnum_tiles $(TILESETGFXDIR)/secondary/dummy_2/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 2 + $(GFX) $< $@ -num_tiles 2 -Wnum_tiles $(TILESETGFXDIR)/secondary/digletts_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 248 + $(GFX) $< $@ -num_tiles 248 -Wnum_tiles $(TILESETGFXDIR)/secondary/department_store/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 201 + $(GFX) $< $@ -num_tiles 201 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_mansion/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 350 + $(GFX) $< $@ -num_tiles 350 -Wnum_tiles $(TILESETGFXDIR)/secondary/condominiums/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 384 + $(GFX) $< $@ -num_tiles 384 -Wnum_tiles $(TILESETGFXDIR)/secondary/mt_ember/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 288 + $(GFX) $< $@ -num_tiles 288 -Wnum_tiles $(TILESETGFXDIR)/secondary/sevii_islands_123/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 374 + $(GFX) $< $@ -num_tiles 374 -Wnum_tiles $(TILESETGFXDIR)/secondary/island_harbor/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 165 + $(GFX) $< $@ -num_tiles 165 -Wnum_tiles From d8aa1ce2bf28a12c7a14120f688313ce2e7ff582 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 1 Nov 2022 23:09:17 -0400 Subject: [PATCH 04/42] Sync link.c --- common_syms/link.txt | 20 +- .../link_test_font.png => link/test_font.png} | Bin .../wireless_display.bin} | Bin .../wireless_display.png} | Bin include/link.h | 59 +- include/reset_save_heap.h | 8 +- src/link.c | 762 +++++++----------- src/menu_helpers.c | 2 +- src/mevent.c | 4 +- src/pokemon_summary_screen.c | 12 +- src/reset_save_heap.c | 2 +- src/trade.c | 4 +- 12 files changed, 369 insertions(+), 504 deletions(-) rename graphics/{interface/link_test_font.png => link/test_font.png} (100%) rename graphics/{interface/wireless_link_display.bin => link/wireless_display.bin} (100%) rename graphics/{interface/wireless_link_display.png => link/wireless_display.png} (100%) diff --git a/common_syms/link.txt b/common_syms/link.txt index 82cf757a1..4118d1eb4 100644 --- a/common_syms/link.txt +++ b/common_syms/link.txt @@ -3,18 +3,18 @@ gLinkDebugSeed gLocalLinkPlayerBlock gLinkErrorOccurred gLinkDebugFlags -gFiller_3003EB4 +gLinkFiller1 gRemoteLinkPlayersNotReceived gBlockReceivedStatus -gFiller_3003EC0 +gLinkFiller2 gLinkHeldKeys gRecvCmds gLinkStatus -gLinkAllAcked5FFF -gUnknown_3003F28 -gLinkCommand2FFEAck -gLinkCommand5FFFAck -gLinkCmd5FFFparam +gLinkDummy1 +gLinkDummy2 +gReadyToExitStandby +gReadyToCloseLink +gReadyCloseLinkType gSuppressLinkErrorMessage gWirelessCommType gSavedLinkPlayerCount @@ -26,9 +26,9 @@ gLinkCallback gShouldAdvanceLinkState gLinkTestBlockChecksums gBlockRequestType -gFiller_3003F94 -gFiller_3003F98 -gFiller_3003F9C +gLinkFiller3 +gLinkFiller4 +gLinkFiller5 gLastSendQueueCount gLink gLastRecvQueueCount diff --git a/graphics/interface/link_test_font.png b/graphics/link/test_font.png similarity index 100% rename from graphics/interface/link_test_font.png rename to graphics/link/test_font.png diff --git a/graphics/interface/wireless_link_display.bin b/graphics/link/wireless_display.bin similarity index 100% rename from graphics/interface/wireless_link_display.bin rename to graphics/link/wireless_display.bin diff --git a/graphics/interface/wireless_link_display.png b/graphics/link/wireless_display.png similarity index 100% rename from graphics/interface/wireless_link_display.png rename to graphics/link/wireless_display.png diff --git a/include/link.h b/include/link.h index 74a94920c..20a9ee08b 100644 --- a/include/link.h +++ b/include/link.h @@ -7,6 +7,7 @@ #define MAX_RFU_PLAYERS 5 #define CMD_LENGTH 8 #define QUEUE_CAPACITY 50 +#define OVERWORLD_RECV_QUEUE_MAX 3 #define BLOCK_BUFFER_SIZE 0x100 #define LINK_SLAVE 0 @@ -50,23 +51,41 @@ #define EXTRACT_LINK_ERRORS(status) \ (((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT) -#define LINKCMD_SEND_LINK_TYPE 0x2222 -#define LINKCMD_0x2FFE 0x2FFE -#define LINKCMD_SEND_HELD_KEYS 0x4444 -#define LINKCMD_0x5555 0x5555 -#define LINKCMD_0x5566 0x5566 -#define LINKCMD_0x5FFF 0x5FFF -#define LINKCMD_0x6666 0x6666 -#define LINKCMD_0x7777 0x7777 -#define LINKCMD_COUNTDOWN 0x7FFF -#define LINKCMD_CONT_BLOCK 0x8888 -#define LINKCMD_0xAAAA 0xAAAA -#define LINKCMD_0xAAAB 0xAAAB -#define LINKCMD_INIT_BLOCK 0xBBBB -#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE -#define LINKCMD_0xCCCC 0xCCCC +#define LINKCMD_BLENDER_STOP 0x1111 +#define LINKCMD_SEND_LINK_TYPE 0x2222 +#define LINKCMD_BLENDER_SCORE_MISS 0x2345 +#define LINKCMD_READY_EXIT_STANDBY 0x2FFE +#define LINKCMD_SEND_PACKET 0x2FFF +#define LINKCMD_BLENDER_SEND_KEYS 0x4444 +#define LINKCMD_BLENDER_SCORE_BEST 0x4523 +#define LINKCMD_BLENDER_SCORE_GOOD 0x5432 +#define LINKCMD_DUMMY_1 0x5555 +#define LINKCMD_DUMMY_2 0x5566 +#define LINKCMD_READY_CLOSE_LINK 0x5FFF +#define LINKCMD_SEND_EMPTY 0x6666 +#define LINKCMD_SEND_0xEE 0x7777 +#define LINKCMD_BLENDER_PLAY_AGAIN 0x7779 +#define LINKCMD_COUNTDOWN 0x7FFF +#define LINKCMD_CONT_BLOCK 0x8888 +#define LINKCMD_BLENDER_NO_BERRIES 0x9999 +#define LINKCMD_BLENDER_NO_PBLOCK_SPACE 0xAAAA +#define LINKCMD_SEND_ITEM 0xAAAB +#define LINKCMD_READY_TO_TRADE 0xAABB +#define LINKCMD_READY_FINISH_TRADE 0xABCD +#define LINKCMD_INIT_BLOCK 0xBBBB +#define LINKCMD_READY_CANCEL_TRADE 0xBBCC +#define LINKCMD_SEND_HELD_KEYS 0xCAFE +#define LINKCMD_SEND_BLOCK_REQ 0xCCCC +#define LINKCMD_START_TRADE 0xCCDD +#define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA +#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD +#define LINKCMD_PLAYER_CANCEL_TRADE 0xDDEE +#define LINKCMD_REQUEST_CANCEL 0xEEAA +#define LINKCMD_BOTH_CANCEL_TRADE 0xEEBB +#define LINKCMD_PARTNER_CANCEL_TRADE 0xEECC +#define LINKCMD_NONE 0xEFFF -#define LINKTYPE_TRADE 0x1111 // trade +#define LINKTYPE_TRADE 0x1111 // trade #define LINKTYPE_0x1122 0x1122 // trade #define LINKTYPE_TRADE_SETUP 0x1133 #define LINKTYPE_0x1144 0x1144 // trade @@ -80,8 +99,8 @@ #define LINKTYPE_BATTLE_TOWER 0x2288 #define LINKTYPE_RECORD_MIX_BEFORE 0x3311 #define LINKTYPE_RECORD_MIX_AFTER 0x3322 -#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 -#define LINKTYPE_CONTEST_GMODE 0x6601 +#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 +#define LINKTYPE_CONTEST_GMODE 0x6601 enum { BLOCK_REQ_SIZE_NONE, // Identical to 200 @@ -263,10 +282,10 @@ void SetCloseLinkCallback(void); void OpenLink(void); bool8 IsLinkMaster(void); void CheckShouldAdvanceLinkState(void); -void Link_StartSend5FFFwithParam(u16 a0); +void SetCloseLinkCallbackAndType(u16 type); void CloseLink(void); bool8 IsLinkTaskFinished(void); -bool32 LinkRecvQueueLengthMoreThan2(void); +bool32 IsLinkRecvQueueAtOverworldMax(void); void ResetSerial(void); void SetWirelessCommType1(void); void LoadWirelessStatusIndicatorSpriteGfx(void); diff --git a/include/reset_save_heap.h b/include/reset_save_heap.h index e29448815..0351abefe 100644 --- a/include/reset_save_heap.h +++ b/include/reset_save_heap.h @@ -1,13 +1,7 @@ #ifndef GUARD_RESET_SAVE_HEAP_H #define GUARD_RESET_SAVE_HEAP_H -// Exported type declarations - -// Exported RAM declarations - -// Exported ROM declarations - -void ResetSaveHeap(void); +void ReloadSave(void); #endif //GUARD_RESET_SAVE_HEAP_H diff --git a/src/link.c b/src/link.c index 6473de242..f48b04cef 100644 --- a/src/link.c +++ b/src/link.c @@ -40,8 +40,8 @@ struct LinkTestBGInfo { u32 screenBaseBlock; u32 paletteNum; - u32 dummy_8; - u32 dummy_C; + u32 baseChar; + u32 unused; }; #define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) @@ -49,13 +49,12 @@ struct LinkTestBGInfo static struct BlockTransfer sBlockSend; ALIGNED(8) static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; static u32 sBlockSendDelayCounter; -static u32 gUnknown_3000E4C; -static u8 gUnknown_3000E50; +static u32 sDummy1; // Never read +static u8 sDummy2; // Never assigned, read in unused function static u32 sPlayerDataExchangeStatus; -static u32 gUnknown_3000E58; +static u32 sDummy3; // Never read static u8 sLinkTestLastBlockSendPos; ALIGNED(8) static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; -// File break? static u8 sNumVBlanksWithoutSerialIntr; static bool8 sSendBufferEmpty; static u16 sSendNonzeroCheck; @@ -68,18 +67,18 @@ u32 gLinkDebugSeed; struct LinkPlayerBlock gLocalLinkPlayerBlock; bool8 gLinkErrorOccurred; u32 gLinkDebugFlags; -u32 gFiller_3003EB4; +u32 gLinkFiller1; bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; -u32 gFiller_3003EC0; +u32 gLinkFiller2; u16 gLinkHeldKeys; u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u32 gLinkStatus; -bool8 gLinkAllAcked5FFF; -bool8 gUnknown_3003F28; -bool8 gLinkCommand2FFEAck[MAX_LINK_PLAYERS]; -bool8 gLinkCommand5FFFAck[MAX_LINK_PLAYERS]; -u16 gLinkCmd5FFFparam; +bool8 gLinkDummy1; // Never read +bool8 gLinkDummy2; // Never read +bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; +bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; +u16 gReadyCloseLinkType; u8 gSuppressLinkErrorMessage; u8 gWirelessCommType; u8 gSavedLinkPlayerCount; @@ -91,22 +90,22 @@ void (*gLinkCallback)(void); u8 gShouldAdvanceLinkState; u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; u8 gBlockRequestType; -u32 gFiller_3003F94; // file -u32 gFiller_3003F98; // boundary -u32 gFiller_3003F9C; // here? +u32 gLinkFiller3; // file +u32 gLinkFiller4; // boundary +u32 gLinkFiller5; // here? u8 gLastSendQueueCount; struct Link gLink; u8 gLastRecvQueueCount; u16 gLinkSavedIme; -EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = FALSE; -EWRAM_DATA bool8 gUnknown_2022111 = FALSE; -EWRAM_DATA u32 gUnknown_2022114 = 0; +static EWRAM_DATA bool8 sLinkTestDebugValuesEnabled = FALSE; +static EWRAM_DATA bool8 sDummyFlag = FALSE; +EWRAM_DATA u32 gBerryBlenderKeySendAttempts = 0; EWRAM_DATA u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2] = {}; EWRAM_DATA u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE] = {}; -EWRAM_DATA bool8 gLinkOpen = FALSE; +static EWRAM_DATA bool8 sLinkOpen = FALSE; EWRAM_DATA u16 gLinkType = 0; -EWRAM_DATA u16 gLinkTimeOutCounter = 0; +static EWRAM_DATA u16 sTimeOutCounter = 0; EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {}; EWRAM_DATA struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS] = {}; EWRAM_DATA struct LinkPlayer gSavedLinkPlayers[MAX_RFU_PLAYERS] = {}; @@ -114,13 +113,13 @@ EWRAM_DATA struct { u32 status; u8 lastRecvQueueCount; u8 lastSendQueueCount; - u8 unk_06; + bool8 disconnected; } sLinkErrorBuffer = {}; -static EWRAM_DATA u16 sStartSend5FFFfailures = 0; +static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL; static void InitLocalLinkPlayer(void); -static void sub_800978C(void); +static void VBlankCB_LinkError(void); static void CB2_LinkTest(void); static void ProcessRecvCmds(u8 id); static void LinkCB_SendHeldKeys(void); @@ -129,19 +128,19 @@ static bool32 InitBlockSend(const void *src, size_t size); static void LinkCB_BlockSendBegin(void); static void LinkCB_BlockSend(void); static void LinkCB_BlockSendEnd(void); -static void sub_800A3CC(void); +static void SetBerryBlenderLinkCallback(void); static void SetBlockReceivedFlag(u8 id); static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size); -static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2); +static void LinkTest_PrintHex(u32 pos, u8 a0, u8 a1, u8 a2); static void LinkCB_RequestPlayerDataExchange(void); static void Task_PrintTestData(u8 taskId); -static void LinkCB_BuildCommand5FFF(void); -static void LinkCB_WaitAckCommand5FFF(void); -static void LinkFunc_Send2FFE_1(void); -static void LinkFunc_Send2FFE_2(void); +static void LinkCB_ReadyCloseLink(void); +static void LinkCB_WaitCloseLink(void); +static void LinkCB_Standby(void); +static void LinkCB_StandbyForAll(void); static void CheckErrorStatus(void); static void CB2_PrintErrorMessage(void); -static void SetWirelessCommType0(void); +static void SetWirelessCommType0_Internal(void); static void DisableSerial(void); static void EnableSerial(void); static bool8 IsSioMultiMaster(void); @@ -156,11 +155,11 @@ static void DoSend(void); static void StopTimer(void); static void SendRecvDone(void); -static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal"); -static const u16 sWirelessLinkDisplay4bpp[] = INCBIN_U16("graphics/interface/wireless_link_display.4bpp.lz"); -static const u16 sWirelessLinkDisplayBin[] = INCBIN_U16("graphics/interface/wireless_link_display.bin.lz"); -static const u16 sLinkTestFontPal[] = INCBIN_U16("graphics/interface/link_test_font.gbapal"); -static const u16 sLinkTestFontGfx[] = INCBIN_U16("graphics/interface/link_test_font.4bpp"); +static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/link/wireless_display.gbapal"); +static const u16 sWirelessLinkDisplayGfx[] = INCBIN_U16("graphics/link/wireless_display.4bpp.lz"); +static const u16 sWirelessLinkDisplayTilemap[] = INCBIN_U16("graphics/link/wireless_display.bin.lz"); +static const u16 sLinkTestFontPal[] = INCBIN_U16("graphics/link/test_font.gbapal"); +static const u16 sLinkTestFontGfx[] = INCBIN_U16("graphics/link/test_font.4bpp"); static const struct BlockRequest sBlockRequests[] = { [BLOCK_REQ_SIZE_NONE] = { gBlockSendBuffer, 200 }, @@ -170,11 +169,7 @@ static const struct BlockRequest sBlockRequests[] = { [BLOCK_REQ_SIZE_40] = { gBlockSendBuffer, 40 } }; static const char sASCIIGameFreakInc[] = "GameFreak inc."; -static const char sASCIITestPrint[] = "TEST PRINT\n" - "P0\n" - "P1\n" - "P2\n" - "P3"; +static const char sASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3"; static const struct BgTemplate sLinkErrorBgTemplates[] = { { @@ -234,7 +229,7 @@ bool8 IsWirelessAdapterConnected(void) rfu_waitREQComplete(); return TRUE; } - SetWirelessCommType0(); + SetWirelessCommType0_Internal(); CloseLink(); RestoreSerialTimer3IntrHandlers(); return FALSE; @@ -245,13 +240,13 @@ void Task_DestroySelf(u8 taskId) DestroyTask(taskId); } -void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4) +void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 baseChar) { LoadPalette(sLinkTestFontPal, paletteNum * 16, 0x20); - DmaCopy16(3, sLinkTestFontGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof sLinkTestFontGfx); + DmaCopy16(3, sLinkTestFontGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * baseChar), sizeof sLinkTestFontGfx); gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.paletteNum = paletteNum; - gLinkTestBGInfo.dummy_8 = a4; + gLinkTestBGInfo.baseChar = baseChar; switch (bgNum) { case 1: @@ -268,32 +263,33 @@ void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBloc SetGpuReg(REG_OFFSET_BG0VOFS + bgNum * 4, 0); } -void sub_80095BC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +// Unused +static void LoadLinkTestBgGfx(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) { LoadPalette(sLinkTestFontPal, paletteNum * 16, 0x20); DmaCopy16(3, sLinkTestFontGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestFontGfx); gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.paletteNum = paletteNum; - gLinkTestBGInfo.dummy_8 = 0; + gLinkTestBGInfo.baseChar = 0; SetGpuReg(gBGControlRegOffsets[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock)); } -void LinkTestScreen(void) +// Unused +static void LinkTestScreen(void) { int i; ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - SetVBlankCallback(sub_800978C); + SetVBlankCallback(VBlankCB_LinkError); ResetBlockSend(); - gLinkType = 0x1111; + gLinkType = LINKTYPE_TRADE; OpenLink(); SeedRng(gMain.vblankCounter2); - for (i = 0; i < MAX_LINK_PLAYERS; i++) - { + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; - } + InitLinkTestBG(0, 2, 4, 0, 0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); CreateTask(Task_DestroySelf, 0); @@ -301,7 +297,7 @@ void LinkTestScreen(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - gUnknown_3000E58 = 0; + sDummy3 = FALSE; InitLocalLinkPlayer(); CreateTask(Task_PrintTestData, 0); SetMainCallback2(CB2_LinkTest); @@ -328,7 +324,7 @@ static void InitLocalLinkPlayer(void) } } -static void sub_800978C(void) +static void VBlankCB_LinkError(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -339,11 +335,10 @@ void InitLink(void) { int i; - for (i = 0; i < 8; i++) - { - gSendCmd[i] = 0xEFFF; - } - gLinkOpen = TRUE; + for (i = 0; i < CMD_LENGTH; i++) + gSendCmd[i] = LINKCMD_NONE; + + sLinkOpen = TRUE; EnableSerial(); } @@ -370,10 +365,10 @@ void OpenLink(void) gSuppressLinkErrorMessage = FALSE; ResetBlockReceivedFlags(); ResetBlockSend(); - gUnknown_3000E4C = 0; - gUnknown_3003F28 = FALSE; - gLinkAllAcked5FFF = FALSE; - gLinkCmd5FFFparam = 0; + sDummy1 = FALSE; + gLinkDummy2 = FALSE; + gLinkDummy1 = FALSE; + gReadyCloseLinkType = 0; CreateTask(Task_TriggerHandshake, 2); } else @@ -384,8 +379,8 @@ void OpenLink(void) for (i = 0; i < MAX_LINK_PLAYERS; i++) { gRemoteLinkPlayersNotReceived[i] = TRUE; - gLinkCommand5FFFAck[i] = FALSE; - gLinkCommand2FFEAck[i] = FALSE; + gReadyToCloseLink[i] = FALSE; + gReadyToExitStandby[i] = FALSE; } } @@ -393,28 +388,26 @@ void CloseLink(void) { gReceivedRemoteLinkPlayers = FALSE; if (gWirelessCommType) - { LinkRfu_Shutdown(); - } - gLinkOpen = FALSE; + sLinkOpen = FALSE; DisableSerial(); } -void TestBlockTransfer(u8 nothing, u8 is, u8 used) +static void TestBlockTransfer(u8 unused0, u8 unused1, u8 unused2) { u8 i; u8 status; if (sLinkTestLastBlockSendPos != sBlockSend.pos) { - LinkTest_prnthex(sBlockSend.pos, 2, 3, 2); + LinkTest_PrintHex(sBlockSend.pos, 2, 3, 2); sLinkTestLastBlockSendPos = sBlockSend.pos; } for (i = 0; i < MAX_LINK_PLAYERS; i++) { if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos) { - LinkTest_prnthex(sBlockRecv[i].pos, 2, i + 4, 2); + LinkTest_PrintHex(sBlockRecv[i].pos, 2, i + 4, 2); sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos; } } @@ -429,44 +422,36 @@ void TestBlockTransfer(u8 nothing, u8 is, u8 used) ResetBlockReceivedFlag(i); if (gLinkTestBlockChecksums[i] != 0x0342) { - gLinkTestDebugValuesEnabled = FALSE; - gUnknown_2022111 = FALSE; + sLinkTestDebugValuesEnabled = FALSE; + sDummyFlag = FALSE; } } } } } -void LinkTestProcessKeyInput(void) +static void LinkTestProcessKeyInput(void) { if (JOY_NEW(A_BUTTON)) - { gShouldAdvanceLinkState = 1; - } + if (JOY_HELD(B_BUTTON)) - { InitBlockSend(gHeap + 0x4000, 0x2004); - } + if (JOY_NEW(L_BUTTON)) - { BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(2, 0, 0)); - } + if (JOY_NEW(START_BUTTON)) - { SetSuppressLinkErrorMessage(TRUE); - } + if (JOY_NEW(R_BUTTON)) - { TrySavingData(SAVE_LINK); - } + if (JOY_NEW(SELECT_BUTTON)) - { SetCloseLinkCallback(); - } - if (gLinkTestDebugValuesEnabled) - { + + if (sLinkTestDebugValuesEnabled) SetLinkDebugValues(gMain.vblankCounter2, gLinkCallback ? gLinkVSyncDisabled : gLinkVSyncDisabled | 0x10); - } } static void CB2_LinkTest(void) @@ -483,28 +468,24 @@ u16 LinkMain2(const u16 *heldKeys) { u8 i; - if (!gLinkOpen) - { + if (!sLinkOpen) return 0; - } - for (i = 0; i < 8; i++) - { + + for (i = 0; i < CMD_LENGTH; i++) gSendCmd[i] = 0; - } + gLinkHeldKeys = *heldKeys; if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED) { ProcessRecvCmds(SIO_MULTI_CNT->id); if (gLinkCallback != NULL) - { gLinkCallback(); - } CheckErrorStatus(); } return gLinkStatus; } -void HandleReceiveRemoteLinkPlayer(u8 who) +static void HandleReceiveRemoteLinkPlayer(u8 who) { int i; int count; @@ -512,16 +493,13 @@ void HandleReceiveRemoteLinkPlayer(u8 who) count = 0; gRemoteLinkPlayersNotReceived[who] = FALSE; for (i = 0; i < GetLinkPlayerCount_2(); i++) - { count += gRemoteLinkPlayersNotReceived[i]; - } + if (count == 0 && !gReceivedRemoteLinkPlayers) - { gReceivedRemoteLinkPlayers = TRUE; - } } -void ProcessRecvCmds(u8 unused) +static void ProcessRecvCmds(u8 unused) { u16 i; @@ -529,9 +507,8 @@ void ProcessRecvCmds(u8 unused) { gLinkPartnersHeldKeys[i] = 0; if (gRecvCmds[i][0] == 0) - { continue; - } + switch (gRecvCmds[i][0]) { case LINKCMD_SEND_LINK_TYPE: @@ -546,14 +523,14 @@ void ProcessRecvCmds(u8 unused) InitBlockSend(block, sizeof(*block)); break; } - case LINKCMD_SEND_HELD_KEYS: + case LINKCMD_BLENDER_SEND_KEYS: gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; break; - case LINKCMD_0x5555: - gUnknown_3003F28 = TRUE; + case LINKCMD_DUMMY_1: + gLinkDummy2 = TRUE; break; - case LINKCMD_0x5566: - gUnknown_3003F28 = TRUE; + case LINKCMD_DUMMY_2: + gLinkDummy2 = TRUE; break; case LINKCMD_INIT_BLOCK: { @@ -574,18 +551,14 @@ void ProcessRecvCmds(u8 unused) buffer = (u16 *)gDecompressionBuffer; for (j = 0; j < CMD_LENGTH - 1; j++) - { buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[i][j + 1]; - } } else { u16 j; for (j = 0; j < CMD_LENGTH - 1; j++) - { gBlockRecvBuffer[i][(sBlockRecv[i].pos / 2) + j] = gRecvCmds[i][j + 1]; - } } sBlockRecv[i].pos += (CMD_LENGTH - 1) * 2; @@ -608,14 +581,10 @@ void ProcessRecvCmds(u8 unused) } ConvertLinkPlayerName(linkPlayer); if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 - || strcmp(block->magic2, sASCIIGameFreakInc) != 0) - { + || strcmp(block->magic2, sASCIIGameFreakInc) != 0) SetMainCallback2(CB2_LinkError); - } else - { HandleReceiveRemoteLinkPlayer(i); - } } else { @@ -624,19 +593,19 @@ void ProcessRecvCmds(u8 unused) } } break; - case LINKCMD_0x5FFF: - gLinkCommand5FFFAck[i] = TRUE; + case LINKCMD_READY_CLOSE_LINK: + gReadyToCloseLink[i] = TRUE; break; - case LINKCMD_0x2FFE: - gLinkCommand2FFEAck[i] = TRUE; + case LINKCMD_READY_EXIT_STANDBY: + gReadyToExitStandby[i] = TRUE; break; - case LINKCMD_0xAAAA: - sub_800A3CC(); + case LINKCMD_BLENDER_NO_PBLOCK_SPACE: + SetBerryBlenderLinkCallback(); break; - case LINKCMD_0xCCCC: + case LINKCMD_SEND_BLOCK_REQ: SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size); break; - case LINKCMD_SEND_HELD_KEYS_2: + case LINKCMD_SEND_HELD_KEYS: gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; break; } @@ -651,29 +620,27 @@ void BuildSendCmd(u16 command) gSendCmd[0] = LINKCMD_SEND_LINK_TYPE; gSendCmd[1] = gLinkType; break; - case LINKCMD_0x2FFE: - gSendCmd[0] = LINKCMD_0x2FFE; + case LINKCMD_READY_EXIT_STANDBY: + gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY; break; - case LINKCMD_SEND_HELD_KEYS: - gSendCmd[0] = LINKCMD_SEND_HELD_KEYS; + case LINKCMD_BLENDER_SEND_KEYS: + gSendCmd[0] = LINKCMD_BLENDER_SEND_KEYS; gSendCmd[1] = gMain.heldKeys; break; - case LINKCMD_0x5555: - gSendCmd[0] = LINKCMD_0x5555; + case LINKCMD_DUMMY_1: + gSendCmd[0] = LINKCMD_DUMMY_1; break; - case LINKCMD_0x6666: - gSendCmd[0] = LINKCMD_0x6666; + case LINKCMD_SEND_EMPTY: + gSendCmd[0] = LINKCMD_SEND_EMPTY; gSendCmd[1] = 0; break; - case LINKCMD_0x7777: + case LINKCMD_SEND_0xEE: { u8 i; - gSendCmd[0] = LINKCMD_0x7777; + gSendCmd[0] = LINKCMD_SEND_0xEE; for (i = 0; i < 5; i++) - { gSendCmd[i + 1] = 0xEE; - } break; } case LINKCMD_INIT_BLOCK: @@ -681,30 +648,30 @@ void BuildSendCmd(u16 command) gSendCmd[1] = sBlockSend.size; gSendCmd[2] = sBlockSend.multiplayerId + 0x80; break; - case LINKCMD_0xAAAA: - gSendCmd[0] = LINKCMD_0xAAAA; + case LINKCMD_BLENDER_NO_PBLOCK_SPACE: + gSendCmd[0] = LINKCMD_BLENDER_NO_PBLOCK_SPACE; break; - case LINKCMD_0xAAAB: - gSendCmd[0] = LINKCMD_0xAAAB; + case LINKCMD_SEND_ITEM: + gSendCmd[0] = LINKCMD_SEND_ITEM; gSendCmd[1] = gSpecialVar_ItemId; break; - case LINKCMD_0xCCCC: - gSendCmd[0] = LINKCMD_0xCCCC; + case LINKCMD_SEND_BLOCK_REQ: + gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ; gSendCmd[1] = gBlockRequestType; break; - case LINKCMD_0x5FFF: - gSendCmd[0] = LINKCMD_0x5FFF; - gSendCmd[1] = gLinkCmd5FFFparam; + case LINKCMD_READY_CLOSE_LINK: + gSendCmd[0] = LINKCMD_READY_CLOSE_LINK; + gSendCmd[1] = gReadyCloseLinkType; break; - case LINKCMD_0x5566: - gSendCmd[0] = LINKCMD_0x5566; + case LINKCMD_DUMMY_2: + gSendCmd[0] = LINKCMD_DUMMY_2; break; - case LINKCMD_SEND_HELD_KEYS_2: + case LINKCMD_SEND_HELD_KEYS: if (gHeldKeyCodeToSend == 0 || gLinkTransferringData) { break; } - gSendCmd[0] = LINKCMD_SEND_HELD_KEYS_2; + gSendCmd[0] = LINKCMD_SEND_HELD_KEYS; gSendCmd[1] = gHeldKeyCodeToSend; break; } @@ -713,31 +680,26 @@ void BuildSendCmd(u16 command) void StartSendingKeysToLink(void) { if (gWirelessCommType) - { StartSendingKeysToRfu(); - } + gLinkCallback = LinkCB_SendHeldKeys; } bool32 IsSendingKeysToLink(void) { if (gWirelessCommType) - { return IsSendingKeysToRfu(); - } + if (gLinkCallback == LinkCB_SendHeldKeys) - { return TRUE; - } + return FALSE; } static void LinkCB_SendHeldKeys(void) { if (gReceivedRemoteLinkPlayers == TRUE) - { - BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2); - } + BuildSendCmd(LINKCMD_SEND_HELD_KEYS); } void ClearLinkCallback(void) @@ -748,45 +710,40 @@ void ClearLinkCallback(void) void ClearLinkCallback_2(void) { if (gWirelessCommType) - { ClearLinkRfuCallback(); - } else - { gLinkCallback = NULL; - } } u8 GetLinkPlayerCount(void) { if (gWirelessCommType) - { return GetRfuPlayerCount(); - } + return EXTRACT_PLAYER_COUNT(gLinkStatus); } void OpenLinkTimed(void) { - sPlayerDataExchangeStatus = 0; - gLinkTimeOutCounter = 0; + sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED; + sTimeOutCounter = 0; OpenLink(); } -u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) +u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers) { int i; int count; u32 index; - u8 cmpVal; + u8 numPlayers; u32 linkType1; u32 linkType2; count = 0; if (gReceivedRemoteLinkPlayers == TRUE) { - cmpVal = GetLinkPlayerCount_2(); - if (lower > cmpVal || cmpVal > upper) + numPlayers = GetLinkPlayerCount_2(); + if (minPlayers > numPlayers || numPlayers > maxPlayers) { sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS; return sPlayerDataExchangeStatus; @@ -801,23 +758,21 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) for (i = 0, index = 0; i < GetLinkPlayerCount(); index++, i++) { if (gLinkPlayers[index].linkType == gLinkPlayers[0].linkType) - { count++; - } } if (count == GetLinkPlayerCount()) { - if (gLinkPlayers[0].linkType == 0x1133) + if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP) { switch (Trade_CalcLinkPlayerCompatibilityParam()) { - case 0: + case TRADE_BOTH_PLAYERS_READY: sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; break; - case 1: + case TRADE_PLAYER_NOT_READY: sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY; break; - case 2: + case TRADE_PARTNER_NOT_READY: sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY; break; } @@ -833,7 +788,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) } } } - else if (++gLinkTimeOutCounter > 600) + else if (++sTimeOutCounter > 600) { sPlayerDataExchangeStatus = EXCHANGE_TIMED_OUT; } @@ -850,9 +805,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void) for (i = 0; i < GetLinkPlayerCount(); i++) { if (gLinkPlayers[i].linkType == gLinkPlayers[0].linkType) - { count++; - } } if (count == GetLinkPlayerCount()) { @@ -877,9 +830,7 @@ void ResetLinkPlayers(void) int i; for (i = 0; i <= MAX_LINK_PLAYERS; i++) - { gLinkPlayers[i] = (struct LinkPlayer){}; - } } static void ResetBlockSend(void) @@ -893,23 +844,21 @@ static void ResetBlockSend(void) static bool32 InitBlockSend(const void *src, size_t size) { if (sBlockSend.active) - { return FALSE; - } + sBlockSend.multiplayerId = GetMultiplayerId(); sBlockSend.active = TRUE; sBlockSend.size = size; sBlockSend.pos = 0; - if (size > 0x100) + if (size > BLOCK_BUFFER_SIZE) { sBlockSend.src = src; } else { if (src != gBlockSendBuffer) - { memcpy(gBlockSendBuffer, src, size); - } + sBlockSend.src = gBlockSendBuffer; } BuildSendCmd(LINKCMD_INIT_BLOCK); @@ -921,9 +870,7 @@ static bool32 InitBlockSend(const void *src, size_t size) static void LinkCB_BlockSendBegin(void) { if (++sBlockSendDelayCounter > 2) - { gLinkCallback = LinkCB_BlockSend; - } } static void LinkCB_BlockSend(void) @@ -933,10 +880,9 @@ static void LinkCB_BlockSend(void) src = sBlockSend.src; gSendCmd[0] = LINKCMD_CONT_BLOCK; - for (i = 0; i < 7; i++) - { + for (i = 0; i < CMD_LENGTH - 1; i++) gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2]; - } + sBlockSend.pos += 14; if (sBlockSend.size <= sBlockSend.pos) { @@ -949,36 +895,37 @@ static void LinkCB_BlockSendEnd(void) { gLinkCallback = NULL; } -void sub_800A3AC(void) + +static void LinkCB_BerryBlenderSendHeldKeys(void) { GetMultiplayerId(); - BuildSendCmd(LINKCMD_SEND_HELD_KEYS); - gUnknown_2022114++; + BuildSendCmd(LINKCMD_BLENDER_SEND_KEYS); + gBerryBlenderKeySendAttempts++; } -static void sub_800A3CC(void) +static void SetBerryBlenderLinkCallback(void) { - gUnknown_2022114 = 0; - gLinkCallback = sub_800A3AC; + gBerryBlenderKeySendAttempts = 0; + gLinkCallback = LinkCB_BerryBlenderSendHeldKeys; } - -u32 sub_800A3E8(void) +// Unused +static u32 GetBerryBlenderKeySendAttempts(void) { - return gUnknown_2022114; + return gBerryBlenderKeySendAttempts; } -void sub_800A3F4(void) +// Unused +static void SendBerryBlenderNoSpaceForPokeblocks(void) { - BuildSendCmd(LINKCMD_0xAAAA); + BuildSendCmd(LINKCMD_BLENDER_NO_PBLOCK_SPACE); } u8 GetMultiplayerId(void) { if (gWirelessCommType == 1) - { return LinkRfu_GetMultiplayerId(); - } + return SIO_MULTI_CNT->id; } @@ -993,22 +940,20 @@ u8 BitmaskAllOtherLinkPlayers(void) bool8 SendBlock(u8 unused, const void *src, u16 size) { if (gWirelessCommType == 1) - { return Rfu_InitBlockSend(src, size); - } + return InitBlockSend(src, size); } bool8 SendBlockRequest(u8 blockRequestType) { if (gWirelessCommType == 1) - { return Rfu_SendBlockRequest(blockRequestType); - } + if (gLinkCallback == NULL) { gBlockRequestType = blockRequestType; - BuildSendCmd(LINKCMD_0xCCCC); + BuildSendCmd(LINKCMD_SEND_BLOCK_REQ); return TRUE; } return FALSE; @@ -1017,31 +962,25 @@ bool8 SendBlockRequest(u8 blockRequestType) bool8 IsLinkTaskFinished(void) { if (gWirelessCommType == 1) - { return IsLinkRfuTaskFinished(); - } + return gLinkCallback == NULL; } u8 GetBlockReceivedStatus(void) { if (gWirelessCommType == 1) - { return Rfu_GetBlockReceivedStatus(); - } + return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0); } -void SetBlockReceivedFlag(u8 who) +static void SetBlockReceivedFlag(u8 who) { if (gWirelessCommType == 1) - { Rfu_SetBlockReceivedFlag(who); - } else - { gBlockReceivedStatus[who] = TRUE; - } } void ResetBlockReceivedFlags(void) @@ -1051,104 +990,93 @@ void ResetBlockReceivedFlags(void) if (gWirelessCommType == 1) { for (i = 0; i < MAX_RFU_PLAYERS; i++) - { Rfu_ResetBlockReceivedFlag(i); - } } else { for (i = 0; i < MAX_LINK_PLAYERS; i++) - { gBlockReceivedStatus[i] = FALSE; - } } } void ResetBlockReceivedFlag(u8 who) { if (gWirelessCommType == 1) - { Rfu_ResetBlockReceivedFlag(who); - } else if (gBlockReceivedStatus[who]) - { gBlockReceivedStatus[who] = FALSE; - } } void CheckShouldAdvanceLinkState(void) { if ((gLinkStatus & LINK_STAT_MASTER) && EXTRACT_PLAYER_COUNT(gLinkStatus) > 1) - { gShouldAdvanceLinkState = 1; - } } static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size) { - u16 chksum; + u16 checksum; u16 i; - chksum = 0; + checksum = 0; for (i = 0; i < size / 2; i++) - { - chksum += src[i]; - } - return chksum; + checksum += src[i]; + + return checksum; } -void LinkTest_prnthexchar(char a0, u8 a1, u8 a2) +static void LinkTest_PrintNumChar(char val, u8 x, u8 y) { u16 *vAddr; vAddr = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); - vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + 1 + gLinkTestBGInfo.dummy_8); + vAddr[y * 32 + x] = (gLinkTestBGInfo.paletteNum << 12) | (val + 1 + gLinkTestBGInfo.baseChar); } -void LinkTest_prntchar(char a0, u8 a1, u8 a2) +static void LinkTest_PrintChar(char val, u8 x, u8 y) { u16 *vAddr; vAddr = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); - vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + gLinkTestBGInfo.dummy_8); + vAddr[y * 32 + x] = (gLinkTestBGInfo.paletteNum << 12) | (val + gLinkTestBGInfo.baseChar); } -static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2) +static void LinkTest_PrintHex(u32 num, u8 x, u8 y, u8 length) { - char sp[32 / 2]; + char buff[16]; int i; - for (i = 0; i < a2; i++) + for (i = 0; i < length; i++) { - sp[i] = pos & 0xf; - pos >>= 4; + buff[i] = num & 0xf; + num >>= 4; } - for (i = a2 - 1; i >= 0; i--) + for (i = length - 1; i >= 0; i--) { - LinkTest_prnthexchar(sp[i], a0, a1); - a0++; + LinkTest_PrintNumChar(buff[i], x, y); + x++; } } -void LinkTest_prntstr(const char *a0, u8 a1, u8 a2) +static void LinkTest_PrintString(const char *str, u8 x, u8 y) { - int r6; + int xOffset; int i; - int r5; + int yOffset; - r5 = 0; - r6 = 0; - for (i = 0; a0[i] != 0; a0++) + yOffset = 0; + xOffset = 0; + for (i = 0; str[i] != 0; str++) { - if (a0[i] == *"\n") + if (str[i] == *"\n") { - r5++; - r6 = 0; + yOffset++; + xOffset = 0; } else { - LinkTest_prntchar(a0[i], a1 + r6, a2 + r5); - r6++; + LinkTest_PrintChar(str[i], x + xOffset, y + yOffset); + xOffset++; } } } @@ -1156,37 +1084,35 @@ void LinkTest_prntstr(const char *a0, u8 a1, u8 a2) static void LinkCB_RequestPlayerDataExchange(void) { if (gLinkStatus & LINK_STAT_MASTER) - { BuildSendCmd(LINKCMD_SEND_LINK_TYPE); - } + gLinkCallback = NULL; } static void Task_PrintTestData(u8 taskId) { - char sp[32]; + char testTitle[32]; int i; - strcpy(sp, sASCIITestPrint); - LinkTest_prntstr(sp, 5, 2); - LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2); - LinkTest_prnthex(gLinkStatus, 15, 1, 8); - LinkTest_prnthex(gLink.state, 2, 10, 2); - LinkTest_prnthex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2); - LinkTest_prnthex(GetMultiplayerId(), 15, 12, 2); - LinkTest_prnthex(gLastSendQueueCount, 25, 1, 2); - LinkTest_prnthex(gLastRecvQueueCount, 25, 2, 2); - LinkTest_prnthex(GetBlockReceivedStatus(), 15, 5, 2); - LinkTest_prnthex(gLinkDebugSeed, 2, 12, 8); - LinkTest_prnthex(gLinkDebugFlags, 2, 13, 8); - LinkTest_prnthex(GetSioMultiSI(), 25, 5, 1); - LinkTest_prnthex(IsSioMultiMaster(), 25, 6, 1); - LinkTest_prnthex(IsLinkConnectionEstablished(), 25, 7, 1); - LinkTest_prnthex(HasLinkErrorOccurred(), 25, 8, 1); + strcpy(testTitle, sASCIITestPrint); + LinkTest_PrintString(testTitle, 5, 2); + LinkTest_PrintHex(gShouldAdvanceLinkState, 2, 1, 2); + LinkTest_PrintHex(gLinkStatus, 15, 1, 8); + LinkTest_PrintHex(gLink.state, 2, 10, 2); + LinkTest_PrintHex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2); + LinkTest_PrintHex(GetMultiplayerId(), 15, 12, 2); + LinkTest_PrintHex(gLastSendQueueCount, 25, 1, 2); + LinkTest_PrintHex(gLastRecvQueueCount, 25, 2, 2); + LinkTest_PrintHex(GetBlockReceivedStatus(), 15, 5, 2); + LinkTest_PrintHex(gLinkDebugSeed, 2, 12, 8); + LinkTest_PrintHex(gLinkDebugFlags, 2, 13, 8); + LinkTest_PrintHex(GetSioMultiSI(), 25, 5, 1); + LinkTest_PrintHex(IsSioMultiMaster(), 25, 6, 1); + LinkTest_PrintHex(IsLinkConnectionEstablished(), 25, 7, 1); + LinkTest_PrintHex(HasLinkErrorOccurred(), 25, 8, 1); + for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - LinkTest_prnthex(gLinkTestBlockChecksums[i], 10, 4 + i, 4); - } + LinkTest_PrintHex(gLinkTestBlockChecksums[i], 10, 4 + i, 4); } void SetLinkDebugValues(u32 seed, u32 flags) @@ -1202,9 +1128,8 @@ u8 GetSavedLinkPlayerCountAsBitFlags(void) flags = 0; for (i = 0; i < gSavedLinkPlayerCount; i++) - { flags |= (1 << i); - } + return flags; } @@ -1215,9 +1140,8 @@ u8 GetLinkPlayerCountAsBitFlags(void) flags = 0; for (i = 0; i < GetLinkPlayerCount(); i++) - { flags |= (1 << i); - } + return flags; } @@ -1228,9 +1152,7 @@ void SaveLinkPlayers(u8 numPlayers) gSavedLinkPlayerCount = numPlayers; gSavedMultiplayerId = GetMultiplayerId(); for (i = 0; i < MAX_RFU_PLAYERS; i++) - { gSavedLinkPlayers[i] = gLinkPlayers[i]; - } } // The number of players when trading began. This is frequently compared against the @@ -1240,28 +1162,27 @@ u8 GetSavedPlayerCount(void) return gSavedLinkPlayerCount; } -u8 GetSavedMultiplayerId(void) +// Unused +static u8 GetSavedMultiplayerId(void) { return gSavedMultiplayerId; } -bool8 sub_800A95C(void) +// Unused +static bool8 DoesLinkPlayerCountMatchSaved(void) { int i; - unsigned count; + u32 count = 0; - count = 0; for (i = 0; i < gSavedLinkPlayerCount; i++) { if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) - { count++; - } } + if (count == gSavedLinkPlayerCount) - { return TRUE; - } + return FALSE; } @@ -1271,7 +1192,8 @@ void CheckLinkPlayersMatchSaved(void) for (i = 0; i < gSavedLinkPlayerCount; i++) { - if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) + if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId + || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) { gLinkErrorOccurred = TRUE; CloseLink(); @@ -1294,18 +1216,18 @@ u8 GetLinkPlayerCount_2(void) bool8 IsLinkMaster(void) { if (gWirelessCommType) - { return Rfu_IsMaster(); - } + return EXTRACT_MASTER(gLinkStatus); } -u8 sub_800AA74(void) +// Unused +static u8 GetDummy2(void) { - return gUnknown_3000E50; + return sDummy2; } -void Link_StartSend5FFFwithParam(u16 a0) +void SetCloseLinkCallbackAndType(u16 type) { if (gWirelessCommType == 1) { @@ -1315,9 +1237,9 @@ void Link_StartSend5FFFwithParam(u16 a0) { if (gLinkCallback == NULL) { - gLinkCallback = LinkCB_BuildCommand5FFF; - gLinkAllAcked5FFF = FALSE; - gLinkCmd5FFFparam = a0; + gLinkCallback = LinkCB_ReadyCloseLink; + gLinkDummy1 = FALSE; + gReadyCloseLinkType = type; } } } @@ -1332,48 +1254,48 @@ void SetCloseLinkCallback(void) { if (gLinkCallback != NULL) { - sStartSend5FFFfailures++; + sReadyCloseLinkAttempts++; } else { - gLinkCallback = LinkCB_BuildCommand5FFF; - gLinkAllAcked5FFF = FALSE; - gLinkCmd5FFFparam = 0; + gLinkCallback = LinkCB_ReadyCloseLink; + gLinkDummy1 = FALSE; + gReadyCloseLinkType = 0; } } } -static void LinkCB_BuildCommand5FFF(void) +static void LinkCB_ReadyCloseLink(void) { if (gLastRecvQueueCount == 0) { - BuildSendCmd(LINKCMD_0x5FFF); - gLinkCallback = LinkCB_WaitAckCommand5FFF; + BuildSendCmd(LINKCMD_READY_CLOSE_LINK); + gLinkCallback = LinkCB_WaitCloseLink; } } -static void LinkCB_WaitAckCommand5FFF(void) +static void LinkCB_WaitCloseLink(void) { int i; unsigned count; - u8 linkPlayerCount; - linkPlayerCount = GetLinkPlayerCount(); + // Wait for all players to be ready + u8 linkPlayerCount = GetLinkPlayerCount(); count = 0; for (i = 0; i < linkPlayerCount; i++) { - if (gLinkCommand5FFFAck[i]) - { + if (gReadyToCloseLink[i]) count++; - } } + if (count == linkPlayerCount) { + // All ready, close link gBattleTypeFlags &= ~(BATTLE_TYPE_LINK_IN_BATTLE | 0xFFFF0000); gLinkVSyncDisabled = TRUE; CloseLink(); gLinkCallback = NULL; - gLinkAllAcked5FFF = TRUE; + gLinkDummy1 = TRUE; } } @@ -1386,49 +1308,48 @@ void SetLinkStandbyCallback(void) else { if (gLinkCallback == NULL) - { - gLinkCallback = LinkFunc_Send2FFE_1; - } - gLinkAllAcked5FFF = FALSE; + gLinkCallback = LinkCB_Standby; + + gLinkDummy1 = FALSE; } } -static void LinkFunc_Send2FFE_1(void) +static void LinkCB_Standby(void) { if (gLastRecvQueueCount == 0) { - BuildSendCmd(LINKCMD_0x2FFE); - gLinkCallback = LinkFunc_Send2FFE_2; + BuildSendCmd(LINKCMD_READY_EXIT_STANDBY); + gLinkCallback = LinkCB_StandbyForAll; } } -static void LinkFunc_Send2FFE_2(void) +static void LinkCB_StandbyForAll(void) { u8 i; - u8 linkPlayerCount; - - linkPlayerCount = GetLinkPlayerCount(); + u8 linkPlayerCount = GetLinkPlayerCount(); for (i = 0; i < linkPlayerCount; i++) { - if (!gLinkCommand2FFEAck[i]) - { + if (!gReadyToExitStandby[i]) break; - } } + + // If true, all players ready to exit standby if (i == linkPlayerCount) { for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - gLinkCommand2FFEAck[i] = FALSE; - } + gReadyToExitStandby[i] = FALSE; + gLinkCallback = NULL; } } static void CheckErrorStatus(void) { - if (gLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus)) + // Check if a link error has occurred + if (sLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus)) { + // Link error has occurred, handle message details if + // necessary, then stop the link. if (!gSuppressLinkErrorMessage) { sLinkErrorBuffer.status = gLinkStatus; @@ -1446,7 +1367,7 @@ void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCoun sLinkErrorBuffer.status = status; sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount; sLinkErrorBuffer.lastRecvQueueCount = lastRecvQueueCount; - sLinkErrorBuffer.unk_06 = isConnectionError; + sLinkErrorBuffer.disconnected = isConnectionError; } void CB2_LinkError(void) @@ -1466,16 +1387,15 @@ void CB2_LinkError(void) ScanlineEffect_Stop(); if (gWirelessCommType) { - if (!sLinkErrorBuffer.unk_06) - { + if (!sLinkErrorBuffer.disconnected) gWirelessCommType = 3; - } + ResetLinkRfuGFLayer(); } - SetVBlankCallback(sub_800978C); + SetVBlankCallback(VBlankCB_LinkError); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, sLinkErrorBgTemplates, 2); - sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800); + InitBgsFromTemplates(0, sLinkErrorBgTemplates, ARRAY_COUNT(sLinkErrorBgTemplates)); + sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(BG_SCREEN_SIZE); SetBgTilemapBuffer(1, tilemapBuffer); if (InitWindows(sLinkErrorWindowTemplates)) { @@ -1500,10 +1420,10 @@ void CB2_LinkError(void) } } -void sub_800AE1C(void) +static void ErrorMsg_MoveCloserToPartner(void) { - DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplay4bpp, FALSE, 0, 0); - CopyToBgTilemapBuffer(1, sWirelessLinkDisplayBin, 0, 0); + DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0); + CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); FillWindowPixelBuffer(0, PIXEL_FILL(0)); @@ -1512,20 +1432,20 @@ void sub_800AE1C(void) AddTextPrinterParameterized3(2, FONT_3, 2, 2, sLinkErrorTextColor, 0, gText_MoveCloserToLinkPartner); PutWindowTilemap(0); PutWindowTilemap(2); - CopyWindowToVram(0, 0); + CopyWindowToVram(0, COPYWIN_NONE); // Does nothing CopyWindowToVram(2, COPYWIN_FULL); ShowBg(0); ShowBg(1); } -void sub_800AED0(void) +static void ErrorMsg_CheckConnections(void) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); AddTextPrinterParameterized3(1, FONT_3, 2, 0, sLinkErrorTextColor, 0, gText_CommErrorCheckConnections); PutWindowTilemap(1); PutWindowTilemap(2); - CopyWindowToVram(1, 0); + CopyWindowToVram(1, COPYWIN_NONE); // Does nothing CopyWindowToVram(2, COPYWIN_FULL); ShowBg(0); } @@ -1534,34 +1454,28 @@ static void CB2_PrintErrorMessage(void) { switch (gMain.state) { - case 00: - if (sLinkErrorBuffer.unk_06) - { - sub_800AE1C(); - } + case 0: + // Below is only true for the RFU, so the other error + // type is inferred to be from a wired connection + if (sLinkErrorBuffer.disconnected) + ErrorMsg_MoveCloserToPartner(); else - { - sub_800AED0(); - } + ErrorMsg_CheckConnections(); break; - case 30: + case 30: PlaySE(SE_BOO); break; - case 60: + case 60: PlaySE(SE_BOO); break; - case 90: + case 90: PlaySE(SE_BOO); break; case 130: if (gWirelessCommType == 2) - { AddTextPrinterParameterized3(0, FONT_3, 2, 20, sLinkErrorTextColor, 0, gText_ABtnTitleScreen); - } else if (gWirelessCommType == 1) - { AddTextPrinterParameterized3(0, FONT_3, 2, 20, sLinkErrorTextColor, 0, gText_ABtnRegistrationCounter); - } break; } if (gMain.state == 160) @@ -1573,8 +1487,8 @@ static void CB2_PrintErrorMessage(void) HelpSystem_Enable(); PlaySE(SE_PIN); gWirelessCommType = 0; - sLinkErrorBuffer.unk_06 = 0; - ResetSaveHeap(); + sLinkErrorBuffer.disconnected = 0; + ReloadSave(); } } else if (gWirelessCommType == 2) @@ -1589,9 +1503,7 @@ static void CB2_PrintErrorMessage(void) } } if (gMain.state != 160) - { gMain.state++; - } } bool8 GetSioMultiSI(void) @@ -1641,36 +1553,37 @@ void LinkPlayerFromBlock(u32 who) player = &gLinkPlayers[who_]; *player = block->linkPlayer; ConvertLinkPlayerName(player); - if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0) + + if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 + || strcmp(block->magic2, sASCIIGameFreakInc) != 0) { SetMainCallback2(CB2_LinkError); } } +// When this function returns TRUE the callbacks are skipped bool8 HandleLinkConnection(void) { - bool32 r4; - bool32 r5; + bool32 main1Failed; + bool32 main2Failed; if (gWirelessCommType == 0) { gLinkStatus = LinkMain1(&gShouldAdvanceLinkState, gSendCmd, gRecvCmds); LinkMain2(&gMain.heldKeys); if ((gLinkStatus & LINK_STAT_RECEIVED_NOTHING) && IsSendingKeysOverCable() == TRUE) - { return TRUE; - } } else { - r4 = LinkRfuMain1(); - r5 = LinkRfuMain2(); + main1Failed = LinkRfuMain1(); // Always returns FALSE + main2Failed = LinkRfuMain2(); if (IsSendingKeysOverCable() == TRUE) { - if (r4 == TRUE || IsRfuRecvQueueEmpty() || r5) - { + // This will never be reached. + // IsSendingKeysOverCable is always FALSE for wireless communication + if (main1Failed == TRUE || IsRfuRecvQueueEmpty() || main2Failed) return TRUE; - } } } return FALSE; @@ -1679,42 +1592,35 @@ bool8 HandleLinkConnection(void) void SetWirelessCommType1(void) { if (!gReceivedRemoteLinkPlayers) - { gWirelessCommType = 1; - } } -static void SetWirelessCommType0(void) +static void SetWirelessCommType0_Internal(void) { if (!gReceivedRemoteLinkPlayers) - { gWirelessCommType = 0; - } } -void SetWirelessCommType0_UnusedCopy(void) +// Unused +void SetWirelessCommType0(void) { if (!gReceivedRemoteLinkPlayers) - { gWirelessCommType = 0; - } } u32 GetLinkRecvQueueLength(void) { if (gWirelessCommType != 0) - { return GetRfuRecvQueueLength(); - } + return gLink.recvQueue.count; } -bool32 LinkRecvQueueLengthMoreThan2(void) +bool32 IsLinkRecvQueueAtOverworldMax(void) { - if (GetLinkRecvQueueLength() > 2) - { + if (GetLinkRecvQueueLength() >= OVERWORLD_RECV_QUEUE_MAX) return TRUE; - } + return FALSE; } @@ -1787,9 +1693,7 @@ u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENG break; case 1: if (gLink.isMaster == LINK_MASTER && gLink.playerCount > 1) - { gLink.handshakeAsMaster = TRUE; - } break; case 2: gLink.state = LINK_STATE_START0; @@ -1845,20 +1749,14 @@ u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENG } if (gLink.lag == LAG_MASTER) - { retVal |= LINK_STAT_ERROR_LAG_MASTER; - } if (gLink.localId >= MAX_LINK_PLAYERS) - { retVal |= LINK_STAT_ERROR_INVALID_ID; - } retVal2 = retVal; if (gLink.lag == LAG_SLAVE) - { retVal2 |= LINK_STAT_ERROR_LAG_SLAVE; - } return retVal2; } @@ -1869,13 +1767,9 @@ static void CheckMasterOrSlave(void) terminals = *(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SD | SIO_MULTI_SI); if (terminals == SIO_MULTI_SD && gLink.localId == 0) - { gLink.isMaster = LINK_MASTER; - } else - { gLink.isMaster = LINK_SLAVE; - } } static void InitTimer(void) @@ -1899,9 +1793,8 @@ static void EnqueueSendCmd(u16 *sendCmd) { offset = gLink.sendQueue.pos + gLink.sendQueue.count; if (offset >= QUEUE_CAPACITY) - { offset -= QUEUE_CAPACITY; - } + for (i = 0; i < CMD_LENGTH; i++) { sSendNonzeroCheck |= *sendCmd; @@ -1935,11 +1828,8 @@ static void DequeueRecvCmds(u16 (*recvCmds)[CMD_LENGTH]) for (i = 0; i < gLink.playerCount; i++) { for (j = 0; j < CMD_LENGTH; j++) - { recvCmds[i][j] = 0; - } } - gLink.receivedNothing = TRUE; } else @@ -1947,16 +1837,12 @@ static void DequeueRecvCmds(u16 (*recvCmds)[CMD_LENGTH]) for (i = 0; i < gLink.playerCount; i++) { for (j = 0; j < CMD_LENGTH; j++) - { recvCmds[i][j] = gLink.recvQueue.data[i][j][gLink.recvQueue.pos]; - } } gLink.recvQueue.count--; gLink.recvQueue.pos++; if (gLink.recvQueue.pos >= QUEUE_CAPACITY) - { gLink.recvQueue.pos = 0; - } gLink.receivedNothing = FALSE; } REG_IME = gLinkSavedIme; @@ -1972,13 +1858,9 @@ void LinkVSync(void) if (gLink.serialIntrCounter < 9) { if (gLink.hardwareError != TRUE) - { gLink.lag = LAG_MASTER; - } else - { StartTransfer(); - } } else if (gLink.lag != LAG_MASTER) { @@ -1996,9 +1878,8 @@ void LinkVSync(void) if (++sNumVBlanksWithoutSerialIntr > 10) { if (gLink.state == LINK_STATE_CONN_ESTABLISHED) - { gLink.lag = LAG_SLAVE; - } + if (gLink.state == LINK_STATE_HANDSHAKE) { gLink.playerCount = 0; @@ -2043,9 +1924,7 @@ void SerialCB(void) gLink.serialIntrCounter++; sNumVBlanksWithoutSerialIntr = 0; if (gLink.serialIntrCounter == 8) - { gLastRecvQueueCount = gLink.recvQueue.count; - } } static void StartTransfer(void) @@ -2062,13 +1941,9 @@ static bool8 DoHandshake(void) playerCount = 0; minRecv = 0xFFFF; if (gLink.handshakeAsMaster == TRUE) - { REG_SIOMLT_SEND = MASTER_HANDSHAKE; - } else - { REG_SIOMLT_SEND = SLAVE_HANDSHAKE; - } *(u64 *)gLink.tempRecvBuffer = REG_SIOMLT_RECV; REG_SIOMLT_RECV = 0; gLink.handshakeAsMaster = FALSE; @@ -2078,32 +1953,23 @@ static bool8 DoHandshake(void) { playerCount++; if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0) - { minRecv = gLink.tempRecvBuffer[i]; - } } else { if (gLink.tempRecvBuffer[i] != 0xFFFF) - { playerCount = 0; - } break; } } gLink.playerCount = playerCount; if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE) - { return TRUE; - } + if (gLink.playerCount > 1) - { gLink.link_field_F = (minRecv & 3) + 1; - } else - { gLink.link_field_F = 0; - } sHandshakePlayerCount = gLink.playerCount; return FALSE; } @@ -2120,9 +1986,7 @@ static void DoRecv(void) for (i = 0; i < gLink.playerCount; i++) { if (gLink.checksum != recv[i] && sChecksumAvailable) - { gLink.badChecksum = TRUE; - } } gLink.checksum = 0; sChecksumAvailable = TRUE; @@ -2131,9 +1995,8 @@ static void DoRecv(void) { index = gLink.recvQueue.pos + gLink.recvQueue.count; if (index >= QUEUE_CAPACITY) - { index -= QUEUE_CAPACITY; - } + if (gLink.recvQueue.count < QUEUE_CAPACITY) { for (i = 0; i < gLink.playerCount; i++) @@ -2166,9 +2029,7 @@ static void DoSend(void) gLink.sendQueue.count--; gLink.sendQueue.pos++; if (gLink.sendQueue.pos >= QUEUE_CAPACITY) - { gLink.sendQueue.pos = 0; - } } else { @@ -2178,17 +2039,12 @@ static void DoSend(void) else { if (!sSendBufferEmpty && gLink.sendQueue.count == 0) - { sSendBufferEmpty = TRUE; - } + if (sSendBufferEmpty) - { REG_SIOMLT_SEND = 0; - } else - { REG_SIOMLT_SEND = gLink.sendQueue.data[gLink.sendCmdIndex][gLink.sendQueue.pos]; - } gLink.sendCmdIndex++; } } @@ -2225,9 +2081,7 @@ void ResetSendBuffer(void) for (i = 0; i < CMD_LENGTH; i++) { for (j = 0; j < QUEUE_CAPACITY; j++) - { - gLink.sendQueue.data[i][j] = 0xEFFF; - } + gLink.sendQueue.data[i][j] = LINKCMD_NONE; } } @@ -2244,9 +2098,7 @@ void ResetRecvBuffer(void) for (j = 0; j < CMD_LENGTH; j++) { for (k = 0; k < QUEUE_CAPACITY; k++) - { - gLink.recvQueue.data[i][j][k] = 0xEFFF; - } + gLink.recvQueue.data[i][j][k] = LINKCMD_NONE; } } } diff --git a/src/menu_helpers.c b/src/menu_helpers.c index be092ccf4..af875e1b5 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -134,7 +134,7 @@ bool8 sub_80BF748(void) { if (MenuHelpers_CallLinkSomething() == TRUE) return TRUE; - else if (LinkRecvQueueLengthMoreThan2() != TRUE) + else if (IsLinkRecvQueueAtOverworldMax() != TRUE) return FALSE; else return TRUE; diff --git a/src/mevent.c b/src/mevent.c index 386437259..cf8ea526b 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -210,7 +210,7 @@ static u32 EReaderReceive(u8 * state_p, u16 * receiveDelay) } break; case 4: - Link_StartSend5FFFwithParam(0); + SetCloseLinkCallbackAndType(0); *state_p = 5; break; case 5: @@ -416,7 +416,7 @@ static void Task_EReaderComm(u8 taskId) break; case 15: data->initialSendResult = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer); - Link_StartSend5FFFwithParam(data->initialSendResult); + SetCloseLinkCallbackAndType(data->initialSendResult); data->state = 16; break; case 16: diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 6f7a06d9c..b9f3a4333 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1119,7 +1119,7 @@ static void Task_InputHandler_Info(u8 taskId) case PSS_STATE3270_HANDLEINPUT: if (MenuHelpers_CallLinkSomething() == TRUE) return; - else if (LinkRecvQueueLengthMoreThan2() == TRUE) + else if (IsLinkRecvQueueAtOverworldMax() == TRUE) return; else if (FuncIsActiveTask(Task_PokeSum_SwitchDisplayedPokemon)) return; @@ -1218,7 +1218,7 @@ static void Task_InputHandler_Info(u8 taskId) case PSS_STATE3270_ATEXIT_WAITLINKDELAY: if (Overworld_LinkRecvQueueLengthMoreThan2() == TRUE) return; - else if (LinkRecvQueueLengthMoreThan2() == TRUE) + else if (IsLinkRecvQueueAtOverworldMax() == TRUE) return; sMonSummaryScreen->state3270 = PSS_STATE3270_ATEXIT_WAITFADE; @@ -3501,7 +3501,7 @@ static void Task_HandleInput_SelectMove(u8 taskId) switch (sMonSummaryScreen->selectMoveInputHandlerState) { case 0: - if (MenuHelpers_CallLinkSomething() == TRUE || LinkRecvQueueLengthMoreThan2() == TRUE) + if (MenuHelpers_CallLinkSomething() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return; if (JOY_NEW(DPAD_UP)) @@ -3662,7 +3662,7 @@ static void Task_HandleInput_SelectMove(u8 taskId) sMonSummaryScreen->selectMoveInputHandlerState = 3; break; case 3: - if (MenuHelpers_CallLinkSomething() == TRUE || LinkRecvQueueLengthMoreThan2() == TRUE) + if (MenuHelpers_CallLinkSomething() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return; CopyWindowToVram(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], 2); @@ -3880,7 +3880,7 @@ static void Task_InputHandler_SelectOrForgetMove(u8 taskId) sMonSummaryScreen->selectMoveInputHandlerState = 4; break; case 4: - if (MenuHelpers_CallLinkSomething() == TRUE || LinkRecvQueueLengthMoreThan2() == TRUE) + if (MenuHelpers_CallLinkSomething() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return; CopyWindowToVram(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], 2); @@ -5148,7 +5148,7 @@ static void Task_PokeSum_SwitchDisplayedPokemon(u8 taskId) sMonSummaryScreen->switchMonTaskState++; break; case 11: - if (!Overworld_LinkRecvQueueLengthMoreThan2() && !LinkRecvQueueLengthMoreThan2()) + if (!Overworld_LinkRecvQueueLengthMoreThan2() && !IsLinkRecvQueueAtOverworldMax()) { PokeSum_CreateSprites(); PokeSum_TryPlayMonCry(); diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c index d016d7349..745270dc7 100644 --- a/src/reset_save_heap.c +++ b/src/reset_save_heap.c @@ -6,7 +6,7 @@ #include "new_game.h" #include "overworld.h" -void ResetSaveHeap(void) +void ReloadSave(void) { u16 imeBackup = REG_IME; diff --git a/src/trade.c b/src/trade.c index 0546f3cbd..e8046dfd7 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1200,7 +1200,7 @@ static void TradeMenuCB_10(void) } else { - Link_StartSend5FFFwithParam(32); + SetCloseLinkCallbackAndType(32); sTradeMenuResourcesPtr->tradeMenuCBnum = 13; } } @@ -1985,7 +1985,7 @@ static void TradeMenuCB_11(void) } else { - Link_StartSend5FFFwithParam(12); + SetCloseLinkCallbackAndType(12); } sTradeMenuResourcesPtr->tradeMenuCBnum = 12; From 31615957680914d51279a165b6639faddde744eb Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 2 Nov 2022 12:19:24 -0400 Subject: [PATCH 05/42] Sync easy chat data --- .../button_window.png} | Bin .../interview_frame.png} | Bin .../unk_8E9A168.png => easy_chat/mode.png} | Bin .../rectangle_cursor.png} | Bin .../scroll_indicator.png} | Bin .../start_select_buttons.png} | Bin graphics/easy_chat/text.pal | 8 + .../text_input_frame.png} | Bin .../text_input_frame_green.pal} | 0 .../text_input_frame_orange.pal} | 0 graphics/easy_chat/title_text.pal | 7 + .../triangle_cursor.png} | Bin .../unk_8E99E74.bin => easy_chat/window.bin} | Bin .../unk_8E99DAC.png => easy_chat/window.png} | Bin graphics/interface/link_rfu_frame.png | Bin 199 -> 0 bytes ...fu_status.png => status_ailment_icons.png} | Bin graphics/link_rfu/unk_843F3B8.pal | 19 - graphics/link_rfu/unk_843F3D8.pal | 19 - include/easy_chat.h | 3 + include/graphics.h | 10 +- src/easy_chat.c | 3 +- src/easy_chat_2.c | 2 +- src/easy_chat_3.c | 358 +++++++++--------- src/graphics.c | 20 +- 24 files changed, 223 insertions(+), 226 deletions(-) rename graphics/{link_rfu/unk_8E99F44.png => easy_chat/button_window.png} (100%) rename graphics/{link_rfu/unk_843F638.png => easy_chat/interview_frame.png} (100%) rename graphics/{link_rfu/unk_8E9A168.png => easy_chat/mode.png} (100%) rename graphics/{link_rfu/unk_8E9BD28.png => easy_chat/rectangle_cursor.png} (100%) rename graphics/{link_rfu/unk_843F418.png => easy_chat/scroll_indicator.png} (100%) rename graphics/{link_rfu/unk_843F518.png => easy_chat/start_select_buttons.png} (100%) create mode 100644 graphics/easy_chat/text.pal rename graphics/{link_rfu/unk_843F7AC.png => easy_chat/text_input_frame.png} (100%) rename graphics/{link_rfu/unk_843F78C.pal => easy_chat/text_input_frame_green.pal} (100%) rename graphics/{link_rfu/unk_843F76C.pal => easy_chat/text_input_frame_orange.pal} (100%) create mode 100644 graphics/easy_chat/title_text.pal rename graphics/{link_rfu/unk_843F3F8.png => easy_chat/triangle_cursor.png} (100%) rename graphics/{link_rfu/unk_8E99E74.bin => easy_chat/window.bin} (100%) rename graphics/{link_rfu/unk_8E99DAC.png => easy_chat/window.png} (100%) delete mode 100644 graphics/interface/link_rfu_frame.png rename graphics/interface/{link_rfu_status.png => status_ailment_icons.png} (100%) delete mode 100644 graphics/link_rfu/unk_843F3B8.pal delete mode 100644 graphics/link_rfu/unk_843F3D8.pal diff --git a/graphics/link_rfu/unk_8E99F44.png b/graphics/easy_chat/button_window.png similarity index 100% rename from graphics/link_rfu/unk_8E99F44.png rename to graphics/easy_chat/button_window.png diff --git a/graphics/link_rfu/unk_843F638.png b/graphics/easy_chat/interview_frame.png similarity index 100% rename from graphics/link_rfu/unk_843F638.png rename to graphics/easy_chat/interview_frame.png diff --git a/graphics/link_rfu/unk_8E9A168.png b/graphics/easy_chat/mode.png similarity index 100% rename from graphics/link_rfu/unk_8E9A168.png rename to graphics/easy_chat/mode.png diff --git a/graphics/link_rfu/unk_8E9BD28.png b/graphics/easy_chat/rectangle_cursor.png similarity index 100% rename from graphics/link_rfu/unk_8E9BD28.png rename to graphics/easy_chat/rectangle_cursor.png diff --git a/graphics/link_rfu/unk_843F418.png b/graphics/easy_chat/scroll_indicator.png similarity index 100% rename from graphics/link_rfu/unk_843F418.png rename to graphics/easy_chat/scroll_indicator.png diff --git a/graphics/link_rfu/unk_843F518.png b/graphics/easy_chat/start_select_buttons.png similarity index 100% rename from graphics/link_rfu/unk_843F518.png rename to graphics/easy_chat/start_select_buttons.png diff --git a/graphics/easy_chat/text.pal b/graphics/easy_chat/text.pal new file mode 100644 index 000000000..3b4e71ab8 --- /dev/null +++ b/graphics/easy_chat/text.pal @@ -0,0 +1,8 @@ +JASC-PAL +0100 +5 +0 0 0 +255 255 255 +98 98 98 +222 213 222 +65 139 74 diff --git a/graphics/link_rfu/unk_843F7AC.png b/graphics/easy_chat/text_input_frame.png similarity index 100% rename from graphics/link_rfu/unk_843F7AC.png rename to graphics/easy_chat/text_input_frame.png diff --git a/graphics/link_rfu/unk_843F78C.pal b/graphics/easy_chat/text_input_frame_green.pal similarity index 100% rename from graphics/link_rfu/unk_843F78C.pal rename to graphics/easy_chat/text_input_frame_green.pal diff --git a/graphics/link_rfu/unk_843F76C.pal b/graphics/easy_chat/text_input_frame_orange.pal similarity index 100% rename from graphics/link_rfu/unk_843F76C.pal rename to graphics/easy_chat/text_input_frame_orange.pal diff --git a/graphics/easy_chat/title_text.pal b/graphics/easy_chat/title_text.pal new file mode 100644 index 000000000..c075c5ce1 --- /dev/null +++ b/graphics/easy_chat/title_text.pal @@ -0,0 +1,7 @@ +JASC-PAL +0100 +4 +0 0 0 +0 0 0 +57 205 255 +172 172 238 diff --git a/graphics/link_rfu/unk_843F3F8.png b/graphics/easy_chat/triangle_cursor.png similarity index 100% rename from graphics/link_rfu/unk_843F3F8.png rename to graphics/easy_chat/triangle_cursor.png diff --git a/graphics/link_rfu/unk_8E99E74.bin b/graphics/easy_chat/window.bin similarity index 100% rename from graphics/link_rfu/unk_8E99E74.bin rename to graphics/easy_chat/window.bin diff --git a/graphics/link_rfu/unk_8E99DAC.png b/graphics/easy_chat/window.png similarity index 100% rename from graphics/link_rfu/unk_8E99DAC.png rename to graphics/easy_chat/window.png diff --git a/graphics/interface/link_rfu_frame.png b/graphics/interface/link_rfu_frame.png deleted file mode 100644 index 3065f03f750052b89a2dc8ab9cb871cd92f5bd30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!VDxm*B3&+gqTarSKUk|o_+woK{X@@&r0Z_kQ@{�>QBXMQW%%2ZrvRuo$kW9!B%<~0 zG($cH1&$*R*nj;$Z)KTbBF@XK^7hV#0!xEt+4t;Xj(!drDl1Bv?-Yp65aD$15PHF0 x;V3s{nVN!#&=2_s%;Almg}((BvHVIjVla(mvv1I0dkr+5!PC{xWt~$(69Bm1N$LOq diff --git a/graphics/interface/link_rfu_status.png b/graphics/interface/status_ailment_icons.png similarity index 100% rename from graphics/interface/link_rfu_status.png rename to graphics/interface/status_ailment_icons.png diff --git a/graphics/link_rfu/unk_843F3B8.pal b/graphics/link_rfu/unk_843F3B8.pal deleted file mode 100644 index dfe91b5de..000000000 --- a/graphics/link_rfu/unk_843F3B8.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 148 -255 197 148 -238 139 90 -189 90 41 -255 213 213 -246 180 180 -197 131 131 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -41 49 49 -98 98 98 -180 189 180 -222 213 222 -255 255 255 diff --git a/graphics/link_rfu/unk_843F3D8.pal b/graphics/link_rfu/unk_843F3D8.pal deleted file mode 100644 index 72d2547f9..000000000 --- a/graphics/link_rfu/unk_843F3D8.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -115 164 0 -255 0 0 -255 32 32 -255 74 74 -255 106 106 -255 148 148 -255 180 180 -255 222 222 -255 255 255 -255 255 255 -255 255 205 -255 255 205 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/include/easy_chat.h b/include/easy_chat.h index 9c6400fd1..853060f4f 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -4,6 +4,9 @@ #include "global.h" #include "constants/easy_chat.h" +#define NUM_ALPHABET_ROWS 4 +#define NUM_ALPHABET_COLUMNS 7 + struct EasyChatWordInfo { const u8 *text; diff --git a/include/graphics.h b/include/graphics.h index cad6b7241..8abeb08b1 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4899,11 +4899,11 @@ extern const u32 gBerryCrush_Crusher_Tilemap[]; // easy_chat_3 extern const u32 gEasyChatWindow_Gfx[]; extern const u32 gEasyChatWindow_Tilemap[]; -extern const u32 gEasyChatMode_Pal[]; -extern const u16 gUnknown_8E99F24[]; -extern const u32 gEasyChatRedRectangularCursor_Tiles[]; -extern const u32 gEasyChatSelectGroupHelp_Tiles[]; -extern const u32 gEasyChatModeIcons_Tiles[]; +extern const u32 gEasyChatWindow_Pal[]; +extern const u16 gEasyChatButtonWindow_Pal[]; +extern const u32 gEasyChatRectangleCursor_Gfx[]; +extern const u32 gEasyChatButtonWindow_Gfx[]; +extern const u32 gEasyChatMode_Gfx[]; // naming_screen extern const u32 gNamingScreenBackground_Tilemap[]; diff --git a/src/easy_chat.c b/src/easy_chat.c index 55bc104db..096bda634 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -532,7 +532,8 @@ u8 GetSelectedGroupByIndex(u8 index) return sEasyChatSelectionData->groups[index]; } -static u8 *unref_sub_80BDF6C(u8 *dest, u8 groupId, u16 totalChars) +// Unused +static u8 *BufferEasyChatWordGroupName(u8 *dest, u8 groupId, u16 totalChars) { u16 i; u8 *str = StringCopy(dest, sEasyChatGroupNamePointers[groupId]); diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 20aac1312..5a3c9a7cb 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -1284,7 +1284,7 @@ u8 GetECSelectWordNumRows(void) return sEasyChatScreen->selectWordNumRows; } -u8 unref_sub_80FFE60(void) +static u8 UnusedDummy(void) { return 0; } diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 6b135cdf2..49c639ebc 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -9,6 +9,23 @@ #include "strings.h" #include "text_window.h" +enum { + GFXTAG_TRIANGLE_CURSOR, + GFXTAG_RECTANGLE_CURSOR, + GFXTAG_SCROLL_INDICATOR, + GFXTAG_START_SELECT_BUTTONS, + GFXTAG_MODE_WINDOW, + GFXTAG_RS_INTERVIEW_FRAME, + GFXTAG_BUTTON_WINDOW, +}; + +enum { + PALTAG_TRIANGLE_CURSOR, + PALTAG_RECTANGLE_CURSOR, + PALTAG_MISC_UI, + PALTAG_RS_INTERVIEW_FRAME, +}; + struct ECWork { u16 state; @@ -134,63 +151,53 @@ static void UpdateStartSelectButtonSpriteVisibility(void); static void HideStartSelectButtonSprites(void); static void CreateFooterWindow(void); -static const u16 gUnknown_843F3B8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.gbapal"); -static const u16 gUnknown_843F3D8[] = INCBIN_U16("graphics/link_rfu/unk_8E9BD28.gbapal"); -static const u16 sRightTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.4bpp"); -static const u16 sUpTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F418.4bpp"); -static const u16 sStartSelectButtons_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F518.4bpp"); -static const u16 gUnknown_843F618[] = INCBIN_U16("graphics/link_rfu/unk_843F638.gbapal"); -static const u32 gUnknown_843F638[] = INCBIN_U32("graphics/link_rfu/unk_843F638.4bpp.lz"); -static const u16 gUnknown_843F76C[] = INCBIN_U16("graphics/link_rfu/unk_843F76C.gbapal"); -static const u16 gUnknown_843F78C[] = INCBIN_U16("graphics/link_rfu/unk_843F78C.gbapal"); -static const u32 gUnknown_843F7AC[] = INCBIN_U32("graphics/link_rfu/unk_843F7AC.4bpp.lz"); - -static const u16 gUnknown_843F874[] = { - RGB( 0, 0, 0), - RGB( 0, 0, 0), - RGB( 7, 25, 31), - RGB(21, 21, 29) -}; - -static const u16 gUnknown_843F87C[] = { - RGB( 0, 0, 0), - RGB(31, 31, 31), - RGB(12, 12, 12), - RGB(27, 26, 27), - RGB( 8, 17, 9) -}; +static const u16 sTriangleCursor_Pal[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.gbapal"); +static const u16 sRectangleCursor_Pal[] = INCBIN_U16("graphics/easy_chat/rectangle_cursor.gbapal"); +static const u16 sTriangleCursor_Gfx[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.4bpp"); +static const u16 sScrollIndicator_Gfx[] = INCBIN_U16("graphics/easy_chat/scroll_indicator.4bpp"); +static const u16 sStartSelectButtons_Gfx[] = INCBIN_U16("graphics/easy_chat/start_select_buttons.4bpp"); +// In Ruby/Sapphire Easy Chat screens had a black background, and when the player & interviewer were present +// on screen the interview_frame gfx was shown behind them. +// In FRLG all Easy Chat screens have a filled background, so these gfx go unused +static const u16 sRSInterviewFrame_Pal[] = INCBIN_U16("graphics/easy_chat/interview_frame.gbapal"); +static const u32 sRSInterviewFrame_Gfx[] = INCBIN_U32("graphics/easy_chat/interview_frame.4bpp.lz"); +static const u16 sTextInputFrameOrange_Pal[] = INCBIN_U16("graphics/easy_chat/text_input_frame_orange.gbapal"); +static const u16 sTextInputFrameGreen_Pal[] = INCBIN_U16("graphics/easy_chat/text_input_frame_green.gbapal"); +static const u32 sTextInputFrame_Gfx[] = INCBIN_U32("graphics/easy_chat/text_input_frame.4bpp.lz"); +static const u16 sTitleText_Pal[] = INCBIN_U16("graphics/easy_chat/title_text.gbapal"); +static const u16 sText_Pal[] = INCBIN_U16("graphics/easy_chat/text.gbapal"); static const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = { { - .left = 0x03, - .top = 0x04, - .width = 0x18, - .height = 0x04 + .left = 3, + .top = 4, + .width = 24, + .height = 4 }, { - .left = 0x01, - .top = 0x04, - .width = 0x1b, - .height = 0x04 + .left = 1, + .top = 4, + .width = 27, + .height = 4 }, { - .left = 0x03, - .top = 0x00, - .width = 0x18, - .height = 0x0a + .left = 3, + .top = 0, + .width = 24, + .height = 10 }, { - .left = 0x06, - .top = 0x06, - .width = 0x12, - .height = 0x04 + .left = 6, + .top = 6, + .width = 18, + .height = 4 }, { - .left = 0x10, - .top = 0x04, - .width = 0x09, - .height = 0x02 + .left = 16, + .top = 4, + .width = 9, + .height = 2 }, { - .left = 0x0e, - .top = 0x04, - .width = 0x12, - .height = 0x04 + .left = 14, + .top = 4, + .width = 18, + .height = 4 } }; @@ -271,10 +278,10 @@ static const struct WindowTemplate sEasyChatYesNoWindowTemplate = { .baseBlock = 0x062 }; -static const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); +static const u8 sText_Underscore[] = _("{UNDERSCORE}"); static const u8 sText_Clear17[] = _("{CLEAR 17}"); -static const u8 *const sEasyChatKeyboardText[] = { +static const u8 *const sEasyChatKeyboardAlphabet[NUM_ALPHABET_ROWS] = { gText_EasyChatKeyboard_ABCDEFothers, gText_EasyChatKeyboard_GHIJKL, gText_EasyChatKeyboard_MNOPQRS, @@ -282,38 +289,30 @@ static const u8 *const sEasyChatKeyboardText[] = { }; static const struct SpriteSheet sEasyChatSpriteSheets[] = { - {sRightTriangleCursor_Tiles, 0x0020, 0}, - {sUpTriangleCursor_Tiles, 0x0100, 2}, - {sStartSelectButtons_Tiles, 0x0100, 3}, + {.data = sTriangleCursor_Gfx, .size = 0x0020, .tag = GFXTAG_TRIANGLE_CURSOR}, + {.data = sScrollIndicator_Gfx, .size = 0x0100, .tag = GFXTAG_SCROLL_INDICATOR}, + {.data = sStartSelectButtons_Gfx, .size = 0x0100, .tag = GFXTAG_START_SELECT_BUTTONS}, {} }; static const struct SpritePalette sEasyChatSpritePalettes[] = { - {gUnknown_843F3B8, 0}, - {gUnknown_843F3D8, 1}, - {gUnknown_8E99F24, 2}, - {gUnknown_843F618, 3}, + {.data = sTriangleCursor_Pal, .tag = PALTAG_TRIANGLE_CURSOR}, + {.data = sRectangleCursor_Pal, .tag = PALTAG_RECTANGLE_CURSOR}, + {.data = gEasyChatButtonWindow_Pal, .tag = PALTAG_MISC_UI}, // The palette is generated from the button window but used for various parts of the UI + {.data = sRSInterviewFrame_Pal, .tag = PALTAG_RS_INTERVIEW_FRAME}, {} }; static const struct CompressedSpriteSheet sEasyChatCompressedSpriteSheets[] = { - {gUnknown_843F638, 0x0800, 5}, - {gEasyChatRedRectangularCursor_Tiles, 0x1000, 1}, - {gEasyChatSelectGroupHelp_Tiles, 0x0800, 6}, - {gEasyChatModeIcons_Tiles, 0x1000, 4} + {.data = sRSInterviewFrame_Gfx, .size = 0x0800, .tag = GFXTAG_RS_INTERVIEW_FRAME}, + {.data = gEasyChatRectangleCursor_Gfx, .size = 0x1000, .tag = GFXTAG_RECTANGLE_CURSOR}, + {.data = gEasyChatButtonWindow_Gfx, .size = 0x0800, .tag = GFXTAG_BUTTON_WINDOW}, + {.data = gEasyChatMode_Gfx, .size = 0x1000, .tag = GFXTAG_MODE_WINDOW} }; -static const u8 sECDisplay_AlphaModeXCoords[] = { - 0, - 12, - 24, - 56, - 68, - 80, - 92 -}; +static const u8 sAlphabetKeyboardColumnOffsets[NUM_ALPHABET_COLUMNS] = {0, 12, 24, 56, 68, 80, 92}; -static const struct OamData sOamData_RightTriangleCursor = { +static const struct OamData sOamData_TriangleCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -328,17 +327,17 @@ static const struct OamData sOamData_RightTriangleCursor = { .paletteNum = 0 }; -static const struct SpriteTemplate sSpriteTemplate_RightTriangleCursor = { - .tileTag = 0, - .paletteTag = 0, - .oam = &sOamData_RightTriangleCursor, +static const struct SpriteTemplate sSpriteTemplate_TriangleCursor = { + .tileTag = GFXTAG_TRIANGLE_CURSOR, + .paletteTag = PALTAG_TRIANGLE_CURSOR, + .oam = &sOamData_TriangleCursor, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_BounceCursor }; -static const struct OamData sOamData_RedRectangularCursor = { +static const struct OamData sOamData_RectangleCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -353,44 +352,52 @@ static const struct OamData sOamData_RedRectangularCursor = { .paletteNum = 0 }; -static const union AnimCmd sAnimCmd_RectCursor_Wide[] = { +static const union AnimCmd sAnim_RectangleCursor_OnGroup[] = { ANIMCMD_FRAME(0x00, 0), ANIMCMD_END }; -static const union AnimCmd sAnimCmd_RectCursor_Norm[] = { +static const union AnimCmd sAnim_RectangleCursor_OnButton[] = { ANIMCMD_FRAME(0x20, 0), ANIMCMD_END }; -static const union AnimCmd sAnimCmd_RectCursor_NormTaller[] = { +static const union AnimCmd sAnim_RectangleCursor_OnOthers[] = { ANIMCMD_FRAME(0x40, 0), ANIMCMD_END }; -static const union AnimCmd sAnimCmd_RectCursor_Narrow[] = { +static const union AnimCmd sAnim_RectangleCursor_OnLetter[] = { ANIMCMD_FRAME(0x60, 0), ANIMCMD_END }; -static const union AnimCmd *const sAnimTable_RedRectangularCursor[] = { - sAnimCmd_RectCursor_Wide, - sAnimCmd_RectCursor_Norm, - sAnimCmd_RectCursor_NormTaller, - sAnimCmd_RectCursor_Narrow +// Each anim changes the dimensions of the rectangle cursor to fit what it should be selecting +enum { + RECTCURSOR_ANIM_ON_GROUP, + RECTCURSOR_ANIM_ON_BUTTON, + RECTCURSOR_ANIM_ON_OTHERS, + RECTCURSOR_ANIM_ON_LETTER, }; -static const struct SpriteTemplate sSpriteTemplate_RedRectangularCursor = { - .tileTag = 1, - .paletteTag = 1, - .oam = &sOamData_RedRectangularCursor, - .anims = sAnimTable_RedRectangularCursor, +static const union AnimCmd *const sAnims_RectangleCursor[] = { + [RECTCURSOR_ANIM_ON_GROUP] = sAnim_RectangleCursor_OnGroup, + [RECTCURSOR_ANIM_ON_BUTTON] = sAnim_RectangleCursor_OnButton, + [RECTCURSOR_ANIM_ON_OTHERS] = sAnim_RectangleCursor_OnOthers, + [RECTCURSOR_ANIM_ON_LETTER] = sAnim_RectangleCursor_OnLetter, +}; + +static const struct SpriteTemplate sSpriteTemplate_RectangleCursor = { + .tileTag = GFXTAG_RECTANGLE_CURSOR, + .paletteTag = PALTAG_RECTANGLE_CURSOR, + .oam = &sOamData_RectangleCursor, + .anims = sAnims_RectangleCursor, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_BounceCursor }; -static const struct OamData sOamData_EasyChatModeIcons = { +static const struct OamData sOamData_ModeWindow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -405,53 +412,61 @@ static const struct OamData sOamData_EasyChatModeIcons = { .paletteNum = 0 }; -static const union AnimCmd sAnim_EasyChatModeIcon_Hidden[] = { - ANIMCMD_FRAME(0x60, 0), +static const union AnimCmd sAnim_ModeWindow_Hidden[] = { + ANIMCMD_FRAME(0x60, 0), // Hidden frame ANIMCMD_END }; -static const union AnimCmd sAnim_EasyChatModeIcon_ToGroupMode[] = { - ANIMCMD_FRAME(0x40, 4), - ANIMCMD_FRAME(0x20, 4), +static const union AnimCmd sAnim_ModeWindow_ToGroup[] = { + ANIMCMD_FRAME(0x40, 4), // Transition frame + ANIMCMD_FRAME(0x20, 4), // 'Group' frame ANIMCMD_END }; -static const union AnimCmd sAnim_EasyChatModeIcon_ToAlphaMode[] = { - ANIMCMD_FRAME(0x40, 4), - ANIMCMD_FRAME(0x00, 4), +static const union AnimCmd sAnim_ModeWindow_ToAlphabet[] = { + ANIMCMD_FRAME(0x40, 4), // Transition frame + ANIMCMD_FRAME(0x00, 4), // 'A-Z' frame ANIMCMD_END }; -static const union AnimCmd sAnim_EasyChatModeIcon_ToHidden[] = { - ANIMCMD_FRAME(0x40, 4), - ANIMCMD_FRAME(0x60, 0), +static const union AnimCmd sAnim_ModeWindow_ToHidden[] = { + ANIMCMD_FRAME(0x40, 4), // Transition frame + ANIMCMD_FRAME(0x60, 0), // Hidden frame ANIMCMD_END }; -static const union AnimCmd sAnim_EasyChatModeIcon_HoldSmall[] = { - ANIMCMD_FRAME(0x40, 4), +static const union AnimCmd sAnim_ModeWindow_Transition[] = { + ANIMCMD_FRAME(0x40, 4), // Transition frame ANIMCMD_END }; -static const union AnimCmd *const sAnimTable_EasyChatModeIcons[] = { - sAnim_EasyChatModeIcon_Hidden, - sAnim_EasyChatModeIcon_ToGroupMode, - sAnim_EasyChatModeIcon_ToAlphaMode, - sAnim_EasyChatModeIcon_ToHidden, - sAnim_EasyChatModeIcon_HoldSmall +enum { + MODEWINDOW_ANIM_HIDDEN, + MODEWINDOW_ANIM_TO_GROUP, + MODEWINDOW_ANIM_TO_ALPHABET, + MODEWINDOW_ANIM_TO_HIDDEN, + MODEWINDOW_ANIM_TRANSITION, }; -static const struct SpriteTemplate sSpriteTemplate_EasyChatModeIcons = { - .tileTag = 4, - .paletteTag = 2, - .oam = &sOamData_EasyChatModeIcons, - .anims = sAnimTable_EasyChatModeIcons, +static const union AnimCmd *const sAnims_ModeWindow[] = { + [MODEWINDOW_ANIM_HIDDEN] = sAnim_ModeWindow_Hidden, + [MODEWINDOW_ANIM_TO_GROUP] = sAnim_ModeWindow_ToGroup, + [MODEWINDOW_ANIM_TO_ALPHABET] = sAnim_ModeWindow_ToAlphabet, + [MODEWINDOW_ANIM_TO_HIDDEN] = sAnim_ModeWindow_ToHidden, + [MODEWINDOW_ANIM_TRANSITION] = sAnim_ModeWindow_Transition, +}; + +static const struct SpriteTemplate sSpriteTemplate_ModeWindow = { + .tileTag = GFXTAG_MODE_WINDOW, + .paletteTag = PALTAG_MISC_UI, + .oam = &sOamData_ModeWindow, + .anims = sAnims_ModeWindow, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData sOamData_SelectGroupHelp = { +static const struct OamData sOamData_ButtonWindow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -466,17 +481,17 @@ static const struct OamData sOamData_SelectGroupHelp = { .paletteNum = 0 }; -static const struct SpriteTemplate sSpriteTemplate_SelectGroupHelp = { - .tileTag = 6, - .paletteTag = 2, - .oam = &sOamData_SelectGroupHelp, +static const struct SpriteTemplate sSpriteTemplate_ButtonWindow = { + .tileTag = GFXTAG_BUTTON_WINDOW, + .paletteTag = PALTAG_MISC_UI, + .oam = &sOamData_ButtonWindow, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gUnknown_843FA58 = { +static const struct OamData sOamData_StartSelectButton = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -491,7 +506,7 @@ static const struct OamData gUnknown_843FA58 = { .paletteNum = 0 }; -static const struct OamData sOamData_UpTriangleCursor = { +static const struct OamData sOamData_ScrollIndicator = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -506,36 +521,37 @@ static const struct OamData sOamData_UpTriangleCursor = { .paletteNum = 0 }; -static const union AnimCmd gUnknown_843FA68[] = { +static const union AnimCmd sAnim_Frame0[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -static const union AnimCmd gUnknown_843FA70[] = { +static const union AnimCmd sAnim_Frame1[] = { ANIMCMD_FRAME(4, 0), ANIMCMD_END, }; -static const union AnimCmd *const gUnknown_843FA78[] = { - gUnknown_843FA68, - gUnknown_843FA70, +// Frame0 is Start button, Frame1 is Select button, both are identical for the scroll indicators +static const union AnimCmd *const sAnims_TwoFrame[] = { + sAnim_Frame0, + sAnim_Frame1, }; static const struct SpriteTemplate sSpriteTemplate_StartSelectButtons = { - .tileTag = 3, - .paletteTag = 2, - .oam = &gUnknown_843FA58, - .anims = gUnknown_843FA78, + .tileTag = GFXTAG_START_SELECT_BUTTONS, + .paletteTag = PALTAG_MISC_UI, + .oam = &sOamData_StartSelectButton, + .anims = sAnims_TwoFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -static const struct SpriteTemplate sSpriteTemplate_UpTriangleCursor = { - .tileTag = 2, - .paletteTag = 2, - .oam = &sOamData_UpTriangleCursor, - .anims = gUnknown_843FA78, +static const struct SpriteTemplate sSpriteTemplate_ScrollIndicator = { + .tileTag = GFXTAG_SCROLL_INDICATOR, + .paletteTag = PALTAG_MISC_UI, + .oam = &sOamData_ScrollIndicator, + .anims = sAnims_TwoFrame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -573,7 +589,7 @@ bool8 LoadEasyChatGraphics(void) break; case 2: DrawECFrameInTilemapBuffer(sEasyChatGraphicsResources->bg1TilemapBuffer); - DecompressAndLoadBgGfxUsingHeap(1, gUnknown_843F7AC, 0, 0, 0); + DecompressAndLoadBgGfxUsingHeap(1, sTextInputFrame_Gfx, 0, 0, 0); CopyBgTilemapBufferToVram(1); break; case 3: @@ -695,7 +711,7 @@ static bool8 ECInterfaceCmd_02(void) { if (*ecWord == 0xFFFF) { - stringWidth = GetStringWidth(FONT_1, gUnknown_843F8D8, 0) * 7; + stringWidth = GetStringWidth(FONT_1, sText_Underscore, 0) * 7; } else { @@ -1303,13 +1319,13 @@ static void SetGpuRegsForEasyChatInit(void) static void LoadEasyChatPals(void) { ResetPaletteFade(); - LoadPalette(gEasyChatMode_Pal, 0, 32); - LoadPalette(gUnknown_843F76C, 1 * 16, 32); - LoadPalette(gUnknown_843F78C, 4 * 16, 32); - LoadPalette(gUnknown_843F874, 10 * 16, 8); - LoadPalette(gUnknown_843F87C, 11 * 16, 10); - LoadPalette(gUnknown_843F87C, 15 * 16, 10); - LoadPalette(gUnknown_843F87C, 3 * 16, 10); + LoadPalette(gEasyChatWindow_Pal, 0, 32); + LoadPalette(sTextInputFrameOrange_Pal, 1 * 16, 32); + LoadPalette(sTextInputFrameGreen_Pal, 4 * 16, 32); + LoadPalette(sTitleText_Pal, 10 * 16, 8); + LoadPalette(sText_Pal, 11 * 16, 10); + LoadPalette(sText_Pal, 15 * 16, 10); + LoadPalette(sText_Pal, 3 * 16, 10); } static void PrintTitleText(void) @@ -1579,8 +1595,8 @@ static void PrintEasyChatKeyboardText(void) { u32 i; - for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++) - EC_AddTextPrinterParameterized(2, FONT_1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SKIP_DRAW, NULL); + for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++) + EC_AddTextPrinterParameterized(2, FONT_1, sEasyChatKeyboardAlphabet[i], 10, 96 + i * 16, TEXT_SKIP_DRAW, NULL); } static void PrintECWordsMenu(void) @@ -1930,7 +1946,7 @@ static void CreateSelectDestFieldCursorSprite(void) u8 frameId = GetEasyChatScreenFrameId(); s16 x = sPhraseFrameDimensions[frameId].left * 8 + 13; s16 y = (sPhraseFrameDimensions[frameId].top + 1) * 8 + 1; - u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, x, y, 2); + u8 spriteId = CreateSprite(&sSpriteTemplate_TriangleCursor, x, y, 2); sEasyChatGraphicsResources->selectDestFieldCursorSprite = &gSprites[spriteId]; gSprites[spriteId].data[1] = 1; } @@ -1970,11 +1986,11 @@ static void UnfreezeSelectDestFieldCursorSprite(void) static void CreateRedRectangularCursorSpritePair(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3); + u8 spriteId = CreateSprite(&sSpriteTemplate_RectangleCursor, 0, 0, 3); sEasyChatGraphicsResources->rectCursorSpriteRight = &gSprites[spriteId]; sEasyChatGraphicsResources->rectCursorSpriteRight->x2 = 32; - spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3); + spriteId = CreateSprite(&sSpriteTemplate_RectangleCursor, 0, 0, 3); sEasyChatGraphicsResources->rectCursorSpriteLeft = &gSprites[spriteId]; sEasyChatGraphicsResources->rectCursorSpriteLeft->x2 = -32; @@ -2009,21 +2025,21 @@ static void MoveCursor_Group(s8 x, s8 y) { if (x != -1) { - StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 0); + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, RECTCURSOR_ANIM_ON_GROUP); sEasyChatGraphicsResources->rectCursorSpriteRight->x = x * 84 + 58; sEasyChatGraphicsResources->rectCursorSpriteRight->y = y * 16 + 96; - StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 0); + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, RECTCURSOR_ANIM_ON_GROUP); sEasyChatGraphicsResources->rectCursorSpriteLeft->x = x * 84 + 58; sEasyChatGraphicsResources->rectCursorSpriteLeft->y = y * 16 + 96; } else { - StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1); + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, RECTCURSOR_ANIM_ON_BUTTON); sEasyChatGraphicsResources->rectCursorSpriteRight->x = 216; sEasyChatGraphicsResources->rectCursorSpriteRight->y = y * 16 + 112; - StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1); + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, RECTCURSOR_ANIM_ON_BUTTON); sEasyChatGraphicsResources->rectCursorSpriteLeft->x = 216; sEasyChatGraphicsResources->rectCursorSpriteLeft->y = y * 16 + 112; } @@ -2041,12 +2057,12 @@ static void MoveCursor_Alpha(s8 cursorX, s8 cursorY) if (cursorX == 6 && cursorY == 0) { x = 157; - anim = 2; + anim = RECTCURSOR_ANIM_ON_OTHERS; } else { - x += sECDisplay_AlphaModeXCoords[cursorX < NELEMS(sECDisplay_AlphaModeXCoords) ? cursorX : 0]; - anim = 3; + x += sAlphabetKeyboardColumnOffsets[cursorX < ARRAY_COUNT(sAlphabetKeyboardColumnOffsets) ? cursorX : 0]; + anim = RECTCURSOR_ANIM_ON_LETTER; } StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, anim); @@ -2059,11 +2075,11 @@ static void MoveCursor_Alpha(s8 cursorX, s8 cursorY) } else { - StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1); + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, RECTCURSOR_ANIM_ON_BUTTON); sEasyChatGraphicsResources->rectCursorSpriteRight->x = 216; sEasyChatGraphicsResources->rectCursorSpriteRight->y = cursorY * 16 + 112; - StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1); + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, RECTCURSOR_ANIM_ON_BUTTON); sEasyChatGraphicsResources->rectCursorSpriteLeft->x = 216; sEasyChatGraphicsResources->rectCursorSpriteLeft->y = cursorY * 16 + 112; } @@ -2071,7 +2087,7 @@ static void MoveCursor_Alpha(s8 cursorX, s8 cursorY) static void CreateSelectWordCursorSprite(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, 0, 0, 4); + u8 spriteId = CreateSprite(&sSpriteTemplate_TriangleCursor, 0, 0, 4); sEasyChatGraphicsResources->selectWordCursorSprite = &gSprites[spriteId]; sEasyChatGraphicsResources->selectWordCursorSprite->callback = SpriteCB_SelectWordCursorSprite; sEasyChatGraphicsResources->selectWordCursorSprite->oam.priority = 2; @@ -2121,11 +2137,11 @@ static void DestroySelectWordCursorSprite(void) static void CreateSelectGroupHelpSprite(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_SelectGroupHelp, 208, 128, 6); + u8 spriteId = CreateSprite(&sSpriteTemplate_ButtonWindow, 208, 128, 6); sEasyChatGraphicsResources->selectGroupHelpSprite = &gSprites[spriteId]; sEasyChatGraphicsResources->selectGroupHelpSprite->x2 = -64; - spriteId = CreateSprite(&sSpriteTemplate_EasyChatModeIcons, 208, 80, 5); + spriteId = CreateSprite(&sSpriteTemplate_ModeWindow, 208, 80, 5); sEasyChatGraphicsResources->modeIconsSprite = &gSprites[spriteId]; sEasyChatGraphicsResources->modeIconState = 0; } @@ -2142,9 +2158,9 @@ static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void) { sEasyChatGraphicsResources->selectGroupHelpSprite->x2 = 0; if (!IsEasyChatAlphaMode()) - StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_GROUP); else - StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_ALPHABET); sEasyChatGraphicsResources->modeIconState++; } @@ -2163,7 +2179,7 @@ static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void) static void StartModeIconHidingAnimation(void) { sEasyChatGraphicsResources->modeIconState = 0; - StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 3); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_HIDDEN); } static bool8 RunModeIconHidingAnimation(void) @@ -2194,15 +2210,15 @@ static bool8 RunModeIconHidingAnimation(void) static void ShrinkModeIconsSprite(void) { - StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 4); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TRANSITION); } static void ShowModeIconsSprite(void) { if (!IsEasyChatAlphaMode()) - StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_GROUP); else - StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_ALPHABET); } static bool8 ModeIconsSpriteAnimIsEnded(void) @@ -2212,11 +2228,11 @@ static bool8 ModeIconsSpriteAnimIsEnded(void) static void CreateVerticalScrollArrowSprites(void) { - u8 spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 80, 0); + u8 spriteId = CreateSprite(&sSpriteTemplate_ScrollIndicator, 96, 80, 0); if (spriteId != MAX_SPRITES) sEasyChatGraphicsResources->upTriangleCursorSprite = &gSprites[spriteId]; - spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 156, 0); + spriteId = CreateSprite(&sSpriteTemplate_ScrollIndicator, 96, 156, 0); if (spriteId != MAX_SPRITES) { sEasyChatGraphicsResources->downTriangleCursorSprite = &gSprites[spriteId]; diff --git a/src/graphics.c b/src/graphics.c index 440083539..eb07dbecd 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1219,13 +1219,13 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp. 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 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); -const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); -const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); +const u16 gEasyChatWindow_Pal[] = INCBIN_U16("graphics/easy_chat/window.gbapal"); +const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/easy_chat/window.4bpp.lz"); +const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/easy_chat/window.bin.lz"); -const u16 gUnknown_8E99F24[] = INCBIN_U16("graphics/link_rfu/unk_8E9A168.gbapal"); -const u32 gEasyChatSelectGroupHelp_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz"); -const u32 gEasyChatModeIcons_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz"); +const u16 gEasyChatButtonWindow_Pal[] = INCBIN_U16("graphics/easy_chat/button_window.gbapal"); +const u32 gEasyChatButtonWindow_Gfx[] = INCBIN_U32("graphics/easy_chat/button_window.4bpp.lz"); +const u32 gEasyChatMode_Gfx[] = INCBIN_U32("graphics/easy_chat/mode.4bpp.lz"); const u32 gPokeSumBgTiles[] = INCBIN_U32("graphics/interface/trainer_memo.4bpp.lz"); const u32 gTrainerMemoPal1[] = INCBIN_U32("graphics/interface/trainer_memo_pal1.gbapal"); @@ -1242,11 +1242,11 @@ const u32 gBgTilemap_PokeSum_MovesListForDelete[] = INCBIN_U32("graphics/interfa const u32 gBgTilemap_PokeSum_MoveDetailsForDelete[] = INCBIN_U32("graphics/interface/trainer_memo_4.bin.lz"); const u32 gBgTilemap_TrainerMemo_Egg[] = INCBIN_U32("graphics/interface/trainer_memo_5.bin.lz"); -const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal"); // might be an alternate unused palette of the link_rfu gfx below. +const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal"); -const u32 gEasyChatRedRectangularCursor_Tiles[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz"); -const u16 gPokeSummary_StatusAilmentIconPals[] = INCBIN_U16("graphics/interface/link_rfu_frame.gbapal"); -const u32 gPokeSummary_StatusAilmentIconTiles[] = INCBIN_U32("graphics/interface/link_rfu_status.4bpp.lz"); +const u32 gEasyChatRectangleCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/rectangle_cursor.4bpp.lz"); +const u16 gPokeSummary_StatusAilmentIconPals[] = INCBIN_U16("graphics/interface/status_ailment_icons.gbapal"); +const u32 gPokeSummary_StatusAilmentIconTiles[] = INCBIN_U32("graphics/interface/status_ailment_icons.4bpp.lz"); const u16 gDexScreen_TopMenuIconPals_AtoZ[] = INCBIN_U16("graphics/pokedex/cat_icon_abc.gbapal"); const u32 gDexScreen_TopMenuIconTiles_AtoZ[] = INCBIN_U32("graphics/pokedex/cat_icon_abc.4bpp.lz"); From bceda105e6efc694c95f88d1770c706ac08f7564 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 2 Nov 2022 21:32:52 -0400 Subject: [PATCH 06/42] Sync trainer_pokemon_sprites --- src/trainer_pokemon_sprites.c | 68 ++++++++++++----------------------- 1 file changed, 23 insertions(+), 45 deletions(-) diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 2b58063b8..44ccdbeb1 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -12,26 +12,19 @@ struct PicData u8 active; }; -// Static RAM declarations #define PICS_COUNT 8 static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {}; static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {}; -// Static ROM declarations +static const struct PicData sDummyPicData = {}; -// .rodata - -static const struct PicData gUnknown_8453178 = {}; - -static const struct OamData gUnknown_8453184 = +static const struct OamData sOamData_Normal = { .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64) }; -// .text - void DummyPicSpriteCallback(struct Sprite *sprite) { @@ -42,7 +35,7 @@ bool16 ResetAllPicSprites(void) int i; for (i = 0; i < PICS_COUNT; i ++) - sSpritePics[i] = gUnknown_8453178; + sSpritePics[i] = sDummyPicData; return FALSE; } @@ -85,9 +78,9 @@ void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 palett { if (!isTrainer) { - if (paletteTag == 0xFFFF) + if (paletteTag == TAG_NONE) { - sCreatingSpriteTemplate.paletteTag = 0xFFFF; + sCreatingSpriteTemplate.paletteTag = TAG_NONE; LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); } else @@ -98,9 +91,9 @@ void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 palett } else { - if (paletteTag == 0xFFFF) + if (paletteTag == TAG_NONE) { - sCreatingSpriteTemplate.paletteTag = 0xFFFF; + sCreatingSpriteTemplate.paletteTag = TAG_NONE; LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20); } else @@ -138,19 +131,15 @@ u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s1 for (i = 0; i < PICS_COUNT; i ++) { if (!sSpritePics[i].active) - { break; - } } if (i == PICS_COUNT) - { return 0xFFFF; - } + framePics = Alloc(4 * 0x800); if (!framePics) - { return 0xFFFF; - } + images = Alloc(4 * sizeof(struct SpriteFrameImage)); if (!images) { @@ -167,18 +156,16 @@ u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s1 images[j].data = framePics + 0x800 * j; images[j].size = 0x800; } - sCreatingSpriteTemplate.tileTag = 0xFFFF; - sCreatingSpriteTemplate.oam = &gUnknown_8453184; + sCreatingSpriteTemplate.tileTag = TAG_NONE; + sCreatingSpriteTemplate.oam = &sOamData_Normal; AssignSpriteAnimsTable(isTrainer); sCreatingSpriteTemplate.images = images; sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; sCreatingSpriteTemplate.callback = DummyPicSpriteCallback; LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, isTrainer); spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0); - if (paletteTag == 0xFFFF) - { + if (paletteTag == TAG_NONE) gSprites[spriteId].oam.paletteNum = paletteSlot; - } sSpritePics[i].frames = framePics; sSpritePics[i].images = images; sSpritePics[i].paletteTag = paletteTag; @@ -201,33 +188,27 @@ u16 FreeAndDestroyPicSpriteInternal(u16 spriteId) for (i = 0; i < PICS_COUNT; i ++) { if (sSpritePics[i].spriteId == spriteId) - { break; - } } if (i == PICS_COUNT) - { return 0xFFFF; - } + framePics = sSpritePics[i].frames; images = sSpritePics[i].images; - if (sSpritePics[i].paletteTag != 0xFFFF) - { + if (sSpritePics[i].paletteTag != TAG_NONE) FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); - } DestroySprite(&gSprites[spriteId]); Free(framePics); Free(images); - sSpritePics[i] = gUnknown_8453178; + sSpritePics[i] = sDummyPicData; return 0; } -u16 sub_810C050(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer) +static u16 LoadPicSpriteInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer) { if (DecompressPic_HandleDeoxys(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE)) - { return 0xFFFF; - } + LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer); return 0; } @@ -282,9 +263,9 @@ u16 FreeAndDestroyTrainerPicSprite(u16 spriteId) return FreeAndDestroyPicSpriteInternal(spriteId); } -u16 sub_810C2FC(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +u16 LoadTrainerPicInWindow(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) { - return sub_810C050(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); + return LoadPicSpriteInWindow(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); } u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) @@ -296,13 +277,10 @@ u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass) { if (getClass == TRUE) { - switch (gender) - { - default: - return gFacilityClassToPicIndex[0x87]; - case MALE: - return gFacilityClassToPicIndex[0x86]; - } + if (gender != MALE) + return gFacilityClassToPicIndex[FACILITY_CLASS_LEAF]; + else + return gFacilityClassToPicIndex[FACILITY_CLASS_RED]; } return gender; } From d7f899a490e1bcad912f2e8b5e87d8dac17cb4c3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 2 Nov 2022 16:20:55 -0400 Subject: [PATCH 07/42] Sync programmable wave data --- sound/programmable_wave_data.inc | 45 +++-- .../{84A31EC.pcm => 01.pcm} | 0 .../{84A31FC.pcm => 02.pcm} | 0 .../{84A320C.pcm => 03.pcm} | 0 .../{84A321C.pcm => 04.pcm} | 0 .../{84A322C.pcm => 05.pcm} | 0 .../{84A323C.pcm => 06.pcm} | 0 .../{84A324C.pcm => 07.pcm} | Bin .../{84A325C.pcm => 08.pcm} | Bin .../{84A326C.pcm => 09.pcm} | 0 .../{84A327C.pcm => 10.pcm} | Bin .../{84A328C.pcm => 11.pcm} | 0 sound/voice_groups.inc | 176 +++++++++--------- 13 files changed, 110 insertions(+), 111 deletions(-) rename sound/programmable_wave_samples/{84A31EC.pcm => 01.pcm} (100%) rename sound/programmable_wave_samples/{84A31FC.pcm => 02.pcm} (100%) rename sound/programmable_wave_samples/{84A320C.pcm => 03.pcm} (100%) rename sound/programmable_wave_samples/{84A321C.pcm => 04.pcm} (100%) rename sound/programmable_wave_samples/{84A322C.pcm => 05.pcm} (100%) rename sound/programmable_wave_samples/{84A323C.pcm => 06.pcm} (100%) rename sound/programmable_wave_samples/{84A324C.pcm => 07.pcm} (100%) rename sound/programmable_wave_samples/{84A325C.pcm => 08.pcm} (100%) rename sound/programmable_wave_samples/{84A326C.pcm => 09.pcm} (100%) rename sound/programmable_wave_samples/{84A327C.pcm => 10.pcm} (100%) rename sound/programmable_wave_samples/{84A328C.pcm => 11.pcm} (100%) diff --git a/sound/programmable_wave_data.inc b/sound/programmable_wave_data.inc index 33cfebde4..b6e6b578b 100644 --- a/sound/programmable_wave_data.inc +++ b/sound/programmable_wave_data.inc @@ -1,33 +1,32 @@ +ProgrammableWaveData_1:: + .incbin "sound/programmable_wave_samples/01.pcm" -gProgrammableWaveData_84A31EC:: - .incbin "sound/programmable_wave_samples/84A31EC.pcm" +ProgrammableWaveData_2:: + .incbin "sound/programmable_wave_samples/02.pcm" -gProgrammableWaveData_84A31FC:: - .incbin "sound/programmable_wave_samples/84A31FC.pcm" +ProgrammableWaveData_3:: + .incbin "sound/programmable_wave_samples/03.pcm" -gProgrammableWaveData_84A320C:: - .incbin "sound/programmable_wave_samples/84A320C.pcm" +ProgrammableWaveData_4:: + .incbin "sound/programmable_wave_samples/04.pcm" -gProgrammableWaveData_84A321C:: - .incbin "sound/programmable_wave_samples/84A321C.pcm" +ProgrammableWaveData_5:: + .incbin "sound/programmable_wave_samples/05.pcm" -gProgrammableWaveData_84A322C:: - .incbin "sound/programmable_wave_samples/84A322C.pcm" +ProgrammableWaveData_6:: + .incbin "sound/programmable_wave_samples/06.pcm" -gProgrammableWaveData_84A323C:: - .incbin "sound/programmable_wave_samples/84A323C.pcm" +ProgrammableWaveData_7:: + .incbin "sound/programmable_wave_samples/07.pcm" -gProgrammableWaveData_84A324C:: - .incbin "sound/programmable_wave_samples/84A324C.pcm" +ProgrammableWaveData_8:: + .incbin "sound/programmable_wave_samples/08.pcm" -gProgrammableWaveData_84A325C:: - .incbin "sound/programmable_wave_samples/84A325C.pcm" +ProgrammableWaveData_9:: + .incbin "sound/programmable_wave_samples/09.pcm" -gProgrammableWaveData_84A326C:: - .incbin "sound/programmable_wave_samples/84A326C.pcm" +ProgrammableWaveData_10:: + .incbin "sound/programmable_wave_samples/10.pcm" -gProgrammableWaveData_84A327C:: - .incbin "sound/programmable_wave_samples/84A327C.pcm" - -gProgrammableWaveData_84A328C:: - .incbin "sound/programmable_wave_samples/84A328C.pcm" +ProgrammableWaveData_11:: + .incbin "sound/programmable_wave_samples/11.pcm" diff --git a/sound/programmable_wave_samples/84A31EC.pcm b/sound/programmable_wave_samples/01.pcm similarity index 100% rename from sound/programmable_wave_samples/84A31EC.pcm rename to sound/programmable_wave_samples/01.pcm diff --git a/sound/programmable_wave_samples/84A31FC.pcm b/sound/programmable_wave_samples/02.pcm similarity index 100% rename from sound/programmable_wave_samples/84A31FC.pcm rename to sound/programmable_wave_samples/02.pcm diff --git a/sound/programmable_wave_samples/84A320C.pcm b/sound/programmable_wave_samples/03.pcm similarity index 100% rename from sound/programmable_wave_samples/84A320C.pcm rename to sound/programmable_wave_samples/03.pcm diff --git a/sound/programmable_wave_samples/84A321C.pcm b/sound/programmable_wave_samples/04.pcm similarity index 100% rename from sound/programmable_wave_samples/84A321C.pcm rename to sound/programmable_wave_samples/04.pcm diff --git a/sound/programmable_wave_samples/84A322C.pcm b/sound/programmable_wave_samples/05.pcm similarity index 100% rename from sound/programmable_wave_samples/84A322C.pcm rename to sound/programmable_wave_samples/05.pcm diff --git a/sound/programmable_wave_samples/84A323C.pcm b/sound/programmable_wave_samples/06.pcm similarity index 100% rename from sound/programmable_wave_samples/84A323C.pcm rename to sound/programmable_wave_samples/06.pcm diff --git a/sound/programmable_wave_samples/84A324C.pcm b/sound/programmable_wave_samples/07.pcm similarity index 100% rename from sound/programmable_wave_samples/84A324C.pcm rename to sound/programmable_wave_samples/07.pcm diff --git a/sound/programmable_wave_samples/84A325C.pcm b/sound/programmable_wave_samples/08.pcm similarity index 100% rename from sound/programmable_wave_samples/84A325C.pcm rename to sound/programmable_wave_samples/08.pcm diff --git a/sound/programmable_wave_samples/84A326C.pcm b/sound/programmable_wave_samples/09.pcm similarity index 100% rename from sound/programmable_wave_samples/84A326C.pcm rename to sound/programmable_wave_samples/09.pcm diff --git a/sound/programmable_wave_samples/84A327C.pcm b/sound/programmable_wave_samples/10.pcm similarity index 100% rename from sound/programmable_wave_samples/84A327C.pcm rename to sound/programmable_wave_samples/10.pcm diff --git a/sound/programmable_wave_samples/84A328C.pcm b/sound/programmable_wave_samples/11.pcm similarity index 100% rename from sound/programmable_wave_samples/84A328C.pcm rename to sound/programmable_wave_samples/11.pcm diff --git a/sound/voice_groups.inc b/sound/voice_groups.inc index 3eb050e7c..13c8090a0 100644 --- a/sound/voice_groups.inc +++ b/sound/voice_groups.inc @@ -76,7 +76,7 @@ voicegroup001:: voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 1 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -84,7 +84,7 @@ voicegroup001:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave 60, 0, gProgrammableWaveData_84A320C, 0, 7, 15, 1 + voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 voice_square_2 60, 0, 3, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -434,8 +434,8 @@ voicegroup008:: voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 7, 15, 2 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 @@ -533,7 +533,7 @@ voicegroup009:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 9, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 9, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 @@ -621,7 +621,7 @@ voicegroup010:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A320C, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 voice_square_2 60, 0, 3, 0, 1, 7, 1 @@ -630,7 +630,7 @@ voicegroup010:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 .align 2 voicegroup011:: @@ -715,7 +715,7 @@ voicegroup011:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 voice_square_2 60, 0, 1, 0, 1, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -724,7 +724,7 @@ voicegroup011:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 .align 2 voicegroup012:: @@ -1351,7 +1351,7 @@ voicegroup131:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -1472,9 +1472,9 @@ voicegroup132:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 2 voice_square_2_alt 60, 0, 3, 0, 1, 7, 5 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A328C, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 4, 2, 2 @@ -1482,7 +1482,7 @@ voicegroup132:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -1608,12 +1608,12 @@ voicegroup133:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -1739,7 +1739,7 @@ voicegroup134:: voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 @@ -1917,8 +1917,8 @@ voicegroup136:: voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 voice_square_1_alt 60, 0, 0, 1, 0, 5, 0, 0 voice_square_2_alt 60, 0, 3, 2, 4, 10, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 1, 5, 0, 3 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 1, 5, 0, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 1, 5, 0, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 5, 0, 3 voice_square_2_alt 60, 0, 1, 0, 1, 10, 2 voice_square_1_alt 60, 0, 0, 1, 0, 1, 10, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2049,8 +2049,8 @@ voicegroup137:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 2, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2185,7 +2185,7 @@ voicegroup138:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2316,7 +2316,7 @@ voicegroup139:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2358,7 +2358,7 @@ voicegroup140:: voice_keysplit_all voicegroup001 voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 .align 2 voicegroup141:: @@ -2445,9 +2445,9 @@ voicegroup141:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 voice_square_2_alt 60, 0, 3, 0, 2, 7, 3 voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 1, 7, 0, 6 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 2 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A320C, 0, 2, 9, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 2, 9, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2576,7 +2576,7 @@ voicegroup142:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 voice_square_2_alt 60, 0, 2, 0, 2, 5, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A326C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 7, 15, 0 .align 2 voicegroup143:: @@ -2663,7 +2663,7 @@ voicegroup143:: voice_square_2_alt 60, 0, 3, 0, 2, 3, 2 voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2794,7 +2794,7 @@ voicegroup144:: voice_square_2_alt 60, 0, 3, 0, 2, 4, 2 voice_square_2_alt 60, 0, 1, 0, 2, 4, 3 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -2934,7 +2934,7 @@ voicegroup145:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -3065,7 +3065,7 @@ voicegroup146:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -3187,7 +3187,7 @@ voicegroup147:: voice_square_1_alt 60, 0, 0, 2, 0, 0, 6, 1 voice_square_2_alt 60, 0, 2, 0, 0, 6, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 2, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 4, 2 .align 2 voicegroup148:: @@ -3278,7 +3278,7 @@ voicegroup148:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -3409,12 +3409,12 @@ voicegroup149:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 .align 2 voicegroup150:: @@ -3501,7 +3501,7 @@ voicegroup150:: voice_square_2_alt 60, 0, 1, 0, 1, 4, 6 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -3636,7 +3636,7 @@ voicegroup151:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 .align 2 voicegroup152:: @@ -3722,9 +3722,9 @@ voicegroup152:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 1 voice_square_2_alt 60, 0, 3, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A328C, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 @@ -3732,7 +3732,7 @@ voicegroup152:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -3863,7 +3863,7 @@ voicegroup153:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A325C, 0, 1, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_8, 0, 1, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -3989,12 +3989,12 @@ voicegroup154:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A321C, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 12, 0 .align 2 voicegroup155:: @@ -4081,13 +4081,13 @@ voicegroup155:: voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 3, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A320C, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A327C, 0, 1, 9, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_10, 0, 1, 9, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 @@ -4132,7 +4132,7 @@ voicegroup156:: voice_keysplit_all voicegroup002 voice_keysplit voicegroup003, KeySplitTable1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -4342,12 +4342,12 @@ voicegroup157:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 3, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -4475,15 +4475,15 @@ voicegroup158:: voice_square_2_alt 60, 0, 3, 0, 1, 10, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -4604,7 +4604,7 @@ voicegroup159:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 7, 0, 6 voice_square_2_alt 60, 0, 1, 1, 5, 1, 6 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 1, 7, 0, 6 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 voice_square_1_alt 60, 0, 0, 0, 1, 4, 3, 6 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -4740,7 +4740,7 @@ voicegroup160:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 .align 2 voicegroup161:: @@ -4831,7 +4831,7 @@ voicegroup161:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -4967,7 +4967,7 @@ voicegroup162:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 .align 2 voicegroup163:: @@ -5063,7 +5063,7 @@ voicegroup163:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A326C, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5184,7 +5184,7 @@ voicegroup164:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 4 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A328C, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5194,7 +5194,7 @@ voicegroup164:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5325,7 +5325,7 @@ voicegroup165:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5451,12 +5451,12 @@ voicegroup166:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5579,7 +5579,7 @@ voicegroup167:: voice_square_2_alt 60, 0, 3, 0, 2, 8, 3 voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 0, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5718,7 +5718,7 @@ voicegroup168:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A326C, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5832,7 +5832,7 @@ voicegroup169:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -5969,7 +5969,7 @@ voicegroup170:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 @@ -6056,7 +6056,7 @@ voicegroup171:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 @@ -6064,8 +6064,8 @@ voicegroup171:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A323C, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A324C, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 .align 2 voicegroup172:: @@ -6161,7 +6161,7 @@ voicegroup172:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A326C, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -6292,7 +6292,7 @@ voicegroup173:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -6423,7 +6423,7 @@ voicegroup174:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31FC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -6462,7 +6462,7 @@ voicegroup174:: voice_keysplit_all voicegroup177 voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -6487,7 +6487,7 @@ voicegroup174:: voice_keysplit_all voicegroup002 voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 .align 2 voicegroup175:: @@ -6581,7 +6581,7 @@ voicegroup176:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -6777,7 +6777,7 @@ voicegroup178:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 0, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 15, 1 .align 2 voicegroup179:: @@ -6868,7 +6868,7 @@ voicegroup179:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 .align 2 voicegroup180:: @@ -6964,7 +6964,7 @@ voicegroup180:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -7140,7 +7140,7 @@ voicegroup182:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 .align 2 voicegroup183:: @@ -7227,7 +7227,7 @@ voicegroup183:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -7278,7 +7278,7 @@ voicegroup184:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -7448,10 +7448,10 @@ voicegroup185:: voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A328C, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A327C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_10, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A322C, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -7718,7 +7718,7 @@ voicegroup187:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -7849,7 +7849,7 @@ voicegroup188:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -7983,7 +7983,7 @@ voicegroup189:: .align 2 voicegroup190:: - voice_programmable_wave_alt 60, 0, gProgrammableWaveData_84A31EC, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 From c757adc3e95ce2ef89481f537b73c6fac1027771 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 2 Nov 2022 20:57:23 -0400 Subject: [PATCH 08/42] Sync some battle_bg --- src/battle_bg.c | 105 ++++++++++++++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 40 deletions(-) diff --git a/src/battle_bg.c b/src/battle_bg.c index d44c56cd1..4b5b17b72 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -28,9 +28,9 @@ struct BattleBackground static void CB2_unused(void); static u8 GetBattleTerrainOverride(void); -static const u8 gUnknown_824829C[] = {1, 2}; +static const u8 sUnused[] = {1, 2}; -static const struct OamData gOamData_82482A0 = { +static const struct OamData sVsLetter_V_OamData = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, @@ -46,7 +46,7 @@ static const struct OamData gOamData_82482A0 = { .affineParam = 0 }; -static const struct OamData gOamData_82482A8 = { +static const struct OamData sVsLetter_S_OamData = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, @@ -62,38 +62,38 @@ static const struct OamData gOamData_82482A8 = { .affineParam = 0 }; -static const union AffineAnimCmd gUnknown_82482B0[] = { +static const union AffineAnimCmd sVsLetterAffineAnimCmds0[] = { AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_82482C0[] = { +static const union AffineAnimCmd sVsLetterAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), AFFINEANIMCMD_FRAME(0x18, 0x18, 0x0, 0x80), AFFINEANIMCMD_FRAME(0x18, 0x18, 0x0, 0x80), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gAffineAnimTable_82482E0[] = { - gUnknown_82482B0, - gUnknown_82482C0 +static const union AffineAnimCmd *const sVsLetterAffineAnimTable[] = { + sVsLetterAffineAnimCmds0, + sVsLetterAffineAnimCmds1 }; static const struct SpriteTemplate sVsLetter_V_SpriteTemplate = { .tileTag = TAG_VS_LETTERS, .paletteTag = TAG_VS_LETTERS, - .oam = &gOamData_82482A0, + .oam = &sVsLetter_V_OamData, .anims = gDummySpriteAnimTable, - .affineAnims = gAffineAnimTable_82482E0, + .affineAnims = sVsLetterAffineAnimTable, .callback = SpriteCB_VsLetterDummy }; static const struct SpriteTemplate sVsLetter_S_SpriteTemplate = { .tileTag = TAG_VS_LETTERS, .paletteTag = TAG_VS_LETTERS, - .oam = &gOamData_82482A8, + .oam = &sVsLetter_S_OamData, .anims = gDummySpriteAnimTable, - .affineAnims = gAffineAnimTable_82482E0, + .affineAnims = sVsLetterAffineAnimTable, .callback = SpriteCB_VsLetterDummy }; @@ -139,8 +139,8 @@ const struct BgTemplate gBattleBgTemplates[4] = { } }; -static const struct WindowTemplate gUnknown_8248330[] = { - { +static const struct WindowTemplate sStandardBattleWindowTemplates[] = { + [B_WIN_MSG] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 15, @@ -148,7 +148,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 4, .paletteNum = 0, .baseBlock = 0x090 - }, { + }, + [B_WIN_ACTION_PROMPT] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 35, @@ -156,7 +157,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 4, .paletteNum = 0, .baseBlock = 0x1c0 - }, { + }, + [B_WIN_ACTION_MENU] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 35, @@ -164,7 +166,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 4, .paletteNum = 5, .baseBlock = 0x190 - }, { + }, + [B_WIN_MOVE_NAME_1] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 55, @@ -172,7 +175,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x300 - }, { + }, + [B_WIN_MOVE_NAME_2] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 55, @@ -180,7 +184,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x310 - }, { + }, + [B_WIN_MOVE_NAME_3] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 57, @@ -188,7 +193,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x320 - }, { + }, + [B_WIN_MOVE_NAME_4] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 57, @@ -196,7 +202,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x330 - }, { + }, + [B_WIN_PP] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 55, @@ -204,7 +211,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x290 - }, { + }, + [B_WIN_MOVE_TYPE] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 57, @@ -212,7 +220,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x296 - }, { + }, + [B_WIN_PP_REMAINING] = { .bg = 0, .tilemapLeft = 24, .tilemapTop = 55, @@ -220,7 +229,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x2a6 - }, { + }, + [B_WIN_DUMMY] = { .bg = 0, .tilemapLeft = 25, .tilemapTop = 57, @@ -228,7 +238,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 0, .paletteNum = 5, .baseBlock = 0x2b0 - }, { + }, + [B_WIN_SWITCH_PROMPT] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 55, @@ -236,7 +247,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 4, .paletteNum = 5, .baseBlock = 0x2b0 - }, { + }, + [B_WIN_LEVEL_UP_BOX] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 8, @@ -244,7 +256,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 11, .paletteNum = 5, .baseBlock = 0x100 - }, { + }, + [B_WIN_LEVEL_UP_BANNER] = { .bg = 2, .tilemapLeft = 18, .tilemapTop = 0, @@ -252,7 +265,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 3, .paletteNum = 6, .baseBlock = 0x16e - }, { + }, + [B_WIN_YESNO] = { .bg = 0, .tilemapLeft = 25, .tilemapTop = 9, @@ -260,7 +274,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 4, .paletteNum = 5, .baseBlock = 0x100 - }, { + }, + [B_WIN_VS_PLAYER] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 3, @@ -268,7 +283,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x020 - }, { + }, + [B_WIN_VS_OPPONENT] = { .bg = 2, .tilemapLeft = 2, .tilemapTop = 3, @@ -276,7 +292,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x040 - }, { + }, + [B_WIN_VS_MULTI_PLAYER_1] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 2, @@ -284,7 +301,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x020 - }, { + }, + [B_WIN_VS_MULTI_PLAYER_2] = { .bg = 2, .tilemapLeft = 2, .tilemapTop = 2, @@ -292,7 +310,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x040 - }, { + }, + [B_WIN_VS_MULTI_PLAYER_3] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 6, @@ -300,7 +319,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x060 - }, { + }, + [B_WIN_VS_MULTI_PLAYER_4] = { .bg = 2, .tilemapLeft = 2, .tilemapTop = 6, @@ -308,7 +328,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 5, .baseBlock = 0x080 - }, { + }, + [B_WIN_VS_OUTCOME_DRAW] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 2, @@ -316,7 +337,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 0, .baseBlock = 0x0a0 - }, { + }, + [B_WIN_VS_OUTCOME_LEFT] = { .bg = 0, .tilemapLeft = 4, .tilemapTop = 2, @@ -324,7 +346,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 0, .baseBlock = 0x0a0 - }, { + }, + [B_WIN_VS_OUTCOME_RIGHT] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -332,7 +355,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 2, .paletteNum = 0, .baseBlock = 0x0b0 - }, { + }, + [B_WIN_OAK_OLD_MAN] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -340,7 +364,8 @@ static const struct WindowTemplate gUnknown_8248330[] = { .height = 4, .paletteNum = 7, .baseBlock = 0x090 - }, DUMMY_WIN_TEMPLATE + }, + DUMMY_WIN_TEMPLATE }; static const u32 sBattleTerrainPalette_Grass[] = INCBIN_U32("graphics/battle_terrain/grass/terrain.gbapal.lz"); @@ -649,7 +674,7 @@ void BattleInitBgsAndWindows(void) { ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gBattleBgTemplates, NELEMS(gBattleBgTemplates)); - InitWindows(gUnknown_8248330); + InitWindows(sStandardBattleWindowTemplates); DeactivateAllTextPrinters(); } From b3c47d0059c20fbdaf2f16c26971259e006e70e4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 7 Nov 2022 10:59:49 -0500 Subject: [PATCH 09/42] Finish syncing link_rfu_2 --- common_syms/link_rfu_2.txt | 2 +- include/gba/types.h | 3 + include/link.h | 3 +- include/link_rfu.h | 246 ++- include/mystery_gift_menu.h | 2 +- src/battle_controllers.c | 2 +- src/berry_crush.c | 6 +- src/link.c | 28 +- src/link_rfu_2.c | 2148 ++++++++++---------- src/link_rfu_3.c | 84 +- src/main.c | 2 +- src/mystery_gift_menu.c | 6 +- src/overworld.c | 2 +- src/party_menu.c | 4 +- src/pokemon_jump.c | 2 +- src/rfu_union_tool.c | 8 +- src/trade.c | 8 +- src/union_room.c | 204 +- src/union_room_chat.c | 30 +- src/wireless_communication_status_screen.c | 2 +- 20 files changed, 1437 insertions(+), 1355 deletions(-) diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt index abd9a5f93..3a84c23bf 100644 --- a/common_syms/link_rfu_2.txt +++ b/common_syms/link_rfu_2.txt @@ -1,3 +1,3 @@ gHostRfuGameData -Rfu +gRfu gHostRfuUsername diff --git a/include/gba/types.h b/include/gba/types.h index 7163f925f..35d02e263 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -27,6 +27,9 @@ typedef double f64; typedef u8 bool8; typedef u16 bool16; typedef u32 bool32; +typedef vu8 vbool8; +typedef vu16 vbool16; +typedef vu32 vbool32; struct BgCnt { diff --git a/include/link.h b/include/link.h index 74a94920c..1ac0913a2 100644 --- a/include/link.h +++ b/include/link.h @@ -250,7 +250,7 @@ void SetSuppressLinkErrorMessage(bool8); bool8 HasLinkErrorOccurred(void); void ResetSerial(void); u32 LinkMain1(u8 *, u16 *, u16[MAX_RFU_PLAYERS][CMD_LENGTH]); -void RFUVSync(void); +void RfuVSync(void); void Timer3Intr(void); void SerialCB(void); u8 GetLinkPlayerCount(void); @@ -258,7 +258,6 @@ bool32 InUnionRoom(void); void SetLinkStandbyCallback(void); void SetWirelessCommType1(void); -void LinkRfu_DestroyIdleTask(void); void SetCloseLinkCallback(void); void OpenLink(void); bool8 IsLinkMaster(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index e22414786..f203d30a3 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -6,33 +6,29 @@ #include "link.h" #include "AgbRfu_LinkManager.h" -#define RFUCMD_MASK 0xFF00 +#define RFUCMD_MASK 0xFF00 -#define RFUCMD_SEND_PACKET 0x2F00 -#define RFUCMD_READY_CLOSE_LINK 0x5f00 -#define RFUCMD_READY_EXIT_STANDBY 0x6600 -#define RFUCMD_PLAYERS_LIST 0x7700 -#define RFUCMD_PLAYERS_LIST_2 0x7800 -#define RFUCMD_SEND_BLOCK_INIT 0x8800 -#define RFUCMD_SEND_BLOCK_STEP 0x8900 -#define RFUCMD_SEND_BLOCK_REQ 0xa100 -#define RFUCMD_SEND_HELD_KEYS 0xbe00 -#define RFUCMD_PARENT_DISCONNECT 0xed00 -#define RFUCMD_CHILD_DISCONNECT 0xee00 +#define RFUCMD_SEND_PACKET 0x2F00 +#define RFUCMD_BLENDER_SEND_KEYS 0x4400 +#define RFUCMD_READY_CLOSE_LINK 0x5F00 +#define RFUCMD_READY_EXIT_STANDBY 0x6600 +#define RFUCMD_SEND_PLAYER_IDS 0x7700 +#define RFUCMD_SEND_PLAYER_IDS_NEW 0x7800 +#define RFUCMD_SEND_BLOCK_INIT 0x8800 +#define RFUCMD_SEND_BLOCK 0x8900 +#define RFUCMD_SEND_BLOCK_REQ 0xA100 +#define RFUCMD_SEND_HELD_KEYS 0xBE00 +#define RFUCMD_DISCONNECT 0xED00 +#define RFUCMD_DISCONNECT_PARENT 0xEE00 -#define RFU_PACKET_SIZE 6 - -#define RFU_SERIAL_7F7D 0x7F7D +#define RFU_SERIAL_GAME 0x0002 // Serial number for Pokémon game (FRLG or Emerald) +#define RFU_SERIAL_WONDER_DISTRIBUTOR 0x7F7D // Serial number for distributing Wonder Cards / News +#define RFU_SERIAL_END 0xFFFF +#define COMM_SLOT_LENGTH 14 #define RECV_QUEUE_NUM_SLOTS 20 -#define RECV_QUEUE_SLOT_LENGTH (14 * MAX_RFU_PLAYERS) - #define SEND_QUEUE_NUM_SLOTS 40 -#define SEND_QUEUE_SLOT_LENGTH 14 - #define BACKUP_QUEUE_NUM_SLOTS 2 -#define BACKUP_QUEUE_SLOT_LENGTH 14 - #define UNUSED_QUEUE_NUM_SLOTS 2 #define UNUSED_QUEUE_SLOT_LENGTH 256 @@ -48,13 +44,40 @@ #define RFU_STATUS_WAIT_ACK_JOIN_GROUP 7 #define RFU_STATUS_LEAVE_GROUP_NOTICE 8 #define RFU_STATUS_LEAVE_GROUP 9 -#define RFU_STATUS_10 10 -#define RFU_STATUS_11 11 +#define RFU_STATUS_CHILD_LEAVE_READY 10 +#define RFU_STATUS_CHILD_LEAVE 11 #define RFU_STATUS_ACK_JOIN_GROUP 12 -#define RFU_RECV_IDLE 0 -#define RFU_RECV_RECEIVING 1 -#define RFU_RECV_FINISHED 2 +// Values for disconnectMode +enum { + RFU_DISCONNECT_NONE, + RFU_DISCONNECT_ERROR, + RFU_DISCONNECT_NORMAL, +}; + +// Values for errorState +enum { + RFU_ERROR_STATE_NONE, + RFU_ERROR_STATE_OCCURRED, + RFU_ERROR_STATE_PROCESSED, + RFU_ERROR_STATE_DISCONNECTING, + RFU_ERROR_STATE_IGNORE, +}; + +// These error flags are set in errorInfo, and given as +// the uppermost 16 bits of 'status' for sLinkErrorBuffer. +// The first 8 bits are reserved for the link manager msg +// when the error occurred, and the last 8 bits are this +// sequence of presumably meaningful error flags, but +// ultimately sLinkErrorBuffer's status is never read. +#define F_RFU_ERROR_1 (1 << 8) +#define F_RFU_ERROR_2 (1 << 9) // Never set +#define F_RFU_ERROR_3 (1 << 10) // Never set +#define F_RFU_ERROR_4 (1 << 11) // Never set +#define F_RFU_ERROR_5 (1 << 12) +#define F_RFU_ERROR_6 (1 << 13) +#define F_RFU_ERROR_7 (1 << 14) +#define F_RFU_ERROR_8 (1 << 15) // RfuTgtData.gname is read as these structs. struct RfuGameCompatibilityData @@ -62,36 +85,47 @@ struct RfuGameCompatibilityData u16 language:4; u16 hasNews:1; u16 hasCard:1; - u16 unknown:1; + u16 unknown:1; // Never read u16 isChampion:1; u16 hasNationalDex:1; u16 gameClear:1; u16 version:4; - u16 unk_01_6:2; + u16 unused:2; u8 playerTrainerId[2]; }; +// This struct is sent via the Wireless Adapter as the game name or "gname" data. +// Gname is only applicable during Wireless Single Game Pak Multiplay, when the +// adapter needs this data for connection. Per the RFU manual, during "normal" +// wireless play (the kind the Pokémon games use) the gname data can be used for +// anything the developers want. This struct is what GF decided to use it for. +// It can be up to 13 bytes in size (RFU_GAME_NAME_LENGTH). +// The player's name is sent separately as the username ("uname"), and does not +// use a struct (gHostRfuUsername). struct __attribute__((packed, aligned(2))) RfuGameData { - struct RfuGameCompatibilityData unk_00; - u8 child_sprite_gender[RFU_CHILD_MAX]; // u8 sprite_idx:3; - // u8 gender:1; - // u8 unk_4:3 - // u8 active:1 - u16 species:10; - u16 type:6; + struct RfuGameCompatibilityData compatibility; + u8 partnerInfo[RFU_CHILD_MAX]; + u16 tradeSpecies:10; + u16 tradeType:6; u8 activity:7; - u8 started:1; + u8 startedActivity:1; u8 playerGender:1; - u8 level:7; + u8 tradeLevel:7; u8 padding; -}; // size: RFU_GNAME_SIZE - -struct Padded_U8 -{ - u8 value; }; +// Constants for getting/setting information in 'partnerInfo' of RfuGameData. +// This data is used to determine what the link partners look like from +// the host's perspective. +// Bits 0-2 are a shortened trainerId +// Bit 3 is the player's gender +// Bits 4-6 are unknown/unused +// Bit 7 is an 'active' flag +#define PINFO_TID_MASK 0x7 +#define PINFO_GENDER_SHIFT 3 +#define PINFO_ACTIVE_FLAG (1 << 7) + struct RfuBlockSend { /* 0x00 */ u16 next; @@ -106,7 +140,7 @@ struct RfuBlockSend struct RfuRecvQueue { - /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH]; + /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH * MAX_RFU_PLAYERS]; /* 0x578 */ vu8 recv_slot; /* 0x579 */ vu8 send_slot; /* 0x57a */ vu8 count; @@ -115,7 +149,7 @@ struct RfuRecvQueue struct RfuSendQueue { - /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH]; + /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH]; /* 0x230 */ vu8 recv_slot; /* 0x231 */ vu8 send_slot; /* 0x232 */ vu8 count; @@ -124,7 +158,7 @@ struct RfuSendQueue struct RfuBackupQueue { - /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH]; + /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH]; /* 0x1c */ vu8 recv_slot; /* 0x1d */ vu8 send_slot; /* 0x1e */ vu8 count; @@ -141,24 +175,24 @@ struct RfuUnusedQueue struct RfuManager { - /* 0x000 */ void (*RfuFunc)(void); + /* 0x000 */ void (*callback)(void); /* 0x004 */ u16 state; - /* 0x006 */ u8 filler_06[4]; - /* 0x00a */ u16 linkman_msg; - /* 0x00c */ u8 parent_child; + /* 0x006 */ u8 unused1[4]; + /* 0x00a */ u16 errorInfo; + /* 0x00c */ u8 parentChild; /* 0x00d */ u8 playerCount; - /* 0x00e */ u8 unk_0e; - /* 0x00f */ u8 unk_0f; - /* 0x010 */ u16 linkman_param[2]; - /* 0x014 */ u8 main_UNI_recvBuffer[RFU_CHILD_MAX][14]; - /* 0x04c */ u8 lastCmdBeforeCommInterrupt[14]; - /* 0x05a */ u8 cmdA100_blockRequestType; + /* 0x00e */ bool8 runParentMain2; + /* 0x00f */ u8 unused2; + /* 0x010 */ u16 errorParams[2]; + /* 0x014 */ u8 childRecvBuffer[RFU_CHILD_MAX][COMM_SLOT_LENGTH]; + /* 0x04c */ u8 childSendBuffer[COMM_SLOT_LENGTH]; + /* 0x05a */ u8 blockRequestType; /* 0x05b */ u8 sendBlockInitDelay; /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS]; /* 0x061 */ u8 numBlocksReceived[MAX_RFU_PLAYERS]; /* 0x066 */ u8 idleTaskId; /* 0x067 */ u8 searchTaskId; - /* 0x068 */ u8 filler_68[4]; + /* 0x068 */ u8 unused3[4]; /* 0x06c */ struct RfuBlockSend sendBlock; /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS]; /* 0x0e4 */ bool8 readyCloseLink[MAX_RFU_PLAYERS]; @@ -170,45 +204,45 @@ struct RfuManager /* 0x0f2 */ u16 packet[RFU_PACKET_SIZE]; /* 0x0fe */ u16 resendExitStandbyTimer; /* 0x100 */ u16 resendExitStandbyCount; - /* 0x102 */ u8 unk_102; - /* 0x104 */ struct RfuTgtData tgtData; + /* 0x102 */ u8 childSendCmdId; + /* 0x104 */ struct RfuTgtData parent; /* 0x124 */ struct RfuRecvQueue recvQueue; /* 0x6a0 */ struct RfuSendQueue sendQueue; /* 0x8d4 */ struct RfuBackupQueue backupQueue; /* 0x8f4 */ vu8 linkRecovered; - /* 0x8f5 */ u8 reconnectedParentIdx; - /* 0x8f6 */ vu8 child_slot; - /* 0x8f7 */ u8 unk_c3f[70]; + /* 0x8f5 */ u8 reconnectParentId; + /* 0x8f6 */ vu8 childSlot; + /* 0x8f7 */ u8 childRecvQueue[COMM_SLOT_LENGTH * MAX_RFU_PLAYERS]; /* 0x93d */ u8 sendStatus; /* 0x93e */ u8 recvStatus; - /* 0x93f */ u8 recvCmds[MAX_RFU_PLAYERS][7][2]; + /* 0x93f */ u8 recvCmds[MAX_RFU_PLAYERS][CMD_LENGTH - 1][2]; /* 0x985 */ u8 parentId; /* 0x986 */ u8 multiplayerId; // childId - /* 0x987 */ u8 unk_ccf; - /* 0x988 */ vu8 sem_UNI_SendRecv; + /* 0x987 */ u8 connectParentFailures; + /* 0x988 */ vu8 childSendCount; /* 0x989 */ u8 partnerSendStatuses[RFU_CHILD_MAX]; /* 0x98d */ u8 partnerRecvStatuses[RFU_CHILD_MAX]; - /* 0x991 */ u8 linkClosing; - /* 0x992 */ u8 unk_cda; - /* 0x993 */ volatile bool8 unk_cdb; - /* 0x994 */ volatile bool8 unk_cdc; - /* 0x995 */ u8 unk_cdd; + /* 0x991 */ bool8 stopNewConnections; + /* 0x992 */ u8 parentSendSlot; + /* 0x993 */ vbool8 parentFinished; + /* 0x994 */ vbool8 parentMain2Failed; + /* 0x995 */ u8 unused5; /* 0x996 */ u8 linkPlayerIdx[RFU_CHILD_MAX]; - /* 0x99a */ u8 bm_PartnerFlags; - /* 0x99b */ u8 bm_DisconnectSlot; - /* 0x99c */ u8 unk_ce4; - /* 0x99d */ u8 bmChatLeaderMaybe; - /* 0x99e */ u8 unionRoomChatters; + /* 0x99a */ u8 parentSlots; + /* 0x99b */ u8 disconnectSlots; + /* 0x99c */ u8 disconnectMode; + /* 0x99d */ u8 nextChildBits; + /* 0x99e */ u8 newChildQueue; /* 0x99f */ u8 acceptSlot_flag; - /* 0x9a0 */ bool8 foundNewLeaderMaybe; - /* 0x9a1 */ u8 unk_ce9; - /* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX]; - /* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX]; + /* 0x9a0 */ bool8 playerExchangeActive; + /* 0x9a1 */ u8 incomingChild; + /* 0x9a2 */ u8 numChildRecvErrors[RFU_CHILD_MAX]; + /* 0x9a6 */ u8 childRecvIds[RFU_CHILD_MAX]; }; // size: 0x9AC extern struct RfuGameData gHostRfuGameData; extern u8 gHostRfuUsername[]; -extern struct RfuManager Rfu; +extern struct RfuManager gRfu; // GameFreak signatures void AddTextPrinterToWindow1(const u8 *str); @@ -223,14 +257,14 @@ void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); void MEvent_CreateTask_Leader(u32 arg0); void Rfu_SendPacket(void *data); u8 CreateTask_ListenToWireless(void); -void LinkRfu_DestroyIdleTask(void); +void DestroyTask_RfuIdle(void); void InitRFUAPI(void); -void sub_80FB128(bool32 a0); +void RfuSetIgnoreError(bool32 enable); bool32 IsSendingKeysToRfu(void); void ClearLinkRfuCallback(void); -u8 GetRfuPlayerCount(void); +u8 Rfu_GetLinkPlayerCount(void); void StartSendingKeysToRfu(void); -u8 LinkRfu_GetMultiplayerId(void); +u8 Rfu_GetMultiplayerId(void); bool32 Rfu_InitBlockSend(const u8 * src, size_t size); bool8 Rfu_SendBlockRequest(u8 blockRequestType); u8 Rfu_GetBlockReceivedStatus(void); @@ -238,15 +272,15 @@ void Rfu_SetBlockReceivedFlag(u8 linkPlayerId); void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId); bool8 Rfu_IsMaster(void); void ResetLinkRfuGFLayer(void); -bool32 LinkRfuMain1(void); -bool32 LinkRfuMain2(void); +bool32 RfuMain1(void); +bool32 RfuMain2(void); bool32 IsRfuRecvQueueEmpty(void); u32 GetRfuRecvQueueLength(void); void LinkRfu_Shutdown(void); -void LinkRfu_CreateIdleTask(void); -bool8 ToggleLMANlinkRecovery(bool32 enable); +void CreateTask_RfuIdle(void); +bool8 Rfu_SetLinkRecovery(bool32 enable); void var_800D_set_xB(void); -struct RfuGameData *GetHostRFUtgtGname(void); +struct RfuGameData *GetHostRfuGameData(void); void UpdateWirelessStatusIndicatorSprite(void); void InitRFU(void); bool32 RfuHasErrored(void); @@ -262,44 +296,44 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *dest); void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *dest); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue * queue, u8 *dest); void RfuSendQueue_Enqueue(struct RfuSendQueue * queue, u8 *src); -void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 started, s32 child_sprite_genders); +void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 started, s32 partnerInfo); void UpdateGameData_GroupLockedIn(bool8 started); bool32 IsRfuSerialNumberValid(u32 serialNo); bool8 IsRfuRecoveringFromLinkLoss(void); bool8 LmanAcceptSlotFlagIsNotZero(void); void LinkRfu_StopManagerAndFinalizeSlots(void); -bool32 sub_80FA5D4(void); -bool32 sub_80FC1CC(void); +bool32 RfuTryDisconnectLeavingChildren(void); +bool32 IsRfuCommunicatingWithAllChildren(void); bool32 WaitRfuState(bool32 a0); -bool32 CheckTrainerHasLeftByIdAndName(u16 trainerId, const u8 *trainerName); -void SendByteToPartnerByIdAndName(u8 a0, u16 a1, const u8 *a2); -u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1); -void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 a2); +bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *trainerName); +void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name); +u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name); +void SetHostRfuGameData(u8 activity, u32 partnerInfo, bool32 startedActivity); void InitializeRfuLinkManager_LinkLeader(u32 availSlots); void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId); void LinkRfu3_SetGnameUnameFromStaticBuffers(struct RfuGameData *gname, u8 *uname); void InitializeRfuLinkManager_JoinGroup(void); void SendLeaveGroupNotice(void); void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId); -void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started); +void UpdateGameData_SetActivity(u8 activity, u32 partnerInfo, u32 startedActivity); void RecordMixTrainerNames(void); void LinkRfu_CreateConnectionAsParent(); void LinkRfu_StopManagerBeforeEnteringChat(); -void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard); -void ClearAndInitHostRFUtgtGname(void); -void sub_80F8FA0(void); -void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level); +void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard); +void ResetHostRfuGameData(void); +void StopUnionRoomLinkManager(void); +void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level); bool32 IsUnionRoomListenTaskActive(void); void InitializeRfuLinkManager_EnterUnionRoom(void); -void sub_80FBD6C(u32 a0); -void sub_80FC114(const u8 *name, struct RfuGameData *structPtr, u8 a2); +void Rfu_DisconnectPlayerById(u32 playerIdx); +void TryConnectToUnionRoomParent(const u8 *name, struct RfuGameData *parent, u8 activity); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx); bool8 LinkRfu_GetNameIfSerial7F7D(struct RfuGameData *gname, u8 *uname, u8 idx); -bool32 RfuHasFoundNewLeader(void); -void Rfu_UnionRoomChat_StopLinkManager(void); -void sub_80FB9D0(void); -void sub_80FB030(u32 a0); +bool32 Rfu_IsPlayerExchangeActive(void); +void Rfu_StopPartnerSearch(void); +void RfuSetNormalDisconnectMode(void); +void SetUnionRoomChatPlayerData(u32 numPlayers); void ClearRecvCommands(void); #include "mevent_server.h" diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h index bd790b36e..a25cc598f 100644 --- a/include/mystery_gift_menu.h +++ b/include/mystery_gift_menu.h @@ -6,7 +6,7 @@ extern bool8 gGiftIsFromEReader; void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32); void c2_mystery_gift(void); -void c2_mystery_gift_e_reader_run(void); +void CB2_MysteryGiftEReader(void); s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str); void MG_DrawTextBorder(u8 windowId); u16 GetMysteryGiftBaseBlock(void); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index ba56b0db1..e877a1c08 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -519,7 +519,7 @@ void TryReceiveLinkBattleData(void) if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211)) { - LinkRfu_DestroyIdleTask(); + DestroyTask_RfuIdle(); for (i = 0; i < GetLinkPlayerCount(); i++) { if (GetBlockReceivedStatus() & gBitTable[i]) diff --git a/src/berry_crush.c b/src/berry_crush.c index d116a112f..ec58ece26 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -969,9 +969,9 @@ static u32 QuitBerryCrush(MainCallback callback) #define ERROR_EXIT(exitCallback) \ { \ SetMainCallback2(exitCallback); \ - Rfu.linkman_param[0] = 0; \ - Rfu.linkman_param[1] = 0; \ - Rfu.errorState = 1; \ + gRfu.errorParams[0] = 0; \ + gRfu.errorParams[1] = 0; \ + gRfu.errorState = 1; \ } diff --git a/src/link.c b/src/link.c index 6473de242..e60ebed00 100644 --- a/src/link.c +++ b/src/link.c @@ -227,7 +227,7 @@ bool8 IsWirelessAdapterConnected(void) SetWirelessCommType1(); InitRFUAPI(); - sub_80FB128(TRUE); + RfuSetIgnoreError(TRUE); if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) { rfu_REQ_stopMode(); @@ -748,21 +748,16 @@ void ClearLinkCallback(void) void ClearLinkCallback_2(void) { if (gWirelessCommType) - { ClearLinkRfuCallback(); - } else - { gLinkCallback = NULL; - } } u8 GetLinkPlayerCount(void) { if (gWirelessCommType) - { - return GetRfuPlayerCount(); - } + return Rfu_GetLinkPlayerCount(); + return EXTRACT_PLAYER_COUNT(gLinkStatus); } @@ -977,7 +972,7 @@ u8 GetMultiplayerId(void) { if (gWirelessCommType == 1) { - return LinkRfu_GetMultiplayerId(); + return Rfu_GetMultiplayerId(); } return SIO_MULTI_CNT->id; } @@ -1647,10 +1642,11 @@ void LinkPlayerFromBlock(u32 who) } } +// When this function returns TRUE the callbacks are skipped bool8 HandleLinkConnection(void) { - bool32 r4; - bool32 r5; + bool32 main1Failed; + bool32 main2Failed; if (gWirelessCommType == 0) { @@ -1663,14 +1659,14 @@ bool8 HandleLinkConnection(void) } else { - r4 = LinkRfuMain1(); - r5 = LinkRfuMain2(); + main1Failed = RfuMain1(); // Always returns FALSE + main2Failed = RfuMain2(); if (IsSendingKeysOverCable() == TRUE) { - if (r4 == TRUE || IsRfuRecvQueueEmpty() || r5) - { + // This will never be reached. + // IsSendingKeysOverCable is always FALSE for wireless communication + if (main1Failed == TRUE || IsRfuRecvQueueEmpty() || main2Failed) return TRUE; - } } } return FALSE; diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 649836276..9257f04b1 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -11,6 +11,40 @@ #include "task.h" #include "constants/union_room.h" +enum { + RFUSTATE_INIT, + RFUSTATE_INIT_END, + RFUSTATE_PARENT_CONNECT, + RFUSTATE_PARENT_CONNECT_END, + RFUSTATE_STOP_MANAGER, + RFUSTATE_STOP_MANAGER_END, + RFUSTATE_CHILD_CONNECT, + RFUSTATE_CHILD_CONNECT_END, + RFUSTATE_UNUSED, + RFUSTATE_RECONNECTED, + RFUSTATE_CONNECTED, + RFUSTATE_CHILD_TRY_JOIN, + RFUSTATE_CHILD_JOINED, + RFUSTATE_UR_PLAYER_EXCHANGE, + RFUSTATE_UR_STOP_MANAGER, + RFUSTATE_UR_STOP_MANAGER_END, + RFUSTATE_UR_FINALIZE, +}; +// These states are used for different purposes +// depending on the link mode (parent, child, union room) +#define RFUSTATE_PARENT_FINALIZE_START 17 +#define RFUSTATE_PARENT_FINALIZE 18 +#define RFUSTATE_UR_CONNECT 17 +#define RFUSTATE_UR_CONNECT_END 18 +#define RFUSTATE_FINALIZED 20 + +// States for the 'receiving' field of RfuBlockSend +enum { + RECV_STATE_READY, + RECV_STATE_RECEIVING, + RECV_STATE_FINISHED, +}; + struct SioInfo { char magic[sizeof("PokemonSioInfo")]; @@ -42,13 +76,13 @@ static u8 sResendBlock8[CMD_LENGTH * 2]; static u16 sResendBlock16[CMD_LENGTH]; struct RfuGameData gHostRfuGameData; -struct RfuManager Rfu; +struct RfuManager gRfu; u8 gHostRfuUsername[PLAYER_NAME_LENGTH + 1]; -static void sub_80F8AA4(void); -static void sub_80F8AEC(void); -static void MscCallback_Child(u16 a0); -static void MSCCallback_SetUnkCDB(u16 a0); +static void InitChildRecvBuffers(void); +static void InitParentSendData(void); +static void MscCallback_Child(u16 REQ_commandID); +static void MSCCallback_Parent(u16 REQ_commandID); static void UpdateBackupQueue(void); static void RfuHandleReceiveCommand(u8 unused); static void ResetSendDataManager(struct RfuBlockSend *data); @@ -58,28 +92,28 @@ static void SendNextBlock(void); static void SendLastBlock(void); static void CallRfuFunc(void); static void UpdateChildStatuses(void); -static s32 GetRfuRecvStatus(void); -static void sub_80FA834(u8 taskId); +static s32 GetJoinGroupStatus(void); +static void Task_PlayerExchange(u8 taskId); static void ClearSelectedLinkPlayerIds(u16 disconnectMask); -static void ValidateAndReceivePokemonSioInfo(void *a0); -static void Task_ExchangeLinkPlayers(u8 taskId); -static void sub_80FACF0(u8 taskId); -static void GetLinkmanErrorParams(u32 msg); -static void sub_80FB564(s32 bmConnectedFlag); -static void sub_80FBB74(void); +static void ValidateAndReceivePokemonSioInfo(void *recvBuffer); +static void Task_PlayerExchangeUpdate(u8 taskId); +static void Task_PlayerExchangeChat(u8 taskId); +static void RfuSetErrorParams(u32 errorInfo); +static void ParentResetChildRecvMetadata(s32 slot); +static void CB2_RfuIdle(void); static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId); static void RfuReqDisconnectSlot(u32 bmDisconnectSlot); -static void sub_80FBE20(u32 a0, u32 a1); -static void sub_80FC028(u8 taskId); +static void SendDisconnectCommand(u32 playersToDisconnect, u32 disconnectMode); +static void Task_TryConnectToUnionRoomParent(u8 taskId); static void Debug_PrintEmpty(void); -static void Task_idle(u8 taskId); +static void Task_Idle(u8 taskId); static const INIT_PARAM sRfuReqConfigTemplate = { .maxMFrame = 4, .MC_TimerCount = 32, .availSlot_flag = 0, .mboot_flag = 0, - .serialNo = 0x0002, + .serialNo = RFU_SERIAL_GAME, .gameName = (void *)&gHostRfuGameData, .userName = gHostRfuUsername, .fastSearchParent_flag = TRUE, @@ -95,76 +129,82 @@ static const u8 sAvailSlots[] = { [4] = AVAIL_SLOT4 }; +#define BLOCK_MASK(bitNum)((1 << (bitNum)) - 1) static const u32 sAllBlocksReceived[] = { - 0x000000, - 0x000001, - 0x000003, - 0x000007, - 0x00000f, - 0x00001f, - 0x00003f, - 0x00007f, - 0x0000ff, - 0x0001ff, - 0x0003ff, - 0x0007ff, - 0x000fff, - 0x001fff, - 0x003fff, - 0x007fff, - 0x00ffff, - 0x01ffff, - 0x03ffff, - 0x07ffff, - 0x0fffff, - 0x1fffff, - 0x3fffff, - 0x7fffff, - 0xffffff + BLOCK_MASK(0), + BLOCK_MASK(1), + BLOCK_MASK(2), + BLOCK_MASK(3), + BLOCK_MASK(4), + BLOCK_MASK(5), + BLOCK_MASK(6), + BLOCK_MASK(7), + BLOCK_MASK(8), + BLOCK_MASK(9), + BLOCK_MASK(10), + BLOCK_MASK(11), + BLOCK_MASK(12), + BLOCK_MASK(13), + BLOCK_MASK(14), + BLOCK_MASK(15), + BLOCK_MASK(16), + BLOCK_MASK(17), + BLOCK_MASK(18), + BLOCK_MASK(19), + BLOCK_MASK(20), + BLOCK_MASK(21), + BLOCK_MASK(22), + BLOCK_MASK(23), + BLOCK_MASK(24), }; +#undef BLOCK_MASK -static const u8 gUnknown_843EC38[] = { +static const u8 sSlotToLinkPlayerTableId[] = { 0, 0, 1, 1, 2, 2, 2, 2, 3 }; -static const u8 sNumSetBits[] = { - [0x0] = 0, - [0x1] = 1, - [0x2] = 1, - [0x3] = 2, - [0x4] = 1, - [0x5] = 2, - [0x6] = 2, - [0x7] = 3, - [0x8] = 1, - [0x9] = 2, - [0xA] = 2, - [0xB] = 3, - [0xC] = 2, - [0xD] = 3, - [0xE] = 3, - [0xF] = 4 +// Effectively just returns the number of bits set in the index value +// Used for masks of the other players, MAX_RFU_PLAYERS - 1 excludes self +static const u8 sPlayerBitsToCount[1 << (MAX_RFU_PLAYERS - 1)] = { + 0, // 0000 + 1, // 0001 + 1, // 0010 + 2, // 0011 + 1, // 0100 + 2, // 0101 + 2, // 0110 + 3, // 0111 + 1, // 1000 + 2, // 1001 + 2, // 1010 + 3, // 1011 + 2, // 1100 + 3, // 1101 + 3, // 1110 + 4 // 1111 }; -static const u8 sNumTrailingZeroes[] = { - [0x0] = 0, - [0x1] = 0, - [0x2] = 1, - [0x3] = 0, - [0x4] = 2, - [0x5] = 0, - [0x6] = 1, - [0x7] = 0, - [0x8] = 3, - [0x9] = 0, - [0xA] = 1, - [0xB] = 0, - [0xC] = 2, - [0xD] = 0, - [0xE] = 1, - [0xF] = 0 +// If the 4 bits representing child slots were an array, this table +// would return the index of the most recently set bit +static const u8 sPlayerBitsToNewChildIdx[1 << (MAX_RFU_PLAYERS - 1)] = { + 0, // 0000 + 0, // 0001 + 1, // 0010 + 0, // 0011 + 2, // 0100 + 0, // 0101 + 1, // 0110 + 0, // 0111 + 3, // 1000 + 0, // 1001 + 1, // 1010 + 0, // 1011 + 2, // 1100 + 0, // 1101 + 1, // 1110 + 0 // 1111 }; static const struct BlockRequest sBlockRequests[] = { @@ -176,12 +216,12 @@ static const struct BlockRequest sBlockRequests[] = { }; static const u16 sAcceptedSerialNos[] = { - 0x0002, // Pokemon FR/LG/EM - RFU_SERIAL_7F7D, - 0xFFFF + RFU_SERIAL_GAME, + RFU_SERIAL_WONDER_DISTRIBUTOR, + RFU_SERIAL_END }; -static const char sUnref_843EC92[][15] = { +static const char sASCII_RfuCmds[][15] = { "RFU WAIT", "RFU BOOT", "RFU ERROR", @@ -195,7 +235,7 @@ static const char sUnref_843EC92[][15] = { "RFU CP POLL" }; -static const char sUnref_843ED37[][16] = { +static const char sASCII_RecoverCmds[][16] = { " ", "RECOVER START ", "DISSCONECT ", @@ -203,18 +243,19 @@ static const char sUnref_843ED37[][16] = { "RECOVER FAILED" }; -static const TaskFunc gUnknown_843ED88[] = { - sub_80FA834, - Task_ExchangeLinkPlayers, - sub_80FACF0 +// List of additional tasks to destroy (if active) when the RFU shuts down +static const TaskFunc sShutdownTasks[] = { + Task_PlayerExchange, + Task_PlayerExchangeUpdate, + Task_PlayerExchangeChat }; static void Debug_PrintString(const void *string, u8 x, u8 y) { - // debug? + } -static void Debug_PrintNum(u16 num, u8 x, u8 y, u8 ndigits) +static void Debug_PrintNum(u16 num, u8 x, u8 y, u8 numDigits) { } @@ -222,21 +263,17 @@ static void Debug_PrintNum(u16 num, u8 x, u8 y, u8 ndigits) void ResetLinkRfuGFLayer(void) { s32 i; - u8 errorState_bak = Rfu.errorState; - CpuFill16(0, &Rfu, sizeof Rfu); - Rfu.parent_child = MODE_NEUTRAL; - Rfu.errorState = errorState_bak; - if (Rfu.errorState != 4) - { - Rfu.errorState = 0; - } + u8 errorState = gRfu.errorState; + CpuFill16(0, &gRfu, sizeof gRfu); + gRfu.parentChild = MODE_NEUTRAL; + gRfu.errorState = errorState; + if (gRfu.errorState != RFU_ERROR_STATE_IGNORE) + gRfu.errorState = RFU_ERROR_STATE_NONE; for (i = 0; i < MAX_RFU_PLAYERS; i++) - { - ResetSendDataManager(&Rfu.recvBlock[i]); - } - ResetSendDataManager(&Rfu.sendBlock); - RfuRecvQueue_Reset(&Rfu.recvQueue); - RfuSendQueue_Reset(&Rfu.sendQueue); + ResetSendDataManager(&gRfu.recvBlock[i]); + ResetSendDataManager(&gRfu.sendBlock); + RfuRecvQueue_Reset(&gRfu.recvQueue); + RfuSendQueue_Reset(&gRfu.sendQueue); CpuFill16(0, gSendCmd, sizeof gSendCmd); CpuFill16(0, gRecvCmds, sizeof gRecvCmds); CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers); @@ -257,149 +294,145 @@ void InitRFU(void) void InitRFUAPI(void) { - if (!rfu_initializeAPI(sRfuAPIBuffer, RFU_API_BUFF_SIZE_RAM, gIntrTable + 1, TRUE)) + if (!rfu_initializeAPI(sRfuAPIBuffer, RFU_API_BUFF_SIZE_RAM, &gIntrTable[1], TRUE)) { gLinkType = 0; // ClearSavedLinkPlayers(); // Em fix - sub_80FB128(FALSE); + RfuSetIgnoreError(FALSE); ResetLinkRfuGFLayer(); - rfu_setTimerInterrupt(3, gIntrTable + 2); + rfu_setTimerInterrupt(3, &gIntrTable[2]); } } -static void Task_LinkLeaderSearchForChildren(u8 taskId) +static void Task_ParentSearchForChildren(u8 taskId) { UpdateChildStatuses(); - switch (Rfu.state) + switch (gRfu.state) { - case 0: + case RFUSTATE_INIT: rfu_LMAN_initializeRFU(&sRfuReqConfig); - Rfu.state = 1; + gRfu.state = RFUSTATE_INIT_END; gTasks[taskId].data[1] = 1; break; - case 1: + case RFUSTATE_INIT_END: break; - case 2: - rfu_LMAN_establishConnection(Rfu.parent_child, 0, 240, (u16 *)sAcceptedSerialNos); - Rfu.state = 3; + case RFUSTATE_PARENT_CONNECT: + rfu_LMAN_establishConnection(gRfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos); + gRfu.state = RFUSTATE_PARENT_CONNECT_END; gTasks[taskId].data[1] = 6; break; - case 3: + case RFUSTATE_PARENT_CONNECT_END: break; - case 4: + case RFUSTATE_STOP_MANAGER: rfu_LMAN_stopManager(FALSE); - Rfu.state = 5; + gRfu.state = RFUSTATE_STOP_MANAGER_END; break; - case 5: + case RFUSTATE_STOP_MANAGER_END: break; - case 18: - Rfu.unk_cdb = FALSE; - rfu_LMAN_setMSCCallback(MSCCallback_SetUnkCDB); - sub_80F8AA4(); - sub_80F8AEC(); - Rfu.state = 20; + case RFUSTATE_PARENT_FINALIZE: + gRfu.parentFinished = FALSE; + rfu_LMAN_setMSCCallback(MSCCallback_Parent); + InitChildRecvBuffers(); + InitParentSendData(); + gRfu.state = RFUSTATE_FINALIZED; gTasks[taskId].data[1] = 8; - CreateTask(sub_80FA834, 5); + CreateTask(Task_PlayerExchange, 5); DestroyTask(taskId); break; } } -static u8 CountTrailingZeroes(u8 acceptSlot) +static u8 Rfu_GetIndexOfNewestChild(u8 bits) { - return sNumTrailingZeroes[acceptSlot]; + return sPlayerBitsToNewChildIdx[bits]; } -static void ReassignPartnerIds(s32 before, s32 after) +static void SetLinkPlayerIdsFromSlots(s32 baseSlots, s32 addSlots) { u8 i; - u8 r4 = 1; - s32 beforeBak = before; - s32 r6 = 0; - if (after == -1) + u8 baseId = 1; + s32 baseSlotsCopy = baseSlots; + s32 newId = 0; + if (addSlots == -1) { - // First Time Init - // UB: linkPlayerIdx may be uninitialized - for (i = 0; i < RFU_CHILD_MAX; before >>= 1, i++) + // Initialize + for (i = 0; i < RFU_CHILD_MAX; baseSlots >>= 1, i++) { - if (before & 1) + if (baseSlots & 1) { - Rfu.linkPlayerIdx[i] = r4; - r4++; + gRfu.linkPlayerIdx[i] = baseId; + baseId++; } } } else { - // Delete before flags - for (i = 0; i < RFU_CHILD_MAX; beforeBak >>= 1, i++) + // Clear id for any empty slot + for (i = 0; i < RFU_CHILD_MAX; baseSlotsCopy >>= 1, i++) { - if (!(beforeBak & 1)) - { - Rfu.linkPlayerIdx[i] = 0; - } + if (!(baseSlotsCopy & 1)) + gRfu.linkPlayerIdx[i] = 0; } - // Get highest retained index - for (r4 = 4; r4 != 0; r4--) + + // Get starting id by checking existing slots + for (baseId = RFU_CHILD_MAX; baseId != 0; baseId--) { - for (i = 0; i < RFU_CHILD_MAX && Rfu.linkPlayerIdx[i] != r4; i++); - if (i == 4) - { - r6 = r4; - } + for (i = 0; i < RFU_CHILD_MAX && gRfu.linkPlayerIdx[i] != baseId; i++) + ; + if (i == RFU_CHILD_MAX) + newId = baseId; } - // Replace with new flags - for (after &= ~before, i = 0; i < RFU_CHILD_MAX; after >>= 1, i++) + + // Set id for new slots + for (addSlots &= ~baseSlots, i = 0; i < RFU_CHILD_MAX; addSlots >>= 1, i++) { - if (after & 1) - { - Rfu.linkPlayerIdx[i] = r6++; - } + if (addSlots & 1) + gRfu.linkPlayerIdx[i] = newId++; } } } -static void Task_JoinGroupSearchForParent(u8 taskId) +static void Task_ChildSearchForParent(u8 taskId) { - switch (Rfu.state) + switch (gRfu.state) { - case 0: + case RFUSTATE_INIT: rfu_LMAN_initializeRFU((INIT_PARAM*)&sRfuReqConfigTemplate); - Rfu.state = 1; + gRfu.state = RFUSTATE_INIT_END; gTasks[taskId].data[1] = 1; break; - case 1: + case RFUSTATE_INIT_END: break; - case 6: - rfu_LMAN_establishConnection(Rfu.parent_child, 0, 240, (u16 *)sAcceptedSerialNos); - Rfu.state = 7; + case RFUSTATE_CHILD_CONNECT: + rfu_LMAN_establishConnection(gRfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos); + gRfu.state = RFUSTATE_CHILD_CONNECT_END; gTasks[taskId].data[1] = 7; break; - case 7: + case RFUSTATE_CHILD_CONNECT_END: break; - case 9: + case RFUSTATE_RECONNECTED: gTasks[taskId].data[1] = 10; break; - case 11: - switch (GetRfuRecvStatus()) + case RFUSTATE_CHILD_TRY_JOIN: + switch (GetJoinGroupStatus()) { case RFU_STATUS_JOIN_GROUP_OK: - Rfu.state = 12; + gRfu.state = RFUSTATE_CHILD_JOINED; break; case RFU_STATUS_JOIN_GROUP_NO: case RFU_STATUS_LEAVE_GROUP: rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = 2; + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; DestroyTask(taskId); break; } break; - case 12: + case RFUSTATE_CHILD_JOINED: { - u8 bmChildSlot = 1 << Rfu.child_slot; - rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.child_slot); - rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); - rfu_UNI_setSendData(bmChildSlot, Rfu.lastCmdBeforeCommInterrupt, sizeof(Rfu.lastCmdBeforeCommInterrupt)); + u8 bmChildSlot = 1 << gRfu.childSlot; + rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, gRfu.childSlot); + rfu_setRecvBuffer(TYPE_UNI, gRfu.childSlot, gRfu.childRecvQueue, sizeof(gRfu.childRecvQueue)); + rfu_UNI_setSendData(bmChildSlot, gRfu.childSendBuffer, sizeof(gRfu.childSendBuffer)); gTasks[taskId].data[1] = 8; DestroyTask(taskId); if (!sRfuDebug.childJoined) @@ -407,13 +440,13 @@ static void Task_JoinGroupSearchForParent(u8 taskId) Debug_PrintEmpty(); sRfuDebug.childJoined++; } - CreateTask(sub_80FA834, 5); + CreateTask(Task_PlayerExchange, 5); break; } } } -static void sub_80F8AA4(void) +static void InitChildRecvBuffers(void) { u8 i; u8 acceptSlot = lman.acceptSlot_flag; @@ -421,79 +454,77 @@ static void sub_80F8AA4(void) { if (acceptSlot & 1) { - rfu_setRecvBuffer(TYPE_UNI, i, Rfu.main_UNI_recvBuffer[i], sizeof(Rfu.main_UNI_recvBuffer[i])); + rfu_setRecvBuffer(TYPE_UNI, i, gRfu.childRecvBuffer[i], sizeof(gRfu.childRecvBuffer[i])); rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i); } acceptSlot >>= 1; } } -static void sub_80F8AEC(void) +static void InitParentSendData(void) { u8 acceptSlot = lman.acceptSlot_flag; - rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, sizeof(Rfu.recvCmds)); - Rfu.unk_cda = CountTrailingZeroes(acceptSlot); - Rfu.bm_PartnerFlags = acceptSlot; - ReassignPartnerIds(acceptSlot, -1); - Rfu.parent_child = MODE_PARENT; + rfu_UNI_setSendData(acceptSlot, gRfu.recvCmds, sizeof(gRfu.recvCmds)); + gRfu.parentSendSlot = Rfu_GetIndexOfNewestChild(acceptSlot); + gRfu.parentSlots = acceptSlot; + SetLinkPlayerIdsFromSlots(acceptSlot, -1); + gRfu.parentChild = MODE_PARENT; } -static void Task_LinkRfu_UnionRoomListen(u8 taskId) +#define tConnectingForChat data[7] + +static void Task_UnionRoomListen(u8 taskId) { - if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetStatus() == 4) + if (GetHostRfuGameData()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetStatus() == RFU_STATUS_NEW_CHILD_DETECTED) { rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); RfuSetStatus(RFU_STATUS_OK, 0); } - switch (Rfu.state) + switch (gRfu.state) { - case 0: + case RFUSTATE_INIT: rfu_LMAN_initializeRFU(&sRfuReqConfig); - Rfu.state = 1; + gRfu.state = RFUSTATE_INIT_END; gTasks[taskId].data[1] = 1; break; - case 1: + case RFUSTATE_INIT_END: break; - case 17: + case RFUSTATE_UR_CONNECT: rfu_LMAN_establishConnection(MODE_P_C_SWITCH, 0, 240, (u16 *)sAcceptedSerialNos); rfu_LMAN_setMSCCallback(MscCallback_Child); - Rfu.state = 18; + gRfu.state = RFUSTATE_UR_CONNECT_END; break; - case 18: + case RFUSTATE_UR_CONNECT_END: break; - case 13: - if (rfu_UNI_setSendData(1 << Rfu.child_slot, Rfu.lastCmdBeforeCommInterrupt, sizeof(Rfu.lastCmdBeforeCommInterrupt)) == 0) + case RFUSTATE_UR_PLAYER_EXCHANGE: + if (rfu_UNI_setSendData(1 << gRfu.childSlot, gRfu.childSendBuffer, sizeof(gRfu.childSendBuffer)) == 0) { - Rfu.parent_child = MODE_CHILD; + gRfu.parentChild = MODE_CHILD; DestroyTask(taskId); - if (gTasks[taskId].data[7]) - { - CreateTask(sub_80FACF0, 1); - } + if (gTasks[taskId].tConnectingForChat) + CreateTask(Task_PlayerExchangeChat, 1); else - { - CreateTask(sub_80FA834, 5); - } + CreateTask(Task_PlayerExchange, 5); } break; - case 14: - rfu_LMAN_stopManager(0); - Rfu.state = 15; + case RFUSTATE_UR_STOP_MANAGER: + rfu_LMAN_stopManager(FALSE); + gRfu.state = RFUSTATE_UR_STOP_MANAGER_END; break; - case 15: + case RFUSTATE_UR_STOP_MANAGER_END: break; - case 16: - Rfu.unk_cdb = FALSE; - rfu_LMAN_setMSCCallback(MSCCallback_SetUnkCDB); - UpdateGameData_GroupLockedIn(1); - sub_80F8AA4(); - sub_80F8AEC(); - Rfu.state = 20; + case RFUSTATE_UR_FINALIZE: + gRfu.parentFinished = FALSE; + rfu_LMAN_setMSCCallback(MSCCallback_Parent); + UpdateGameData_GroupLockedIn(TRUE); + InitChildRecvBuffers(); + InitParentSendData(); + gRfu.state = RFUSTATE_FINALIZED; gTasks[taskId].data[1] = 8; - Rfu.parent_child = MODE_PARENT; - CreateTask(sub_80FA834, 5); - Rfu.foundNewLeaderMaybe = TRUE; + gRfu.parentChild = MODE_PARENT; + CreateTask(Task_PlayerExchange, 5); + gRfu.playerExchangeActive = TRUE; DestroyTask(taskId); break; } @@ -509,31 +540,32 @@ void LinkRfu_StopManagerBeforeEnteringChat(void) rfu_LMAN_stopManager(FALSE); } -static void MscCallback_Child(u16 unused) +// Argument is provided by the RFU and is unused. +static void MscCallback_Child(u16 REQ_commandID) { s32 i; - for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++) - { - Rfu.lastCmdBeforeCommInterrupt[i] = 0; - } + for (i = 0; i < COMM_SLOT_LENGTH; i++) + gRfu.childSendBuffer[i] = 0; + rfu_REQ_recvData(); rfu_waitREQComplete(); - if (gRfuSlotStatusUNI[Rfu.child_slot]->recv.newDataFlag) + if (gRfuSlotStatusUNI[gRfu.childSlot]->recv.newDataFlag) { - Rfu.sem_UNI_SendRecv++; - RfuRecvQueue_Enqueue(&Rfu.recvQueue, Rfu.unk_c3f); + gRfu.childSendCount++; + RfuRecvQueue_Enqueue(&gRfu.recvQueue, gRfu.childRecvQueue); sRfuDebug.recvCount++; UpdateBackupQueue(); - rfu_UNI_readySendData(Rfu.child_slot); - rfu_UNI_clearRecvNewDataFlag(Rfu.child_slot); + rfu_UNI_readySendData(gRfu.childSlot); + rfu_UNI_clearRecvNewDataFlag(gRfu.childSlot); } rfu_LMAN_REQ_sendData(TRUE); } -static void MSCCallback_SetUnkCDB(u16 unused) +// Argument is provided by the RFU and is unused. +static void MSCCallback_Parent(u16 REQ_commandID) { - Rfu.unk_cdb = TRUE; + gRfu.parentFinished = TRUE; } void LinkRfu_Shutdown(void) @@ -544,125 +576,125 @@ void LinkRfu_Shutdown(void) return; rfu_LMAN_powerDownRFU(); - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { - if (FuncIsActiveTask(Task_LinkLeaderSearchForChildren) == TRUE) + // Stop parent searching for children + if (FuncIsActiveTask(Task_ParentSearchForChildren) == TRUE) { - DestroyTask(Rfu.searchTaskId); + DestroyTask(gRfu.searchTaskId); ResetLinkRfuGFLayer(); } } - else if (Rfu.parent_child == MODE_CHILD) + else if (gRfu.parentChild == MODE_CHILD) { - if (FuncIsActiveTask(Task_JoinGroupSearchForParent) == TRUE) + // Stop child searching for parent + if (FuncIsActiveTask(Task_ChildSearchForParent) == TRUE) { - DestroyTask(Rfu.searchTaskId); + DestroyTask(gRfu.searchTaskId); ResetLinkRfuGFLayer(); } } - else if (Rfu.parent_child == 2) + else if (gRfu.parentChild == MODE_P_C_SWITCH) { - if (FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) + // Stop parent-child switching mode (union room) + if (FuncIsActiveTask(Task_UnionRoomListen) == TRUE) { - DestroyTask(Rfu.searchTaskId); + DestroyTask(gRfu.searchTaskId); ResetLinkRfuGFLayer(); } } - for (i = 0; i < NELEMS(gUnknown_843ED88); i++) + + // Destroy additional tasks + for (i = 0; i < ARRAY_COUNT(sShutdownTasks); i++) { - if (FuncIsActiveTask(gUnknown_843ED88[i]) == TRUE) - { - DestroyTask(FindTaskIdByFunc(gUnknown_843ED88[i])); - } + if (FuncIsActiveTask(sShutdownTasks[i]) == TRUE) + DestroyTask(FindTaskIdByFunc(sShutdownTasks[i])); } } -static void CreateTask_LinkLeaderSearchForChildren(void) +static void CreateTask_ParentSearchForChildren(void) { if (QL_IS_PLAYBACK_STATE) return; - Rfu.searchTaskId = CreateTask(Task_LinkLeaderSearchForChildren, 1); + gRfu.searchTaskId = CreateTask(Task_ParentSearchForChildren, 1); } -static bool8 ContactedByParentAttemptingToReconnect(void) +// If no parent ID (or if child connection not ready) can't reconnect with parent yet +static bool8 CanTryReconnectParent(void) { - if (Rfu.state == 7 && Rfu.parentId) + if (gRfu.state == RFUSTATE_CHILD_CONNECT_END && gRfu.parentId) + return TRUE; + return FALSE; +} + +static bool32 TryReconnectParent(void) +{ + if (gRfu.state == RFUSTATE_CHILD_CONNECT_END && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[gRfu.reconnectParentId].id, 240)) { + gRfu.state = RFUSTATE_RECONNECTED; return TRUE; } return FALSE; } -static bool32 IsParentSuccessfullyReconnected(void) -{ - if (Rfu.state == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.reconnectedParentIdx].id, 240)) - { - Rfu.state = 9; - return TRUE; - } - return FALSE; -} - -static void CreateTask_JoinGroupSearchForParent(void) +static void CreateTask_ChildSearchForParent(void) { if (QL_IS_PLAYBACK_STATE) return; - Rfu.searchTaskId = CreateTask(Task_JoinGroupSearchForParent, 1); + gRfu.searchTaskId = CreateTask(Task_ChildSearchForParent, 1); } bool8 LmanAcceptSlotFlagIsNotZero(void) { if (lman.acceptSlot_flag) - { return TRUE; - } return FALSE; } void LinkRfu_StopManagerAndFinalizeSlots(void) { - Rfu.state = 4; - Rfu.acceptSlot_flag = lman.acceptSlot_flag; + gRfu.state = RFUSTATE_STOP_MANAGER; + gRfu.acceptSlot_flag = lman.acceptSlot_flag; } bool32 WaitRfuState(bool32 force) { - if (Rfu.state == 17 || force) + if (gRfu.state == RFUSTATE_PARENT_FINALIZE_START || force) { - Rfu.state = 18; + gRfu.state = RFUSTATE_PARENT_FINALIZE; return TRUE; } return FALSE; } -void sub_80F8FA0(void) +void StopUnionRoomLinkManager(void) { - Rfu.state = 14; + gRfu.state = RFUSTATE_UR_STOP_MANAGER; } // Unused -static void sub_80F8FAC(u8 a0) +static void ReadySendDataForSlots(u8 slots) { u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (a0 & 1) + if (slots & 1) { rfu_UNI_readySendData(i); break; } - a0 >>= 1; + slots >>= 1; } } -static void MoveRecvCmdsToRfuBuffer(void) +static void ReadAllPlayerRecvCmds(void) { s32 i, j; for (i = 0; i < MAX_RFU_PLAYERS; i++) { - struct RfuManager *ptr = &Rfu; + struct RfuManager *ptr = &gRfu; for (j = 0; j < CMD_LENGTH - 1; j++) { ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8; @@ -672,37 +704,31 @@ static void MoveRecvCmdsToRfuBuffer(void) CpuFill16(0, gRecvCmds, sizeof gRecvCmds); } -static void MoveSendCmdToFirstRecvCmd(void) +static void MoveSendCmdToRecv(void) { s32 i; for (i = 0; i < CMD_LENGTH - 1; i++) - { gRecvCmds[0][i] = gSendCmd[i]; - } + for (i = 0; i < CMD_LENGTH - 1; i++) - { gSendCmd[i] = 0; - } } static void UpdateBackupQueue(void) { - if (Rfu.linkRecovered) + if (gRfu.linkRecovered) { - bool8 backupEmpty = RfuBackupQueue_Dequeue(&Rfu.backupQueue, Rfu.lastCmdBeforeCommInterrupt); - if (Rfu.backupQueue.count == 0) - { - Rfu.linkRecovered = FALSE; - } + bool8 backupEmpty = RfuBackupQueue_Dequeue(&gRfu.backupQueue, gRfu.childSendBuffer); + if (gRfu.backupQueue.count == 0) + gRfu.linkRecovered = FALSE; + if (backupEmpty) - { return; - } } - if (!Rfu.linkRecovered) + if (!gRfu.linkRecovered) { - RfuSendQueue_Dequeue(&Rfu.sendQueue, Rfu.lastCmdBeforeCommInterrupt); - RfuBackupQueue_Enqueue(&Rfu.backupQueue, Rfu.lastCmdBeforeCommInterrupt); + RfuSendQueue_Dequeue(&gRfu.sendQueue, gRfu.childSendBuffer); + RfuBackupQueue_Enqueue(&gRfu.backupQueue, gRfu.childSendBuffer); } } @@ -712,25 +738,19 @@ bool32 IsRfuRecvQueueEmpty(void) s32 j; if (gRfuLinkStatus->sendSlotUNIFlag == 0) - { return FALSE; - } + for (i = 0; i < MAX_RFU_PLAYERS; i++) - { for (j = 0; j < CMD_LENGTH - 1; j++) - { if (gRecvCmds[i][j] != 0) - { return FALSE; - } - } - } + return TRUE; } -static bool32 sub_80F911C(void) +static bool32 RfuMain1_Parent(void) { - if (Rfu.state < 20) + if (gRfu.state < RFUSTATE_FINALIZED) { rfu_REQ_recvData(); rfu_waitREQComplete(); @@ -738,19 +758,19 @@ static bool32 sub_80F911C(void) } else { - Rfu.unk_cdb = FALSE; - if ((Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag) == Rfu.bm_PartnerFlags && (Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag)) + gRfu.parentFinished = FALSE; + if ((gRfu.parentSlots & gRfuLinkStatus->connSlotFlag) == gRfu.parentSlots && (gRfu.parentSlots & gRfuLinkStatus->connSlotFlag)) { - if (!Rfu.unk_cdc) + if (!gRfu.parentMain2Failed) { - if (Rfu.bm_DisconnectSlot) + if (gRfu.disconnectSlots) { - RfuReqDisconnectSlot(Rfu.bm_DisconnectSlot); - Rfu.bm_DisconnectSlot = 0; - if (Rfu.unk_ce4 == 1) + RfuReqDisconnectSlot(gRfu.disconnectSlots); + gRfu.disconnectSlots = 0; + if (gRfu.disconnectMode == RFU_DISCONNECT_ERROR) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x8000); - GetLinkmanErrorParams(0x8000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_8); + RfuSetErrorParams(F_RFU_ERROR_8); return FALSE; } if (!lman.acceptSlot_flag) @@ -760,67 +780,65 @@ static bool32 sub_80F911C(void) return FALSE; } } - MoveRecvCmdsToRfuBuffer(); - rfu_UNI_readySendData(Rfu.unk_cda); + ReadAllPlayerRecvCmds(); + rfu_UNI_readySendData(gRfu.parentSendSlot); rfu_LMAN_REQ_sendData(TRUE); } else { rfu_REQ_PARENT_resumeRetransmitAndChange(); } - Rfu.unk_0e = TRUE; + gRfu.runParentMain2 = TRUE; } } return FALSE; } -static bool32 sub_80F9204(void) +static bool32 RfuMain2_Parent(void) { u16 i; u16 flags; u8 r0; u16 j; - u8 retval; + bool8 failed; - if (Rfu.state >= 20 && Rfu.unk_0e == TRUE) + if (gRfu.state >= RFUSTATE_FINALIZED && gRfu.runParentMain2 == TRUE) { rfu_waitREQComplete(); - while (!Rfu.unk_cdb) + while (!gRfu.parentFinished) { - if (Rfu.errorState != 0) - { + if (gRfu.errorState != RFU_ERROR_STATE_NONE) return FALSE; - } } rfu_REQ_recvData(); rfu_waitREQComplete(); - if ((lman.parentAck_flag & Rfu.bm_PartnerFlags) == Rfu.bm_PartnerFlags) + if ((lman.parentAck_flag & gRfu.parentSlots) == gRfu.parentSlots) { - Rfu.unk_cdc = 0; + gRfu.parentMain2Failed = FALSE; sRfuDebug.recvCount++; flags = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { if (flags & 1) { - if (Rfu.main_UNI_recvBuffer[i][1]) + if (gRfu.childRecvBuffer[i][1]) { - if (Rfu.unk_cee[i] != 0xFF && (Rfu.main_UNI_recvBuffer[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7)) + if (gRfu.childRecvIds[i] != 0xFF && (gRfu.childRecvBuffer[i][0] >> 5) != ((gRfu.childRecvIds[i] + 1) & 7)) { - if (++Rfu.unk_cea[i] > 4) - GetLinkmanErrorParams(0x8100); + if (++gRfu.numChildRecvErrors[i] > 4) + RfuSetErrorParams(F_RFU_ERROR_8 | F_RFU_ERROR_1); } else { - Rfu.unk_cee[i] = Rfu.main_UNI_recvBuffer[i][0] / 32; - Rfu.unk_cea[i] = 0; - Rfu.main_UNI_recvBuffer[i][0] &= 0x1f; - r0 = Rfu.linkPlayerIdx[i]; - for (j = 0; j < 7; j++) + gRfu.childRecvIds[i] = gRfu.childRecvBuffer[i][0] / 32; + gRfu.numChildRecvErrors[i] = 0; + gRfu.childRecvBuffer[i][0] &= 0x1f; + r0 = gRfu.linkPlayerIdx[i]; + for (j = 0; j < CMD_LENGTH - 1; j++) { - gRecvCmds[r0][j] = (Rfu.main_UNI_recvBuffer[i][(j << 1) + 1] << 8) | Rfu.main_UNI_recvBuffer[i][(j << 1) + 0]; - Rfu.main_UNI_recvBuffer[i][(j << 1) + 1] = 0; - Rfu.main_UNI_recvBuffer[i][(j << 1) + 0] = 0; + gRecvCmds[r0][j] = (gRfu.childRecvBuffer[i][(j << 1) + 1] << 8) | gRfu.childRecvBuffer[i][(j << 1) + 0]; + gRfu.childRecvBuffer[i][(j << 1) + 1] = 0; + gRfu.childRecvBuffer[i][(j << 1) + 0] = 0; } } } @@ -828,62 +846,60 @@ static bool32 sub_80F9204(void) } flags >>= 1; } - MoveSendCmdToFirstRecvCmd(); + MoveSendCmdToRecv(); RfuHandleReceiveCommand(0); CallRfuFunc(); - if (Rfu.bmChatLeaderMaybe && !Rfu.linkClosing) + if (gRfu.nextChildBits && !gRfu.stopNewConnections) { sRfuDebug.unkFlag = FALSE; - rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, Rfu.unk_cda); + rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, gRfu.parentSendSlot); for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.bmChatLeaderMaybe >> i) & 1) - { - rfu_setRecvBuffer(TYPE_UNI, i, Rfu.main_UNI_recvBuffer[i], sizeof(Rfu.main_UNI_recvBuffer[i])); - } + if ((gRfu.nextChildBits >> i) & 1) + rfu_setRecvBuffer(TYPE_UNI, i, gRfu.childRecvBuffer[i], sizeof(gRfu.childRecvBuffer[i])); } - ReassignPartnerIds(Rfu.bm_PartnerFlags, Rfu.bm_PartnerFlags | Rfu.bmChatLeaderMaybe); - Rfu.unk_ce9 = Rfu.bmChatLeaderMaybe; - Rfu.bm_PartnerFlags |= Rfu.bmChatLeaderMaybe; - Rfu.bmChatLeaderMaybe = 0; - rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, sizeof(Rfu.recvCmds)); - Rfu.unk_cda = CountTrailingZeroes(Rfu.bm_PartnerFlags); - CreateTask(Task_ExchangeLinkPlayers, 0); + SetLinkPlayerIdsFromSlots(gRfu.parentSlots, gRfu.parentSlots | gRfu.nextChildBits); + gRfu.incomingChild = gRfu.nextChildBits; + gRfu.parentSlots |= gRfu.nextChildBits; + gRfu.nextChildBits = 0; + rfu_UNI_setSendData(gRfu.parentSlots, gRfu.recvCmds, sizeof(gRfu.recvCmds)); + gRfu.parentSendSlot = Rfu_GetIndexOfNewestChild(gRfu.parentSlots); + CreateTask(Task_PlayerExchangeUpdate, 0); } } else { - Rfu.unk_cdc = 1; - Rfu.unk_0e = FALSE; + gRfu.parentMain2Failed = TRUE; + gRfu.runParentMain2 = FALSE; } - Rfu.unk_0e = FALSE; + gRfu.runParentMain2 = FALSE; } - retval = Rfu.unk_cdc; - return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE; + failed = gRfu.parentMain2Failed; + return gRfuLinkStatus->sendSlotUNIFlag ? failed & 1 : FALSE; } -static void RfuBufferSendCmd(u16 *sendCmd, u8 *rfuSendBuf) +static void ChildBuildSendCmd(u16 *sendCmd, u8 *dst) { s32 i; if (sendCmd[0]) { - sendCmd[0] |= (Rfu.unk_102 << 5); - Rfu.unk_102 = (Rfu.unk_102 + 1) & 7; - for (i = 0; i < 7; i++) + sendCmd[0] |= (gRfu.childSendCmdId << 5); + gRfu.childSendCmdId = (gRfu.childSendCmdId + 1) & 7; + for (i = 0; i < CMD_LENGTH - 1; i++) { - rfuSendBuf[2 * i + 1] = sendCmd[i] >> 8; - rfuSendBuf[2 * i + 0] = sendCmd[i]; + dst[2 * i + 1] = sendCmd[i] >> 8; + dst[2 * i + 0] = sendCmd[i]; } } else { - for (i = 0; i < 14; i++) - rfuSendBuf[i] = 0; + for (i = 0; i < 2 * (CMD_LENGTH - 1); i++) + dst[i] = 0; } } -static bool32 RfuProcessEnqueuedRecvBlock(void) +static bool32 RfuMain1_Child(void) { u8 i; u8 j; @@ -891,16 +907,17 @@ static bool32 RfuProcessEnqueuedRecvBlock(void) u8 sendBuf[2 * (CMD_LENGTH - 1)]; u8 status; - RfuRecvQueue_Dequeue(&Rfu.recvQueue, recvBuf); + RfuRecvQueue_Dequeue(&gRfu.recvQueue, recvBuf); for (i = 0; i < MAX_RFU_PLAYERS; i++) { for (j = 0; j < CMD_LENGTH - 1; j++) { - gRecvCmds[i][j] = (recvBuf[i * 14 + (j << 1) + 1] << 8) | recvBuf[i * 14 + (j << 1) + 0]; + gRecvCmds[i][j] = (recvBuf[i * COMM_SLOT_LENGTH + (j * 2) + 1] << 8) + | recvBuf[i * COMM_SLOT_LENGTH + (j * 2) + 0]; } } RfuHandleReceiveCommand(0); - if (lman.childClockSlave_flag == 0 && Rfu.unk_ce4) + if (lman.childClockSlave_flag == 0 && gRfu.disconnectMode != RFU_DISCONNECT_NONE) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); @@ -908,24 +925,24 @@ static bool32 RfuProcessEnqueuedRecvBlock(void) if (status != RFU_STATUS_FATAL_ERROR && status != RFU_STATUS_JOIN_GROUP_NO && status != RFU_STATUS_LEAVE_GROUP) - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_8); rfu_clearAllSlot(); gReceivedRemoteLinkPlayers = FALSE; - Rfu.RfuFunc = NULL; - if (Rfu.unk_ce4 == 1) + gRfu.callback = NULL; + if (gRfu.disconnectMode == RFU_DISCONNECT_ERROR) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000); - GetLinkmanErrorParams(0x9000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_8); + RfuSetErrorParams(F_RFU_ERROR_5 | F_RFU_ERROR_8); } lman.state = lman.next_state = 0; - Rfu.unk_ce4 = 0; + gRfu.disconnectMode = RFU_DISCONNECT_NONE; } - if (Rfu.sem_UNI_SendRecv) + if (gRfu.childSendCount) { - Rfu.sem_UNI_SendRecv--; + gRfu.childSendCount--; CallRfuFunc(); - RfuBufferSendCmd(gSendCmd, sendBuf); - RfuSendQueue_Enqueue(&Rfu.sendQueue, sendBuf); + ChildBuildSendCmd(gSendCmd, sendBuf); + RfuSendQueue_Enqueue(&gRfu.sendQueue, sendBuf); for (i = 0; i < CMD_LENGTH - 1; i++) gSendCmd[i] = 0; } @@ -936,25 +953,26 @@ static void HandleSendFailure(u8 unused, u32 flags) { s32 i, j, temp; - const u8 *payload = Rfu.sendBlock.payload; - for (i = 0; i < Rfu.sendBlock.count; i++) + const u8 *payload = gRfu.sendBlock.payload; + for (i = 0; i < gRfu.sendBlock.count; i++) { if (!(flags & 1)) { - sResendBlock16[0] = RFUCMD_SEND_BLOCK_STEP | i; - for (j = 0; j < 7; j++) + sResendBlock16[0] = RFUCMD_SEND_BLOCK | i; + for (j = 0; j < CMD_LENGTH - 1; j++) { - temp = j << 1; - sResendBlock16[j + 1] = (payload[12 * i + temp + 1] << 8) | payload[12 * i + temp + 0]; + temp = j * 2; + sResendBlock16[j + 1] = (payload[(COMM_SLOT_LENGTH - 2) * i + temp + 1] << 8) + | payload[(COMM_SLOT_LENGTH - 2) * i + temp + 0]; } - for (j = 0; j < 7; j++) + for (j = 0; j < CMD_LENGTH - 1; j++) { - temp = j << 1; + temp = j * 2; sResendBlock8[temp + 1] = sResendBlock16[j] >> 8; sResendBlock8[temp + 0] = sResendBlock16[j]; } - RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); - Rfu.sendBlock.failedFlags |= (1 << i); + RfuSendQueue_Enqueue(&gRfu.sendQueue, sResendBlock8); + gRfu.sendBlock.failedFlags |= (1 << i); } flags >>= 1; } @@ -962,32 +980,30 @@ static void HandleSendFailure(u8 unused, u32 flags) void Rfu_SetBlockReceivedFlag(u8 linkPlayerId) { - if (Rfu.parent_child == MODE_PARENT && linkPlayerId != 0) - Rfu.numBlocksReceived[linkPlayerId] = 1; + if (gRfu.parentChild == MODE_PARENT && linkPlayerId != 0) + gRfu.numBlocksReceived[linkPlayerId] = 1; else - Rfu.blockReceived[linkPlayerId] = TRUE; + gRfu.blockReceived[linkPlayerId] = TRUE; } void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId) { - Rfu.blockReceived[linkPlayerId] = FALSE; - Rfu.recvBlock[linkPlayerId].receiving = RFU_RECV_IDLE; + gRfu.blockReceived[linkPlayerId] = FALSE; + gRfu.recvBlock[linkPlayerId].receiving = RECV_STATE_READY; } -static u8 RfuChildSetReceivedPlayerOrder(const u8 *template) +static u8 LoadLinkPlayerIds(const u8 *ids) { u8 i; - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) return FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) - { - Rfu.linkPlayerIdx[i] = template[i]; - } - return template[Rfu.child_slot]; + gRfu.linkPlayerIdx[i] = ids[i]; + return ids[gRfu.childSlot]; } -static void RfuFunc_SendKeysToRfu(void) +static void SendKeysToRfu(void) { static u8 heldKeyCount; if (gReceivedRemoteLinkPlayers @@ -1000,27 +1016,49 @@ static void RfuFunc_SendKeysToRfu(void) } } -struct RfuGameData *GetHostRFUtgtGname(void) +struct RfuGameData *GetHostRfuGameData(void) { return &gHostRfuGameData; } bool32 IsSendingKeysToRfu(void) { - return Rfu.RfuFunc == RfuFunc_SendKeysToRfu; + return gRfu.callback == SendKeysToRfu; } void StartSendingKeysToRfu(void) { +// This is the original symbol and field name, which is baked into the assert below +#define Rfu gRfu +#define RfuFunc callback AGB_ASSERT_EX(Rfu.RfuFunc == NULL, ABSPATH("rfu.c"), 1473); - Rfu.RfuFunc = RfuFunc_SendKeysToRfu; +#undef RfuFunc +#undef Rfu + + gRfu.callback = SendKeysToRfu; } void ClearLinkRfuCallback(void) { - Rfu.RfuFunc = NULL; + gRfu.callback = NULL; } +/* +static void Rfu_BerryBlenderSendHeldKeys(void) +{ + RfuPrepareSendBuffer(RFUCMD_BLENDER_SEND_KEYS); + if (GetMultiplayerId() == 0) + gSendCmd[BLENDER_COMM_ARROW_POS] = GetBlenderArrowPosition(); + gBerryBlenderKeySendAttempts++; +} + +void Rfu_SetBerryBlenderLinkCallback(void) +{ + if (gRfu.callback == NULL) + gRfu.callback = Rfu_BerryBlenderSendHeldKeys; +} +*/ + static void RfuHandleReceiveCommand(u8 unused) { u16 i; @@ -1028,42 +1066,42 @@ static void RfuHandleReceiveCommand(u8 unused) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - switch (gRecvCmds[i][0] & 0xff00) + switch (gRecvCmds[i][0] & RFUCMD_MASK) { - case RFUCMD_PLAYERS_LIST_2: - if (Rfu.parent_child == MODE_CHILD && gReceivedRemoteLinkPlayers) + case RFUCMD_SEND_PLAYER_IDS_NEW: + if (gRfu.parentChild == MODE_CHILD && gReceivedRemoteLinkPlayers) return; // fallthrough - case RFUCMD_PLAYERS_LIST: + case RFUCMD_SEND_PLAYER_IDS: if (gRfuLinkStatus->parentChild == MODE_CHILD) { - Rfu.playerCount = gRecvCmds[i][1]; - Rfu.multiplayerId = RfuChildSetReceivedPlayerOrder((u8 *)(gRecvCmds[i] + 2)); + gRfu.playerCount = gRecvCmds[i][1]; + gRfu.multiplayerId = LoadLinkPlayerIds((u8 *)(gRecvCmds[i] + 2)); } break; case RFUCMD_SEND_BLOCK_INIT: - if (Rfu.recvBlock[i].receiving == RFU_RECV_IDLE) + if (gRfu.recvBlock[i].receiving == RECV_STATE_READY) { - Rfu.recvBlock[i].next = 0; - Rfu.recvBlock[i].count = gRecvCmds[i][1]; - Rfu.recvBlock[i].owner = gRecvCmds[i][2]; - Rfu.recvBlock[i].receivedFlags = 0; - Rfu.recvBlock[i].receiving = RFU_RECV_RECEIVING; - Rfu.blockReceived[i] = FALSE; + gRfu.recvBlock[i].next = 0; + gRfu.recvBlock[i].count = gRecvCmds[i][1]; + gRfu.recvBlock[i].owner = gRecvCmds[i][2]; + gRfu.recvBlock[i].receivedFlags = 0; + gRfu.recvBlock[i].receiving = RECV_STATE_RECEIVING; + gRfu.blockReceived[i] = FALSE; } break; - case RFUCMD_SEND_BLOCK_STEP: - if (Rfu.recvBlock[i].receiving == RFU_RECV_RECEIVING) + case RFUCMD_SEND_BLOCK: + if (gRfu.recvBlock[i].receiving == RECV_STATE_RECEIVING) { - Rfu.recvBlock[i].next = gRecvCmds[i][0] & 0xff; - Rfu.recvBlock[i].receivedFlags |= (1 << Rfu.recvBlock[i].next); + gRfu.recvBlock[i].next = gRecvCmds[i][0] & ~RFUCMD_MASK; + gRfu.recvBlock[i].receivedFlags |= (1 << gRfu.recvBlock[i].next); for (j = 0; j < 6; j++) - gBlockRecvBuffer[i][Rfu.recvBlock[i].next * 6 + j] = gRecvCmds[i][j + 1]; - if (Rfu.recvBlock[i].receivedFlags == sAllBlocksReceived[Rfu.recvBlock[i].count]) + gBlockRecvBuffer[i][gRfu.recvBlock[i].next * 6 + j] = gRecvCmds[i][j + 1]; + if (gRfu.recvBlock[i].receivedFlags == sAllBlocksReceived[gRfu.recvBlock[i].count]) { - Rfu.recvBlock[i].receiving = RFU_RECV_FINISHED; + gRfu.recvBlock[i].receiving = RECV_STATE_FINISHED; Rfu_SetBlockReceivedFlag(i); - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers && Rfu.parent_child == MODE_CHILD) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers && gRfu.parentChild == MODE_CHILD) ValidateAndReceivePokemonSioInfo(gBlockRecvBuffer); } } @@ -1072,67 +1110,70 @@ static void RfuHandleReceiveCommand(u8 unused) Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size); break; case RFUCMD_READY_CLOSE_LINK: - Rfu.readyCloseLink[i] = TRUE; + gRfu.readyCloseLink[i] = TRUE; break; case RFUCMD_READY_EXIT_STANDBY: - if (Rfu.resendExitStandbyCount == gRecvCmds[i][1]) - Rfu.readyExitStandby[i] = TRUE; + if (gRfu.resendExitStandbyCount == gRecvCmds[i][1]) + gRfu.readyExitStandby[i] = TRUE; break; - case RFUCMD_PARENT_DISCONNECT: - if (Rfu.parent_child == MODE_CHILD) + case RFUCMD_DISCONNECT: + if (gRfu.parentChild == MODE_CHILD) { + // Disconnect child if (gReceivedRemoteLinkPlayers) { if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag) { gReceivedRemoteLinkPlayers = FALSE; rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = gRecvCmds[i][2]; + gRfu.disconnectMode = gRecvCmds[i][2]; } - Rfu.playerCount = gRecvCmds[i][3]; + gRfu.playerCount = gRecvCmds[i][3]; ClearSelectedLinkPlayerIds(gRecvCmds[i][1]); } } else { - RfuPrepareSendBuffer(RFUCMD_CHILD_DISCONNECT); + // Disconnect parent + RfuPrepareSendBuffer(RFUCMD_DISCONNECT_PARENT); gSendCmd[1] = gRecvCmds[i][1]; gSendCmd[2] = gRecvCmds[i][2]; gSendCmd[3] = gRecvCmds[i][3]; } break; - case RFUCMD_CHILD_DISCONNECT: - if (Rfu.parent_child == MODE_PARENT) + case RFUCMD_DISCONNECT_PARENT: + if (gRfu.parentChild == MODE_PARENT) { - Rfu.bm_DisconnectSlot |= gRecvCmds[i][1]; - Rfu.unk_ce4 = gRecvCmds[i][2]; + gRfu.disconnectSlots |= gRecvCmds[i][1]; + gRfu.disconnectMode = gRecvCmds[i][2]; ClearSelectedLinkPlayerIds(gRecvCmds[i][1]); } break; + //case RFUCMD_BLENDER_SEND_KEYS: case RFUCMD_SEND_HELD_KEYS: gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; break; } - if (Rfu.parent_child == MODE_PARENT && Rfu.numBlocksReceived[i]) + if (gRfu.parentChild == MODE_PARENT && gRfu.numBlocksReceived[i]) { - if (Rfu.numBlocksReceived[i] == 4) + if (gRfu.numBlocksReceived[i] == 4) { - Rfu.blockReceived[i] = TRUE; - Rfu.numBlocksReceived[i] = 0; + gRfu.blockReceived[i] = TRUE; + gRfu.numBlocksReceived[i] = 0; } else - Rfu.numBlocksReceived[i]++; + gRfu.numBlocksReceived[i]++; } } } -static bool8 AreNoPlayersReceiving(void) +static bool8 AreAllPlayersReadyToReceive(void) { s32 i; - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.recvBlock[i].receiving != RFU_RECV_IDLE) + if (gRfu.recvBlock[i].receiving != RECV_STATE_READY) return FALSE; } return TRUE; @@ -1142,9 +1183,9 @@ static bool8 AreAllPlayersFinishedReceiving(void) { s32 i; - for (i = 0; i < Rfu.playerCount; i++) + for (i = 0; i < gRfu.playerCount; i++) { - if (Rfu.recvBlock[i].receiving != RFU_RECV_FINISHED || Rfu.blockReceived[i] != TRUE) + if (gRfu.recvBlock[i].receiving != RECV_STATE_FINISHED || gRfu.blockReceived[i] != TRUE) return FALSE; } return TRUE; @@ -1156,9 +1197,9 @@ static void ResetSendDataManager(struct RfuBlockSend *data) data->count = 0; data->payload = NULL; data->receivedFlags = 0; - data->sending = 0; + data->sending = FALSE; data->owner = 0; - data->receiving = RFU_RECV_IDLE; + data->receiving = RECV_STATE_READY; } u8 Rfu_GetBlockReceivedStatus(void) @@ -1166,12 +1207,10 @@ u8 Rfu_GetBlockReceivedStatus(void) u8 flags = 0; s32 i; - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.recvBlock[i].receiving == RFU_RECV_FINISHED && Rfu.blockReceived[i] == TRUE) - { + if (gRfu.recvBlock[i].receiving == RECV_STATE_FINISHED && gRfu.blockReceived[i] == TRUE) flags |= (1 << i); - } } return flags; } @@ -1186,36 +1225,35 @@ static void RfuPrepareSendBuffer(u16 command) switch (command) { case RFUCMD_SEND_BLOCK_INIT: - gSendCmd[1] = Rfu.sendBlock.count; - gSendCmd[2] = Rfu.sendBlock.owner + 0x80; + gSendCmd[1] = gRfu.sendBlock.count; + gSendCmd[2] = gRfu.sendBlock.owner + 0x80; break; case RFUCMD_SEND_BLOCK_REQ: - if (AreNoPlayersReceiving()) - gSendCmd[1] = Rfu.cmdA100_blockRequestType; + if (AreAllPlayersReadyToReceive()) + gSendCmd[1] = gRfu.blockRequestType; break; - case RFUCMD_PLAYERS_LIST: - case RFUCMD_PLAYERS_LIST_2: - tmp = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot; - Rfu.playerCount = sNumSetBits[tmp] + 1; - gSendCmd[1] = Rfu.playerCount; - buff = (u8 *)(gSendCmd + 2); + case RFUCMD_SEND_PLAYER_IDS: + case RFUCMD_SEND_PLAYER_IDS_NEW: + tmp = gRfu.parentSlots ^ gRfu.disconnectSlots; + gRfu.playerCount = sPlayerBitsToCount[tmp] + 1; + gSendCmd[1] = gRfu.playerCount; + buff = (u8 *)&gSendCmd[2]; for (i = 0; i < RFU_CHILD_MAX; i++) - buff[i] = Rfu.linkPlayerIdx[i]; + buff[i] = gRfu.linkPlayerIdx[i]; break; case RFUCMD_READY_EXIT_STANDBY: case RFUCMD_READY_CLOSE_LINK: - gSendCmd[1] = Rfu.resendExitStandbyCount; + gSendCmd[1] = gRfu.resendExitStandbyCount; break; case RFUCMD_SEND_PACKET: - for (i = 0; i < 6; i++) - gSendCmd[1 + i] = Rfu.packet[i]; + for (i = 0; i < RFU_PACKET_SIZE; i++) + gSendCmd[1 + i] = gRfu.packet[i]; break; case RFUCMD_SEND_HELD_KEYS: gSendCmd[1] = gHeldKeyCodeToSend; break; - case RFUCMD_CHILD_DISCONNECT: - break; - case RFUCMD_PARENT_DISCONNECT: + case RFUCMD_DISCONNECT_PARENT: + case RFUCMD_DISCONNECT: break; } } @@ -1224,40 +1262,41 @@ void Rfu_SendPacket(void *data) { if (IsSendCmdComplete() && !RfuHasErrored()) { - memcpy(Rfu.packet, data, sizeof(Rfu.packet)); + memcpy(gRfu.packet, data, sizeof(gRfu.packet)); RfuPrepareSendBuffer(RFUCMD_SEND_PACKET); } } bool32 Rfu_InitBlockSend(const u8 *src, size_t size) { - bool8 sizeHasModulo; + bool8 round; AGB_ASSERT_EX(size<=252, ABSPATH("rfu.c"), 1793); - if (Rfu.RfuFunc != NULL) + + if (gRfu.callback != NULL) return FALSE; if (gSendCmd[0] != 0) return FALSE; - if (Rfu.sendBlock.sending != 0) + if (gRfu.sendBlock.sending) { sRfuDebug.blockSendTime++; return FALSE; } - sizeHasModulo = (size % 12) != 0; - Rfu.sendBlock.owner = GetMultiplayerId(); - Rfu.sendBlock.sending = 1; - Rfu.sendBlock.count = (size / 12) + sizeHasModulo; - Rfu.sendBlock.next = 0; - if (size > 0x100) // should never be reached - Rfu.sendBlock.payload = src; + round = (size % 12) != 0; + gRfu.sendBlock.owner = GetMultiplayerId(); + gRfu.sendBlock.sending = TRUE; + gRfu.sendBlock.count = (size / 12) + round; + gRfu.sendBlock.next = 0; + if (size > BLOCK_BUFFER_SIZE) + gRfu.sendBlock.payload = src; else { if (src != gBlockSendBuffer) memcpy(gBlockSendBuffer, src, size); - Rfu.sendBlock.payload = gBlockSendBuffer; + gRfu.sendBlock.payload = gBlockSendBuffer; } RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_INIT); - Rfu.RfuFunc = HandleBlockSend; - Rfu.sendBlockInitDelay = 0; + gRfu.callback = HandleBlockSend; + gRfu.sendBlockInitDelay = 0; return TRUE; } @@ -1266,139 +1305,141 @@ static void HandleBlockSend(void) if (IsSendCmdComplete()) { RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_INIT); - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { - if (++Rfu.sendBlockInitDelay > 2) - Rfu.RfuFunc = SendNextBlock; + if (++gRfu.sendBlockInitDelay > 2) + gRfu.callback = SendNextBlock; } else { - if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == RFUCMD_SEND_BLOCK_INIT) - Rfu.RfuFunc = SendNextBlock; + if ((gRecvCmds[GetMultiplayerId()][0] & RFUCMD_MASK) == RFUCMD_SEND_BLOCK_INIT) + gRfu.callback = SendNextBlock; } } } static void SendNextBlock(void) { s32 i; - const u8 *src = Rfu.sendBlock.payload; - gSendCmd[0] = RFUCMD_SEND_BLOCK_STEP | Rfu.sendBlock.next; - for (i = 0; i < 7; i++) - gSendCmd[i + 1] = (src[(i << 1) + Rfu.sendBlock.next * 12 + 1] << 8) | src[(i << 1) + Rfu.sendBlock.next * 12 + 0]; - Rfu.sendBlock.next++; - if (Rfu.sendBlock.count <= Rfu.sendBlock.next) + const u8 *src = gRfu.sendBlock.payload; + gSendCmd[0] = RFUCMD_SEND_BLOCK | gRfu.sendBlock.next; + for (i = 0; i < CMD_LENGTH - 1; i++) + gSendCmd[i + 1] = (src[(i << 1) + gRfu.sendBlock.next * 12 + 1] << 8) | src[(i << 1) + gRfu.sendBlock.next * 12 + 0]; + gRfu.sendBlock.next++; + if (gRfu.sendBlock.count <= gRfu.sendBlock.next) { - Rfu.sendBlock.sending = 0; - Rfu.RfuFunc = SendLastBlock; + gRfu.sendBlock.sending = FALSE; + gRfu.callback = SendLastBlock; } } static void SendLastBlock(void) { - const u8 *src = Rfu.sendBlock.payload; + const u8 *src = gRfu.sendBlock.payload; u8 mpId = GetMultiplayerId(); s32 i; - if (Rfu.parent_child == MODE_CHILD) + if (gRfu.parentChild == MODE_CHILD) { - gSendCmd[0] = RFUCMD_SEND_BLOCK_STEP | (Rfu.sendBlock.count - 1); - for (i = 0; i < 7; i++) - gSendCmd[i + 1] = (src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 0]; - if ((u8)gRecvCmds[mpId][0] == Rfu.sendBlock.count - 1) + gSendCmd[0] = RFUCMD_SEND_BLOCK | (gRfu.sendBlock.count - 1); + for (i = 0; i < CMD_LENGTH - 1; i++) + gSendCmd[i + 1] = (src[(i << 1) + (gRfu.sendBlock.count - 1) * 12 + 1] << 8) | src[(i << 1) + (gRfu.sendBlock.count - 1) * 12 + 0]; + if ((u8)gRecvCmds[mpId][0] == gRfu.sendBlock.count - 1) { - if (Rfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[Rfu.recvBlock[mpId].count]) + if (gRfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[gRfu.recvBlock[mpId].count]) { - HandleSendFailure(mpId, Rfu.recvBlock[mpId].receivedFlags); + HandleSendFailure(mpId, gRfu.recvBlock[mpId].receivedFlags); sRfuDebug.blockSendFailures++; } else - Rfu.RfuFunc = NULL; + gRfu.callback = NULL; } } else - Rfu.RfuFunc = NULL; + gRfu.callback = NULL; } bool8 Rfu_SendBlockRequest(u8 blockRequestType) { - Rfu.cmdA100_blockRequestType = blockRequestType; + gRfu.blockRequestType = blockRequestType; RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ); return TRUE; } -static void OnDisconnect_PowerDownRfu(void) +static void RfuShutdownAfterDisconnect(void) { rfu_clearAllSlot(); rfu_LMAN_powerDownRFU(); gReceivedRemoteLinkPlayers = FALSE; - Rfu.isShuttingDown = TRUE; - Rfu.RfuFunc = NULL; + gRfu.isShuttingDown = TRUE; + gRfu.callback = NULL; } static void DisconnectRfu(void) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); - OnDisconnect_PowerDownRfu(); + RfuShutdownAfterDisconnect(); } static void TryDisconnectRfu(void) { - if (Rfu.parent_child == MODE_CHILD) + if (gRfu.parentChild == MODE_CHILD) { rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = 2; + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; } else - Rfu.RfuFunc = DisconnectRfu; + gRfu.callback = DisconnectRfu; } void LinkRfu_FatalError(void) { rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = 1; - Rfu.bm_DisconnectSlot = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + gRfu.disconnectMode = RFU_DISCONNECT_ERROR; + gRfu.disconnectSlots = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; } // RFU equivalent of LinkCB_WaitCloseLink static void WaitAllReadyToCloseLink(void) { s32 i; - u8 playerCount = Rfu.playerCount; + u8 playerCount = gRfu.playerCount; s32 count = 0; + // Wait for all players to be ready for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.readyCloseLink[i]) + if (gRfu.readyCloseLink[i]) count++; } if (count == playerCount) { + // All ready, close link gBattleTypeFlags &= ~(BATTLE_TYPE_LINK_IN_BATTLE | 0xFFFF0000); - if (Rfu.parent_child == MODE_CHILD) + if (gRfu.parentChild == MODE_CHILD) { - Rfu.errorState = 3; + gRfu.errorState = RFU_ERROR_STATE_DISCONNECTING; TryDisconnectRfu(); } else - Rfu.RfuFunc = TryDisconnectRfu; + gRfu.callback = TryDisconnectRfu; } } static void SendReadyCloseLink(void) { - if (IsSendCmdComplete() && !Rfu.foundNewLeaderMaybe) + if (IsSendCmdComplete() && !gRfu.playerExchangeActive) { RfuPrepareSendBuffer(RFUCMD_READY_CLOSE_LINK); - Rfu.RfuFunc = WaitAllReadyToCloseLink; + gRfu.callback = WaitAllReadyToCloseLink; } } static void Task_TryReadyCloseLink(u8 taskId) { - if (Rfu.RfuFunc == NULL) + if (gRfu.callback == NULL) { - Rfu.linkClosing = TRUE; - Rfu.RfuFunc = SendReadyCloseLink; + gRfu.stopNewConnections = TRUE; + gRfu.callback = SendReadyCloseLink; DestroyTask(taskId); } } @@ -1416,34 +1457,34 @@ static void SendReadyExitStandbyUntilAllReady(void) if (GetMultiplayerId() != 0) // child { - if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) + if (gRfu.recvQueue.count == 0 && gRfu.resendExitStandbyTimer > 60) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.resendExitStandbyTimer = 0; + gRfu.resendExitStandbyTimer = 0; } } playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) { - if (Rfu.readyExitStandby[i] == 0) + if (!gRfu.readyExitStandby[i]) break; } if (i == playerCount) { for (i = 0; i < MAX_RFU_PLAYERS; i++) - Rfu.readyExitStandby[i] = 0; - Rfu.resendExitStandbyCount++; - Rfu.RfuFunc = NULL; + gRfu.readyExitStandby[i] = FALSE; + gRfu.resendExitStandbyCount++; + gRfu.callback = NULL; } - Rfu.resendExitStandbyTimer++; + gRfu.resendExitStandbyTimer++; } static void LinkLeaderReadyToExitStandby(void) { - if (Rfu.recvQueue.count == 0 && IsSendCmdComplete()) + if (gRfu.recvQueue.count == 0 && IsSendCmdComplete()) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.RfuFunc = SendReadyExitStandbyUntilAllReady; + gRfu.callback = SendReadyExitStandbyUntilAllReady; } } @@ -1453,28 +1494,30 @@ static void Rfu_LinkStandby(void) u8 i; u8 playerCount; - if (GetMultiplayerId() != 0) // child + if (GetMultiplayerId() != 0) { - if (Rfu.recvQueue.count == 0 && IsSendCmdComplete()) + // Not link leader, send exit standby when ready + if (gRfu.recvQueue.count == 0 && IsSendCmdComplete()) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.RfuFunc = SendReadyExitStandbyUntilAllReady; + gRfu.callback = SendReadyExitStandbyUntilAllReady; } } - else // parent + else { + // Link leader, wait for all members to send exit ready playerCount = GetLinkPlayerCount(); for (i = 1; i < playerCount; i++) { - if (Rfu.readyExitStandby[i] == 0) + if (!gRfu.readyExitStandby[i]) break; } if (i == playerCount) { - if (Rfu.recvQueue.count == 0 && IsSendCmdComplete()) + if (gRfu.recvQueue.count == 0 && IsSendCmdComplete()) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.RfuFunc = LinkLeaderReadyToExitStandby; + gRfu.callback = LinkLeaderReadyToExitStandby; } } } @@ -1482,10 +1525,10 @@ static void Rfu_LinkStandby(void) void Rfu_SetLinkStandbyCallback(void) { - if (Rfu.RfuFunc == NULL) + if (gRfu.callback == NULL) { - Rfu.RfuFunc = Rfu_LinkStandby; - Rfu.resendExitStandbyTimer = 0; + gRfu.callback = Rfu_LinkStandby; + gRfu.resendExitStandbyTimer = 0; } } @@ -1494,13 +1537,13 @@ bool32 IsRfuSerialNumberValid(u32 serialNo) s32 i; for (i = 0; sAcceptedSerialNos[i] != serialNo; i++) { - if (sAcceptedSerialNos[i] == 0xFFFF) + if (sAcceptedSerialNos[i] == RFU_SERIAL_END) return FALSE; } return TRUE; } -u8 ToggleLMANlinkRecovery(bool32 enable) +u8 Rfu_SetLinkRecovery(bool32 enable) { if (!enable) return rfu_LMAN_setLinkRecovery(FALSE, 0); @@ -1508,121 +1551,129 @@ u8 ToggleLMANlinkRecovery(bool32 enable) return 0; } -void Rfu_UnionRoomChat_StopLinkManager(void) +void Rfu_StopPartnerSearch(void) { - Rfu.linkClosing = TRUE; + gRfu.stopNewConnections = TRUE; rfu_LMAN_stopManager(FALSE); } -u8 LinkRfu_GetMultiplayerId(void) +u8 Rfu_GetMultiplayerId(void) { - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) return 0; - return Rfu.multiplayerId; + return gRfu.multiplayerId; } -u8 GetRfuPlayerCount(void) +u8 Rfu_GetLinkPlayerCount(void) { - return Rfu.playerCount; + return gRfu.playerCount; } bool8 IsLinkRfuTaskFinished(void) { - return Rfu.RfuFunc != NULL ? FALSE : TRUE; + return gRfu.callback != NULL ? FALSE : TRUE; } static void CallRfuFunc(void) { - if (Rfu.RfuFunc != NULL) - Rfu.RfuFunc(); + if (gRfu.callback != NULL) + gRfu.callback(); } static bool8 CheckForLeavingGroupMembers(void) { s32 i; - bool8 retval = FALSE; + bool8 memberLeft = FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK - || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) + if (gRfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK + || gRfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) { - if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) + if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS + || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) { - Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; - Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; + gRfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; + gRfu.partnerRecvStatuses[i] = RFU_STATUS_CHILD_LEAVE_READY; rfu_clearSlot(TYPE_NI_RECV, i); - rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); - retval = TRUE; + rfu_NI_setSendData(1 << i, 8, &gRfu.partnerSendStatuses[i], 1); + memberLeft = TRUE; } } - else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED) + else if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) { rfu_clearSlot(TYPE_NI_RECV, i); } } } - return retval; + return memberLeft; } -bool32 sub_80FA5D4(void) +bool32 RfuTryDisconnectLeavingChildren(void) { - u8 flags = 0; + u8 childrenLeaving = 0; s32 i; + + // Check all children, get those waiting to be disconnected for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_11) + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE) { - flags |= (1 << i); - Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK; + childrenLeaving |= (1 << i); + gRfu.partnerRecvStatuses[i] = RFU_STATUS_OK; } } - if (flags) + + // Disconnect any leaving children + if (childrenLeaving) { - rfu_REQ_disconnect(flags); + rfu_REQ_disconnect(childrenLeaving); rfu_waitREQComplete(); } + + // Return true if any children have left or are still waiting to leave for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10 || Rfu.partnerRecvStatuses[i] == RFU_STATUS_11) + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE_READY + || gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE) return TRUE; } return FALSE; } -bool32 CheckTrainerHasLeftByIdAndName(u16 trainerId, const u8 *trainerName) +bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name) { - u8 r1 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); - if (r1 == 0xFF) + u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); + if (idx == 0xFF) return TRUE; - if (Rfu.partnerSendStatuses[r1] == RFU_STATUS_LEAVE_GROUP) + if (gRfu.partnerSendStatuses[idx] == RFU_STATUS_LEAVE_GROUP) return TRUE; return FALSE; } -void SendByteToPartnerByIdAndName(u8 value, u16 trainerId, const u8 *trainerName) +void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name) { - u8 slotNo = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); - Rfu.partnerSendStatuses[slotNo] = value; - rfu_clearSlot(TYPE_NI_SEND, slotNo); - rfu_NI_setSendData(1 << slotNo, 8, Rfu.partnerSendStatuses + slotNo, 1); + u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); + gRfu.partnerSendStatuses[idx] = status; + rfu_clearSlot(TYPE_NI_SEND, idx); + rfu_NI_setSendData(1 << idx, 8, &gRfu.partnerSendStatuses[idx], 1); } void SendLeaveGroupNotice(void) { - Rfu.sendStatus = RFU_STATUS_LEAVE_GROUP_NOTICE; - rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot); - rfu_NI_setSendData(1 << Rfu.child_slot, 8, &Rfu.sendStatus, 1); + gRfu.sendStatus = RFU_STATUS_LEAVE_GROUP_NOTICE; + rfu_clearSlot(TYPE_NI_SEND, gRfu.childSlot); + rfu_NI_setSendData(1 << gRfu.childSlot, 8, &gRfu.sendStatus, 1); } -u32 WaitSendByteToPartnerByIdAndName(u16 trainerId, const u8 *trainerName) +u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name) { - u8 r0 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); - if (r0 == 0xFF) + u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); + if (idx == 0xFF) return 2; - if (gRfuSlotStatusNI[r0]->send.state == SLOT_STATE_READY) + if (gRfuSlotStatusNI[idx]->send.state == SLOT_STATE_READY) return 1; return 0; } @@ -1634,114 +1685,119 @@ static void UpdateChildStatuses(void) CheckForLeavingGroupMembers(); for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED) + if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS + || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10) - Rfu.partnerRecvStatuses[i] = RFU_STATUS_11; + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE_READY) + gRfu.partnerRecvStatuses[i] = RFU_STATUS_CHILD_LEAVE; rfu_clearSlot(TYPE_NI_SEND, i); } } } -static s32 GetRfuRecvStatus(void) +static s32 GetJoinGroupStatus(void) { - s32 retval = RFU_STATUS_OK; - if (Rfu.sendStatus == RFU_STATUS_LEAVE_GROUP_NOTICE) + s32 status = RFU_STATUS_OK; + if (gRfu.sendStatus == RFU_STATUS_LEAVE_GROUP_NOTICE) { - if (gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_FAILED) - rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot); + if (gRfuSlotStatusNI[gRfu.childSlot]->send.state == SLOT_STATE_SEND_SUCCESS + || gRfuSlotStatusNI[gRfu.childSlot]->send.state == SLOT_STATE_SEND_FAILED) + rfu_clearSlot(TYPE_NI_SEND, gRfu.childSlot); } - if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) + if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS + || gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot); - RfuSetStatus(Rfu.recvStatus, 0); - retval = Rfu.recvStatus; + rfu_clearSlot(TYPE_NI_RECV, gRfu.childSlot); + RfuSetStatus(gRfu.recvStatus, 0); + status = gRfu.recvStatus; } - else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED) + else if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) { - rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot); - retval = RFU_STATUS_JOIN_GROUP_NO; + rfu_clearSlot(TYPE_NI_RECV, gRfu.childSlot); + status = RFU_STATUS_JOIN_GROUP_NO; } - return retval; + return status; } -static void sub_80FA834(u8 taskId) +#define tState data[0] + +static void Task_PlayerExchange(u8 taskId) { s32 i; - if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) + if (gRfu.status == RFU_STATUS_FATAL_ERROR || gRfu.status == RFU_STATUS_CONNECTION_ERROR) { - Rfu.foundNewLeaderMaybe = FALSE; + gRfu.playerExchangeActive = FALSE; DestroyTask(taskId); } - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - if (AreNoPlayersReceiving()) + if (AreAllPlayersReadyToReceive()) { ResetBlockReceivedFlags(); LocalLinkPlayerToBlock(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { if (gReceivedRemoteLinkPlayers) - RfuPrepareSendBuffer(RFUCMD_PLAYERS_LIST_2); + RfuPrepareSendBuffer(RFUCMD_SEND_PLAYER_IDS_NEW); else - RfuPrepareSendBuffer(RFUCMD_PLAYERS_LIST); - gTasks[taskId].data[0] = 101; + RfuPrepareSendBuffer(RFUCMD_SEND_PLAYER_IDS); + gTasks[taskId].tState = 101; } else - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = 2; break; case 101: if (IsSendCmdComplete()) - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = 2; break; case 2: - if (Rfu.playerCount) - gTasks[taskId].data[0]++; + if (gRfu.playerCount) + gTasks[taskId].tState++; break; case 3: - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { - if (AreNoPlayersReceiving()) + if (AreAllPlayersReadyToReceive()) { - Rfu.cmdA100_blockRequestType = BLOCK_REQ_SIZE_NONE; + gRfu.blockRequestType = BLOCK_REQ_SIZE_NONE; RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } } else - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 4: if (AreAllPlayersFinishedReceiving()) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 5: - for (i = 0; i < Rfu.playerCount; i++) + for (i = 0; i < gRfu.playerCount; i++) { LinkPlayerFromBlock(i); Rfu_ResetBlockReceivedFlag(i); } - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 6: DestroyTask(taskId); gReceivedRemoteLinkPlayers = TRUE; - Rfu.foundNewLeaderMaybe = FALSE; + gRfu.playerExchangeActive = FALSE; rfu_LMAN_setLinkRecovery(1, 600); - if (Rfu.unionRoomChatters) + if (gRfu.newChildQueue) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unionRoomChatters >> i) & 1) + if ((gRfu.newChildQueue >> i) & 1) { - Rfu.bmChatLeaderMaybe = 1 << i; - Rfu.unionRoomChatters ^= (1 << i); + gRfu.nextChildBits = 1 << i; + gRfu.newChildQueue ^= (1 << i); } } } @@ -1749,33 +1805,59 @@ static void sub_80FA834(u8 taskId) } } -static void ClearSelectedLinkPlayerIds(u16 disconnectMask) +static void ClearSelectedLinkPlayerIds(u16 selected) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((disconnectMask >> i) & 1) - Rfu.linkPlayerIdx[i] = 0; + if ((selected >> i) & 1) + gRfu.linkPlayerIdx[i] = 0; } } -static void ReceiveRfuLinkPlayers(const struct SioInfo *chunk) +static void ReceiveRfuLinkPlayers(const struct SioInfo *sioInfo) { s32 i; - Rfu.playerCount = chunk->playerCount; + gRfu.playerCount = sioInfo->playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - Rfu.linkPlayerIdx[i] = chunk->linkPlayerIdx[i]; + gRfu.linkPlayerIdx[i] = sioInfo->linkPlayerIdx[i]; for (i = 0; i < MAX_RFU_PLAYERS; i++) { - gLinkPlayers[i] = chunk->linkPlayers[i]; + gLinkPlayers[i] = sioInfo->linkPlayers[i]; ConvertLinkPlayerName(gLinkPlayers + i); } } +// Could be relocated to top of file, but would also require relocating assert strings +static const char sASCII_PokemonSioInfo[] = "PokemonSioInfo"; +static const u8 sText_Akito[] = _(" あきと"); // Presumably "Akito Mori", one of Game Freak's programmers +static const char sASCII_LinkLossDisconnect[] = "LINK LOSS DISCONNECT!"; +static const char sASCII_LinkLossRecoveryNow[] = "LINK LOSS RECOVERY NOW"; +ALIGNED(4) static const char sASCII_30Spaces[] = {" "}; +static const char sASCII_15Spaces[] = {" "}; +static const char sASCII_8Spaces[] = {" "}; +ALIGNED(4) static const char sASCII_Space[] = {" "}; +static const char sASCII_Asterisk[] = {"*"}; +static const char sASCII_NowSlot[] = "NOWSLOT"; + +static const char sASCII_ClockCmds[][12] = { + " ", + "CLOCK DRIFT", + "BUSY SEND ", + "CMD REJECT ", + "CLOCK SLAVE" +}; + +static const char sASCII_ChildParentSearch[][8] = { + "CHILD ", + "PARENT", + "SEARCH" +}; + static void ValidateAndReceivePokemonSioInfo(void *recvBuffer) { - if (strcmp("PokemonSioInfo", recvBuffer) == 0) + if (strcmp(sASCII_PokemonSioInfo, recvBuffer) == 0) { ReceiveRfuLinkPlayers(recvBuffer); CpuFill16(0, recvBuffer, sizeof(struct SioInfo)); @@ -1783,75 +1865,76 @@ static void ValidateAndReceivePokemonSioInfo(void *recvBuffer) } } -static void Task_ExchangeLinkPlayers(u8 taskId) +// Equivalent to Task_PlayerExchange, but for when new children arrive after the first exchange +static void Task_PlayerExchangeUpdate(u8 taskId) { s32 i; - struct LinkPlayerBlock *r2; - struct SioInfo *r5; - u8 r4 = Rfu.linkPlayerIdx[gUnknown_843EC38[Rfu.unk_ce9]]; - if (Rfu.status == 1 || Rfu.status == 2) + struct LinkPlayerBlock *playerBlock; + struct SioInfo *sio; + u8 playerId = gRfu.linkPlayerIdx[sSlotToLinkPlayerTableId[gRfu.incomingChild]]; + if (gRfu.status == RFU_STATUS_FATAL_ERROR || gRfu.status == RFU_STATUS_CONNECTION_ERROR) { - Rfu.foundNewLeaderMaybe = FALSE; + gRfu.playerExchangeActive = FALSE; DestroyTask(taskId); } - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (IsSendCmdComplete()) { - ResetBlockReceivedFlag(r4); - RfuPrepareSendBuffer(RFUCMD_PLAYERS_LIST_2); - gTasks[taskId].data[0]++; + ResetBlockReceivedFlag(playerId); + RfuPrepareSendBuffer(RFUCMD_SEND_PLAYER_IDS_NEW); + gTasks[taskId].tState++; } break; case 1: if (IsSendCmdComplete()) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: - if ((GetBlockReceivedStatus() >> r4) & 1) + if ((GetBlockReceivedStatus() >> playerId) & 1) { - ResetBlockReceivedFlag(r4); - r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4]; - gLinkPlayers[r4] = r2->linkPlayer; - ConvertLinkPlayerName(gLinkPlayers + r4); - gTasks[taskId].data[0]++; + ResetBlockReceivedFlag(playerId); + playerBlock = (struct LinkPlayerBlock *)gBlockRecvBuffer[playerId]; + gLinkPlayers[playerId] = playerBlock->linkPlayer; + ConvertLinkPlayerName(&gLinkPlayers[playerId]); + gTasks[taskId].tState++; } break; case 3: // Prepare send block - r5 = (struct SioInfo *)gBlockSendBuffer; - memcpy(r5->magic, "PokemonSioInfo", sizeof("PokemonSioInfo")); - r5->playerCount = Rfu.playerCount; + sio = (struct SioInfo *)gBlockSendBuffer; + memcpy(sio->magic, sASCII_PokemonSioInfo, sizeof sASCII_PokemonSioInfo); + sio->playerCount = gRfu.playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i]; - memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); - gTasks[taskId].data[0]++; + sio->linkPlayerIdx[i] = gRfu.linkPlayerIdx[i]; + memcpy(sio->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); + gTasks[taskId].tState++; // fallthrough case 4: - r5 = (struct SioInfo *)gBlockSendBuffer; - r5->playerCount = Rfu.playerCount; + sio = (struct SioInfo *)gBlockSendBuffer; + sio->playerCount = gRfu.playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i]; - memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); + sio->linkPlayerIdx[i] = gRfu.linkPlayerIdx[i]; + memcpy(sio->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); if (SendBlock(0, gBlockSendBuffer, 0xa0)) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 5: if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1) { CpuFill16(0, gBlockRecvBuffer, sizeof(struct SioInfo)); ResetBlockReceivedFlag(0); - Rfu.foundNewLeaderMaybe = FALSE; - if (Rfu.unionRoomChatters) + gRfu.playerExchangeActive = FALSE; + if (gRfu.newChildQueue) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unionRoomChatters >> i) & 1) + if ((gRfu.newChildQueue >> i) & 1) { - Rfu.bmChatLeaderMaybe = 1 << i; - Rfu.unionRoomChatters ^= (1 << i); - Rfu.foundNewLeaderMaybe = TRUE; + gRfu.nextChildBits = 1 << i; + gRfu.newChildQueue ^= (1 << i); + gRfu.playerExchangeActive = TRUE; break; } } @@ -1862,23 +1945,24 @@ static void Task_ExchangeLinkPlayers(u8 taskId) } } -static void sub_80FACF0(u8 taskId) +// Equivalent to Task_PlayerExchange but for chatting with a Union Room partner +static void Task_PlayerExchangeChat(u8 taskId) { - if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) + if (gRfu.status == RFU_STATUS_FATAL_ERROR || gRfu.status == RFU_STATUS_CONNECTION_ERROR) DestroyTask(taskId); - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - if (Rfu.playerCount != 0) + if (gRfu.playerCount != 0) { LocalLinkPlayerToBlock(); SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: if (IsLinkTaskFinished()) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: if (GetBlockReceivedStatus() & 1) @@ -1894,31 +1978,31 @@ static void sub_80FACF0(u8 taskId) static void RfuCheckErrorStatus(void) { - if (Rfu.errorState == 1 && lman.childClockSlave_flag == 0) + if (gRfu.errorState == RFU_ERROR_STATE_OCCURRED && lman.childClockSlave_flag == 0) { - if (gMain.callback2 == c2_mystery_gift_e_reader_run) + if (gMain.callback2 == CB2_MysteryGiftEReader) gWirelessCommType = 2; SetMainCallback2(CB2_LinkError); gMain.savedCallback = CB2_LinkError; SetLinkErrorFromRfu( - (Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], - Rfu.recvQueue.count, - Rfu.sendQueue.count, + (gRfu.errorInfo << 16) | (gRfu.errorParams[0] << 8) | gRfu.errorParams[1], + gRfu.recvQueue.count, + gRfu.sendQueue.count, RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR ); - Rfu.errorState = 2; + gRfu.errorState = RFU_ERROR_STATE_PROCESSED; CloseLink(); } - else if (Rfu.sendQueue.full == TRUE || Rfu.recvQueue.full == TRUE) + else if (gRfu.sendQueue.full == TRUE || gRfu.recvQueue.full == TRUE) { if (lman.childClockSlave_flag) rfu_LMAN_requestChangeAgbClockMaster(); - RfuSetStatus(RFU_STATUS_FATAL_ERROR, 0x7000); - GetLinkmanErrorParams(0x7000); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); + RfuSetErrorParams(F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); } } -static void rfu_REQ_recvData_then_sendData(void) +static void RfuMain1_UnionRoom(void) { if (lman.parent_child == MODE_PARENT) { @@ -1928,180 +2012,183 @@ static void rfu_REQ_recvData_then_sendData(void) } } -bool32 LinkRfuMain1(void) +// Rfu equivalent of LinkMain1 +bool32 RfuMain1(void) { bool32 retval = FALSE; - Rfu.parentId = 0; + gRfu.parentId = 0; rfu_LMAN_manager_entity(Random()); - if (!Rfu.isShuttingDown) + if (!gRfu.isShuttingDown) { - switch (Rfu.parent_child) + switch (gRfu.parentChild) { case MODE_PARENT: - sub_80F911C(); + RfuMain1_Parent(); break; case MODE_CHILD: - retval = RfuProcessEnqueuedRecvBlock(); + retval = RfuMain1_Child(); break; case MODE_P_C_SWITCH: - rfu_REQ_recvData_then_sendData(); + RfuMain1_UnionRoom(); break; } } return retval; } -bool32 LinkRfuMain2(void) +// Rfu equivalent of LinkMain2 +bool32 RfuMain2(void) { bool32 retval = FALSE; - if (!Rfu.isShuttingDown) + if (!gRfu.isShuttingDown) { - if (Rfu.parent_child == MODE_PARENT) - retval = sub_80F9204(); + if (gRfu.parentChild == MODE_PARENT) + retval = RfuMain2_Parent(); RfuCheckErrorStatus(); } return retval; } -static void CopyPlayerNameToUnameBuffer(void) +static void SetHostRfuUsername(void) { StringCopy(gHostRfuUsername, gSaveBlock2Ptr->playerName); } -void ClearAndInitHostRFUtgtGname(void) +void ResetHostRfuGameData(void) { memset(&gHostRfuGameData, 0, RFU_GAME_NAME_LENGTH); InitHostRFUtgtGname(&gHostRfuGameData, ACTIVITY_NONE, FALSE, 0); } -void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started) +void SetHostRfuGameData(u8 activity, u32 partnerInfo, u32 startedActivity) { - InitHostRFUtgtGname(&gHostRfuGameData, activity, started, child_sprite_genders); + InitHostRFUtgtGname(&gHostRfuGameData, activity, startedActivity, partnerInfo); } -void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard) +void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard) { - gHostRfuGameData.unk_00.hasNews = hasNews; - gHostRfuGameData.unk_00.hasCard = hasCard; + gHostRfuGameData.compatibility.hasNews = hasNews; + gHostRfuGameData.compatibility.hasCard = hasCard; } -void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level) +void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level) { - gHostRfuGameData.type = type; - gHostRfuGameData.species = species; - gHostRfuGameData.level = level; + gHostRfuGameData.tradeType = type; + gHostRfuGameData.tradeSpecies = species; + gHostRfuGameData.tradeLevel = level; } -void UpdateGameData_GroupLockedIn(bool8 started) +void UpdateGameData_GroupLockedIn(bool8 startedActivity) { - gHostRfuGameData.started = started; - rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRfuGameData, gHostRfuUsername); + gHostRfuGameData.startedActivity = startedActivity; + rfu_REQ_configGameData(0, RFU_SERIAL_GAME, (void *)&gHostRfuGameData, gHostRfuUsername); } -void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started) +void UpdateGameData_SetActivity(u8 activity, u32 partnerInfo, u32 startedActivity) { - if (activity) - SetHostRFUtgtGname(activity, child_sprite_genders, started); - rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRfuGameData, gHostRfuUsername); + if (activity != ACTIVITY_NONE) + SetHostRfuGameData(activity, partnerInfo, startedActivity); + rfu_REQ_configGameData(0, RFU_SERIAL_GAME, (void *)&gHostRfuGameData, gHostRfuUsername); } -void sub_80FB030(u32 linkPlayerCount) +void SetUnionRoomChatPlayerData(u32 numPlayers) { s32 i; u32 numConnectedChildren; - u32 child_sprite_genders; - s32 bm_child_slots; + u32 partnerInfo; + s32 slots; - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { numConnectedChildren = 0; - child_sprite_genders = 0; - bm_child_slots = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot; + partnerInfo = 0; + slots = gRfu.parentSlots ^ gRfu.disconnectSlots; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((bm_child_slots >> i) & 1) + if ((slots >> i) & 1) { - // The 0x80 prevents this element from being incorrectly read as a 0. - child_sprite_genders |= (( - 0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7) - ) << (numConnectedChildren << 3)); + // Only trainerId is shifted by the number of children, so the active flag and gender + // are only ever set for the first child + partnerInfo |= ((PINFO_ACTIVE_FLAG + | ((gLinkPlayers[gRfu.linkPlayerIdx[i]].gender & 1) << PINFO_GENDER_SHIFT) + | (gLinkPlayers[gRfu.linkPlayerIdx[i]].trainerId & PINFO_TID_MASK)) << (numConnectedChildren * 8)); numConnectedChildren++; - if (numConnectedChildren == linkPlayerCount - 1) + if (numConnectedChildren == numPlayers - 1) break; } } - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, child_sprite_genders, 0); + UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, partnerInfo, FALSE); } } -static void GetLinkmanErrorParams(u32 msg) +static void RfuSetErrorParams(u32 errorInfo) { - if (Rfu.errorState == 0) + if (gRfu.errorState == RFU_ERROR_STATE_NONE) { - Rfu.linkman_param[0] = lman.param[0]; - Rfu.linkman_param[1] = lman.param[1]; - Rfu.linkman_msg = msg; - Rfu.errorState = 1; + gRfu.errorParams[0] = lman.param[0]; + gRfu.errorParams[1] = lman.param[1]; + gRfu.errorInfo = errorInfo; + gRfu.errorState = RFU_ERROR_STATE_OCCURRED; } } static void ResetErrorState(void) { - Rfu.errorState = 0; + gRfu.errorState = RFU_ERROR_STATE_NONE; } -void sub_80FB128(bool32 a0) +void RfuSetIgnoreError(bool32 enable) { - if (!a0) - Rfu.errorState = 0; + if (!enable) + gRfu.errorState = RFU_ERROR_STATE_NONE; else - Rfu.errorState = 4; + gRfu.errorState = RFU_ERROR_STATE_IGNORE; } -static void sub_80FB154(void) +static void DisconnectNewChild(void) { - sub_80FBE20(lman.acceptSlot_flag, 1); - Rfu.RfuFunc = NULL; + SendDisconnectCommand(lman.acceptSlot_flag, RFU_DISCONNECT_ERROR); + gRfu.callback = NULL; } -static void sub_80FB174(void) +static void StartDisconnectNewChild(void) { - Rfu.RfuFunc = sub_80FB154; + gRfu.callback = DisconnectNewChild; } -static void LmanCallback_Parent2(u8 msg, u8 param_count) +static void LinkManagerCB_Parent(u8 msg, u8 param_count) { u8 i; - u8 bmDisconnectFlag = 0; + u8 disconnectFlag = 0; switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: - Rfu.state = 2; + gRfu.state = RFUSTATE_PARENT_CONNECT; break; case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: break; case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: - sub_80FB564(lman.param[0]); + ParentResetChildRecvMetadata(lman.param[0]); for (i = 0; i < RFU_CHILD_MAX; i++) { if ((lman.param[0] >> i) & 1) { struct RfuGameData *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; - if (structPtr->activity == GetHostRFUtgtGname()->activity) + if (structPtr->activity == GetHostRfuGameData()->activity) { - Rfu.partnerSendStatuses[i] = RFU_STATUS_OK; - Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK; - rfu_setRecvBuffer(TYPE_NI, i, Rfu.partnerRecvStatuses + i, 1); + gRfu.partnerSendStatuses[i] = RFU_STATUS_OK; + gRfu.partnerRecvStatuses[i] = RFU_STATUS_OK; + rfu_setRecvBuffer(TYPE_NI, i, &gRfu.partnerRecvStatuses[i], sizeof(gRfu.partnerRecvStatuses[0])); } else { - bmDisconnectFlag |= (1 << i); + disconnectFlag |= (1 << i); } } } - if (bmDisconnectFlag) + if (disconnectFlag) { - rfu_REQ_disconnect(bmDisconnectFlag); + rfu_REQ_disconnect(disconnectFlag); rfu_waitREQComplete(); } break; @@ -2110,106 +2197,103 @@ static void LmanCallback_Parent2(u8 msg, u8 param_count) case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED: break; case LMAN_MSG_END_WAIT_CHILD_NAME: - if (Rfu.acceptSlot_flag != lman.acceptSlot_flag) + if (gRfu.acceptSlot_flag != lman.acceptSlot_flag) { - rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag); + rfu_REQ_disconnect(gRfu.acceptSlot_flag ^ lman.acceptSlot_flag); rfu_waitREQComplete(); } - Rfu.state = 17; + gRfu.state = RFUSTATE_PARENT_FINALIZE_START; break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: - Rfu.linkLossRecoveryState = 1; + gRfu.linkLossRecoveryState = 1; break; case LMAN_MSG_LINK_RECOVERY_SUCCESSED: - Rfu.linkLossRecoveryState = 3; + gRfu.linkLossRecoveryState = 3; break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: - Rfu.linkLossRecoveryState = 4; - Rfu.bm_PartnerFlags &= ~lman.param[0]; + gRfu.linkLossRecoveryState = 4; + gRfu.parentSlots &= ~lman.param[0]; if (gReceivedRemoteLinkPlayers == 1) { - if (Rfu.bm_PartnerFlags == 0) - GetLinkmanErrorParams(msg); + if (gRfu.parentSlots == 0) + RfuSetErrorParams(msg); else - sub_80FB174(); + StartDisconnectNewChild(); } RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; - case 0x34: - break; + case 0x34: // ? Not a valid LMAN_MSG value case LMAN_MSG_RFU_POWER_DOWN: case LMAN_MSG_MANAGER_STOPPED: case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; case LMAN_MSG_LMAN_API_ERROR_RETURN: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.isShuttingDown = TRUE; + RfuSetErrorParams(msg); + gRfu.isShuttingDown = TRUE; break; case LMAN_MSG_REQ_API_ERROR: case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - Rfu.unk_cdb = TRUE; + gRfu.parentFinished = TRUE; break; } } -static const u8 unref_843EDF3[] = _(" あきと"); - -static void LmanCallback_Child(u8 msg, u8 param_count) +static void LinkManagerCB_Child(u8 msg, u8 param_count) { switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: - Rfu.state = 6; + gRfu.state = RFUSTATE_CHILD_CONNECT; break; case LMAN_MSG_PARENT_FOUND: - Rfu.parentId = lman.param[0]; + gRfu.parentId = lman.param[0]; break; case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED: break; case LMAN_MSG_CONNECT_PARENT_SUCCESSED: - Rfu.child_slot = lman.param[0]; + gRfu.childSlot = lman.param[0]; break; case LMAN_MSG_CONNECT_PARENT_FAILED: RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: - Rfu.state = 11; - Rfu.sendStatus = RFU_STATUS_OK; - Rfu.recvStatus = RFU_STATUS_OK; - rfu_setRecvBuffer(TYPE_NI, Rfu.child_slot, &Rfu.recvStatus, 1); - rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); + gRfu.state = RFUSTATE_CHILD_TRY_JOIN; + gRfu.sendStatus = RFU_STATUS_OK; + gRfu.recvStatus = RFU_STATUS_OK; + rfu_setRecvBuffer(TYPE_NI, gRfu.childSlot, &gRfu.recvStatus, sizeof(gRfu.recvStatus)); + rfu_setRecvBuffer(TYPE_UNI, gRfu.childSlot, gRfu.childRecvQueue, sizeof(gRfu.childRecvQueue)); break; case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: - Rfu.linkLossRecoveryState = 2; - if (Rfu.recvStatus == RFU_STATUS_JOIN_GROUP_NO) + gRfu.linkLossRecoveryState = 2; + if (gRfu.recvStatus == RFU_STATUS_JOIN_GROUP_NO) break; case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: - if (Rfu.linkLossRecoveryState != 2) - Rfu.linkLossRecoveryState = 4; - if (Rfu.recvStatus != RFU_STATUS_LEAVE_GROUP) + if (gRfu.linkLossRecoveryState != 2) + gRfu.linkLossRecoveryState = 4; + if (gRfu.recvStatus != RFU_STATUS_LEAVE_GROUP) RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); - Debug_PrintString("LINK LOSS DISCONNECT!", 5, 5); + Debug_PrintString(sASCII_LinkLossDisconnect, 5, 5); if (gReceivedRemoteLinkPlayers == 1) - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: - Rfu.linkLossRecoveryState = 1; - Debug_PrintString("LINK LOSS RECOVERY NOW", 5, 5); + gRfu.linkLossRecoveryState = 1; + Debug_PrintString(sASCII_LinkLossRecoveryNow, 5, 5); break; case LMAN_MSG_LINK_RECOVERY_SUCCESSED: - Rfu.linkLossRecoveryState = 3; - Rfu.linkRecovered = 1; + gRfu.linkLossRecoveryState = 3; + gRfu.linkRecovered = TRUE; break; - case 0x34: + case 0x34: // ? Not a valid LMAN_MSG value break; case LMAN_MSG_RFU_POWER_DOWN: case LMAN_MSG_MANAGER_STOPPED: @@ -2217,45 +2301,45 @@ static void LmanCallback_Child(u8 msg, u8 param_count) break; case LMAN_MSG_LMAN_API_ERROR_RETURN: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.isShuttingDown = TRUE; + RfuSetErrorParams(msg); + gRfu.isShuttingDown = TRUE; break; case LMAN_MSG_REQ_API_ERROR: case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.unk_cdb = TRUE; + RfuSetErrorParams(msg); + gRfu.parentFinished = TRUE; break; } } -static void sub_80FB564(s32 bmConnectedFlag) +static void ParentResetChildRecvMetadata(s32 slot) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((bmConnectedFlag >> i) & 1) + if ((slot >> i) & 1) { - Rfu.unk_cea[i] = 0; - Rfu.unk_cee[i] = 0xFF; + gRfu.numChildRecvErrors[i] = 0; + gRfu.childRecvIds[i] = 0xFF; } } } -static u8 GetNewChildrenInUnionRoomChat(s32 bmNewChildSlot) +static u8 GetNewChildrenInUnionRoomChat(s32 emptySlotMask) { u8 ret = 0; u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((bmNewChildSlot >> i) & 1) + if ((emptySlotMask >> i) & 1) { - struct RfuGameData *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; - if (structPtr->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + struct RfuGameData *data = (void *)&gRfuLinkStatus->partner[i].gname; + if (data->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) ret |= (1 << i); } } @@ -2263,77 +2347,77 @@ static u8 GetNewChildrenInUnionRoomChat(s32 bmNewChildSlot) return ret; } -static void LmanCallback_Parent(u8 msg, u8 param_count) +static void LinkManagerCB_UnionRoom(u8 msg, u8 param_count) { - u8 r1; + u8 acceptSlot; switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: - Rfu.state = 17; + gRfu.state = RFUSTATE_UR_CONNECT; break; case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: RfuSetStatus(RFU_STATUS_NEW_CHILD_DETECTED, 0); break; case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && !Rfu.linkClosing) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && !gRfu.stopNewConnections) { - u8 bmAcceptSlot = GetNewChildrenInUnionRoomChat(lman.param[0]); - if (bmAcceptSlot != 0) + u8 newChildren = GetNewChildrenInUnionRoomChat(lman.param[0]); + if (newChildren != 0) { - r1 = 1 << CountTrailingZeroes(bmAcceptSlot); - if (Rfu.unionRoomChatters == 0 && !Rfu.foundNewLeaderMaybe) + acceptSlot = 1 << Rfu_GetIndexOfNewestChild(newChildren); + if (gRfu.newChildQueue == 0 && !gRfu.playerExchangeActive) { - Rfu.bmChatLeaderMaybe = r1; - Rfu.unionRoomChatters |= (r1 ^ bmAcceptSlot); - Rfu.foundNewLeaderMaybe = TRUE; + gRfu.nextChildBits = acceptSlot; + gRfu.newChildQueue |= (acceptSlot ^ newChildren); + gRfu.playerExchangeActive = TRUE; } else { - Rfu.unionRoomChatters |= bmAcceptSlot; + gRfu.newChildQueue |= newChildren; } } - if (bmAcceptSlot != lman.param[0]) + if (newChildren != lman.param[0]) { - Rfu.bm_DisconnectSlot |= (bmAcceptSlot ^ lman.param[0]); - Rfu.unk_ce4 = 2; + gRfu.disconnectSlots |= (newChildren ^ lman.param[0]); + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; } } - else if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM)) + else if (GetHostRfuGameData()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM)) { rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); } - sub_80FB564(lman.param[0]); + ParentResetChildRecvMetadata(lman.param[0]); break; case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED: break; case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED: break; case LMAN_MSG_END_WAIT_CHILD_NAME: - if (GetHostRFUtgtGname()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1) + if (GetHostRfuGameData()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1) { - r1 = 1 << CountTrailingZeroes(lman.param[0]); - rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1); + acceptSlot = 1 << Rfu_GetIndexOfNewestChild(lman.param[0]); + rfu_REQ_disconnect(lman.acceptSlot_flag ^ acceptSlot); rfu_waitREQComplete(); } - if (Rfu.state == 15) - Rfu.state = 16; + if (gRfu.state == RFUSTATE_UR_STOP_MANAGER_END) + gRfu.state = RFUSTATE_UR_FINALIZE; break; case LMAN_MSG_PARENT_FOUND: - Rfu.parentId = lman.param[0]; + gRfu.parentId = lman.param[0]; break; case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED: break; case LMAN_MSG_CONNECT_PARENT_SUCCESSED: - Rfu.child_slot = lman.param[0]; + gRfu.childSlot = lman.param[0]; break; case LMAN_MSG_CONNECT_PARENT_FAILED: - Rfu.state = 18; - if (Rfu.unk_ccf < 2) + gRfu.state = RFUSTATE_UR_CONNECT_END; + if (gRfu.connectParentFailures < 2) { - Rfu.unk_ccf++; - CreateTask(sub_80FC028, 2); + gRfu.connectParentFailures++; + CreateTask(Task_TryConnectToUnionRoomParent, 2); } else { @@ -2341,52 +2425,54 @@ static void LmanCallback_Parent(u8 msg, u8 param_count) } break; case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: - Rfu.state = 13; + gRfu.state = RFUSTATE_UR_PLAYER_EXCHANGE; RfuSetStatus(RFU_STATUS_CHILD_SEND_COMPLETE, 0); - rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); + rfu_setRecvBuffer(TYPE_UNI, gRfu.childSlot, gRfu.childRecvQueue, sizeof(gRfu.childRecvQueue)); break; case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: if (lman.acceptSlot_flag & lman.param[0]) - Rfu.linkLossRecoveryState = 1; + gRfu.linkLossRecoveryState = 1; break; case LMAN_MSG_LINK_RECOVERY_SUCCESSED: - Rfu.linkLossRecoveryState = 3; + gRfu.linkLossRecoveryState = 3; if (gRfuLinkStatus->parentChild == MODE_CHILD) - Rfu.linkRecovered = 1; + gRfu.linkRecovered = TRUE; break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: - Rfu.linkLossRecoveryState = 2; + gRfu.linkLossRecoveryState = 2; // fallthrough case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: - if (Rfu.linkLossRecoveryState != 2) - Rfu.linkLossRecoveryState = 4; - if (Rfu.parent_child == MODE_PARENT) + if (gRfu.linkLossRecoveryState != 2) + gRfu.linkLossRecoveryState = 4; + if (gRfu.parentChild == MODE_PARENT) { if (gReceivedRemoteLinkPlayers == 1) { - Rfu.bm_PartnerFlags &= ~(lman.param[0]); - if (Rfu.bm_PartnerFlags == 0) - GetLinkmanErrorParams(msg); + gRfu.parentSlots &= ~(lman.param[0]); + if (gRfu.parentSlots == 0) + RfuSetErrorParams(msg); else - sub_80FB174(); + StartDisconnectNewChild(); } } - else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1) + else if (gRfu.disconnectMode != RFU_DISCONNECT_NORMAL && gReceivedRemoteLinkPlayers == 1) { - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); rfu_LMAN_stopManager(0); } - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) - Rfu.state = 17; + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL + && lman.pcswitch_flag == 0 && + FuncIsActiveTask(Task_UnionRoomListen) == TRUE) + gRfu.state = RFUSTATE_UR_CONNECT; RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_DISCONNECTED_BY_USER: - Rfu.bm_DisconnectSlot = 0; + gRfu.disconnectSlots = 0; break; case LMAN_MSG_RFU_POWER_DOWN: case LMAN_MSG_MANAGER_STOPPED: @@ -2394,34 +2480,34 @@ static void LmanCallback_Parent(u8 msg, u8 param_count) break; case LMAN_MSG_LMAN_API_ERROR_RETURN: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.isShuttingDown = TRUE; + RfuSetErrorParams(msg); + gRfu.isShuttingDown = TRUE; break; case LMAN_MSG_REQ_API_ERROR: case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - Rfu.unk_cdb = FALSE; + gRfu.parentFinished = FALSE; break; } } -void sub_80FB9D0(void) +void RfuSetNormalDisconnectMode(void) { - Rfu.unk_ce4 = 2; + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; } -void RfuSetStatus(u8 status, u16 msg) +void RfuSetStatus(u8 status, u16 errorInfo) { - Rfu.status = status; - Rfu.linkman_msg = msg; + gRfu.status = status; + gRfu.errorInfo = errorInfo; } u8 RfuGetStatus(void) { - return Rfu.status; + return gRfu.status; } bool32 RfuHasErrored(void) @@ -2433,17 +2519,17 @@ bool32 RfuHasErrored(void) return FALSE; } -bool32 RfuHasFoundNewLeader(void) +bool32 Rfu_IsPlayerExchangeActive(void) { - return Rfu.foundNewLeaderMaybe; + return gRfu.playerExchangeActive; } bool8 Rfu_IsMaster(void) { - return Rfu.parent_child; + return gRfu.parentChild; } -void RFUVSync(void) +void RfuVSync(void) { rfu_LMAN_syncVBlank(); } @@ -2453,14 +2539,15 @@ void ClearRecvCommands(void) CpuFill32(0, gRecvCmds, sizeof(gRecvCmds)); } -static void sub_80FBA64(void) +static void VBlank_RfuIdle(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void sub_80FBA78(void) +// Unused +static void Debug_RfuIdle(void) { s32 i; @@ -2468,14 +2555,14 @@ static void sub_80FBA78(void) FreeAllSpritePalettes(); ResetTasks(); ResetPaletteFade(); - SetVBlankCallback(sub_80FBA64); + SetVBlankCallback(VBlank_RfuIdle); if (IsWirelessAdapterConnected()) { gLinkType = LINKTYPE_TRADE; SetWirelessCommType1(); OpenLink(); SeedRng(gMain.vblankCounter2); - for (i = 0; i < RFU_CHILD_MAX; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP); @@ -2483,29 +2570,29 @@ static void sub_80FBA78(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - LinkRfu_CreateIdleTask(); - SetMainCallback2(sub_80FBB74); + CreateTask_RfuIdle(); + SetMainCallback2(CB2_RfuIdle); } } bool32 IsUnionRoomListenTaskActive(void) { - return FuncIsActiveTask(Task_LinkRfu_UnionRoomListen); + return FuncIsActiveTask(Task_UnionRoomListen); } -void LinkRfu_CreateIdleTask(void) +void CreateTask_RfuIdle(void) { - if (!FuncIsActiveTask(Task_idle)) - Rfu.idleTaskId = CreateTask(Task_idle, 0); + if (!FuncIsActiveTask(Task_Idle)) + gRfu.idleTaskId = CreateTask(Task_Idle, 0); } -void LinkRfu_DestroyIdleTask(void) +void DestroyTask_RfuIdle(void) { - if (FuncIsActiveTask(Task_idle) == TRUE) - DestroyTask(Rfu.idleTaskId); + if (FuncIsActiveTask(Task_Idle) == TRUE) + DestroyTask(gRfu.idleTaskId); } -static void sub_80FBB74(void) +static void CB2_RfuIdle(void) { RunTasks(); AnimateSprites(); @@ -2513,35 +2600,35 @@ static void sub_80FBB74(void) UpdatePaletteFade(); } -void InitializeRfuLinkManager_LinkLeader(u32 availSlots) +void InitializeRfuLinkManager_LinkLeader(u32 groupMax) { - Rfu.parent_child = MODE_PARENT; - CopyPlayerNameToUnameBuffer(); - rfu_LMAN_initializeManager(LmanCallback_Parent2, NULL); + gRfu.parentChild = MODE_PARENT; + SetHostRfuUsername(); + rfu_LMAN_initializeManager(LinkManagerCB_Parent, NULL); sRfuReqConfig = sRfuReqConfigTemplate; - sRfuReqConfig.availSlot_flag = sAvailSlots[availSlots - 1]; - CreateTask_LinkLeaderSearchForChildren(); + sRfuReqConfig.availSlot_flag = sAvailSlots[groupMax - 1]; + CreateTask_ParentSearchForChildren(); } void InitializeRfuLinkManager_JoinGroup(void) { - Rfu.parent_child = MODE_CHILD; - CopyPlayerNameToUnameBuffer(); - rfu_LMAN_initializeManager(LmanCallback_Child, MscCallback_Child); - CreateTask_JoinGroupSearchForParent(); + gRfu.parentChild = MODE_CHILD; + SetHostRfuUsername(); + rfu_LMAN_initializeManager(LinkManagerCB_Child, MscCallback_Child); + CreateTask_ChildSearchForParent(); } void InitializeRfuLinkManager_EnterUnionRoom(void) { if (QL_IS_PLAYBACK_STATE) return; - Rfu.parent_child = 2; - CopyPlayerNameToUnameBuffer(); - rfu_LMAN_initializeManager(LmanCallback_Parent, NULL); + gRfu.parentChild = MODE_P_C_SWITCH; + SetHostRfuUsername(); + rfu_LMAN_initializeManager(LinkManagerCB_UnionRoom, NULL); sRfuReqConfig = sRfuReqConfigTemplate; sRfuReqConfig.linkRecovery_enable = 0; sRfuReqConfig.linkRecovery_period = 600; - Rfu.searchTaskId = CreateTask(Task_LinkRfu_UnionRoomListen, 1); + gRfu.searchTaskId = CreateTask(Task_UnionRoomListen, 1); } static u16 ReadU16(const void *ptr) @@ -2557,169 +2644,186 @@ static u16 ReadU16(const void *ptr) * Returns 0xFF if not found. * ================================================================ */ -static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId) +static u8 GetPartnerIndexByNameAndTrainerID(const u8 *name, u16 trainerId) { u8 i; - u8 ret = 0xFF; + u8 idx = 0xFF; for (i = 0; i < RFU_CHILD_MAX; i++) { - u16 partnerTrainerId = ReadU16(((struct RfuGameData *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId); + u16 partnerTrainerId = ReadU16(((struct RfuGameData *)gRfuLinkStatus->partner[i].gname)->compatibility.playerTrainerId); if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[i].serialNo) - && !StringCompare(trainerName, gRfuLinkStatus->partner[i].uname) + && !StringCompare(name, gRfuLinkStatus->partner[i].uname) && trainerId == partnerTrainerId) { - ret = i; + idx = i; if (gRfuLinkStatus->partner[i].slot != 0xFF) break; } } - return ret; + return idx; } -static void RfuReqDisconnectSlot(u32 bmDisconnectSlot) +static void RfuReqDisconnectSlot(u32 slot) { - rfu_REQ_disconnect(bmDisconnectSlot); + rfu_REQ_disconnect(slot); rfu_waitREQComplete(); - Rfu.bm_PartnerFlags &= ~(bmDisconnectSlot); - rfu_clearSlot(TYPE_UNI_SEND, Rfu.unk_cda); - rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, 70); - Rfu.unk_cda = CountTrailingZeroes(Rfu.bm_PartnerFlags); + gRfu.parentSlots &= ~slot; + rfu_clearSlot(TYPE_UNI_SEND, gRfu.parentSendSlot); + rfu_UNI_setSendData(gRfu.parentSlots, gRfu.recvCmds, sizeof(gRfu.recvCmds)); + gRfu.parentSendSlot = Rfu_GetIndexOfNewestChild(gRfu.parentSlots); } void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId) { - u8 var = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); - if (var != 0xFF) - RfuReqDisconnectSlot(1 << var); + u8 index = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); + if (index != 0xFF) + RfuReqDisconnectSlot(1 << index); } -void sub_80FBD6C(u32 a0) +void Rfu_DisconnectPlayerById(u32 playerIdx) { - if (a0 != 0) + if (playerIdx != 0) { s32 i; - u8 var = 0; + u8 toDisconnect = 0; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.linkPlayerIdx[i] == a0 && (Rfu.bm_PartnerFlags >> i) & 1) - var |= 1 << i; + if (gRfu.linkPlayerIdx[i] == playerIdx && (gRfu.parentSlots >> i) & 1) + toDisconnect |= 1 << i; } - if (var) - sub_80FBE20(var, 2); + if (toDisconnect) + SendDisconnectCommand(toDisconnect, RFU_DISCONNECT_NORMAL); } } -static void sub_80FBDB8(u8 taskId) +#define tDisconnectPlayers data[0] +#define tDisconnectMode data[1] + +static void Task_SendDisconnectCommand(u8 taskId) { - if (IsSendCmdComplete() && !Rfu.foundNewLeaderMaybe) + if (IsSendCmdComplete() && !gRfu.playerExchangeActive) { - RfuPrepareSendBuffer(RFUCMD_PARENT_DISCONNECT); - gSendCmd[1] = gTasks[taskId].data[0]; - gSendCmd[2] = gTasks[taskId].data[1]; - Rfu.playerCount -= sNumSetBits[gTasks[taskId].data[0]]; - gSendCmd[3] = Rfu.playerCount; + RfuPrepareSendBuffer(RFUCMD_DISCONNECT); + gSendCmd[1] = gTasks[taskId].tDisconnectPlayers; + gSendCmd[2] = gTasks[taskId].tDisconnectMode; + gRfu.playerCount -= sPlayerBitsToCount[gTasks[taskId].tDisconnectPlayers]; + gSendCmd[3] = gRfu.playerCount; DestroyTask(taskId); } } -static void sub_80FBE20(u32 a0, u32 a1) +static void SendDisconnectCommand(u32 playersToDisconnect, u32 disconnectMode) { - u8 taskId = FindTaskIdByFunc(sub_80FBDB8); - if (taskId == 0xFF) + u8 taskId = FindTaskIdByFunc(Task_SendDisconnectCommand); + if (taskId == TASK_NONE) { - taskId = CreateTask(sub_80FBDB8, 5); - gTasks[taskId].data[0] = a0; + taskId = CreateTask(Task_SendDisconnectCommand, 5); + gTasks[taskId].tDisconnectPlayers = playersToDisconnect; } else { - gTasks[taskId].data[0] |= a0; + // Task is already active, just add the new players to disconnect + gTasks[taskId].tDisconnectPlayers |= playersToDisconnect; } - gTasks[taskId].data[1] = a1; + gTasks[taskId].tDisconnectMode = disconnectMode; } +#undef tDisconnectPlayers +#undef tDisconnectMode + +#define tTime data[15] + static void Task_RfuReconnectWithParent(u8 taskId) { s16 *data = gTasks[taskId].data; - if (ContactedByParentAttemptingToReconnect()) + if (CanTryReconnectParent()) { u8 id = GetPartnerIndexByNameAndTrainerID((u8 *)data, ReadU16(&data[8])); if (id != 0xFF) { if (gRfuLinkStatus->partner[id].slot != 0xFF) { - Rfu.reconnectedParentIdx = id; - if (IsParentSuccessfullyReconnected()) + gRfu.reconnectParentId = id; + if (TryReconnectParent()) DestroyTask(taskId); } - else if (GetHostRFUtgtGname()->activity == ACTIVITY_WCARD2 || GetHostRFUtgtGname()->activity == ACTIVITY_WNEWS2) + else if (GetHostRfuGameData()->activity == ACTIVITY_WCARD2 + || GetHostRfuGameData()->activity == ACTIVITY_WNEWS2) { - data[15]++; + tTime++; } else { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Error, unable to reconnect to parent + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } } else { - data[15]++; - Rfu.reconnectedParentIdx = id; + tTime++; + gRfu.reconnectParentId = id; } } else { - data[15]++; + tTime++; } - if (data[15] > 240) + if (tTime > 240) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Timeout error + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } } -void CreateTask_RfuReconnectWithParent(const u8 *trainerName, u16 trainerId) +#undef tTime + +void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId) { u8 taskId; s16 *data; - Rfu.status = RFU_STATUS_OK; + gRfu.status = RFU_STATUS_OK; taskId = CreateTask(Task_RfuReconnectWithParent, 3); data = gTasks[taskId].data; - StringCopy((u8 *)(data), trainerName); + StringCopy((u8 *)(data), name); data[8] = trainerId; } -static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct RfuGameData *partnerGname) +static bool32 IsPartnerActivityIncompatible(s16 activity, struct RfuGameData *partner) { - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - if (partnerGname->activity != (ACTIVITY_CHAT | IN_UNION_ROOM)) + // Host trying to chat, but partner isn't + if (partner->activity != (ACTIVITY_CHAT | IN_UNION_ROOM)) return TRUE; } - else if (partnerGname->activity != IN_UNION_ROOM) + else if (partner->activity != IN_UNION_ROOM) { + // Partner not in union room return TRUE; } else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM)) { - struct RfuGameData *myTradeGname = (struct RfuGameData *)&Rfu.tgtData.gname; - if (myTradeGname->species == SPECIES_EGG) + // Verify that the trade offered hasn't changed + struct RfuGameData *original = (struct RfuGameData *)&gRfu.parent.gname; + if (original->tradeSpecies == SPECIES_EGG) { - if (partnerGname->species == myTradeGname->species) + if (partner->tradeSpecies == original->tradeSpecies) return FALSE; else return TRUE; } - else if (partnerGname->species != myTradeGname->species - || partnerGname->level != myTradeGname->level - || partnerGname->type != myTradeGname->type) + else if (partner->tradeSpecies != original->tradeSpecies + || partner->tradeLevel != original->tradeLevel + || partner->tradeType != original->tradeType) { return TRUE; } @@ -2728,79 +2832,92 @@ static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct return FALSE; } -static void sub_80FC028(u8 taskId) +#define tTime data[0] +#define tActivity data[1] + +static void Task_TryConnectToUnionRoomParent(u8 taskId) { - if (Rfu.status == RFU_STATUS_NEW_CHILD_DETECTED) + // Stop task if player is the new parent + if (gRfu.status == RFU_STATUS_NEW_CHILD_DETECTED) DestroyTask(taskId); if (++gTasks[taskId].data[0] > 300) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Timeout error + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } - if (Rfu.parentId != 0 && lman.parent_child == MODE_CHILD) + // Check if parent should be searched for + if (gRfu.parentId != 0 && lman.parent_child == MODE_CHILD) { - u16 trainerId = ReadU16(((struct RfuGameData *)&Rfu.tgtData.gname)->unk_00.playerTrainerId); - u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.tgtData.uname, trainerId); + // Search for parent + u16 trainerId = ReadU16(((struct RfuGameData *)&gRfu.parent.gname)->compatibility.playerTrainerId); + u8 id = GetPartnerIndexByNameAndTrainerID(gRfu.parent.uname, trainerId); if (id != 0xFF) { - if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (struct RfuGameData *)&gRfuLinkStatus->partner[id].gname)) + // Parent found, try to connect + if (!IsPartnerActivityIncompatible(gTasks[taskId].data[1], (struct RfuGameData *)&gRfuLinkStatus->partner[id].gname)) { if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 90)) { - Rfu.state = 10; + // Succesfully connected to parent + gRfu.state = RFUSTATE_CONNECTED; DestroyTask(taskId); } } else { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Incompatible partner activity + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } } } } -void sub_80FC114(const u8 *name, struct RfuGameData *structPtr, u8 activity) +void TryConnectToUnionRoomParent(const u8 *name, struct RfuGameData *parent, u8 activity) { - u8 taskId, taskId2; + u8 taskId, listenTaskId; - Rfu.unk_ccf = 0; - Rfu.status = RFU_STATUS_OK; - StringCopy(Rfu.tgtData.uname, name); - memcpy(Rfu.tgtData.gname, structPtr, RFU_GAME_NAME_LENGTH); + gRfu.connectParentFailures = 0; + gRfu.status = RFU_STATUS_OK; + StringCopy(gRfu.parent.uname, name); + memcpy(gRfu.parent.gname, parent, RFU_GAME_NAME_LENGTH); rfu_LMAN_forceChangeSP(); - taskId = CreateTask(sub_80FC028, 2); - gTasks[taskId].data[1] = activity; - taskId2 = FindTaskIdByFunc(Task_LinkRfu_UnionRoomListen); + taskId = CreateTask(Task_TryConnectToUnionRoomParent, 2); + gTasks[taskId].tActivity = activity; + listenTaskId = FindTaskIdByFunc(Task_UnionRoomListen); if (activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - if (taskId2 != 0xFF) - gTasks[taskId2].data[7] = 1; + if (listenTaskId != TASK_NONE) + gTasks[listenTaskId].tConnectingForChat = TRUE; } else { - if (taskId2 != 0xFF) - gTasks[taskId2].data[7] = 0; + if (listenTaskId != TASK_NONE) + gTasks[listenTaskId].tConnectingForChat = FALSE; } } bool8 IsRfuRecoveringFromLinkLoss(void) { - if (Rfu.linkLossRecoveryState == 1) + if (gRfu.linkLossRecoveryState == 1) return TRUE; else return FALSE; } -bool32 sub_80FC1CC(void) +bool32 IsRfuCommunicatingWithAllChildren(void) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((lman.acceptSlot_flag >> i) & 1 && Rfu.partnerSendStatuses[i] == 0) + // RFU_STATUS_OK is the default status. + // If any connected child is receiving a status other + // than OK, then the parent is communicating with them + if ((lman.acceptSlot_flag >> i) & 1 && gRfu.partnerSendStatuses[i] == RFU_STATUS_OK) return FALSE; } @@ -2812,30 +2929,17 @@ static void Debug_PrintEmpty(void) s32 i; for (i = 0; i < 20; i++) - Debug_PrintString(" ", 0, i); + Debug_PrintString(sASCII_30Spaces, 0, i); } -static const char gUnknown_843EE47[16] = { - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', - '\0' -}; - -static const char gUnknown_843EE57[9] = { - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', - '\0' -}; - -static const char gUnknown_843EE60[] = {' ', '\0'}; -static const char gUnknown_843EE62[] = {'*', '\0'}; - static void Debug_PrintStatus(void) { s32 i, j; - Debug_PrintNum(GetBlockReceivedStatus(), 0x1C, 0x13, 2); - Debug_PrintNum(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); - Debug_PrintNum(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); - if (Rfu.parent_child == MODE_PARENT) + Debug_PrintNum(GetBlockReceivedStatus(), 28, 19, 2); + Debug_PrintNum(gRfuLinkStatus->connSlotFlag, 20, 1, 1); + Debug_PrintNum(gRfuLinkStatus->linkLossSlotFlag, 23, 1, 1); + if (gRfu.parentChild == MODE_PARENT) { for (i = 0; i < RFU_CHILD_MAX; i++) { @@ -2843,29 +2947,27 @@ static void Debug_PrintStatus(void) { Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); Debug_PrintString((void *) &gRfuLinkStatus->partner[i].gname, 6, i + 3); - Debug_PrintString(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + Debug_PrintString(gRfuLinkStatus->partner[i].uname, 22, i + 3); } } for (i = 0; i < RFU_CHILD_MAX; i++) { - for (j = 0; j < 14; j++) - { - Debug_PrintNum(Rfu.main_UNI_recvBuffer[i][j], j * 2, i + 11, 2); - } + for (j = 0; j < COMM_SLOT_LENGTH; j++) + Debug_PrintNum(gRfu.childRecvBuffer[i][j], j * 2, i + 11, 2); } - Debug_PrintString("NOWSLOT", 1, 0xF); + Debug_PrintString(sASCII_NowSlot, 1, 15); } else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0) { for (i = 0; i < RFU_CHILD_MAX; i++) { Debug_PrintNum(0, 1, i + 3, 4); - Debug_PrintString(gUnknown_843EE47, 6, i + 3); - Debug_PrintString(gUnknown_843EE57, 0x16, i + 3); + Debug_PrintString(sASCII_15Spaces, 6, i + 3); + Debug_PrintString(sASCII_8Spaces, 22, i + 3); } - Debug_PrintNum(gRfuLinkStatus->partner[Rfu.child_slot].serialNo, 1, 3, 4); - Debug_PrintString(gRfuLinkStatus->partner[Rfu.child_slot].gname, 6, 3); - Debug_PrintString(gRfuLinkStatus->partner[Rfu.child_slot].uname, 0x16, 3); + Debug_PrintNum(gRfuLinkStatus->partner[gRfu.childSlot].serialNo, 1, 3, 4); + Debug_PrintString(gRfuLinkStatus->partner[gRfu.childSlot].gname, 6, 3); + Debug_PrintString(gRfuLinkStatus->partner[gRfu.childSlot].uname, 22, 3); } else { @@ -2875,43 +2977,29 @@ static void Debug_PrintStatus(void) { Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); Debug_PrintNum(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); - Debug_PrintString(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + Debug_PrintString(gRfuLinkStatus->partner[i].uname, 22, i + 3); } } for (; i < RFU_CHILD_MAX; i++) { Debug_PrintNum(0, 1, i + 3, 4); - Debug_PrintString(gUnknown_843EE47, 6, i + 3); - Debug_PrintString(gUnknown_843EE57, 0x16, i + 3); + Debug_PrintString(sASCII_15Spaces, 6, i + 3); + Debug_PrintString(sASCII_8Spaces, 22, i + 3); } } } -static const char gUnknown_843EE6C[][12] = { - " ", - "CLOCK DRIFT", - "BUSY SEND ", - "CMD REJECT ", - "CLOCK SLAVE" -}; - -static const char gUnknown_843EEA8[][8] = { - "CHILD ", - "PARENT", - "SEARCH" -}; - static u32 GetRfuSendQueueLength(void) { - return Rfu.sendQueue.count; + return gRfu.sendQueue.count; } u32 GetRfuRecvQueueLength(void) { - return Rfu.recvQueue.count; + return gRfu.recvQueue.count; } -static void Task_idle(u8 taskId) +static void Task_Idle(u8 taskId) { } diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 647658c7e..f47b71829 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -298,10 +298,8 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++) { - for (j = 0; j < RECV_QUEUE_SLOT_LENGTH; j++) - { + for (j = 0; j < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; j++) queue->slots[i][j] = 0; - } } queue->send_slot = 0; queue->recv_slot = 0; @@ -316,10 +314,8 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue) for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++) { - for (j = 0; j < SEND_QUEUE_SLOT_LENGTH; j++) - { + for (j = 0; j < COMM_SLOT_LENGTH; j++) queue->slots[i][j] = 0; - } } queue->send_slot = 0; queue->recv_slot = 0; @@ -356,26 +352,20 @@ void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *src) imeBak = REG_IME; REG_IME = 0; count = 0; - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i += RECV_QUEUE_SLOT_LENGTH / MAX_RFU_PLAYERS) + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i += COMM_SLOT_LENGTH) { if (src[i] == 0 && src[i + 1] == 0) - { count++; - } } if (count != MAX_RFU_PLAYERS) { - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) queue->slots[queue->recv_slot][i] = src[i]; - } queue->recv_slot++; queue->recv_slot %= RECV_QUEUE_NUM_SLOTS; queue->count++; - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) src[i] = 0; - } } REG_IME = imeBak; } @@ -394,26 +384,20 @@ void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *src) { imeBak = REG_IME; REG_IME = 0; - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH; i++) { if (src[i] != 0) - { break; - } } - if (i != SEND_QUEUE_SLOT_LENGTH) + if (i != COMM_SLOT_LENGTH) { - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH; i++) queue->slots[queue->recv_slot][i] = src[i]; - } queue->recv_slot++; queue->recv_slot %= SEND_QUEUE_NUM_SLOTS; queue->count++; - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH; i++) src[i] = 0; - } } REG_IME = imeBak; } @@ -432,17 +416,13 @@ bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest) REG_IME = 0; if (queue->recv_slot == queue->send_slot || queue->full) { - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) dest[i] = 0; - } REG_IME = imeBak; return FALSE; } - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) dest[i] = queue->slots[queue->send_slot][i]; - } queue->send_slot++; queue->send_slot %= RECV_QUEUE_NUM_SLOTS; queue->count--; @@ -456,15 +436,11 @@ bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest) u16 imeBak; if (queue->recv_slot == queue->send_slot || queue->full) - { return FALSE; - } imeBak = REG_IME; REG_IME = 0; - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH; i++) dest[i] = queue->slots[queue->send_slot][i]; - } queue->send_slot++; queue->send_slot %= SEND_QUEUE_NUM_SLOTS; queue->count--; @@ -482,10 +458,8 @@ void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *dest) } else { - for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH; i++) queue->slots[queue->recv_slot][i] = dest[i]; - } queue->recv_slot++; queue->recv_slot %= BACKUP_QUEUE_NUM_SLOTS; if (queue->count < BACKUP_QUEUE_NUM_SLOTS) @@ -509,10 +483,8 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *dest) } if (dest != NULL) { - for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH; i++) dest[i] = queue->slots[queue->send_slot][i]; - } } queue->send_slot++; queue->send_slot %= BACKUP_QUEUE_NUM_SLOTS; @@ -672,30 +644,30 @@ static u8 GetConnectedChildStrength(u8 maxFlags) return 0; } -void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 started, s32 child_sprite_genders) +void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 startedActivity, s32 partnerInfo) { s32 i; for (i = 0; i < 2; i++) { - data->unk_00.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + data->compatibility.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; } for (i = 0; i < RFU_CHILD_MAX; i++) { - data->child_sprite_gender[i] = child_sprite_genders; - child_sprite_genders >>= 8; + data->partnerInfo[i] = partnerInfo; + partnerInfo >>= 8; } data->playerGender = gSaveBlock2Ptr->playerGender; data->activity = activity; - data->started = started; - data->unk_00.language = GAME_LANGUAGE; - data->unk_00.version = GAME_VERSION; - data->unk_00.hasNews = FALSE; - data->unk_00.hasCard = FALSE; - data->unk_00.unknown = FALSE; - data->unk_00.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS); - data->unk_00.hasNationalDex = IsNationalPokedexEnabled(); - data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); + data->startedActivity = startedActivity; + data->compatibility.language = GAME_LANGUAGE; + data->compatibility.version = GAME_VERSION; + data->compatibility.hasNews = FALSE; + data->compatibility.hasCard = FALSE; + data->compatibility.unknown = FALSE; + data->compatibility.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS); + data->compatibility.hasNationalDex = IsNationalPokedexEnabled(); + data->compatibility.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); } /* @@ -749,7 +721,7 @@ bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx) bool8 LinkRfu_GetNameIfSerial7F7D(struct RfuGameData *gname, u8 *uname, u8 idx) { bool8 retVal = FALSE; - if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_7F7D) + if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_WONDER_DISTRIBUTOR) { memcpy(gname, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); diff --git a/src/main.c b/src/main.c index 368638022..5efaaf6d1 100644 --- a/src/main.c +++ b/src/main.c @@ -358,7 +358,7 @@ extern void ProcessDma3Requests(void); static void VBlankIntr(void) { if (gWirelessCommType) - RFUVSync(); + RfuVSync(); else if (!gLinkVSyncDisabled) LinkVSync(); diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 3dfce13a0..380e0b264 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -354,7 +354,7 @@ void vblankcb_mystery_gift_e_reader_run(void) TransferPlttBuffer(); } -void c2_mystery_gift_e_reader_run(void) +void CB2_MysteryGiftEReader(void) { RunTasks(); RunTextPrinters(); @@ -434,7 +434,7 @@ void c2_mystery_gift(void) { if (HandleMysteryGiftOrEReaderSetup(0)) { - SetMainCallback2(c2_mystery_gift_e_reader_run); + SetMainCallback2(CB2_MysteryGiftEReader); gGiftIsFromEReader = FALSE; task_add_00_mystery_gift(); } @@ -444,7 +444,7 @@ void c2_ereader(void) { if (HandleMysteryGiftOrEReaderSetup(1)) { - SetMainCallback2(c2_mystery_gift_e_reader_run); + SetMainCallback2(CB2_MysteryGiftEReader); gGiftIsFromEReader = TRUE; task_add_00_ereader(); } diff --git a/src/overworld.c b/src/overworld.c index 8c6037ca3..61e1a1db7 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3239,7 +3239,7 @@ bool32 IsSendingKeysOverCable(void) static u32 GetLinkSendQueueLength(void) { if (gWirelessCommType != 0) - return Rfu.sendQueue.count; + return gRfu.sendQueue.count; else return gLink.sendQueue.count; } diff --git a/src/party_menu.c b/src/party_menu.c index 7725a3c3d..84b9b5807 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3851,7 +3851,7 @@ static void CursorCB_Register(u8 taskId) u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRFUtgtGname(), species2, species, isEventLegal)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isEventLegal)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3877,7 +3877,7 @@ static void CursorCB_Trade1(u8 taskId) u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 39e13f786..c2e89b8be 100644 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2540,7 +2540,7 @@ static int GetPlayersAtJumpPeak(void) static bool32 AreLinkQueuesEmpty(void) { - return !Rfu.recvQueue.count && !Rfu.sendQueue.count; + return !gRfu.recvQueue.count && !gRfu.sendQueue.count; } static int GetNumPlayersForBonus(u8 *arg0) diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index dc9782d47..51b6106d5 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -524,17 +524,17 @@ static void AssembleGroup(u32 group, struct RfuGameData * gname) { return; } - SpawnGroupMember(group, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname); + SpawnGroupMember(group, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->compatibility.playerTrainerId[0]), gname); } for (i = 1; i < 5; i++) { - if (gname->child_sprite_gender[i - 1] == 0) + if (gname->partnerInfo[i - 1] == 0) { DespawnGroupMember(group, i); } else if (IsUnionRoomPlayerFacingTileAt(group, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(group, i, x2, y2) == FALSE) { - SpawnGroupMember(group, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname); + SpawnGroupMember(group, i, GetUnionRoomPlayerGraphicsId((gname->partnerInfo[i - 1] >> 3) & 1, gname->partnerInfo[i - 1] & 7), gname); } } } @@ -546,7 +546,7 @@ static void SpawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname) { case 0x40: case 0x54: - SpawnGroupLeader(group, gname->playerGender, gname->unk_00.playerTrainerId[0]); + SpawnGroupLeader(group, gname->playerGender, gname->compatibility.playerTrainerId[0]); for (i = 0; i < 5; i++) { DespawnGroupMember(group, i); diff --git a/src/trade.c b/src/trade.c index 9687bc988..e8ada5673 100644 --- a/src/trade.c +++ b/src/trade.c @@ -759,7 +759,7 @@ static void CB2_ReturnFromLinkTrade2(void) { SetWirelessCommType1(); OpenLink(); - LinkRfu_CreateIdleTask(); + CreateTask_RfuIdle(); } else { @@ -802,13 +802,13 @@ static void CB2_ReturnFromLinkTrade2(void) case 4: if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) { - LinkRfu_DestroyIdleTask(); + DestroyTask_RfuIdle(); CalculatePlayerPartyCount(); gMain.state++; sTradeMenuResourcesPtr->loadUISpritesState = 0; if (gWirelessCommType) { - ToggleLMANlinkRecovery(TRUE); + Rfu_SetLinkRecovery(TRUE); SetLinkStandbyCallback(); } } @@ -2019,7 +2019,7 @@ static void TradeMenuCB_12(void) static void TradeMenuCB_16(void) { - if (!ToggleLMANlinkRecovery(FALSE)) + if (!Rfu_SetLinkRecovery(FALSE)) { SetLinkStandbyCallback(); sTradeMenuResourcesPtr->tradeMenuCBnum = 13; diff --git a/src/union_room.c b/src/union_room.c index 5369225de..c4c7e7a27 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -646,12 +646,12 @@ static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}"); #define IntlConvPartnerUname7(dest, arg1) ({ \ StringCopy_PlayerName(dest, (arg1).gname_uname.uname); \ - ConvertInternationalString(dest, (arg1).gname_uname.gname.unk_00.language); \ + ConvertInternationalString(dest, (arg1).gname_uname.gname.compatibility.language); \ }) #define IntlConvPartnerUname(dest, arg1) ({ \ StringCopy(dest, (arg1).gname_uname.uname); \ - ConvertInternationalString(dest, (arg1).gname_uname.gname.unk_00.language); \ + ConvertInternationalString(dest, (arg1).gname_uname.gname.compatibility.language); \ }) #define CopyTrainerCardData(dest, src, _version) ({ \ @@ -744,7 +744,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) case 0: sPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004]; sPlayerActivityGroupSize = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004] >> 8; - SetHostRFUtgtGname(sPlayerCurrActivity, 0, 0); + SetHostRfuGameData(sPlayerCurrActivity, 0, 0); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_LinkLeader(sPlayerActivityGroupSize & 0xF); @@ -819,19 +819,19 @@ static void Task_TryBecomeLinkLeader(u8 taskId) if ((sPlayerActivityGroupSize >> 4) != 0 && data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 && (sPlayerActivityGroupSize & 0xF) != 0 - && sub_80FC1CC() + && IsRfuCommunicatingWithAllChildren() && JOY_NEW(START_BUTTON)) { data->state = 15; LinkRfu_StopManagerAndFinalizeSlots(); } - if (data->state == 6 && sub_80FA5D4()) + if (data->state == 6 && RfuTryDisconnectLeavingChildren()) { data->state = 9; } break; case 9: - if (!sub_80FA5D4()) + if (!RfuTryDisconnectLeavingChildren()) { data->state = 6; data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); @@ -861,21 +861,21 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } break; case 11: - switch (UnionRoomHandleYesNo(&data->textState, CheckTrainerHasLeftByIdAndName( - ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), + switch (UnionRoomHandleYesNo(&data->textState, HasTrainerLeftPartnersList( + ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname))) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); data->field_19 = 5; - SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + SendRfuStatusToPartner(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 12; break; case 1: case -1: data->field_19 = 6; - SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + SendRfuStatusToPartner(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 12; break; case -3: @@ -884,7 +884,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } break; case 12: - val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); if (val == 1) { // Xfer complete @@ -918,7 +918,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) else { // Sent "no" - RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); + RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId)); data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; UnionRoomLeaderField0CompactionAndCount(data->field_0); RedrawListMenu(data->listTaskId); @@ -1287,7 +1287,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, 0); + SetHostRfuGameData(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, 0); sPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004]; SetWirelessCommType1(); OpenLink(); @@ -1343,7 +1343,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) u32 unusedVar; unusedVar = data->field_0->arr[id].gname_uname.gname.activity; - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) + if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.startedActivity) { u32 var = IsTryingToTradeWithHoennTooSoon(data, id); if (var == 0) @@ -1536,11 +1536,11 @@ static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * arg0, s32 id { struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id]; - if (sPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.unk_00.version != VERSION_FIRE_RED && structPtr->gname_uname.gname.unk_00.version != VERSION_LEAF_GREEN) + if (sPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.compatibility.version != VERSION_FIRE_RED && structPtr->gname_uname.gname.compatibility.version != VERSION_LEAF_GREEN) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return 1; - else if (structPtr->gname_uname.gname.unk_00.isChampion) + else if (structPtr->gname_uname.gname.compatibility.isChampion) return 0; } else @@ -1558,8 +1558,8 @@ static void AskToJoinRfuGroup(struct UnkStruct_Group * data, s32 id) CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]); - UpdateGameDataWithActivitySpriteGendersFlag(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE); - CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); + UpdateGameData_SetActivity(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE); + CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.compatibility.playerTrainerId)); } u8 CreateTask_ListenToWireless(void) @@ -1585,11 +1585,11 @@ static void Task_ListenToWireless(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(0, 0, 0); + SetHostRfuGameData(0, 0, 0); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - sub_80FB128(TRUE); + RfuSetIgnoreError(TRUE); data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 2; @@ -1649,7 +1649,7 @@ static u8 URoomGroupListGetTextColor(struct UnkStruct_Group * data, u32 id) { if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (data->field_0->arr[id].gname_uname.gname.started) + if (data->field_0->arr[id].gname_uname.gname.startedActivity) return UR_COLOR_WHT_WHT_LTE; else if (data->field_0->arr[id].field_1A_1) return UR_COLOR_RED_WHT_LTR; @@ -1976,7 +1976,7 @@ static void Task_StartActivity(u8 taskId) else { LinkRfu_StopManagerBeforeEnteringChat(); - SetHostRFUtgtGname(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1); + SetHostRfuGameData(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1); } EnterUnionRoomChat(); break; @@ -2076,8 +2076,8 @@ static void Task_MEvent_Leader(u8 taskId) case 0: sPlayerCurrActivity = data->activity; sPlayerActivityGroupSize = 2; - SetHostRFUtgtGname(data->activity, 0, 0); - SetGnameBufferWonderFlags(FALSE, FALSE); + SetHostRfuGameData(data->activity, 0, 0); + SetHostRfuWonderFlags(FALSE, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_LinkLeader(2); @@ -2145,19 +2145,19 @@ static void Task_MEvent_Leader(u8 taskId) data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); data->field_19 = 5; - SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + SendRfuStatusToPartner(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 8; break; case 1: case -1: data->field_19 = 6; - SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + SendRfuStatusToPartner(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 8; break; } break; case 8: - val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); if (val == 1) { if (data->field_19 == 5) @@ -2172,7 +2172,7 @@ static void Task_MEvent_Leader(u8 taskId) } else { - RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); + RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId)); data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; UnionRoomLeaderField0CompactionAndCount(data->field_0); RedrawListMenu(data->listTaskId); @@ -2283,7 +2283,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(data->cardOrNews + ACTIVITY_WCARD2, 0, 0); + SetHostRfuGameData(data->cardOrNews + ACTIVITY_WCARD2, 0, 0); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); @@ -2338,14 +2338,14 @@ static void Task_CardOrNewsWithFriend(u8 taskId) u32 unusedVar; unusedVar = data->field_0->arr[id].gname_uname.gname.activity; - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) + if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.startedActivity) { data->leaderId = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); - CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.compatibility.playerTrainerId)); PlaySE(SE_POKENAV_ON); data->state = 4; } @@ -2449,7 +2449,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(0, 0, 0); + SetHostRfuGameData(0, 0, 0); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); @@ -2498,7 +2498,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) id = ListMenu_ProcessInput(data->listTaskId); if (data->refreshTimer > 120) { - if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.started) + if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.startedActivity) { if (GetGnameWonderFlagByLinkGroup(&data->field_0->arr[0].gname_uname.gname, data->cardOrNews + LINK_GROUP_WONDER_CARD)) { @@ -2506,7 +2506,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->refreshTimer = 0; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.uname, ReadAsU16(data->field_0->arr[0].gname_uname.gname.unk_00.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.uname, ReadAsU16(data->field_0->arr[0].gname_uname.gname.compatibility.playerTrainerId)); PlaySE(SE_POKENAV_ON); data->state = 4; } @@ -2608,7 +2608,7 @@ void UnionRoomSpecial(void) { struct UnkStruct_URoom * dataPtr; - ClearAndInitHostRFUtgtGname(); + ResetHostRfuGameData(); CreateTask(Task_RunUnionRoom, 10); // dumb line needed to match @@ -2689,8 +2689,8 @@ static void Task_RunUnionRoom(u8 taskId) data->state = 2; break; case 2: - SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0); - RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + SetHostRfuGameData(IN_UNION_ROOM, 0, 0); + SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); @@ -2709,11 +2709,11 @@ static void Task_RunUnionRoom(u8 taskId) switch (sUnionRoomTrade.field_0) { case 1: - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (id >= PARTY_SIZE) { ResetUnionRoomTrade(&sUnionRoomTrade); - RfuUpdatePlayerGnameStateAndSend(0, 0, 0); + SetTradeBoardRegisteredMonInfo(0, 0, 0); UnionRoom_ScheduleFieldMessageAndExit(gText_UR_RegistrationCanceled); } else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade)) @@ -2734,7 +2734,7 @@ static void Task_RunUnionRoom(u8 taskId) } else { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade); data->state = 51; @@ -2753,7 +2753,7 @@ static void Task_RunUnionRoom(u8 taskId) { if (gSpecialVar_Result == 9) { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); data->state = 42; @@ -2761,7 +2761,7 @@ static void Task_RunUnionRoom(u8 taskId) } else if (gSpecialVar_Result == 11) { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); data->state = 23; gSpecialVar_Result = 0; } @@ -2786,7 +2786,7 @@ static void Task_RunUnionRoom(u8 taskId) } else if (PlayerIsTalkingToUnionRoomAide()) { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); UR_EnableScriptContext2AndFreezeObjectEvents(); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); @@ -2805,8 +2805,8 @@ static void Task_RunUnionRoom(u8 taskId) case 4: data->state = 11; UR_EnableScriptContext2AndFreezeObjectEvents(); - RfuUpdatePlayerGnameStateAndSend(0, 0, 0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(data), FALSE); + SetTradeBoardRegisteredMonInfo(0, 0, 0); + UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(data), FALSE); break; } HandleUnionRoomPlayerRefresh(data); @@ -2815,21 +2815,21 @@ static void Task_RunUnionRoom(u8 taskId) case 23: if (!FuncIsActiveTask(Task_StartMenuHandleInput)) { - UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE); + UpdateGameData_SetActivity(IN_UNION_ROOM, 0, FALSE); data->state = 4; } break; case 24: UR_RunTextPrinters_CheckPrinter0Active(); playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); switch (UnionRoomGetPlayerInteractionResponse(data->field_0, taskData[0], taskData[1], playerGender)) { case 0: data->state = 26; break; case 1: - sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); + TryConnectToUnionRoomParent(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); data->field_12 = id; // Should be just 0, but won't match any other way. data->state = 25; break; @@ -3014,8 +3014,8 @@ static void Task_RunUnionRoom(u8 taskId) case 0: CopyBgTilemapBufferToVram(0); sPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM; - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); - sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); + UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); + TryConnectToUnionRoomParent(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); data->field_12 = taskData[1]; data->state = 20; taskData[3] = 0; @@ -3044,7 +3044,7 @@ static void Task_RunUnionRoom(u8 taskId) case 1: case 2: playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) UnionRoom_ScheduleFieldMessageAndExit(gTexts_UR_ChatDeclined[playerGender]); else @@ -3060,7 +3060,7 @@ static void Task_RunUnionRoom(u8 taskId) if (RfuHasErrored()) { playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) UnionRoom_ScheduleFieldMessageAndExit(gTexts_UR_ChatDeclined[playerGender]); else @@ -3071,7 +3071,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case 11: PlaySE(SE_DING_DONG); - sub_80F8FA0(); + StopUnionRoomLinkManager(); data->state = 12; data->recvActivityRequest[0] = 0; break; @@ -3107,7 +3107,7 @@ static void Task_RunUnionRoom(u8 taskId) ReceiveUnionRoomActivityPacket(data); if (UnionRoom_HandleContactFromOtherPlayer(data) && JOY_NEW(B_BUTTON)) { - sub_80FBD6C(1); + Rfu_DisconnectPlayerById(1); StringCopy(gStringVar4, gText_UR_ChatEnded); data->state = 36; } @@ -3122,9 +3122,9 @@ static void Task_RunUnionRoom(u8 taskId) case 0: data->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; if (sPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM)) - UpdateGameDataWithActivitySpriteGendersFlag(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), FALSE); + UpdateGameData_SetActivity(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), FALSE); else - UpdateGameDataWithActivitySpriteGendersFlag(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), TRUE); + UpdateGameData_SetActivity(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), TRUE); data->field_8->arr[0].field_1B = 0; taskData[3] = 0; @@ -3218,20 +3218,20 @@ static void Task_RunUnionRoom(u8 taskId) } break; case 42: - if (GetHostRFUtgtGname()->species == SPECIES_NONE) + if (GetHostRfuGameData()->tradeSpecies == SPECIES_NONE) { data->state = 43; } else { - if (GetHostRFUtgtGname()->species == SPECIES_EGG) + if (GetHostRfuGameData()->tradeSpecies == SPECIES_EGG) { StringCopy(gStringVar4, gText_UR_CancelRegistrationOfEgg); } else { - StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]); - ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(gStringVar1, gSpeciesNames[GetHostRfuGameData()->tradeSpecies]); + ConvertIntToDecimalStringN(gStringVar2, GetHostRfuGameData()->tradeLevel, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_UR_CancelRegistrationOfMon); } UnionRoom_ScheduleFieldMessageWithFollowupState(44, gStringVar4); @@ -3286,7 +3286,7 @@ static void Task_RunUnionRoom(u8 taskId) case -2: case 18: ResetUnionRoomTrade(&sUnionRoomTrade); - RfuUpdatePlayerGnameStateAndSend(0, 0, 0); + SetTradeBoardRegisteredMonInfo(0, 0, 0); UnionRoom_ScheduleFieldMessageAndExit(gText_UR_RegistrationCanceled); break; default: @@ -3297,7 +3297,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case 55: - RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); UnionRoom_ScheduleFieldMessageAndExit(gText_UR_RegistraionCompleted); break; case 44: @@ -3316,7 +3316,7 @@ static void Task_RunUnionRoom(u8 taskId) case 56: if (PrintOnTextbox(&data->textState, gText_UR_RegistrationCanceled2)) { - RfuUpdatePlayerGnameStateAndSend(0, 0, 0); + SetTradeBoardRegisteredMonInfo(0, 0, 0); ResetUnionRoomTrade(&sUnionRoomTrade); HandleCancelTrade(TRUE); data->state = 4; @@ -3343,7 +3343,7 @@ static void Task_RunUnionRoom(u8 taskId) data->state = 4; break; default: - switch (IsRequestedTypeAndSpeciesInPlayerParty(data->field_0->arr[var5].gname_uname.gname.type, data->field_0->arr[var5].gname_uname.gname.species)) + switch (IsRequestedTypeAndSpeciesInPlayerParty(data->field_0->arr[var5].gname_uname.gname.tradeType, data->field_0->arr[var5].gname_uname.gname.tradeSpecies)) { case UR_TRADE_MATCH: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); @@ -3352,12 +3352,12 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_TRADE_NOTYPE: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.tradeType]); UnionRoom_ScheduleFieldMessageWithFollowupState(46, gText_UR_DontHaveTypeTrainerWants); break; case UR_TRADE_NOEGG: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.tradeType]); UnionRoom_ScheduleFieldMessageWithFollowupState(46, gText_UR_DontHaveEggTrainerWants); break; } @@ -3382,9 +3382,9 @@ static void Task_RunUnionRoom(u8 taskId) if (PrintOnTextbox(&data->textState, gText_UR_WhichMonWillYouOffer)) { sUnionRoomTrade.field_0 = 2; - memcpy(&gPartnerTgtGnameSub, &data->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub)); - gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].gname_uname.gname.type; - gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].gname_uname.gname.species; + memcpy(&gPartnerTgtGnameSub, &data->field_0->arr[taskData[1]].gname_uname.gname.compatibility, sizeof(gPartnerTgtGnameSub)); + gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].gname_uname.gname.tradeType; + gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].gname_uname.gname.tradeSpecies; gFieldCallback = FieldCB_ContinueScriptUnionRoom; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); BackUpURoomField0ToDecompressionBuffer(data); @@ -3393,7 +3393,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case 51: sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; - sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | IN_UNION_ROOM); + TryConnectToUnionRoomParent(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | IN_UNION_ROOM); IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]); UR_PrintFieldMessage(gTexts_UR_CommunicatingWait[2]); data->state = 25; @@ -3488,11 +3488,11 @@ static void Task_InitUnionRoom(u8 taskId) structPtr->state = 1; break; case 1: - SetHostRFUtgtGname(ACTIVITY_SEARCH, 0, 0); + SetHostRfuGameData(ACTIVITY_SEARCH, 0, 0); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); - sub_80FB128(TRUE); + RfuSetIgnoreError(TRUE); structPtr->state = 2; break; case 2: @@ -3519,7 +3519,7 @@ static void Task_InitUnionRoom(u8 taskId) if (structPtr->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { IntlConvPartnerUname(text, structPtr->field_0->arr[i]); - if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].gname_uname.gname.unk_00.playerTrainerId), text)) + if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].gname_uname.gname.compatibility.playerTrainerId), text)) { StringCopy(sUnionRoomPlayerName, text); break; @@ -3659,7 +3659,7 @@ static void Task_SearchForChildOrParent(u8 taskId) { gname_uname = sUnionGnameUnamePair_Dummy; } - if (gname_uname.gname.unk_00.language == LANGUAGE_JAPANESE) + if (gname_uname.gname.compatibility.language == LANGUAGE_JAPANESE) { gname_uname = sUnionGnameUnamePair_Dummy; } @@ -3720,7 +3720,7 @@ static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 link { if (linkGroup == LINK_GROUP_WONDER_CARD) { - if (!gname->unk_00.hasCard) + if (!gname->compatibility.hasCard) { return FALSE; } @@ -3731,7 +3731,7 @@ static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 link } else if (linkGroup == LINK_GROUP_WONDER_NEWS) { - if (!gname->unk_00.hasNews) + if (!gname->compatibility.hasNews) { return FALSE; } @@ -4078,7 +4078,7 @@ static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * left, const str for (i = 0; i < 2; i++) { - if (left->gname.unk_00.playerTrainerId[i] != right->gname.unk_00.playerTrainerId[i]) + if (left->gname.compatibility.playerTrainerId[i] != right->gname.compatibility.playerTrainerId[i]) { return TRUE; } @@ -4100,32 +4100,22 @@ static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * lef s32 i; if (left->gname.activity != right->gname.activity) - { return TRUE; - } - if (left->gname.started != right->gname.started) - { + if (left->gname.startedActivity != right->gname.startedActivity) return TRUE; - } for (i = 0; i < RFU_CHILD_MAX; i++) { - if (left->gname.child_sprite_gender[i] != right->gname.child_sprite_gender[i]) - { + if (left->gname.partnerInfo[i] != right->gname.partnerInfo[i]) return TRUE; - } } - if (left->gname.species != right->gname.species) - { + if (left->gname.tradeSpecies != right->gname.tradeSpecies) return TRUE; - } - if (left->gname.type != right->gname.type) - { + if (left->gname.tradeType != right->gname.tradeType) return TRUE; - } return FALSE; } @@ -4185,7 +4175,7 @@ static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruc { IntlConvPartnerUname(uname, *group); UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx); - ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.compatibility.playerTrainerId[0] | (group->gname_uname.gname.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gText_UR_ID); StringAppend(gStringVar4, id_str); x += 77; @@ -4202,7 +4192,7 @@ static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, { IntlConvPartnerUname(uname, *group); UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx); - ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.compatibility.playerTrainerId[0] | (group->gname_uname.gname.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gText_UR_ID); StringAppend(gStringVar4, id_str); x += 71; @@ -4250,7 +4240,7 @@ static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * x20) { u8 sp0[30]; IntlConvPartnerUname(sp0, *x20); - return PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.unk_00.playerTrainerId), sp0); + return PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.compatibility.playerTrainerId), sp0); } static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender) @@ -4259,10 +4249,10 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, struct UnkStruct_x20 * x20 = &main0->arr[playerIdx]; - if (!x20->gname_uname.gname.started && overrideGender == 0) + if (!x20->gname_uname.gname.startedActivity && overrideGender == 0) { IntlConvPartnerUname(gStringVar1, *x20); - metBefore = PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.unk_00.playerTrainerId), gStringVar1); + metBefore = PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.compatibility.playerTrainerId), gStringVar1); if (x20->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { StringExpandPlaceholders(gStringVar4, gTexts_UR_JoinChat[metBefore][playerGender]); @@ -4279,7 +4269,7 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, IntlConvPartnerUname(gStringVar1, *x20); if (overrideGender != 0) { - playerGender = (x20->gname_uname.gname.unk_00.playerTrainerId[overrideGender + 1] >> 3) & 1; + playerGender = (x20->gname_uname.gname.compatibility.playerTrainerId[overrideGender + 1] >> 3) & 1; } switch (x20->gname_uname.gname.activity & 0x3F) { @@ -4310,9 +4300,9 @@ static void nullsub_92(u8 windowId, u32 itemId, u8 y) static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * gname, const u8 * uname, u8 colorIdx) { u8 level_t[4]; - u16 species = gname->species; - u8 type = gname->type; - u8 level = gname->level; + u16 species = gname->tradeSpecies; + u8 type = gname->tradeType; + u8 level = gname->tradeLevel; UR_AddTextPrinterParameterized(windowId, 2, uname, 8, y, colorIdx); if (species == SPECIES_EGG) @@ -4337,8 +4327,8 @@ static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y) { - rfu = GetHostRFUtgtGname(); - if (rfu->species != SPECIES_NONE) + rfu = GetHostRfuGameData(); + if (rfu->tradeSpecies != SPECIES_NONE) { TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); } @@ -4348,7 +4338,7 @@ static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) j = 0; for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++) { - if (leader->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->field_0->arr[i].gname_uname.gname.species != SPECIES_NONE) + if (leader->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->field_0->arr[i].gname_uname.gname.tradeSpecies != SPECIES_NONE) { j++; } @@ -4369,7 +4359,7 @@ static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n) for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++) { - if (x20[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && x20[i].gname_uname.gname.species != SPECIES_NONE) + if (x20[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && x20[i].gname_uname.gname.tradeSpecies != SPECIES_NONE) { j++; } @@ -4641,8 +4631,8 @@ static void HandleCancelTrade(bool32 unlockObjs) sPlayerCurrActivity = 0; if (unlockObjs) { - RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE); + SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + UpdateGameData_SetActivity(IN_UNION_ROOM, 0, FALSE); } } @@ -4670,7 +4660,7 @@ static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom) if (uroom->field_C->arr[i].active) { retVal |= uroom->field_C->arr[i].gname_uname.gname.playerGender << 3; - retVal |= uroom->field_C->arr[i].gname_uname.gname.unk_00.playerTrainerId[0] & 7; + retVal |= uroom->field_C->arr[i].gname_uname.gname.compatibility.playerTrainerId[0] & 7; break; } } diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 191201ec0..a2436575b 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -324,7 +324,7 @@ static void ChatEntryRoutine_Join(void) sWork->routineState++; // fall through case 1: - if (IsLinkTaskFinished() && !RfuHasFoundNewLeader()) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { if (SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) sWork->routineState++; @@ -527,14 +527,14 @@ static void ChatEntryRoutine_AskQuitChatting(void) sWork->routineState = 3; break; case 0: - Rfu_UnionRoomChat_StopLinkManager(); + Rfu_StopPartnerSearch(); PrepareSendBuffer_Disband(sWork->sendMessageBuffer); sWork->routineState = 4; break; } break; case 4: - if (IsLinkTaskFinished() && !RfuHasFoundNewLeader() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) { if (sWork->multiplayerId == 0) sWork->routineState = 6; @@ -577,15 +577,15 @@ static void ChatEntryRoutine_ExitChat(void) } break; case 3: - if (IsLinkTaskFinished() && !RfuHasFoundNewLeader() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) sWork->routineState++; break; case 4: - if ((GetBlockReceivedStatus() & 1) && !RfuHasFoundNewLeader()) + if ((GetBlockReceivedStatus() & 1) && !Rfu_IsPlayerExchangeActive()) sWork->routineState++; break; case 5: - if (IsLinkTaskFinished() && !RfuHasFoundNewLeader()) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { SetCloseLinkCallback(); sWork->exitDelayTimer = 0; @@ -620,7 +620,7 @@ static void ChatEntryRoutine_Drop(void) } break; case 1: - if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !RfuHasFoundNewLeader()) + if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { SetCloseLinkCallback(); sWork->exitDelayTimer = 0; @@ -666,7 +666,7 @@ static void ChatEntryRoutine_Disbanded(void) } break; case 2: - if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !RfuHasFoundNewLeader()) + if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { SetCloseLinkCallback(); sWork->exitDelayTimer = 0; @@ -704,7 +704,7 @@ static void ChatEntryRoutine_SendMessage(void) sWork->routineState++; // fall through case 1: - if (IsLinkTaskFinished() == TRUE && !RfuHasFoundNewLeader() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + if (IsLinkTaskFinished() == TRUE && !Rfu_IsPlayerExchangeActive() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) sWork->routineState++; break; case 2: @@ -1144,7 +1144,7 @@ static void PrepareSendBuffer_Leave(u8 *arg0) arg0[0] = CHAT_MESSAGE_LEAVE; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; - sub_80FB9D0(); + RfuSetNormalDisconnectMode(); } static void PrepareSendBuffer_Drop(u8 *arg0) @@ -1355,7 +1355,7 @@ static void Task_ReceiveChatMessage(u8 taskId) } tBlockReceivedStatus = GetBlockReceivedStatus(); - if (!tBlockReceivedStatus && RfuHasFoundNewLeader()) + if (!tBlockReceivedStatus && Rfu_IsPlayerExchangeActive()) return; tI = 0; @@ -1409,13 +1409,13 @@ static void Task_ReceiveChatMessage(u8 taskId) // You're the leader, and the person who left is not you if (GetLinkPlayerCount() == 2) { - Rfu_UnionRoomChat_StopLinkManager(); + Rfu_StopPartnerSearch(); sWork->exitType = CHATEXIT_LEADER_LAST; DestroyTask(taskId); return; } - sub_80FBD6C(tCurrLinkPlayer); + Rfu_DisconnectPlayerById(tCurrLinkPlayer); } tState = 3; @@ -1433,10 +1433,10 @@ static void Task_ReceiveChatMessage(u8 taskId) DestroyTask(taskId); break; case 2: - if (!RfuHasFoundNewLeader()) + if (!Rfu_IsPlayerExchangeActive()) { if (sWork->multiplayerId == 0) - sub_80FB030(sWork->linkPlayerCount); + SetUnionRoomChatPlayerData(sWork->linkPlayerCount); tState = 1; } diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index c9ebe676d..97131a768 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -366,7 +366,7 @@ static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts) k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) { - if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++; + if (unk20->gname_uname.gname.partnerInfo[j] != 0) k++; } k++; counts[sCountParams[i][1]] += k; From 75a53efc904d29b416fd7ba5d0b884819d63ff8a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 7 Nov 2022 14:22:54 -0500 Subject: [PATCH 10/42] Sync link_rfu_3 --- .../wireless_icon.png} | Bin include/link_rfu.h | 33 +- src/link_rfu_2.c | 4 +- src/link_rfu_3.c | 299 ++++++++---------- src/union_room.c | 12 +- 5 files changed, 155 insertions(+), 193 deletions(-) rename graphics/{interface/wireless_link_icon.png => link/wireless_icon.png} (100%) diff --git a/graphics/interface/wireless_link_icon.png b/graphics/link/wireless_icon.png similarity index 100% rename from graphics/interface/wireless_link_icon.png rename to graphics/link/wireless_icon.png diff --git a/include/link_rfu.h b/include/link_rfu.h index f203d30a3..5fe53cfbe 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -29,8 +29,6 @@ #define RECV_QUEUE_NUM_SLOTS 20 #define SEND_QUEUE_NUM_SLOTS 40 #define BACKUP_QUEUE_NUM_SLOTS 2 -#define UNUSED_QUEUE_NUM_SLOTS 2 -#define UNUSED_QUEUE_SLOT_LENGTH 256 #define RFU_PACKET_SIZE 6 @@ -141,8 +139,8 @@ struct RfuBlockSend struct RfuRecvQueue { /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH * MAX_RFU_PLAYERS]; - /* 0x578 */ vu8 recv_slot; - /* 0x579 */ vu8 send_slot; + /* 0x578 */ vu8 recvSlot; + /* 0x579 */ vu8 sendSlot; /* 0x57a */ vu8 count; /* 0x57b */ vu8 full; }; @@ -150,8 +148,8 @@ struct RfuRecvQueue struct RfuSendQueue { /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH]; - /* 0x230 */ vu8 recv_slot; - /* 0x231 */ vu8 send_slot; + /* 0x230 */ vu8 recvSlot; + /* 0x231 */ vu8 sendSlot; /* 0x232 */ vu8 count; /* 0x233 */ vu8 full; }; @@ -159,20 +157,11 @@ struct RfuSendQueue struct RfuBackupQueue { /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH]; - /* 0x1c */ vu8 recv_slot; - /* 0x1d */ vu8 send_slot; + /* 0x1c */ vu8 recvSlot; + /* 0x1d */ vu8 sendSlot; /* 0x1e */ vu8 count; }; -struct RfuUnusedQueue -{ - /* 0x000 */ u8 slots[UNUSED_QUEUE_NUM_SLOTS][UNUSED_QUEUE_SLOT_LENGTH]; - /* 0x200 */ vu8 recv_slot; - /* 0x201 */ vu8 send_slot; - /* 0x202 */ vu8 count; - /* 0x203 */ vu8 full; -}; - struct RfuManager { /* 0x000 */ void (*callback)(void); @@ -296,7 +285,7 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *dest); void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *dest); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue * queue, u8 *dest); void RfuSendQueue_Enqueue(struct RfuSendQueue * queue, u8 *src); -void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 started, s32 partnerInfo); +void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 started, s32 partnerInfo); void UpdateGameData_GroupLockedIn(bool8 started); bool32 IsRfuSerialNumberValid(u32 serialNo); bool8 IsRfuRecoveringFromLinkLoss(void); @@ -311,12 +300,12 @@ u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name); void SetHostRfuGameData(u8 activity, u32 partnerInfo, bool32 startedActivity); void InitializeRfuLinkManager_LinkLeader(u32 availSlots); void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId); -void LinkRfu3_SetGnameUnameFromStaticBuffers(struct RfuGameData *gname, u8 *uname); +void CopyHostRfuGameDataAndUsername(struct RfuGameData *gameData, u8 *username); void InitializeRfuLinkManager_JoinGroup(void); void SendLeaveGroupNotice(void); void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId); void UpdateGameData_SetActivity(u8 activity, u32 partnerInfo, u32 startedActivity); -void RecordMixTrainerNames(void); +void SaveLinkTrainerNames(void); void LinkRfu_CreateConnectionAsParent(); void LinkRfu_StopManagerBeforeEnteringChat(); void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard); @@ -328,8 +317,8 @@ void InitializeRfuLinkManager_EnterUnionRoom(void); void Rfu_DisconnectPlayerById(u32 playerIdx); void TryConnectToUnionRoomParent(const u8 *name, struct RfuGameData *parent, u8 activity); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); -bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx); -bool8 LinkRfu_GetNameIfSerial7F7D(struct RfuGameData *gname, u8 *uname, u8 idx); +bool8 Rfu_GetCompatiblePlayerData(struct RfuGameData *gameData, u8 *username, u8 idx); +bool8 Rfu_GetWonderDistributorPlayerData(struct RfuGameData *gameData, u8 *username, u8 idx); bool32 Rfu_IsPlayerExchangeActive(void); void Rfu_StopPartnerSearch(void); void RfuSetNormalDisconnectMode(void); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 9257f04b1..480f1874c 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -2057,12 +2057,12 @@ static void SetHostRfuUsername(void) void ResetHostRfuGameData(void) { memset(&gHostRfuGameData, 0, RFU_GAME_NAME_LENGTH); - InitHostRFUtgtGname(&gHostRfuGameData, ACTIVITY_NONE, FALSE, 0); + InitHostRfuGameData(&gHostRfuGameData, ACTIVITY_NONE, FALSE, 0); } void SetHostRfuGameData(u8 activity, u32 partnerInfo, u32 startedActivity) { - InitHostRFUtgtGname(&gHostRfuGameData, activity, startedActivity, partnerInfo); + InitHostRfuGameData(&gHostRfuGameData, activity, startedActivity, partnerInfo); } void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard) diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index f47b71829..21efcaf22 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -6,12 +6,35 @@ #include "link_rfu.h" #include "random.h" -static EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0; +enum { + WIRELESS_STATUS_ANIM_3_BARS, + WIRELESS_STATUS_ANIM_2_BARS, + WIRELESS_STATUS_ANIM_1_BAR, + WIRELESS_STATUS_ANIM_SEARCHING, + WIRELESS_STATUS_ANIM_ERROR, +}; -static const u16 gWirelessLinkIconPalette[] = INCBIN_U16("graphics/interface/wireless_link_icon.gbapal"); +#define TAG_GFX_STATUS_INDICATOR 0xD431 +#define TAG_PAL_STATUS_INDICATOR 0xD432 -static const u32 gWirelessLinkIconPic[] = INCBIN_U32("graphics/interface/wireless_link_icon.4bpp.lz"); +#define UNUSED_QUEUE_NUM_SLOTS 2 +#define UNUSED_QUEUE_SLOT_LENGTH 256 +struct RfuUnusedQueue +{ + u8 slots[UNUSED_QUEUE_NUM_SLOTS][UNUSED_QUEUE_SLOT_LENGTH]; + vu8 recvSlot; + vu8 sendSlot; + vu8 count; + vu8 full; +}; + +static EWRAM_DATA u8 sWirelessStatusIndicatorSpriteId = 0; + +static const u16 sWirelessLinkIconPalette[] = INCBIN_U16("graphics/link/wireless_icon.gbapal"); +static const u32 sWirelessLinkIconPic[] = INCBIN_U32("graphics/link/wireless_icon.4bpp.lz"); + +// Most of the below two tables won't make sense with ASCII encoding. static const u8 sWireless_ASCIItoRSETable[] = { EOS, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37, @@ -222,8 +245,7 @@ static const struct OamData sWirelessStatusIndicatorOamData = .paletteNum = 0, }; -static const union AnimCmd sWirelessStatusIndicatorAnim0[] = { - // 3 bars +static const union AnimCmd sWirelessStatusIndicator_3Bars[] = { ANIMCMD_FRAME( 4, 5), ANIMCMD_FRAME( 8, 5), ANIMCMD_FRAME(12, 5), @@ -233,8 +255,7 @@ static const union AnimCmd sWirelessStatusIndicatorAnim0[] = { ANIMCMD_JUMP(0) }; -static const union AnimCmd sWirelessStatusIndicatorAnim1[] = { - // 2 bars +static const union AnimCmd sWirelessStatusIndicator_2Bars[] = { ANIMCMD_FRAME( 4, 5), ANIMCMD_FRAME( 8, 5), ANIMCMD_FRAME(12, 10), @@ -242,46 +263,43 @@ static const union AnimCmd sWirelessStatusIndicatorAnim1[] = { ANIMCMD_JUMP(0) }; -static const union AnimCmd sWirelessStatusIndicatorAnim2[] = { - // 1 bar +static const union AnimCmd sWirelessStatusIndicator_1Bar[] = { ANIMCMD_FRAME(4, 5), ANIMCMD_FRAME(8, 5), ANIMCMD_JUMP(0) }; -static const union AnimCmd sWirelessStatusIndicatorAnim3[] = { - // searching +static const union AnimCmd sWirelessStatusIndicator_Searching[] = { ANIMCMD_FRAME( 4, 10), ANIMCMD_FRAME(20, 10), ANIMCMD_JUMP(0) }; -static const union AnimCmd sWirelessStatusIndicatorAnim4[] = { - // error +static const union AnimCmd sWirelessStatusIndicator_Error[] = { ANIMCMD_FRAME(24, 10), ANIMCMD_FRAME( 4, 10), ANIMCMD_JUMP(0) }; static const union AnimCmd *const sWirelessStatusIndicatorAnims[] = { - sWirelessStatusIndicatorAnim0, - sWirelessStatusIndicatorAnim1, - sWirelessStatusIndicatorAnim2, - sWirelessStatusIndicatorAnim3, - sWirelessStatusIndicatorAnim4 + [WIRELESS_STATUS_ANIM_3_BARS] = sWirelessStatusIndicator_3Bars, + [WIRELESS_STATUS_ANIM_2_BARS] = sWirelessStatusIndicator_2Bars, + [WIRELESS_STATUS_ANIM_1_BAR] = sWirelessStatusIndicator_1Bar, + [WIRELESS_STATUS_ANIM_SEARCHING] = sWirelessStatusIndicator_Searching, + [WIRELESS_STATUS_ANIM_ERROR] = sWirelessStatusIndicator_Error }; static const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = { - gWirelessLinkIconPic, 0x0380, 0xD431 + sWirelessLinkIconPic, 0x0380, TAG_GFX_STATUS_INDICATOR }; static const struct SpritePalette sWirelessStatusIndicatorSpritePalette = { - gWirelessLinkIconPalette, 0xD432 + sWirelessLinkIconPalette, TAG_PAL_STATUS_INDICATOR }; static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = { - .tileTag = 0xD431, - .paletteTag = 0xD432, + .tileTag = TAG_GFX_STATUS_INDICATOR, + .paletteTag = TAG_PAL_STATUS_INDICATOR, .oam = &sWirelessStatusIndicatorOamData, .anims = sWirelessStatusIndicatorAnims, .images = NULL, @@ -301,8 +319,8 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) for (j = 0; j < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; j++) queue->slots[i][j] = 0; } - queue->send_slot = 0; - queue->recv_slot = 0; + queue->sendSlot = 0; + queue->recvSlot = 0; queue->count = 0; queue->full = FALSE; } @@ -317,8 +335,8 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue) for (j = 0; j < COMM_SLOT_LENGTH; j++) queue->slots[i][j] = 0; } - queue->send_slot = 0; - queue->recv_slot = 0; + queue->sendSlot = 0; + queue->recvSlot = 0; queue->count = 0; queue->full = FALSE; } @@ -331,12 +349,10 @@ static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++) { for (j = 0; j < UNUSED_QUEUE_SLOT_LENGTH; j++) - { queue->slots[i][j] = 0; - } } - queue->send_slot = 0; - queue->recv_slot = 0; + queue->sendSlot = 0; + queue->recvSlot = 0; queue->count = 0; queue->full = FALSE; } @@ -360,9 +376,9 @@ void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *src) if (count != MAX_RFU_PLAYERS) { for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) - queue->slots[queue->recv_slot][i] = src[i]; - queue->recv_slot++; - queue->recv_slot %= RECV_QUEUE_NUM_SLOTS; + queue->slots[queue->recvSlot][i] = src[i]; + queue->recvSlot++; + queue->recvSlot %= RECV_QUEUE_NUM_SLOTS; queue->count++; for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) src[i] = 0; @@ -392,9 +408,9 @@ void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *src) if (i != COMM_SLOT_LENGTH) { for (i = 0; i < COMM_SLOT_LENGTH; i++) - queue->slots[queue->recv_slot][i] = src[i]; - queue->recv_slot++; - queue->recv_slot %= SEND_QUEUE_NUM_SLOTS; + queue->slots[queue->recvSlot][i] = src[i]; + queue->recvSlot++; + queue->recvSlot %= SEND_QUEUE_NUM_SLOTS; queue->count++; for (i = 0; i < COMM_SLOT_LENGTH; i++) src[i] = 0; @@ -414,7 +430,7 @@ bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest) imeBak = REG_IME; REG_IME = 0; - if (queue->recv_slot == queue->send_slot || queue->full) + if (queue->recvSlot == queue->sendSlot || queue->full) { for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) dest[i] = 0; @@ -422,9 +438,9 @@ bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest) return FALSE; } for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) - dest[i] = queue->slots[queue->send_slot][i]; - queue->send_slot++; - queue->send_slot %= RECV_QUEUE_NUM_SLOTS; + dest[i] = queue->slots[queue->sendSlot][i]; + queue->sendSlot++; + queue->sendSlot %= RECV_QUEUE_NUM_SLOTS; queue->count--; REG_IME = imeBak; return TRUE; @@ -435,14 +451,14 @@ bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest) s32 i; u16 imeBak; - if (queue->recv_slot == queue->send_slot || queue->full) + if (queue->recvSlot == queue->sendSlot || queue->full) return FALSE; imeBak = REG_IME; REG_IME = 0; for (i = 0; i < COMM_SLOT_LENGTH; i++) - dest[i] = queue->slots[queue->send_slot][i]; - queue->send_slot++; - queue->send_slot %= SEND_QUEUE_NUM_SLOTS; + dest[i] = queue->slots[queue->sendSlot][i]; + queue->sendSlot++; + queue->sendSlot %= SEND_QUEUE_NUM_SLOTS; queue->count--; REG_IME = imeBak; return TRUE; @@ -459,17 +475,13 @@ void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *dest) else { for (i = 0; i < COMM_SLOT_LENGTH; i++) - queue->slots[queue->recv_slot][i] = dest[i]; - queue->recv_slot++; - queue->recv_slot %= BACKUP_QUEUE_NUM_SLOTS; + queue->slots[queue->recvSlot][i] = dest[i]; + queue->recvSlot++; + queue->recvSlot %= BACKUP_QUEUE_NUM_SLOTS; if (queue->count < BACKUP_QUEUE_NUM_SLOTS) - { queue->count++; - } else - { - queue->send_slot = queue->recv_slot; - } + queue->sendSlot = queue->recvSlot; } } @@ -478,16 +490,15 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *dest) s32 i; if (queue->count == 0) - { return FALSE; - } + if (dest != NULL) { for (i = 0; i < COMM_SLOT_LENGTH; i++) - dest[i] = queue->slots[queue->send_slot][i]; + dest[i] = queue->slots[queue->sendSlot][i]; } - queue->send_slot++; - queue->send_slot %= BACKUP_QUEUE_NUM_SLOTS; + queue->sendSlot++; + queue->sendSlot %= BACKUP_QUEUE_NUM_SLOTS; queue->count--; return TRUE; } @@ -499,11 +510,9 @@ static void RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest) if (queue->count < UNUSED_QUEUE_NUM_SLOTS) { for (i = 0; i < UNUSED_QUEUE_SLOT_LENGTH; i++) - { - queue->slots[queue->recv_slot][i] = dest[i]; - } - queue->recv_slot++; - queue->recv_slot %= UNUSED_QUEUE_NUM_SLOTS; + queue->slots[queue->recvSlot][i] = dest[i]; + queue->recvSlot++; + queue->recvSlot %= UNUSED_QUEUE_NUM_SLOTS; queue->count++; } else @@ -516,16 +525,14 @@ static bool8 RfuUnusedQueue_Enqueue(struct RfuUnusedQueue *queue, u8 *dest) { s32 i; - if (queue->recv_slot == queue->send_slot || queue->full) - { + if (queue->recvSlot == queue->sendSlot || queue->full) return FALSE; - } + for (i = 0; i < UNUSED_QUEUE_SLOT_LENGTH; i++) - { - dest[i] = queue->slots[queue->send_slot][i]; - } - queue->send_slot++; - queue->send_slot %= UNUSED_QUEUE_NUM_SLOTS; + dest[i] = queue->slots[queue->sendSlot][i]; + + queue->sendSlot++; + queue->sendSlot %= UNUSED_QUEUE_NUM_SLOTS; queue->count--; return TRUE; } @@ -593,9 +600,7 @@ static void PkmnStrToASCII(u8 *dest, const u8 *src) s32 i; for (i = 0; src[i] != EOS; i++) - { dest[i] = sWireless_RSEtoASCIITable[src[i]]; - } dest[i] = 0; } @@ -604,9 +609,7 @@ static void ASCIIToPkmnStr(u8 *dest, const u8 *src) s32 i; for (i = 0; src[i] != 0; i++) - { dest[i] = sWireless_ASCIItoRSETable[src[i]]; - } dest[i] = EOS; } @@ -644,18 +647,17 @@ static u8 GetConnectedChildStrength(u8 maxFlags) return 0; } -void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 startedActivity, s32 partnerInfo) +void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedActivity, s32 partnerInfo) { s32 i; - for (i = 0; i < 2; i++) - { + for (i = 0; i < (s32)ARRAY_COUNT(data->compatibility.playerTrainerId); i++) data->compatibility.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; - } + for (i = 0; i < RFU_CHILD_MAX; i++) { data->partnerInfo[i] = partnerInfo; - partnerInfo >>= 8; + partnerInfo >>= 8; // Each element is 1 byte } data->playerGender = gSaveBlock2Ptr->playerGender; data->activity = activity; @@ -671,13 +673,13 @@ void InitHostRFUtgtGname(struct RfuGameData *data, u8 activity, bool32 startedAc } /* - * ========================================================== + * ================================================================ * Returns 1 if parent, 0 if child or neutral. - * If partner serial number is valid, copies gname and uname. + * If partner serial number is valid, copies gameData and username. * Otherwise, blanks these. - * ========================================================== + * ================================================================ */ -bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx) +bool8 Rfu_GetCompatiblePlayerData(struct RfuGameData *gameData, u8 *username, u8 idx) { bool8 retVal; @@ -686,13 +688,13 @@ bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx) retVal = TRUE; if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1)) { - memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); - memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); + memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); + memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); } else { - memset(gname, 0, RFU_GAME_NAME_LENGTH); - memset(uname, 0, RFU_USER_NAME_LENGTH); + memset(gameData, 0, RFU_GAME_NAME_LENGTH); + memset(username, 0, RFU_USER_NAME_LENGTH); } } else @@ -700,45 +702,39 @@ bool8 LinkRfu_GetNameIfCompatible(struct RfuGameData *gname, u8 *uname, u8 idx) retVal = FALSE; if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo)) { - memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); - memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); + memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); + memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); } else { - memset(gname, 0, RFU_GAME_NAME_LENGTH); - memset(uname, 0, RFU_USER_NAME_LENGTH); + memset(gameData, 0, RFU_GAME_NAME_LENGTH); + memset(username, 0, RFU_USER_NAME_LENGTH); } } return retVal; } -/* - * ========================================================== - * Specific check for serial number 0x7F7D, - * which comes from ??? - * ========================================================== - */ -bool8 LinkRfu_GetNameIfSerial7F7D(struct RfuGameData *gname, u8 *uname, u8 idx) +bool8 Rfu_GetWonderDistributorPlayerData(struct RfuGameData *gameData, u8 *username, u8 idx) { bool8 retVal = FALSE; if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_WONDER_DISTRIBUTOR) { - memcpy(gname, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); - memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); + memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); + memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); retVal = TRUE; } else { - memset(gname, 0, RFU_GAME_NAME_LENGTH); - memset(uname, 0, RFU_USER_NAME_LENGTH); + memset(gameData, 0, RFU_GAME_NAME_LENGTH); + memset(username, 0, RFU_USER_NAME_LENGTH); } return retVal; } -void LinkRfu3_SetGnameUnameFromStaticBuffers(struct RfuGameData *gname, u8 *uname) +void CopyHostRfuGameDataAndUsername(struct RfuGameData *gameData, u8 *username) { - memcpy(gname, &gHostRfuGameData, RFU_GAME_NAME_LENGTH); - memcpy(uname, gHostRfuUsername, RFU_USER_NAME_LENGTH); + memcpy(gameData, &gHostRfuGameData, RFU_GAME_NAME_LENGTH); + memcpy(username, gHostRfuUsername, RFU_USER_NAME_LENGTH); } #define sNextAnimNum data[0] @@ -765,23 +761,23 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) gSprites[sprId].sValidator = STATUS_INDICATOR_ACTIVE; gSprites[sprId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag); gSprites[sprId].invisible = TRUE; - gWirelessStatusIndicatorSpriteId = sprId; + sWirelessStatusIndicatorSpriteId = sprId; } else { - gWirelessStatusIndicatorSpriteId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0); - gSprites[gWirelessStatusIndicatorSpriteId].sValidator = STATUS_INDICATOR_ACTIVE; - gSprites[gWirelessStatusIndicatorSpriteId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag); - gSprites[gWirelessStatusIndicatorSpriteId].invisible = TRUE; + sWirelessStatusIndicatorSpriteId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0); + gSprites[sWirelessStatusIndicatorSpriteId].sValidator = STATUS_INDICATOR_ACTIVE; + gSprites[sWirelessStatusIndicatorSpriteId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag); + gSprites[sWirelessStatusIndicatorSpriteId].invisible = TRUE; } } void DestroyWirelessStatusIndicatorSprite(void) { - if (gSprites[gWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE) + if (gSprites[sWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE) { - gSprites[gWirelessStatusIndicatorSpriteId].sValidator = 0; - DestroySprite(&gSprites[gWirelessStatusIndicatorSpriteId]); + gSprites[sWirelessStatusIndicatorSpriteId].sValidator = 0; + DestroySprite(&gSprites[sWirelessStatusIndicatorSpriteId]); gMain.oamBuffer[125] = gDummyOamData; CpuCopy16(&gDummyOamData, (struct OamData *)OAM + 125, sizeof(struct OamData)); } @@ -790,11 +786,9 @@ void DestroyWirelessStatusIndicatorSprite(void) void LoadWirelessStatusIndicatorSpriteGfx(void) { if (GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag) == 0xFFFF) - { LoadCompressedSpriteSheet(&sWirelessStatusIndicatorSpriteSheet); - } LoadSpritePalette(&sWirelessStatusIndicatorSpritePalette); - gWirelessStatusIndicatorSpriteId = 0xFF; + sWirelessStatusIndicatorSpriteId = SPRITE_NONE; } static u8 GetParentSignalStrength(void) @@ -804,19 +798,17 @@ static u8 GetParentSignalStrength(void) for (i = 0; i < RFU_CHILD_MAX; i++) { if (flags & 1) - { return gRfuLinkStatus->strength[i]; - } flags >>= 1; } return 0; } -static void SetAndRestartWirelessStatusIndicatorAnim(struct Sprite *sprite, s32 signalStrengthAnimNum) +static void SetAndRestartWirelessStatusIndicatorAnim(struct Sprite *sprite, s32 animNum) { - if (sprite->sCurrAnimNum != signalStrengthAnimNum) + if (sprite->sCurrAnimNum != animNum) { - sprite->sCurrAnimNum = signalStrengthAnimNum; + sprite->sCurrAnimNum = animNum; sprite->sFrameDelay = 0; sprite->sFrameIdx = 0; } @@ -824,45 +816,38 @@ static void SetAndRestartWirelessStatusIndicatorAnim(struct Sprite *sprite, s32 void UpdateWirelessStatusIndicatorSprite(void) { - if (gWirelessStatusIndicatorSpriteId != 0xFF && gSprites[gWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE) + if (sWirelessStatusIndicatorSpriteId != SPRITE_NONE && gSprites[sWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE) { - struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId]; + struct Sprite *sprite = &gSprites[sWirelessStatusIndicatorSpriteId]; u8 signalStrength = RFU_LINK_ICON_LEVEL4_MAX; u8 i = 0; + + // Get weakest signal strength if (gRfuLinkStatus->parentChild == MODE_PARENT) { for (i = 0; i < GetLinkPlayerCount() - 1; i++) { if (signalStrength >= GetConnectedChildStrength(i + 1)) - { signalStrength = GetConnectedChildStrength(i + 1); - } } } else { signalStrength = GetParentSignalStrength(); } + + // Set signal strength sprite anim number if (IsRfuRecoveringFromLinkLoss() == TRUE) - { - sprite->sNextAnimNum = 4; - } + sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_ERROR; else if (signalStrength <= RFU_LINK_ICON_LEVEL1_MAX) - { - sprite->sNextAnimNum = 3; - } + sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_SEARCHING; else if (signalStrength >= RFU_LINK_ICON_LEVEL2_MIN && signalStrength <= RFU_LINK_ICON_LEVEL2_MAX) - { - sprite->sNextAnimNum = 2; - } + sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_1_BAR; else if (signalStrength >= RFU_LINK_ICON_LEVEL3_MIN && signalStrength <= RFU_LINK_ICON_LEVEL3_MAX) - { - sprite->sNextAnimNum = 1; - } + sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_2_BARS; else if (signalStrength >= RFU_LINK_ICON_LEVEL4_MIN) - { - sprite->sNextAnimNum = 0; - } + sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_3_BARS; + if (sprite->sNextAnimNum != sprite->sSavedAnimNum) { SetAndRestartWirelessStatusIndicatorAnim(sprite, sprite->sNextAnimNum); @@ -873,9 +858,7 @@ void UpdateWirelessStatusIndicatorSprite(void) sprite->sFrameIdx++; sprite->sFrameDelay = 0; if (sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].type == -2) // ANIMCMD_JUMP - { sprite->sFrameIdx = 0; - } } else { @@ -906,7 +889,7 @@ static void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, con { int i; dest->trainerId = trainerId; - for (i = 0; i < 7; i++) + for (i = 0; i < PLAYER_NAME_LENGTH; i++) { if (name[i] == EOS) break; @@ -920,9 +903,7 @@ static void ZeroName(u8 *name) s32 i; for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) - { *name++ = 0; - } } static bool32 NameIsEmpty(const u8 *name) @@ -932,15 +913,13 @@ static bool32 NameIsEmpty(const u8 *name) for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { if (*name++ != 0) - { return FALSE; - } } return TRUE; } // Save the currently connected players into the trainer records, shifting all previous records down. -void RecordMixTrainerNames(void) +void SaveLinkTrainerNames(void) { if (gWirelessCommType != 0) { @@ -948,13 +927,13 @@ void RecordMixTrainerNames(void) s32 j; s32 nextSpace; s32 connectedTrainerRecordIndices[5]; - struct TrainerNameRecord *newRecords = AllocZeroed(20 * sizeof(struct TrainerNameRecord)); + struct TrainerNameRecord *newRecords = AllocZeroed(sizeof(gSaveBlock1Ptr->trainerNameRecords)); // Check if we already have a record saved for connected trainers. for (i = 0; i < GetLinkPlayerCount(); i++) { connectedTrainerRecordIndices[i] = -1; - for (j = 0; j < 20; j++) + for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); j++) { if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->trainerNameRecords[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->trainerNameRecords[j].trainerName) == 0) { @@ -973,29 +952,25 @@ void RecordMixTrainerNames(void) // If we already had a record for this trainer, wipe it so that the next step doesn't duplicate it. if (connectedTrainerRecordIndices[i] >= 0) - { ZeroName(gSaveBlock1Ptr->trainerNameRecords[connectedTrainerRecordIndices[i]].trainerName); - } nextSpace++; } } // Copy all non-empty records to the new list, in the order they appear on the old list. If the list is full, // the last (oldest) records will be dropped. - for (i = 0; i < 20; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++) { if (!NameIsEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName)) { CopyTrainerRecord(&newRecords[nextSpace], gSaveBlock1Ptr->trainerNameRecords[i].trainerId, gSaveBlock1Ptr->trainerNameRecords[i].trainerName); - if (++nextSpace >= 20) - { + if (++nextSpace >= (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords)) break; - } } } // Finalize the new list, and clean up. - memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, 20 * sizeof(struct TrainerNameRecord)); + memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, sizeof(gSaveBlock1Ptr->trainerNameRecords)); Free(newRecords); } } @@ -1004,16 +979,14 @@ bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name) { s32 i; - for (i = 0; i < 20; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++) { - if (StringCompareN(gSaveBlock1Ptr->trainerNameRecords[i].trainerName, name, 7) == 0 && gSaveBlock1Ptr->trainerNameRecords[i].trainerId == id) - { + if (StringCompareN(gSaveBlock1Ptr->trainerNameRecords[i].trainerName, name, PLAYER_NAME_LENGTH) == 0 + && gSaveBlock1Ptr->trainerNameRecords[i].trainerId == id) return TRUE; - } + if (NameIsEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName)) - { return FALSE; - } } return FALSE; } diff --git a/src/union_room.c b/src/union_room.c index c4c7e7a27..186d09707 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -756,7 +756,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); BlankUnkStruct_x1CArray(data->field_4->arr, 4); BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); + CopyHostRfuGameDataAndUsername(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); data->field_0->arr[0].field_18 = 0; data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; data->field_0->arr[0].field_1A_1 = 0; @@ -1919,7 +1919,7 @@ static void Task_StartActivity(u8 taskId) case ACTIVITY_BPICK: case ACTIVITY_SPINTRADE: case ACTIVITY_ITEMTRADE: - RecordMixTrainerNames(); + SaveLinkTrainerNames(); break; } @@ -2089,7 +2089,7 @@ static void Task_MEvent_Leader(u8 taskId) data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); BlankUnkStruct_x1CArray(data->field_4->arr, 4); BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); + CopyHostRfuGameDataAndUsername(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); data->field_0->arr[0].field_18 = 0; data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; data->field_0->arr[0].field_1A_1 = FALSE; @@ -3654,7 +3654,7 @@ static void Task_SearchForChildOrParent(u8 taskId) for (i = 0; i < RFU_CHILD_MAX; i++) { - parent_child = LinkRfu_GetNameIfCompatible(&gname_uname.gname, gname_uname.uname, i); + parent_child = Rfu_GetCompatiblePlayerData(&gname_uname.gname, gname_uname.uname, i); if (!IsPartnerActivityAcceptable(gname_uname.gname.activity, gTasks[taskId].data[4])) { gname_uname = sUnionGnameUnamePair_Dummy; @@ -3700,7 +3700,7 @@ static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId) for (i = 0; i < RFU_CHILD_MAX; i++) { - LinkRfu_GetNameIfCompatible(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i); + Rfu_GetCompatiblePlayerData(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i); if (!IsPartnerActivityAcceptable(ptr[0]->arr[i].gname_uname.gname.activity, gTasks[taskId].data[2])) { ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy; @@ -3753,7 +3753,7 @@ static void Task_ListenForPartnersWithSerial7F7D(u8 taskId) for (i = 0; i < RFU_CHILD_MAX; i++) { - if (LinkRfu_GetNameIfSerial7F7D(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i)) + if (Rfu_GetWonderDistributorPlayerData(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i)) { GetGnameWonderFlagByLinkGroup(&ptr[0]->arr[i].gname_uname.gname, gTasks[taskId].data[2]); } From c5cf7886761ec4cbf89bb427739b89efe911c9a2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 7 Nov 2022 22:30:02 -0500 Subject: [PATCH 11/42] Macros for keeping .partyFlags, .partySize, and .party in sync --- include/battle.h | 11 +- src/data/trainers.h | 2968 +++++++++++-------------------------------- 2 files changed, 750 insertions(+), 2229 deletions(-) diff --git a/include/battle.h b/include/battle.h index 2a7b636e4..3acfadaab 100644 --- a/include/battle.h +++ b/include/battle.h @@ -88,7 +88,7 @@ struct TrainerMonNoItemCustomMoves u16 iv; u8 lvl; u16 species; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; struct TrainerMonItemCustomMoves @@ -97,9 +97,14 @@ struct TrainerMonItemCustomMoves u8 lvl; u16 species; u16 heldItem; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; +#define NO_ITEM_DEFAULT_MOVES(party) { .NoItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = 0 +#define NO_ITEM_CUSTOM_MOVES(party) { .NoItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET +#define ITEM_DEFAULT_MOVES(party) { .ItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_HELD_ITEM +#define ITEM_CUSTOM_MOVES(party) { .ItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM + union TrainerMonPtr { const struct TrainerMonNoItemDefaultMoves *NoItemDefaultMoves; @@ -115,7 +120,7 @@ struct Trainer /*0x02*/ u8 encounterMusic_gender; // last bit is gender /*0x03*/ u8 trainerPic; /*0x04*/ u8 trainerName[12]; - /*0x10*/ u16 items[4]; + /*0x10*/ u16 items[MAX_TRAINER_ITEMS]; /*0x18*/ bool8 doubleBattle; /*0x1C*/ u32 aiFlags; /*0x20*/ u8 partySize; diff --git a/src/data/trainers.h b/src/data/trainers.h index 49bb15eab..a5345a644 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -3,7 +3,6 @@ const struct Trainer gTrainers[] = { .trainerName = _(""), }, [TRAINER_AQUA_LEADER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE, @@ -11,11 +10,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AquaLeader), - .party = {.NoItemDefaultMoves = sParty_AquaLeader} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AquaLeader), }, [TRAINER_AQUA_GRUNT_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, @@ -23,11 +20,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AquaGruntM), - .party = {.NoItemDefaultMoves = sParty_AquaGruntM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AquaGruntM), }, [TRAINER_AQUA_GRUNT_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, @@ -35,11 +30,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AquaGruntF), - .party = {.NoItemDefaultMoves = sParty_AquaGruntF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AquaGruntF), }, [TRAINER_RS_AROMA_LADY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_AROMA_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_AROMA_LADY, @@ -47,11 +40,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSAromaLady), - .party = {.NoItemDefaultMoves = sParty_RSAromaLady} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSAromaLady), }, [TRAINER_RS_RUIN_MANIAC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RS_RUIN_MANIAC, @@ -59,11 +50,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSRuinManiac), - .party = {.NoItemDefaultMoves = sParty_RSRuinManiac} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSRuinManiac), }, [TRAINER_INTERVIEWER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, @@ -71,11 +60,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Interviewer), - .party = {.NoItemDefaultMoves = sParty_Interviewer} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Interviewer), }, [TRAINER_RS_TUBER_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_TUBER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_RS_TUBER_F, @@ -83,11 +70,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSTuberF), - .party = {.NoItemDefaultMoves = sParty_RSTuberF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSTuberF), }, [TRAINER_RS_TUBER_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_TUBER_M, @@ -95,11 +80,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSTuberM), - .party = {.NoItemDefaultMoves = sParty_RSTuberM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSTuberM), }, [TRAINER_RS_COOLTRAINER_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_RS_COOLTRAINER_M, @@ -107,11 +90,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RSCooltrainerM), - .party = {.NoItemDefaultMoves = sParty_RSCooltrainerM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSCooltrainerM), }, [TRAINER_RS_COOLTRAINER_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_RS_COOLTRAINER_F, @@ -119,11 +100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RSCooltrainerF), - .party = {.NoItemDefaultMoves = sParty_RSCooltrainerF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSCooltrainerF), }, [TRAINER_HEX_MANIAC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, @@ -131,11 +110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HexManiac), - .party = {.NoItemDefaultMoves = sParty_HexManiac} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HexManiac), }, [TRAINER_RS_LADY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_LADY, @@ -143,11 +120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSLady), - .party = {.NoItemDefaultMoves = sParty_RSLady} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSLady), }, [TRAINER_RS_BEAUTY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_BEAUTY, @@ -155,11 +130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSBeauty), - .party = {.NoItemDefaultMoves = sParty_RSBeauty} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSBeauty), }, [TRAINER_RICH_BOY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, @@ -167,11 +140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RichBoy), - .party = {.NoItemDefaultMoves = sParty_RichBoy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RichBoy), }, [TRAINER_RS_POKEMANIAC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_RS_POKEMANIAC, @@ -179,11 +150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSPokemaniac), - .party = {.NoItemDefaultMoves = sParty_RSPokemaniac} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPokemaniac), }, [TRAINER_RS_SWIMMER_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_SWIMMER_M, @@ -191,11 +160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSSwimmerM), - .party = {.NoItemDefaultMoves = sParty_RSSwimmerM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSSwimmerM), }, [TRAINER_RS_BLACK_BELT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_RS_BLACK_BELT, @@ -203,11 +170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSBlackBelt), - .party = {.NoItemDefaultMoves = sParty_RSBlackBelt} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSBlackBelt), }, [TRAINER_GUITARIST] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, @@ -215,11 +180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Guitarist), - .party = {.NoItemDefaultMoves = sParty_Guitarist} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Guitarist), }, [TRAINER_KINDLER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, @@ -227,11 +190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Kindler), - .party = {.NoItemDefaultMoves = sParty_Kindler} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kindler), }, [TRAINER_RS_CAMPER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_CAMPER, @@ -239,11 +200,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSCamper), - .party = {.NoItemDefaultMoves = sParty_RSCamper} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSCamper), }, [TRAINER_BUG_MANIAC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, @@ -251,11 +210,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugManiac), - .party = {.NoItemDefaultMoves = sParty_BugManiac} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugManiac), }, [TRAINER_RS_PSYCHIC_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_RS_PSYCHIC_M, @@ -263,11 +220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSPsychicM), - .party = {.NoItemDefaultMoves = sParty_RSPsychicM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPsychicM), }, [TRAINER_RS_PSYCHIC_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_RS_PSYCHIC_F, @@ -275,11 +230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSPsychicF), - .party = {.NoItemDefaultMoves = sParty_RSPsychicF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPsychicF), }, [TRAINER_RS_GENTLEMAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RS_GENTLEMAN, @@ -287,11 +240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSGentleman), - .party = {.NoItemDefaultMoves = sParty_RSGentleman} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSGentleman), }, [TRAINER_ELITE_FOUR_SIDNEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY, @@ -299,11 +250,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EliteFourSidney), - .party = {.NoItemDefaultMoves = sParty_EliteFourSidney} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EliteFourSidney), }, [TRAINER_ELITE_FOUR_PHOEBE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE, @@ -311,11 +260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EliteFourPhoebe), - .party = {.NoItemDefaultMoves = sParty_EliteFourPhoebe} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EliteFourPhoebe), }, [TRAINER_LEADER_ROXANNE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ROXANNE, @@ -323,11 +270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderRoxanne), - .party = {.NoItemDefaultMoves = sParty_LeaderRoxanne} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderRoxanne), }, [TRAINER_LEADER_BRAWLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BRAWLY, @@ -335,11 +280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderBrawly), - .party = {.NoItemDefaultMoves = sParty_LeaderBrawly} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderBrawly), }, [TRAINER_LEADER_TATE_LIZA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, @@ -347,11 +290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderTateLiza), - .party = {.NoItemDefaultMoves = sParty_LeaderTateLiza} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderTateLiza), }, [TRAINER_SCHOOL_KID_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, @@ -359,11 +300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SchoolKidM), - .party = {.NoItemDefaultMoves = sParty_SchoolKidM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SchoolKidM), }, [TRAINER_SCHOOL_KID_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, @@ -371,11 +310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SchoolKidF), - .party = {.NoItemDefaultMoves = sParty_SchoolKidF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SchoolKidF), }, [TRAINER_SR_AND_JR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, @@ -383,11 +320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SrAndJr), - .party = {.NoItemDefaultMoves = sParty_SrAndJr} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SrAndJr), }, [TRAINER_POKEFAN_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, @@ -395,11 +330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokefanM), - .party = {.NoItemDefaultMoves = sParty_PokefanM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokefanM), }, [TRAINER_POKEFAN_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, @@ -407,11 +340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokefanF), - .party = {.NoItemDefaultMoves = sParty_PokefanF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokefanF), }, [TRAINER_EXPERT_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, @@ -419,11 +350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ExpertM), - .party = {.NoItemDefaultMoves = sParty_ExpertM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ExpertM), }, [TRAINER_EXPERT_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, @@ -431,11 +360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ExpertF), - .party = {.NoItemDefaultMoves = sParty_ExpertF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ExpertF), }, [TRAINER_RS_YOUNGSTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_YOUNGSTER, @@ -443,11 +370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSYoungster), - .party = {.NoItemDefaultMoves = sParty_RSYoungster} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSYoungster), }, [TRAINER_RS_CHAMPION] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_STEVEN, @@ -455,11 +380,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RSChampion), - .party = {.NoItemDefaultMoves = sParty_RSChampion} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSChampion), }, [TRAINER_RS_FISHERMAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RS_FISHERMAN, @@ -467,11 +390,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSFisherman), - .party = {.NoItemDefaultMoves = sParty_RSFisherman} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSFisherman), }, [TRAINER_CYCLING_TRIATHLETE_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, @@ -479,11 +400,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CyclingTriathleteM), - .party = {.NoItemDefaultMoves = sParty_CyclingTriathleteM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CyclingTriathleteM), }, [TRAINER_CYCLING_TRIATHLETE_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, @@ -491,11 +410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CyclingTriathleteF), - .party = {.NoItemDefaultMoves = sParty_CyclingTriathleteF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CyclingTriathleteF), }, [TRAINER_RUNNING_TRIATHLETE_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, @@ -503,11 +420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RunningTriathleteM), - .party = {.NoItemDefaultMoves = sParty_RunningTriathleteM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RunningTriathleteM), }, [TRAINER_RUNNING_TRIATHLETE_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, @@ -515,11 +430,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RunningTriathleteF), - .party = {.NoItemDefaultMoves = sParty_RunningTriathleteF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RunningTriathleteF), }, [TRAINER_SWIMMING_TRIATHLETE_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, @@ -527,11 +440,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmingTriathleteM), - .party = {.NoItemDefaultMoves = sParty_SwimmingTriathleteM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmingTriathleteM), }, [TRAINER_SWIMMING_TRIATHLETE_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, @@ -539,11 +450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmingTriathleteF), - .party = {.NoItemDefaultMoves = sParty_SwimmingTriathleteF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmingTriathleteF), }, [TRAINER_DRAGON_TAMER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, @@ -551,11 +460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_DragonTamer), - .party = {.NoItemDefaultMoves = sParty_DragonTamer} + .party = NO_ITEM_DEFAULT_MOVES(sParty_DragonTamer), }, [TRAINER_RS_BIRD_KEEPER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_RS_BIRD_KEEPER, @@ -563,11 +470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSBirdKeeper), - .party = {.NoItemDefaultMoves = sParty_RSBirdKeeper} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSBirdKeeper), }, [TRAINER_NINJA_BOY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -575,11 +480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_NinjaBoy), - .party = {.NoItemDefaultMoves = sParty_NinjaBoy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_NinjaBoy), }, [TRAINER_BATTLE_GIRL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, @@ -587,11 +490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BattleGirl), - .party = {.NoItemDefaultMoves = sParty_BattleGirl} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BattleGirl), }, [TRAINER_PARASOL_LADY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, @@ -599,11 +500,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ParasolLady), - .party = {.NoItemDefaultMoves = sParty_ParasolLady} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ParasolLady), }, [TRAINER_RS_SWIMMER_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_SWIMMER_F, @@ -611,11 +510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSSwimmerF), - .party = {.NoItemDefaultMoves = sParty_RSSwimmerF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSSwimmerF), }, [TRAINER_RS_PICNICKER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_RS_PICNICKER, @@ -623,11 +520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSPicnicker), - .party = {.NoItemDefaultMoves = sParty_RSPicnicker} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPicnicker), }, [TRAINER_RS_TWINS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_RS_TWINS, @@ -635,11 +530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSTwins), - .party = {.NoItemDefaultMoves = sParty_RSTwins} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSTwins), }, [TRAINER_RS_SAILOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_SAILOR, @@ -647,11 +540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSSailor), - .party = {.NoItemDefaultMoves = sParty_RSSailor} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSSailor), }, [TRAINER_BOARDER_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BOARDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_YOUNGSTER, @@ -659,11 +550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BoarderM), - .party = {.NoItemDefaultMoves = sParty_BoarderM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BoarderM), }, [TRAINER_BOARDER_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BOARDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_YOUNGSTER, @@ -671,11 +560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BoarderF), - .party = {.NoItemDefaultMoves = sParty_BoarderF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BoarderF), }, [TRAINER_COLLECTOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, @@ -683,11 +570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Collector), - .party = {.NoItemDefaultMoves = sParty_Collector} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Collector), }, [TRAINER_WALLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, @@ -695,11 +580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Wally), - .party = {.NoItemDefaultMoves = sParty_Wally} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wally), }, [TRAINER_BRENDAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BRENDAN_1, @@ -707,11 +590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Brendan), - .party = {.NoItemDefaultMoves = sParty_Brendan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brendan), }, [TRAINER_BRENDAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BRENDAN_1, @@ -719,11 +600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Brendan2), - .party = {.NoItemDefaultMoves = sParty_Brendan2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brendan2), }, [TRAINER_BRENDAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BRENDAN_1, @@ -731,11 +610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Brendan3), - .party = {.NoItemDefaultMoves = sParty_Brendan3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brendan3), }, [TRAINER_MAY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_MAY_1, @@ -743,11 +620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_May), - .party = {.NoItemDefaultMoves = sParty_May} + .party = NO_ITEM_DEFAULT_MOVES(sParty_May), }, [TRAINER_MAY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_MAY_1, @@ -755,11 +630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_May2), - .party = {.NoItemDefaultMoves = sParty_May2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_May2), }, [TRAINER_MAY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_TRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_MAY_1, @@ -767,11 +640,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_May3), - .party = {.NoItemDefaultMoves = sParty_May3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_May3), }, [TRAINER_RS_PKMN_BREEDER_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_POKEMON_BREEDER_M, @@ -779,11 +650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSPkmnBreederM), - .party = {.NoItemDefaultMoves = sParty_RSPkmnBreederM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPkmnBreederM), }, [TRAINER_RS_PKMN_BREEDER_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_POKEMON_BREEDER_F, @@ -791,11 +660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSPkmnBreederF), - .party = {.NoItemDefaultMoves = sParty_RSPkmnBreederF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPkmnBreederF), }, [TRAINER_RS_PKMN_RANGER_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_RS_POKEMON_RANGER_M, @@ -803,11 +670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RSPkmnRangerM), - .party = {.NoItemDefaultMoves = sParty_RSPkmnRangerM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPkmnRangerM), }, [TRAINER_RS_PKMN_RANGER_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_RS_POKEMON_RANGER_F, @@ -815,11 +680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RSPkmnRangerF), - .party = {.NoItemDefaultMoves = sParty_RSPkmnRangerF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSPkmnRangerF), }, [TRAINER_MAGMA_LEADER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, @@ -827,11 +690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_MagmaLeader), - .party = {.NoItemDefaultMoves = sParty_MagmaLeader} + .party = NO_ITEM_DEFAULT_MOVES(sParty_MagmaLeader), }, [TRAINER_MAGMA_GRUNT_M] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, @@ -839,11 +700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_MagmaGruntM), - .party = {.NoItemDefaultMoves = sParty_MagmaGruntM} + .party = NO_ITEM_DEFAULT_MOVES(sParty_MagmaGruntM), }, [TRAINER_MAMGA_GRUNT_F] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, @@ -851,11 +710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_MagmaGruntF), - .party = {.NoItemDefaultMoves = sParty_MagmaGruntF} + .party = NO_ITEM_DEFAULT_MOVES(sParty_MagmaGruntF), }, [TRAINER_RS_LASS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_LASS, @@ -863,11 +720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSLass), - .party = {.NoItemDefaultMoves = sParty_RSLass} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSLass), }, [TRAINER_RS_BUG_CATCHER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BUG_CATCHER, @@ -875,11 +730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSBugCatcher), - .party = {.NoItemDefaultMoves = sParty_RSBugCatcher} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSBugCatcher), }, [TRAINER_RS_HIKER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RS_HIKER, @@ -887,11 +740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSHiker), - .party = {.NoItemDefaultMoves = sParty_RSHiker} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSHiker), }, [TRAINER_RS_YOUNG_COUPLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_RS_YOUNG_COUPLE, @@ -899,11 +750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSYoungCouple), - .party = {.NoItemDefaultMoves = sParty_RSYoungCouple} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSYoungCouple), }, [TRAINER_OLD_COUPLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_OLD_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_OLD_COUPLE, @@ -911,11 +760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_OldCouple), - .party = {.NoItemDefaultMoves = sParty_OldCouple} + .party = NO_ITEM_DEFAULT_MOVES(sParty_OldCouple), }, [TRAINER_RS_SIS_AND_BRO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_RS_SIS_AND_BRO, @@ -923,11 +770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RSSisAndBro), - .party = {.NoItemDefaultMoves = sParty_RSSisAndBro} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RSSisAndBro), }, [TRAINER_AQUA_ADMIN_MATT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_ADMIN_M, @@ -935,11 +780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AquaAdminMatt), - .party = {.NoItemDefaultMoves = sParty_AquaAdminMatt} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AquaAdminMatt), }, [TRAINER_AQUA_ADMIN_SHELLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, @@ -947,11 +790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AquaAdminShelly), - .party = {.NoItemDefaultMoves = sParty_AquaAdminShelly} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AquaAdminShelly), }, [TRAINER_MAGMA_ADMIN_TABITHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_ADMIN_M, @@ -959,11 +800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_MagmaAdminTabitha), - .party = {.NoItemDefaultMoves = sParty_MagmaAdminTabitha} + .party = NO_ITEM_DEFAULT_MOVES(sParty_MagmaAdminTabitha), }, [TRAINER_MAGMA_ADMIN_COURTNEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_ADMIN_F, @@ -971,11 +810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_MagmaAdminCourtney), - .party = {.NoItemDefaultMoves = sParty_MagmaAdminCourtney} + .party = NO_ITEM_DEFAULT_MOVES(sParty_MagmaAdminCourtney), }, [TRAINER_LEADER_WATTSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WATTSON, @@ -983,11 +820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderWattson), - .party = {.NoItemDefaultMoves = sParty_LeaderWattson} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderWattson), }, [TRAINER_LEADER_FLANNERY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_FLANNERY, @@ -995,11 +830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderFlannery), - .party = {.NoItemDefaultMoves = sParty_LeaderFlannery} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderFlannery), }, [TRAINER_LEADER_NORMAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_NORMAN, @@ -1007,11 +840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderNorman), - .party = {.NoItemDefaultMoves = sParty_LeaderNorman} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderNorman), }, [TRAINER_LEADER_WINONA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_WINONA, @@ -1019,11 +850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderWinona), - .party = {.NoItemDefaultMoves = sParty_LeaderWinona} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderWinona), }, [TRAINER_LEADER_WALLACE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WALLACE, @@ -1031,11 +860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LeaderWallace), - .party = {.NoItemDefaultMoves = sParty_LeaderWallace} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaderWallace), }, [TRAINER_ELITE_FOUR_GLACIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA, @@ -1043,11 +870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EliteFourGlacia), - .party = {.NoItemDefaultMoves = sParty_EliteFourGlacia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EliteFourGlacia), }, [TRAINER_ELITE_FOUR_DRAKE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE, @@ -1055,11 +880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EliteFourDrake), - .party = {.NoItemDefaultMoves = sParty_EliteFourDrake} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EliteFourDrake), }, [TRAINER_YOUNGSTER_BEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1067,11 +890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterBen), - .party = {.NoItemDefaultMoves = sParty_YoungsterBen} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterBen), }, [TRAINER_YOUNGSTER_CALVIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1079,11 +900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterCalvin), - .party = {.NoItemDefaultMoves = sParty_YoungsterCalvin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterCalvin), }, [TRAINER_YOUNGSTER_JOSH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1091,11 +910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterJosh), - .party = {.NoItemDefaultMoves = sParty_YoungsterJosh} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterJosh), }, [TRAINER_YOUNGSTER_TIMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1103,11 +920,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterTimmy), - .party = {.NoItemDefaultMoves = sParty_YoungsterTimmy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterTimmy), }, [TRAINER_YOUNGSTER_JOEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1115,11 +930,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterJoey), - .party = {.NoItemDefaultMoves = sParty_YoungsterJoey} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterJoey), }, [TRAINER_YOUNGSTER_DAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1127,11 +940,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterDan), - .party = {.NoItemDefaultMoves = sParty_YoungsterDan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterDan), }, [TRAINER_YOUNGSTER_CHAD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1139,11 +950,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterChad), - .party = {.NoItemDefaultMoves = sParty_YoungsterChad} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterChad), }, [TRAINER_YOUNGSTER_TYLER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1151,11 +960,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterTyler), - .party = {.NoItemDefaultMoves = sParty_YoungsterTyler} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterTyler), }, [TRAINER_YOUNGSTER_EDDIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1163,11 +970,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterEddie), - .party = {.NoItemDefaultMoves = sParty_YoungsterEddie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterEddie), }, [TRAINER_YOUNGSTER_DILLON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1175,11 +980,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterDillon), - .party = {.NoItemDefaultMoves = sParty_YoungsterDillon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterDillon), }, [TRAINER_YOUNGSTER_YASU] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1187,11 +990,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterYasu), - .party = {.NoItemDefaultMoves = sParty_YoungsterYasu} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterYasu), }, [TRAINER_YOUNGSTER_DAVE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1199,11 +1000,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterDave), - .party = {.NoItemDefaultMoves = sParty_YoungsterDave} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterDave), }, [TRAINER_YOUNGSTER_BEN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -1211,11 +1010,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterBen2), - .party = {.NoItemDefaultMoves = sParty_YoungsterBen2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterBen2), }, [TRAINER_BUG_CATCHER_RICK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1223,11 +1020,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherRick), - .party = {.NoItemDefaultMoves = sParty_BugCatcherRick} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherRick), }, [TRAINER_BUG_CATCHER_DOUG] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1235,11 +1030,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherDoug), - .party = {.NoItemDefaultMoves = sParty_BugCatcherDoug} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherDoug), }, [TRAINER_BUG_CATCHER_SAMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1247,11 +1040,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherSammy), - .party = {.NoItemDefaultMoves = sParty_BugCatcherSammy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherSammy), }, [TRAINER_BUG_CATCHER_COLTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1259,11 +1050,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherColton), - .party = {.NoItemDefaultMoves = sParty_BugCatcherColton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherColton), }, [TRAINER_BUG_CATCHER_GREG] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1271,11 +1060,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherGreg), - .party = {.NoItemDefaultMoves = sParty_BugCatcherGreg} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherGreg), }, [TRAINER_BUG_CATCHER_JAMES] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1283,11 +1070,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherJames), - .party = {.NoItemDefaultMoves = sParty_BugCatcherJames} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherJames), }, [TRAINER_BUG_CATCHER_KENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1295,11 +1080,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherKent), - .party = {.NoItemDefaultMoves = sParty_BugCatcherKent} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherKent), }, [TRAINER_BUG_CATCHER_ROBBY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1307,11 +1090,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherRobby), - .party = {.NoItemDefaultMoves = sParty_BugCatcherRobby} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherRobby), }, [TRAINER_BUG_CATCHER_CALE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1319,11 +1100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherCale), - .party = {.NoItemDefaultMoves = sParty_BugCatcherCale} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherCale), }, [TRAINER_BUG_CATCHER_KEIGO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1331,11 +1110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherKeigo), - .party = {.NoItemDefaultMoves = sParty_BugCatcherKeigo} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherKeigo), }, [TRAINER_BUG_CATCHER_ELIJAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1343,11 +1120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherElijah), - .party = {.NoItemDefaultMoves = sParty_BugCatcherElijah} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherElijah), }, [TRAINER_BUG_CATCHER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1355,11 +1130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher2), - .party = {.NoItemDefaultMoves = sParty_BugCatcher2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher2), }, [TRAINER_BUG_CATCHER_BRENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1367,11 +1140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherBrent), - .party = {.NoItemDefaultMoves = sParty_BugCatcherBrent} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherBrent), }, [TRAINER_BUG_CATCHER_CONNER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -1379,11 +1150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherConner), - .party = {.NoItemDefaultMoves = sParty_BugCatcherConner} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherConner), }, [TRAINER_LASS_JANICE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1391,11 +1160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassJanice), - .party = {.NoItemDefaultMoves = sParty_LassJanice} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassJanice), }, [TRAINER_LASS_SALLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1403,11 +1170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassSally), - .party = {.NoItemDefaultMoves = sParty_LassSally} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassSally), }, [TRAINER_LASS_ROBIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1415,11 +1180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassRobin), - .party = {.NoItemDefaultMoves = sParty_LassRobin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassRobin), }, [TRAINER_LASS_CRISSY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1427,11 +1190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassCrissy), - .party = {.NoItemDefaultMoves = sParty_LassCrissy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassCrissy), }, [TRAINER_LASS_MIRIAM] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1439,11 +1200,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassMiriam), - .party = {.NoItemDefaultMoves = sParty_LassMiriam} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassMiriam), }, [TRAINER_LASS_IRIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1451,11 +1210,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassIris), - .party = {.NoItemDefaultMoves = sParty_LassIris} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassIris), }, [TRAINER_LASS_RELI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1463,11 +1220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassReli), - .party = {.NoItemDefaultMoves = sParty_LassReli} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassReli), }, [TRAINER_LASS_ALI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1475,11 +1230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassAli), - .party = {.NoItemDefaultMoves = sParty_LassAli} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassAli), }, [TRAINER_LASS_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1487,11 +1240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Lass2), - .party = {.NoItemDefaultMoves = sParty_Lass2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lass2), }, [TRAINER_LASS_HALEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1499,11 +1250,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassHaley), - .party = {.NoItemDefaultMoves = sParty_LassHaley} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassHaley), }, [TRAINER_LASS_ANN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1511,11 +1260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassAnn), - .party = {.NoItemDefaultMoves = sParty_LassAnn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassAnn), }, [TRAINER_LASS_DAWN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1523,11 +1270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassDawn), - .party = {.NoItemDefaultMoves = sParty_LassDawn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassDawn), }, [TRAINER_LASS_PAIGE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1535,11 +1280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassPaige), - .party = {.NoItemDefaultMoves = sParty_LassPaige} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassPaige), }, [TRAINER_LASS_ANDREA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1547,11 +1290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassAndrea), - .party = {.NoItemDefaultMoves = sParty_LassAndrea} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassAndrea), }, [TRAINER_LASS_MEGAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1559,11 +1300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassMegan), - .party = {.NoItemDefaultMoves = sParty_LassMegan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassMegan), }, [TRAINER_LASS_JULIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1571,11 +1310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassJulia), - .party = {.NoItemDefaultMoves = sParty_LassJulia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassJulia), }, [TRAINER_LASS_KAY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1583,11 +1320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassKay), - .party = {.NoItemDefaultMoves = sParty_LassKay} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassKay), }, [TRAINER_LASS_LISA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -1595,11 +1330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassLisa), - .party = {.NoItemDefaultMoves = sParty_LassLisa} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassLisa), }, [TRAINER_SAILOR_EDMOND] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1607,11 +1340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorEdmond), - .party = {.NoItemDefaultMoves = sParty_SailorEdmond} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorEdmond), }, [TRAINER_SAILOR_TREVOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1619,11 +1350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorTrevor), - .party = {.NoItemDefaultMoves = sParty_SailorTrevor} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorTrevor), }, [TRAINER_SAILOR_LEONARD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1631,11 +1360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorLeonard), - .party = {.NoItemDefaultMoves = sParty_SailorLeonard} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorLeonard), }, [TRAINER_SAILOR_DUNCAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1643,11 +1370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorDuncan), - .party = {.NoItemDefaultMoves = sParty_SailorDuncan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorDuncan), }, [TRAINER_SAILOR_HUEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1655,11 +1380,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorHuey), - .party = {.NoItemDefaultMoves = sParty_SailorHuey} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorHuey), }, [TRAINER_SAILOR_DYLAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1667,11 +1390,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorDylan), - .party = {.NoItemDefaultMoves = sParty_SailorDylan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorDylan), }, [TRAINER_SAILOR_PHILLIP] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1679,11 +1400,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorPhillip), - .party = {.NoItemDefaultMoves = sParty_SailorPhillip} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorPhillip), }, [TRAINER_SAILOR_DWAYNE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, @@ -1691,11 +1410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SailorDwayne), - .party = {.NoItemDefaultMoves = sParty_SailorDwayne} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SailorDwayne), }, [TRAINER_CAMPER_LIAM] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1703,11 +1420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperLiam), - .party = {.NoItemCustomMoves = sParty_CamperLiam} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CamperLiam), }, [TRAINER_CAMPER_SHANE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1715,11 +1430,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperShane), - .party = {.NoItemDefaultMoves = sParty_CamperShane} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperShane), }, [TRAINER_CAMPER_ETHAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1727,11 +1440,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperEthan), - .party = {.NoItemDefaultMoves = sParty_CamperEthan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperEthan), }, [TRAINER_CAMPER_RICKY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1739,11 +1450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperRicky), - .party = {.NoItemDefaultMoves = sParty_CamperRicky} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperRicky), }, [TRAINER_CAMPER_JEFF] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1751,11 +1460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperJeff), - .party = {.NoItemDefaultMoves = sParty_CamperJeff} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperJeff), }, [TRAINER_CAMPER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1763,11 +1470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Camper2), - .party = {.NoItemDefaultMoves = sParty_Camper2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Camper2), }, [TRAINER_CAMPER_CHRIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1775,11 +1480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperChris), - .party = {.NoItemDefaultMoves = sParty_CamperChris} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperChris), }, [TRAINER_CAMPER_DREW] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -1787,11 +1490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperDrew), - .party = {.NoItemDefaultMoves = sParty_CamperDrew} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperDrew), }, [TRAINER_PICNICKER_DIANA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1799,11 +1500,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerDiana), - .party = {.NoItemDefaultMoves = sParty_PicnickerDiana} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerDiana), }, [TRAINER_PICNICKER_NANCY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1811,11 +1510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerNancy), - .party = {.NoItemDefaultMoves = sParty_PicnickerNancy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerNancy), }, [TRAINER_PICNICKER_ISABELLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1823,11 +1520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerIsabelle), - .party = {.NoItemDefaultMoves = sParty_PicnickerIsabelle} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerIsabelle), }, [TRAINER_PICNICKER_KELSEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1835,11 +1530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerKelsey), - .party = {.NoItemDefaultMoves = sParty_PicnickerKelsey} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerKelsey), }, [TRAINER_PICNICKER_ALICIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1847,11 +1540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerAlicia), - .party = {.NoItemDefaultMoves = sParty_PicnickerAlicia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerAlicia), }, [TRAINER_PICNICKER_CAITLIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1859,11 +1550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerCaitlin), - .party = {.NoItemDefaultMoves = sParty_PicnickerCaitlin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerCaitlin), }, [TRAINER_PICNICKER_HEIDI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1871,11 +1560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerHeidi), - .party = {.NoItemDefaultMoves = sParty_PicnickerHeidi} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerHeidi), }, [TRAINER_PICNICKER_CAROL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1883,11 +1570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerCarol), - .party = {.NoItemDefaultMoves = sParty_PicnickerCarol} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerCarol), }, [TRAINER_PICNICKER_SOFIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1895,11 +1580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerSofia), - .party = {.NoItemDefaultMoves = sParty_PicnickerSofia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerSofia), }, [TRAINER_PICNICKER_MARTHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1907,11 +1590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerMartha), - .party = {.NoItemDefaultMoves = sParty_PicnickerMartha} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerMartha), }, [TRAINER_PICNICKER_TINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1919,11 +1600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerTina), - .party = {.NoItemDefaultMoves = sParty_PicnickerTina} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerTina), }, [TRAINER_PICNICKER_HANNAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -1931,11 +1610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerHannah), - .party = {.NoItemDefaultMoves = sParty_PicnickerHannah} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerHannah), }, [TRAINER_POKEMANIAC_MARK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -1943,11 +1620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacMark), - .party = {.NoItemDefaultMoves = sParty_PokemaniacMark} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacMark), }, [TRAINER_POKEMANIAC_HERMAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -1955,11 +1630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacHerman), - .party = {.NoItemDefaultMoves = sParty_PokemaniacHerman} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacHerman), }, [TRAINER_POKEMANIAC_COOPER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -1967,11 +1640,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacCooper), - .party = {.NoItemDefaultMoves = sParty_PokemaniacCooper} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacCooper), }, [TRAINER_POKEMANIAC_STEVE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -1979,11 +1650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacSteve), - .party = {.NoItemDefaultMoves = sParty_PokemaniacSteve} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacSteve), }, [TRAINER_POKEMANIAC_WINSTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -1991,11 +1660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacWinston), - .party = {.NoItemDefaultMoves = sParty_PokemaniacWinston} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacWinston), }, [TRAINER_POKEMANIAC_DAWSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -2003,11 +1670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacDawson), - .party = {.NoItemDefaultMoves = sParty_PokemaniacDawson} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacDawson), }, [TRAINER_POKEMANIAC_ASHTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -2015,11 +1680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacAshton), - .party = {.NoItemDefaultMoves = sParty_PokemaniacAshton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacAshton), }, [TRAINER_SUPER_NERD_JOVAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2027,11 +1690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdJovan), - .party = {.NoItemDefaultMoves = sParty_SuperNerdJovan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdJovan), }, [TRAINER_SUPER_NERD_MIGUEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2039,11 +1700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdMiguel), - .party = {.NoItemDefaultMoves = sParty_SuperNerdMiguel} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdMiguel), }, [TRAINER_SUPER_NERD_AIDAN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2051,11 +1710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdAidan), - .party = {.NoItemCustomMoves = sParty_SuperNerdAidan} + .party = NO_ITEM_CUSTOM_MOVES(sParty_SuperNerdAidan), }, [TRAINER_SUPER_NERD_GLENN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2063,11 +1720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdGlenn), - .party = {.NoItemDefaultMoves = sParty_SuperNerdGlenn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdGlenn), }, [TRAINER_SUPER_NERD_LESLIE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2075,11 +1730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdLeslie), - .party = {.NoItemCustomMoves = sParty_SuperNerdLeslie} + .party = NO_ITEM_CUSTOM_MOVES(sParty_SuperNerdLeslie), }, [TRAINER_SUPER_NERD_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2087,11 +1740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerd1), - .party = {.NoItemDefaultMoves = sParty_SuperNerd1} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerd1), }, [TRAINER_SUPER_NERD_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2099,11 +1750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerd2), - .party = {.NoItemDefaultMoves = sParty_SuperNerd2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerd2), }, [TRAINER_SUPER_NERD_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2111,11 +1760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerd3), - .party = {.NoItemDefaultMoves = sParty_SuperNerd3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerd3), }, [TRAINER_SUPER_NERD_ERIK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2123,11 +1770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdErik), - .party = {.NoItemDefaultMoves = sParty_SuperNerdErik} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdErik), }, [TRAINER_SUPER_NERD_AVERY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2135,11 +1780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdAvery), - .party = {.NoItemDefaultMoves = sParty_SuperNerdAvery} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdAvery), }, [TRAINER_SUPER_NERD_DEREK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2147,11 +1790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdDerek), - .party = {.NoItemDefaultMoves = sParty_SuperNerdDerek} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdDerek), }, [TRAINER_SUPER_NERD_ZAC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -2159,11 +1800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdZac), - .party = {.NoItemDefaultMoves = sParty_SuperNerdZac} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdZac), }, [TRAINER_HIKER_MARCOS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2171,11 +1810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerMarcos), - .party = {.NoItemDefaultMoves = sParty_HikerMarcos} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerMarcos), }, [TRAINER_HIKER_FRANKLIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2183,11 +1820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerFranklin), - .party = {.NoItemDefaultMoves = sParty_HikerFranklin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerFranklin), }, [TRAINER_HIKER_NOB] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2195,11 +1830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerNob), - .party = {.NoItemDefaultMoves = sParty_HikerNob} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerNob), }, [TRAINER_HIKER_WAYNE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2207,11 +1840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerWayne), - .party = {.NoItemDefaultMoves = sParty_HikerWayne} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerWayne), }, [TRAINER_HIKER_ALAN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2219,11 +1850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerAlan), - .party = {.NoItemCustomMoves = sParty_HikerAlan} + .party = NO_ITEM_CUSTOM_MOVES(sParty_HikerAlan), }, [TRAINER_HIKER_BRICE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2231,11 +1860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerBrice), - .party = {.NoItemDefaultMoves = sParty_HikerBrice} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerBrice), }, [TRAINER_HIKER_CLARK] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2243,11 +1870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerClark), - .party = {.NoItemCustomMoves = sParty_HikerClark} + .party = NO_ITEM_CUSTOM_MOVES(sParty_HikerClark), }, [TRAINER_HIKER_TRENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2255,11 +1880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerTrent), - .party = {.NoItemDefaultMoves = sParty_HikerTrent} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerTrent), }, [TRAINER_HIKER_DUDLEY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2267,11 +1890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerDudley), - .party = {.NoItemCustomMoves = sParty_HikerDudley} + .party = NO_ITEM_CUSTOM_MOVES(sParty_HikerDudley), }, [TRAINER_HIKER_ALLEN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2279,11 +1900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerAllen), - .party = {.NoItemCustomMoves = sParty_HikerAllen} + .party = NO_ITEM_CUSTOM_MOVES(sParty_HikerAllen), }, [TRAINER_HIKER_ERIC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2291,11 +1910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerEric), - .party = {.NoItemDefaultMoves = sParty_HikerEric} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerEric), }, [TRAINER_HIKER_LENNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2303,11 +1920,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerLenny), - .party = {.NoItemDefaultMoves = sParty_HikerLenny} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerLenny), }, [TRAINER_HIKER_OLIVER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2315,11 +1930,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerOliver), - .party = {.NoItemDefaultMoves = sParty_HikerOliver} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerOliver), }, [TRAINER_HIKER_LUCAS] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -2327,11 +1940,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerLucas), - .party = {.NoItemCustomMoves = sParty_HikerLucas} + .party = NO_ITEM_CUSTOM_MOVES(sParty_HikerLucas), }, [TRAINER_BIKER_JARED] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2339,11 +1950,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerJared), - .party = {.NoItemCustomMoves = sParty_BikerJared} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerJared), }, [TRAINER_BIKER_MALIK] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2351,11 +1960,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerMalik), - .party = {.NoItemCustomMoves = sParty_BikerMalik} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerMalik), }, [TRAINER_BIKER_ERNEST] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2363,11 +1970,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerErnest), - .party = {.NoItemCustomMoves = sParty_BikerErnest} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerErnest), }, [TRAINER_BIKER_ALEX] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2375,11 +1980,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerAlex), - .party = {.NoItemCustomMoves = sParty_BikerAlex} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerAlex), }, [TRAINER_BIKER_LAO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2387,11 +1990,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerLao), - .party = {.NoItemCustomMoves = sParty_BikerLao} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerLao), }, [TRAINER_BIKER_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2399,11 +2000,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Biker1), - .party = {.NoItemDefaultMoves = sParty_Biker1} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Biker1), }, [TRAINER_BIKER_HIDEO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2411,11 +2010,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerHideo), - .party = {.NoItemDefaultMoves = sParty_BikerHideo} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerHideo), }, [TRAINER_BIKER_RUBEN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2423,11 +2020,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerRuben), - .party = {.NoItemCustomMoves = sParty_BikerRuben} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerRuben), }, [TRAINER_BIKER_BILLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2435,11 +2030,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerBilly), - .party = {.NoItemDefaultMoves = sParty_BikerBilly} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerBilly), }, [TRAINER_BIKER_NIKOLAS] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2447,11 +2040,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerNikolas), - .party = {.NoItemCustomMoves = sParty_BikerNikolas} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerNikolas), }, [TRAINER_BIKER_JAXON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2459,11 +2050,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerJaxon), - .party = {.NoItemCustomMoves = sParty_BikerJaxon} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerJaxon), }, [TRAINER_BIKER_WILLIAM] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2471,11 +2060,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerWilliam), - .party = {.NoItemCustomMoves = sParty_BikerWilliam} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerWilliam), }, [TRAINER_BIKER_LUKAS] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2483,11 +2070,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerLukas), - .party = {.NoItemCustomMoves = sParty_BikerLukas} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerLukas), }, [TRAINER_BIKER_ISAAC] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2495,11 +2080,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerIsaac), - .party = {.NoItemCustomMoves = sParty_BikerIsaac} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerIsaac), }, [TRAINER_BIKER_GERALD] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -2507,11 +2090,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerGerald), - .party = {.NoItemCustomMoves = sParty_BikerGerald} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerGerald), }, [TRAINER_BURGLAR_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2519,11 +2100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Burglar1), - .party = {.NoItemDefaultMoves = sParty_Burglar1} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Burglar1), }, [TRAINER_BURGLAR_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2531,11 +2110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Burglar2), - .party = {.NoItemDefaultMoves = sParty_Burglar2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Burglar2), }, [TRAINER_BURGLAR_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2543,11 +2120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Burglar3), - .party = {.NoItemDefaultMoves = sParty_Burglar3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Burglar3), }, [TRAINER_BURGLAR_QUINN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2555,11 +2130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BurglarQuinn), - .party = {.NoItemDefaultMoves = sParty_BurglarQuinn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BurglarQuinn), }, [TRAINER_BURGLAR_RAMON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2567,11 +2140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BurglarRamon), - .party = {.NoItemDefaultMoves = sParty_BurglarRamon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BurglarRamon), }, [TRAINER_BURGLAR_DUSTY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2579,11 +2150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BurglarDusty), - .party = {.NoItemDefaultMoves = sParty_BurglarDusty} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BurglarDusty), }, [TRAINER_BURGLAR_ARNIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2591,11 +2160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BurglarArnie), - .party = {.NoItemDefaultMoves = sParty_BurglarArnie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BurglarArnie), }, [TRAINER_BURGLAR_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2603,11 +2170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Burglar4), - .party = {.NoItemDefaultMoves = sParty_Burglar4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Burglar4), }, [TRAINER_BURGLAR_SIMON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2615,11 +2180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BurglarSimon), - .party = {.NoItemDefaultMoves = sParty_BurglarSimon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BurglarSimon), }, [TRAINER_BURGLAR_LEWIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BURGLAR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BURGLAR, @@ -2627,11 +2190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BurglarLewis), - .party = {.NoItemDefaultMoves = sParty_BurglarLewis} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BurglarLewis), }, [TRAINER_ENGINEER_BAILY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ENGINEER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ENGINEER, @@ -2639,11 +2200,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EngineerBaily), - .party = {.NoItemDefaultMoves = sParty_EngineerBaily} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EngineerBaily), }, [TRAINER_ENGINEER_BRAXTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ENGINEER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ENGINEER, @@ -2651,11 +2210,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EngineerBraxton), - .party = {.NoItemDefaultMoves = sParty_EngineerBraxton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EngineerBraxton), }, [TRAINER_ENGINEER_BERNIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ENGINEER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ENGINEER, @@ -2663,11 +2220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EngineerBernie), - .party = {.NoItemDefaultMoves = sParty_EngineerBernie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EngineerBernie), }, [TRAINER_FISHERMAN_DALE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2675,11 +2230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanDale), - .party = {.NoItemDefaultMoves = sParty_FishermanDale} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanDale), }, [TRAINER_FISHERMAN_BARNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2687,11 +2240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanBarny), - .party = {.NoItemDefaultMoves = sParty_FishermanBarny} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanBarny), }, [TRAINER_FISHERMAN_NED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2699,11 +2250,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanNed), - .party = {.NoItemDefaultMoves = sParty_FishermanNed} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanNed), }, [TRAINER_FISHERMAN_CHIP] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2711,11 +2260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanChip), - .party = {.NoItemDefaultMoves = sParty_FishermanChip} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanChip), }, [TRAINER_FISHERMAN_HANK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2723,11 +2270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanHank), - .party = {.NoItemDefaultMoves = sParty_FishermanHank} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanHank), }, [TRAINER_FISHERMAN_ELLIOT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2735,11 +2280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanElliot), - .party = {.NoItemDefaultMoves = sParty_FishermanElliot} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanElliot), }, [TRAINER_FISHERMAN_RONALD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2747,11 +2290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanRonald), - .party = {.NoItemDefaultMoves = sParty_FishermanRonald} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanRonald), }, [TRAINER_FISHERMAN_CLAUDE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2759,11 +2300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanClaude), - .party = {.NoItemDefaultMoves = sParty_FishermanClaude} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanClaude), }, [TRAINER_FISHERMAN_WADE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2771,11 +2310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanWade), - .party = {.NoItemDefaultMoves = sParty_FishermanWade} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanWade), }, [TRAINER_FISHERMAN_NOLAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2783,11 +2320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanNolan), - .party = {.NoItemDefaultMoves = sParty_FishermanNolan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanNolan), }, [TRAINER_FISHERMAN_ANDREW] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -2795,11 +2330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanAndrew), - .party = {.NoItemDefaultMoves = sParty_FishermanAndrew} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanAndrew), }, [TRAINER_SWIMMER_MALE_LUIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2807,11 +2340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleLuis), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleLuis} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleLuis), }, [TRAINER_SWIMMER_MALE_RICHARD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2819,11 +2350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleRichard), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleRichard} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleRichard), }, [TRAINER_SWIMMER_MALE_REECE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2831,11 +2360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleReece), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleReece} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleReece), }, [TRAINER_SWIMMER_MALE_MATTHEW] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2843,11 +2370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleMatthew), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleMatthew} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleMatthew), }, [TRAINER_SWIMMER_MALE_DOUGLAS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2855,11 +2380,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleDouglas), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleDouglas} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleDouglas), }, [TRAINER_SWIMMER_MALE_DAVID] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2867,11 +2390,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleDavid), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleDavid} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleDavid), }, [TRAINER_SWIMMER_MALE_TONY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2879,11 +2400,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleTony), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleTony} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleTony), }, [TRAINER_SWIMMER_MALE_AXLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2891,11 +2410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleAxle), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleAxle} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleAxle), }, [TRAINER_SWIMMER_MALE_BARRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2903,11 +2420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleBarry), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleBarry} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleBarry), }, [TRAINER_SWIMMER_MALE_DEAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2915,11 +2430,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleDean), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleDean} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleDean), }, [TRAINER_SWIMMER_MALE_DARRIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2927,11 +2440,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleDarrin), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleDarrin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleDarrin), }, [TRAINER_SWIMMER_MALE_SPENCER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2939,11 +2450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleSpencer), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleSpencer} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleSpencer), }, [TRAINER_SWIMMER_MALE_JACK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2951,11 +2460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleJack), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleJack} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleJack), }, [TRAINER_SWIMMER_MALE_JEROME] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2963,11 +2470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleJerome), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleJerome} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleJerome), }, [TRAINER_SWIMMER_MALE_ROLAND] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -2975,11 +2480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleRoland), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleRoland} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleRoland), }, [TRAINER_CUE_BALL_KOJI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -2987,11 +2490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallKoji), - .party = {.NoItemDefaultMoves = sParty_CueBallKoji} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallKoji), }, [TRAINER_CUE_BALL_LUKE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -2999,11 +2500,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallLuke), - .party = {.NoItemDefaultMoves = sParty_CueBallLuke} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallLuke), }, [TRAINER_CUE_BALL_CAMRON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3011,11 +2510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallCamron), - .party = {.NoItemDefaultMoves = sParty_CueBallCamron} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallCamron), }, [TRAINER_CUE_BALL_RAUL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3023,11 +2520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallRaul), - .party = {.NoItemDefaultMoves = sParty_CueBallRaul} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallRaul), }, [TRAINER_CUE_BALL_ISAIAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3035,11 +2530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallIsaiah), - .party = {.NoItemDefaultMoves = sParty_CueBallIsaiah} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallIsaiah), }, [TRAINER_CUE_BALL_ZEEK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3047,11 +2540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallZeek), - .party = {.NoItemDefaultMoves = sParty_CueBallZeek} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallZeek), }, [TRAINER_CUE_BALL_JAMAL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3059,11 +2550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallJamal), - .party = {.NoItemDefaultMoves = sParty_CueBallJamal} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallJamal), }, [TRAINER_CUE_BALL_COREY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3071,11 +2560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallCorey), - .party = {.NoItemDefaultMoves = sParty_CueBallCorey} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallCorey), }, [TRAINER_CUE_BALL_CHASE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -3083,11 +2570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallChase), - .party = {.NoItemDefaultMoves = sParty_CueBallChase} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallChase), }, [TRAINER_GAMER_HUGO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3095,11 +2580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerHugo), - .party = {.NoItemDefaultMoves = sParty_GamerHugo} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerHugo), }, [TRAINER_GAMER_JASPER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3107,11 +2590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerJasper), - .party = {.NoItemDefaultMoves = sParty_GamerJasper} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerJasper), }, [TRAINER_GAMER_DIRK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3119,11 +2600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerDirk), - .party = {.NoItemDefaultMoves = sParty_GamerDirk} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerDirk), }, [TRAINER_GAMER_DARIAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3131,11 +2610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerDarian), - .party = {.NoItemDefaultMoves = sParty_GamerDarian} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerDarian), }, [TRAINER_GAMER_STAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3143,11 +2620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerStan), - .party = {.NoItemDefaultMoves = sParty_GamerStan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerStan), }, [TRAINER_GAMER_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3155,11 +2630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Gamer1), - .party = {.NoItemDefaultMoves = sParty_Gamer1} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gamer1), }, [TRAINER_GAMER_RICH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -3167,11 +2640,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerRich), - .party = {.NoItemDefaultMoves = sParty_GamerRich} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerRich), }, [TRAINER_BEAUTY_BRIDGET] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3179,11 +2650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyBridget), - .party = {.NoItemDefaultMoves = sParty_BeautyBridget} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyBridget), }, [TRAINER_BEAUTY_TAMIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3191,11 +2660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyTamia), - .party = {.NoItemDefaultMoves = sParty_BeautyTamia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyTamia), }, [TRAINER_BEAUTY_LORI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3203,11 +2670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyLori), - .party = {.NoItemDefaultMoves = sParty_BeautyLori} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyLori), }, [TRAINER_BEAUTY_LOLA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3215,11 +2680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyLola), - .party = {.NoItemDefaultMoves = sParty_BeautyLola} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyLola), }, [TRAINER_BEAUTY_SHEILA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3227,11 +2690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautySheila), - .party = {.NoItemDefaultMoves = sParty_BeautySheila} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautySheila), }, [TRAINER_SWIMMER_FEMALE_TIFFANY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3239,11 +2700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleTiffany), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleTiffany} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleTiffany), }, [TRAINER_SWIMMER_FEMALE_NORA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3251,11 +2710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleNora), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleNora} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleNora), }, [TRAINER_SWIMMER_FEMALE_MELISSA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3263,11 +2720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleMelissa), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleMelissa} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleMelissa), }, [TRAINER_BEAUTY_GRACE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3275,11 +2730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyGrace), - .party = {.NoItemDefaultMoves = sParty_BeautyGrace} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyGrace), }, [TRAINER_BEAUTY_OLIVIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -3287,11 +2740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyOlivia), - .party = {.NoItemDefaultMoves = sParty_BeautyOlivia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyOlivia), }, [TRAINER_BEAUTY_LAUREN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3299,11 +2750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyLauren), - .party = {.NoItemDefaultMoves = sParty_BeautyLauren} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyLauren), }, [TRAINER_SWIMMER_FEMALE_ANYA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3311,11 +2760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleAnya), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleAnya} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleAnya), }, [TRAINER_SWIMMER_FEMALE_ALICE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3323,11 +2770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleAlice), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleAlice} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleAlice), }, [TRAINER_SWIMMER_FEMALE_CONNIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3335,11 +2780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleConnie), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleConnie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleConnie), }, [TRAINER_SWIMMER_FEMALE_SHIRLEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -3347,11 +2790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleShirley), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleShirley} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleShirley), }, [TRAINER_PSYCHIC_JOHAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -3359,11 +2800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicJohan), - .party = {.NoItemDefaultMoves = sParty_PsychicJohan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PsychicJohan), }, [TRAINER_PSYCHIC_TYRON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -3371,11 +2810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicTyron), - .party = {.NoItemDefaultMoves = sParty_PsychicTyron} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PsychicTyron), }, [TRAINER_PSYCHIC_CAMERON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -3383,11 +2820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicCameron), - .party = {.NoItemDefaultMoves = sParty_PsychicCameron} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PsychicCameron), }, [TRAINER_PSYCHIC_PRESTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -3395,11 +2830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicPreston), - .party = {.NoItemDefaultMoves = sParty_PsychicPreston} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PsychicPreston), }, [TRAINER_ROCKER_RANDALL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ROCKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ROCKER, @@ -3407,11 +2840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RockerRandall), - .party = {.NoItemDefaultMoves = sParty_RockerRandall} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RockerRandall), }, [TRAINER_ROCKER_LUCA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ROCKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ROCKER, @@ -3419,11 +2850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RockerLuca), - .party = {.NoItemDefaultMoves = sParty_RockerLuca} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RockerLuca), }, [TRAINER_JUGGLER_DALTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3431,11 +2860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerDalton), - .party = {.NoItemDefaultMoves = sParty_JugglerDalton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerDalton), }, [TRAINER_JUGGLER_NELSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3443,11 +2870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerNelson), - .party = {.NoItemDefaultMoves = sParty_JugglerNelson} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerNelson), }, [TRAINER_JUGGLER_KIRK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3455,11 +2880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerKirk), - .party = {.NoItemDefaultMoves = sParty_JugglerKirk} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerKirk), }, [TRAINER_JUGGLER_SHAWN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3467,11 +2890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerShawn), - .party = {.NoItemDefaultMoves = sParty_JugglerShawn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerShawn), }, [TRAINER_JUGGLER_GREGORY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3479,11 +2900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerGregory), - .party = {.NoItemCustomMoves = sParty_JugglerGregory} + .party = NO_ITEM_CUSTOM_MOVES(sParty_JugglerGregory), }, [TRAINER_JUGGLER_EDWARD] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3491,11 +2910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerEdward), - .party = {.NoItemCustomMoves = sParty_JugglerEdward} + .party = NO_ITEM_CUSTOM_MOVES(sParty_JugglerEdward), }, [TRAINER_JUGGLER_KAYDEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3503,11 +2920,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerKayden), - .party = {.NoItemDefaultMoves = sParty_JugglerKayden} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerKayden), }, [TRAINER_JUGGLER_NATE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -3515,11 +2930,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerNate), - .party = {.NoItemDefaultMoves = sParty_JugglerNate} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerNate), }, [TRAINER_TAMER_PHIL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -3527,11 +2940,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerPhil), - .party = {.NoItemDefaultMoves = sParty_TamerPhil} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerPhil), }, [TRAINER_TAMER_EDGAR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -3539,11 +2950,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerEdgar), - .party = {.NoItemDefaultMoves = sParty_TamerEdgar} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerEdgar), }, [TRAINER_TAMER_JASON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -3551,11 +2960,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerJason), - .party = {.NoItemDefaultMoves = sParty_TamerJason} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerJason), }, [TRAINER_TAMER_COLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -3563,11 +2970,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerCole), - .party = {.NoItemDefaultMoves = sParty_TamerCole} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerCole), }, [TRAINER_TAMER_VINCENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -3575,11 +2980,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerVincent), - .party = {.NoItemDefaultMoves = sParty_TamerVincent} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerVincent), }, [TRAINER_TAMER_JOHN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -3587,11 +2990,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerJohn), - .party = {.NoItemDefaultMoves = sParty_TamerJohn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerJohn), }, [TRAINER_BIRD_KEEPER_SEBASTIAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3599,11 +3000,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperSebastian), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperSebastian} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperSebastian), }, [TRAINER_BIRD_KEEPER_PERRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3611,11 +3010,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperPerry), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperPerry} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperPerry), }, [TRAINER_BIRD_KEEPER_ROBERT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3623,11 +3020,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperRobert), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperRobert} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperRobert), }, [TRAINER_BIRD_KEEPER_DONALD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3635,11 +3030,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperDonald), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperDonald} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperDonald), }, [TRAINER_BIRD_KEEPER_BENNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3647,11 +3040,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperBenny), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperBenny} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperBenny), }, [TRAINER_BIRD_KEEPER_EDWIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3659,11 +3050,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperEdwin), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperEdwin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperEdwin), }, [TRAINER_BIRD_KEEPER_CHESTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3671,11 +3060,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperChester), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperChester} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperChester), }, [TRAINER_BIRD_KEEPER_WILTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3683,11 +3070,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperWilton), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperWilton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperWilton), }, [TRAINER_BIRD_KEEPER_RAMIRO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3695,11 +3080,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperRamiro), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperRamiro} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperRamiro), }, [TRAINER_BIRD_KEEPER_JACOB] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3707,11 +3090,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperJacob), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperJacob} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperJacob), }, [TRAINER_BIRD_KEEPER_ROGER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3719,11 +3100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperRoger), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperRoger} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperRoger), }, [TRAINER_BIRD_KEEPER_REED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3731,11 +3110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperReed), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperReed} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperReed), }, [TRAINER_BIRD_KEEPER_KEITH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3743,11 +3120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperKeith), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperKeith} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperKeith), }, [TRAINER_BIRD_KEEPER_CARTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3755,11 +3130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperCarter), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperCarter} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperCarter), }, [TRAINER_BIRD_KEEPER_MITCH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3767,11 +3140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperMitch), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperMitch} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperMitch), }, [TRAINER_BIRD_KEEPER_BECK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3779,11 +3150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperBeck), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperBeck} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperBeck), }, [TRAINER_BIRD_KEEPER_MARLON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -3791,11 +3160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperMarlon), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperMarlon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperMarlon), }, [TRAINER_BLACK_BELT_KOICHI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3803,11 +3170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltKoichi), - .party = {.ItemDefaultMoves = sParty_BlackBeltKoichi} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltKoichi), }, [TRAINER_BLACK_BELT_MIKE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3815,11 +3180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltMike), - .party = {.ItemDefaultMoves = sParty_BlackBeltMike} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltMike), }, [TRAINER_BLACK_BELT_HIDEKI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3827,11 +3190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltHideki), - .party = {.ItemDefaultMoves = sParty_BlackBeltHideki} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltHideki), }, [TRAINER_BLACK_BELT_AARON] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3839,11 +3200,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltAaron), - .party = {.ItemDefaultMoves = sParty_BlackBeltAaron} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltAaron), }, [TRAINER_BLACK_BELT_HITOSHI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3851,11 +3210,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltHitoshi), - .party = {.ItemDefaultMoves = sParty_BlackBeltHitoshi} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltHitoshi), }, [TRAINER_BLACK_BELT_ATSUSHI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3863,11 +3220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltAtsushi), - .party = {.ItemDefaultMoves = sParty_BlackBeltAtsushi} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltAtsushi), }, [TRAINER_BLACK_BELT_KIYO] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3875,11 +3230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltKiyo), - .party = {.ItemDefaultMoves = sParty_BlackBeltKiyo} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltKiyo), }, [TRAINER_BLACK_BELT_TAKASHI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3887,11 +3240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltTakashi), - .party = {.ItemDefaultMoves = sParty_BlackBeltTakashi} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltTakashi), }, [TRAINER_BLACK_BELT_DAISUKE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -3899,11 +3250,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltDaisuke), - .party = {.ItemDefaultMoves = sParty_BlackBeltDaisuke} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltDaisuke), }, [TRAINER_RIVAL_OAKS_LAB_SQUIRTLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3911,11 +3260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalOaksLabSquirtle), - .party = {.NoItemDefaultMoves = sParty_RivalOaksLabSquirtle} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalOaksLabSquirtle), }, [TRAINER_RIVAL_OAKS_LAB_BULBASAUR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3923,11 +3270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalOaksLabBulbasaur), - .party = {.NoItemDefaultMoves = sParty_RivalOaksLabBulbasaur} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalOaksLabBulbasaur), }, [TRAINER_RIVAL_OAKS_LAB_CHARMANDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3935,11 +3280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalOaksLabCharmander), - .party = {.NoItemDefaultMoves = sParty_RivalOaksLabCharmander} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalOaksLabCharmander), }, [TRAINER_RIVAL_ROUTE22_EARLY_SQUIRTLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3947,11 +3290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalRoute22EarlySquirtle), - .party = {.NoItemCustomMoves = sParty_RivalRoute22EarlySquirtle} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalRoute22EarlySquirtle), }, [TRAINER_RIVAL_ROUTE22_EARLY_BULBASAUR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3959,11 +3300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalRoute22EarlyBulbasaur), - .party = {.NoItemCustomMoves = sParty_RivalRoute22EarlyBulbasaur} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalRoute22EarlyBulbasaur), }, [TRAINER_RIVAL_ROUTE22_EARLY_CHARMANDER] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3971,11 +3310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalRoute22EarlyCharmander), - .party = {.NoItemCustomMoves = sParty_RivalRoute22EarlyCharmander} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalRoute22EarlyCharmander), }, [TRAINER_RIVAL_CERULEAN_SQUIRTLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3983,11 +3320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalCeruleanSquirtle), - .party = {.NoItemCustomMoves = sParty_RivalCeruleanSquirtle} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalCeruleanSquirtle), }, [TRAINER_RIVAL_CERULEAN_BULBASAUR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -3995,11 +3330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalCeruleanBulbasaur), - .party = {.NoItemCustomMoves = sParty_RivalCeruleanBulbasaur} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalCeruleanBulbasaur), }, [TRAINER_RIVAL_CERULEAN_CHARMANDER] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_EARLY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_EARLY, @@ -4007,11 +3340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalCeruleanCharmander), - .party = {.NoItemCustomMoves = sParty_RivalCeruleanCharmander} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalCeruleanCharmander), }, [TRAINER_SCIENTIST_TED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4019,11 +3350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistTed), - .party = {.NoItemDefaultMoves = sParty_ScientistTed} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistTed), }, [TRAINER_SCIENTIST_CONNOR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4031,11 +3360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistConnor), - .party = {.NoItemCustomMoves = sParty_ScientistConnor} + .party = NO_ITEM_CUSTOM_MOVES(sParty_ScientistConnor), }, [TRAINER_SCIENTIST_JERRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4043,11 +3370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistJerry), - .party = {.NoItemDefaultMoves = sParty_ScientistJerry} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistJerry), }, [TRAINER_SCIENTIST_JOSE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4055,11 +3380,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistJose), - .party = {.NoItemCustomMoves = sParty_ScientistJose} + .party = NO_ITEM_CUSTOM_MOVES(sParty_ScientistJose), }, [TRAINER_SCIENTIST_RODNEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4067,11 +3390,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistRodney), - .party = {.NoItemDefaultMoves = sParty_ScientistRodney} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistRodney), }, [TRAINER_SCIENTIST_BEAU] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4079,11 +3400,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistBeau), - .party = {.NoItemCustomMoves = sParty_ScientistBeau} + .party = NO_ITEM_CUSTOM_MOVES(sParty_ScientistBeau), }, [TRAINER_SCIENTIST_TAYLOR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4091,11 +3410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistTaylor), - .party = {.NoItemCustomMoves = sParty_ScientistTaylor} + .party = NO_ITEM_CUSTOM_MOVES(sParty_ScientistTaylor), }, [TRAINER_SCIENTIST_JOSHUA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4103,11 +3420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistJoshua), - .party = {.NoItemDefaultMoves = sParty_ScientistJoshua} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistJoshua), }, [TRAINER_SCIENTIST_PARKER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4115,11 +3430,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistParker), - .party = {.NoItemDefaultMoves = sParty_ScientistParker} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistParker), }, [TRAINER_SCIENTIST_ED] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4127,11 +3440,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistEd), - .party = {.NoItemCustomMoves = sParty_ScientistEd} + .party = NO_ITEM_CUSTOM_MOVES(sParty_ScientistEd), }, [TRAINER_SCIENTIST_TRAVIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4139,11 +3450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistTravis), - .party = {.NoItemDefaultMoves = sParty_ScientistTravis} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistTravis), }, [TRAINER_SCIENTIST_BRAYDON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4151,11 +3460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistBraydon), - .party = {.NoItemDefaultMoves = sParty_ScientistBraydon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistBraydon), }, [TRAINER_SCIENTIST_IVAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -4163,11 +3470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistIvan), - .party = {.NoItemDefaultMoves = sParty_ScientistIvan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ScientistIvan), }, [TRAINER_BOSS_GIOVANNI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BOSS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_LEADER_GIOVANNI, @@ -4175,11 +3480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BossGiovanni), - .party = {.NoItemDefaultMoves = sParty_BossGiovanni} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BossGiovanni), }, [TRAINER_BOSS_GIOVANNI_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BOSS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_LEADER_GIOVANNI, @@ -4187,11 +3490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BossGiovanni2), - .party = {.NoItemDefaultMoves = sParty_BossGiovanni2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BossGiovanni2), }, [TRAINER_LEADER_GIOVANNI] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_LEADER_GIOVANNI, @@ -4199,11 +3500,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_FULL_HEAL}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderGiovanni), - .party = {.NoItemCustomMoves = sParty_LeaderGiovanni} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderGiovanni), }, [TRAINER_TEAM_ROCKET_GRUNT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4211,11 +3510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt), }, [TRAINER_TEAM_ROCKET_GRUNT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4223,11 +3520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt2), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt2), }, [TRAINER_TEAM_ROCKET_GRUNT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4235,11 +3530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt3), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt3), }, [TRAINER_TEAM_ROCKET_GRUNT_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4247,11 +3540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt4), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt4), }, [TRAINER_TEAM_ROCKET_GRUNT_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4259,11 +3550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt5), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt5} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt5), }, [TRAINER_TEAM_ROCKET_GRUNT_6] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4271,11 +3560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt6), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt6} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt6), }, [TRAINER_TEAM_ROCKET_GRUNT_7] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4283,11 +3570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt7), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt7} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt7), }, [TRAINER_TEAM_ROCKET_GRUNT_8] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4295,11 +3580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt8), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt8} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt8), }, [TRAINER_TEAM_ROCKET_GRUNT_9] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4307,11 +3590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt9), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt9} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt9), }, [TRAINER_TEAM_ROCKET_GRUNT_10] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4319,11 +3600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt10), - .party = {.NoItemCustomMoves = sParty_TeamRocketGrunt10} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketGrunt10), }, [TRAINER_TEAM_ROCKET_GRUNT_11] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4331,11 +3610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt11), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt11} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt11), }, [TRAINER_TEAM_ROCKET_GRUNT_12] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4343,11 +3620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt12), - .party = {.NoItemCustomMoves = sParty_TeamRocketGrunt12} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketGrunt12), }, [TRAINER_TEAM_ROCKET_GRUNT_13] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4355,11 +3630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt13), - .party = {.NoItemCustomMoves = sParty_TeamRocketGrunt13} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketGrunt13), }, [TRAINER_TEAM_ROCKET_GRUNT_14] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4367,11 +3640,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt14), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt14} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt14), }, [TRAINER_TEAM_ROCKET_GRUNT_15] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4379,11 +3650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt15), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt15} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt15), }, [TRAINER_TEAM_ROCKET_GRUNT_16] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4391,11 +3660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt16), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt16} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt16), }, [TRAINER_TEAM_ROCKET_GRUNT_17] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4403,11 +3670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt17), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt17} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt17), }, [TRAINER_TEAM_ROCKET_GRUNT_18] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4415,11 +3680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt18), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt18} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt18), }, [TRAINER_TEAM_ROCKET_GRUNT_19] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4427,11 +3690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt19), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt19} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt19), }, [TRAINER_TEAM_ROCKET_GRUNT_20] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4439,11 +3700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt20), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt20} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt20), }, [TRAINER_TEAM_ROCKET_GRUNT_21] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4451,11 +3710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt21), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt21} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt21), }, [TRAINER_TEAM_ROCKET_GRUNT_22] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4463,11 +3720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt22), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt22} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt22), }, [TRAINER_TEAM_ROCKET_GRUNT_23] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4475,11 +3730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt23), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt23} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt23), }, [TRAINER_TEAM_ROCKET_GRUNT_24] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4487,11 +3740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt24), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt24} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt24), }, [TRAINER_TEAM_ROCKET_GRUNT_25] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4499,11 +3750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt25), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt25} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt25), }, [TRAINER_TEAM_ROCKET_GRUNT_26] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4511,11 +3760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt26), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt26} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt26), }, [TRAINER_TEAM_ROCKET_GRUNT_27] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4523,11 +3770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt27), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt27} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt27), }, [TRAINER_TEAM_ROCKET_GRUNT_28] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4535,11 +3780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt28), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt28} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt28), }, [TRAINER_TEAM_ROCKET_GRUNT_29] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4547,11 +3790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt29), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt29} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt29), }, [TRAINER_TEAM_ROCKET_GRUNT_30] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4559,11 +3800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt30), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt30} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt30), }, [TRAINER_TEAM_ROCKET_GRUNT_31] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4571,11 +3810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt31), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt31} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt31), }, [TRAINER_TEAM_ROCKET_GRUNT_32] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4583,11 +3820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt32), - .party = {.NoItemCustomMoves = sParty_TeamRocketGrunt32} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketGrunt32), }, [TRAINER_TEAM_ROCKET_GRUNT_33] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4595,11 +3830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt33), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt33} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt33), }, [TRAINER_TEAM_ROCKET_GRUNT_34] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4607,11 +3840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt34), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt34} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt34), }, [TRAINER_TEAM_ROCKET_GRUNT_35] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4619,11 +3850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt35), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt35} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt35), }, [TRAINER_TEAM_ROCKET_GRUNT_36] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4631,11 +3860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt36), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt36} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt36), }, [TRAINER_TEAM_ROCKET_GRUNT_37] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4643,11 +3870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt37), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt37} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt37), }, [TRAINER_TEAM_ROCKET_GRUNT_38] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4655,11 +3880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt38), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt38} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt38), }, [TRAINER_TEAM_ROCKET_GRUNT_39] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4667,11 +3890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt39), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt39} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt39), }, [TRAINER_TEAM_ROCKET_GRUNT_40] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4679,11 +3900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt40), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt40} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt40), }, [TRAINER_TEAM_ROCKET_GRUNT_41] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -4691,11 +3910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt41), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt41} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt41), }, [TRAINER_COOLTRAINER_SAMUEL] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4703,11 +3920,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerSamuel), - .party = {.NoItemCustomMoves = sParty_CooltrainerSamuel} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerSamuel), }, [TRAINER_COOLTRAINER_GEORGE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4715,11 +3930,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerGeorge), - .party = {.NoItemCustomMoves = sParty_CooltrainerGeorge} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerGeorge), }, [TRAINER_COOLTRAINER_COLBY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4727,11 +3940,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerColby), - .party = {.NoItemCustomMoves = sParty_CooltrainerColby} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerColby), }, [TRAINER_COOLTRAINER_PAUL] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4739,11 +3950,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerPaul), - .party = {.NoItemCustomMoves = sParty_CooltrainerPaul} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerPaul), }, [TRAINER_COOLTRAINER_ROLANDO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4751,11 +3960,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerRolando), - .party = {.NoItemCustomMoves = sParty_CooltrainerRolando} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerRolando), }, [TRAINER_COOLTRAINER_GILBERT] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4763,11 +3970,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerGilbert), - .party = {.NoItemCustomMoves = sParty_CooltrainerGilbert} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerGilbert), }, [TRAINER_COOLTRAINER_OWEN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4775,11 +3980,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerOwen), - .party = {.NoItemCustomMoves = sParty_CooltrainerOwen} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerOwen), }, [TRAINER_COOLTRAINER_BERKE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4787,11 +3990,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerBerke), - .party = {.NoItemCustomMoves = sParty_CooltrainerBerke} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerBerke), }, [TRAINER_COOLTRAINER_YUJI] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4799,11 +4000,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerYuji), - .party = {.NoItemCustomMoves = sParty_CooltrainerYuji} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerYuji), }, [TRAINER_COOLTRAINER_WARREN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -4811,11 +4010,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerWarren), - .party = {.NoItemCustomMoves = sParty_CooltrainerWarren} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerWarren), }, [TRAINER_COOLTRAINER_MARY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4823,11 +4020,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerMary), - .party = {.NoItemCustomMoves = sParty_CooltrainerMary} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerMary), }, [TRAINER_COOLTRAINER_CAROLINE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4835,11 +4030,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerCaroline), - .party = {.NoItemCustomMoves = sParty_CooltrainerCaroline} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerCaroline), }, [TRAINER_COOLTRAINER_ALEXA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4847,11 +4040,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerAlexa), - .party = {.NoItemCustomMoves = sParty_CooltrainerAlexa} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerAlexa), }, [TRAINER_COOLTRAINER_SHANNON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4859,11 +4050,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerShannon), - .party = {.NoItemCustomMoves = sParty_CooltrainerShannon} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerShannon), }, [TRAINER_COOLTRAINER_NAOMI] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4871,11 +4060,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerNaomi), - .party = {.NoItemCustomMoves = sParty_CooltrainerNaomi} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerNaomi), }, [TRAINER_COOLTRAINER_BROOKE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4883,11 +4070,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerBrooke), - .party = {.NoItemCustomMoves = sParty_CooltrainerBrooke} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerBrooke), }, [TRAINER_COOLTRAINER_AUSTINA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4895,11 +4080,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerAustina), - .party = {.NoItemCustomMoves = sParty_CooltrainerAustina} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerAustina), }, [TRAINER_COOLTRAINER_JULIE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -4907,11 +4090,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerJulie), - .party = {.NoItemCustomMoves = sParty_CooltrainerJulie} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerJulie), }, [TRAINER_ELITE_FOUR_LORELEI] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_ELITE_FOUR_LORELEI, @@ -4919,11 +4100,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourLorelei), - .party = {.ItemCustomMoves = sParty_EliteFourLorelei} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourLorelei), }, [TRAINER_ELITE_FOUR_BRUNO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_BRUNO, @@ -4931,11 +4110,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourBruno), - .party = {.ItemCustomMoves = sParty_EliteFourBruno} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourBruno), }, [TRAINER_ELITE_FOUR_AGATHA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_ELITE_FOUR_AGATHA, @@ -4943,11 +4120,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourAgatha), - .party = {.ItemCustomMoves = sParty_EliteFourAgatha} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourAgatha), }, [TRAINER_ELITE_FOUR_LANCE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_LANCE, @@ -4955,11 +4130,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourLance), - .party = {.ItemCustomMoves = sParty_EliteFourLance} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourLance), }, [TRAINER_LEADER_BROCK] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BROCK, @@ -4967,11 +4140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderBrock), - .party = {.NoItemCustomMoves = sParty_LeaderBrock} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderBrock), }, [TRAINER_LEADER_MISTY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LEADER_MISTY, @@ -4979,11 +4150,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderMisty), - .party = {.NoItemCustomMoves = sParty_LeaderMisty} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderMisty), }, [TRAINER_LEADER_LT_SURGE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_LT_SURGE, @@ -4991,11 +4160,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_FULL_HEAL}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderLtSurge), - .party = {.NoItemCustomMoves = sParty_LeaderLtSurge} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderLtSurge), }, [TRAINER_LEADER_ERIKA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ERIKA, @@ -5003,11 +4170,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_FULL_HEAL}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderErika), - .party = {.NoItemCustomMoves = sParty_LeaderErika} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderErika), }, [TRAINER_LEADER_KOGA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_KOGA, @@ -5015,11 +4180,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_FULL_HEAL}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderKoga), - .party = {.NoItemCustomMoves = sParty_LeaderKoga} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderKoga), }, [TRAINER_LEADER_BLAINE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BLAINE, @@ -5027,11 +4190,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_FULL_HEAL}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderBlaine), - .party = {.NoItemCustomMoves = sParty_LeaderBlaine} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderBlaine), }, [TRAINER_LEADER_SABRINA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LEADER_SABRINA, @@ -5039,11 +4200,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_FULL_HEAL}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_LeaderSabrina), - .party = {.NoItemCustomMoves = sParty_LeaderSabrina} + .party = NO_ITEM_CUSTOM_MOVES(sParty_LeaderSabrina), }, [TRAINER_GENTLEMAN_THOMAS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5051,11 +4210,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanThomas), - .party = {.NoItemDefaultMoves = sParty_GentlemanThomas} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanThomas), }, [TRAINER_GENTLEMAN_ARTHUR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5063,11 +4220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanArthur), - .party = {.NoItemDefaultMoves = sParty_GentlemanArthur} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanArthur), }, [TRAINER_GENTLEMAN_TUCKER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5075,11 +4230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanTucker), - .party = {.NoItemDefaultMoves = sParty_GentlemanTucker} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanTucker), }, [TRAINER_GENTLEMAN_NORTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5087,11 +4240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanNorton), - .party = {.NoItemDefaultMoves = sParty_GentlemanNorton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanNorton), }, [TRAINER_GENTLEMAN_WALTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5099,11 +4250,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanWalter), - .party = {.NoItemDefaultMoves = sParty_GentlemanWalter} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanWalter), }, [TRAINER_RIVAL_SS_ANNE_SQUIRTLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5111,11 +4260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalSsAnneSquirtle), - .party = {.NoItemDefaultMoves = sParty_RivalSsAnneSquirtle} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalSsAnneSquirtle), }, [TRAINER_RIVAL_SS_ANNE_BULBASAUR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5123,11 +4270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalSsAnneBulbasaur), - .party = {.NoItemDefaultMoves = sParty_RivalSsAnneBulbasaur} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalSsAnneBulbasaur), }, [TRAINER_RIVAL_SS_ANNE_CHARMANDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5135,11 +4280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalSsAnneCharmander), - .party = {.NoItemDefaultMoves = sParty_RivalSsAnneCharmander} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalSsAnneCharmander), }, [TRAINER_RIVAL_POKENON_TOWER_SQUIRTLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5147,11 +4290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalPokenonTowerSquirtle), - .party = {.NoItemDefaultMoves = sParty_RivalPokenonTowerSquirtle} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalPokenonTowerSquirtle), }, [TRAINER_RIVAL_POKENON_TOWER_BULBASAUR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5159,11 +4300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalPokenonTowerBulbasaur), - .party = {.NoItemDefaultMoves = sParty_RivalPokenonTowerBulbasaur} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalPokenonTowerBulbasaur), }, [TRAINER_RIVAL_POKENON_TOWER_CHARMANDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5171,11 +4310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalPokenonTowerCharmander), - .party = {.NoItemDefaultMoves = sParty_RivalPokenonTowerCharmander} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalPokenonTowerCharmander), }, [TRAINER_RIVAL_SILPH_SQUIRTLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5183,11 +4320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalSilphSquirtle), - .party = {.NoItemDefaultMoves = sParty_RivalSilphSquirtle} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalSilphSquirtle), }, [TRAINER_RIVAL_SILPH_BULBASAUR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5195,11 +4330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalSilphBulbasaur), - .party = {.NoItemDefaultMoves = sParty_RivalSilphBulbasaur} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalSilphBulbasaur), }, [TRAINER_RIVAL_SILPH_CHARMANDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5207,11 +4340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalSilphCharmander), - .party = {.NoItemDefaultMoves = sParty_RivalSilphCharmander} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RivalSilphCharmander), }, [TRAINER_RIVAL_ROUTE22_LATE_SQUIRTLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5219,11 +4350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalRoute22LateSquirtle), - .party = {.NoItemCustomMoves = sParty_RivalRoute22LateSquirtle} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalRoute22LateSquirtle), }, [TRAINER_RIVAL_ROUTE22_LATE_BULBASAUR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5231,11 +4360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalRoute22LateBulbasaur), - .party = {.NoItemCustomMoves = sParty_RivalRoute22LateBulbasaur} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalRoute22LateBulbasaur), }, [TRAINER_RIVAL_ROUTE22_LATE_CHARMANDER] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RIVAL_LATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RIVAL_LATE, @@ -5243,11 +4370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_RivalRoute22LateCharmander), - .party = {.NoItemCustomMoves = sParty_RivalRoute22LateCharmander} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RivalRoute22LateCharmander), }, [TRAINER_CHAMPION_FIRST_SQUIRTLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_RIVAL, @@ -5255,11 +4380,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_ChampionFirstSquirtle), - .party = {.ItemCustomMoves = sParty_ChampionFirstSquirtle} + .party = ITEM_CUSTOM_MOVES(sParty_ChampionFirstSquirtle), }, [TRAINER_CHAMPION_FIRST_BULBASAUR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_RIVAL, @@ -5267,11 +4390,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_ChampionFirstBulbasaur), - .party = {.ItemCustomMoves = sParty_ChampionFirstBulbasaur} + .party = ITEM_CUSTOM_MOVES(sParty_ChampionFirstBulbasaur), }, [TRAINER_CHAMPION_FIRST_CHARMANDER] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_RIVAL, @@ -5279,11 +4400,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_ChampionFirstCharmander), - .party = {.ItemCustomMoves = sParty_ChampionFirstCharmander} + .party = ITEM_CUSTOM_MOVES(sParty_ChampionFirstCharmander), }, [TRAINER_CHANNELER_PATRICIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5291,11 +4410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerPatricia), - .party = {.NoItemDefaultMoves = sParty_ChannelerPatricia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerPatricia), }, [TRAINER_CHANNELER_CARLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5303,11 +4420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerCarly), - .party = {.NoItemDefaultMoves = sParty_ChannelerCarly} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerCarly), }, [TRAINER_CHANNELER_HOPE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5315,11 +4430,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerHope), - .party = {.NoItemDefaultMoves = sParty_ChannelerHope} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerHope), }, [TRAINER_CHANNELER_PAULA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5327,11 +4440,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerPaula), - .party = {.NoItemDefaultMoves = sParty_ChannelerPaula} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerPaula), }, [TRAINER_CHANNELER_LAUREL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5339,11 +4450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerLaurel), - .party = {.NoItemDefaultMoves = sParty_ChannelerLaurel} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerLaurel), }, [TRAINER_CHANNELER_JODY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5351,11 +4460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerJody), - .party = {.NoItemDefaultMoves = sParty_ChannelerJody} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerJody), }, [TRAINER_CHANNELER_TAMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5363,11 +4470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerTammy), - .party = {.NoItemDefaultMoves = sParty_ChannelerTammy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerTammy), }, [TRAINER_CHANNELER_RUTH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5375,11 +4480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerRuth), - .party = {.NoItemDefaultMoves = sParty_ChannelerRuth} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerRuth), }, [TRAINER_CHANNELER_KARINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5387,11 +4490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerKarina), - .party = {.NoItemDefaultMoves = sParty_ChannelerKarina} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerKarina), }, [TRAINER_CHANNELER_JANAE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5399,11 +4500,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerJanae), - .party = {.NoItemDefaultMoves = sParty_ChannelerJanae} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerJanae), }, [TRAINER_CHANNELER_ANGELICA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5411,11 +4510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerAngelica), - .party = {.NoItemDefaultMoves = sParty_ChannelerAngelica} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerAngelica), }, [TRAINER_CHANNELER_EMILIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5423,11 +4520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerEmilia), - .party = {.NoItemDefaultMoves = sParty_ChannelerEmilia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerEmilia), }, [TRAINER_CHANNELER_JENNIFER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5435,11 +4530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerJennifer), - .party = {.NoItemDefaultMoves = sParty_ChannelerJennifer} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerJennifer), }, [TRAINER_CHANNELER_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5447,11 +4540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler1), - .party = {.NoItemDefaultMoves = sParty_Channeler1} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler1), }, [TRAINER_CHANNELER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5459,11 +4550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler2), - .party = {.NoItemDefaultMoves = sParty_Channeler2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler2), }, [TRAINER_CHANNELER_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5471,11 +4560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler3), - .party = {.NoItemDefaultMoves = sParty_Channeler3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler3), }, [TRAINER_CHANNELER_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5483,11 +4570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler4), - .party = {.NoItemDefaultMoves = sParty_Channeler4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler4), }, [TRAINER_CHANNELER_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5495,11 +4580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler5), - .party = {.NoItemDefaultMoves = sParty_Channeler5} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler5), }, [TRAINER_CHANNELER_6] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5507,11 +4590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler6), - .party = {.NoItemDefaultMoves = sParty_Channeler6} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler6), }, [TRAINER_CHANNELER_7] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5519,11 +4600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler7), - .party = {.NoItemDefaultMoves = sParty_Channeler7} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler7), }, [TRAINER_CHANNELER_8] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5531,11 +4610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Channeler8), - .party = {.NoItemDefaultMoves = sParty_Channeler8} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Channeler8), }, [TRAINER_CHANNELER_AMANDA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5543,11 +4620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerAmanda), - .party = {.NoItemDefaultMoves = sParty_ChannelerAmanda} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerAmanda), }, [TRAINER_CHANNELER_STACY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5555,11 +4630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerStacy), - .party = {.NoItemDefaultMoves = sParty_ChannelerStacy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerStacy), }, [TRAINER_CHANNELER_TASHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CHANNELER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_CHANNELER, @@ -5567,11 +4640,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ChannelerTasha), - .party = {.NoItemDefaultMoves = sParty_ChannelerTasha} + .party = NO_ITEM_DEFAULT_MOVES(sParty_ChannelerTasha), }, [TRAINER_HIKER_JEREMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -5579,11 +4650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerJeremy), - .party = {.NoItemDefaultMoves = sParty_HikerJeremy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerJeremy), }, [TRAINER_PICNICKER_ALMA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5591,11 +4660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerAlma), - .party = {.NoItemDefaultMoves = sParty_PicnickerAlma} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerAlma), }, [TRAINER_PICNICKER_SUSIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5603,11 +4670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerSusie), - .party = {.NoItemDefaultMoves = sParty_PicnickerSusie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerSusie), }, [TRAINER_PICNICKER_VALERIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5615,11 +4680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerValerie), - .party = {.NoItemDefaultMoves = sParty_PicnickerValerie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerValerie), }, [TRAINER_PICNICKER_GWEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5627,11 +4690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerGwen), - .party = {.NoItemDefaultMoves = sParty_PicnickerGwen} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerGwen), }, [TRAINER_BIKER_VIRGIL] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -5639,11 +4700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerVirgil), - .party = {.NoItemCustomMoves = sParty_BikerVirgil} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerVirgil), }, [TRAINER_CAMPER_FLINT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -5651,11 +4710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperFlint), - .party = {.NoItemDefaultMoves = sParty_CamperFlint} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperFlint), }, [TRAINER_PICNICKER_MISSY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5663,11 +4720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerMissy), - .party = {.NoItemDefaultMoves = sParty_PicnickerMissy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerMissy), }, [TRAINER_PICNICKER_IRENE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5675,11 +4730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerIrene), - .party = {.NoItemDefaultMoves = sParty_PicnickerIrene} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerIrene), }, [TRAINER_PICNICKER_DANA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5687,11 +4740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerDana), - .party = {.NoItemDefaultMoves = sParty_PicnickerDana} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerDana), }, [TRAINER_PICNICKER_ARIANA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5699,11 +4750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerAriana), - .party = {.NoItemDefaultMoves = sParty_PicnickerAriana} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerAriana), }, [TRAINER_PICNICKER_LEAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5711,11 +4760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerLeah), - .party = {.NoItemDefaultMoves = sParty_PicnickerLeah} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerLeah), }, [TRAINER_CAMPER_JUSTIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -5723,11 +4770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperJustin), - .party = {.NoItemDefaultMoves = sParty_CamperJustin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperJustin), }, [TRAINER_PICNICKER_YAZMIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5735,11 +4780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerYazmin), - .party = {.NoItemDefaultMoves = sParty_PicnickerYazmin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerYazmin), }, [TRAINER_PICNICKER_KINDRA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5747,11 +4790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerKindra), - .party = {.NoItemDefaultMoves = sParty_PicnickerKindra} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerKindra), }, [TRAINER_PICNICKER_BECKY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5759,11 +4800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerBecky), - .party = {.NoItemDefaultMoves = sParty_PicnickerBecky} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerBecky), }, [TRAINER_PICNICKER_CELIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -5771,11 +4810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerCelia), - .party = {.NoItemDefaultMoves = sParty_PicnickerCelia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerCelia), }, [TRAINER_GENTLEMAN_BROOKS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5783,11 +4820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanBrooks), - .party = {.NoItemDefaultMoves = sParty_GentlemanBrooks} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanBrooks), }, [TRAINER_GENTLEMAN_LAMAR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -5795,11 +4830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanLamar), - .party = {.NoItemDefaultMoves = sParty_GentlemanLamar} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanLamar), }, [TRAINER_TWINS_ELI_ANNE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, @@ -5807,11 +4840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TwinsEliAnne), - .party = {.NoItemDefaultMoves = sParty_TwinsEliAnne} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TwinsEliAnne), }, [TRAINER_COOL_COUPLE_RAY_TYRA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOL_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOL_COUPLE, @@ -5819,11 +4850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CoolCoupleRayTyra), - .party = {.NoItemCustomMoves = sParty_CoolCoupleRayTyra} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CoolCoupleRayTyra), }, [TRAINER_YOUNG_COUPLE_GIA_JES] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, @@ -5831,11 +4860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungCoupleGiaJes), - .party = {.NoItemDefaultMoves = sParty_YoungCoupleGiaJes} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungCoupleGiaJes), }, [TRAINER_TWINS_KIRI_JAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, @@ -5843,11 +4870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TwinsKiriJan), - .party = {.NoItemDefaultMoves = sParty_TwinsKiriJan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TwinsKiriJan), }, [TRAINER_CRUSH_KIN_RON_MYA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -5855,11 +4880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinRonMya), - .party = {.ItemDefaultMoves = sParty_CrushKinRonMya} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinRonMya), }, [TRAINER_YOUNG_COUPLE_LEA_JED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, @@ -5867,11 +4890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungCoupleLeaJed), - .party = {.NoItemDefaultMoves = sParty_YoungCoupleLeaJed} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungCoupleLeaJed), }, [TRAINER_SIS_AND_BRO_LIA_LUC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, @@ -5879,11 +4900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SisAndBroLiaLuc), - .party = {.NoItemDefaultMoves = sParty_SisAndBroLiaLuc} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SisAndBroLiaLuc), }, [TRAINER_SIS_AND_BRO_LIL_IAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, @@ -5891,11 +4910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SisAndBroLilIan), - .party = {.NoItemDefaultMoves = sParty_SisAndBroLilIan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SisAndBroLilIan), }, [TRAINER_BUG_CATCHER_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -5903,11 +4920,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher3), - .party = {.NoItemDefaultMoves = sParty_BugCatcher3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher3), }, [TRAINER_BUG_CATCHER_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -5915,11 +4930,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher4), - .party = {.NoItemDefaultMoves = sParty_BugCatcher4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher4), }, [TRAINER_BUG_CATCHER_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -5927,11 +4940,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher5), - .party = {.NoItemDefaultMoves = sParty_BugCatcher5} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher5), }, [TRAINER_BUG_CATCHER_6] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -5939,11 +4950,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher6), - .party = {.NoItemDefaultMoves = sParty_BugCatcher6} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher6), }, [TRAINER_BUG_CATCHER_7] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -5951,11 +4960,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher7), - .party = {.NoItemDefaultMoves = sParty_BugCatcher7} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher7), }, [TRAINER_BUG_CATCHER_8] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -5963,11 +4970,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcher8), - .party = {.NoItemDefaultMoves = sParty_BugCatcher8} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcher8), }, [TRAINER_YOUNGSTER_BEN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -5975,11 +4980,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterBen3), - .party = {.NoItemDefaultMoves = sParty_YoungsterBen3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterBen3), }, [TRAINER_YOUNGSTER_BEN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -5987,11 +4990,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterBen4), - .party = {.NoItemDefaultMoves = sParty_YoungsterBen4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterBen4), }, [TRAINER_YOUNGSTER_CHAD_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -5999,11 +5000,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterChad2), - .party = {.NoItemDefaultMoves = sParty_YoungsterChad2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterChad2), }, [TRAINER_LASS_RELI_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -6011,11 +5010,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassReli2), - .party = {.NoItemDefaultMoves = sParty_LassReli2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassReli2), }, [TRAINER_LASS_RELI_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -6023,11 +5020,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassReli3), - .party = {.NoItemDefaultMoves = sParty_LassReli3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassReli3), }, [TRAINER_YOUNGSTER_TIMMY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6035,11 +5030,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterTimmy2), - .party = {.NoItemDefaultMoves = sParty_YoungsterTimmy2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterTimmy2), }, [TRAINER_YOUNGSTER_TIMMY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6047,11 +5040,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterTimmy3), - .party = {.NoItemDefaultMoves = sParty_YoungsterTimmy3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterTimmy3), }, [TRAINER_YOUNGSTER_TIMMY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6059,11 +5050,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterTimmy4), - .party = {.NoItemDefaultMoves = sParty_YoungsterTimmy4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterTimmy4), }, [TRAINER_YOUNGSTER_CHAD_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6071,11 +5060,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterChad3), - .party = {.NoItemDefaultMoves = sParty_YoungsterChad3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterChad3), }, [TRAINER_LASS_JANICE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -6083,11 +5070,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassJanice2), - .party = {.NoItemDefaultMoves = sParty_LassJanice2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassJanice2), }, [TRAINER_LASS_JANICE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -6095,11 +5080,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassJanice3), - .party = {.NoItemDefaultMoves = sParty_LassJanice3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassJanice3), }, [TRAINER_YOUNGSTER_CHAD_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6107,11 +5090,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterChad4), - .party = {.NoItemDefaultMoves = sParty_YoungsterChad4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterChad4), }, [TRAINER_HIKER_FRANKLIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -6119,11 +5100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerFranklin2), - .party = {.NoItemDefaultMoves = sParty_HikerFranklin2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerFranklin2), }, [TRAINER_PKMN_PROF_PROF_OAK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_PROF, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_PROFESSOR_OAK, @@ -6131,11 +5110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PkmnProfProfOak), - .party = {.NoItemDefaultMoves = sParty_PkmnProfProfOak} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PkmnProfProfOak), }, [TRAINER_PLAYER_BRENDAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PLAYER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BRENDAN_2, @@ -6143,11 +5120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PlayerBrendan), - .party = {.NoItemDefaultMoves = sParty_PlayerBrendan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PlayerBrendan), }, [TRAINER_PLAYER_MAY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PLAYER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RS_MAY_2, @@ -6155,11 +5130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PlayerMay), - .party = {.NoItemDefaultMoves = sParty_PlayerMay} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PlayerMay), }, [TRAINER_PLAYER_RED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PLAYER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RED, @@ -6167,11 +5140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PlayerRed), - .party = {.NoItemDefaultMoves = sParty_PlayerRed} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PlayerRed), }, [TRAINER_PLAYER_LEAF] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PLAYER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEAF, @@ -6179,11 +5150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PlayerLeaf), - .party = {.NoItemDefaultMoves = sParty_PlayerLeaf} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PlayerLeaf), }, [TRAINER_TEAM_ROCKET_GRUNT_42] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_F, @@ -6191,11 +5160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt42), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt42} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt42), }, [TRAINER_PSYCHIC_JACLYN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PSYCHIC_F, @@ -6203,11 +5170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicJaclyn), - .party = {.NoItemCustomMoves = sParty_PsychicJaclyn} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PsychicJaclyn), }, [TRAINER_CRUSH_GIRL_SHARON] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -6215,11 +5180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlSharon), - .party = {.ItemDefaultMoves = sParty_CrushGirlSharon} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlSharon), }, [TRAINER_TUBER_AMIRA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, @@ -6227,11 +5190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TuberAmira), - .party = {.NoItemDefaultMoves = sParty_TuberAmira} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TuberAmira), }, [TRAINER_PKMN_BREEDER_ALIZE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER, @@ -6239,11 +5200,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PkmnBreederAlize), - .party = {.NoItemDefaultMoves = sParty_PkmnBreederAlize} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PkmnBreederAlize), }, [TRAINER_PKMN_RANGER_NICOLAS] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, @@ -6251,11 +5210,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerNicolas), - .party = {.NoItemCustomMoves = sParty_PkmnRangerNicolas} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerNicolas), }, [TRAINER_PKMN_RANGER_MADELINE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, @@ -6263,11 +5220,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerMadeline), - .party = {.NoItemCustomMoves = sParty_PkmnRangerMadeline} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerMadeline), }, [TRAINER_AROMA_LADY_NIKKI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, @@ -6275,11 +5230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AromaLadyNikki), - .party = {.NoItemDefaultMoves = sParty_AromaLadyNikki} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AromaLadyNikki), }, [TRAINER_RUIN_MANIAC_STANLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -6287,11 +5240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacStanly), - .party = {.NoItemDefaultMoves = sParty_RuinManiacStanly} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacStanly), }, [TRAINER_LADY_JACKI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, @@ -6299,11 +5250,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LadyJacki), - .party = {.ItemDefaultMoves = sParty_LadyJacki} + .party = ITEM_DEFAULT_MOVES(sParty_LadyJacki), }, [TRAINER_PAINTER_DAISY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PAINTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PAINTER, @@ -6311,11 +5260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PainterDaisy), - .party = {.NoItemCustomMoves = sParty_PainterDaisy} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PainterDaisy), }, [TRAINER_BIKER_GOON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -6323,11 +5270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerGoon), - .party = {.NoItemCustomMoves = sParty_BikerGoon} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerGoon), }, [TRAINER_BIKER_GOON_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -6335,11 +5280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerGoon2), - .party = {.NoItemCustomMoves = sParty_BikerGoon2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerGoon2), }, [TRAINER_BIKER_GOON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -6347,11 +5290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerGoon3), - .party = {.NoItemDefaultMoves = sParty_BikerGoon3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerGoon3), }, [TRAINER_BIKER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -6359,11 +5300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_Biker2), - .party = {.NoItemDefaultMoves = sParty_Biker2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_Biker2), }, [TRAINER_BUG_CATCHER_ANTHONY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -6371,11 +5310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherAnthony), - .party = {.NoItemDefaultMoves = sParty_BugCatcherAnthony} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherAnthony), }, [TRAINER_BUG_CATCHER_CHARLIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -6383,11 +5320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherCharlie), - .party = {.NoItemDefaultMoves = sParty_BugCatcherCharlie} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherCharlie), }, [TRAINER_TWINS_ELI_ANNE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, @@ -6395,11 +5330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TwinsEliAnne2), - .party = {.NoItemDefaultMoves = sParty_TwinsEliAnne2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TwinsEliAnne2), }, [TRAINER_YOUNGSTER_JOHNSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6407,11 +5340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterJohnson), - .party = {.NoItemDefaultMoves = sParty_YoungsterJohnson} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterJohnson), }, [TRAINER_BIKER_RICARDO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -6419,11 +5350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerRicardo), - .party = {.NoItemCustomMoves = sParty_BikerRicardo} + .party = NO_ITEM_CUSTOM_MOVES(sParty_BikerRicardo), }, [TRAINER_BIKER_JAREN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -6431,11 +5360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerJaren), - .party = {.NoItemDefaultMoves = sParty_BikerJaren} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerJaren), }, [TRAINER_TEAM_ROCKET_GRUNT_43] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6443,11 +5370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt43), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt43} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt43), }, [TRAINER_TEAM_ROCKET_GRUNT_44] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6455,11 +5380,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt44), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt44} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt44), }, [TRAINER_TEAM_ROCKET_GRUNT_45] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6467,11 +5390,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt45), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt45} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt45), }, [TRAINER_TEAM_ROCKET_GRUNT_46] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6479,11 +5400,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt46), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt46} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt46), }, [TRAINER_TEAM_ROCKET_GRUNT_47] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6491,11 +5410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt47), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt47} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt47), }, [TRAINER_TEAM_ROCKET_GRUNT_48] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6503,11 +5420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt48), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt48} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt48), }, [TRAINER_TEAM_ROCKET_ADMIN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_F, @@ -6515,11 +5430,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_TeamRocketAdmin), - .party = {.NoItemCustomMoves = sParty_TeamRocketAdmin} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketAdmin), }, [TRAINER_TEAM_ROCKET_ADMIN_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6527,11 +5440,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_TeamRocketAdmin2), - .party = {.NoItemCustomMoves = sParty_TeamRocketAdmin2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketAdmin2), }, [TRAINER_SCIENTIST_GIDEON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SCIENTIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SCIENTIST, @@ -6539,11 +5450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_ScientistGideon), - .party = {.NoItemCustomMoves = sParty_ScientistGideon} + .party = NO_ITEM_CUSTOM_MOVES(sParty_ScientistGideon), }, [TRAINER_SWIMMER_FEMALE_AMARA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -6551,11 +5460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleAmara), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleAmara} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleAmara), }, [TRAINER_SWIMMER_FEMALE_MARIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -6563,11 +5470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleMaria), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleMaria} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleMaria), }, [TRAINER_SWIMMER_FEMALE_ABIGAIL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -6575,11 +5480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleAbigail), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleAbigail} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleAbigail), }, [TRAINER_SWIMMER_MALE_FINN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -6587,11 +5490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleFinn), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleFinn} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleFinn), }, [TRAINER_SWIMMER_MALE_GARRETT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -6599,11 +5500,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleGarrett), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleGarrett} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleGarrett), }, [TRAINER_FISHERMAN_TOMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -6611,11 +5510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanTommy), - .party = {.NoItemDefaultMoves = sParty_FishermanTommy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanTommy), }, [TRAINER_CRUSH_GIRL_TANYA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -6623,11 +5520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlTanya), - .party = {.ItemDefaultMoves = sParty_CrushGirlTanya} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlTanya), }, [TRAINER_BLACK_BELT_SHEA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -6635,11 +5530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltShea), - .party = {.ItemDefaultMoves = sParty_BlackBeltShea} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltShea), }, [TRAINER_BLACK_BELT_HUGH] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -6647,11 +5540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltHugh), - .party = {.ItemDefaultMoves = sParty_BlackBeltHugh} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltHugh), }, [TRAINER_CAMPER_BRYCE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -6659,11 +5550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperBryce), - .party = {.NoItemDefaultMoves = sParty_CamperBryce} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperBryce), }, [TRAINER_PICNICKER_CLAIRE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -6671,11 +5560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerClaire), - .party = {.NoItemDefaultMoves = sParty_PicnickerClaire} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerClaire), }, [TRAINER_CRUSH_KIN_MIK_KIA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -6683,11 +5570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinMikKia), - .party = {.ItemDefaultMoves = sParty_CrushKinMikKia} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinMikKia), }, [TRAINER_AROMA_LADY_VIOLET] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, @@ -6695,11 +5580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AromaLadyViolet), - .party = {.NoItemDefaultMoves = sParty_AromaLadyViolet} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AromaLadyViolet), }, [TRAINER_TUBER_ALEXIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, @@ -6707,11 +5590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TuberAlexis), - .party = {.NoItemDefaultMoves = sParty_TuberAlexis} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TuberAlexis), }, [TRAINER_TWINS_JOY_MEG] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, @@ -6719,11 +5600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TwinsJoyMeg), - .party = {.NoItemDefaultMoves = sParty_TwinsJoyMeg} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TwinsJoyMeg), }, [TRAINER_SWIMMER_FEMALE_TISHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -6731,11 +5610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleTisha), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleTisha} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleTisha), }, [TRAINER_PAINTER_CELINA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PAINTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PAINTER, @@ -6743,11 +5620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PainterCelina), - .party = {.NoItemCustomMoves = sParty_PainterCelina} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PainterCelina), }, [TRAINER_PAINTER_RAYNA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PAINTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PAINTER, @@ -6755,11 +5630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PainterRayna), - .party = {.NoItemCustomMoves = sParty_PainterRayna} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PainterRayna), }, [TRAINER_LADY_GILLIAN] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, @@ -6767,11 +5640,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LadyGillian), - .party = {.ItemDefaultMoves = sParty_LadyGillian} + .party = ITEM_DEFAULT_MOVES(sParty_LadyGillian), }, [TRAINER_YOUNGSTER_DESTIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -6779,11 +5650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterDestin), - .party = {.NoItemDefaultMoves = sParty_YoungsterDestin} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterDestin), }, [TRAINER_SWIMMER_MALE_TOBY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -6791,11 +5660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleToby), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleToby} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleToby), }, [TRAINER_TEAM_ROCKET_GRUNT_49] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6803,11 +5670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt49), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt49} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt49), }, [TRAINER_TEAM_ROCKET_GRUNT_50] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_M, @@ -6815,11 +5680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt50), - .party = {.NoItemCustomMoves = sParty_TeamRocketGrunt50} + .party = NO_ITEM_CUSTOM_MOVES(sParty_TeamRocketGrunt50), }, [TRAINER_TEAM_ROCKET_GRUNT_51] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_ROCKET, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_ROCKET_GRUNT_F, @@ -6827,11 +5690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TeamRocketGrunt51), - .party = {.NoItemDefaultMoves = sParty_TeamRocketGrunt51} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TeamRocketGrunt51), }, [TRAINER_BIRD_KEEPER_MILO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -6839,11 +5700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperMilo), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperMilo} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperMilo), }, [TRAINER_BIRD_KEEPER_CHAZ] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -6851,11 +5710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperChaz), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperChaz} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperChaz), }, [TRAINER_BIRD_KEEPER_HAROLD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -6863,11 +5720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperHarold), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperHarold} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperHarold), }, [TRAINER_FISHERMAN_TYLOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -6875,11 +5730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanTylor), - .party = {.NoItemDefaultMoves = sParty_FishermanTylor} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanTylor), }, [TRAINER_SWIMMER_MALE_MYMO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -6887,11 +5740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleMymo), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleMymo} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleMymo), }, [TRAINER_SWIMMER_FEMALE_NICOLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -6899,11 +5750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleNicole), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleNicole} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleNicole), }, [TRAINER_SIS_AND_BRO_AVA_GEB] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, @@ -6911,11 +5760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SisAndBroAvaGeb), - .party = {.NoItemDefaultMoves = sParty_SisAndBroAvaGeb} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SisAndBroAvaGeb), }, [TRAINER_AROMA_LADY_ROSE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, @@ -6923,11 +5770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AromaLadyRose), - .party = {.NoItemDefaultMoves = sParty_AromaLadyRose} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AromaLadyRose), }, [TRAINER_SWIMMER_MALE_SAMIR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -6935,11 +5780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleSamir), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleSamir} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleSamir), }, [TRAINER_SWIMMER_FEMALE_DENISE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -6947,11 +5790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleDenise), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleDenise} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleDenise), }, [TRAINER_TWINS_MIU_MIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, @@ -6959,11 +5800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TwinsMiuMia), - .party = {.NoItemDefaultMoves = sParty_TwinsMiuMia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TwinsMiuMia), }, [TRAINER_HIKER_EARL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -6971,11 +5810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerEarl), - .party = {.NoItemDefaultMoves = sParty_HikerEarl} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerEarl), }, [TRAINER_RUIN_MANIAC_FOSTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -6983,11 +5820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacFoster), - .party = {.NoItemDefaultMoves = sParty_RuinManiacFoster} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacFoster), }, [TRAINER_RUIN_MANIAC_LARRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -6995,11 +5830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacLarry), - .party = {.NoItemDefaultMoves = sParty_RuinManiacLarry} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacLarry), }, [TRAINER_HIKER_DARYL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -7007,11 +5840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerDaryl), - .party = {.NoItemDefaultMoves = sParty_HikerDaryl} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerDaryl), }, [TRAINER_POKEMANIAC_HECTOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -7019,11 +5850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacHector), - .party = {.NoItemDefaultMoves = sParty_PokemaniacHector} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacHector), }, [TRAINER_PSYCHIC_DARIO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -7031,11 +5860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicDario), - .party = {.NoItemCustomMoves = sParty_PsychicDario} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PsychicDario), }, [TRAINER_PSYCHIC_RODETTE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PSYCHIC_F, @@ -7043,11 +5870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicRodette), - .party = {.NoItemCustomMoves = sParty_PsychicRodette} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PsychicRodette), }, [TRAINER_AROMA_LADY_MIAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, @@ -7055,11 +5880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_AromaLadyMiah), - .party = {.NoItemDefaultMoves = sParty_AromaLadyMiah} + .party = NO_ITEM_DEFAULT_MOVES(sParty_AromaLadyMiah), }, [TRAINER_YOUNG_COUPLE_EVE_JON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, @@ -7067,11 +5890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungCoupleEveJon), - .party = {.NoItemDefaultMoves = sParty_YoungCoupleEveJon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungCoupleEveJon), }, [TRAINER_JUGGLER_MASON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -7079,11 +5900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerMason), - .party = {.NoItemCustomMoves = sParty_JugglerMason} + .party = NO_ITEM_CUSTOM_MOVES(sParty_JugglerMason), }, [TRAINER_CRUSH_GIRL_CYNDY] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -7091,11 +5910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlCyndy), - .party = {.ItemDefaultMoves = sParty_CrushGirlCyndy} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlCyndy), }, [TRAINER_CRUSH_GIRL_JOCELYN] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -7103,11 +5920,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlJocelyn), - .party = {.ItemDefaultMoves = sParty_CrushGirlJocelyn} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlJocelyn), }, [TRAINER_TAMER_EVAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -7115,11 +5930,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerEvan), - .party = {.NoItemDefaultMoves = sParty_TamerEvan} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerEvan), }, [TRAINER_POKEMANIAC_MARK_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -7127,11 +5940,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacMark2), - .party = {.NoItemDefaultMoves = sParty_PokemaniacMark2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacMark2), }, [TRAINER_PKMN_RANGER_LOGAN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, @@ -7139,11 +5950,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerLogan), - .party = {.NoItemCustomMoves = sParty_PkmnRangerLogan} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerLogan), }, [TRAINER_PKMN_RANGER_JACKSON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, @@ -7151,11 +5960,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerJackson), - .party = {.NoItemCustomMoves = sParty_PkmnRangerJackson} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerJackson), }, [TRAINER_PKMN_RANGER_BETH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, @@ -7163,11 +5970,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerBeth), - .party = {.NoItemDefaultMoves = sParty_PkmnRangerBeth} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PkmnRangerBeth), }, [TRAINER_PKMN_RANGER_KATELYN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, @@ -7175,11 +5980,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerKatelyn), - .party = {.NoItemCustomMoves = sParty_PkmnRangerKatelyn} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerKatelyn), }, [TRAINER_COOLTRAINER_LEROY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -7187,11 +5990,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerLeroy), - .party = {.NoItemCustomMoves = sParty_CooltrainerLeroy} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerLeroy), }, [TRAINER_COOLTRAINER_MICHELLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -7199,11 +6000,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerMichelle), - .party = {.NoItemCustomMoves = sParty_CooltrainerMichelle} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerMichelle), }, [TRAINER_COOL_COUPLE_LEX_NYA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOL_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOL_COUPLE, @@ -7211,11 +6010,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CoolCoupleLexNya), - .party = {.NoItemCustomMoves = sParty_CoolCoupleLexNya} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CoolCoupleLexNya), }, [TRAINER_RUIN_MANIAC_BRANDON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -7223,11 +6020,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacBrandon), - .party = {.NoItemDefaultMoves = sParty_RuinManiacBrandon} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacBrandon), }, [TRAINER_RUIN_MANIAC_BENJAMIN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -7235,11 +6030,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacBenjamin), - .party = {.NoItemCustomMoves = sParty_RuinManiacBenjamin} + .party = NO_ITEM_CUSTOM_MOVES(sParty_RuinManiacBenjamin), }, [TRAINER_PAINTER_EDNA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PAINTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PAINTER, @@ -7247,11 +6040,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PainterEdna), - .party = {.NoItemCustomMoves = sParty_PainterEdna} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PainterEdna), }, [TRAINER_GENTLEMAN_CLIFFORD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -7259,11 +6050,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GentlemanClifford), - .party = {.NoItemDefaultMoves = sParty_GentlemanClifford} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GentlemanClifford), }, [TRAINER_LADY_SELPHY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, @@ -7271,11 +6060,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LadySelphy), - .party = {.ItemCustomMoves = sParty_LadySelphy} + .party = ITEM_CUSTOM_MOVES(sParty_LadySelphy), }, [TRAINER_RUIN_MANIAC_LAWSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -7283,11 +6070,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacLawson), - .party = {.NoItemDefaultMoves = sParty_RuinManiacLawson} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacLawson), }, [TRAINER_PSYCHIC_LAURA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PSYCHIC_F, @@ -7295,11 +6080,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicLaura), - .party = {.NoItemDefaultMoves = sParty_PsychicLaura} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PsychicLaura), }, [TRAINER_PKMN_BREEDER_BETHANY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER, @@ -7307,11 +6090,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PkmnBreederBethany), - .party = {.NoItemDefaultMoves = sParty_PkmnBreederBethany} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PkmnBreederBethany), }, [TRAINER_PKMN_BREEDER_ALLISON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER, @@ -7319,11 +6100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PkmnBreederAllison), - .party = {.NoItemDefaultMoves = sParty_PkmnBreederAllison} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PkmnBreederAllison), }, [TRAINER_BUG_CATCHER_GARRET] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -7331,11 +6110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherGarret), - .party = {.NoItemDefaultMoves = sParty_BugCatcherGarret} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherGarret), }, [TRAINER_BUG_CATCHER_JONAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -7343,11 +6120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherJonah), - .party = {.NoItemDefaultMoves = sParty_BugCatcherJonah} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherJonah), }, [TRAINER_BUG_CATCHER_VANCE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -7355,11 +6130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherVance), - .party = {.NoItemDefaultMoves = sParty_BugCatcherVance} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherVance), }, [TRAINER_YOUNGSTER_NASH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -7367,11 +6140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterNash), - .party = {.NoItemDefaultMoves = sParty_YoungsterNash} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterNash), }, [TRAINER_YOUNGSTER_CORDELL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -7379,11 +6150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterCordell), - .party = {.NoItemDefaultMoves = sParty_YoungsterCordell} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterCordell), }, [TRAINER_LASS_DALIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -7391,11 +6160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassDalia), - .party = {.NoItemDefaultMoves = sParty_LassDalia} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassDalia), }, [TRAINER_LASS_JOANA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -7403,11 +6170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassJoana), - .party = {.NoItemDefaultMoves = sParty_LassJoana} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassJoana), }, [TRAINER_CAMPER_RILEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7415,11 +6180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperRiley), - .party = {.NoItemDefaultMoves = sParty_CamperRiley} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperRiley), }, [TRAINER_PICNICKER_MARCY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7427,11 +6190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerMarcy), - .party = {.NoItemDefaultMoves = sParty_PicnickerMarcy} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerMarcy), }, [TRAINER_RUIN_MANIAC_LAYTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -7439,11 +6200,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacLayton), - .party = {.NoItemDefaultMoves = sParty_RuinManiacLayton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacLayton), }, [TRAINER_PICNICKER_KELSEY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7451,11 +6210,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerKelsey2), - .party = {.NoItemDefaultMoves = sParty_PicnickerKelsey2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerKelsey2), }, [TRAINER_PICNICKER_KELSEY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7463,11 +6220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerKelsey3), - .party = {.NoItemDefaultMoves = sParty_PicnickerKelsey3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerKelsey3), }, [TRAINER_PICNICKER_KELSEY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7475,11 +6230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerKelsey4), - .party = {.NoItemDefaultMoves = sParty_PicnickerKelsey4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerKelsey4), }, [TRAINER_CAMPER_RICKY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7487,11 +6240,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperRicky2), - .party = {.NoItemDefaultMoves = sParty_CamperRicky2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperRicky2), }, [TRAINER_CAMPER_RICKY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7499,11 +6250,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperRicky3), - .party = {.NoItemDefaultMoves = sParty_CamperRicky3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperRicky3), }, [TRAINER_CAMPER_RICKY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7511,11 +6260,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperRicky4), - .party = {.NoItemDefaultMoves = sParty_CamperRicky4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperRicky4), }, [TRAINER_CAMPER_JEFF_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7523,11 +6270,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperJeff2), - .party = {.NoItemDefaultMoves = sParty_CamperJeff2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperJeff2), }, [TRAINER_CAMPER_JEFF_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7535,11 +6280,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperJeff3), - .party = {.NoItemDefaultMoves = sParty_CamperJeff3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperJeff3), }, [TRAINER_CAMPER_JEFF_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7547,11 +6290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperJeff4), - .party = {.NoItemDefaultMoves = sParty_CamperJeff4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperJeff4), }, [TRAINER_PICNICKER_ISABELLE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7559,11 +6300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerIsabelle2), - .party = {.NoItemDefaultMoves = sParty_PicnickerIsabelle2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerIsabelle2), }, [TRAINER_PICNICKER_ISABELLE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7571,11 +6310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerIsabelle3), - .party = {.NoItemDefaultMoves = sParty_PicnickerIsabelle3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerIsabelle3), }, [TRAINER_PICNICKER_ISABELLE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7583,11 +6320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerIsabelle4), - .party = {.NoItemDefaultMoves = sParty_PicnickerIsabelle4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerIsabelle4), }, [TRAINER_YOUNGSTER_YASU_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -7595,11 +6330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterYasu2), - .party = {.NoItemDefaultMoves = sParty_YoungsterYasu2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterYasu2), }, [TRAINER_YOUNGSTER_YASU_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -7607,11 +6340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterYasu3), - .party = {.NoItemDefaultMoves = sParty_YoungsterYasu3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterYasu3), }, [TRAINER_ENGINEER_BERNIE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ENGINEER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ENGINEER, @@ -7619,11 +6350,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_EngineerBernie2), - .party = {.NoItemDefaultMoves = sParty_EngineerBernie2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_EngineerBernie2), }, [TRAINER_GAMER_DARIAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -7631,11 +6360,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerDarian2), - .party = {.NoItemDefaultMoves = sParty_GamerDarian2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerDarian2), }, [TRAINER_CAMPER_CHRIS_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7643,11 +6370,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperChris2), - .party = {.NoItemDefaultMoves = sParty_CamperChris2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperChris2), }, [TRAINER_CAMPER_CHRIS_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7655,11 +6380,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperChris3), - .party = {.NoItemDefaultMoves = sParty_CamperChris3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperChris3), }, [TRAINER_CAMPER_CHRIS_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, @@ -7667,11 +6390,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CamperChris4), - .party = {.NoItemDefaultMoves = sParty_CamperChris4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CamperChris4), }, [TRAINER_PICNICKER_ALICIA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7679,11 +6400,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerAlicia2), - .party = {.NoItemDefaultMoves = sParty_PicnickerAlicia2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerAlicia2), }, [TRAINER_PICNICKER_ALICIA_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7691,11 +6410,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerAlicia3), - .party = {.NoItemDefaultMoves = sParty_PicnickerAlicia3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerAlicia3), }, [TRAINER_PICNICKER_ALICIA_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7703,11 +6420,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerAlicia4), - .party = {.NoItemDefaultMoves = sParty_PicnickerAlicia4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerAlicia4), }, [TRAINER_HIKER_JEREMY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -7715,11 +6430,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerJeremy2), - .party = {.NoItemDefaultMoves = sParty_HikerJeremy2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerJeremy2), }, [TRAINER_POKEMANIAC_MARK_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -7727,11 +6440,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacMark3), - .party = {.NoItemDefaultMoves = sParty_PokemaniacMark3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacMark3), }, [TRAINER_POKEMANIAC_HERMAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -7739,11 +6450,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacHerman2), - .party = {.NoItemDefaultMoves = sParty_PokemaniacHerman2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacHerman2), }, [TRAINER_POKEMANIAC_HERMAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -7751,11 +6460,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacHerman3), - .party = {.NoItemDefaultMoves = sParty_PokemaniacHerman3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacHerman3), }, [TRAINER_HIKER_TRENT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -7763,11 +6470,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerTrent2), - .party = {.NoItemDefaultMoves = sParty_HikerTrent2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerTrent2), }, [TRAINER_LASS_MEGAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -7775,11 +6480,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassMegan2), - .party = {.NoItemDefaultMoves = sParty_LassMegan2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassMegan2), }, [TRAINER_LASS_MEGAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_LASS, @@ -7787,11 +6490,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_LassMegan3), - .party = {.NoItemDefaultMoves = sParty_LassMegan3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_LassMegan3), }, [TRAINER_SUPER_NERD_GLENN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SUPER_NERD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_SUPER_NERD, @@ -7799,11 +6500,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SuperNerdGlenn2), - .party = {.NoItemDefaultMoves = sParty_SuperNerdGlenn2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SuperNerdGlenn2), }, [TRAINER_GAMER_RICH_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_GAMER, @@ -7811,11 +6510,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_GamerRich2), - .party = {.NoItemDefaultMoves = sParty_GamerRich2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_GamerRich2), }, [TRAINER_BIKER_JAREN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -7823,11 +6520,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerJaren2), - .party = {.NoItemDefaultMoves = sParty_BikerJaren2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerJaren2), }, [TRAINER_FISHERMAN_ELLIOT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -7835,11 +6530,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanElliot2), - .party = {.NoItemDefaultMoves = sParty_FishermanElliot2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanElliot2), }, [TRAINER_ROCKER_LUCA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ROCKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ROCKER, @@ -7847,11 +6540,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RockerLuca2), - .party = {.NoItemDefaultMoves = sParty_RockerLuca2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RockerLuca2), }, [TRAINER_BEAUTY_SHEILA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -7859,11 +6550,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautySheila2), - .party = {.NoItemDefaultMoves = sParty_BeautySheila2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautySheila2), }, [TRAINER_BIRD_KEEPER_ROBERT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -7871,11 +6560,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperRobert2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperRobert2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperRobert2), }, [TRAINER_BIRD_KEEPER_ROBERT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -7883,11 +6570,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperRobert3), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperRobert3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperRobert3), }, [TRAINER_PICNICKER_SUSIE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7895,11 +6580,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerSusie2), - .party = {.NoItemDefaultMoves = sParty_PicnickerSusie2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerSusie2), }, [TRAINER_PICNICKER_SUSIE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7907,11 +6590,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerSusie3), - .party = {.NoItemDefaultMoves = sParty_PicnickerSusie3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerSusie3), }, [TRAINER_PICNICKER_SUSIE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -7919,11 +6600,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerSusie4), - .party = {.NoItemDefaultMoves = sParty_PicnickerSusie4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerSusie4), }, [TRAINER_BIKER_LUKAS_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -7931,11 +6610,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerLukas2), - .party = {.NoItemDefaultMoves = sParty_BikerLukas2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerLukas2), }, [TRAINER_BIRD_KEEPER_BENNY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -7943,11 +6620,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperBenny2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperBenny2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperBenny2), }, [TRAINER_BIRD_KEEPER_BENNY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -7955,11 +6630,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperBenny3), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperBenny3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperBenny3), }, [TRAINER_BIRD_KEEPER_MARLON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -7967,11 +6640,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperMarlon2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperMarlon2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperMarlon2), }, [TRAINER_BIRD_KEEPER_MARLON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -7979,11 +6650,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperMarlon3), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperMarlon3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperMarlon3), }, [TRAINER_BEAUTY_GRACE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, @@ -7991,11 +6660,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BeautyGrace2), - .party = {.NoItemDefaultMoves = sParty_BeautyGrace2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BeautyGrace2), }, [TRAINER_BIRD_KEEPER_CHESTER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8003,11 +6670,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperChester2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperChester2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperChester2), }, [TRAINER_BIRD_KEEPER_CHESTER_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8015,11 +6680,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperChester3), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperChester3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperChester3), }, [TRAINER_PICNICKER_BECKY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -8027,11 +6690,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerBecky2), - .party = {.NoItemDefaultMoves = sParty_PicnickerBecky2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerBecky2), }, [TRAINER_PICNICKER_BECKY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -8039,11 +6700,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerBecky3), - .party = {.NoItemDefaultMoves = sParty_PicnickerBecky3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerBecky3), }, [TRAINER_PICNICKER_BECKY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -8051,11 +6710,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerBecky4), - .party = {.NoItemDefaultMoves = sParty_PicnickerBecky4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerBecky4), }, [TRAINER_CRUSH_KIN_RON_MYA_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -8063,11 +6720,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinRonMya2), - .party = {.ItemDefaultMoves = sParty_CrushKinRonMya2} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinRonMya2), }, [TRAINER_CRUSH_KIN_RON_MYA_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -8075,11 +6730,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinRonMya3), - .party = {.ItemDefaultMoves = sParty_CrushKinRonMya3} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinRonMya3), }, [TRAINER_CRUSH_KIN_RON_MYA_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -8087,11 +6740,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinRonMya4), - .party = {.ItemDefaultMoves = sParty_CrushKinRonMya4} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinRonMya4), }, [TRAINER_BIKER_RUBEN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -8099,11 +6750,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerRuben2), - .party = {.NoItemDefaultMoves = sParty_BikerRuben2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerRuben2), }, [TRAINER_CUE_BALL_CAMRON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -8111,11 +6760,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallCamron2), - .party = {.NoItemDefaultMoves = sParty_CueBallCamron2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallCamron2), }, [TRAINER_BIKER_JAXON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BIKER, @@ -8123,11 +6770,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BikerJaxon2), - .party = {.NoItemDefaultMoves = sParty_BikerJaxon2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BikerJaxon2), }, [TRAINER_CUE_BALL_ISAIAH_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -8135,11 +6780,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallIsaiah2), - .party = {.NoItemDefaultMoves = sParty_CueBallIsaiah2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallIsaiah2), }, [TRAINER_CUE_BALL_COREY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -8147,11 +6790,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallCorey2), - .party = {.NoItemDefaultMoves = sParty_CueBallCorey2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallCorey2), }, [TRAINER_BIRD_KEEPER_JACOB_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8159,11 +6800,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperJacob2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperJacob2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperJacob2), }, [TRAINER_BIRD_KEEPER_JACOB_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8171,11 +6810,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperJacob3), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperJacob3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperJacob3), }, [TRAINER_SWIMMER_FEMALE_ALICE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -8183,11 +6820,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleAlice2), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleAlice2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleAlice2), }, [TRAINER_SWIMMER_MALE_DARRIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -8195,11 +6830,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleDarrin2), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleDarrin2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleDarrin2), }, [TRAINER_PICNICKER_MISSY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -8207,11 +6840,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerMissy2), - .party = {.NoItemDefaultMoves = sParty_PicnickerMissy2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerMissy2), }, [TRAINER_PICNICKER_MISSY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PICNICKER, @@ -8219,11 +6850,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PicnickerMissy3), - .party = {.NoItemDefaultMoves = sParty_PicnickerMissy3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PicnickerMissy3), }, [TRAINER_FISHERMAN_WADE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, @@ -8231,11 +6860,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_FishermanWade2), - .party = {.NoItemDefaultMoves = sParty_FishermanWade2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_FishermanWade2), }, [TRAINER_SWIMMER_MALE_JACK_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -8243,11 +6870,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleJack2), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleJack2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleJack2), }, [TRAINER_SIS_AND_BRO_LIL_IAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, @@ -8255,11 +6880,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SisAndBroLilIan2), - .party = {.NoItemDefaultMoves = sParty_SisAndBroLilIan2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SisAndBroLilIan2), }, [TRAINER_SIS_AND_BRO_LIL_IAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, @@ -8267,11 +6890,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SisAndBroLilIan3), - .party = {.NoItemDefaultMoves = sParty_SisAndBroLilIan3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SisAndBroLilIan3), }, [TRAINER_SWIMMER_MALE_FINN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -8279,11 +6900,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleFinn2), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleFinn2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleFinn2), }, [TRAINER_CRUSH_GIRL_SHARON_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -8291,11 +6910,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlSharon2), - .party = {.ItemDefaultMoves = sParty_CrushGirlSharon2} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlSharon2), }, [TRAINER_CRUSH_GIRL_SHARON_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -8303,11 +6920,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlSharon3), - .party = {.ItemDefaultMoves = sParty_CrushGirlSharon3} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlSharon3), }, [TRAINER_CRUSH_GIRL_TANYA_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -8315,11 +6930,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlTanya2), - .party = {.ItemDefaultMoves = sParty_CrushGirlTanya2} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlTanya2), }, [TRAINER_CRUSH_GIRL_TANYA_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -8327,11 +6940,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlTanya3), - .party = {.ItemDefaultMoves = sParty_CrushGirlTanya3} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlTanya3), }, [TRAINER_BLACK_BELT_SHEA_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -8339,11 +6950,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltShea2), - .party = {.ItemDefaultMoves = sParty_BlackBeltShea2} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltShea2), }, [TRAINER_BLACK_BELT_SHEA_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -8351,11 +6960,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltShea3), - .party = {.ItemDefaultMoves = sParty_BlackBeltShea3} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltShea3), }, [TRAINER_BLACK_BELT_HUGH_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -8363,11 +6970,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltHugh2), - .party = {.ItemDefaultMoves = sParty_BlackBeltHugh2} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltHugh2), }, [TRAINER_BLACK_BELT_HUGH_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, @@ -8375,11 +6980,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BlackBeltHugh3), - .party = {.ItemDefaultMoves = sParty_BlackBeltHugh3} + .party = ITEM_DEFAULT_MOVES(sParty_BlackBeltHugh3), }, [TRAINER_CRUSH_KIN_MIK_KIA_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -8387,11 +6990,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinMikKia2), - .party = {.ItemDefaultMoves = sParty_CrushKinMikKia2} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinMikKia2), }, [TRAINER_CRUSH_KIN_MIK_KIA_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_KIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_KIN, @@ -8399,11 +7000,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushKinMikKia3), - .party = {.ItemDefaultMoves = sParty_CrushKinMikKia3} + .party = ITEM_DEFAULT_MOVES(sParty_CrushKinMikKia3), }, [TRAINER_TUBER_AMIRA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, @@ -8411,11 +7010,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TuberAmira2), - .party = {.NoItemDefaultMoves = sParty_TuberAmira2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TuberAmira2), }, [TRAINER_TWINS_JOY_MEG_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, @@ -8423,11 +7020,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TwinsJoyMeg2), - .party = {.NoItemDefaultMoves = sParty_TwinsJoyMeg2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TwinsJoyMeg2), }, [TRAINER_PAINTER_RAYNA_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PAINTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PAINTER, @@ -8435,11 +7030,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PainterRayna2), - .party = {.NoItemCustomMoves = sParty_PainterRayna2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PainterRayna2), }, [TRAINER_YOUNGSTER_DESTIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, @@ -8447,11 +7040,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungsterDestin2), - .party = {.NoItemDefaultMoves = sParty_YoungsterDestin2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungsterDestin2), }, [TRAINER_PKMN_BREEDER_ALIZE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER, @@ -8459,11 +7050,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PkmnBreederAlize2), - .party = {.NoItemDefaultMoves = sParty_PkmnBreederAlize2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PkmnBreederAlize2), }, [TRAINER_YOUNG_COUPLE_GIA_JES_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, @@ -8471,11 +7060,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungCoupleGiaJes2), - .party = {.NoItemDefaultMoves = sParty_YoungCoupleGiaJes2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungCoupleGiaJes2), }, [TRAINER_YOUNG_COUPLE_GIA_JES_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, @@ -8483,11 +7070,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_YoungCoupleGiaJes3), - .party = {.NoItemDefaultMoves = sParty_YoungCoupleGiaJes3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_YoungCoupleGiaJes3), }, [TRAINER_BIRD_KEEPER_MILO_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8495,11 +7080,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperMilo2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperMilo2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperMilo2), }, [TRAINER_BIRD_KEEPER_CHAZ_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8507,11 +7090,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperChaz2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperChaz2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperChaz2), }, [TRAINER_BIRD_KEEPER_HAROLD_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, @@ -8519,11 +7100,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BirdKeeperHarold2), - .party = {.NoItemDefaultMoves = sParty_BirdKeeperHarold2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BirdKeeperHarold2), }, [TRAINER_SWIMMER_FEMALE_NICOLE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -8531,11 +7110,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleNicole2), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleNicole2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleNicole2), }, [TRAINER_PSYCHIC_JACLYN_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PSYCHIC_F, @@ -8543,11 +7120,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicJaclyn2), - .party = {.NoItemCustomMoves = sParty_PsychicJaclyn2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PsychicJaclyn2), }, [TRAINER_SWIMMER_MALE_SAMIR_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -8555,11 +7130,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleSamir2), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleSamir2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleSamir2), }, [TRAINER_HIKER_EARL_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, @@ -8567,11 +7140,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_HikerEarl2), - .party = {.NoItemDefaultMoves = sParty_HikerEarl2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_HikerEarl2), }, [TRAINER_RUIN_MANIAC_LARRY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, @@ -8579,11 +7150,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_RuinManiacLarry2), - .party = {.NoItemDefaultMoves = sParty_RuinManiacLarry2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_RuinManiacLarry2), }, [TRAINER_POKEMANIAC_HECTOR_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, @@ -8591,11 +7160,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PokemaniacHector2), - .party = {.NoItemDefaultMoves = sParty_PokemaniacHector2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_PokemaniacHector2), }, [TRAINER_PSYCHIC_DARIO_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -8603,11 +7170,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicDario2), - .party = {.NoItemCustomMoves = sParty_PsychicDario2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PsychicDario2), }, [TRAINER_PSYCHIC_RODETTE_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_PSYCHIC_F, @@ -8615,11 +7180,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_PsychicRodette2), - .party = {.NoItemCustomMoves = sParty_PsychicRodette2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PsychicRodette2), }, [TRAINER_JUGGLER_MASON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_JUGGLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_JUGGLER, @@ -8627,11 +7190,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_JugglerMason2), - .party = {.NoItemDefaultMoves = sParty_JugglerMason2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_JugglerMason2), }, [TRAINER_PKMN_RANGER_NICOLAS_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, @@ -8639,11 +7200,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerNicolas2), - .party = {.NoItemCustomMoves = sParty_PkmnRangerNicolas2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerNicolas2), }, [TRAINER_PKMN_RANGER_MADELINE_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, @@ -8651,11 +7210,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerMadeline2), - .party = {.NoItemCustomMoves = sParty_PkmnRangerMadeline2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerMadeline2), }, [TRAINER_CRUSH_GIRL_CYNDY_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CRUSH_GIRL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_CRUSH_GIRL, @@ -8663,11 +7220,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CrushGirlCyndy2), - .party = {.ItemDefaultMoves = sParty_CrushGirlCyndy2} + .party = ITEM_DEFAULT_MOVES(sParty_CrushGirlCyndy2), }, [TRAINER_TAMER_EVAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_TAMER, @@ -8675,11 +7230,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_TamerEvan2), - .party = {.NoItemDefaultMoves = sParty_TamerEvan2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_TamerEvan2), }, [TRAINER_PKMN_RANGER_JACKSON_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, @@ -8687,11 +7240,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerJackson2), - .party = {.NoItemCustomMoves = sParty_PkmnRangerJackson2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerJackson2), }, [TRAINER_PKMN_RANGER_KATELYN_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, @@ -8699,11 +7250,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_PkmnRangerKatelyn2), - .party = {.NoItemCustomMoves = sParty_PkmnRangerKatelyn2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_PkmnRangerKatelyn2), }, [TRAINER_COOLTRAINER_LEROY_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, @@ -8711,11 +7260,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerLeroy2), - .party = {.NoItemCustomMoves = sParty_CooltrainerLeroy2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerLeroy2), }, [TRAINER_COOLTRAINER_MICHELLE_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -8723,11 +7270,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CooltrainerMichelle2), - .party = {.NoItemCustomMoves = sParty_CooltrainerMichelle2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CooltrainerMichelle2), }, [TRAINER_COOL_COUPLE_LEX_NYA_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOL_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOL_COUPLE, @@ -8735,11 +7280,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_CoolCoupleLexNya2), - .party = {.NoItemCustomMoves = sParty_CoolCoupleLexNya2} + .party = NO_ITEM_CUSTOM_MOVES(sParty_CoolCoupleLexNya2), }, [TRAINER_BUG_CATCHER_COLTON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -8747,11 +7290,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherColton2), - .party = {.NoItemDefaultMoves = sParty_BugCatcherColton2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherColton2), }, [TRAINER_BUG_CATCHER_COLTON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -8759,11 +7300,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherColton3), - .party = {.NoItemDefaultMoves = sParty_BugCatcherColton3} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherColton3), }, [TRAINER_BUG_CATCHER_COLTON_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, @@ -8771,11 +7310,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_BugCatcherColton4), - .party = {.NoItemDefaultMoves = sParty_BugCatcherColton4} + .party = NO_ITEM_DEFAULT_MOVES(sParty_BugCatcherColton4), }, [TRAINER_SWIMMER_MALE_MATTHEW_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -8783,11 +7320,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleMatthew2), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleMatthew2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleMatthew2), }, [TRAINER_SWIMMER_MALE_TONY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, @@ -8795,11 +7330,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerMaleTony2), - .party = {.NoItemDefaultMoves = sParty_SwimmerMaleTony2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerMaleTony2), }, [TRAINER_SWIMMER_FEMALE_MELISSA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE | F_TRAINER_FEMALE, .trainerPic = TRAINER_PIC_SWIMMER_F, @@ -8807,11 +7340,9 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_SwimmerFemaleMelissa2), - .party = {.NoItemDefaultMoves = sParty_SwimmerFemaleMelissa2} + .party = NO_ITEM_DEFAULT_MOVES(sParty_SwimmerFemaleMelissa2), }, [TRAINER_ELITE_FOUR_LORELEI_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_LORELEI, @@ -8819,11 +7350,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourLorelei2), - .party = {.ItemCustomMoves = sParty_EliteFourLorelei2} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourLorelei2), }, [TRAINER_ELITE_FOUR_BRUNO_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_BRUNO, @@ -8831,11 +7360,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourBruno2), - .party = {.ItemCustomMoves = sParty_EliteFourBruno2} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourBruno2), }, [TRAINER_ELITE_FOUR_AGATHA_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_AGATHA, @@ -8843,11 +7370,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourAgatha2), - .party = {.ItemCustomMoves = sParty_EliteFourAgatha2} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourAgatha2), }, [TRAINER_ELITE_FOUR_LANCE_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_LANCE, @@ -8855,11 +7380,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_EliteFourLance2), - .party = {.ItemCustomMoves = sParty_EliteFourLance2} + .party = ITEM_CUSTOM_MOVES(sParty_EliteFourLance2), }, [TRAINER_CHAMPION_REMATCH_SQUIRTLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_RIVAL, @@ -8867,11 +7390,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_ChampionRematchSquirtle), - .party = {.ItemCustomMoves = sParty_ChampionRematchSquirtle} + .party = ITEM_CUSTOM_MOVES(sParty_ChampionRematchSquirtle), }, [TRAINER_CHAMPION_REMATCH_BULBASAUR] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_RIVAL, @@ -8879,11 +7400,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_ChampionRematchBulbasaur), - .party = {.ItemCustomMoves = sParty_ChampionRematchBulbasaur} + .party = ITEM_CUSTOM_MOVES(sParty_ChampionRematchBulbasaur), }, [TRAINER_CHAMPION_REMATCH_CHARMANDER] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_RIVAL, @@ -8891,11 +7410,9 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = NELEMS(sParty_ChampionRematchCharmander), - .party = {.ItemCustomMoves = sParty_ChampionRematchCharmander} + .party = ITEM_CUSTOM_MOVES(sParty_ChampionRematchCharmander), }, [TRAINER_CUE_BALL_PAXTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CUE_BALL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CUE_BALL, @@ -8903,7 +7420,6 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = NELEMS(sParty_CueBallPaxton), - .party = {.NoItemDefaultMoves = sParty_CueBallPaxton} + .party = NO_ITEM_DEFAULT_MOVES(sParty_CueBallPaxton), }, }; From 9983b41c1d0688bcac324336161c8da0f9a78013 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 7 Nov 2022 14:56:34 -0500 Subject: [PATCH 12/42] Sync union room --- data/maps/UnionRoom/scripts.inc | 2 +- data/scripts/cable_club.inc | 2 +- data/specials.inc | 2 +- include/constants/union_room.h | 93 +- include/link_rfu.h | 11 +- include/mevent.h | 4 +- include/mystery_gift_menu.h | 2 +- include/rfu_union_tool.h | 12 +- include/trade.h | 2 +- include/trade_scene.h | 2 +- include/union_room.h | 182 +- src/cable_club.c | 4 +- src/data/union_room.h | 470 +++ src/link_rfu_2.c | 4 +- src/mevent.c | 18 +- src/mystery_gift_menu.c | 69 +- src/party_menu.c | 2 +- src/rfu_union_tool.c | 40 +- src/start_menu.c | 2 +- src/trade.c | 8 +- src/trade_scene.c | 6 +- src/union_room.c | 3456 +++++++++----------- src/wireless_communication_status_screen.c | 56 +- 23 files changed, 2255 insertions(+), 2194 deletions(-) create mode 100644 src/data/union_room.h diff --git a/data/maps/UnionRoom/scripts.inc b/data/maps/UnionRoom/scripts.inc index f75bb1a97..c214b06d3 100644 --- a/data/maps/UnionRoom/scripts.inc +++ b/data/maps/UnionRoom/scripts.inc @@ -29,7 +29,7 @@ UnionRoom_OnResume:: removeobject LOCALID_UNION_ROOM_PLAYER_6 removeobject LOCALID_UNION_ROOM_PLAYER_7 removeobject LOCALID_UNION_ROOM_PLAYER_8 - special UnionRoomSpecial + special RunUnionRoom end UnionRoom_OnTransition:: diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index afa923a0a..f725dbaea 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -796,7 +796,7 @@ CableClub_EventScript_EnterUnionRoom:: special SetCableClubWarp warpspinenter MAP_UNION_ROOM, 7, 11 waitstate - special UnionRoomSpecial + special RunUnionRoom waitstate end diff --git a/data/specials.inc b/data/specials.inc index f16dbb79f..f815d05d6 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -373,7 +373,7 @@ gSpecials:: def_special IsWirelessAdapterConnected def_special TryBecomeLinkLeader def_special TryJoinLinkGroup - def_special UnionRoomSpecial + def_special RunUnionRoom def_special ShowWirelessCommunicationScreen def_special EnableNationalPokedex def_special SetWalkingIntoSignVars diff --git a/include/constants/union_room.h b/include/constants/union_room.h index b23860645..4016150f0 100644 --- a/include/constants/union_room.h +++ b/include/constants/union_room.h @@ -1,47 +1,51 @@ #ifndef GUARD_CONSTANTS_UNION_ROOM_H #define GUARD_CONSTANTS_UNION_ROOM_H +// The number of possible group leaders visible in the Union Room. +// Note that this is different than the number of people actively +// connected as children via the Wireless Adapter, which cannot +// exceed RFU_CHILD_MAX (4), for a total of 5 including the player. +#define MAX_UNION_ROOM_LEADERS 8 + #define UNION_ROOM_SPAWN_NONE 0 #define UNION_ROOM_SPAWN_IN 1 #define UNION_ROOM_SPAWN_OUT 2 -#define ACTIVITY_NONE 0 -#define ACTIVITY_BATTLE 1 -#define ACTIVITY_DBLBATTLE 2 -#define ACTIVITY_MLTBATTLE 3 -#define ACTIVITY_TRADE 4 -#define ACTIVITY_CHAT 5 -#define ACTIVITY_WCARD 6 -#define ACTIVITY_WNEWS 7 -#define ACTIVITY_CARD 8 -#define ACTIVITY_PJUMP 9 -#define ACTIVITY_BCRUSH 10 -#define ACTIVITY_BPICK 11 -#define ACTIVITY_SEARCH 12 -#define ACTIVITY_SPINTRADE 13 -#define ACTIVITY_ITEMTRADE 14 +#define UNION_ROOM_MAX_LEVEL 30 + +// The number of possible trainer classes for a trainer of a given gender in the Union Room. +// This value is necessarily a power of 2 because of the way it's treated in GetUnionRoomTrainerPic / GetUnionRoomTrainerClass +#define NUM_UNION_ROOM_CLASSES (1 << 3) // 8 + +#define ACTIVITY_NONE 0 +#define ACTIVITY_BATTLE_SINGLE 1 +#define ACTIVITY_BATTLE_DOUBLE 2 +#define ACTIVITY_BATTLE_MULTI 3 +#define ACTIVITY_TRADE 4 +#define ACTIVITY_CHAT 5 +#define ACTIVITY_WONDER_CARD_DUP 6 // Duplicates of later WONDER constants +#define ACTIVITY_WONDER_NEWS_DUP 7 // +#define ACTIVITY_CARD 8 +#define ACTIVITY_POKEMON_JUMP 9 +#define ACTIVITY_BERRY_CRUSH 10 +#define ACTIVITY_BERRY_PICK 11 +#define ACTIVITY_SEARCH 12 +#define ACTIVITY_SPIN_TRADE 13 +#define ACTIVITY_ITEM_TRADE 14 // Replaced with ACTIVITY_BATTLE_TOWER_OPEN in Emerald +#define ACTIVITY_RECORD_CORNER 15 +#define ACTIVITY_BERRY_BLENDER 16 // Player response -#define ACTIVITY_ACCEPT 17 -#define ACTIVITY_DECLINE 18 +#define ACTIVITY_ACCEPT 17 +#define ACTIVITY_DECLINE 18 -#define ACTIVITY_NPCTALK 19 -#define ACTIVITY_PLYRTALK 20 +#define ACTIVITY_NPCTALK 19 +#define ACTIVITY_PLYRTALK 20 -// Duplicate IDs? -#define ACTIVITY_WCARD2 21 -#define ACTIVITY_WNEWS2 22 +#define ACTIVITY_WONDER_CARD 21 +#define ACTIVITY_WONDER_NEWS 22 -#define IN_UNION_ROOM 0x40 - -// Used in UR_AddTextPrinterParameterized -#define UR_COLOR_DKE_WHT_LTE 0 -#define UR_COLOR_RED_WHT_LTR 1 -#define UR_COLOR_GRN_WHT_LTG 2 -#define UR_COLOR_WHT_WHT_LTE 3 -#define UR_COLOR_WHT_DKE_LTE 4 -#define UR_COLOR_GRN_DN6_LTB 5 -#define UR_COLOR_DN5_DN6_LTB 6 +#define IN_UNION_ROOM (1 << 6) #define LINK_GROUP_SINGLE_BATTLE 0 #define LINK_GROUP_DOUBLE_BATTLE 1 @@ -52,9 +56,30 @@ #define LINK_GROUP_BERRY_PICKING 6 #define LINK_GROUP_WONDER_CARD 7 #define LINK_GROUP_WONDER_NEWS 8 -#define NUM_LINK_GROUP_TYPES 9 - #define LINK_GROUP_UNION_ROOM_RESUME 9 #define LINK_GROUP_UNION_ROOM_INIT 10 +#define LINK_GROUP_UNK_11 11 +#define LINK_GROUP_UNK_12 12 +#define NUM_LINK_GROUP_TYPES 13 + +#define UR_TRADE_MATCH 0 +#define UR_TRADE_NOTYPE 1 +#define UR_TRADE_NOEGG 2 + +#define UR_TRADE_READY 0 +#define UR_TRADE_PLAYER_NOT_READY 1 +#define UR_TRADE_PARTNER_NOT_READY 2 + +#define UR_INTERACT_PLAYER_1 1 +#define UR_INTERACT_PLAYER_2 2 +#define UR_INTERACT_PLAYER_3 3 +#define UR_INTERACT_PLAYER_4 4 +#define UR_INTERACT_PLAYER_5 5 +#define UR_INTERACT_PLAYER_6 6 +#define UR_INTERACT_PLAYER_7 7 +#define UR_INTERACT_PLAYER_8 8 +#define UR_INTERACT_ATTENDANT 9 +#define UR_INTERACT_UNUSED 10 +#define UR_INTERACT_START_MENU 11 #endif //GUARD_CONSTANTS_UNION_ROOM_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 5fe53cfbe..47588004c 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -233,17 +233,16 @@ extern struct RfuGameData gHostRfuGameData; extern u8 gHostRfuUsername[]; extern struct RfuManager gRfu; -// GameFreak signatures void AddTextPrinterToWindow1(const u8 *str); -bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); +bool32 PrintMysteryGiftMenuMessage(u8 * cmdPtr, const u8 * src); void LinkRfu_FatalError(void); void MG_DrawCheckerboardPattern(void); void Rfu_SetCloseLinkCallback(void); bool8 IsLinkRfuTaskFinished(void); void DestroyWirelessStatusIndicatorSprite(void); -void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); -void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); -void MEvent_CreateTask_Leader(u32 arg0); +void CreateTask_LinkMysteryGiftWithFriend(u32 arg0); +void CreateTask_LinkMysteryGiftOverWireless(u32 arg0); +void CreateTask_SendMysteryGift(u32 activity); void Rfu_SendPacket(void *data); u8 CreateTask_ListenToWireless(void); void DestroyTask_RfuIdle(void); @@ -268,7 +267,7 @@ u32 GetRfuRecvQueueLength(void); void LinkRfu_Shutdown(void); void CreateTask_RfuIdle(void); bool8 Rfu_SetLinkRecovery(bool32 enable); -void var_800D_set_xB(void); +void SetUsingUnionRoomStartMenu(void); struct RfuGameData *GetHostRfuGameData(void); void UpdateWirelessStatusIndicatorSprite(void); void InitRFU(void); diff --git a/include/mevent.h b/include/mevent.h index 9a273a872..92c664d46 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -101,8 +101,8 @@ void InitMEventData(void); u16 MEvent_GetBattleCardCount(u32 command); void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId); u16 *GetMEventProfileECWordsMaybe(void); -void ResetReceivedWonderCardFlag(void); -bool32 MEventHandleReceivedWonderCard(u16 flagId); +void MysteryGift_DisableStats(void); +bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId); u16 GetWonderCardFlagId(void); #endif //GUARD_MEVENT_H diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h index a25cc598f..82a47fb5f 100644 --- a/include/mystery_gift_menu.h +++ b/include/mystery_gift_menu.h @@ -7,7 +7,7 @@ void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32); void c2_mystery_gift(void); void CB2_MysteryGiftEReader(void); -s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str); +s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str); void MG_DrawTextBorder(u8 windowId); u16 GetMysteryGiftBaseBlock(void); diff --git a/include/rfu_union_tool.h b/include/rfu_union_tool.h index 7fc7fd4cb..ffecc3f8d 100644 --- a/include/rfu_union_tool.h +++ b/include/rfu_union_tool.h @@ -3,14 +3,14 @@ #include "union_room.h" -u8 ZeroUnionObjWork(struct UnionObj * ptr); -void DeleteUnionObjWorkAndStopTask(void); +u8 ZeroUnionObjWork(struct UnionRoomObject * ptr); +void DestroyUnionRoomPlayerObjects(void); void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group); void DestroyGroupMemberObjects(u8 *spriteIds); void MakeGroupAssemblyAreasPassable(void); -void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p); -void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p); -bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds); -void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p); +void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p); +void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p); +bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds); +void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct RfuPlayerList *main0_p); #endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H diff --git a/include/trade.h b/include/trade.h index ede68b05d..2380b2213 100644 --- a/include/trade.h +++ b/include/trade.h @@ -13,7 +13,7 @@ extern const u8 gText_FemaleSymbol4[]; extern const u8 gText_GenderlessSymbol[]; extern const u16 gTradeOrHatchMonShadowTilemap[]; -void CB2_ReturnFromLinkTrade(void); +void CB2_StartCreateTradeMenu(void); s32 Trade_CalcLinkPlayerCompatibilityParam(void); s32 CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData rfuPlayer, u16 species2, u16 species, u8 isEventLegal); s32 GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData rfuPlayer, struct RfuGameCompatibilityData rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal); diff --git a/include/trade_scene.h b/include/trade_scene.h index 31679eafe..cbe336859 100644 --- a/include/trade_scene.h +++ b/include/trade_scene.h @@ -1,7 +1,7 @@ #ifndef GUARD_TRADE_SCENE_H #define GUARD_TRADE_SCENE_H -void CB2_InitTradeAnim_LinkTrade(void); +void CB2_LinkTrade(void); void CreateInGameTradePokemon(void); void DoInGameTradeScene(void); void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); diff --git a/include/union_room.h b/include/union_room.h index c39513ec2..51390c637 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -3,58 +3,60 @@ #include "global.h" #include "link_rfu.h" +#include "constants/union_room.h" -// Return value of IsRequestedTypeAndSpeciesInPlayerParty -#define UR_TRADE_MATCH 0 -#define UR_TRADE_NOTYPE 1 -#define UR_TRADE_NOEGG 2 +// In the Union Room the player is only ever connected to ≤ 4 other players. +// However, there can be up to MAX_UNION_ROOM_LEADERS (8) object events to +// represent leaders of recently discovered link groups, and each of those groups +// may have up to MAX_RFU_PLAYERS (5) players in it including the leader. +// These players are represented on-screen by NPC sprites drawn around the leader. +// Thus there can be 40 sprites of other players on-screen, in 8 groups of 5. +#define NUM_UNION_ROOM_SPRITES (MAX_UNION_ROOM_LEADERS * MAX_RFU_PLAYERS) -#define UROOM_MAX_GROUP_COUNT 8 -#define UROOM_MAX_PARTY_SIZE 5 +// The maximum number of recently connected players that can be tracked. +// Note that this is significantly less than NUM_UNION_ROOM_SPRITES, i.e. not +// every player that can be shown in the Union Room can be tracked at once. +// Information such as a group member's gender can instead be read from partnerInfo +// of the leader's RfuGameData by tracking at least all of the group leaders. +#define MAX_RFU_PLAYER_LIST_SIZE 16 -struct UnionGnameUnamePair +struct RfuPlayerData { - struct RfuGameData gname; - u8 ALIGNED(4) uname[PLAYER_NAME_LENGTH + 1]; + struct RfuGameData data; + u8 ALIGNED(4) name[RFU_USER_NAME_LENGTH]; }; -struct UnkStruct_x1C +struct RfuPlayer { - struct UnionGnameUnamePair gname_uname; + struct RfuPlayerData rfu; + u16 timeoutCounter; + u8 groupScheduledAnim:2; + bool8 useRedText:1; // Never set + u8 newPlayerCountdown; + u8 unused; +}; + +struct RfuPlayerList +{ + struct RfuPlayer players[0]; // TODO: Should be size MAX_RFU_PLAYER_LIST_SIZE +}; + +struct RfuIncomingPlayer +{ + struct RfuPlayerData rfu; u8 active:1; }; -struct UnkStruct_x20 +struct RfuIncomingPlayerList { - struct UnionGnameUnamePair gname_uname; - u16 field_18; - u8 groupScheduledAnim:2; - bool8 field_1A_1:1; - u8 field_1B; - u32 field_1C; // unused + struct RfuIncomingPlayer players[0]; // TODO: Should be size MAX_RFU_PLAYERS }; -// These arrays are dynamically allocated but must be -// represented as structs to match. -// Don't ask me why. - -// FIXME: Find a way around this. - -struct UnkStruct_Main0 +struct WirelessLink_Leader { - struct UnkStruct_x20 arr[0]; -}; - -struct UnkStruct_Main4 -{ - struct UnkStruct_x1C arr[0]; -}; - -struct UnkStruct_Leader -{ - struct UnkStruct_Main0 * field_0; - struct UnkStruct_Main4 * field_4; - struct UnkStruct_Main0 * field_8; + struct RfuPlayerList * playerList; + struct RfuIncomingPlayerList * incomingPlayerList; + struct RfuPlayerList * playerListBackup; u8 state; u8 textState; u8 delayTimerAfterOk; @@ -63,36 +65,35 @@ struct UnkStruct_Leader u8 nPlayerModeWindowId; u8 listTaskId; u8 playerCount; - u8 messageWindowId; - u8 field_15; - u8 field_16; + u16 yesNoWindowId; + u8 unused; u8 listenTaskId; u8 activity; - u8 field_19; - u16 field_1A; + u8 joinRequestAnswer; + u16 memberConfirmTimeout; }; -struct UnkStruct_Group +struct WirelessLink_Group { - struct UnkStruct_Main0 * field_0; - struct UnkStruct_Main4 * field_4; + struct RfuPlayerList * playerList; + struct RfuIncomingPlayerList * incomingPlayerList; u8 state; u8 textState; - u8 field_A; // unused + u8 delayTimerAfterOk; // unused u8 listWindowId; u8 bButtonCancelWindowId; u8 playerNameAndIdWindowId; u8 listTaskId; u8 leaderId; - u8 field_10; + u8 unused; u8 listenTaskId; - u8 cardOrNews; - u8 field_13; // referenced but never set + bool8 isWonderNews; + bool8 showListMenu; // referenced but never set u8 refreshTimer; u8 delayBeforePrint; }; -struct UnionObj +struct UnionRoomObject { u8 state; u8 gfxId; @@ -100,69 +101,56 @@ struct UnionObj u8 schedAnim; }; -struct UnkStruct_URoom +struct WirelessLink_URoom { - /* 0x000 */ struct UnkStruct_Main0 * field_0; - /* 0x004 */ struct UnkStruct_Main4 * field_4; - /* 0x008 */ struct UnkStruct_Main0 * field_8; - /* 0x00C */ struct UnkStruct_Main4 * field_C; - /* 0x010 */ u16 field_10; - /* 0x012 */ u16 field_12; - /* 0x014 */ u8 state; - /* 0x015 */ u8 stateAfterPrint; - /* 0x016 */ u8 textState; - /* 0x017 */ u8 field_17; - /* 0x018 */ u8 field_18; - /* 0x019 */ u8 field_19; - /* 0x01A */ u8 field_1A; - /* 0x01B */ u8 topListMenuWindowId; - /* 0x01C */ u8 topListMenuListMenuId; - /* 0x01D */ u8 tradeBoardSelectWindowId; - /* 0x01E */ u8 tradeBoardDetailsWindowId; - /* 0x01F */ u8 field_1F; - /* 0x020 */ u8 field_20; - /* 0x021 */ u8 spriteIds[40]; - /* 0x049 */ u8 field_49; - /* 0x04A */ u8 tradeBoardListMenuId; - - // For communication with potential link partners - /* 0x04C */ u16 playerSendBuffer[6]; - /* 0x058 */ u8 activityRequestStrbufs[4][11]; - /* 0x084 */ u16 partnerYesNoResponse; - /* 0x086 */ u16 recvActivityRequest[3]; // activity[, species, level] - /* 0x08C */ struct UnionObj unionObjs[8]; - /* 0x0AC */ u8 trainerCardStrbufs[12][15]; - /* 0x160 */ u8 field_174[48]; - /* 0x190 */ u8 field_1A4[200]; -}; - -union UnkUnion_Main -{ - struct UnkStruct_Leader * leader; - struct UnkStruct_Group * group; - struct UnkStruct_URoom * uRoom; + struct RfuPlayerList * playerList; + struct RfuIncomingPlayerList * incomingChildList; + struct RfuPlayerList * spawnPlayer; + struct RfuIncomingPlayerList * incomingParentList; + u16 unknown; // Never read + u16 unreadPlayerId; + u8 state; + u8 stateAfterPrint; + u8 textState; + u8 filler[4]; + u8 topListMenuWindowId; + u8 topListMenuId; + u8 tradeBoardMainWindowId; + u8 tradeBoardHeaderWindowId; + u8 unused1; + u8 searchTaskId; + u8 spriteIds[NUM_UNION_ROOM_SPRITES]; + u8 unused2; + u8 tradeBoardListMenuId; +// For communication with potential link partners + u16 playerSendBuffer[6]; + u8 activityRequestStrbufs[4][11]; + u16 partnerYesNoResponse; + u16 recvActivityRequest[3]; // activity[, species, level] + struct UnionRoomObject objects[MAX_UNION_ROOM_LEADERS]; + u8 trainerCardStrBuffer[12][15]; + u8 trainerCardColorStrBuffer[48]; + u8 trainerCardMsgStrBuffer[200]; }; struct UnionRoomTrade { - u16 field_0; + u16 state; u16 type; u32 playerPersonality; - u8 field_8; - u8 field_9; + u8 offerPlayerId; u16 playerSpecies; u16 playerLevel; u16 species; u16 level; - u16 field_12; u32 personality; }; -extern struct RfuGameCompatibilityData gPartnerTgtGnameSub; +extern struct RfuGameCompatibilityData gRfuPartnerCompatibilityData; extern u16 gUnionRoomOfferedSpecies; extern u8 gUnionRoomRequestedMonType; void StartUnionRoomBattle(u16 battleFlags); -u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void); +u8 CreateTask_CreateTradeMenu(void); #endif //GUARD_UNION_ROOM_H diff --git a/src/cable_club.c b/src/cable_club.c index 1c80945be..b3fbc1f78 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -897,7 +897,7 @@ static void Task_StartWiredTrade(u8 taskId) case 3: if (!gReceivedRemoteLinkPlayers) { - SetMainCallback2(CB2_ReturnFromLinkTrade); + SetMainCallback2(CB2_StartCreateTradeMenu); DestroyTask(taskId); } break; @@ -929,7 +929,7 @@ static void Task_StartWirelessTrade(u8 taskId) case 3: if (IsLinkTaskFinished()) { - UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(); + CreateTask_CreateTradeMenu(); DestroyTask(taskId); } break; diff --git a/src/data/union_room.h b/src/data/union_room.h new file mode 100644 index 000000000..6c8254d1b --- /dev/null +++ b/src/data/union_room.h @@ -0,0 +1,470 @@ +static const u8 *const sLinkGroupActivityNameTexts[] = { + [ACTIVITY_NONE] = gText_UR_EmptyString, + [ACTIVITY_BATTLE_SINGLE] = gText_UR_SingleBattle, + [ACTIVITY_BATTLE_DOUBLE] = gText_UR_DoubleBattle, + [ACTIVITY_BATTLE_MULTI] = gText_UR_MultiBattle, + [ACTIVITY_TRADE] = gText_UR_PokemonTrades, + [ACTIVITY_CHAT] = gText_UR_Chat, + [ACTIVITY_WONDER_CARD_DUP] = gText_UR_WonderCards, + [ACTIVITY_WONDER_NEWS_DUP] = gText_UR_WonderNews, + [ACTIVITY_CARD] = gText_UR_Cards, + [ACTIVITY_POKEMON_JUMP] = gText_UR_PokemonJump, + [ACTIVITY_BERRY_CRUSH] = gText_UR_BerryCrush, + [ACTIVITY_BERRY_PICK] = gText_UR_BerryPicking, + [ACTIVITY_SEARCH] = gText_UR_Search, + [ACTIVITY_SPIN_TRADE] = gText_UR_SpinTrade, + [ACTIVITY_ITEM_TRADE] = gText_UR_ItemTrade, + [ACTIVITY_RECORD_CORNER] = gText_UR_EmptyString, + [ACTIVITY_BERRY_BLENDER] = gText_UR_EmptyString, + [ACTIVITY_ACCEPT] = gText_UR_EmptyString, + [ACTIVITY_DECLINE] = gText_UR_EmptyString, + [ACTIVITY_NPCTALK] = gText_UR_EmptyString, + [ACTIVITY_PLYRTALK] = gText_UR_EmptyString, + [ACTIVITY_WONDER_CARD] = gText_UR_WonderCards, + [ACTIVITY_WONDER_NEWS] = gText_UR_WonderNews +}; + +static const struct WindowTemplate sWindowTemplate_BButtonCancel = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x008 +}; + +// Minimum and maximum number of players for a link group +// A minimum of 0 means the min and max are equal +#define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8)) +#define GROUP_MAX(capacity)(capacity & 0x0F) +#define GROUP_MIN(capacity)(capacity >> 4) +#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match + +static const u32 sLinkGroupToActivityAndCapacity[] = { + [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2), + [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2), + [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4), + [LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2), + [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5), + [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5), + [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5), + [LINK_GROUP_WONDER_CARD] = ACTIVITY_SPIN_TRADE | LINK_GROUP_CAPACITY(3, 5), + [LINK_GROUP_WONDER_NEWS] = ACTIVITY_ITEM_TRADE | LINK_GROUP_CAPACITY(3, 5) +}; + +static const struct WindowTemplate sWindowTemplate_List_PossibleGroupMembers = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 13, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate sWindowTemplate_NumPlayerMode = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0C6 +}; + +const struct ListMenuItem sListMenuItems_PossibleGroupMembers[] = { + {gText_UR_EmptyString, 0}, + {gText_UR_EmptyString, 1}, + {gText_UR_EmptyString, 2}, + {gText_UR_EmptyString, 3}, + {gText_UR_EmptyString, 4} +}; + +static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { + .items = sListMenuItems_PossibleGroupMembers, + .moveCursorFunc = NULL, + .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers, + .totalItems = ARRAY_COUNT(sListMenuItems_PossibleGroupMembers), + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 1, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_2, + .cursorKind = 1 +}; + +static const struct WindowTemplate sWindowTemplate_GroupList = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 17, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate sWindowTemplate_PlayerNameAndId = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0EE +}; + +static const struct ListMenuItem sListMenuItems_UnionRoomGroups[] = { + {gText_UR_EmptyString, 0}, + {gText_UR_EmptyString, 1}, + {gText_UR_EmptyString, 2}, + {gText_UR_EmptyString, 3}, + {gText_UR_EmptyString, 4}, + {gText_UR_EmptyString, 5}, + {gText_UR_EmptyString, 6}, + {gText_UR_EmptyString, 7}, + {gText_UR_EmptyString, 8}, + {gText_UR_EmptyString, 9}, + {gText_UR_EmptyString, 10}, + {gText_UR_EmptyString, 11}, + {gText_UR_EmptyString, 12}, + {gText_UR_EmptyString, 13}, + {gText_UR_EmptyString, 14}, + {gText_UR_EmptyString, 15} +}; + +static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { + .items = sListMenuItems_UnionRoomGroups, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups, + .totalItems = ARRAY_COUNT(sListMenuItems_UnionRoomGroups), + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = FONT_2, + .cursorKind = 0 +}; + +static const struct WindowTemplate sWindowTemplate_InviteToActivity = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 6, + .width = 8, + .height = 7, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem sListMenuItems_InviteToActivity[] = { + {gText_UR_Greetings, ACTIVITY_CARD | LINK_GROUP_CAPACITY(0, 2)}, + {gText_UR_Battle, ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)}, + {gText_UR_Chat2, ACTIVITY_CHAT | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)}, + {gText_UR_Exit, ACTIVITY_NONE | IN_UNION_ROOM } +}; + +static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { + .items = sListMenuItems_InviteToActivity, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = ARRAY_COUNT(sListMenuItems_InviteToActivity), + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_2, + .cursorKind = 0 +}; + +static const struct WindowTemplate sWindowTemplate_RegisterForTrade = { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 8, + .width = 11, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem sListMenuItems_RegisterForTrade[] = { + {gText_Register, 1}, + {gText_UR_Info, 2}, + {gText_UR_Exit, 3} +}; + +static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = { + .items = sListMenuItems_RegisterForTrade, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = ARRAY_COUNT(sListMenuItems_RegisterForTrade), + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_2, + .cursorKind = 0 +}; + +static const struct WindowTemplate sWindowTemplate_TypeNames = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 2, + .width = 9, + .height = 11, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem sListMenuItems_TypeNames[NUMBER_OF_MON_TYPES] = { + { gTypeNames[TYPE_NORMAL], TYPE_NORMAL }, + { gTypeNames[TYPE_FIRE], TYPE_FIRE }, + { gTypeNames[TYPE_WATER], TYPE_WATER }, + { gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC }, + { gTypeNames[TYPE_GRASS], TYPE_GRASS }, + { gTypeNames[TYPE_ICE], TYPE_ICE }, + { gTypeNames[TYPE_GROUND], TYPE_GROUND }, + { gTypeNames[TYPE_ROCK], TYPE_ROCK }, + { gTypeNames[TYPE_FLYING], TYPE_FLYING }, + { gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC }, + { gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING }, + { gTypeNames[TYPE_POISON], TYPE_POISON }, + { gTypeNames[TYPE_BUG], TYPE_BUG }, + { gTypeNames[TYPE_GHOST], TYPE_GHOST }, + { gTypeNames[TYPE_DRAGON], TYPE_DRAGON }, + { gTypeNames[TYPE_STEEL], TYPE_STEEL }, + { gTypeNames[TYPE_DARK], TYPE_DARK }, + { gText_UR_Exit, NUMBER_OF_MON_TYPES } +}; + +static const struct ListMenuTemplate sListMenuTemplate_TypeNames = { + .items = sListMenuItems_TypeNames, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = NUMBER_OF_MON_TYPES, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 2, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_2, + .cursorKind = 0 +}; + +static const struct WindowTemplate sWindowTemplate_TradingBoardHeader = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x001 +}; + +static const struct WindowTemplate sWindowTemplate_TradingBoardMain = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 10, + .paletteNum = 13, + .baseBlock = 0x039 +}; + +static const struct ListMenuItem sListMenuItems_TradeBoard[] = { + {gText_UR_EmptyString, -3}, + {gText_UR_EmptyString, 0}, + {gText_UR_EmptyString, 1}, + {gText_UR_EmptyString, 2}, + {gText_UR_EmptyString, 3}, + {gText_UR_EmptyString, 4}, + {gText_UR_EmptyString, 5}, + {gText_UR_EmptyString, 6}, + {gText_UR_EmptyString, 7}, + {gText_UR_Exit2, 8} +}; + +static const struct ListMenuTemplate sListMenuTemplate_TradeBoard = { + .items = sListMenuItems_TradeBoard, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = TradeBoardListMenuItemPrintFunc, + .totalItems = ARRAY_COUNT(sListMenuItems_TradeBoard), + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 12, + .cursor_X = 0, + .upText_Y = 2, + .cursorPal = 14, + .fillValue = 15, + .cursorShadowPal = 13, + .lettersSpacing = 1, + .itemVerticalPadding = 1, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_2, + .cursorKind = 0 +}; + +static const struct WindowTemplate sWindowTemplate_Unused = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 10, + .paletteNum = 13, + .baseBlock = 0x039 +}; + +static const struct ListMenuItem sListMenuItems_Unused[] = { + {gText_UR_EmptyString, 0}, + {gText_UR_EmptyString, 1}, + {gText_UR_EmptyString, 2}, + {gText_UR_EmptyString, 3}, + {gText_UR_EmptyString, 4}, + {gText_UR_EmptyString, 5}, + {gText_UR_EmptyString, 6}, + {gText_UR_EmptyString, 7}, + {gText_UR_EmptyString, 8}, + {gText_UR_EmptyString, 9}, + {gText_UR_EmptyString, 10}, + {gText_UR_EmptyString, 11}, + {gText_UR_EmptyString, 12}, + {gText_UR_EmptyString, 13}, + {gText_UR_EmptyString, 14}, + {gText_UR_EmptyString, 15} +}; + +static const struct ListMenuTemplate sListMenuTemplate_Unused = { + .items = sListMenuItems_Unused, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = ItemPrintFunc_Unused, + .totalItems = ARRAY_COUNT(sListMenuItems_Unused), + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 1, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = FONT_2, + .cursorKind = 0 +}; + +static const struct RfuPlayerData sRfuPlayerData_Dummy = {}; + +ALIGNED(4) static const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Resume[] = { + IN_UNION_ROOM | ACTIVITY_NONE, + IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE, + IN_UNION_ROOM | ACTIVITY_TRADE, + IN_UNION_ROOM | ACTIVITY_CHAT, + IN_UNION_ROOM | ACTIVITY_CARD, + IN_UNION_ROOM | ACTIVITY_ACCEPT, + IN_UNION_ROOM | ACTIVITY_DECLINE, + IN_UNION_ROOM | ACTIVITY_NPCTALK, + IN_UNION_ROOM | ACTIVITY_PLYRTALK, + 0xFF +}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xFF}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Unk11[] = { + ACTIVITY_BATTLE_SINGLE, + ACTIVITY_BATTLE_DOUBLE, + ACTIVITY_BATTLE_MULTI, + ACTIVITY_TRADE, + ACTIVITY_POKEMON_JUMP, + ACTIVITY_BERRY_CRUSH, + ACTIVITY_BERRY_PICK, + ACTIVITY_WONDER_CARD, + ACTIVITY_WONDER_NEWS, + ACTIVITY_SPIN_TRADE, + 0xFF +}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Unk12[] = { + ACTIVITY_BATTLE_SINGLE, + ACTIVITY_BATTLE_DOUBLE, + ACTIVITY_BATTLE_MULTI, + ACTIVITY_TRADE, + ACTIVITY_BERRY_CRUSH, + 0xFF +}; + +static const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = { + [LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle, + [LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle, + [LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle, + [LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade, + [LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump, + [LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush, + [LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking, + [LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard, + [LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews, + [LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume, + [LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init, + [LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11, + [LINK_GROUP_UNK_12] = sAcceptedActivityIds_Unk12, +}; + +static const u8 sLinkGroupToURoomActivity[] = { + [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE, + [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE, + [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI, + [LINK_GROUP_TRADE] = ACTIVITY_TRADE, + [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP, + [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH, + [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK, + [LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD, + [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS +}; + +static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}"); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 480f1874c..885af4dd3 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -2752,8 +2752,8 @@ static void Task_RfuReconnectWithParent(u8 taskId) if (TryReconnectParent()) DestroyTask(taskId); } - else if (GetHostRfuGameData()->activity == ACTIVITY_WCARD2 - || GetHostRfuGameData()->activity == ACTIVITY_WNEWS2) + else if (GetHostRfuGameData()->activity == ACTIVITY_WONDER_CARD + || GetHostRfuGameData()->activity == ACTIVITY_WONDER_NEWS) { tTime++; } diff --git a/src/mevent.c b/src/mevent.c index 386437259..d16f85ee1 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -263,7 +263,7 @@ static void Task_EReaderComm(u8 taskId) switch (data->state) { case 0: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader)) data->state = 1; break; case 1: @@ -285,7 +285,7 @@ static void Task_EReaderComm(u8 taskId) data->state = 13; break; case 4: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu)) { AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); ResetDelayTimer(&data->stateAdvanceDelay); @@ -334,7 +334,7 @@ static void Task_EReaderComm(u8 taskId) } break; case 7: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_LinkIsIncorrect)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_LinkIsIncorrect)) data->state = 4; break; case 8: @@ -451,19 +451,19 @@ static void Task_EReaderComm(u8 taskId) data->state = 26; break; case 23: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted)) data->state = 26; break; case 20: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink)) data->state = 0; break; case 21: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain)) data->state = 0; break; case 22: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData)) + if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData)) data->state = 0; break; case 26: @@ -943,12 +943,12 @@ u16 MEvent_GetBattleCardCount(u32 command) return 0; } -void ResetReceivedWonderCardFlag(void) +void MysteryGift_DisableStats(void) { sReceivedWonderCardIsValid = FALSE; } -bool32 MEventHandleReceivedWonderCard(u16 flagId) +bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId) { sReceivedWonderCardIsValid = FALSE; if (flagId == 0) diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 380e0b264..b07a57ee0 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -540,7 +540,7 @@ void ClearTextWindow(void) CopyWindowToVram(1, COPYWIN_MAP); } -bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) +bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) { switch (*textState) { @@ -650,7 +650,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) return response; } -s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str) +s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str) { struct WindowTemplate windowTemplate; s8 input; @@ -878,25 +878,17 @@ bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) s32 mevent_message_prompt_discard(u8 * textState, u16 * windowId, bool32 cardOrNews) { if (cardOrNews == 0) - { - return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); - } + return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); else - { - return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_OkayToDiscardNews); - } + return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_OkayToDiscardNews); } bool32 mevent_message_was_thrown_away(u8 * textState, bool32 cardOrNews) { if (cardOrNews == 0) - { - return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderCardThrownAway); - } + return PrintMysteryGiftMenuMessage(textState, gText_WonderCardThrownAway); else - { - return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderNewsThrownAway); - } + return PrintMysteryGiftMenuMessage(textState, gText_WonderNewsThrownAway); } bool32 mevent_save_game(u8 * state) @@ -1098,7 +1090,7 @@ static bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId) } else { - return MG_PrintTextOnWindow1AndWaitButton(state, str); + return PrintMysteryGiftMenuMessage(state, str); } } @@ -1165,7 +1157,7 @@ void task00_mystery_gift(u8 taskId) { if (data->IsCardOrNews == 0) { - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveCardNewOneInput)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveCardNewOneInput)) { data->state = 3; PrintMysteryGiftOrEReaderTopMenu(0, 1); @@ -1173,7 +1165,7 @@ void task00_mystery_gift(u8 taskId) } else { - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveNewsNewOneInput)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveNewsNewOneInput)) { data->state = 3; PrintMysteryGiftOrEReaderTopMenu(0, 1); @@ -1228,23 +1220,15 @@ void task00_mystery_gift(u8 taskId) { case 0: if (data->source == 1) - { - MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WCARD2); - } + CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_CARD); else if (data->source == 0) - { - MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WCARD2); - } + CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_CARD); break; case 1: if (data->source == 1) - { - MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WNEWS2); - } + CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_NEWS); else if (data->source == 0) - { - MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WNEWS2); - } + CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_NEWS); break; } data->state = 6; @@ -1291,7 +1275,7 @@ void task00_mystery_gift(u8 taskId) } break; case 9: - flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()); + flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()); switch (flag) { case 0: @@ -1312,14 +1296,14 @@ void task00_mystery_gift(u8 taskId) } break; case 10: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer())) + if (PrintMysteryGiftMenuMessage(&data->textState, mevent_client_get_buffer())) { mevent_client_inc_flag(); data->state = 7; } break; case 11: - flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard); + flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard); switch (flag) { case 0: @@ -1347,7 +1331,7 @@ void task00_mystery_gift(u8 taskId) } break; case 12: - flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift); + flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift); switch (flag) { case 0: @@ -1387,17 +1371,12 @@ void task00_mystery_gift(u8 taskId) case 15: r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId); if (r1 == NULL) - { r1 = data->buffer; - } if (sp0) - { flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId); - } else - { - flag = MG_PrintTextOnWindow1AndWaitButton(&data->textState, r1); - } + flag = PrintMysteryGiftMenuMessage(&data->textState, r1); + if (flag) { if (data->prevPromptWindowId == 3) @@ -1423,7 +1402,7 @@ void task00_mystery_gift(u8 taskId) } break; case 16: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) { data->state = 0; PrintMysteryGiftOrEReaderTopMenu(0, 0); @@ -1536,7 +1515,7 @@ void task00_mystery_gift(u8 taskId) } break; case 23: - switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard)) + switch ((u32)DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard)) { case 0: data->state = 24; @@ -1587,10 +1566,10 @@ void task00_mystery_gift(u8 taskId) switch (data->IsCardOrNews) { case 0: - MEvent_CreateTask_Leader(ACTIVITY_WCARD2); + CreateTask_SendMysteryGift(ACTIVITY_WONDER_CARD); break; case 1: - MEvent_CreateTask_Leader(ACTIVITY_WNEWS2); + CreateTask_SendMysteryGift(ACTIVITY_WONDER_NEWS); break; } data->source = 1; @@ -1660,7 +1639,7 @@ void task00_mystery_gift(u8 taskId) } break; case 36: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) { data->state = 0; PrintMysteryGiftOrEReaderTopMenu(0, 0); diff --git a/src/party_menu.c b/src/party_menu.c index 84b9b5807..74a76adc8 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3877,7 +3877,7 @@ static void CursorCB_Trade1(u8 taskId) u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index 51b6106d5..d6e77519d 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -10,7 +10,7 @@ #include "constants/union_room.h" #include "constants/event_objects.h" -static EWRAM_DATA struct UnionObj * UnionObjWork = NULL; +static EWRAM_DATA struct UnionRoomObject * UnionObjWork = NULL; static EWRAM_DATA u32 sUnionObjRefreshTimer = 0; static u8 StartUnionObjAnimTask(void); @@ -212,7 +212,7 @@ static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx) return TRUE; } -u8 ZeroUnionObjWork(struct UnionObj * ptr) +u8 ZeroUnionObjWork(struct UnionRoomObject * ptr) { s32 i; @@ -234,7 +234,7 @@ static const u8 sMovement_UnionPlayerExit[2] = { MOVEMENT_ACTION_STEP_END }; -static bool32 AnimateUnionRoomPlayerDespawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr) +static bool32 AnimateUnionRoomPlayerDespawn(s8 * a0, u32 playerIdx, struct UnionRoomObject * ptr) { switch (*a0) { @@ -263,7 +263,7 @@ static const u8 sMovement_UnionPlayerEnter[2] = { MOVEMENT_ACTION_STEP_END }; -static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionObj * ptr) +static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionRoomObject * ptr) { s16 x, y; @@ -308,7 +308,7 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct Un static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256) { - struct UnionObj * ptr = &UnionObjWork[playerIdx]; + struct UnionRoomObject * ptr = &UnionObjWork[playerIdx]; AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561) ptr->schedAnim = UNION_ROOM_SPAWN_IN; ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256); @@ -324,7 +324,7 @@ static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256) static bool32 DespawnGroupLeader(u32 playerIdx) { - struct UnionObj * ptr = &UnionObjWork[playerIdx]; + struct UnionRoomObject * ptr = &UnionObjWork[playerIdx]; AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577) ptr->schedAnim = UNION_ROOM_SPAWN_OUT; if (ptr->state == 1) @@ -337,7 +337,7 @@ static bool32 DespawnGroupLeader(u32 playerIdx) } } -static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr) +static void AnimateUnionObj(u32 playerIdx, struct UnionRoomObject * ptr) { switch (ptr->state) { @@ -418,7 +418,7 @@ static void DestroyAnimateUnionObjsTask(void) } } -void DeleteUnionObjWorkAndStopTask(void) +void DestroyUnionRoomPlayerObjects(void) { s32 i; for (i = 0; i < 8; i++) @@ -577,30 +577,30 @@ static void DespawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname) } } -static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom * groups) +static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom * groups) { s32 i; - struct UnkStruct_x20 * x20_p; + struct RfuPlayer * x20_p; sUnionObjRefreshTimer = 0; - for (i = 0, x20_p = groups->field_0->arr; i < 8; i++) + for (i = 0, x20_p = groups->playerList->players; i < 8; i++) { if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - SpawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname); + SpawnGroupLeaderAndMembers(i, &x20_p[i].rfu.data); } else if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) { - DespawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname); + DespawnGroupLeaderAndMembers(i, &x20_p[i].rfu.data); } } } -void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p) +void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p) { sUnionObjRefreshTimer = 300; } -void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p) +void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p) { if (++sUnionObjRefreshTimer > 300) { @@ -608,17 +608,17 @@ void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p) } } -bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds) +bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds) { s16 x, y; s32 i, j; - struct UnkStruct_x20 * x20_p; + struct RfuPlayer * x20_p; if (!is_walking_or_running()) { return FALSE; } GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - for (i = 0, x20_p = main0_p->arr; i < 8; i++) + for (i = 0, x20_p = main0_p->players; i < 8; i++) { for (j = 0; j < 5; j++) { @@ -657,7 +657,7 @@ static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction) TurnVirtualObject(5 * group - 0x38 + member, direction); } -void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p) +void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct RfuPlayerList *main0_p) { - return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->arr[group].gname_uname.gname)); + return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->players[group].rfu.data)); } diff --git a/src/start_menu.c b/src/start_menu.c index ec2616338..76f6cade2 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -374,7 +374,7 @@ void Task_StartMenuHandleInput(u8 taskId) { case 0: if (InUnionRoom() == TRUE) - var_800D_set_xB(); + SetUsingUnionRoomStartMenu(); sStartMenuCallback = StartCB_HandleInput; data[0]++; break; diff --git a/src/trade.c b/src/trade.c index e8ada5673..c302f93b3 100644 --- a/src/trade.c +++ b/src/trade.c @@ -711,7 +711,7 @@ static void InitTradeMenuResources(void) } } -void CB2_ReturnFromLinkTrade(void) +void CB2_StartCreateTradeMenu(void) { SetMainCallback2(CB2_ReturnFromLinkTrade2); } @@ -1208,7 +1208,7 @@ static void TradeMenuCB_10(void) static void TradeMenuCB_13(void) { - gMain.savedCallback = CB2_ReturnFromLinkTrade; + gMain.savedCallback = CB2_StartCreateTradeMenu; if (gWirelessCommType != 0) { if (IsLinkRfuTaskFinished()) @@ -1218,7 +1218,7 @@ static void TradeMenuCB_13(void) Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); - SetMainCallback2(CB2_InitTradeAnim_LinkTrade); + SetMainCallback2(CB2_LinkTrade); } } else @@ -1229,7 +1229,7 @@ static void TradeMenuCB_13(void) FreeAllWindowBuffers(); Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; - SetMainCallback2(CB2_InitTradeAnim_LinkTrade); + SetMainCallback2(CB2_LinkTrade); } } } diff --git a/src/trade_scene.c b/src/trade_scene.c index a946299b9..826c45c3b 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -773,7 +773,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 action) } } -void CB2_InitTradeAnim_LinkTrade(void) +void CB2_LinkTrade(void) { switch (gMain.state) { @@ -2668,7 +2668,7 @@ static void CB2_HandleTradeEnded(void) case 8: if (IsBGMStopped() == TRUE) { - if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) + if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) { SetLinkStandbyCallback(); } @@ -2680,7 +2680,7 @@ static void CB2_HandleTradeEnded(void) } break; case 9: - if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) + if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) { if (IsLinkRfuTaskFinished()) { diff --git a/src/union_room.c b/src/union_room.c index 186d09707..2458e44ef 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -10,6 +10,7 @@ #include "easy_chat.h" #include "event_data.h" #include "event_object_lock.h" +#include "fieldmap.h" #include "field_control_avatar.h" #include "field_fadetransition.h" #include "field_player_avatar.h" @@ -48,641 +49,274 @@ #include "constants/trainer_card.h" #include "constants/union_room.h" +// States for Task_RunUnionRoom +enum { + UR_STATE_INIT, + UR_STATE_INIT_OBJECTS, + UR_STATE_INIT_LINK, + UR_STATE_CHECK_SELECTING_MON, + UR_STATE_MAIN, + UR_STATE_DO_SOMETHING_PROMPT, + UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, + UR_STATE_DO_SOMETHING_PROMPT_2, + UR_STATE_PRINT_MSG, + UR_STATE_HANDLE_ACTIVITY_REQUEST, + UR_STATE_DECLINE_ACTIVITY_REQUEST, + UR_STATE_PLAYER_CONTACTED_YOU, + UR_STATE_RECV_CONTACT_DATA, + UR_STATE_PRINT_START_ACTIVITY_MSG, + UR_STATE_START_ACTIVITY_LINK, + UR_STATE_START_ACTIVITY_WAIT_FOR_LINK, + UR_STATE_START_ACTIVITY_FREE_UROOM, + UR_STATE_START_ACTIVITY_FADE, + UR_STATE_START_ACTIVITY, + UR_STATE_RECV_JOIN_CHAT_REQUEST, + UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY, + UR_STATE_TRY_ACCEPT_CHAT_REQUEST, + UR_STATE_ACCEPT_CHAT_REQUEST, + UR_STATE_WAIT_FOR_START_MENU, + UR_STATE_INTERACT_WITH_PLAYER, + UR_STATE_TRY_COMMUNICATING, + UR_STATE_PRINT_AND_EXIT, + UR_STATE_SEND_ACTIVITY_REQUEST, + UR_STATE_TRAINER_APPEARS_BUSY, + UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST, + UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, + UR_STATE_SEND_TRADE_REQUST, + UR_STATE_REQUEST_DECLINED, + UR_STATE_PRINT_CONTACT_MSG, + UR_STATE_HANDLE_CONTACT_DATA, + UR_STATE_RECV_ACTIVITY_REQUEST, + UR_STATE_CANCEL_REQUEST_PRINT_MSG, + UR_STATE_CANCEL_REQUEST_RESTART_LINK, + UR_STATE_COMMUNICATING_WAIT_FOR_DATA, + UR_STATE_WAIT_FOR_CONTACT_DATA, + UR_STATE_PRINT_CARD_INFO, + UR_STATE_WAIT_FINISH_READING_CARD, + UR_STATE_INTERACT_WITH_ATTENDANT, + UR_STATE_REGISTER_PROMPT, + UR_STATE_CANCEL_REGISTRATION_PROMPT, + UR_STATE_CHECK_TRADING_BOARD, + UR_STATE_TRADING_BOARD_LOAD, + UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, + UR_STATE_TRADING_BOARD_HANDLE_INPUT, + UR_STATE_TRADE_PROMPT, + UR_STATE_TRADE_SELECT_MON, + UR_STATE_TRADE_OFFER_MON, + UR_STATE_REGISTER_REQUEST_TYPE, + UR_STATE_REGISTER_SELECT_MON_FADE, + UR_STATE_REGISTER_SELECT_MON, + UR_STATE_REGISTER_COMPLETE, + UR_STATE_CANCEL_REGISTRATION, +}; + +// States for sUnionRoomTrade.state +enum { + URTRADE_STATE_NONE, + URTRADE_STATE_REGISTERING, + URTRADE_STATE_OFFERING, +}; + +// States for Task_TryBecomeLinkLeader +enum { + LL_STATE_INIT, + LL_STATE_INIT2 = 3, + LL_STATE_GET_AWAITING_PLAYERS_TEXT, + LL_STATE_PRINT_AWAITING_PLAYERS, + LL_STATE_AWAIT_PLAYERS, + LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, + LL_STATE_WAIT_DISCONNECT_CHILD = 9, + LL_STATE_MEMBER_LEFT, + LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT, + LL_STATE_UPDATE_AFTER_JOIN_REQUEST, + LL_STATE_ACCEPTED_FINAL_MEMBER, + LL_STATE_WAIT_AND_CONFIRM_MEMBERS, + LL_STATE_MEMBERS_OK_PROMPT, + LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT, + LL_STATE_CONFIRMED_MEMBERS, + LL_STATE_FINAL_MEMBER_CHECK, + LL_STATE_CANCEL_PROMPT, + LL_STATE_CANCEL_PROMPT_HANDLE_INPUT, + LL_STATE_SHUTDOWN_AND_RETRY, + LL_STATE_RETRY, + LL_STATE_SHUTDOWN_AND_FAIL, + LL_STATE_FAILED, + LL_STATE_TRY_START_ACTIVITY = 26, + LL_STATE_MEMBER_DISCONNECTED = 29, + LL_STATE_CANCEL_WITH_MSG +}; + +// States for Task_TryJoinLinkGroup +enum { + LG_STATE_INIT, + LG_STATE_CHOOSE_LEADER_MSG, + LG_STATE_INIT_WINDOWS, + LG_STATE_CHOOSE_LEADER_HANDLE_INPUT, + LG_STATE_ASK_JOIN_GROUP = 5, + LG_STATE_MAIN, + LG_STATE_ASK_LEAVE_GROUP, + LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT, + LG_STATE_WAIT_LEAVE_GROUP, + LG_STATE_CANCEL_CHOOSE_LEADER, + LG_STATE_CANCELED, + LG_STATE_RFU_ERROR, + LG_STATE_RFU_ERROR_SHUTDOWN, + LG_STATE_DISCONNECTED, + LG_STATE_RETRY_CONNECTION, + LG_STATE_TRADE_NOT_READY = 18, + LG_STATE_TRADE_NOT_READY_RETRY, + LG_STATE_READY_START_ACTIVITY, + LG_STATE_START_ACTIVITY, + LG_STATE_SHUTDOWN = 23, +}; + +// Color types for PrintUnionRoomText +enum { + UR_COLOR_DEFAULT, + UR_COLOR_RED, + UR_COLOR_GREEN, + UR_COLOR_WHITE, + UR_COLOR_CANCEL, + UR_COLOR_TRADE_BOARD_SELF, + UR_COLOR_TRADE_BOARD_OTHER, +}; + +// Return values for HandlePlayerListUpdate +enum { + PLIST_NONE, + PLIST_NEW_PLAYER, + PLIST_RECENT_UPDATE, + PLIST_UNUSED, + PLIST_CONTACTED, +}; + static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; static EWRAM_DATA u8 sPlayerCurrActivity = 0; static EWRAM_DATA u8 sPlayerActivityGroupSize = 0; -static EWRAM_DATA union UnkUnion_Main sUnionRoomMain = {}; -static EWRAM_DATA u32 sUnref_203B060 = 0; -EWRAM_DATA struct RfuGameCompatibilityData gPartnerTgtGnameSub = {}; +static EWRAM_DATA union +{ + struct WirelessLink_Leader *leader; + struct WirelessLink_Group *group; + struct WirelessLink_URoom *uRoom; +} sWirelessLinkMain = {}; +static EWRAM_DATA u32 sUnused = 0; +EWRAM_DATA struct RfuGameCompatibilityData gRfuPartnerCompatibilityData = {}; EWRAM_DATA u16 gUnionRoomOfferedSpecies = SPECIES_NONE; EWRAM_DATA u8 gUnionRoomRequestedMonType = TYPE_NORMAL; static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; -static struct UnkStruct_Leader * sLeader; -static struct UnkStruct_Group * sGroup; -static struct UnkStruct_URoom * sURoom; +static struct WirelessLink_Leader * sLeader; +static struct WirelessLink_Group * sGroup; +static struct WirelessLink_URoom * sURoom; -static void Task_TryBecomeLinkLeader(u8 taskId); -static void Leader_DestroyResources(struct UnkStruct_Leader * leader); -static bool8 Leader_SetStateIfMemberListChanged(struct UnkStruct_Leader * leader, u32 state1, u32 state2); -static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 itemId, u8 y); -static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * main0); -static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * main0); -static void Task_TryJoinLinkGroup(u8 taskId); -static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * group, s32 id); -static void AskToJoinRfuGroup(struct UnkStruct_Group * group, s32 id); -static void Task_ListenToWireless(u8 taskId); -static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 itemId, u8 y); +static void Task_TryBecomeLinkLeader(u8); +static void Leader_DestroyResources(struct WirelessLink_Leader *); +static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *, u32, u32); +static void ItemPrintFunc_PossibleGroupMembers(u8, u32, u8); +static u8 LeaderUpdateGroupMembership(struct RfuPlayerList *); +static u8 LeaderPrunePlayerList(struct RfuPlayerList *); +static void Task_TryJoinLinkGroup(u8); +static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *, s32); +static void AskToJoinRfuGroup(struct WirelessLink_Group *, s32); +static void Task_ListenToWireless(u8); +static void ListMenuItemPrintFunc_UnionRoomGroups(u8, u32, u8); static u8 GetNewLeaderCandidate(void); static void CreateTask_RunScriptAndFadeToActivity(void); static void CreateTask_StartActivity(void); -static void Task_MEvent_Leader(u8 taskId); -static void Task_CardOrNewsWithFriend(u8 taskId); -static void Task_CardOrNewsOverWireless(u8 taskId); -static void Task_RunUnionRoom(u8 taskId); -static u16 ReadAsU16(const u8 *data); -static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uRoom); -static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uRoom); -static void Task_InitUnionRoom(u8 taskId); +static void Task_SendMysteryGift(u8); +static void Task_CardOrNewsWithFriend(u8); +static void Task_CardOrNewsOverWireless(u8); +static void Task_RunUnionRoom(u8); +static u16 ReadAsU16(const u8 *); +static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *); +static bool32 HandleContactFromOtherPlayer(struct WirelessLink_URoom *); +static void Task_InitUnionRoom(u8); static u8 HandlePlayerListUpdate(void); -static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4, struct UnkStruct_Main4 * arg1, u32 arg2); -static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 linkGroup); -static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup); -static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup); -static bool32 UR_PrintFieldMessage(const u8 * str); -static bool32 UR_RunTextPrinters_CheckPrinter0Active(void); -static bool8 PrintOnTextbox(u8 *textState, const u8 *str); -static s8 UnionRoomHandleYesNo(u8 *state_p, bool32 no_draw); -static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate); -static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders); -static void UR_BlankBg0(void); -static void JoinGroup_BlankBg0AndEnableScriptContexts(void); -static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); -static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * x20, u8 count); -static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * x1C, u8 count); -static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * arg0, const struct UnionGnameUnamePair * arg1); -static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * arg0, struct UnionGnameUnamePair * arg1); -static u32 Findx20Inx1CArray(struct UnkStruct_x20 * x20, struct UnkStruct_x1C * x1Carr); -static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x1C, u8 count); -static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id); -static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id); -static bool32 PlayerIsTalkingToUnionRoomAide(void); -static u32 GetResponseIdx_InviteToURoomActivity(s32 activity); -static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * unkX20); -static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender); -static void nullsub_92(u8 windowId, u32 itemId, u8 y); -static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y); -static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n); -static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 * main0); -static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species); -static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender); -static void GetURoomActivityStartMsg(u8 *dst, u8 activity); -static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_p, struct UnkStruct_URoom * uroom); -static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * uroom); +static u8 CreateTask_SearchForChildOrParent(struct RfuIncomingPlayerList *, struct RfuIncomingPlayerList *, u32); +static bool32 HasWonderCardOrNewsByLinkGroup(struct RfuGameData *, s16); +static u8 CreateTask_ListenForCompatiblePartners(struct RfuIncomingPlayerList *, u32); +static u8 CreateTask_ListenForWonderDistributor(struct RfuIncomingPlayerList *, u32); +static bool32 UR_PrintFieldMessage(const u8 *); +static bool32 UR_RunTextPrinters(void); +static bool8 PrintOnTextbox(u8 *, const u8 *); +static s8 UnionRoomHandleYesNo(u8 *, bool32); +static s32 ListMenuHandler_AllItemsAvailable(u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *); +static s32 TradeBoardMenuHandler(u8 *, u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *, struct RfuPlayerList *); +static void UR_ClearBg0(void); +static void JoinGroup_EnableScriptContexts(void); +static void PrintUnionRoomText(u8, u8, const u8 *, u8, u8, u8); +static void ClearRfuPlayerList(struct RfuPlayer *, u8); +static void ClearIncomingPlayerList(struct RfuIncomingPlayer *, u8); +static bool8 ArePlayersDifferent(struct RfuPlayerData *, const struct RfuPlayerData *); +static bool32 ArePlayerDataDifferent(struct RfuPlayerData *, struct RfuPlayerData *); +static u32 GetNewIncomingPlayerId(struct RfuPlayer *, struct RfuIncomingPlayer *); +static u8 TryAddIncomingPlayerToList(struct RfuPlayer *, struct RfuIncomingPlayer *, u8); +static void PrintGroupMemberOnWindow(u8, u8, u8, struct RfuPlayer *, u8, u8); +static void PrintGroupCandidateOnWindow(u8, u8, u8, struct RfuPlayer *, u8, u8); +static bool32 IsPlayerFacingTradingBoard(void); +static u32 GetResponseIdx_InviteToURoomActivity(s32); +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct RfuPlayer *); +static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList *, u8, u8, u32); +static void ItemPrintFunc_Unused(u8, u32, u8); +static void TradeBoardListMenuItemPrintFunc(u8, u32, u8); +static s32 GetIndexOfNthTradeBoardOffer(struct RfuPlayer *, s32); +static s32 GetUnionRoomPlayerGender(s32, struct RfuPlayerList *); +static s32 IsRequestedTradeInPlayerParty(u32, u32); +static void GetURoomActivityRejectMsg(u8 *, s32, u32); +static void GetURoomActivityStartMsg(u8 *, u8); +static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *); +static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *); static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); -static void ResetUnionRoomTrade(struct UnionRoomTrade * trade); -static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade); -static void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade); -static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mpId); -static void HandleCancelTrade(bool32 unlockObjs); -static void UR_EnableScriptContext2AndFreezeObjectEvents(void); -static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer); -static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom); -static void ViewURoomPartnerTrainerCard(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 parent_child); +static void ResetUnionRoomTrade(struct UnionRoomTrade *); +static bool32 RegisterTradeMonAndGetIsEgg(u32, struct UnionRoomTrade *); +static void RegisterTradeMon(u32, struct UnionRoomTrade *); +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *, u8); +static void HandleCancelActivity(bool32); +static void StartScriptInteraction(void); +static u8 GetLinkPlayerInfoFlags(s32); +static u8 GetActivePartnersInfo(struct WirelessLink_URoom *); +static void ViewURoomPartnerTrainerCard(u8 *, struct WirelessLink_URoom *, bool8); -#define _8456CD8(a, b) ((a) | ((b) << 8)) - -static const u8 *const sUnionRoomActivityStringPtrs[] = { - gText_UR_EmptyString, - gText_UR_SingleBattle, - gText_UR_DoubleBattle, - gText_UR_MultiBattle, - gText_UR_PokemonTrades, - gText_UR_Chat, - gText_UR_WonderCards, - gText_UR_WonderNews, - gText_UR_Cards, - gText_UR_PokemonJump, - gText_UR_BerryCrush, - gText_UR_BerryPicking, - gText_UR_Search, - gText_UR_SpinTrade, - gText_UR_ItemTrade, - gText_UR_EmptyString, - gText_UR_EmptyString, - gText_UR_EmptyString, - gText_UR_EmptyString, - gText_UR_EmptyString, - gText_UR_EmptyString, - gText_UR_WonderCards, - gText_UR_WonderNews -}; - -static const struct WindowTemplate sWindowTemplate_BButtonCancel = { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 30, - .height = 2, - .paletteNum = 0xF, - .baseBlock = 0x008 -}; - -static const u32 sLinkGroupToActivityAndCapacity[] = { - [LINK_GROUP_SINGLE_BATTLE] = _8456CD8(ACTIVITY_BATTLE, 2), - [LINK_GROUP_DOUBLE_BATTLE] = _8456CD8(ACTIVITY_DBLBATTLE, 2), - [LINK_GROUP_MULTI_BATTLE] = _8456CD8(ACTIVITY_MLTBATTLE, 4), - [LINK_GROUP_TRADE] = _8456CD8(ACTIVITY_TRADE, 2), - [LINK_GROUP_POKEMON_JUMP] = _8456CD8(ACTIVITY_PJUMP, 5 | 0x20), - [LINK_GROUP_BERRY_CRUSH] = _8456CD8(ACTIVITY_BCRUSH, 5 | 0x20), - [LINK_GROUP_BERRY_PICKING] = _8456CD8(ACTIVITY_BPICK, 5 | 0x30), - [LINK_GROUP_WONDER_CARD] = _8456CD8(ACTIVITY_SPINTRADE, 5 | 0x30), - [LINK_GROUP_WONDER_NEWS] = _8456CD8(ACTIVITY_ITEMTRADE, 5 | 0x30) -}; - -static const struct WindowTemplate sWindowTemplate_List_PossibleGroupMembers = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 13, - .height = 10, - .paletteNum = 15, - .baseBlock = 0x044 -}; - -static const struct WindowTemplate sWindowTemplate_NumPlayerMode = { - .bg = 0, - .tilemapLeft = 16, - .tilemapTop = 3, - .width = 7, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x0C6 -}; - -const struct ListMenuItem sListMenuItems_PossibleGroupMembers[] = { - {gText_UR_EmptyString, 0}, - {gText_UR_EmptyString, 1}, - {gText_UR_EmptyString, 2}, - {gText_UR_EmptyString, 3}, - {gText_UR_EmptyString, 4} -}; - -static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { - .items = sListMenuItems_PossibleGroupMembers, - .moveCursorFunc = NULL, - .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers, - .totalItems = 5, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 1, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 2, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, - .cursorKind = 1 -}; - -static const struct WindowTemplate sWindowTemplate_MysteryGiftList = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 17, - .height = 10, - .paletteNum = 15, - .baseBlock = 0x044 -}; - -static const struct WindowTemplate sWindowTemplate_MysteryGiftPlayerNameAndId = { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 3, - .width = 7, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x0EE -}; - -static const struct ListMenuItem sListMenuItems_UnionRoomGroups[] = { - {gText_UR_EmptyString, 0}, - {gText_UR_EmptyString, 1}, - {gText_UR_EmptyString, 2}, - {gText_UR_EmptyString, 3}, - {gText_UR_EmptyString, 4}, - {gText_UR_EmptyString, 5}, - {gText_UR_EmptyString, 6}, - {gText_UR_EmptyString, 7}, - {gText_UR_EmptyString, 8}, - {gText_UR_EmptyString, 9}, - {gText_UR_EmptyString, 10}, - {gText_UR_EmptyString, 11}, - {gText_UR_EmptyString, 12}, - {gText_UR_EmptyString, 13}, - {gText_UR_EmptyString, 14}, - {gText_UR_EmptyString, 15} -}; - -static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { - .items = sListMenuItems_UnionRoomGroups, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups, - .totalItems = 16, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 2, - .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = FONT_2, - .cursorKind = 0 -}; - -static const struct WindowTemplate sWindowTemplate_InviteToActivity = { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 6, - .width = 8, - .height = 7, - .paletteNum = 15, - .baseBlock = 0x001 -}; - -static const struct ListMenuItem sListMenuItems_InviteToActivity[] = { - {gText_UR_Greetings, _8456CD8( ACTIVITY_CARD, 2)}, - {gText_UR_Battle, _8456CD8(ACTIVITY_BATTLE | IN_UNION_ROOM, 2)}, - {gText_UR_Chat2, _8456CD8(ACTIVITY_CHAT | IN_UNION_ROOM, 2)}, - {gText_UR_Exit, _8456CD8(ACTIVITY_NONE | IN_UNION_ROOM, 0)} -}; - -static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { - .items = sListMenuItems_InviteToActivity, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 4, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, - .cursorKind = 0 -}; - -static const struct WindowTemplate sWindowTemplate_TradeBoardRegisterInfoExit = { - .bg = 0, - .tilemapLeft = 18, - .tilemapTop = 8, - .width = 11, - .height = 5, - .paletteNum = 15, - .baseBlock = 0x001 -}; - -static const struct ListMenuItem gUnknown_8456E3C[] = { - {gText_Register, 1}, - {gText_UR_Info, 2}, - {gText_UR_Exit, 3} -}; - -static const struct ListMenuTemplate sListMenuTemplate_TradeBoardRegisterInfoExit = { - .items = gUnknown_8456E3C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 3, - .maxShowed = 3, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, - .cursorKind = 0 -}; - -static const struct WindowTemplate sWindowTemplate_TypeNames = { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 2, - .width = 9, - .height = 11, - .paletteNum = 15, - .baseBlock = 0x001 -}; - -static const struct ListMenuItem sListMenuItems_TypeNames[] = { - {gTypeNames[TYPE_NORMAL], TYPE_NORMAL}, - {gTypeNames[TYPE_FIRE], TYPE_FIRE}, - {gTypeNames[TYPE_WATER], TYPE_WATER}, - {gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC}, - {gTypeNames[TYPE_GRASS], TYPE_GRASS}, - {gTypeNames[TYPE_ICE], TYPE_ICE}, - {gTypeNames[TYPE_GROUND], TYPE_GROUND}, - {gTypeNames[TYPE_ROCK], TYPE_ROCK}, - {gTypeNames[TYPE_FLYING], TYPE_FLYING}, - {gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC}, - {gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING}, - {gTypeNames[TYPE_POISON], TYPE_POISON}, - {gTypeNames[TYPE_BUG], TYPE_BUG}, - {gTypeNames[TYPE_GHOST], TYPE_GHOST}, - {gTypeNames[TYPE_DRAGON], TYPE_DRAGON}, - {gTypeNames[TYPE_STEEL], TYPE_STEEL}, - {gTypeNames[TYPE_DARK], TYPE_DARK}, - {gText_UR_Exit, NUMBER_OF_MON_TYPES} -}; - -static const struct ListMenuTemplate sListMenuTemplate_TypeNames = { - .items = sListMenuItems_TypeNames, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = NUMBER_OF_MON_TYPES, - .maxShowed = 6, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 2, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, - .cursorKind = 0 -}; - -static const struct WindowTemplate sTradeBoardWindowTemplate = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 28, - .height = 2, - .paletteNum = 13, - .baseBlock = 0x001 -}; - -static const struct WindowTemplate gUnknown_8456F24 = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 5, - .width = 28, - .height = 10, - .paletteNum = 13, - .baseBlock = 0x039 -}; - -static const struct ListMenuItem sTradeBoardListMenuItems[] = { - {gText_UR_EmptyString, -3}, - {gText_UR_EmptyString, 0}, - {gText_UR_EmptyString, 1}, - {gText_UR_EmptyString, 2}, - {gText_UR_EmptyString, 3}, - {gText_UR_EmptyString, 4}, - {gText_UR_EmptyString, 5}, - {gText_UR_EmptyString, 6}, - {gText_UR_EmptyString, 7}, - {gText_UR_Exit2, 8} -}; - -static const struct ListMenuTemplate sTradeBoardListMenuTemplate = { - .items = sTradeBoardListMenuItems, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = TradeBoardListMenuItemPrintFunc, - .totalItems = 10, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 12, - .cursor_X = 0, - .upText_Y = 2, - .cursorPal = 14, - .fillValue = 15, - .cursorShadowPal = 13, - .lettersSpacing = 1, - .itemVerticalPadding = 1, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, - .cursorKind = 0 -}; - -static const struct WindowTemplate gUnknown_8456F94 = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 5, - .width = 28, - .height = 10, - .paletteNum = 13, - .baseBlock = 0x039 -}; - -static const struct ListMenuItem gUnknown_8456F9C[] = { - {gText_UR_EmptyString, 0}, - {gText_UR_EmptyString, 1}, - {gText_UR_EmptyString, 2}, - {gText_UR_EmptyString, 3}, - {gText_UR_EmptyString, 4}, - {gText_UR_EmptyString, 5}, - {gText_UR_EmptyString, 6}, - {gText_UR_EmptyString, 7}, - {gText_UR_EmptyString, 8}, - {gText_UR_EmptyString, 9}, - {gText_UR_EmptyString, 10}, - {gText_UR_EmptyString, 11}, - {gText_UR_EmptyString, 12}, - {gText_UR_EmptyString, 13}, - {gText_UR_EmptyString, 14}, - {gText_UR_EmptyString, 15} -}; - -static const struct ListMenuTemplate gUnknown_845701C = { - .items = gUnknown_8456F9C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = nullsub_92, - .totalItems = 16, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 1, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = FONT_2, - .cursorKind = 0 -}; - -static const struct UnionGnameUnamePair sUnionGnameUnamePair_Dummy = {}; - -// starts at gUnknown_082F0474 in pokeemerald, union link groups - -ALIGNED(4) static const u8 gUnknown_845704C[] = { - ACTIVITY_BATTLE, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457050[] = { - ACTIVITY_DBLBATTLE, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457054[] = { - ACTIVITY_MLTBATTLE, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457058[] = { - ACTIVITY_TRADE, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_845705C[] = { - ACTIVITY_PJUMP, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457060[] = { - ACTIVITY_BCRUSH, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457064[] = { - ACTIVITY_BPICK, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457068[] = { - ACTIVITY_WCARD2, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_845706C[] = { - ACTIVITY_WNEWS2, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457070[] = { - ACTIVITY_NONE | IN_UNION_ROOM, - ACTIVITY_BATTLE | IN_UNION_ROOM, - ACTIVITY_TRADE | IN_UNION_ROOM, - ACTIVITY_CHAT | IN_UNION_ROOM, - ACTIVITY_CARD | IN_UNION_ROOM, - ACTIVITY_ACCEPT | IN_UNION_ROOM, - ACTIVITY_DECLINE | IN_UNION_ROOM, - ACTIVITY_NPCTALK | IN_UNION_ROOM, - ACTIVITY_PLYRTALK | IN_UNION_ROOM, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_845707C[] = { - ACTIVITY_SEARCH, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_8457080[] = { - ACTIVITY_BATTLE, - ACTIVITY_DBLBATTLE, - ACTIVITY_MLTBATTLE, - ACTIVITY_TRADE, - ACTIVITY_PJUMP, - ACTIVITY_BCRUSH, - ACTIVITY_BPICK, - ACTIVITY_WCARD2, - ACTIVITY_WNEWS2, - ACTIVITY_SPINTRADE, - 0xFF -}; - -ALIGNED(4) static const u8 gUnknown_845708C[] = { - ACTIVITY_BATTLE, - ACTIVITY_DBLBATTLE, - ACTIVITY_MLTBATTLE, - ACTIVITY_TRADE, - ACTIVITY_BCRUSH, - 0xFF -}; - -static const u8 *const sAcceptedActivityIds[] = { - [LINK_GROUP_SINGLE_BATTLE] = gUnknown_845704C, - [LINK_GROUP_DOUBLE_BATTLE] = gUnknown_8457050, - [LINK_GROUP_MULTI_BATTLE] = gUnknown_8457054, - [LINK_GROUP_TRADE] = gUnknown_8457058, - [LINK_GROUP_POKEMON_JUMP] = gUnknown_845705C, - [LINK_GROUP_BERRY_CRUSH] = gUnknown_8457060, - [LINK_GROUP_BERRY_PICKING] = gUnknown_8457064, - [LINK_GROUP_WONDER_CARD] = gUnknown_8457068, - [LINK_GROUP_WONDER_NEWS] = gUnknown_845706C, - [9] = gUnknown_8457070, - [10] = gUnknown_845707C, - [11] = gUnknown_8457080, - [12] = gUnknown_845708C -}; - -static const u8 sLinkGroupToURoomActivity[] = { - [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE, - [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_DBLBATTLE, - [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_MLTBATTLE, - [LINK_GROUP_TRADE] = ACTIVITY_TRADE, - [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_PJUMP, - [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BCRUSH, - [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BPICK, - [LINK_GROUP_WONDER_CARD] = ACTIVITY_WCARD2, - [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WNEWS2 -}; - -static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}"); - -#undef _8456CD8 +#include "data/union_room.h" // These are functions in Emerald but inlined in FireRed -#define IntlConvPartnerUname7(dest, arg1) ({ \ - StringCopy_PlayerName(dest, (arg1).gname_uname.uname); \ - ConvertInternationalString(dest, (arg1).gname_uname.gname.compatibility.language); \ +#define CopyAndTranslatePlayerName(dest, player) ({ \ + StringCopy_PlayerName(dest, (player).rfu.name); \ + ConvertInternationalString(dest, (player).rfu.data.compatibility.language); \ }) -#define IntlConvPartnerUname(dest, arg1) ({ \ - StringCopy(dest, (arg1).gname_uname.uname); \ - ConvertInternationalString(dest, (arg1).gname_uname.gname.compatibility.language); \ +#define CopyAndTranslatePlayerName2(dest, player) ({ \ + StringCopy(dest, (player).rfu.name); \ + ConvertInternationalString(dest, (player).rfu.data.compatibility.language); \ }) #define CopyTrainerCardData(dest, src, _version) ({ \ - (dest) = *((struct TrainerCard * )(src)); \ - (dest).version = _version; \ + (dest) = *((struct TrainerCard * )(src)); \ + (dest).version = _version; \ }) #define GetStringRightAlignXOffset(_fontId, _string, _maxWidth) ({ \ - u16 strWidth = GetStringWidth(_fontId, _string, 0); \ - _maxWidth - strWidth; \ + u16 strWidth = GetStringWidth(_fontId, _string, 0); \ + _maxWidth - strWidth; \ }) -// capacityCode is a 2-nybble code -// Bits 0-3: Capacity -// Bits 4-7: Min required (if 0, must have exactly Capacity players -static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 count) +static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 stringId) { FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); switch (capacityCode << 8) { - case 0x200: - UR_AddTextPrinterParameterized(windowId, 2, gTexts_UR_PlayersNeededOrMode[0][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); + case LINK_GROUP_CAPACITY(0, 2): + PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[0][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; - case 0x400: - UR_AddTextPrinterParameterized(windowId, 2, gTexts_UR_PlayersNeededOrMode[1][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); + case LINK_GROUP_CAPACITY(0, 4): + PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[1][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; - case 0x2500: - UR_AddTextPrinterParameterized(windowId, 2, gTexts_UR_PlayersNeededOrMode[2][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); + case LINK_GROUP_CAPACITY(2, 5): + PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[2][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; - case 0x3500: - UR_AddTextPrinterParameterized(windowId, 2, gTexts_UR_PlayersNeededOrMode[3][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); + case LINK_GROUP_CAPACITY(3, 5): + PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[3][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; } @@ -694,28 +328,33 @@ static void PrintPlayerNameAndIdOnWindow(u8 windowId) u8 text[12]; u8 text2[12]; - UR_AddTextPrinterParameterized(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_2, gSaveBlock2Ptr->playerName, 0, 2, UR_COLOR_DEFAULT); StringCopy(text2, gText_UR_ID); ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); StringAppend(text2, text); - UR_AddTextPrinterParameterized(windowId, 0, text2, 0, 0x10, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_0, text2, 0, 16, UR_COLOR_DEFAULT); } -static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId) +static void GetAwaitingCommunicationText(u8 *dst, u8 caseId) { switch (caseId) { - case ACTIVITY_BATTLE: - case ACTIVITY_DBLBATTLE: - case ACTIVITY_MLTBATTLE: + case ACTIVITY_BATTLE_SINGLE: + case ACTIVITY_BATTLE_DOUBLE: + case ACTIVITY_BATTLE_MULTI: case ACTIVITY_TRADE: - case ACTIVITY_PJUMP: - case ACTIVITY_BCRUSH: - case ACTIVITY_BPICK: - case ACTIVITY_WCARD2: - case ACTIVITY_WNEWS2: - // UB: argument *dst isn't used, instead it always prints to gStringVar4 + case ACTIVITY_POKEMON_JUMP: + case ACTIVITY_BERRY_CRUSH: + case ACTIVITY_BERRY_PICK: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: + // BUG: argument *dst isn't used, instead it always prints to gStringVar4 + // not an issue in practice since Gamefreak never used any other arguments here besides gStringVar4 + #ifndef BUGFIX StringExpandPlaceholders(gStringVar4, gText_UR_AwaitingCommunication); + #else + StringExpandPlaceholders(dst, gText_UR_AwaitingCommunication); + #endif break; } } @@ -723,51 +362,51 @@ static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId) void TryBecomeLinkLeader(void) { u8 taskId; - struct UnkStruct_Leader * dataPtr; + struct WirelessLink_Leader * data; taskId = CreateTask(Task_TryBecomeLinkLeader, 0); - sUnionRoomMain.leader = dataPtr = (void *)(gTasks[taskId].data); - sLeader = dataPtr; + sWirelessLinkMain.leader = data = (void *)(gTasks[taskId].data); + sLeader = data; - dataPtr->state = 0; - dataPtr->textState = 0; - gSpecialVar_Result = 0; + data->state = LL_STATE_INIT; + data->textState = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_TryBecomeLinkLeader(u8 taskId) { u32 id, val; - struct UnkStruct_Leader * data = sUnionRoomMain.leader; + struct WirelessLink_Leader * data = sWirelessLinkMain.leader; switch (data->state) { - case 0: + case LL_STATE_INIT: sPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004]; sPlayerActivityGroupSize = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004] >> 8; SetHostRfuGameData(sPlayerCurrActivity, 0, 0); SetWirelessCommType1(); OpenLink(); - InitializeRfuLinkManager_LinkLeader(sPlayerActivityGroupSize & 0xF); - data->state = 3; + InitializeRfuLinkManager_LinkLeader(GROUP_MAX(sPlayerActivityGroupSize)); + data->state = LL_STATE_INIT2; break; - case 3: - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE); - CopyHostRfuGameDataAndUsername(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); - data->field_0->arr[0].field_18 = 0; - data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[0].field_1A_1 = 0; - data->field_0->arr[0].field_1B = 0; - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + case LL_STATE_INIT2: + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + data->playerListBackup = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + ClearIncomingPlayerList(data->incomingPlayerList->players, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYERS); + CopyHostRfuGameDataAndUsername(&data->playerList->players[0].rfu.data, data->playerList->players[0].rfu.name); + data->playerList->players[0].timeoutCounter = 0; + data->playerList->players[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[0].useRedText = FALSE; + data->playerList->players[0].newPlayerCountdown = 0; + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, 0xFF); data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); data->listWindowId = AddWindow(&sWindowTemplate_List_PossibleGroupMembers); data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode); FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); - UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, gText_UR_BButtonCancel, 8, 2, UR_COLOR_WHT_DKE_LTE); + PrintUnionRoomText(data->bButtonCancelWindowId, FONT_0, gText_UR_BButtonCancel, 8, 2, UR_COLOR_CANCEL); PutWindowTilemap(data->bButtonCancelWindowId); CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX); @@ -782,129 +421,125 @@ static void Task_TryBecomeLinkLeader(u8 taskId) CopyBgTilemapBufferToVram(0); data->playerCount = 1; - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; break; - case 4: - StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]); - if ((sPlayerActivityGroupSize >> 4) != 0) + case LL_STATE_GET_AWAITING_PLAYERS_TEXT: + StringCopy(gStringVar1, sLinkGroupActivityNameTexts[sPlayerCurrActivity]); + if (GROUP_MIN(sPlayerActivityGroupSize) != 0) { - if (data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 && (sPlayerActivityGroupSize & 0xF) != 0) + if (data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 && GROUP_MAX(sPlayerActivityGroupSize) != 0) StringExpandPlaceholders(gStringVar4, gText_UR_AwaitingLinkPressStart); else StringExpandPlaceholders(gStringVar4, gText_UR_AwaitingCommunication); } else { - StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, sPlayerCurrActivity); + GetAwaitingCommunicationText(gStringVar4, sPlayerCurrActivity); } PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount); - data->state = 5; + data->state = LL_STATE_PRINT_AWAITING_PLAYERS; break; - case 5: + case LL_STATE_PRINT_AWAITING_PLAYERS: if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = 6; + data->state = LL_STATE_AWAIT_PLAYERS; break; - case 6: - Leader_SetStateIfMemberListChanged(data, 7, 10); + case LL_STATE_AWAIT_PLAYERS: + Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_LEFT); if (JOY_NEW(B_BUTTON)) { if (data->playerCount == 1) - data->state = 23; - else if ((sPlayerActivityGroupSize & 0xF0) != 0) - data->state = 30; + data->state = LL_STATE_SHUTDOWN_AND_FAIL; + else if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) + data->state = LL_STATE_CANCEL_WITH_MSG; else - data->state = 19; + data->state = LL_STATE_CANCEL_PROMPT; } - if ((sPlayerActivityGroupSize >> 4) != 0 - && data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 - && (sPlayerActivityGroupSize & 0xF) != 0 + if (GROUP_MIN(sPlayerActivityGroupSize) != 0 + && data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 + && GROUP_MAX(sPlayerActivityGroupSize) != 0 && IsRfuCommunicatingWithAllChildren() && JOY_NEW(START_BUTTON)) { - data->state = 15; + data->state = LL_STATE_MEMBERS_OK_PROMPT; LinkRfu_StopManagerAndFinalizeSlots(); } - if (data->state == 6 && RfuTryDisconnectLeavingChildren()) + if (data->state == LL_STATE_AWAIT_PLAYERS && RfuTryDisconnectLeavingChildren()) { - data->state = 9; + // At least 1 group member has left or is trying to leave + data->state = LL_STATE_WAIT_DISCONNECT_CHILD; } break; - case 9: + case LL_STATE_WAIT_DISCONNECT_CHILD: + // Resume after ensuring all members trying to leave have left if (!RfuTryDisconnectLeavingChildren()) { - data->state = 6; - data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); + data->state = LL_STATE_AWAIT_PLAYERS; + data->playerCount = LeaderPrunePlayerList(data->playerList); } break; - case 10: - id = ((sPlayerCurrActivity & 0xF) == 2) ? 1 : 0; + case LL_STATE_MEMBER_LEFT: + id = (GROUP_MAX(sPlayerCurrActivity) == 2) ? 1 : 0; if (PrintOnTextbox(&data->textState, gTexts_UR_PlayerUnavailable[id])) { - data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); + data->playerCount = LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } break; - case 29: - // Other player cancelled. - id = ((sPlayerActivityGroupSize & 0xF) == 2) ? 0 : 1; + case LL_STATE_MEMBER_DISCONNECTED: + id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1; if (PrintOnTextbox(&data->textState, gTexts_UR_PlayerUnavailable[id])) - { - data->state = 21; - } + data->state = LL_STATE_SHUTDOWN_AND_RETRY; break; - case 7: + case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT: if (PrintOnTextbox(&data->textState, gStringVar4)) - { - data->state = 11; - } + data->state = LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT; break; - case 11: + case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT: switch (UnionRoomHandleYesNo(&data->textState, HasTrainerLeftPartnersList( - ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), - data->field_0->arr[data->playerCount].gname_uname.uname))) + ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), + data->playerList->players[data->playerCount].rfu.name))) { - case 0: + case 0: // YES LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - data->field_19 = 5; - SendRfuStatusToPartner(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); - data->state = 12; + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); + data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST; break; - case 1: - case -1: - data->field_19 = 6; - SendRfuStatusToPartner(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); - data->state = 12; + case 1: // NO + case MENU_B_PRESSED: + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); + data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST; break; case -3: - data->state = 9; + data->state = LL_STATE_WAIT_DISCONNECT_CHILD; break; } break; - case 12: - val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); - if (val == 1) + case LL_STATE_UPDATE_AFTER_JOIN_REQUEST: + val = WaitSendRfuStatusToPartner(ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); + if (val == 1) // Send complete { - // Xfer complete - if (data->field_19 == 5) + if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { // Sent "OK" - data->field_0->arr[data->playerCount].field_1B = 0; + data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); data->playerCount++; - if (data->playerCount == (sPlayerActivityGroupSize & 0xF)) + if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize)) { - if ((sPlayerActivityGroupSize & 0xF0) != 0 || data->playerCount == 4) + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0 || data->playerCount == RFU_CHILD_MAX) { - data->state = 15; + data->state = LL_STATE_MEMBERS_OK_PROMPT; } else { - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]); + CopyAndTranslatePlayerName(gStringVar1, data->playerList->players[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, gText_UR_AnOKWasSentToPlayer); - data->state = 13; + data->state = LL_STATE_ACCEPTED_FINAL_MEMBER; } LinkRfu_StopManagerAndFinalizeSlots(); @@ -912,124 +547,119 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } else { - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } } - else + else // Member disconnected { - // Sent "no" - RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId)); - data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - UnionRoomLeaderField0CompactionAndCount(data->field_0); + RequestDisconnectSlotByTrainerNameAndId(data->playerList->players[data->playerCount].rfu.name, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId)); + data->playerList->players[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } - data->field_19 = 0; + data->joinRequestAnswer = 0; } else if (val == 2) { // Disconnect RfuSetStatus(RFU_STATUS_OK, 0); - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } break; - case 13: + case LL_STATE_ACCEPTED_FINAL_MEMBER: if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = 14; + data->state = LL_STATE_WAIT_AND_CONFIRM_MEMBERS; break; - case 14: + case LL_STATE_WAIT_AND_CONFIRM_MEMBERS: if (++data->delayTimerAfterOk > 120) - data->state = 17; + data->state = LL_STATE_CONFIRMED_MEMBERS; break; - case 15: + case LL_STATE_MEMBERS_OK_PROMPT: if (PrintOnTextbox(&data->textState, gText_UR_AreTheseMembersOK)) - data->state = 16; + data->state = LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT; break; - case 16: + case LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT: switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { - case 0: - // Yes - data->state = 17; + case 0: // YES + data->state = LL_STATE_CONFIRMED_MEMBERS; break; - case 1: - case -1: - // No - if ((sPlayerActivityGroupSize & 0xF0) != 0) - data->state = 30; + case 1: // NO + case MENU_B_PRESSED: + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) + data->state = LL_STATE_CANCEL_WITH_MSG; else - data->state = 19; + data->state = LL_STATE_CANCEL_PROMPT; break; } break; - case 19: + case LL_STATE_CANCEL_PROMPT: if (PrintOnTextbox(&data->textState, gText_UR_CancelModeWithTheseMembers)) - data->state = 20; + data->state = LL_STATE_CANCEL_PROMPT_HANDLE_INPUT; break; - case 20: + case LL_STATE_CANCEL_PROMPT_HANDLE_INPUT: switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { - case 0: - data->state = 23; + case 0: // YES + data->state = LL_STATE_SHUTDOWN_AND_FAIL; break; - case 1: - case -1: - if ((sPlayerActivityGroupSize & 0xF0) != 0) - data->state = 15; - else if (data->playerCount == (sPlayerActivityGroupSize & 0xF)) - data->state = 15; + case 1: // NO + case MENU_B_PRESSED: + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) + data->state = LL_STATE_MEMBERS_OK_PROMPT; + else if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize)) + data->state = LL_STATE_MEMBERS_OK_PROMPT; else - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; break; } break; - case 17: - // Go to start - // Final membership check - if (!Leader_SetStateIfMemberListChanged(data, 7, 23)) - data->state = 18; + case LL_STATE_CONFIRMED_MEMBERS: + if (!Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_SHUTDOWN_AND_FAIL)) + data->state = LL_STATE_FINAL_MEMBER_CHECK; break; - case 18: + case LL_STATE_FINAL_MEMBER_CHECK: if (LmanAcceptSlotFlagIsNotZero()) { if (WaitRfuState(FALSE)) { - data->state = 26; + data->state = LL_STATE_TRY_START_ACTIVITY; } } else { - data->state = 29; + data->state = LL_STATE_MEMBER_DISCONNECTED; data->textState = 0; } break; - case 30: + case LL_STATE_CANCEL_WITH_MSG: if (PrintOnTextbox(&data->textState, gText_UR_ModeWithTheseMembersWillBeCanceled)) - data->state = 23; + data->state = LL_STATE_SHUTDOWN_AND_FAIL; break; - case 21: - case 23: + case LL_STATE_SHUTDOWN_AND_RETRY: + case LL_STATE_SHUTDOWN_AND_FAIL: // An error occurred. Please start over from the beginning. DestroyWirelessStatusIndicatorSprite(); LinkRfu_Shutdown(); Leader_DestroyResources(data); - data->state++; + data->state++; // LL_STATE_RETRY or LL_STATE_FAILED break; - case 24: + case LL_STATE_FAILED: ScriptContext_Enable(); DestroyTask(taskId); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; break; - case 22: + case LL_STATE_RETRY: ScriptContext_Enable(); DestroyTask(taskId); - gSpecialVar_Result = 8; + gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; break; - case 26: + case LL_STATE_TRY_START_ACTIVITY: if (RfuHasErrored()) { - data->state = 29; + data->state = LL_STATE_MEMBER_DISCONNECTED; } else { @@ -1045,7 +675,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } } -static void Leader_DestroyResources(struct UnkStruct_Leader * data) +static void Leader_DestroyResources(struct WirelessLink_Leader * data) { ClearWindowTilemap(data->nPlayerModeWindowId); ClearStdWindowAndFrame(data->nPlayerModeWindowId, FALSE); @@ -1058,28 +688,28 @@ static void Leader_DestroyResources(struct UnkStruct_Leader * data) RemoveWindow(data->bButtonCancelWindowId); DestroyTask(data->listenTaskId); - Free(data->field_8); - Free(data->field_0); - Free(data->field_4); + Free(data->playerListBackup); + Free(data->playerList); + Free(data->incomingPlayerList); } static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 activity) { switch (activity) { - case ACTIVITY_BATTLE: - case ACTIVITY_DBLBATTLE: + case ACTIVITY_BATTLE_SINGLE: + case ACTIVITY_BATTLE_DOUBLE: case ACTIVITY_TRADE: StringExpandPlaceholders(dst, gText_UR_PlayerContactedYouForXAccept); break; - case ACTIVITY_WCARD2: - case ACTIVITY_WNEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: StringExpandPlaceholders(dst, gText_UR_PlayerContactedYouShareX); break; - case ACTIVITY_MLTBATTLE: - case ACTIVITY_PJUMP: - case ACTIVITY_BCRUSH: - case ACTIVITY_BPICK: + case ACTIVITY_BATTLE_MULTI: + case ACTIVITY_POKEMON_JUMP: + case ACTIVITY_BERRY_CRUSH: + case ACTIVITY_BERRY_PICK: StringExpandPlaceholders(dst, gText_UR_PlayerContactedYouAddToMembers); break; } @@ -1089,7 +719,7 @@ static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 activity) { switch (activity) { - case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: case ACTIVITY_TRADE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gText_UR_OfferDeclined1); break; @@ -1104,17 +734,17 @@ static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 activity) { switch (activity) { - case ACTIVITY_BATTLE: - case ACTIVITY_DBLBATTLE: + case ACTIVITY_BATTLE_SINGLE: + case ACTIVITY_BATTLE_DOUBLE: case ACTIVITY_TRADE: - case ACTIVITY_WCARD2: - case ACTIVITY_WNEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: StringExpandPlaceholders(dst, gText_UR_AwaitingPlayersResponse); break; - case ACTIVITY_MLTBATTLE: - case ACTIVITY_PJUMP: - case ACTIVITY_BCRUSH: - case ACTIVITY_BPICK: + case ACTIVITY_BATTLE_MULTI: + case ACTIVITY_POKEMON_JUMP: + case ACTIVITY_BERRY_CRUSH: + case ACTIVITY_BERRY_PICK: StringExpandPlaceholders(dst, gText_UR_PlayerHasBeenAskedToRegisterYouPleaseWait); break; } @@ -1124,96 +754,98 @@ static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId) { switch (caseId) { - case ACTIVITY_BATTLE: - case ACTIVITY_DBLBATTLE: + case ACTIVITY_BATTLE_SINGLE: + case ACTIVITY_BATTLE_DOUBLE: case ACTIVITY_TRADE: - case ACTIVITY_WCARD2: - case ACTIVITY_WNEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: StringExpandPlaceholders(dst, gText_UR_PlayerSentBackOK); break; - case ACTIVITY_MLTBATTLE: - case ACTIVITY_PJUMP: - case ACTIVITY_BCRUSH: - case ACTIVITY_BPICK: + case ACTIVITY_BATTLE_MULTI: + case ACTIVITY_POKEMON_JUMP: + case ACTIVITY_BERRY_CRUSH: + case ACTIVITY_BERRY_PICK: StringExpandPlaceholders(dst, gText_UR_PlayerOKdRegistration); break; } } -static bool8 Leader_SetStateIfMemberListChanged(struct UnkStruct_Leader * data, u32 state1, u32 state2) +static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader * data, u32 joinedState, u32 droppedState) { - switch (LeaderUpdateGroupMembership(data->field_0)) + switch (LeaderUpdateGroupMembership(data->playerList)) { case UNION_ROOM_SPAWN_IN: PlaySE(SE_PC_LOGIN); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->playerCount]); + CopyAndTranslatePlayerName(gStringVar2, data->playerList->players[data->playerCount]); Leader_GetAcceptNewMemberPrompt(gStringVar4, sPlayerCurrActivity); - data->state = state1; + data->state = joinedState; break; case UNION_ROOM_SPAWN_OUT: RfuSetStatus(RFU_STATUS_OK, 0); RedrawListMenu(data->listTaskId); - data->state = state2; + data->state = droppedState; return TRUE; } return FALSE; } -static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 itemId, u8 y) +static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 id, u8 y) { - struct UnkStruct_Leader * data = sUnionRoomMain.leader; - u8 var = 0; + struct WirelessLink_Leader * data = sWirelessLinkMain.leader; + u8 colorIdx = UR_COLOR_DEFAULT; - switch (data->field_0->arr[itemId].groupScheduledAnim) + switch (data->playerList->players[id].groupScheduledAnim) { case UNION_ROOM_SPAWN_IN: - if (data->field_0->arr[itemId].field_1B != 0) - var = UR_COLOR_GRN_WHT_LTG; + if (data->playerList->players[id].newPlayerCountdown != 0) + colorIdx = UR_COLOR_GREEN; break; case UNION_ROOM_SPAWN_OUT: - var = UR_COLOR_RED_WHT_LTR; + colorIdx = UR_COLOR_RED; break; } - PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[itemId], var, itemId); + PrintGroupCandidateOnWindow(windowId, 0, y, &data->playerList->players[id], colorIdx, id); } -static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * arg0) +static u8 LeaderUpdateGroupMembership(struct RfuPlayerList * list) { - struct UnkStruct_Leader * data = sUnionRoomMain.leader; + struct WirelessLink_Leader * data = sWirelessLinkMain.leader; u8 ret = UNION_ROOM_SPAWN_NONE; u8 i; s32 id; - for (i = 1; i < UROOM_MAX_PARTY_SIZE; i++) + for (i = 1; i < MAX_RFU_PLAYERS; i++) { - u16 var = data->field_0->arr[i].groupScheduledAnim; + u16 var = data->playerList->players[i].groupScheduledAnim; if (var == UNION_ROOM_SPAWN_IN) { - id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr); + id = GetNewIncomingPlayerId(&data->playerList->players[i], data->incomingPlayerList->players); if (id != 0xFF) { - data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; - data->field_0->arr[i].field_18 = 1; + // New incoming player + data->playerList->players[i].rfu = data->incomingPlayerList->players[id].rfu; + data->playerList->players[i].timeoutCounter = 1; } else { - data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + // No new incoming player + data->playerList->players[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; ret = UNION_ROOM_SPAWN_OUT; } } } for (id = 0; id < RFU_CHILD_MAX; id++) - Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], UROOM_MAX_PARTY_SIZE); + TryAddIncomingPlayerToList(data->playerList->players, &data->incomingPlayerList->players[id], MAX_RFU_PLAYERS); if (ret != UNION_ROOM_SPAWN_OUT) { - for (id = 0; id < UROOM_MAX_PARTY_SIZE; id++) + for (id = 0; id < MAX_RFU_PLAYERS; id++) { - if (data->field_0->arr[id].field_1B != 0) + if (data->playerList->players[id].newPlayerCountdown != 0) ret = UNION_ROOM_SPAWN_IN; } } @@ -1221,95 +853,95 @@ static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * arg0) return ret; } -static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * arg0) +static u8 LeaderPrunePlayerList(struct RfuPlayerList * list) { - struct UnkStruct_Leader * data = sUnionRoomMain.leader; + struct WirelessLink_Leader * data = sWirelessLinkMain.leader; u8 copiedCount; s32 i; - u8 ret; + u8 playerCount; - for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++) - data->field_8->arr[i] = data->field_0->arr[i]; + for (i = 0; i < MAX_RFU_PLAYERS; i++) + data->playerListBackup->players[i] = data->playerList->players[i]; copiedCount = 0; - for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (data->field_8->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerListBackup->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - data->field_0->arr[copiedCount] = data->field_8->arr[i]; + data->playerList->players[copiedCount] = data->playerListBackup->players[i]; copiedCount++; } } - ret = copiedCount; - for (; copiedCount < UROOM_MAX_PARTY_SIZE; copiedCount++) + playerCount = copiedCount; + for (; copiedCount < MAX_RFU_PLAYERS; copiedCount++) { - data->field_0->arr[copiedCount].gname_uname = sUnionGnameUnamePair_Dummy; - data->field_0->arr[copiedCount].field_18 = 0; - data->field_0->arr[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - data->field_0->arr[copiedCount].field_1A_1 = FALSE; - data->field_0->arr[copiedCount].field_1B = 0; + data->playerList->players[copiedCount].rfu = sRfuPlayerData_Dummy; + data->playerList->players[copiedCount].timeoutCounter = 0; + data->playerList->players[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + data->playerList->players[copiedCount].useRedText = FALSE; + data->playerList->players[copiedCount].newPlayerCountdown = 0; } - for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) + if (data->playerList->players[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) continue; - if (data->field_0->arr[i].field_1B != 0x40) + if (data->playerList->players[i].newPlayerCountdown != 64) continue; - ret = i; + playerCount = i; break; } - return ret; + return playerCount; } void TryJoinLinkGroup(void) { u8 taskId; - struct UnkStruct_Group * dataPtr; + struct WirelessLink_Group * data; taskId = CreateTask(Task_TryJoinLinkGroup, 0); - sUnionRoomMain.group = dataPtr = (void *)(gTasks[taskId].data); - sGroup = dataPtr; + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); + sGroup = data; - dataPtr->state = 0; - dataPtr->textState = 0; - gSpecialVar_Result = 0; + data->state = LG_STATE_INIT; + data->textState = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_TryJoinLinkGroup(u8 taskId) { s32 id; - struct UnkStruct_Group * data = sUnionRoomMain.group; + struct WirelessLink_Group * data = sWirelessLinkMain.group; switch (data->state) { - case 0: + case LG_STATE_INIT: SetHostRfuGameData(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, 0); sPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004]; SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); - data->state = 1; + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); + data->state = LG_STATE_CHOOSE_LEADER_MSG; break; - case 1: + case LG_STATE_CHOOSE_LEADER_MSG: if (PrintOnTextbox(&data->textState, gTexts_UR_ChooseTrainer[gSpecialVar_0x8004])) - data->state = 2; + data->state = LG_STATE_INIT_WINDOWS; break; - case 2: - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, gSpecialVar_0x8004); + case LG_STATE_INIT_WINDOWS: + ClearIncomingPlayerList(data->incomingPlayerList->players, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, gSpecialVar_0x8004); data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); - data->listWindowId = AddWindow(&sWindowTemplate_MysteryGiftList); - data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_MysteryGiftPlayerNameAndId); + data->listWindowId = AddWindow(&sWindowTemplate_GroupList); + data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_PlayerNameAndId); FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); - UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, gText_UR_ChooseJoinCancel, 8, 2, UR_COLOR_WHT_DKE_LTE); + PrintUnionRoomText(data->bButtonCancelWindowId, FONT_0, gText_UR_ChooseJoinCancel, 8, 2, UR_COLOR_CANCEL); PutWindowTilemap(data->bButtonCancelWindowId); CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX); @@ -1325,9 +957,9 @@ static void Task_TryJoinLinkGroup(u8 taskId) CopyBgTilemapBufferToVram(0); data->leaderId = 0; - data->state = 3; + data->state = LG_STATE_CHOOSE_LEADER_HANDLE_INPUT; break; - case 3: + case LG_STATE_CHOOSE_LEADER_HANDLE_INPUT: id = GetNewLeaderCandidate(); switch (id) { @@ -1337,26 +969,26 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != -1) + if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN) { // this unused variable along with the assignment is needed to match - u32 unusedVar; - unusedVar = data->field_0->arr[id].gname_uname.gname.activity; + u32 activity = data->playerList->players[id].rfu.data.activity; - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.startedActivity) + if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { - u32 var = IsTryingToTradeWithHoennTooSoon(data, id); - if (var == 0) + u32 readyStatus = IsTryingToTradeAcrossVersionTooSoon(data, id); + if (readyStatus == UR_TRADE_READY) { + // Trading is allowed, or not trading at all AskToJoinRfuGroup(data, id); - data->state = 5; + data->state = LG_STATE_ASK_JOIN_GROUP; PlaySE(SE_POKENAV_ON); } else { // Postgame flags not both set - StringCopy(gStringVar4, gTexts_UR_CantTransmitToTrainer[var - 1]); - data->state = 18; + StringCopy(gStringVar4, gTexts_UR_CantTransmitToTrainer[readyStatus - 1]); + data->state = LG_STATE_TRADE_NOT_READY; PlaySE(SE_POKENAV_ON); } } @@ -1367,7 +999,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) } else if (JOY_NEW(B_BUTTON)) { - data->state = 10; + data->state = LG_STATE_CANCEL_CHOOSE_LEADER; } break; default: @@ -1375,59 +1007,58 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; } break; - case 5: + case LG_STATE_ASK_JOIN_GROUP: GetYouAskedToJoinGroupPleaseWaitMessage(gStringVar4, sPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]); - data->state = 6; + CopyAndTranslatePlayerName(gStringVar1, data->playerList->players[data->leaderId]); + data->state = LG_STATE_MAIN; } break; - case 6: + case LG_STATE_MAIN: if (gReceivedRemoteLinkPlayers) { - sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + sPlayerCurrActivity = data->playerList->players[data->leaderId].rfu.data.activity; RfuSetStatus(RFU_STATUS_OK, 0); switch (sPlayerCurrActivity) { - case ACTIVITY_BATTLE: - case ACTIVITY_DBLBATTLE: - case ACTIVITY_MLTBATTLE: + case ACTIVITY_BATTLE_SINGLE: + case ACTIVITY_BATTLE_DOUBLE: + case ACTIVITY_BATTLE_MULTI: case ACTIVITY_TRADE: case ACTIVITY_CHAT: - case ACTIVITY_PJUMP: - case ACTIVITY_BCRUSH: - case ACTIVITY_BPICK: - case ACTIVITY_SPINTRADE: - case ACTIVITY_ITEMTRADE: - case ACTIVITY_WCARD2: - case ACTIVITY_WNEWS2: - data->state = 20; + case ACTIVITY_POKEMON_JUMP: + case ACTIVITY_BERRY_CRUSH: + case ACTIVITY_BERRY_PICK: + case ACTIVITY_SPIN_TRADE: + case ACTIVITY_ITEM_TRADE: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: + data->state = LG_STATE_READY_START_ACTIVITY; break; } } switch (RfuGetStatus()) { - case 1: - data->state = 12; + case RFU_STATUS_FATAL_ERROR: + data->state = LG_STATE_RFU_ERROR; break; - case 2: - case 6: - case 9: - data->state = 14; + case RFU_STATUS_CONNECTION_ERROR: + case RFU_STATUS_JOIN_GROUP_NO: + case RFU_STATUS_LEAVE_GROUP: + data->state = LG_STATE_DISCONNECTED; break; - case 5: + case RFU_STATUS_JOIN_GROUP_OK: GetGroupLeaderSentAnOKMessage(gStringVar4, sPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { RfuSetStatus(RFU_STATUS_WAIT_ACK_JOIN_GROUP, 0); - StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]); + StringCopy(gStringVar1, sLinkGroupActivityNameTexts[sPlayerCurrActivity]); StringExpandPlaceholders(gStringVar4, gText_UR_AwaitingOtherMembers); } break; - case 7: - // Wait 4 seconds + case RFU_STATUS_WAIT_ACK_JOIN_GROUP: if (data->delayBeforePrint > 240) { if (PrintOnTextbox(&data->textState, gStringVar4)) @@ -1443,41 +1074,41 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; } - if (!RfuGetStatus() && JOY_NEW(B_BUTTON)) - data->state = 7; + if (RfuGetStatus() == RFU_STATUS_OK && JOY_NEW(B_BUTTON)) + data->state = LG_STATE_ASK_LEAVE_GROUP; break; - case 7: + case LG_STATE_ASK_LEAVE_GROUP: if (PrintOnTextbox(&data->textState, gText_UR_QuitBeingMember)) - data->state = 8; + data->state = LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT; break; - case 8: + case LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT: switch (UnionRoomHandleYesNo(&data->textState, RfuGetStatus())) { - case 0: + case 0: // YES SendLeaveGroupNotice(); - data->state = 9; + data->state = LG_STATE_WAIT_LEAVE_GROUP; RedrawListMenu(data->listTaskId); break; - case 1: - case -1: - data->state = 5; + case 1: // NO + case MENU_B_PRESSED: + data->state = LG_STATE_ASK_JOIN_GROUP; RedrawListMenu(data->listTaskId); break; case -3: - data->state = 6; + data->state = LG_STATE_MAIN; RedrawListMenu(data->listTaskId); break; } break; - case 9: + case LG_STATE_WAIT_LEAVE_GROUP: if (RfuGetStatus()) - data->state = 6; + data->state = LG_STATE_MAIN; break; - case 10: - case 12: - case 14: - case 18: - case 20: + case LG_STATE_CANCEL_CHOOSE_LEADER: // next: LG_STATE_CANCELED + case LG_STATE_RFU_ERROR: // next: LG_STATE_RFU_ERROR_SHUTDOWN + case LG_STATE_DISCONNECTED: // next: LG_STATE_RETRY_CONNECTION + case LG_STATE_TRADE_NOT_READY: // next: LG_STATE_TRADE_NOT_READY_RETRY + case LG_STATE_READY_START_ACTIVITY: // next: LG_STATE_START_ACTIVITY ClearWindowTilemap(data->playerNameAndIdWindowId); ClearStdWindowAndFrame(data->playerNameAndIdWindowId, FALSE); DestroyListMenuTask(data->listTaskId, 0, 0); @@ -1488,116 +1119,121 @@ static void Task_TryJoinLinkGroup(u8 taskId) RemoveWindow(data->listWindowId); RemoveWindow(data->bButtonCancelWindowId); DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; - case 13: + case LG_STATE_RFU_ERROR_SHUTDOWN: DestroyWirelessStatusIndicatorSprite(); if (PrintOnTextbox(&data->textState, gTexts_UR_PlayerDisconnected[RfuGetStatus()])) { - gSpecialVar_Result = 6; - data->state = 23; + gSpecialVar_Result = LINKUP_CONNECTION_ERROR; + data->state = LG_STATE_SHUTDOWN; } break; - case 11: + case LG_STATE_CANCELED: DestroyWirelessStatusIndicatorSprite(); - gSpecialVar_Result = 5; - data->state = 23; + gSpecialVar_Result = LINKUP_FAILED; + data->state = LG_STATE_SHUTDOWN; break; - case 15: + case LG_STATE_RETRY_CONNECTION: + // Failure from disconnection + // Happens if player or required member(s) leave group + // or if player is rejected from joining group DestroyWirelessStatusIndicatorSprite(); if (PrintOnTextbox(&data->textState, gTexts_UR_PlayerDisconnected[RfuGetStatus()])) { - gSpecialVar_Result = 8; - data->state = 23; + gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; + data->state = LG_STATE_SHUTDOWN; } break; - case 19: + case LG_STATE_TRADE_NOT_READY_RETRY: if (PrintOnTextbox(&data->textState, gStringVar4)) { - gSpecialVar_Result = 8; - data->state = 23; + gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; + data->state = LG_STATE_SHUTDOWN; } break; - case 23: + case LG_STATE_SHUTDOWN: DestroyTask(taskId); - JoinGroup_BlankBg0AndEnableScriptContexts(); + JoinGroup_EnableScriptContexts(); LinkRfu_Shutdown(); break; - case 21: + case LG_STATE_START_ACTIVITY: CreateTask_RunScriptAndFadeToActivity(); DestroyTask(taskId); break; } } -static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * arg0, s32 id) +static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group * data, s32 id) { - struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id]; + struct RfuPlayer * partner = &data->playerList->players[id]; - if (sPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.compatibility.version != VERSION_FIRE_RED && structPtr->gname_uname.gname.compatibility.version != VERSION_LEAF_GREEN) + if (sPlayerCurrActivity == ACTIVITY_TRADE + && partner->rfu.data.compatibility.version != VERSION_FIRE_RED + && partner->rfu.data.compatibility.version != VERSION_LEAF_GREEN) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) - return 1; - else if (structPtr->gname_uname.gname.compatibility.isChampion) - return 0; + return UR_TRADE_PLAYER_NOT_READY; + else if (partner->rfu.data.compatibility.isChampion) + return UR_TRADE_READY; } else { - return 0; + return UR_TRADE_READY; } - return 2; + return UR_TRADE_PARTNER_NOT_READY; } -static void AskToJoinRfuGroup(struct UnkStruct_Group * data, s32 id) +static void AskToJoinRfuGroup(struct WirelessLink_Group * data, s32 id) { data->leaderId = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName(gStringVar1, data->playerList->players[data->leaderId]); UpdateGameData_SetActivity(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE); - CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.compatibility.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->playerList->players[data->leaderId].rfu.name, ReadAsU16(data->playerList->players[data->leaderId].rfu.data.compatibility.playerTrainerId)); } u8 CreateTask_ListenToWireless(void) { u8 taskId; - struct UnkStruct_Group * dataPtr; + struct WirelessLink_Group * data; taskId = CreateTask(Task_ListenToWireless, 0); - sUnionRoomMain.group = dataPtr = (void *)(gTasks[taskId].data); + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); - dataPtr->state = 0; - dataPtr->textState = 0; + data->state = 0; + data->textState = 0; - sGroup = dataPtr; + sGroup = data; return taskId; } static void Task_ListenToWireless(u8 taskId) { - struct UnkStruct_Group * data = sUnionRoomMain.group; + struct WirelessLink_Group * data = sWirelessLinkMain.group; switch (data->state) { case 0: - SetHostRfuGameData(0, 0, 0); + SetHostRfuGameData(ACTIVITY_NONE, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); RfuSetIgnoreError(TRUE); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = 2; break; case 2: - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + ClearIncomingPlayerList(data->incomingPlayerList->players, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, 0xFF); data->leaderId = 0; data->state = 3; break; @@ -1609,8 +1245,8 @@ static void Task_ListenToWireless(u8 taskId) break; case 10: DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); LinkRfu_Shutdown(); data->state++; break; @@ -1626,11 +1262,11 @@ static bool32 IsPartnerActivityAcceptable(u32 activity, u32 group) if (group == 0xFF) return TRUE; - #ifndef UBFIX - if (group <= NELEMS(sAcceptedActivityIds)) // UB: <= may access data outside the array - #else - if (group < NELEMS(sAcceptedActivityIds)) - #endif +#ifdef UBFIX + if (group < ARRAY_COUNT(sAcceptedActivityIds)) +#else + if (group <= ARRAY_COUNT(sAcceptedActivityIds)) // UB: <= may access data outside the array +#endif { const u8 *bytes = sAcceptedActivityIds[group]; @@ -1645,78 +1281,78 @@ static bool32 IsPartnerActivityAcceptable(u32 activity, u32 group) return FALSE; } -static u8 URoomGroupListGetTextColor(struct UnkStruct_Group * data, u32 id) +static u8 GetGroupListTextColor(struct WirelessLink_Group * data, u32 id) { - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (data->field_0->arr[id].gname_uname.gname.startedActivity) - return UR_COLOR_WHT_WHT_LTE; - else if (data->field_0->arr[id].field_1A_1) - return UR_COLOR_RED_WHT_LTR; - else if (data->field_0->arr[id].field_1B != 0) - return UR_COLOR_GRN_WHT_LTG; + if (data->playerList->players[id].rfu.data.startedActivity) + return UR_COLOR_WHITE; + else if (data->playerList->players[id].useRedText) + return UR_COLOR_RED; + else if (data->playerList->players[id].newPlayerCountdown != 0) + return UR_COLOR_GREEN; } - return UR_COLOR_DKE_WHT_LTE; + return UR_COLOR_DEFAULT; } -static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 itemId, u8 y) +static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 id, u8 y) { - struct UnkStruct_Group * data = sUnionRoomMain.group; - u8 color_idx = URoomGroupListGetTextColor(data, itemId); + struct WirelessLink_Group * data = sWirelessLinkMain.group; + u8 colorId = GetGroupListTextColor(data, id); - PrintUnionRoomGroupOnWindow(windowId, 8, y, &data->field_0->arr[itemId], color_idx, itemId); + PrintGroupMemberOnWindow(windowId, 8, y, &data->playerList->players[id], colorId, id); } static u8 GetNewLeaderCandidate(void) { - struct UnkStruct_Group * data = sUnionRoomMain.group; + struct WirelessLink_Group * data = sWirelessLinkMain.group; u8 ret = 0; u8 i; s32 id; - for (i = 0; i < 16; i++) + for (i = 0; i < MAX_RFU_PLAYER_LIST_SIZE; i++) { - if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) + if (data->playerList->players[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) { - id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr); + id = GetNewIncomingPlayerId(&data->playerList->players[i], data->incomingPlayerList->players); if (id != 0xFF) { - if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[i].gname_uname, &data->field_4->arr[id].gname_uname)) + if (ArePlayerDataDifferent(&data->playerList->players[i].rfu, &data->incomingPlayerList->players[id].rfu)) { - data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; - data->field_0->arr[i].field_1B = 64; + data->playerList->players[i].rfu = data->incomingPlayerList->players[id].rfu; + data->playerList->players[i].newPlayerCountdown = 64; ret = 1; } else { - if (data->field_0->arr[i].field_1B != 0) + if (data->playerList->players[i].newPlayerCountdown != 0) { - data->field_0->arr[i].field_1B--; - if (data->field_0->arr[i].field_1B == 0) + data->playerList->players[i].newPlayerCountdown--; + if (data->playerList->players[i].newPlayerCountdown == 0) ret = 2; } } } else { - data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[i].field_1B = 64; + data->playerList->players[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[i].newPlayerCountdown = 64; ret = 1; } - data->field_0->arr[i].field_18 = 0; + data->playerList->players[i].timeoutCounter = 0; } else { - if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) + if (data->playerList->players[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[i].field_18++; - if (data->field_0->arr[i].field_18 >= 300) + data->playerList->players[i].timeoutCounter++; + if (data->playerList->players[i].timeoutCounter >= 300) { - data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + data->playerList->players[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; ret = 2; } } @@ -1726,24 +1362,22 @@ static u8 GetNewLeaderCandidate(void) for (id = 0; id < RFU_CHILD_MAX; id++) { - if (Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF) + if (TryAddIncomingPlayerToList(data->playerList->players, &data->incomingPlayerList->players[id], MAX_RFU_PLAYER_LIST_SIZE) != 0xFF) ret = 1; } return ret; } -static void Task_CallCB2ReturnFromLinkTrade(u8 taskId) +static void Task_CreateTradeMenu(u8 taskId) { - CB2_ReturnFromLinkTrade(); + CB2_StartCreateTradeMenu(); DestroyTask(taskId); } -u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void) +u8 CreateTask_CreateTradeMenu(void) { - u8 taskId = CreateTask(Task_CallCB2ReturnFromLinkTrade, 0); - - return taskId; + return CreateTask(Task_CreateTradeMenu, 0); } static void Task_StartUnionRoomTrade(u8 taskId) @@ -1778,7 +1412,7 @@ static void Task_StartUnionRoomTrade(u8 taskId) gSelectedTradeMonPositions[TRADE_PLAYER] = monId; gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; gMain.savedCallback = CB2_ReturnToField; - SetMainCallback2(CB2_InitTradeAnim_LinkTrade); + SetMainCallback2(CB2_LinkTrade); ResetUnionRoomTrade(&sUnionRoomTrade); DestroyTask(taskId); } @@ -1804,17 +1438,17 @@ 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) { recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1]; - MEventHandleReceivedWonderCard(recvBuff[sizeof(struct TrainerCard) / 2]); + MysteryGift_TryEnableStatsByFlagId(recvBuff[sizeof(struct TrainerCard) / 2]); } else { - ResetReceivedWonderCardFlag(); + MysteryGift_DisableStats(); } ResetBlockReceivedFlags(); @@ -1857,22 +1491,22 @@ void StartUnionRoomBattle(u16 battleFlags) PlayBattleBGM(); } -static void SetCableClubStateAndWarpCurrentMap(u16 linkService, u16 x, u16 y) +static void WarpForWirelessMinigame(u16 linkService, u16 x, u16 y) { VarSet(VAR_CABLE_CLUB_STATE, linkService); - SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); - SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); + SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x, y); + SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x, y); WarpIntoMap(); } -static void SetCableClubStateAndWarpToNewMap(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) +static void WarpForCableClubActivity(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) { gSpecialVar_0x8004 = linkService; VarSet(VAR_CABLE_CLUB_STATE, linkService); gFieldLinkPlayerCount = GetLinkPlayerCount(); gLocalLinkPlayerId = GetMultiplayerId(); SetCableClubWarp(); - SetWarpDestination(mapGroup, mapNum, -1, x, y); + SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x, y); WarpIntoMap(); } @@ -1907,61 +1541,61 @@ static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard) static void Task_StartActivity(u8 taskId) { - ResetReceivedWonderCardFlag(); + MysteryGift_DisableStats(); switch (sPlayerCurrActivity) { - case ACTIVITY_BATTLE: - case ACTIVITY_DBLBATTLE: - case ACTIVITY_MLTBATTLE: + case ACTIVITY_BATTLE_SINGLE: + case ACTIVITY_BATTLE_DOUBLE: + case ACTIVITY_BATTLE_MULTI: case ACTIVITY_TRADE: - case ACTIVITY_PJUMP: - case ACTIVITY_BCRUSH: - case ACTIVITY_BPICK: - case ACTIVITY_SPINTRADE: - case ACTIVITY_ITEMTRADE: + case ACTIVITY_POKEMON_JUMP: + case ACTIVITY_BERRY_CRUSH: + case ACTIVITY_BERRY_PICK: + case ACTIVITY_SPIN_TRADE: + case ACTIVITY_ITEM_TRADE: SaveLinkTrainerNames(); break; } switch (sPlayerCurrActivity) { - case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: case ACTIVITY_ACCEPT | IN_UNION_ROOM: CleanupOverworldWindowsAndTilemaps(); gMain.savedCallback = CB2_UnionRoomBattle; InitChooseMonsForBattle(CHOOSE_MONS_FOR_UNION_ROOM_BATTLE); break; - case ACTIVITY_BATTLE: + case ACTIVITY_BATTLE_SINGLE: CleanupOverworldWindowsAndTilemaps(); CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); + WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); SetMainCallback2(CB2_TransitionToCableClub); break; - case ACTIVITY_DBLBATTLE: + case ACTIVITY_BATTLE_DOUBLE: CleanupOverworldWindowsAndTilemaps(); HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); - SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); + WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); SetMainCallback2(CB2_TransitionToCableClub); break; - case ACTIVITY_MLTBATTLE: + case ACTIVITY_BATTLE_MULTI: CleanupOverworldWindowsAndTilemaps(); HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); - SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); + WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_TRADE: CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CleanupOverworldWindowsAndTilemaps(); - SetCableClubStateAndWarpToNewMap(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); + WarpForCableClubActivity(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_TRADE | IN_UNION_ROOM: @@ -1976,7 +1610,7 @@ static void Task_StartActivity(u8 taskId) else { LinkRfu_StopManagerBeforeEnteringChat(); - SetHostRfuGameData(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1); + SetHostRfuGameData(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); } EnterUnionRoomChat(); break; @@ -1985,22 +1619,22 @@ static void Task_StartActivity(u8 taskId) CreateTrainerCardInBuffer(gBlockSendBuffer, FALSE); SetMainCallback2(CB2_ShowCard); break; - case ACTIVITY_PJUMP: - SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1); + case ACTIVITY_POKEMON_JUMP: + WarpForWirelessMinigame(USING_MINIGAME, 5, 1); StartPokemonJump(GetCursorSelectionMonId(), CB2_LoadMap); break; - case ACTIVITY_BCRUSH: - SetCableClubStateAndWarpCurrentMap(USING_BERRY_CRUSH, 9, 1); + case ACTIVITY_BERRY_CRUSH: + WarpForWirelessMinigame(USING_BERRY_CRUSH, 9, 1); StartBerryCrush(CB2_LoadMap); break; - case ACTIVITY_BPICK: - SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1); + case ACTIVITY_BERRY_PICK: + WarpForWirelessMinigame(USING_MINIGAME, 5, 1); StartDodrioBerryPicking(GetCursorSelectionMonId(), CB2_LoadMap); break; } DestroyTask(taskId); - gSpecialVar_Result = 1; + gSpecialVar_Result = LINKUP_SUCCESS; UnlockPlayerFieldControls(); } @@ -2012,7 +1646,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) switch (data[0]) { case 0: - gSpecialVar_Result = 1; + gSpecialVar_Result = LINKUP_SUCCESS; ScriptContext_Enable(); data[0]++; break; @@ -2051,23 +1685,24 @@ static void CreateTask_StartActivity(void) gTasks[taskId].data[0] = 0; } -void MEvent_CreateTask_Leader(u32 activity) +// Sending Wonder Card/News +void CreateTask_SendMysteryGift(u32 activity) { u8 taskId; - struct UnkStruct_Leader * dataPtr; + struct WirelessLink_Leader * data; - taskId = CreateTask(Task_MEvent_Leader, 0); - sUnionRoomMain.leader = dataPtr = (void *)(gTasks[taskId].data); + taskId = CreateTask(Task_SendMysteryGift, 0); + sWirelessLinkMain.leader = data = (void *)(gTasks[taskId].data); - dataPtr->state = 0; - dataPtr->textState = 0; - dataPtr->activity = activity; - gSpecialVar_Result = 0; + data->state = 0; + data->textState = 0; + data->activity = activity; + gSpecialVar_Result = LINKUP_ONGOING; } -static void Task_MEvent_Leader(u8 taskId) +static void Task_SendMysteryGift(u8 taskId) { - struct UnkStruct_Leader * data = sUnionRoomMain.leader; + struct WirelessLink_Leader * data = sWirelessLinkMain.leader; struct WindowTemplate winTemplate; s32 val; @@ -2076,7 +1711,7 @@ static void Task_MEvent_Leader(u8 taskId) case 0: sPlayerCurrActivity = data->activity; sPlayerActivityGroupSize = 2; - SetHostRfuGameData(data->activity, 0, 0); + SetHostRfuGameData(data->activity, 0, FALSE); SetHostRfuWonderFlags(FALSE, FALSE); SetWirelessCommType1(); OpenLink(); @@ -2084,17 +1719,17 @@ static void Task_MEvent_Leader(u8 taskId) data->state = 1; break; case 1: - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE); - CopyHostRfuGameDataAndUsername(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); - data->field_0->arr[0].field_18 = 0; - data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[0].field_1A_1 = FALSE; - data->field_0->arr[0].field_1B = 0; - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + data->playerListBackup = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + ClearIncomingPlayerList(data->incomingPlayerList->players, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYERS); + CopyHostRfuGameDataAndUsername(&data->playerList->players[0].rfu.data, data->playerList->players[0].rfu.name); + data->playerList->players[0].timeoutCounter = 0; + data->playerList->players[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[0].useRedText = FALSE; + data->playerList->players[0].newPlayerCountdown = 0; + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, 0xFF); winTemplate = sWindowTemplate_List_PossibleGroupMembers; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); @@ -2109,8 +1744,8 @@ static void Task_MEvent_Leader(u8 taskId) data->state = 2; break; case 2: - StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]); - StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, sPlayerCurrActivity); + StringCopy(gStringVar1, sLinkGroupActivityNameTexts[sPlayerCurrActivity]); + GetAwaitingCommunicationText(gStringVar4, sPlayerCurrActivity); data->state = 3; break; case 3: @@ -2126,9 +1761,9 @@ static void Task_MEvent_Leader(u8 taskId) } break; case 6: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_UR_LinkWithFriendDropped)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_UR_LinkWithFriendDropped)) { - data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); + data->playerCount = LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); data->state = 2; } @@ -2137,51 +1772,51 @@ static void Task_MEvent_Leader(u8 taskId) data->state = 7; break; case 7: - switch (mevent_message_print_and_prompt_yes_no(&data->textState, (u16 *)&data->messageWindowId, FALSE, gStringVar4)) + switch (DoMysteryGiftYesNo(&data->textState, &data->yesNoWindowId, FALSE, gStringVar4)) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - data->field_0->arr[data->playerCount].field_1B = 0; + data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); - data->field_19 = 5; - SendRfuStatusToPartner(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); data->state = 8; break; case 1: - case -1: - data->field_19 = 6; - SendRfuStatusToPartner(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); + case MENU_B_PRESSED: + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); data->state = 8; break; } break; case 8: - val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); - if (val == 1) + val = WaitSendRfuStatusToPartner(ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); + if (val == 1) // Send complete { - if (data->field_19 == 5) + if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { - data->field_0->arr[data->playerCount].field_1B = 0; + data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); data->playerCount++; - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]); + CopyAndTranslatePlayerName(gStringVar1, data->playerList->players[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, gText_UR_AnOKWasSentToPlayer); data->state = 9; LinkRfu_StopManagerAndFinalizeSlots(); } else { - RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.compatibility.playerTrainerId)); - data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - UnionRoomLeaderField0CompactionAndCount(data->field_0); + RequestDisconnectSlotByTrainerNameAndId(data->playerList->players[data->playerCount].rfu.name, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId)); + data->playerList->players[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); data->state = 2; } - data->field_19 = 0; + data->joinRequestAnswer = 0; } - else if (val == 2) + else if (val == 2) // Member disconnected { RfuSetStatus(RFU_STATUS_OK, 0); data->state = 2; @@ -2217,21 +1852,21 @@ static void Task_MEvent_Leader(u8 taskId) CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); DestroyTask(data->listenTaskId); - Free(data->field_8); - Free(data->field_0); - Free(data->field_4); + Free(data->playerListBackup); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case 14: // Please start over from the beginning. - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_UR_PleaseStartOver)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_UR_PleaseStartOver)) { DestroyTask(taskId); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 15: - if (RfuGetStatus() == 1 || RfuGetStatus() == 2) + if (RfuGetStatus() == RFU_STATUS_FATAL_ERROR || RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR) { data->state = 13; } @@ -2246,9 +1881,9 @@ static void Task_MEvent_Leader(u8 taskId) CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); DestroyTask(data->listenTaskId); - Free(data->field_8); - Free(data->field_0); - Free(data->field_4); + Free(data->playerListBackup); + Free(data->playerList); + Free(data->incomingPlayerList); SetLinkStandbyCallback(); data->state++; break; @@ -2259,36 +1894,36 @@ static void Task_MEvent_Leader(u8 taskId) } } -void MEvent_CreateTask_CardOrNewsWithFriend(u32 activity) +void CreateTask_LinkMysteryGiftWithFriend(u32 activity) { u8 taskId; - struct UnkStruct_Group * dataPtr; + struct WirelessLink_Group * data; taskId = CreateTask(Task_CardOrNewsWithFriend, 0); - sUnionRoomMain.group = dataPtr = (void *)(gTasks[taskId].data); - sGroup = dataPtr; + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); + sGroup = data; - dataPtr->state = 0; - dataPtr->textState = 0; - dataPtr->cardOrNews = activity - ACTIVITY_WCARD2; // 0: Card; 1: News - gSpecialVar_Result = 0; + data->state = 0; + data->textState = 0; + data->isWonderNews = activity - ACTIVITY_WONDER_CARD; // 0: Card; 1: News + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_CardOrNewsWithFriend(u8 taskId) { s32 id; - struct WindowTemplate winTemplate1, winTemplate2; - struct UnkStruct_Group * data = sUnionRoomMain.group; + struct WindowTemplate listWinTemplate; + struct WirelessLink_Group * data = sWirelessLinkMain.group; switch (data->state) { case 0: - SetHostRfuGameData(data->cardOrNews + ACTIVITY_WCARD2, 0, 0); + SetHostRfuGameData(data->isWonderNews + ACTIVITY_WONDER_CARD, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = 1; break; case 1: @@ -2296,15 +1931,15 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 2; break; case 2: - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, data->cardOrNews + LINK_GROUP_WONDER_CARD); + ClearIncomingPlayerList(data->incomingPlayerList->players, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, data->isWonderNews + LINK_GROUP_WONDER_CARD); - winTemplate1 = sWindowTemplate_MysteryGiftList; - winTemplate1.baseBlock = GetMysteryGiftBaseBlock(); - data->listWindowId = AddWindow(&winTemplate1); + listWinTemplate = sWindowTemplate_GroupList; + listWinTemplate.baseBlock = GetMysteryGiftBaseBlock(); + data->listWindowId = AddWindow(&listWinTemplate); - data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_MysteryGiftPlayerNameAndId); + data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_PlayerNameAndId); MG_DrawTextBorder(data->listWindowId); gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups; @@ -2332,20 +1967,19 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != -1) + if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN) { // this unused variable along with the assignment is needed to match - u32 unusedVar; - unusedVar = data->field_0->arr[id].gname_uname.gname.activity; + u32 activity = data->playerList->players[id].rfu.data.activity; - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.startedActivity) + if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { data->leaderId = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); - CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.compatibility.playerTrainerId)); + CopyAndTranslatePlayerName2(gStringVar1, data->playerList->players[data->leaderId]); + CreateTask_RfuReconnectWithParent(data->playerList->players[data->leaderId].rfu.name, ReadAsU16(data->playerList->players[data->leaderId].rfu.data.compatibility.playerTrainerId)); PlaySE(SE_POKENAV_ON); data->state = 4; } @@ -2363,24 +1997,24 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 4: AddTextPrinterToWindow1(gText_UR_AwaitingPlayersResponse); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName2(gStringVar1, data->playerList->players[data->leaderId]); data->state = 5; break; case 5: if (gReceivedRemoteLinkPlayers) { - sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + sPlayerCurrActivity = data->playerList->players[data->leaderId].rfu.data.activity; data->state = 10; } switch (RfuGetStatus()) { - case 1: - case 2: - case 6: + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: + case RFU_STATUS_JOIN_GROUP_NO: data->state = 8; break; - case 5: + case RFU_STATUS_JOIN_GROUP_OK: AddTextPrinterToWindow1(gText_UR_PlayerSentBackOK); RfuSetStatus(RFU_STATUS_OK, 0); break; @@ -2394,17 +2028,17 @@ static void Task_CardOrNewsWithFriend(u8 taskId) RemoveWindow(data->playerNameAndIdWindowId); RemoveWindow(data->listWindowId); DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case 9: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gTexts_UR_LinkDropped[RfuGetStatus()])) + if (PrintMysteryGiftMenuMessage(&data->textState, gTexts_UR_LinkDropped[RfuGetStatus()])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 7: @@ -2412,7 +2046,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) AddTextPrinterToWindow1(gText_UR_PleaseStartOver); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; break; case 11: data->state++; @@ -2425,36 +2059,36 @@ static void Task_CardOrNewsWithFriend(u8 taskId) } } -void MEvent_CreateTask_CardOrNewsOverWireless(u32 activity) +void CreateTask_LinkMysteryGiftOverWireless(u32 activity) { u8 taskId; - struct UnkStruct_Group * dataPtr; + struct WirelessLink_Group * data; taskId = CreateTask(Task_CardOrNewsOverWireless, 0); - sUnionRoomMain.group = dataPtr = (void *)(gTasks[taskId].data); - sGroup = dataPtr; + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); + sGroup = data; - dataPtr->state = 0; - dataPtr->textState = 0; - dataPtr->cardOrNews = activity - ACTIVITY_WCARD2; // 0: Card; 1: News - gSpecialVar_Result = 0; + data->state = 0; + data->textState = 0; + data->isWonderNews = activity - ACTIVITY_WONDER_CARD; // 0: Card; 1: News + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_CardOrNewsOverWireless(u8 taskId) { s32 id; struct WindowTemplate winTemplate; - struct UnkStruct_Group * data = sUnionRoomMain.group; + struct WirelessLink_Group * data = sWirelessLinkMain.group; switch (data->state) { case 0: - SetHostRfuGameData(0, 0, 0); + SetHostRfuGameData(ACTIVITY_NONE, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = 1; break; case 1: @@ -2462,13 +2096,13 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 2; break; case 2: - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithSerial7F7D(data->field_4, data->cardOrNews + LINK_GROUP_WONDER_CARD); + ClearIncomingPlayerList(data->incomingPlayerList->players, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForWonderDistributor(data->incomingPlayerList, data->isWonderNews + LINK_GROUP_WONDER_CARD); - if (data->field_13 != 0) + if (data->showListMenu) { - winTemplate = sWindowTemplate_MysteryGiftList; + winTemplate = sWindowTemplate_GroupList; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); data->listWindowId = AddWindow(&winTemplate); @@ -2490,23 +2124,23 @@ static void Task_CardOrNewsOverWireless(u8 taskId) case 1: PlaySE(SE_PC_LOGIN); default: - if (data->field_13 != 0) + if (data->showListMenu) RedrawListMenu(data->listTaskId); break; case 0: - if (data->field_13 != 0) + if (data->showListMenu) id = ListMenu_ProcessInput(data->listTaskId); if (data->refreshTimer > 120) { - if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.startedActivity) + if (data->playerList->players[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[0].rfu.data.startedActivity) { - if (GetGnameWonderFlagByLinkGroup(&data->field_0->arr[0].gname_uname.gname, data->cardOrNews + LINK_GROUP_WONDER_CARD)) + if (HasWonderCardOrNewsByLinkGroup(&data->playerList->players[0].rfu.data, data->isWonderNews + LINK_GROUP_WONDER_CARD)) { data->leaderId = 0; data->refreshTimer = 0; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.uname, ReadAsU16(data->field_0->arr[0].gname_uname.gname.compatibility.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->playerList->players[0].rfu.name, ReadAsU16(data->playerList->players[0].rfu.data.compatibility.playerTrainerId)); PlaySE(SE_POKENAV_ON); data->state = 4; } @@ -2528,24 +2162,24 @@ static void Task_CardOrNewsOverWireless(u8 taskId) break; case 4: AddTextPrinterToWindow1(gText_UR_AwaitingResponseFromWirelessSystem); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName2(gStringVar1, data->playerList->players[data->leaderId]); data->state = 5; break; case 5: if (gReceivedRemoteLinkPlayers) { - sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + sPlayerCurrActivity = data->playerList->players[data->leaderId].rfu.data.activity; data->state = 12; } switch (RfuGetStatus()) { - case 1: - case 2: - case 6: + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: + case RFU_STATUS_JOIN_GROUP_NO: data->state = 8; break; - case 5: + case RFU_STATUS_JOIN_GROUP_OK: AddTextPrinterToWindow1(gText_UR_WirelessLinkEstablished); RfuSetStatus(RFU_STATUS_OK, 0); break; @@ -2555,37 +2189,37 @@ static void Task_CardOrNewsOverWireless(u8 taskId) case 8: case 10: case 12: - if (data->field_13 != 0) + if (data->showListMenu) { DestroyListMenuTask(data->listTaskId, 0, 0); CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); } DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case 9: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_UR_WirelessLinkDropped)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_UR_WirelessLinkDropped)) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 7: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_UR_WirelessSearchCanceled)) + if (PrintMysteryGiftMenuMessage(&data->textState, gText_UR_WirelessSearchCanceled)) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 11: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gTexts_UR_NoWonderShared[data->cardOrNews])) + if (PrintMysteryGiftMenuMessage(&data->textState, gTexts_UR_NoWonderShared[data->isWonderNews])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); @@ -2604,24 +2238,24 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } } -void UnionRoomSpecial(void) +void RunUnionRoom(void) { - struct UnkStruct_URoom * dataPtr; + struct WirelessLink_URoom * uroom; ResetHostRfuGameData(); CreateTask(Task_RunUnionRoom, 10); // dumb line needed to match - sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; + sWirelessLinkMain.uRoom = sWirelessLinkMain.uRoom; - dataPtr = AllocZeroed(sizeof(*sUnionRoomMain.uRoom)); - sUnionRoomMain.uRoom = dataPtr; - sURoom = dataPtr; + uroom = AllocZeroed(sizeof(*sWirelessLinkMain.uRoom)); + sWirelessLinkMain.uRoom = uroom; + sURoom = uroom; - dataPtr->state = 0; - dataPtr->textState = 0; - dataPtr->field_10 = 0; - dataPtr->field_12 = 0; + uroom->state = UR_STATE_INIT; + uroom->textState = 0; + uroom->unknown = 0; + uroom->unreadPlayerId = 0; gSpecialVar_Result = 0; ListMenuLoadStdPalAt(0xD0, 1); @@ -2632,144 +2266,148 @@ static u16 ReadAsU16(const u8 *ptr) return (ptr[1] << 8) | (ptr[0]); } -static void UnionRoom_ScheduleFieldMessageWithFollowupState(u32 nextState, const u8 *src) +static void ScheduleFieldMessageWithFollowupState(u32 nextState, const u8 *src) { - struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; + struct WirelessLink_URoom * uroom = sWirelessLinkMain.uRoom; - data->state = 8; - data->stateAfterPrint = nextState; + uroom->state = UR_STATE_PRINT_MSG; + uroom->stateAfterPrint = nextState; if (src != gStringVar4) StringExpandPlaceholders(gStringVar4, src); } -static void UnionRoom_ScheduleFieldMessageAndExit(const u8 *src) +static void ScheduleFieldMessageAndExit(const u8 *src) { - struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; + struct WirelessLink_URoom * uroom = sWirelessLinkMain.uRoom; - data->state = 26; + uroom->state = UR_STATE_PRINT_AND_EXIT; if (src != gStringVar4) StringExpandPlaceholders(gStringVar4, src); } -static void BackUpURoomField0ToDecompressionBuffer(struct UnkStruct_URoom * data) +static void CopyPlayerListToBuffer(struct WirelessLink_URoom * uroom) { - memcpy(&gDecompressionBuffer[0x3F00], data->field_0, UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); + memcpy(&gDecompressionBuffer[sizeof(gDecompressionBuffer) - (MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer))], + uroom->playerList, + MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); } -static void RestoreURoomField0FromDecompressionBuffer(struct UnkStruct_URoom * data) +static void CopyPlayerListFromBuffer(struct WirelessLink_URoom * uroom) { - memcpy(data->field_0, &gDecompressionBuffer[0x3F00], UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); + memcpy(uroom->playerList, + &gDecompressionBuffer[sizeof(gDecompressionBuffer) - (MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer))], + MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); } static void Task_RunUnionRoom(u8 taskId) { u32 id = 0; - s32 var5 = 0; + s32 input = 0; s32 playerGender = MALE; - struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; + struct WirelessLink_URoom * uroom = sWirelessLinkMain.uRoom; s16 *taskData = gTasks[taskId].data; - switch (data->state) + switch (uroom->state) { - case 0: - data->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); - data->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_GROUP_COUNT); + case UR_STATE_INIT: + uroom->incomingChildList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + uroom->incomingParentList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + uroom->playerList = AllocZeroed(MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); + uroom->spawnPlayer = AllocZeroed(sizeof(struct RfuPlayer)); + ClearRfuPlayerList(uroom->playerList->players, MAX_UNION_ROOM_LEADERS); sPlayerCurrActivity = IN_UNION_ROOM; - data->field_20 = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, LINK_GROUP_UNION_ROOM_RESUME); - ZeroUnionObjWork(data->unionObjs); + uroom->searchTaskId = CreateTask_SearchForChildOrParent(uroom->incomingParentList, uroom->incomingChildList, LINK_GROUP_UNION_ROOM_RESUME); + ZeroUnionObjWork(uroom->objects); MakeGroupAssemblyAreasPassable(); - data->state = 1; + uroom->state = UR_STATE_INIT_OBJECTS; break; - case 1: - CreateGroupMemberObjectsInvisible(data->spriteIds, taskData[0]); + case UR_STATE_INIT_OBJECTS: + CreateGroupMemberObjectsInvisible(uroom->spriteIds, taskData[0]); if (++taskData[0] == 8) - data->state = 2; + uroom->state = UR_STATE_INIT_LINK; break; - case 2: - SetHostRfuGameData(IN_UNION_ROOM, 0, 0); + case UR_STATE_INIT_LINK: + SetHostRfuGameData(IN_UNION_ROOM, 0, FALSE); SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); - BlankUnkStruct_x20Array(&data->field_8->arr[0], 1); - BlankUnkStruct_x1CArray(data->field_4->arr, 4); - BlankUnkStruct_x1CArray(data->field_C->arr, 4); + ClearRfuPlayerList(&uroom->spawnPlayer->players[0], 1); + ClearIncomingPlayerList(uroom->incomingChildList->players, RFU_CHILD_MAX); + ClearIncomingPlayerList(uroom->incomingParentList->players, RFU_CHILD_MAX); gSpecialVar_Result = 0; - data->state = 3; + uroom->state = UR_STATE_CHECK_SELECTING_MON; break; - case 3: + case UR_STATE_CHECK_SELECTING_MON: if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) - && sUnionRoomTrade.field_0 != 0) + && sUnionRoomTrade.state != URTRADE_STATE_NONE) { id = GetCursorSelectionMonId(); - switch (sUnionRoomTrade.field_0) + switch (sUnionRoomTrade.state) { - case 1: + case URTRADE_STATE_REGISTERING: UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (id >= PARTY_SIZE) { ResetUnionRoomTrade(&sUnionRoomTrade); - SetTradeBoardRegisteredMonInfo(0, 0, 0); - UnionRoom_ScheduleFieldMessageAndExit(gText_UR_RegistrationCanceled); + SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); + ScheduleFieldMessageAndExit(gText_UR_RegistrationCanceled); } else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade)) { - UnionRoom_ScheduleFieldMessageWithFollowupState(52, gText_UR_ChooseRequestedMonType); + ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_REQUEST_TYPE, gText_UR_ChooseRequestedMonType); } else { - data->state = 55; + uroom->state = UR_STATE_REGISTER_COMPLETE; } break; - case 2: - RestoreURoomField0FromDecompressionBuffer(data); - taskData[1] = sUnionRoomTrade.field_8; + case URTRADE_STATE_OFFERING: + CopyPlayerListFromBuffer(uroom); + taskData[1] = sUnionRoomTrade.offerPlayerId; if (id >= PARTY_SIZE) { - UnionRoom_ScheduleFieldMessageAndExit(gText_UR_TradeCanceled); + ScheduleFieldMessageAndExit(gText_UR_TradeCanceled); } else { UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade); - data->state = 51; + uroom->state = UR_STATE_TRADE_OFFER_MON; } break; } - sUnionRoomTrade.field_0 = 0; + sUnionRoomTrade.state = URTRADE_STATE_NONE; } else { - data->state = 4; + uroom->state = UR_STATE_MAIN; } break; - case 4: + case UR_STATE_MAIN: if (gSpecialVar_Result != 0) { - if (gSpecialVar_Result == 9) + if (gSpecialVar_Result == UR_INTERACT_ATTENDANT) { UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - data->state = 42; + uroom->state = UR_STATE_INTERACT_WITH_ATTENDANT; gSpecialVar_Result = 0; } - else if (gSpecialVar_Result == 11) + else if (gSpecialVar_Result == UR_INTERACT_START_MENU) { UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); - data->state = 23; + uroom->state = UR_STATE_WAIT_FOR_START_MENU; gSpecialVar_Result = 0; } - else + else // UR_INTERACT_PLAYER_# (1-8) { taskData[0] = 0; taskData[1] = gSpecialVar_Result - 1; - data->state = 24; + uroom->state = UR_STATE_INTERACT_WITH_PLAYER; gSpecialVar_Result = 0; } } @@ -2777,81 +2415,81 @@ static void Task_RunUnionRoom(u8 taskId) { if (JOY_NEW(A_BUTTON)) { - if (RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(data->field_0, &taskData[0], &taskData[1], data->spriteIds)) + if (TryInteractWithUnionRoomMember(uroom->playerList, &taskData[0], &taskData[1], uroom->spriteIds)) { PlaySE(SE_SELECT); - UR_EnableScriptContext2AndFreezeObjectEvents(); - data->state = 24; + StartScriptInteraction(); + uroom->state = UR_STATE_INTERACT_WITH_PLAYER; break; } - else if (PlayerIsTalkingToUnionRoomAide()) + else if (IsPlayerFacingTradingBoard()) { UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); - UR_EnableScriptContext2AndFreezeObjectEvents(); + StartScriptInteraction(); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - data->state = 45; + uroom->state = UR_STATE_CHECK_TRADING_BOARD; break; } } switch (HandlePlayerListUpdate()) { - case 1: + case PLIST_NEW_PLAYER: PlaySE(SE_NOTE_C); - case 2: - ScheduleUnionRoomPlayerRefresh(data); + case PLIST_RECENT_UPDATE: + ScheduleUnionRoomPlayerRefresh(uroom); break; - case 4: - data->state = 11; - UR_EnableScriptContext2AndFreezeObjectEvents(); - SetTradeBoardRegisteredMonInfo(0, 0, 0); - UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(data), FALSE); + case PLIST_CONTACTED: + uroom->state = UR_STATE_PLAYER_CONTACTED_YOU; + StartScriptInteraction(); + SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); + UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnersInfo(uroom), FALSE); break; } - HandleUnionRoomPlayerRefresh(data); + HandleUnionRoomPlayerRefresh(uroom); } break; - case 23: + case UR_STATE_WAIT_FOR_START_MENU: if (!FuncIsActiveTask(Task_StartMenuHandleInput)) { - UpdateGameData_SetActivity(IN_UNION_ROOM, 0, FALSE); - data->state = 4; + UpdateGameData_SetActivity(ACTIVITY_NONE | IN_UNION_ROOM, 0, FALSE); + uroom->state = UR_STATE_MAIN; } break; - case 24: - UR_RunTextPrinters_CheckPrinter0Active(); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); + case UR_STATE_INTERACT_WITH_PLAYER: + UR_RunTextPrinters(); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); - switch (UnionRoomGetPlayerInteractionResponse(data->field_0, taskData[0], taskData[1], playerGender)) + switch (UnionRoomGetPlayerInteractionResponse(uroom->playerList, taskData[0], taskData[1], playerGender)) { - case 0: - data->state = 26; + case 0: // Player is or was just doing an activity + uroom->state = UR_STATE_PRINT_AND_EXIT; break; - case 1: - TryConnectToUnionRoomParent(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); - data->field_12 = id; // Should be just 0, but won't match any other way. - data->state = 25; + case 1: // Link communicating + TryConnectToUnionRoomParent(uroom->playerList->players[taskData[1]].rfu.name, &uroom->playerList->players[taskData[1]].rfu.data, sPlayerCurrActivity); + uroom->unreadPlayerId = id; // Should be just 0, but won't match any other way. + uroom->state = UR_STATE_TRY_COMMUNICATING; break; - case 2: - UnionRoom_ScheduleFieldMessageWithFollowupState(19, gStringVar4); + case 2: // Ask to join chat + ScheduleFieldMessageWithFollowupState(UR_STATE_RECV_JOIN_CHAT_REQUEST, gStringVar4); break; } break; - case 25: - UR_RunTextPrinters_CheckPrinter0Active(); + case UR_STATE_TRY_COMMUNICATING: + UR_RunTextPrinters(); switch (RfuGetStatus()) { - case 4: - HandleCancelTrade(TRUE); - data->state = 4; + case RFU_STATUS_NEW_CHILD_DETECTED: + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; - case 1: - case 2: + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: if (IsUnionRoomListenTaskActive() == TRUE) - UnionRoom_ScheduleFieldMessageAndExit(gText_UR_TrainerAppearsBusy); + ScheduleFieldMessageAndExit(gText_UR_TrainerAppearsBusy); else - UnionRoom_ScheduleFieldMessageWithFollowupState(30, gText_UR_TrainerAppearsBusy); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, gText_UR_TrainerAppearsBusy); sPlayerCurrActivity = IN_UNION_ROOM; break; @@ -2861,138 +2499,141 @@ static void Task_RunUnionRoom(u8 taskId) { CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CreateTask(Task_ExchangeCards, 5); - data->state = 38; + uroom->state = UR_STATE_COMMUNICATING_WAIT_FOR_DATA; } break; - case 38: + case UR_STATE_COMMUNICATING_WAIT_FOR_DATA: if (!FuncIsActiveTask(Task_ExchangeCards)) { if (sPlayerCurrActivity == (ACTIVITY_TRADE | IN_UNION_ROOM)) - UnionRoom_ScheduleFieldMessageWithFollowupState(31, gText_UR_AwaitingPlayersResponseAboutTrade); + ScheduleFieldMessageWithFollowupState(UR_STATE_SEND_TRADE_REQUST, gText_UR_AwaitingPlayersResponseAboutTrade); else - data->state = 5; + uroom->state = UR_STATE_DO_SOMETHING_PROMPT; } break; - case 30: + case UR_STATE_CANCEL_ACTIVITY_LINK_ERROR: if (!gReceivedRemoteLinkPlayers) { - HandleCancelTrade(FALSE); - UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0); - data->state = 2; + HandleCancelActivity(FALSE); + UpdateUnionGroupMemberFacing(taskData[0], taskData[1], uroom->playerList); + uroom->state = UR_STATE_INIT_LINK; } break; - case 5: - id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UnionRoom_ScheduleFieldMessageWithFollowupState(6, gTexts_UR_HiDoSomething[id][playerGender]); + case UR_STATE_DO_SOMETHING_PROMPT: + id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->playerList->players[taskData[1]]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); + ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, gTexts_UR_HiDoSomething[id][playerGender]); break; - case 6: - var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->topListMenuWindowId, &data->topListMenuListMenuId, &sWindowTemplate_InviteToActivity, &sListMenuTemplate_InviteToActivity); - if (var5 != -1) + case UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT: + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->topListMenuWindowId, + &uroom->topListMenuId, + &sWindowTemplate_InviteToActivity, + &sListMenuTemplate_InviteToActivity); + if (input != LIST_NOTHING_CHOSEN) { if (!gReceivedRemoteLinkPlayers) { - data->state = 28; + uroom->state = UR_STATE_TRAINER_APPEARS_BUSY; } else { - data->partnerYesNoResponse = 0; - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - if (var5 == -2 || var5 == IN_UNION_ROOM) + uroom->partnerYesNoResponse = 0; + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); + if (input == LIST_CANCEL || input == IN_UNION_ROOM) { - data->playerSendBuffer[0] = IN_UNION_ROOM; - Rfu_SendPacket(data->playerSendBuffer); + uroom->playerSendBuffer[0] = IN_UNION_ROOM; + Rfu_SendPacket(uroom->playerSendBuffer); StringCopy(gStringVar4, gTexts_UR_IfYouWantToDoSomething[gLinkPlayers[0].gender]); - data->state = 32; + uroom->state = UR_STATE_REQUEST_DECLINED; } else { - sPlayerCurrActivity = var5; - sPlayerActivityGroupSize = (u32)(var5) >> 8; - if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower()) + sPlayerCurrActivity = input; + sPlayerActivityGroupSize = (u32)(input) >> 8; // Extract capacity from sInviteToActivityMenuItems + if (sPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower()) { - UnionRoom_ScheduleFieldMessageWithFollowupState(5, gText_UR_NeedTwoMonsOfLevel30OrLower1); + ScheduleFieldMessageWithFollowupState(UR_STATE_DO_SOMETHING_PROMPT, gText_UR_NeedTwoMonsOfLevel30OrLower1); } else { - data->playerSendBuffer[0] = sPlayerCurrActivity | IN_UNION_ROOM; - Rfu_SendPacket(data->playerSendBuffer); - data->state = 27; + uroom->playerSendBuffer[0] = sPlayerCurrActivity | IN_UNION_ROOM; + Rfu_SendPacket(uroom->playerSendBuffer); + uroom->state = UR_STATE_SEND_ACTIVITY_REQUEST; } } } } break; - case 28: + case UR_STATE_TRAINER_APPEARS_BUSY: StringCopy(gStringVar4, gText_UR_TrainerBattleBusy); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; - case 27: - PollPartnerYesNoResponse(data); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - id = GetResponseIdx_InviteToURoomActivity(data->playerSendBuffer[0] & 0x3F); - if (PrintOnTextbox(&data->textState, gTexts_UR_WaitOrShowCard[playerGender][id])) + case UR_STATE_SEND_ACTIVITY_REQUEST: + PollPartnerYesNoResponse(uroom); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); + id = GetResponseIdx_InviteToURoomActivity(uroom->playerSendBuffer[0] & 0x3F); + if (PrintOnTextbox(&uroom->textState, gTexts_UR_WaitOrShowCard[playerGender][id])) { taskData[3] = 0; - data->state = 29; + uroom->state = UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST; } break; - case 32: + case UR_STATE_REQUEST_DECLINED: SetCloseLinkCallback(); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; - case 31: - data->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM; - data->playerSendBuffer[1] = sUnionRoomTrade.species; - data->playerSendBuffer[2] = sUnionRoomTrade.level; - Rfu_SendPacket(data->playerSendBuffer); - data->state = 29; + case UR_STATE_SEND_TRADE_REQUST: + uroom->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM; + uroom->playerSendBuffer[1] = sUnionRoomTrade.species; + uroom->playerSendBuffer[2] = sUnionRoomTrade.level; + Rfu_SendPacket(uroom->playerSendBuffer); + uroom->state = UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST; break; - case 29: + case UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST: if (!gReceivedRemoteLinkPlayers) { StringCopy(gStringVar4, gText_UR_TrainerBattleBusy); - data->state = 28; + uroom->state = UR_STATE_TRAINER_APPEARS_BUSY; } else { - PollPartnerYesNoResponse(data); - if (data->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) + PollPartnerYesNoResponse(uroom); + if (uroom->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) { if (sPlayerCurrActivity == ACTIVITY_CARD) { - ViewURoomPartnerTrainerCard(gStringVar4, data, MODE_CHILD); - data->state = 40; + ViewURoomPartnerTrainerCard(gStringVar4, uroom, MODE_CHILD); + uroom->state = UR_STATE_PRINT_CARD_INFO; } else { - data->state = 13; + uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG; } } - else if (data->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM)) + else if (uroom->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM)) { - data->state = 32; + uroom->state = UR_STATE_REQUEST_DECLINED; GetURoomActivityRejectMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM, gLinkPlayers[0].gender); - sPlayerCurrActivity = 0; + sPlayerCurrActivity = ACTIVITY_NONE; } } break; - - case 7: - id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UnionRoom_ScheduleFieldMessageWithFollowupState(6, gTexts_UR_HiDoSomething[id][playerGender]); + case UR_STATE_DO_SOMETHING_PROMPT_2: + id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->playerList->players[taskData[1]]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); + ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, gTexts_UR_HiDoSomething[id][playerGender]); break; - case 40: - if (PrintOnTextbox(&data->textState, gStringVar4)) + case UR_STATE_PRINT_CARD_INFO: + if (PrintOnTextbox(&uroom->textState, gStringVar4)) { - data->state = 41; + uroom->state = UR_STATE_WAIT_FINISH_READING_CARD; SetLinkStandbyCallback(); - data->partnerYesNoResponse = 0; - data->recvActivityRequest[0] = 0; + uroom->partnerYesNoResponse = 0; + uroom->recvActivityRequest[0] = 0; } break; - case 41: + case UR_STATE_WAIT_FINISH_READING_CARD: if (IsLinkTaskFinished()) { if (GetMultiplayerId() == 0) @@ -3000,227 +2641,225 @@ static void Task_RunUnionRoom(u8 taskId) StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name); id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); StringExpandPlaceholders(gStringVar4, gTexts_UR_AwaitingResponse[id]); - data->state = 33; + uroom->state = UR_STATE_PRINT_CONTACT_MSG; } else { - data->state = 7; + uroom->state = UR_STATE_DO_SOMETHING_PROMPT_2; } } break; - case 19: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_RECV_JOIN_CHAT_REQUEST: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: + case 0: // YES CopyBgTilemapBufferToVram(0); sPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM; UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); - TryConnectToUnionRoomParent(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); - data->field_12 = taskData[1]; - data->state = 20; + TryConnectToUnionRoomParent(uroom->playerList->players[taskData[1]].rfu.name, &uroom->playerList->players[taskData[1]].rfu.data, sPlayerCurrActivity); + uroom->unreadPlayerId = taskData[1]; + uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY; taskData[3] = 0; break; - case 1: - case -1: - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UnionRoom_ScheduleFieldMessageAndExit(gTexts_UR_DeclineChat[playerGender]); + case 1: // NO + case MENU_B_PRESSED: + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); + ScheduleFieldMessageAndExit(gTexts_UR_DeclineChat[playerGender]); break; } break; - case 20: + case UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY: if (++taskData[2] > 60) { - data->state = 21; + uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST; taskData[2] = 0; } break; - case 21: + case UR_STATE_TRY_ACCEPT_CHAT_REQUEST: switch (RfuGetStatus()) { - case 4: - HandleCancelTrade(TRUE); - data->state = 4; + case RFU_STATUS_NEW_CHILD_DETECTED: + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; - case 1: - case 2: - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) - UnionRoom_ScheduleFieldMessageAndExit(gTexts_UR_ChatDeclined[playerGender]); + ScheduleFieldMessageAndExit(gTexts_UR_ChatDeclined[playerGender]); else - UnionRoom_ScheduleFieldMessageWithFollowupState(30, gTexts_UR_ChatDeclined[playerGender]); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, gTexts_UR_ChatDeclined[playerGender]); break; - case 3: - data->state = 22; + case RFU_STATUS_CHILD_SEND_COMPLETE: + uroom->state = UR_STATE_ACCEPT_CHAT_REQUEST; break; } taskData[3]++; break; - case 22: + case UR_STATE_ACCEPT_CHAT_REQUEST: if (RfuHasErrored()) { - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) - UnionRoom_ScheduleFieldMessageAndExit(gTexts_UR_ChatDeclined[playerGender]); + ScheduleFieldMessageAndExit(gTexts_UR_ChatDeclined[playerGender]); else - UnionRoom_ScheduleFieldMessageWithFollowupState(30, gTexts_UR_ChatDeclined[playerGender]); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, gTexts_UR_ChatDeclined[playerGender]); } if (gReceivedRemoteLinkPlayers) - data->state = 16; + uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM; break; - case 11: + case UR_STATE_PLAYER_CONTACTED_YOU: PlaySE(SE_DING_DONG); StopUnionRoomLinkManager(); - data->state = 12; - data->recvActivityRequest[0] = 0; + uroom->state = UR_STATE_RECV_CONTACT_DATA; + uroom->recvActivityRequest[0] = 0; break; - case 12: + case UR_STATE_RECV_CONTACT_DATA: if (RfuHasErrored()) { - HandleCancelTrade(FALSE); - data->state = 2; + HandleCancelActivity(FALSE); + uroom->state = UR_STATE_INIT_LINK; } else if (gReceivedRemoteLinkPlayers) { CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CreateTask(Task_ExchangeCards, 5); - data->state = 39; + uroom->state = UR_STATE_WAIT_FOR_CONTACT_DATA; } break; - case 39: - ReceiveUnionRoomActivityPacket(data); + case UR_STATE_WAIT_FOR_CONTACT_DATA: + ReceiveUnionRoomActivityPacket(uroom); if (!FuncIsActiveTask(Task_ExchangeCards)) { - data->state = 33; + uroom->state = UR_STATE_PRINT_CONTACT_MSG; StringCopy(gStringVar1, gLinkPlayers[1].name); id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); StringExpandPlaceholders(gStringVar4, gTexts_UR_PlayerContactedYou[id]); } break; - case 33: - ReceiveUnionRoomActivityPacket(data); - if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = 34; + case UR_STATE_PRINT_CONTACT_MSG: + ReceiveUnionRoomActivityPacket(uroom); + if (PrintOnTextbox(&uroom->textState, gStringVar4)) + uroom->state = UR_STATE_HANDLE_CONTACT_DATA; break; - case 34: - ReceiveUnionRoomActivityPacket(data); - if (UnionRoom_HandleContactFromOtherPlayer(data) && JOY_NEW(B_BUTTON)) + case UR_STATE_HANDLE_CONTACT_DATA: + ReceiveUnionRoomActivityPacket(uroom); + if (HandleContactFromOtherPlayer(uroom) && JOY_NEW(B_BUTTON)) { Rfu_DisconnectPlayerById(1); StringCopy(gStringVar4, gText_UR_ChatEnded); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; } break; - case 35: - // You said yes - UnionRoom_ScheduleFieldMessageWithFollowupState(9, gStringVar4); + case UR_STATE_RECV_ACTIVITY_REQUEST: + ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_ACTIVITY_REQUEST, gStringVar4); break; - case 9: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_HANDLE_ACTIVITY_REQUEST: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: - data->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; + case 0: // ACCEPT + uroom->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; if (sPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM)) - UpdateGameData_SetActivity(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), FALSE); + UpdateGameData_SetActivity(sPlayerCurrActivity | IN_UNION_ROOM, GetLinkPlayerInfoFlags(1), FALSE); else - UpdateGameData_SetActivity(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), TRUE); + UpdateGameData_SetActivity(sPlayerCurrActivity | IN_UNION_ROOM, GetLinkPlayerInfoFlags(1), TRUE); - data->field_8->arr[0].field_1B = 0; + uroom->spawnPlayer->players[0].newPlayerCountdown = 0; taskData[3] = 0; - if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM)) + if (sPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM)) { if (!HasAtLeastTwoMonsOfLevel30OrLower()) { - data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; - Rfu_SendPacket(data->playerSendBuffer); - data->state = 10; + uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; + Rfu_SendPacket(uroom->playerSendBuffer); + uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST; StringCopy(gStringVar4, gText_UR_NeedTwoMonsOfLevel30OrLower2); } else { - Rfu_SendPacket(data->playerSendBuffer); - data->state = 13; + Rfu_SendPacket(uroom->playerSendBuffer); + uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG; } } else if (sPlayerCurrActivity == (ACTIVITY_CARD | IN_UNION_ROOM)) { - Rfu_SendPacket(data->playerSendBuffer); - ViewURoomPartnerTrainerCard(gStringVar4, data, MODE_PARENT); - data->state = 40; + Rfu_SendPacket(uroom->playerSendBuffer); + ViewURoomPartnerTrainerCard(gStringVar4, uroom, MODE_PARENT); + uroom->state = UR_STATE_PRINT_CARD_INFO; } else { - Rfu_SendPacket(data->playerSendBuffer); - data->state = 13; + Rfu_SendPacket(uroom->playerSendBuffer); + uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG; } break; - case 1: - case -1: - data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; - Rfu_SendPacket(data->playerSendBuffer); - data->state = 10; + case 1: // DECLINE + case MENU_B_PRESSED: + uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; + Rfu_SendPacket(uroom->playerSendBuffer); + uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST; GetYouDeclinedTheOfferMessage(gStringVar4, sPlayerCurrActivity); break; } break; - case 10: + case UR_STATE_DECLINE_ACTIVITY_REQUEST: SetCloseLinkCallback(); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; - case 36: - // You said no + case UR_STATE_CANCEL_REQUEST_PRINT_MSG: if (!gReceivedRemoteLinkPlayers) { sPlayerCurrActivity = IN_UNION_ROOM; - UnionRoom_ScheduleFieldMessageWithFollowupState(37, gStringVar4); - memset(data->playerSendBuffer, 0, sizeof(data->playerSendBuffer)); - data->recvActivityRequest[0] = 0; - data->partnerYesNoResponse = 0; + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REQUEST_RESTART_LINK, gStringVar4); + memset(uroom->playerSendBuffer, 0, sizeof(uroom->playerSendBuffer)); + uroom->recvActivityRequest[0] = 0; + uroom->partnerYesNoResponse = 0; } break; - case 37: - data->state = 2; - HandleCancelTrade(FALSE); + case UR_STATE_CANCEL_REQUEST_RESTART_LINK: + uroom->state = UR_STATE_INIT_LINK; + HandleCancelActivity(FALSE); break; - case 13: + case UR_STATE_PRINT_START_ACTIVITY_MSG: GetURoomActivityStartMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM); - UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4); + ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4); break; - case 14: + case UR_STATE_START_ACTIVITY_LINK: SetLinkStandbyCallback(); - data->state = 15; + uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK; break; - case 15: + case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK: if (IsLinkTaskFinished()) - data->state = 16; + uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM; break; - case 16: - Free(data->field_8); - Free(data->field_0); - Free(data->field_C); - Free(data->field_4); - DestroyTask(data->field_20); - DestroyGroupMemberObjects(data->spriteIds); - data->state = 17; + case UR_STATE_START_ACTIVITY_FREE_UROOM: + Free(uroom->spawnPlayer); + Free(uroom->playerList); + Free(uroom->incomingParentList); + Free(uroom->incomingChildList); + DestroyTask(uroom->searchTaskId); + DestroyGroupMemberObjects(uroom->spriteIds); + uroom->state = UR_STATE_START_ACTIVITY_FADE; break; - case 17: - BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK); - data->state = 18; + case UR_STATE_START_ACTIVITY_FADE: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + uroom->state = UR_STATE_START_ACTIVITY; break; - case 18: + case UR_STATE_START_ACTIVITY: if (!UpdatePaletteFade()) { - DeleteUnionObjWorkAndStopTask(); + DestroyUnionRoomPlayerObjects(); DestroyTask(taskId); - Free(sUnionRoomMain.uRoom); + Free(sWirelessLinkMain.uRoom); CreateTask_StartActivity(); } break; - case 42: + case UR_STATE_INTERACT_WITH_ATTENDANT: if (GetHostRfuGameData()->tradeSpecies == SPECIES_NONE) { - data->state = 43; + uroom->state = UR_STATE_REGISTER_PROMPT; } else { @@ -3234,194 +2873,204 @@ static void Task_RunUnionRoom(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, GetHostRfuGameData()->tradeLevel, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_UR_CancelRegistrationOfMon); } - UnionRoom_ScheduleFieldMessageWithFollowupState(44, gStringVar4); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REGISTRATION_PROMPT, gStringVar4); } break; - case 43: - if (PrintOnTextbox(&data->textState, gText_UR_RegisterMonAtTradingBoard)) - data->state = 47; + case UR_STATE_REGISTER_PROMPT: + if (PrintOnTextbox(&uroom->textState, gText_UR_RegisterMonAtTradingBoard)) + uroom->state = UR_STATE_REGISTER_PROMPT_HANDLE_INPUT; break; - case 47: - var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &sWindowTemplate_TradeBoardRegisterInfoExit, &sListMenuTemplate_TradeBoardRegisterInfoExit); - if (var5 != -1) + case UR_STATE_REGISTER_PROMPT_HANDLE_INPUT: + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->tradeBoardMainWindowId, + &uroom->tradeBoardHeaderWindowId, + &sWindowTemplate_RegisterForTrade, + &sListMenuTemplate_RegisterForTrade); + if (input != LIST_NOTHING_CHOSEN) { - if (var5 == -2 || var5 == 3) + if (input == LIST_CANCEL || input == 3) // Exit { - data->state = 4; - HandleCancelTrade(TRUE); + uroom->state = UR_STATE_MAIN; + HandleCancelActivity(TRUE); } else { - switch (var5) + switch (input) { case 1: // REGISTER - UnionRoom_ScheduleFieldMessageWithFollowupState(53, gText_UR_WhichMonWillYouOffer); + ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_SELECT_MON_FADE, gText_UR_WhichMonWillYouOffer); break; case 2: // INFO - UnionRoom_ScheduleFieldMessageWithFollowupState(47, gText_UR_TradingBoardInfo); + ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, gText_UR_TradingBoardInfo); break; } } DestroyHelpMessageWindow_(); } break; - case 53: - BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK); - data->state = 54; + case UR_STATE_REGISTER_SELECT_MON_FADE: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + uroom->state = UR_STATE_REGISTER_SELECT_MON; break; - case 54: + case UR_STATE_REGISTER_SELECT_MON: if (!gPaletteFade.active) { - sUnionRoomTrade.field_0 = 1; + sUnionRoomTrade.state = URTRADE_STATE_REGISTERING; gFieldCallback = FieldCB_ContinueScriptUnionRoom; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_REGISTER, CB2_ReturnToField); } break; - case 52: - var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &sWindowTemplate_TypeNames, &sListMenuTemplate_TypeNames); - if (var5 != -1) + case UR_STATE_REGISTER_REQUEST_TYPE: + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, &uroom->tradeBoardMainWindowId, &uroom->tradeBoardHeaderWindowId, &sWindowTemplate_TypeNames, &sListMenuTemplate_TypeNames); + if (input != LIST_NOTHING_CHOSEN) { - switch (var5) + switch (input) { - case -2: - case 18: + case LIST_CANCEL: + case NUMBER_OF_MON_TYPES: // Exit ResetUnionRoomTrade(&sUnionRoomTrade); - SetTradeBoardRegisteredMonInfo(0, 0, 0); - UnionRoom_ScheduleFieldMessageAndExit(gText_UR_RegistrationCanceled); + SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); + ScheduleFieldMessageAndExit(gText_UR_RegistrationCanceled); break; default: - sUnionRoomTrade.type = var5; - data->state = 55; + sUnionRoomTrade.type = input; + uroom->state = UR_STATE_REGISTER_COMPLETE; break; } } break; - case 55: + case UR_STATE_REGISTER_COMPLETE: SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - UnionRoom_ScheduleFieldMessageAndExit(gText_UR_RegistraionCompleted); + ScheduleFieldMessageAndExit(gText_UR_RegistraionCompleted); break; - case 44: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_CANCEL_REGISTRATION_PROMPT: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: - data->state = 56; + case 0: // YES + uroom->state = UR_STATE_CANCEL_REGISTRATION; break; - case 1: - case -1: - HandleCancelTrade(TRUE); - data->state = 4; + case 1: // NO + case MENU_B_PRESSED: + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; } break; - case 56: - if (PrintOnTextbox(&data->textState, gText_UR_RegistrationCanceled2)) + case UR_STATE_CANCEL_REGISTRATION: + if (PrintOnTextbox(&uroom->textState, gText_UR_RegistrationCanceled2)) { - SetTradeBoardRegisteredMonInfo(0, 0, 0); + SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); ResetUnionRoomTrade(&sUnionRoomTrade); - HandleCancelTrade(TRUE); - data->state = 4; + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; } break; - case 45: - if (PrintOnTextbox(&data->textState, gText_UR_XCheckedTradingBoard)) - data->state = 46; + case UR_STATE_CHECK_TRADING_BOARD: + if (PrintOnTextbox(&uroom->textState, gText_UR_XCheckedTradingBoard)) + uroom->state = UR_STATE_TRADING_BOARD_LOAD; break; - case 46: - UR_BlankBg0(); - data->state = 48; + case UR_STATE_TRADING_BOARD_LOAD: + UR_ClearBg0(); + uroom->state = UR_STATE_TRADING_BOARD_HANDLE_INPUT; break; - case 48: - var5 = TradeBoardMenuHandler(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardListMenuId, &data->tradeBoardDetailsWindowId, &gUnknown_8456F24, &sTradeBoardListMenuTemplate, data->field_0); - if (var5 != -1) + case UR_STATE_TRADING_BOARD_HANDLE_INPUT: + input = TradeBoardMenuHandler(&uroom->textState, + &uroom->tradeBoardMainWindowId, + &uroom->tradeBoardListMenuId, + &uroom->tradeBoardHeaderWindowId, + &sWindowTemplate_TradingBoardMain, + &sListMenuTemplate_TradeBoard, + uroom->playerList); + if (input != LIST_NOTHING_CHOSEN) { - switch (var5) + switch (input) { - case -2: - case 8: - HandleCancelTrade(TRUE); + case LIST_CANCEL: + case 8: // EXIT + HandleCancelActivity(TRUE); DestroyHelpMessageWindow_(); - data->state = 4; + uroom->state = UR_STATE_MAIN; break; default: - switch (IsRequestedTypeAndSpeciesInPlayerParty(data->field_0->arr[var5].gname_uname.gname.tradeType, data->field_0->arr[var5].gname_uname.gname.tradeSpecies)) + switch (IsRequestedTradeInPlayerParty(uroom->playerList->players[input].rfu.data.tradeType, uroom->playerList->players[input].rfu.data.tradeSpecies)) { case UR_TRADE_MATCH: - IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - UnionRoom_ScheduleFieldMessageWithFollowupState(49, gText_UR_AskTrainerToMakeTrade); - taskData[1] = var5; + CopyAndTranslatePlayerName2(gStringVar1, uroom->playerList->players[input]); + ScheduleFieldMessageWithFollowupState(UR_STATE_TRADE_PROMPT, gText_UR_AskTrainerToMakeTrade); + taskData[1] = input; break; case UR_TRADE_NOTYPE: - IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.tradeType]); - UnionRoom_ScheduleFieldMessageWithFollowupState(46, gText_UR_DontHaveTypeTrainerWants); + CopyAndTranslatePlayerName2(gStringVar1, uroom->playerList->players[input]); + StringCopy(gStringVar2, gTypeNames[uroom->playerList->players[input].rfu.data.tradeType]); + ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, gText_UR_DontHaveTypeTrainerWants); break; case UR_TRADE_NOEGG: - IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.tradeType]); - UnionRoom_ScheduleFieldMessageWithFollowupState(46, gText_UR_DontHaveEggTrainerWants); + CopyAndTranslatePlayerName2(gStringVar1, uroom->playerList->players[input]); + StringCopy(gStringVar2, gTypeNames[uroom->playerList->players[input].rfu.data.tradeType]); + ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, gText_UR_DontHaveEggTrainerWants); break; } break; } } break; - case 49: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_TRADE_PROMPT: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: - data->state = 50; + case 0: // YES + uroom->state = UR_STATE_TRADE_SELECT_MON; break; - case -1: - case 1: - HandleCancelTrade(TRUE); - data->state = 4; + case MENU_B_PRESSED: + case 1: // NO + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; } break; - case 50: - if (PrintOnTextbox(&data->textState, gText_UR_WhichMonWillYouOffer)) + case UR_STATE_TRADE_SELECT_MON: + if (PrintOnTextbox(&uroom->textState, gText_UR_WhichMonWillYouOffer)) { - sUnionRoomTrade.field_0 = 2; - memcpy(&gPartnerTgtGnameSub, &data->field_0->arr[taskData[1]].gname_uname.gname.compatibility, sizeof(gPartnerTgtGnameSub)); - gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].gname_uname.gname.tradeType; - gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].gname_uname.gname.tradeSpecies; + sUnionRoomTrade.state = URTRADE_STATE_OFFERING; + memcpy(&gRfuPartnerCompatibilityData, &uroom->playerList->players[taskData[1]].rfu.data.compatibility, sizeof(gRfuPartnerCompatibilityData)); + gUnionRoomRequestedMonType = uroom->playerList->players[taskData[1]].rfu.data.tradeType; + gUnionRoomOfferedSpecies = uroom->playerList->players[taskData[1]].rfu.data.tradeSpecies; gFieldCallback = FieldCB_ContinueScriptUnionRoom; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); - BackUpURoomField0ToDecompressionBuffer(data); - sUnionRoomTrade.field_8 = taskData[1]; + CopyPlayerListToBuffer(uroom); + sUnionRoomTrade.offerPlayerId = taskData[1]; } break; - case 51: + case UR_STATE_TRADE_OFFER_MON: sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; - TryConnectToUnionRoomParent(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | IN_UNION_ROOM); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]); + TryConnectToUnionRoomParent(uroom->playerList->players[taskData[1]].rfu.name, &uroom->playerList->players[taskData[1]].rfu.data, ACTIVITY_TRADE | IN_UNION_ROOM); + CopyAndTranslatePlayerName2(gStringVar1, uroom->playerList->players[taskData[1]]); UR_PrintFieldMessage(gTexts_UR_CommunicatingWait[2]); - data->state = 25; + uroom->state = UR_STATE_TRY_COMMUNICATING; break; - case 26: - if (PrintOnTextbox(&data->textState, gStringVar4)) + case UR_STATE_PRINT_AND_EXIT: + if (PrintOnTextbox(&uroom->textState, gStringVar4)) { - HandleCancelTrade(TRUE); - UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0); - data->state = 4; + HandleCancelActivity(TRUE); + UpdateUnionGroupMemberFacing(taskData[0], taskData[1], uroom->playerList); + uroom->state = UR_STATE_MAIN; } break; - case 8: - if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = data->stateAfterPrint; + case UR_STATE_PRINT_MSG: + if (PrintOnTextbox(&uroom->textState, gStringVar4)) + uroom->state = uroom->stateAfterPrint; break; } } -void var_800D_set_xB(void) +void SetUsingUnionRoomStartMenu(void) { if (InUnionRoom() == TRUE) - gSpecialVar_Result = 11; + gSpecialVar_Result = UR_INTERACT_START_MENU; } -static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uroom) +static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom * uroom) { - if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == RFUCMD_SEND_PACKET) + if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & RFUCMD_MASK) == RFUCMD_SEND_PACKET) { uroom->recvActivityRequest[0] = gRecvCmds[1][1]; if (gRecvCmds[1][1] == (ACTIVITY_TRADE | IN_UNION_ROOM)) @@ -3432,24 +3081,24 @@ static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uroom) } } -static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uroom) +static bool32 HandleContactFromOtherPlayer(struct WirelessLink_URoom * uroom) { if (uroom->recvActivityRequest[0] != 0) { - s32 var = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &uroom->recvActivityRequest[0], uroom); - if (var == 0) + s32 id = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &uroom->recvActivityRequest[0], uroom); + if (id == 0) // Error { return TRUE; } - else if (var == 1) + else if (id == 1) // Recieve activity request { - uroom->state = 35; + uroom->state = UR_STATE_RECV_ACTIVITY_REQUEST; sPlayerCurrActivity = uroom->recvActivityRequest[0]; return FALSE; } - else if (var == 2) + else if (id == 2) // No activity { - uroom->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; SetCloseLinkCallback(); return FALSE; } @@ -3460,19 +3109,19 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * ur void InitUnionRoom(void) { - struct UnkStruct_URoom * ptr; + struct WirelessLink_URoom * data; sUnionRoomPlayerName[0] = EOS; if (QL_IS_PLAYBACK_STATE) return; CreateTask(Task_InitUnionRoom, 0); - sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; // Needed to match. - sUnionRoomMain.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom)); - sURoom = sUnionRoomMain.uRoom; - ptr->state = 0; - ptr->textState = 0; - ptr->field_10 = 0; - ptr->field_12 = 0; + sWirelessLinkMain.uRoom = sWirelessLinkMain.uRoom; // Needed to match. + sWirelessLinkMain.uRoom = data = AllocZeroed(sizeof(struct WirelessLink_URoom)); + sURoom = sWirelessLinkMain.uRoom; + data->state = 0; + data->textState = 0; + data->unknown = 0; + data->unreadPlayerId = 0; sUnionRoomPlayerName[0] = EOS; } @@ -3480,46 +3129,46 @@ static void Task_InitUnionRoom(u8 taskId) { s32 i; u8 text[32]; - struct UnkStruct_URoom * structPtr = sUnionRoomMain.uRoom; + struct WirelessLink_URoom * data = sWirelessLinkMain.uRoom; - switch (structPtr->state) + switch (data->state) { case 0: - structPtr->state = 1; + data->state = 1; break; case 1: - SetHostRfuGameData(ACTIVITY_SEARCH, 0, 0); + SetHostRfuGameData(ACTIVITY_SEARCH, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); RfuSetIgnoreError(TRUE); - structPtr->state = 2; + data->state = 2; break; case 2: - structPtr->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - BlankUnkStruct_x1CArray(structPtr->field_4->arr, 4); - structPtr->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - BlankUnkStruct_x1CArray(structPtr->field_C->arr, 4); - structPtr->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); - BlankUnkStruct_x20Array(structPtr->field_0->arr, UROOM_MAX_GROUP_COUNT); - structPtr->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - BlankUnkStruct_x20Array(&structPtr->field_8->arr[0], 1); - structPtr->field_20 = CreateTask_SearchForChildOrParent(structPtr->field_C, structPtr->field_4, LINK_GROUP_UNION_ROOM_INIT); - structPtr->state = 3; + data->incomingChildList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + ClearIncomingPlayerList(data->incomingChildList->players, RFU_CHILD_MAX); + data->incomingParentList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + ClearIncomingPlayerList(data->incomingParentList->players, RFU_CHILD_MAX); + data->playerList = AllocZeroed(MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); + ClearRfuPlayerList(data->playerList->players, MAX_UNION_ROOM_LEADERS); + data->spawnPlayer = AllocZeroed(sizeof(struct RfuPlayer)); + ClearRfuPlayerList(&data->spawnPlayer->players[0], 1); + data->searchTaskId = CreateTask_SearchForChildOrParent(data->incomingParentList, data->incomingChildList, LINK_GROUP_UNION_ROOM_INIT); + data->state = 3; break; case 3: switch (HandlePlayerListUpdate()) { - case 1: - case 2: + case PLIST_NEW_PLAYER: + case PLIST_RECENT_UPDATE: if (sUnionRoomPlayerName[0] == EOS) { for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { - if (structPtr->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - IntlConvPartnerUname(text, structPtr->field_0->arr[i]); - if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].gname_uname.gname.compatibility.playerTrainerId), text)) + CopyAndTranslatePlayerName2(text, data->playerList->players[i]); + if (PlayerHasMetTrainerBefore(ReadAsU16(data->playerList->players[i].rfu.data.compatibility.playerTrainerId), text)) { StringCopy(sUnionRoomPlayerName, text); break; @@ -3528,17 +3177,17 @@ static void Task_InitUnionRoom(u8 taskId) } } break; - case 3: + case PLIST_UNUSED: break; } break; case 4: - Free(structPtr->field_8); - Free(structPtr->field_0); - Free(structPtr->field_C); - Free(structPtr->field_4); - DestroyTask(structPtr->field_20); - Free(sUnionRoomMain.uRoom); + Free(data->spawnPlayer); + Free(data->playerList); + Free(data->incomingParentList); + Free(data->incomingChildList); + DestroyTask(data->searchTaskId); + Free(sWirelessLinkMain.uRoom); LinkRfu_Shutdown(); DestroyTask(taskId); break; @@ -3563,73 +3212,73 @@ static u8 HandlePlayerListUpdate(void) { s32 i; u8 j; - struct UnkStruct_URoom * structPtr = sUnionRoomMain.uRoom; - s32 r7 = 0; + struct WirelessLink_URoom * data = sWirelessLinkMain.uRoom; + s32 retVal = PLIST_NONE; - // If someone new joined, register them in field_8 + // If someone new joined, register them in spawnPlayer for (i = 0; i < RFU_CHILD_MAX; i++) { - if (AreGnameUnameDifferent(&structPtr->field_C->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy) == TRUE) + if (ArePlayersDifferent(&data->incomingParentList->players[i].rfu, &sRfuPlayerData_Dummy) == TRUE) { - structPtr->field_8->arr[0].gname_uname = structPtr->field_C->arr[i].gname_uname; - structPtr->field_8->arr[0].field_18 = 0; - structPtr->field_8->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - structPtr->field_8->arr[0].field_1B = 1; - return 4; + data->spawnPlayer->players[0].rfu = data->incomingParentList->players[i].rfu; + data->spawnPlayer->players[0].timeoutCounter = 0; + data->spawnPlayer->players[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->spawnPlayer->players[0].newPlayerCountdown = 1; + return PLIST_CONTACTED; } } // Handle changes to existing player statuses - for (j = 0; j < UROOM_MAX_GROUP_COUNT; j++) + for (j = 0; j < MAX_UNION_ROOM_LEADERS; j++) { - if (structPtr->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) + if (data->playerList->players[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) { - i = Findx20Inx1CArray(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]); + i = GetNewIncomingPlayerId(&data->playerList->players[j], &data->incomingChildList->players[0]); if (i != 0xFF) { - if (structPtr->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { // New join in queue - if (AreUnionRoomPlayerGnamesDifferent(&structPtr->field_0->arr[j].gname_uname, &structPtr->field_4->arr[i].gname_uname)) + if (ArePlayerDataDifferent(&data->playerList->players[j].rfu, &data->incomingChildList->players[i].rfu)) { // Just joined, copy their names - structPtr->field_0->arr[j].gname_uname = structPtr->field_4->arr[i].gname_uname; - structPtr->field_0->arr[j].field_1B = 0x40; - r7 = 1; + data->playerList->players[j].rfu = data->incomingChildList->players[i].rfu; + data->playerList->players[j].newPlayerCountdown = 64; + retVal = PLIST_NEW_PLAYER; } - else if (structPtr->field_0->arr[j].field_1B != 0) + else if (data->playerList->players[j].newPlayerCountdown != 0) { - structPtr->field_0->arr[j].field_1B--; - if (structPtr->field_0->arr[j].field_1B == 0) - r7 = 2; + data->playerList->players[j].newPlayerCountdown--; + if (data->playerList->players[j].newPlayerCountdown == 0) + retVal = PLIST_RECENT_UPDATE; } } else { // New join, queue them - structPtr->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - structPtr->field_0->arr[j].field_1B = 0; - r7 = 2; + data->playerList->players[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[j].newPlayerCountdown = 0; + retVal = 2; } - structPtr->field_0->arr[j].field_18 = 0; + data->playerList->players[j].timeoutCounter = 0; } - else if (structPtr->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) + else if (data->playerList->players[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { // Person may have disconnected. Give them 10 seconds. - structPtr->field_0->arr[j].field_18++; - if (structPtr->field_0->arr[j].field_18 >= 600) + data->playerList->players[j].timeoutCounter++; + if (data->playerList->players[j].timeoutCounter >= 600) { - structPtr->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; - r7 = 2; + data->playerList->players[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + retVal = PLIST_RECENT_UPDATE; } } - else if (structPtr->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) + else if (data->playerList->players[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) { // Person dropped. Wait 15 seconds, then remove them. - structPtr->field_0->arr[j].field_18++; - if (structPtr->field_0->arr[j].field_18 >= 900) + data->playerList->players[j].timeoutCounter++; + if (data->playerList->players[j].timeoutCounter >= 900) { - BlankUnkStruct_x20Array(&structPtr->field_0->arr[j], 1); + ClearRfuPlayerList(&data->playerList->players[j], 1); } } } @@ -3638,107 +3287,91 @@ static u8 HandlePlayerListUpdate(void) // Update the players list for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Appendx1Ctox20(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], UROOM_MAX_GROUP_COUNT) != 0xFF) - r7 = 1; + if (TryAddIncomingPlayerToList(&data->playerList->players[0], &data->incomingChildList->players[i], MAX_UNION_ROOM_LEADERS) != 0xFF) + retVal = PLIST_NEW_PLAYER; } - return r7; + return retVal; } static void Task_SearchForChildOrParent(u8 taskId) { s32 i, j; - struct UnionGnameUnamePair gname_uname; - struct UnkStruct_Main4 ** ptr = (void *) gTasks[taskId].data; - bool8 parent_child; + struct RfuPlayerData rfu; + struct RfuIncomingPlayerList ** list = (void *) gTasks[taskId].data; + bool8 isParent; for (i = 0; i < RFU_CHILD_MAX; i++) { - parent_child = Rfu_GetCompatiblePlayerData(&gname_uname.gname, gname_uname.uname, i); - if (!IsPartnerActivityAcceptable(gname_uname.gname.activity, gTasks[taskId].data[4])) - { - gname_uname = sUnionGnameUnamePair_Dummy; - } - if (gname_uname.gname.compatibility.language == LANGUAGE_JAPANESE) - { - gname_uname = sUnionGnameUnamePair_Dummy; - } - if (parent_child == MODE_CHILD) + isParent = Rfu_GetCompatiblePlayerData(&rfu.data, rfu.name, i); + if (!IsPartnerActivityAcceptable(rfu.data.activity, gTasks[taskId].data[4])) + rfu = sRfuPlayerData_Dummy; + if (rfu.data.compatibility.language == LANGUAGE_JAPANESE) + rfu = sRfuPlayerData_Dummy; + + if (!isParent) { for (j = 0; j < i; j++) { - if (!AreGnameUnameDifferent(&ptr[1]->arr[j].gname_uname, &gname_uname)) - { - gname_uname = sUnionGnameUnamePair_Dummy; - } + if (!ArePlayersDifferent(&list[1]->players[j].rfu, &rfu)) + rfu = sRfuPlayerData_Dummy; } - ptr[1]->arr[i].gname_uname = gname_uname; - ptr[1]->arr[i].active = AreGnameUnameDifferent(&ptr[1]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); + list[1]->players[i].rfu = rfu; + list[1]->players[i].active = ArePlayersDifferent(&list[1]->players[i].rfu, &sRfuPlayerData_Dummy); } else { - ptr[0]->arr[i].gname_uname = gname_uname; - ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); + list[0]->players[i].rfu = rfu; + list[0]->players[i].active = ArePlayersDifferent(&list[0]->players[i].rfu, &sRfuPlayerData_Dummy); } } } -static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4_parent, struct UnkStruct_Main4 * main4_child, u32 linkGroup) +static u8 CreateTask_SearchForChildOrParent(struct RfuIncomingPlayerList * parentList, struct RfuIncomingPlayerList * childList, u32 linkGroup) { u8 taskId = CreateTask(Task_SearchForChildOrParent, 0); - struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data; - data[0] = main4_parent; - data[1] = main4_child; + struct RfuIncomingPlayerList ** data = (void *)gTasks[taskId].data; + data[0] = parentList; + data[1] = childList; gTasks[taskId].data[4] = linkGroup; return taskId; } -static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId) +static void Task_ListenForCompatiblePartners(u8 taskId) { s32 i, j; - struct UnkStruct_Main4 ** ptr = (void *) gTasks[taskId].data; + struct RfuIncomingPlayerList ** list = (void *) gTasks[taskId].data; for (i = 0; i < RFU_CHILD_MAX; i++) { - Rfu_GetCompatiblePlayerData(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i); - if (!IsPartnerActivityAcceptable(ptr[0]->arr[i].gname_uname.gname.activity, gTasks[taskId].data[2])) - { - ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy; - } + Rfu_GetCompatiblePlayerData(&list[0]->players[i].rfu.data, list[0]->players[i].rfu.name, i); + if (!IsPartnerActivityAcceptable(list[0]->players[i].rfu.data.activity, gTasks[taskId].data[2])) + list[0]->players[i].rfu = sRfuPlayerData_Dummy; + for (j = 0; j < i; j++) { - if (!AreGnameUnameDifferent(&ptr[0]->arr[j].gname_uname, &ptr[0]->arr[i].gname_uname)) - { - ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy; - } + if (!ArePlayersDifferent(&list[0]->players[j].rfu, &list[0]->players[i].rfu)) + list[0]->players[i].rfu = sRfuPlayerData_Dummy; } - ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); + list[0]->players[i].active = ArePlayersDifferent(&list[0]->players[i].rfu, &sRfuPlayerData_Dummy); } } -static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 linkGroup) +static bool32 HasWonderCardOrNewsByLinkGroup(struct RfuGameData * data, s16 linkGroup) { if (linkGroup == LINK_GROUP_WONDER_CARD) { - if (!gname->compatibility.hasCard) - { + if (!data->compatibility.hasCard) return FALSE; - } else - { return TRUE; - } } else if (linkGroup == LINK_GROUP_WONDER_NEWS) { - if (!gname->compatibility.hasNews) - { + if (!data->compatibility.hasNews) return FALSE; - } else - { return TRUE; - } } else { @@ -3746,35 +3379,34 @@ static bool32 GetGnameWonderFlagByLinkGroup(struct RfuGameData * gname, s16 link } } -static void Task_ListenForPartnersWithSerial7F7D(u8 taskId) +static void Task_ListenForWonderDistributor(u8 taskId) { s32 i; - struct UnkStruct_Main4 ** ptr = (void *) gTasks[taskId].data; + struct RfuIncomingPlayerList ** list = (void *) gTasks[taskId].data; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu_GetWonderDistributorPlayerData(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i)) - { - GetGnameWonderFlagByLinkGroup(&ptr[0]->arr[i].gname_uname.gname, gTasks[taskId].data[2]); - } - ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); + if (Rfu_GetWonderDistributorPlayerData(&list[0]->players[i].rfu.data, list[0]->players[i].rfu.name, i)) + HasWonderCardOrNewsByLinkGroup(&list[0]->players[i].rfu.data, gTasks[taskId].data[2]); + + list[0]->players[i].active = ArePlayersDifferent(&list[0]->players[i].rfu, &sRfuPlayerData_Dummy); } } -static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup) +static u8 CreateTask_ListenForCompatiblePartners(struct RfuIncomingPlayerList * main4, u32 linkGroup) { - u8 taskId = CreateTask(Task_ListenForPartnersWithCompatibleSerialNos, 0); - struct UnkStruct_Main4 ** ptr = (void *) gTasks[taskId].data; - ptr[0] = main4; + u8 taskId = CreateTask(Task_ListenForCompatiblePartners, 0); + struct RfuIncomingPlayerList ** list = (void *) gTasks[taskId].data; + list[0] = main4; gTasks[taskId].data[2] = linkGroup; return taskId; } -static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup) +static u8 CreateTask_ListenForWonderDistributor(struct RfuIncomingPlayerList * main4, u32 linkGroup) { - u8 taskId = CreateTask(Task_ListenForPartnersWithSerial7F7D, 0); - struct UnkStruct_Main4 ** ptr = (void *) gTasks[taskId].data; - ptr[0] = main4; + u8 taskId = CreateTask(Task_ListenForWonderDistributor, 0); + struct RfuIncomingPlayerList ** list = (void *) gTasks[taskId].data; + list[0] = main4; gTasks[taskId].data[2] = linkGroup; return taskId; } @@ -3788,16 +3420,12 @@ static bool32 UR_PrintFieldMessage(const u8 *src) return FALSE; } -static bool32 UR_RunTextPrinters_CheckPrinter0Active(void) +static bool32 UR_RunTextPrinters(void) { if (!RunTextPrinters_CheckPrinter0Active()) - { return TRUE; - } else - { return FALSE; - } } static bool8 PrintOnTextbox(u8 *textState, const u8 *str) @@ -3822,36 +3450,34 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str) return FALSE; } -static s8 UnionRoomHandleYesNo(u8 *state_p, bool32 no_draw) +static s8 UnionRoomHandleYesNo(u8 *state, bool32 noDraw) { - s8 r1; + s8 input; - switch (*state_p) + switch (*state) { case 0: - if (no_draw) - { + if (noDraw) return -3; - } DisplayYesNoMenuDefaultYes(); - (*state_p)++; + (*state)++; break; case 1: - if (no_draw) + if (noDraw) { DestroyYesNoMenu(); - *state_p = 0; + *state = 0; return -3; } - r1 = Menu_ProcessInputNoWrapClearOnChoose(); - if (r1 == -1 || r1 == 0 || r1 == 1) + input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input == MENU_B_PRESSED || input == 0 || input == 1) { - *state_p = 0; - return r1; + *state = 0; + return input; } break; } - return -2; + return MENU_NOTHING_CHOSEN; } static u8 CreateTradeBoardWindow(const struct WindowTemplate * template) @@ -3859,7 +3485,7 @@ static u8 CreateTradeBoardWindow(const struct WindowTemplate * template) u8 windowId = AddWindow(template); DrawStdWindowFrame(windowId, FALSE); FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - UR_AddTextPrinterParameterized(windowId, 0, gText_UR_NameWantedOfferLv, 8, 1, UR_COLOR_DN5_DN6_LTB); + PrintUnionRoomText(windowId, FONT_0, gText_UR_NameWantedOfferLv, 8, 1, UR_COLOR_TRADE_BOARD_OTHER); PutWindowTilemap(windowId); CopyWindowToVram(windowId, COPYWIN_GFX); return windowId; @@ -3871,86 +3497,90 @@ static void DeleteTradeBoardWindow(u8 windowId) RemoveWindow(windowId); } -static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate) +static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMenuId, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate) { s32 input; - switch (*state_p) + switch (*state) { case 0: - *win_id_p = AddWindow(winTemplate); - DrawStdWindowFrame(*win_id_p, FALSE); + *windowId = AddWindow(winTemplate); + DrawStdWindowFrame(*windowId, FALSE); gMultiuseListMenuTemplate = *menuTemplate; - gMultiuseListMenuTemplate.windowId = *win_id_p; - *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - CopyWindowToVram(*win_id_p, TRUE); - (*state_p)++; + gMultiuseListMenuTemplate.windowId = *windowId; + *listMenuId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + CopyWindowToVram(*windowId, TRUE); + (*state)++; break; case 1: - input = ListMenu_ProcessInput(*list_menu_id_p); + input = ListMenu_ProcessInput(*listMenuId); if (JOY_NEW(A_BUTTON)) { - DestroyListMenuTask(*list_menu_id_p, NULL, NULL); - ClearStdWindowAndFrame(*win_id_p, TRUE); - RemoveWindow(*win_id_p); - *state_p = 0; + DestroyListMenuTask(*listMenuId, NULL, NULL); + ClearStdWindowAndFrame(*windowId, TRUE); + RemoveWindow(*windowId); + *state = 0; return input; } else if (JOY_NEW(B_BUTTON)) { - DestroyListMenuTask(*list_menu_id_p, NULL, NULL); - ClearStdWindowAndFrame(*win_id_p, TRUE); - RemoveWindow(*win_id_p); - *state_p = 0; - return -2; + DestroyListMenuTask(*listMenuId, NULL, NULL); + ClearStdWindowAndFrame(*windowId, TRUE); + RemoveWindow(*windowId); + *state = 0; + return LIST_CANCEL; } break; } - return -1; + return LIST_NOTHING_CHOSEN; } -static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders) +static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8 *headerWindowId, + const struct WindowTemplate * winTemplate, + const struct ListMenuTemplate * menuTemplate, + struct RfuPlayerList * list) { s32 input; - s32 r4; + s32 idx; - switch (*state_p) + switch (*state) { case 0: - *trade_board_win_id_p = CreateTradeBoardWindow(&sTradeBoardWindowTemplate); - *win_id_p = AddWindow(winTemplate); - DrawStdWindowFrame(*win_id_p, FALSE); + *headerWindowId = CreateTradeBoardWindow(&sWindowTemplate_TradingBoardHeader); + *mainWindowId = AddWindow(winTemplate); + DrawStdWindowFrame(*mainWindowId, FALSE); gMultiuseListMenuTemplate = *menuTemplate; - gMultiuseListMenuTemplate.windowId = *win_id_p; - *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); - CopyWindowToVram(*win_id_p, TRUE); - (*state_p)++; + gMultiuseListMenuTemplate.windowId = *mainWindowId; + *listMenuId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); + CopyWindowToVram(*mainWindowId, TRUE); + (*state)++; break; case 1: - input = ListMenu_ProcessInput(*list_menu_id_p); + input = ListMenu_ProcessInput(*listMenuId); if (JOY_NEW(A_BUTTON | B_BUTTON)) { - if (input == UROOM_MAX_GROUP_COUNT || JOY_NEW(B_BUTTON)) + // Exit or B button + if (input == 8 || JOY_NEW(B_BUTTON)) { - DestroyListMenuTask(*list_menu_id_p, NULL, NULL); - ClearStdWindowAndFrame(*win_id_p, TRUE); - RemoveWindow(*win_id_p); - DeleteTradeBoardWindow(*trade_board_win_id_p); - *state_p = 0; - return -2; + DestroyListMenuTask(*listMenuId, NULL, NULL); + ClearStdWindowAndFrame(*mainWindowId, TRUE); + RemoveWindow(*mainWindowId); + DeleteTradeBoardWindow(*headerWindowId); + *state = 0; + return LIST_CANCEL; } else { - r4 = GetIndexOfNthTradeBoardOffer(traders->arr, input); - if (r4 >= 0) + idx = GetIndexOfNthTradeBoardOffer(list->players, input); + if (idx >= 0) { - DestroyListMenuTask(*list_menu_id_p, NULL, NULL); - ClearStdWindowAndFrame(*win_id_p, TRUE); - RemoveWindow(*win_id_p); - DeleteTradeBoardWindow(*trade_board_win_id_p); - *state_p = 0; - return r4; + DestroyListMenuTask(*listMenuId, NULL, NULL); + ClearStdWindowAndFrame(*mainWindowId, TRUE); + RemoveWindow(*mainWindowId); + DeleteTradeBoardWindow(*headerWindowId); + *state = 0; + return idx; } else { @@ -3961,23 +3591,23 @@ static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, break; } - return -1; + return LIST_NOTHING_CHOSEN; } -static void UR_BlankBg0(void) +static void UR_ClearBg0(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); CopyBgTilemapBufferToVram(0); } -static void JoinGroup_BlankBg0AndEnableScriptContexts(void) +static void JoinGroup_EnableScriptContexts(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); CopyBgTilemapBufferToVram(0); ScriptContext_Enable(); } -static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) +static void PrintUnionRoomText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) { struct TextPrinterTemplate printerTemplate; @@ -3993,49 +3623,49 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str gTextFlags.useAlternateDownArrow = FALSE; switch (colorIdx) { - case UR_COLOR_DKE_WHT_LTE: + case UR_COLOR_DEFAULT: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_DARK_GRAY; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GRAY; break; - case UR_COLOR_RED_WHT_LTR: + case UR_COLOR_RED: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_RED; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_RED; break; - case UR_COLOR_GRN_WHT_LTG: + case UR_COLOR_GREEN: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_GREEN; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREEN; break; - case UR_COLOR_WHT_WHT_LTE: + case UR_COLOR_WHITE: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GRAY; break; - case UR_COLOR_WHT_DKE_LTE: + case UR_COLOR_CANCEL: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.bgColor = TEXT_COLOR_DARK_GRAY; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GRAY; break; - case UR_COLOR_GRN_DN6_LTB: + case UR_COLOR_TRADE_BOARD_SELF: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_LIGHT_GREEN; printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE; break; - case UR_COLOR_DN5_DN6_LTB: + case UR_COLOR_TRADE_BOARD_OTHER: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_DYNAMIC_COLOR_5; @@ -4044,114 +3674,111 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str break; } - AddTextPrinter(&printerTemplate, 0xFF, NULL); + AddTextPrinter(&printerTemplate, TEXT_SKIP_DRAW, NULL); } -static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * x20arr, u8 count) +static void ClearRfuPlayerList(struct RfuPlayer * x20arr, u8 count) { s32 i; for (i = 0; i < count; i++) { - x20arr[i].gname_uname = sUnionGnameUnamePair_Dummy; - x20arr[i].field_18 = 0xFF; + x20arr[i].rfu = sRfuPlayerData_Dummy; + x20arr[i].timeoutCounter = 0xFF; x20arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - x20arr[i].field_1A_1 = FALSE; - x20arr[i].field_1B = 0; + x20arr[i].useRedText = FALSE; + x20arr[i].newPlayerCountdown = 0; } } -static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * x1Carr, u8 count) +static void ClearIncomingPlayerList(struct RfuIncomingPlayer * x1Carr, u8 count) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - x1Carr[i].gname_uname = sUnionGnameUnamePair_Dummy; + x1Carr[i].rfu = sRfuPlayerData_Dummy; x1Carr[i].active = FALSE; } } -static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * left, const struct UnionGnameUnamePair * right) +// Checks player name and trainer id, returns TRUE if they are not the same +static bool8 ArePlayersDifferent(struct RfuPlayerData * player1, const struct RfuPlayerData * player2) { s32 i; for (i = 0; i < 2; i++) { - if (left->gname.compatibility.playerTrainerId[i] != right->gname.compatibility.playerTrainerId[i]) - { + if (player1->data.compatibility.playerTrainerId[i] != player2->data.compatibility.playerTrainerId[i]) return TRUE; - } } for (i = 0; i < RFU_USER_NAME_LENGTH; i++) { - if (left->uname[i] != right->uname[i]) - { + if (player1->name[i] != player2->name[i]) return TRUE; - } } return FALSE; } -static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * left, struct UnionGnameUnamePair * right) +static bool32 ArePlayerDataDifferent(struct RfuPlayerData * player1, struct RfuPlayerData * player2) { s32 i; - if (left->gname.activity != right->gname.activity) + if (player1->data.activity != player2->data.activity) return TRUE; - if (left->gname.startedActivity != right->gname.startedActivity) + if (player1->data.startedActivity != player2->data.startedActivity) return TRUE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (left->gname.partnerInfo[i] != right->gname.partnerInfo[i]) + if (player1->data.partnerInfo[i] != player2->data.partnerInfo[i]) return TRUE; } - if (left->gname.tradeSpecies != right->gname.tradeSpecies) + if (player1->data.tradeSpecies != player2->data.tradeSpecies) return TRUE; - if (left->gname.tradeType != right->gname.tradeType) + if (player1->data.tradeType != player2->data.tradeType) return TRUE; return FALSE; } -static u32 Findx20Inx1CArray(struct UnkStruct_x20 * x20, struct UnkStruct_x1C * x1Carr) +static u32 GetNewIncomingPlayerId(struct RfuPlayer * player, struct RfuIncomingPlayer * incomingPlayer) { u8 result = 0xFF; s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (x1Carr[i].active && !AreGnameUnameDifferent(&x20->gname_uname, &x1Carr[i].gname_uname)) + if (incomingPlayer[i].active && !ArePlayersDifferent(&player->rfu, &incomingPlayer[i].rfu)) { result = i; - x1Carr[i].active = FALSE; + incomingPlayer[i].active = FALSE; } } return result; } -static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x1C, u8 count) +static u8 TryAddIncomingPlayerToList(struct RfuPlayer * players, struct RfuIncomingPlayer * incomingPlayer, u8 count) { s32 i; - if (x1C->active) + if (incomingPlayer->active) { for (i = 0; i < count; i++) { - if (x20arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE) + if (players[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE) { - x20arr[i].gname_uname = x1C->gname_uname; - x20arr[i].field_18 = 0; - x20arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - x20arr[i].field_1B = 0x40; - x1C->active = FALSE; + players[i].rfu = incomingPlayer->rfu; + players[i].timeoutCounter = 0; + players[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + players[i].newPlayerCountdown = 0x40; + incomingPlayer->active = FALSE; return i; } } @@ -4160,62 +3787,59 @@ static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x return 0xFF; } -static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id) +static void PrintGroupMemberOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlayer * player, u8 colorIdx, u8 id) { u8 activity; - u8 id_str[6]; + u8 trainerId[6]; u8 uname[30]; ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, gText_UR_Colon); - UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_0, gStringVar4, x, y, UR_COLOR_DEFAULT); x += 18; - activity = group->gname_uname.gname.activity; - if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM)) + activity = player->rfu.data.activity; + if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM)) { - IntlConvPartnerUname(uname, *group); - UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx); - ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.compatibility.playerTrainerId[0] | (group->gname_uname.gname.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + CopyAndTranslatePlayerName2(uname, *player); + PrintUnionRoomText(windowId, FONT_2, uname, x, y, colorIdx); + ConvertIntToDecimalStringN(trainerId, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gText_UR_ID); - StringAppend(gStringVar4, id_str); + StringAppend(gStringVar4, trainerId); x += 77; - UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, colorIdx); + PrintUnionRoomText(windowId, FONT_0, gStringVar4, x, y, colorIdx); } } -static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id) +static void PrintGroupCandidateOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlayer * player, u8 colorIdx, u8 id) { u8 id_str[6]; u8 uname[30]; - if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - IntlConvPartnerUname(uname, *group); - UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx); - ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.compatibility.playerTrainerId[0] | (group->gname_uname.gname.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + CopyAndTranslatePlayerName2(uname, *player); + PrintUnionRoomText(windowId, FONT_2, uname, x, y, colorIdx); + ConvertIntToDecimalStringN(id_str, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gText_UR_ID); StringAppend(gStringVar4, id_str); x += 71; - UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, colorIdx); + PrintUnionRoomText(windowId, FONT_0, gStringVar4, x, y, colorIdx); } } -static bool32 PlayerIsTalkingToUnionRoomAide(void) +static bool32 IsPlayerFacingTradingBoard(void) { s16 x, y; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - if (x != 9) - { + + if (x != 2 + MAP_OFFSET) return FALSE; - } - if (y != 8) - { + + if (y != 1 + MAP_OFFSET) return FALSE; - } - if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) - { + + if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) return TRUE; - } return FALSE; } @@ -4230,30 +3854,30 @@ static u32 GetResponseIdx_InviteToURoomActivity(s32 activity) return 2; case ACTIVITY_CARD: return 3; - case ACTIVITY_MLTBATTLE: + case ACTIVITY_BATTLE_MULTI: default: return 0; } } -static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * x20) +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct RfuPlayer * player) { - u8 sp0[30]; - IntlConvPartnerUname(sp0, *x20); - return PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.compatibility.playerTrainerId), sp0); + u8 name[30]; + CopyAndTranslatePlayerName2(name, *player); + return PlayerHasMetTrainerBefore(ReadAsU16(player->rfu.data.compatibility.playerTrainerId), name); } -static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender) +static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList * list, bool8 overrideGender, u8 playerIdx, u32 playerGender) { bool32 metBefore; - struct UnkStruct_x20 * x20 = &main0->arr[playerIdx]; + struct RfuPlayer * player = &list->players[playerIdx]; - if (!x20->gname_uname.gname.startedActivity && overrideGender == 0) + if (!player->rfu.data.startedActivity && !overrideGender) { - IntlConvPartnerUname(gStringVar1, *x20); - metBefore = PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.compatibility.playerTrainerId), gStringVar1); - if (x20->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + CopyAndTranslatePlayerName2(gStringVar1, *player); + metBefore = PlayerHasMetTrainerBefore(ReadAsU16(player->rfu.data.compatibility.playerTrainerId), gStringVar1); + if (player->rfu.data.activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { StringExpandPlaceholders(gStringVar4, gTexts_UR_JoinChat[metBefore][playerGender]); return 2; @@ -4266,14 +3890,13 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, } else { - IntlConvPartnerUname(gStringVar1, *x20); - if (overrideGender != 0) + CopyAndTranslatePlayerName2(gStringVar1, *player); + if (overrideGender) + playerGender = (player->rfu.data.compatibility.playerTrainerId[overrideGender + 1] >> 3) & 1; + + switch (player->rfu.data.activity & 0x3F) { - playerGender = (x20->gname_uname.gname.compatibility.playerTrainerId[overrideGender + 1] >> 3) & 1; - } - switch (x20->gname_uname.gname.activity & 0x3F) - { - case ACTIVITY_BATTLE: + case ACTIVITY_BATTLE_SINGLE: StringExpandPlaceholders(gStringVar4, gTexts_UR_BattleReaction[playerGender][Random() % 4]); break; case ACTIVITY_TRADE: @@ -4293,91 +3916,85 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, } } -static void nullsub_92(u8 windowId, u32 itemId, u8 y) +static void ItemPrintFunc_Unused(u8 windowId, u32 itemId, u8 y) { } -static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * gname, const u8 * uname, u8 colorIdx) +static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * data, const u8 * playerName, u8 colorIdx) { - u8 level_t[4]; - u16 species = gname->tradeSpecies; - u8 type = gname->tradeType; - u8 level = gname->tradeLevel; + u8 levelStr[4]; + u16 species = data->tradeSpecies; + u8 type = data->tradeType; + u8 level = data->tradeLevel; - UR_AddTextPrinterParameterized(windowId, 2, uname, 8, y, colorIdx); + PrintUnionRoomText(windowId, FONT_2, playerName, 8, y, colorIdx); if (species == SPECIES_EGG) { - UR_AddTextPrinterParameterized(windowId, 2, gText_UR_EggTrade, 0x44, y, colorIdx); + PrintUnionRoomText(windowId, FONT_2, gText_UR_EggTrade, 68, y, colorIdx); } else { - BlitMoveInfoIcon(windowId, type + 1, 0x44, y); - UR_AddTextPrinterParameterized(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx); - ConvertIntToDecimalStringN(level_t, level, STR_CONV_MODE_LEFT_ALIGN, 3); - UR_AddTextPrinterParameterized(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx); + BlitMoveInfoIcon(windowId, type + 1, 68, y); + PrintUnionRoomText(windowId, FONT_2, gSpeciesNames[species], 118, y, colorIdx); + ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_LEFT_ALIGN, 3); + PrintUnionRoomText(windowId, FONT_2, levelStr, GetStringRightAlignXOffset(2, levelStr, 218), y, colorIdx); } } static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) { - struct UnkStruct_Leader * leader = sUnionRoomMain.leader; - struct RfuGameData * rfu; + struct WirelessLink_Leader * leader = sWirelessLinkMain.leader; + struct RfuGameData * gameData; s32 i, j; - u8 uname[RFU_USER_NAME_LENGTH]; + u8 playerName[RFU_USER_NAME_LENGTH]; - if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y) + if (itemId == LIST_HEADER && y == sListMenuTemplate_TradeBoard.upText_Y) { - rfu = GetHostRfuGameData(); - if (rfu->tradeSpecies != SPECIES_NONE) - { - TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); - } + gameData = GetHostRfuGameData(); + if (gameData->tradeSpecies != SPECIES_NONE) + TradeBoardPrintItemInfo(windowId, y, gameData, gSaveBlock2Ptr->playerName, 5); } else { j = 0; - for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { - if (leader->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->field_0->arr[i].gname_uname.gname.tradeSpecies != SPECIES_NONE) - { + if (leader->playerList->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->playerList->players[i].rfu.data.tradeSpecies != SPECIES_NONE) j++; - } + if (j == itemId + 1) { - IntlConvPartnerUname(uname, leader->field_0->arr[i]); - TradeBoardPrintItemInfo(windowId, y, &leader->field_0->arr[i].gname_uname.gname, uname, 6); + CopyAndTranslatePlayerName2(playerName, leader->playerList->players[i]); + TradeBoardPrintItemInfo(windowId, y, &leader->playerList->players[i].rfu.data, playerName, UR_COLOR_TRADE_BOARD_OTHER); break; } } } } -static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n) +static s32 GetIndexOfNthTradeBoardOffer(struct RfuPlayer * players, s32 n) { s32 i; s32 j = 0; - for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { - if (x20[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && x20[i].gname_uname.gname.tradeSpecies != SPECIES_NONE) - { + if (players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && players[i].rfu.data.tradeSpecies != SPECIES_NONE) j++; - } + if (j == n + 1) - { return i; - } } return -1; } -static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 * main0) +static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct RfuPlayerList * list) { - return main0->arr[playerIdx].gname_uname.gname.playerGender; + return list->players[playerIdx].rfu.data.playerGender; } -static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species) +static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { s32 i; @@ -4387,9 +4004,7 @@ static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (species == SPECIES_EGG) - { return UR_TRADE_MATCH; - } } return UR_TRADE_NOEGG; } @@ -4399,9 +4014,7 @@ static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) - { return UR_TRADE_MATCH; - } } return UR_TRADE_NOTYPE; } @@ -4411,7 +4024,7 @@ static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender) { switch (activity) { - case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gTexts_UR_BattleDeclined[playerGender]); break; case ACTIVITY_CHAT | IN_UNION_ROOM: @@ -4433,7 +4046,7 @@ static void GetURoomActivityStartMsg(u8 *dst, u8 activity) switch (activity) { - case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: StringCopy(dst, gTexts_UR_StartActivity[mpId][gender][0]); break; case ACTIVITY_TRADE | IN_UNION_ROOM: @@ -4445,15 +4058,15 @@ static void GetURoomActivityStartMsg(u8 *dst, u8 activity) } } -static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_p, struct UnkStruct_URoom * arg3) +static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activityData, struct WirelessLink_URoom * uroom) { s32 result = 0; u16 species = SPECIES_NONE; s32 i; - switch (activity_p[0]) + switch (activityData[0]) { - case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gText_UR_BattleChallenge); result = 1; break; @@ -4462,15 +4075,15 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_ result = 1; break; case ACTIVITY_TRADE | IN_UNION_ROOM: - ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); - StringCopy(arg3->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]); + ConvertIntToDecimalStringN(uroom->activityRequestStrbufs[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(uroom->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]); for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuLinkStatus->partner[i].serialNo == 0x0002) + if (gRfuLinkStatus->partner[i].serialNo == RFU_SERIAL_GAME) { - ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[2], activity_p[2], STR_CONV_MODE_LEFT_ALIGN, 3); - StringCopy(arg3->activityRequestStrbufs[3], gSpeciesNames[activity_p[1]]); - species = activity_p[1]; + ConvertIntToDecimalStringN(uroom->activityRequestStrbufs[2], activityData[2], STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(uroom->activityRequestStrbufs[3], gSpeciesNames[activityData[1]]); + species = activityData[1]; break; } } @@ -4481,9 +4094,7 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_ else { for (i = 0; i < RFU_CHILD_MAX; i++) - { - DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->activityRequestStrbufs[i]); - } + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, uroom->activityRequestStrbufs[i]); DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gText_UR_OfferToTradeMon); } result = 1; @@ -4492,8 +4103,7 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_ StringExpandPlaceholders(dst, gText_UR_ShowTrainerCard); result = 1; break; - case IN_UNION_ROOM: - // Chat dropped + case ACTIVITY_NONE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gText_UR_ChatDropped); result = 2; break; @@ -4502,7 +4112,7 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_ return result; } -static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * uroom) +static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom * uroom) { if (gRecvCmds[0][1] != 0) { @@ -4534,11 +4144,9 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) for (i = 0; i < gPlayerPartyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 + if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= UNION_ROOM_MAX_LEVEL && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) - { count++; - } } if (count > 1) @@ -4549,12 +4157,12 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) static void ResetUnionRoomTrade(struct UnionRoomTrade * uroomTrade) { - uroomTrade->field_0 = 0; + uroomTrade->state = URTRADE_STATE_NONE; uroomTrade->type = 0; uroomTrade->playerPersonality = 0; - uroomTrade->playerSpecies = 0; + uroomTrade->playerSpecies = SPECIES_NONE; uroomTrade->playerLevel = 0; - uroomTrade->species = 0; + uroomTrade->species = SPECIES_NONE; uroomTrade->level = 0; uroomTrade->personality = 0; } @@ -4608,14 +4216,10 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mul { cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); if (cur_personality != personality) - { continue; - } cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (cur_species != species) - { continue; - } response = i; break; } @@ -4623,26 +4227,26 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mul return response; } -static void HandleCancelTrade(bool32 unlockObjs) +static void HandleCancelActivity(bool32 setData) { - UR_BlankBg0(); + UR_ClearBg0(); UnlockPlayerFieldControls(); UnionRoom_UnlockPlayerAndChatPartner(); sPlayerCurrActivity = 0; - if (unlockObjs) + if (setData) { SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); UpdateGameData_SetActivity(IN_UNION_ROOM, 0, FALSE); } } -static void UR_EnableScriptContext2AndFreezeObjectEvents(void) +static void StartScriptInteraction(void) { LockPlayerFieldControls(); FreezeObjects_WaitForPlayer(); } -static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer) +static u8 GetLinkPlayerInfoFlags(s32 linkPlayer) { u8 retval = 0x80; retval |= gLinkPlayers[linkPlayer].gender << 3; @@ -4650,17 +4254,17 @@ static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer) return retval; } -static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom) +static u8 GetActivePartnersInfo(struct WirelessLink_URoom * uroom) { - u8 retVal = 0x80; + u8 retVal = PINFO_ACTIVE_FLAG; u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (uroom->field_C->arr[i].active) + if (uroom->incomingParentList->players[i].active) { - retVal |= uroom->field_C->arr[i].gname_uname.gname.playerGender << 3; - retVal |= uroom->field_C->arr[i].gname_uname.gname.compatibility.playerTrainerId[0] & 7; + retVal |= uroom->incomingParentList->players[i].rfu.data.playerGender << PINFO_GENDER_SHIFT; + retVal |= uroom->incomingParentList->players[i].rfu.data.compatibility.playerTrainerId[0] & PINFO_TID_MASK; break; } } @@ -4668,7 +4272,7 @@ static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom) return retVal; } -static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uroom, bool8 parent_child) +static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom * uroom, bool8 isParent) { struct TrainerCard * trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; s32 i; @@ -4676,61 +4280,57 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro DynamicPlaceholderTextUtil_Reset(); - StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[GetUnionRoomTrainerClass()]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); + StringCopy(uroom->trainerCardStrBuffer[0], gTrainerClassNames[GetUnionRoomTrainerClass()]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrBuffer[0]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->rse.playerName); - StringCopy(uroom->field_174, gTexts_UR_CardColor[trainerCard->rse.stars]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->field_174); + StringCopy(uroom->trainerCardColorStrBuffer, gTexts_UR_CardColor[trainerCard->rse.stars]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardColorStrBuffer); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); + ConvertIntToDecimalStringN(uroom->trainerCardStrBuffer[2], trainerCard->rse.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrBuffer[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]); + ConvertIntToDecimalStringN(uroom->trainerCardStrBuffer[3], trainerCard->rse.playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(uroom->trainerCardStrBuffer[4], trainerCard->rse.playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, uroom->trainerCardStrBuffer[3]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, uroom->trainerCardStrBuffer[4]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gText_UR_TrainerCardInfoPage1); - StringCopy(gStringVar4, uroom->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->trainerCardMsgStrBuffer, gText_UR_TrainerCardInfoPage1); + StringCopy(gStringVar4, uroom->trainerCardMsgStrBuffer); n = trainerCard->rse.linkBattleWins; if (n > 9999) - { n = 9999; - } - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); + ConvertIntToDecimalStringN(uroom->trainerCardStrBuffer[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrBuffer[0]); n = trainerCard->rse.linkBattleLosses; if (n > 9999) - { n = 9999; - } - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrbufs[1]); + ConvertIntToDecimalStringN(uroom->trainerCardStrBuffer[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrBuffer[1]); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); + ConvertIntToDecimalStringN(uroom->trainerCardStrBuffer[2], trainerCard->rse.pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrBuffer[2]); for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++) { - CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->rse.easyChatProfile[i]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]); + CopyEasyChatWord(uroom->trainerCardStrBuffer[i + 3], trainerCard->rse.easyChatProfile[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrBuffer[i + 3]); } - DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gText_UR_TrainerCardInfoPage2); - StringAppend(gStringVar4, uroom->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->trainerCardMsgStrBuffer, gText_UR_TrainerCardInfoPage2); + StringAppend(gStringVar4, uroom->trainerCardMsgStrBuffer); - if (parent_child == MODE_PARENT) + if (isParent == TRUE) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gText_UR_FinishedCheckingPlayersTrainerCard); - StringAppend(gStringVar4, uroom->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->trainerCardMsgStrBuffer, gText_UR_FinishedCheckingPlayersTrainerCard); + StringAppend(gStringVar4, uroom->trainerCardMsgStrBuffer); } - else if (parent_child == MODE_CHILD) + else if (isParent == FALSE) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gTexts_UR_GladToMeetYou[trainerCard->rse.gender]); - StringAppend(gStringVar4, uroom->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->trainerCardMsgStrBuffer, gTexts_UR_GladToMeetYou[trainerCard->rse.gender]); + StringAppend(gStringVar4, uroom->trainerCardMsgStrBuffer); } } diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 97131a768..b6f018a9a 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -121,29 +121,29 @@ static const u8 sCountParams[][3] = { // activity, count idx, by // by=0 means count all // UB: no check for count idx == -1 - {ACTIVITY_BATTLE, 1, 2}, - {ACTIVITY_DBLBATTLE, 1, 2}, - {ACTIVITY_MLTBATTLE, 1, 4}, - {ACTIVITY_TRADE, 0, 2}, - {ACTIVITY_WCARD2, 3, 2}, - {ACTIVITY_WNEWS2, 3, 2}, - {ACTIVITY_PJUMP, 4, 0}, - {ACTIVITY_BCRUSH, 4, 0}, - {ACTIVITY_BPICK, 4, 0}, - {ACTIVITY_SEARCH, -1, 0}, - {ACTIVITY_SPINTRADE, 0, 0}, - {ACTIVITY_ITEMTRADE, -1, 0}, - {0x0f, 4, 0}, - {0x10, -1, 0}, - {0x40, 2, 1}, - {ACTIVITY_BATTLE | 0x40, 2, 2}, - {ACTIVITY_TRADE | 0x40, 2, 2}, - {ACTIVITY_CHAT | 0x40, 2, 0}, - {ACTIVITY_CARD | 0x40, 2, 2}, - {20 | 0x40, 2, 1}, - {19 | 0x40, 2, 2}, - {ACTIVITY_ACCEPT | 0x40, 2, 1}, - {ACTIVITY_DECLINE | 0x40, 2, 1} + {ACTIVITY_BATTLE_SINGLE, 1, 2}, + {ACTIVITY_BATTLE_DOUBLE, 1, 2}, + {ACTIVITY_BATTLE_MULTI, 1, 4}, + {ACTIVITY_TRADE, 0, 2}, + {ACTIVITY_WONDER_CARD, 3, 2}, + {ACTIVITY_WONDER_NEWS, 3, 2}, + {ACTIVITY_POKEMON_JUMP, 4, 0}, + {ACTIVITY_BERRY_CRUSH, 4, 0}, + {ACTIVITY_BERRY_PICK, 4, 0}, + {ACTIVITY_SEARCH, -1, 0}, + {ACTIVITY_SPIN_TRADE, 0, 0}, + {ACTIVITY_ITEM_TRADE, -1, 0}, + {ACTIVITY_RECORD_CORNER, 4, 0}, + {ACTIVITY_BERRY_BLENDER, -1, 0}, + {ACTIVITY_NONE | IN_UNION_ROOM, 2, 1}, + {ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, 2, 2}, + {ACTIVITY_TRADE | IN_UNION_ROOM, 2, 2}, + {ACTIVITY_CHAT | IN_UNION_ROOM, 2, 0}, + {ACTIVITY_CARD | IN_UNION_ROOM, 2, 2}, + {ACTIVITY_PLYRTALK | IN_UNION_ROOM, 2, 1}, + {ACTIVITY_NPCTALK | IN_UNION_ROOM, 2, 2}, + {ACTIVITY_ACCEPT | IN_UNION_ROOM, 2, 1}, + {ACTIVITY_DECLINE | IN_UNION_ROOM, 2, 1} }; static void CB2_RunWirelessCommunicationScreen(void) @@ -352,9 +352,9 @@ static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, -1, str); } -static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts) +static u32 CountMembersInGroup(struct RfuPlayer * unk20, u32 * counts) { - u32 activity = unk20->gname_uname.gname.activity; + u32 activity = unk20->rfu.data.activity; s32 i, j, k; for (i = 0; i < NELEMS(sCountParams); i++) @@ -366,7 +366,7 @@ static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts) k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) { - if (unk20->gname_uname.gname.partnerInfo[j] != 0) k++; + if (unk20->rfu.data.partnerInfo[j] != 0) k++; } k++; counts[sCountParams[i][1]] += k; @@ -398,12 +398,12 @@ static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * ac { bool32 activitiesUpdated = FALSE; u32 buffer[4] = {0, 0, 0, 0}; - struct UnkStruct_Group * group = (void *)gTasks[taskId].data; + struct WirelessLink_Group * group = (void *)gTasks[taskId].data; s32 i; for (i = 0; i < 16; i++) { - u32 activity = CountMembersInGroup(&group->field_0->arr[i], buffer); + u32 activity = CountMembersInGroup(&group->playerList->players[i], buffer); if (activity != activities[i]) { activities[i] = activity; From 5ce573fca1ce2fa80baff3a6e441716723afe9b4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Nov 2022 02:05:33 -0500 Subject: [PATCH 13/42] Sync wireless_communication_status_screen --- graphics/misc/unk_846f4f0.pal | 19 - .../anim_00.pal} | 0 .../anim_01.pal} | 0 .../anim_02.pal} | 0 .../anim_03.pal} | 0 .../anim_04.pal} | 0 .../anim_05.pal} | 0 .../anim_06.pal} | 0 .../anim_07.pal} | 0 .../anim_08.pal} | 0 .../anim_09.pal} | 0 .../anim_10.pal} | 0 .../anim_11.pal} | 0 .../anim_12.pal} | 0 .../anim_13.pal} | 0 .../bg.bin} | Bin .../bg.png} | Bin .../default.pal} | 0 src/wireless_communication_status_screen.c | 357 ++++++++++-------- 19 files changed, 194 insertions(+), 182 deletions(-) delete mode 100644 graphics/misc/unk_846f4f0.pal rename graphics/{misc/unk_846f510.pal => wireless_status_screen/anim_00.pal} (100%) rename graphics/{misc/unk_846f530.pal => wireless_status_screen/anim_01.pal} (100%) rename graphics/{misc/unk_846f550.pal => wireless_status_screen/anim_02.pal} (100%) rename graphics/{misc/unk_846f570.pal => wireless_status_screen/anim_03.pal} (100%) rename graphics/{misc/unk_846f590.pal => wireless_status_screen/anim_04.pal} (100%) rename graphics/{misc/unk_846f5b0.pal => wireless_status_screen/anim_05.pal} (100%) rename graphics/{misc/unk_846f5d0.pal => wireless_status_screen/anim_06.pal} (100%) rename graphics/{misc/unk_846f5f0.pal => wireless_status_screen/anim_07.pal} (100%) rename graphics/{misc/unk_846f610.pal => wireless_status_screen/anim_08.pal} (100%) rename graphics/{misc/unk_846f630.pal => wireless_status_screen/anim_09.pal} (100%) rename graphics/{misc/unk_846f650.pal => wireless_status_screen/anim_10.pal} (100%) rename graphics/{misc/unk_846f670.pal => wireless_status_screen/anim_11.pal} (100%) rename graphics/{misc/unk_846f690.pal => wireless_status_screen/anim_12.pal} (100%) rename graphics/{misc/unk_846f4d0.pal => wireless_status_screen/anim_13.pal} (100%) rename graphics/{misc/unk_846f8e0.bin => wireless_status_screen/bg.bin} (100%) rename graphics/{misc/unk_846f6d0.png => wireless_status_screen/bg.png} (100%) rename graphics/{misc/unk_846f6b0.pal => wireless_status_screen/default.pal} (100%) diff --git a/graphics/misc/unk_846f4f0.pal b/graphics/misc/unk_846f4f0.pal deleted file mode 100644 index 4b0812f09..000000000 --- a/graphics/misc/unk_846f4f0.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/misc/unk_846f510.pal b/graphics/wireless_status_screen/anim_00.pal similarity index 100% rename from graphics/misc/unk_846f510.pal rename to graphics/wireless_status_screen/anim_00.pal diff --git a/graphics/misc/unk_846f530.pal b/graphics/wireless_status_screen/anim_01.pal similarity index 100% rename from graphics/misc/unk_846f530.pal rename to graphics/wireless_status_screen/anim_01.pal diff --git a/graphics/misc/unk_846f550.pal b/graphics/wireless_status_screen/anim_02.pal similarity index 100% rename from graphics/misc/unk_846f550.pal rename to graphics/wireless_status_screen/anim_02.pal diff --git a/graphics/misc/unk_846f570.pal b/graphics/wireless_status_screen/anim_03.pal similarity index 100% rename from graphics/misc/unk_846f570.pal rename to graphics/wireless_status_screen/anim_03.pal diff --git a/graphics/misc/unk_846f590.pal b/graphics/wireless_status_screen/anim_04.pal similarity index 100% rename from graphics/misc/unk_846f590.pal rename to graphics/wireless_status_screen/anim_04.pal diff --git a/graphics/misc/unk_846f5b0.pal b/graphics/wireless_status_screen/anim_05.pal similarity index 100% rename from graphics/misc/unk_846f5b0.pal rename to graphics/wireless_status_screen/anim_05.pal diff --git a/graphics/misc/unk_846f5d0.pal b/graphics/wireless_status_screen/anim_06.pal similarity index 100% rename from graphics/misc/unk_846f5d0.pal rename to graphics/wireless_status_screen/anim_06.pal diff --git a/graphics/misc/unk_846f5f0.pal b/graphics/wireless_status_screen/anim_07.pal similarity index 100% rename from graphics/misc/unk_846f5f0.pal rename to graphics/wireless_status_screen/anim_07.pal diff --git a/graphics/misc/unk_846f610.pal b/graphics/wireless_status_screen/anim_08.pal similarity index 100% rename from graphics/misc/unk_846f610.pal rename to graphics/wireless_status_screen/anim_08.pal diff --git a/graphics/misc/unk_846f630.pal b/graphics/wireless_status_screen/anim_09.pal similarity index 100% rename from graphics/misc/unk_846f630.pal rename to graphics/wireless_status_screen/anim_09.pal diff --git a/graphics/misc/unk_846f650.pal b/graphics/wireless_status_screen/anim_10.pal similarity index 100% rename from graphics/misc/unk_846f650.pal rename to graphics/wireless_status_screen/anim_10.pal diff --git a/graphics/misc/unk_846f670.pal b/graphics/wireless_status_screen/anim_11.pal similarity index 100% rename from graphics/misc/unk_846f670.pal rename to graphics/wireless_status_screen/anim_11.pal diff --git a/graphics/misc/unk_846f690.pal b/graphics/wireless_status_screen/anim_12.pal similarity index 100% rename from graphics/misc/unk_846f690.pal rename to graphics/wireless_status_screen/anim_12.pal diff --git a/graphics/misc/unk_846f4d0.pal b/graphics/wireless_status_screen/anim_13.pal similarity index 100% rename from graphics/misc/unk_846f4d0.pal rename to graphics/wireless_status_screen/anim_13.pal diff --git a/graphics/misc/unk_846f8e0.bin b/graphics/wireless_status_screen/bg.bin similarity index 100% rename from graphics/misc/unk_846f8e0.bin rename to graphics/wireless_status_screen/bg.bin diff --git a/graphics/misc/unk_846f6d0.png b/graphics/wireless_status_screen/bg.png similarity index 100% rename from graphics/misc/unk_846f6d0.png rename to graphics/wireless_status_screen/bg.png diff --git a/graphics/misc/unk_846f6b0.pal b/graphics/wireless_status_screen/default.pal similarity index 100% rename from graphics/misc/unk_846f6b0.pal rename to graphics/wireless_status_screen/default.pal diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index b6f018a9a..971db680f 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -14,46 +14,60 @@ #include "constants/songs.h" #include "constants/union_room.h" -struct WirelessCommunicationStatusScreenStruct -{ - u32 counts[4]; - u32 lastCounts[4]; - u32 activities[16]; - u8 taskId; - u8 rfuTaskId; - u8 filler_62[0xA]; +enum { + COLOR_NONE, + COLOR_NORMAL, + COLOR_TOTAL, + COLOR_TITLE, + COLOR_UNUSED, }; -static struct WirelessCommunicationStatusScreenStruct * sWCSS; +enum { + GROUPTYPE_NONE = -1, + GROUPTYPE_TRADE, + GROUPTYPE_BATTLE, + GROUPTYPE_UNION, + GROUPTYPE_TOTAL, + NUM_GROUPTYPES +}; + +static struct +{ + u32 groupCounts[NUM_GROUPTYPES]; + u32 prevGroupCounts[NUM_GROUPTYPES]; + u32 activities[NUM_TASK_DATA]; + u8 taskId; + u8 rfuTaskId; + u8 filler[10]; +} * sStatusScreen; static void CB2_InitWirelessCommunicationScreen(void); static void Task_WirelessCommunicationScreen(u8 taskId); static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx); static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId); -static const u16 sWCSS_Palettes[][16] = { - INCBIN_U16("graphics/misc/unk_846f4d0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f4f0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f510.gbapal"), - INCBIN_U16("graphics/misc/unk_846f530.gbapal"), - INCBIN_U16("graphics/misc/unk_846f550.gbapal"), - INCBIN_U16("graphics/misc/unk_846f570.gbapal"), - INCBIN_U16("graphics/misc/unk_846f590.gbapal"), - INCBIN_U16("graphics/misc/unk_846f5b0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f5d0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f5f0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f610.gbapal"), - INCBIN_U16("graphics/misc/unk_846f630.gbapal"), - INCBIN_U16("graphics/misc/unk_846f650.gbapal"), - INCBIN_U16("graphics/misc/unk_846f670.gbapal"), - INCBIN_U16("graphics/misc/unk_846f690.gbapal"), - INCBIN_U16("graphics/misc/unk_846f6b0.gbapal") +static const u16 sPalettes[][16] = { + INCBIN_U16("graphics/wireless_status_screen/default.gbapal"), + {}, // All black. Never read + INCBIN_U16("graphics/wireless_status_screen/anim_00.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_01.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_02.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_03.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_04.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_05.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_06.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_07.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_08.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_09.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_10.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_11.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_12.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_13.gbapal") }; +static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/wireless_status_screen/bg.4bpp.lz"); +static const u16 sBgTiles_Tilemap[] = INCBIN_U16("graphics/wireless_status_screen/bg.bin"); -static const u32 sBgTilesGfx[] = INCBIN_U32("graphics/misc/unk_846f6d0.4bpp.lz"); -static const u16 sBgTilemap[] = INCBIN_U16("graphics/misc/unk_846f8e0.bin"); - -static const struct BgTemplate sBGTemplates[] = { +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, .charBaseIndex = 2, @@ -75,29 +89,29 @@ static const struct BgTemplate sBGTemplates[] = { static const struct WindowTemplate sWindowTemplates[] = { { - .bg = 0x00, - .tilemapLeft = 0x03, - .tilemapTop = 0x00, - .width = 0x18, - .height = 0x03, - .paletteNum = 0x0f, - .baseBlock = 0x0001 + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 0, + .width = 24, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x001 }, { - .bg = 0x00, - .tilemapLeft = 0x03, - .tilemapTop = 0x04, - .width = 0x16, - .height = 0x0f, - .paletteNum = 0x0f, - .baseBlock = 0x0049 + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 4, + .width = 22, + .height = 15, + .paletteNum = 15, + .baseBlock = 0x049 }, { - .bg = 0x00, - .tilemapLeft = 0x19, - .tilemapTop = 0x04, - .width = 0x02, - .height = 0x0f, - .paletteNum = 0x0f, - .baseBlock = 0x0193 + .bg = 0, + .tilemapLeft = 25, + .tilemapTop = 4, + .width = 2, + .height = 15, + .paletteNum = 15, + .baseBlock = 0x193 }, DUMMY_WIN_TEMPLATE }; @@ -109,41 +123,43 @@ static const u8 *const sPlayersTextPtrs[] = { gText_Dynamic3Players }; -static const u8 *const sHeaderTextPtrs[] = { - gText_WirelessCommunicationStatus, - gText_PeopleTrading, - gText_PeopleBattling, - gText_PeopleInUnionRoom, - gText_PeopleCommunicating +static const u8 *const sHeaderTexts[NUM_GROUPTYPES + 1] = { + [0] = gText_WirelessCommunicationStatus, + [GROUPTYPE_TRADE + 1] = gText_PeopleTrading, + [GROUPTYPE_BATTLE + 1] = gText_PeopleBattling, + [GROUPTYPE_UNION + 1] = gText_PeopleInUnionRoom, + [GROUPTYPE_TOTAL + 1] = gText_PeopleCommunicating }; -static const u8 sCountParams[][3] = { - // activity, count idx, by - // by=0 means count all - // UB: no check for count idx == -1 - {ACTIVITY_BATTLE_SINGLE, 1, 2}, - {ACTIVITY_BATTLE_DOUBLE, 1, 2}, - {ACTIVITY_BATTLE_MULTI, 1, 4}, - {ACTIVITY_TRADE, 0, 2}, - {ACTIVITY_WONDER_CARD, 3, 2}, - {ACTIVITY_WONDER_NEWS, 3, 2}, - {ACTIVITY_POKEMON_JUMP, 4, 0}, - {ACTIVITY_BERRY_CRUSH, 4, 0}, - {ACTIVITY_BERRY_PICK, 4, 0}, - {ACTIVITY_SEARCH, -1, 0}, - {ACTIVITY_SPIN_TRADE, 0, 0}, - {ACTIVITY_ITEM_TRADE, -1, 0}, - {ACTIVITY_RECORD_CORNER, 4, 0}, - {ACTIVITY_BERRY_BLENDER, -1, 0}, - {ACTIVITY_NONE | IN_UNION_ROOM, 2, 1}, - {ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_TRADE | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_CHAT | IN_UNION_ROOM, 2, 0}, - {ACTIVITY_CARD | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_PLYRTALK | IN_UNION_ROOM, 2, 1}, - {ACTIVITY_NPCTALK | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_ACCEPT | IN_UNION_ROOM, 2, 1}, - {ACTIVITY_DECLINE | IN_UNION_ROOM, 2, 1} +// Activity, group type, number of players +// 0 players means the number of players can change and should be counted dynamically +// GROUPTYPE_TOTAL have no unique group and are simply counted in the total of "people communicating". +// A handful use NUM_GROUPTYPES, which is invalid, and are changed to GROUPTYPE_TOTAL in Emerald. +// UB: GROUPTYPE_NONE (-1) can potentially be used as an index into a u8[4] in CountPlayersInGroupAndGetActivity. +static const u8 sActivityGroupInfo[][3] = { + {ACTIVITY_BATTLE_SINGLE, GROUPTYPE_BATTLE, 2}, + {ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2}, + {ACTIVITY_BATTLE_MULTI, GROUPTYPE_BATTLE, 4}, + {ACTIVITY_TRADE, GROUPTYPE_TRADE, 2}, + {ACTIVITY_WONDER_CARD, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_WONDER_NEWS, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_POKEMON_JUMP, NUM_GROUPTYPES, 0}, + {ACTIVITY_BERRY_CRUSH, NUM_GROUPTYPES, 0}, + {ACTIVITY_BERRY_PICK, NUM_GROUPTYPES, 0}, + {ACTIVITY_SEARCH, GROUPTYPE_NONE, 0}, + {ACTIVITY_SPIN_TRADE, GROUPTYPE_TRADE, 0}, + {ACTIVITY_ITEM_TRADE, GROUPTYPE_NONE, 0}, + {ACTIVITY_RECORD_CORNER, NUM_GROUPTYPES, 0}, + {ACTIVITY_BERRY_BLENDER, GROUPTYPE_NONE, 0}, + {ACTIVITY_NONE | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, + {ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_TRADE | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_CHAT | IN_UNION_ROOM, GROUPTYPE_UNION, 0}, + {ACTIVITY_CARD | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_PLYRTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, + {ACTIVITY_NPCTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_ACCEPT | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, + {ACTIVITY_DECLINE | IN_UNION_ROOM, GROUPTYPE_UNION, 1} }; static void CB2_RunWirelessCommunicationScreen(void) @@ -173,14 +189,14 @@ void ShowWirelessCommunicationScreen(void) static void CB2_InitWirelessCommunicationScreen(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - sWCSS = AllocZeroed(sizeof(*sWCSS)); + sStatusScreen = AllocZeroed(sizeof(*sStatusScreen)); SetVBlankCallback(NULL); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates)); - SetBgTilemapBuffer(1, Alloc(0x800)); - SetBgTilemapBuffer(0, Alloc(0x800)); - DecompressAndLoadBgGfxUsingHeap(1, sBgTilesGfx, 0, 0, 0); - CopyToBgTilemapBuffer(1, sBgTilemap, 0, 0); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(1, sBgTiles_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(1, sBgTiles_Tilemap, 0, 0); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); ResetPaletteFade(); @@ -189,14 +205,14 @@ static void CB2_InitWirelessCommunicationScreen(void) ScanlineEffect_Stop(); m4aSoundVSyncOn(); SetVBlankCallback(VBlankCB_WirelessCommunicationScreen); - sWCSS->taskId = CreateTask(Task_WirelessCommunicationScreen, 0); - sWCSS->rfuTaskId = CreateTask_ListenToWireless(); - sWCSS->lastCounts[3] = 1; - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - LoadPalette(sWCSS_Palettes, 0, 0x20); + sStatusScreen->taskId = CreateTask(Task_WirelessCommunicationScreen, 0); + sStatusScreen->rfuTaskId = CreateTask_ListenToWireless(); + sStatusScreen->prevGroupCounts[3] = 1; + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + LoadPalette(sPalettes, 0, 0x20); Menu_LoadStdPalAt(0xf0); DynamicPlaceholderTextUtil_Reset(); FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0xF); @@ -214,29 +230,24 @@ static void ExitWirelessCommunicationStatusScreen(void) s32 i; FreeAllWindowBuffers(); - for (i = 0; i < 2; i++) - { + for (i = 0; i < (int)ARRAY_COUNT(sBgTemplates); i++) Free(GetBgTilemapBuffer(i)); - } - Free(sWCSS); + Free(sStatusScreen); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -static void WCSS_CyclePalette(s16 * frameCtr_p, s16 * palIdx_p) +// Cycle through palettes that relocate various shades of blue to create the wave effect at the bottom of the screen. +static void CyclePalette(s16 * counter, s16 * palIdx) { s32 idx; - (*frameCtr_p)++; - if (*frameCtr_p > 5) + if (++(*counter) > 5) { - (*palIdx_p)++; - if (*palIdx_p == 14) - { - *palIdx_p = 0; - } - *frameCtr_p = 0; + if (++(*palIdx) == (int)ARRAY_COUNT(sPalettes) - 2) + *palIdx = 0; + *counter = 0; } - idx = *palIdx_p + 2; - LoadPalette(sWCSS_Palettes[idx], 0, 16); + idx = *palIdx + 2; // +2 skips over default.pal and the empty black palette after it + LoadPalette(sPalettes[idx], 0, 16); } static void PrintHeaderTexts(void) @@ -247,50 +258,57 @@ static void PrintHeaderTexts(void) FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - width = 0xC0 - GetStringWidth(FONT_3, sHeaderTextPtrs[0], 0); - WCSS_AddTextPrinterParameterized(0, FONT_3, sHeaderTextPtrs[0], width / 2, 6, 3); - for (i = 0; i < 3; i++) - { - WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 1); - } - WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 2); + + // Print title + width = 192 - GetStringWidth(FONT_3, sHeaderTexts[0], 0); + WCSS_AddTextPrinterParameterized(0, FONT_3, sHeaderTexts[0], width / 2, 6, COLOR_TITLE); + + // Print label for each group (excluding total) + for (i = 0; i < NUM_GROUPTYPES - 1; i++) + WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_NORMAL); + + // Print label for total + WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_TOTAL); + PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_GFX); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_GFX); } +#define tState data[0] + static void Task_WirelessCommunicationScreen(u8 taskId) { s32 i; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: PrintHeaderTexts(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); ShowBg(1); CopyBgTilemapBufferToVram(0); ShowBg(0); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: if (!gPaletteFade.active) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 3: - if (UpdateCommunicationCounts(sWCSS->counts, sWCSS->lastCounts, sWCSS->activities, sWCSS->rfuTaskId)) + if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId)) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_GROUPTYPES; i++) { - ConvertIntToDecimalStringN(gStringVar4, sWCSS->counts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); - if (i != 3) - WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 30 * i + 10, 1); + ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); + if (i != GROUPTYPE_TOTAL) + WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 30 * i + 10, COLOR_NORMAL); else - WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 100, 2); + WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 100, COLOR_TOTAL); } PutWindowTilemap(2); CopyWindowToVram(2, COPYWIN_FULL); @@ -298,14 +316,14 @@ static void Task_WirelessCommunicationScreen(u8 taskId) if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gTasks[sWCSS->rfuTaskId].data[15] = 0xFF; - gTasks[taskId].data[0]++; + gTasks[sStatusScreen->rfuTaskId].data[15] = 0xFF; + gTasks[taskId].tState++; } - WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); + CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); break; case 4: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 5: if (!gPaletteFade.active) @@ -317,93 +335,99 @@ static void Task_WirelessCommunicationScreen(u8 taskId) } } -static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx) +static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode) { u8 textColor[3]; - switch (palIdx) + switch (mode) { - case 0: + case COLOR_NONE: // Unused. Default to usual text colors textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_DARK_GRAY; textColor[2] = TEXT_COLOR_LIGHT_GRAY; break; - case 1: + case COLOR_NORMAL: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_WHITE; textColor[2] = TEXT_COLOR_LIGHT_GRAY; break; - case 2: + case COLOR_TOTAL: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_RED; textColor[2] = TEXT_COLOR_LIGHT_RED; break; - case 3: + case COLOR_TITLE: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_LIGHT_GREEN; textColor[2] = TEXT_COLOR_GREEN; break; - case 4: + case COLOR_UNUSED: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_WHITE; textColor[2] = TEXT_COLOR_DARK_GRAY; break; // default: UB } - AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, -1, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, TEXT_SKIP_DRAW, str); } -static u32 CountMembersInGroup(struct RfuPlayer * unk20, u32 * counts) +static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * groupCounts) { - u32 activity = unk20->rfu.data.activity; + u32 activity = player->rfu.data.activity; s32 i, j, k; - for (i = 0; i < NELEMS(sCountParams); i++) + #define group_activity(i) (sActivityGroupInfo[(i)][0]) + #define group_type(i) (sActivityGroupInfo[(i)][1]) + #define group_players(i) (sActivityGroupInfo[(i)][2]) + + for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { - if (activity == sCountParams[i][0] && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (activity == group_activity(i) && player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (sCountParams[i][2] == 0) + if (group_players(i) == 0) { k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) - { - if (unk20->rfu.data.partnerInfo[j] != 0) k++; - } + if (player->rfu.data.partnerInfo[j] != 0) k++; k++; - counts[sCountParams[i][1]] += k; + groupCounts[group_type(i)] += k; } else { - counts[sCountParams[i][1]] += sCountParams[i][2]; + groupCounts[group_type(i)] += group_players(i); } } } return activity; + + #undef group_activity + #undef group_type + #undef group_players } -static bool32 HaveCountsChanged(const u32 * newCounts, const u32 * prevCounts) +static bool32 HaveCountsChanged(const u32 * curCounts, const u32 * prevCounts) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_GROUPTYPES; i++) { - if (newCounts[i] != prevCounts[i]) + if (curCounts[i] != prevCounts[i]) return TRUE; } return FALSE; } -static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId) +static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts, u32 * activities, u8 taskId) { bool32 activitiesUpdated = FALSE; - u32 buffer[4] = {0, 0, 0, 0}; + u32 groupCountBuffer[NUM_GROUPTYPES] = {0, 0, 0, 0}; struct WirelessLink_Group * group = (void *)gTasks[taskId].data; s32 i; - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_TASK_DATA; i++) { - u32 activity = CountMembersInGroup(&group->playerList->players[i], buffer); + u32 activity = CountPlayersInGroupAndGetActivity(&group->playerList->players[i], groupCountBuffer); if (activity != activities[i]) { activities[i] = activity; @@ -411,7 +435,7 @@ static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * ac } } - if (HaveCountsChanged(buffer, lastCounts) == FALSE) + if (!HaveCountsChanged(groupCountBuffer, prevGroupCounts)) { if (activitiesUpdated == TRUE) return TRUE; @@ -419,8 +443,15 @@ static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * ac return FALSE; } - memcpy(counts, buffer, sizeof(buffer)); - memcpy(lastCounts, buffer, sizeof(buffer)); - counts[3] = counts[0] + counts[1] + counts[2]; + memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer)); + memcpy(prevGroupCounts, groupCountBuffer, sizeof(groupCountBuffer)); + + groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE] + + groupCounts[GROUPTYPE_BATTLE] + + groupCounts[GROUPTYPE_UNION] + #ifdef BUGFIX + + groupCounts[GROUPTYPE_TOTAL] // Missing count for activities not in above groups + #endif + ; return TRUE; } From a7609df31b8a5756a4d6308fcce89e4886766f2e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Nov 2022 13:00:51 -0500 Subject: [PATCH 14/42] Sync union_room_player_avatar --- data/maps/UnionRoom/scripts.inc | 9 - include/constants/event_objects.h | 17 +- include/rfu_union_tool.h | 16 - include/union_room_player_avatar.h | 16 + ld_script.txt | 4 +- src/pokemon.c | 17 +- src/rfu_union_tool.c | 663 ----------------------------- src/union_room.c | 14 +- src/union_room_player_avatar.c | 615 ++++++++++++++++++++++++++ sym_ewram.txt | 2 +- 10 files changed, 665 insertions(+), 708 deletions(-) delete mode 100644 include/rfu_union_tool.h create mode 100644 include/union_room_player_avatar.h delete mode 100644 src/rfu_union_tool.c create mode 100644 src/union_room_player_avatar.c diff --git a/data/maps/UnionRoom/scripts.inc b/data/maps/UnionRoom/scripts.inc index c214b06d3..38b5c3dda 100644 --- a/data/maps/UnionRoom/scripts.inc +++ b/data/maps/UnionRoom/scripts.inc @@ -1,12 +1,3 @@ -.set LOCALID_UNION_ROOM_PLAYER_4, 2 -.set LOCALID_UNION_ROOM_PLAYER_8, 3 -.set LOCALID_UNION_ROOM_PLAYER_7, 4 -.set LOCALID_UNION_ROOM_PLAYER_6, 5 -.set LOCALID_UNION_ROOM_PLAYER_5, 6 -.set LOCALID_UNION_ROOM_PLAYER_3, 7 -.set LOCALID_UNION_ROOM_PLAYER_2, 8 -.set LOCALID_UNION_ROOM_PLAYER_1, 9 - UnionRoom_MapScripts:: map_script MAP_SCRIPT_ON_RESUME, UnionRoom_OnResume map_script MAP_SCRIPT_ON_TRANSITION, UnionRoom_OnTransition diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 99d3e4209..0eac72a29 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -189,10 +189,21 @@ #define TRACKS_FOOT 1 #define TRACKS_BIKE_TIRE 2 -#define OBJ_EVENT_ID_PLAYER 0xFF -#define OBJ_EVENT_ID_CAMERA 0x7F - #define OBJ_KIND_NORMAL 0 #define OBJ_KIND_CLONE 255 +// Special object event local ids +#define OBJ_EVENT_ID_PLAYER 0xFF +#define OBJ_EVENT_ID_CAMERA 0x7F + +// Object event local ids referenced in C files +#define LOCALID_UNION_ROOM_PLAYER_4 2 +#define LOCALID_UNION_ROOM_PLAYER_8 3 +#define LOCALID_UNION_ROOM_PLAYER_7 4 +#define LOCALID_UNION_ROOM_PLAYER_6 5 +#define LOCALID_UNION_ROOM_PLAYER_5 6 +#define LOCALID_UNION_ROOM_PLAYER_3 7 +#define LOCALID_UNION_ROOM_PLAYER_2 8 +#define LOCALID_UNION_ROOM_PLAYER_1 9 + #endif // GUARD_CONSTANTS_EVENT_OBJECTS_H diff --git a/include/rfu_union_tool.h b/include/rfu_union_tool.h deleted file mode 100644 index ffecc3f8d..000000000 --- a/include/rfu_union_tool.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H -#define GUARD_UNION_ROOM_PLAYER_AVATAR_H - -#include "union_room.h" - -u8 ZeroUnionObjWork(struct UnionRoomObject * ptr); -void DestroyUnionRoomPlayerObjects(void); -void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group); -void DestroyGroupMemberObjects(u8 *spriteIds); -void MakeGroupAssemblyAreasPassable(void); -void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p); -void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p); -bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds); -void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct RfuPlayerList *main0_p); - -#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h new file mode 100644 index 000000000..17ace17de --- /dev/null +++ b/include/union_room_player_avatar.h @@ -0,0 +1,16 @@ +#ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H +#define GUARD_UNION_ROOM_PLAYER_AVATAR_H + +#include "union_room.h" + +u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players); +void DestroyUnionRoomPlayerObjects(void); +void CreateUnionRoomPlayerSprites(u8 *spriteIds, s32 leaderId); +void DestroyUnionRoomPlayerSprites(u8 *spriteIds); +void MakeGroupAssemblyAreasPassable(void); +void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); +void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); +bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdPtr, s16 *leaderIdPtr, u8 *spriteIds); +void UpdateUnionRoomMemberFacing(u32 memberId, u32 leaderId, struct RfuPlayerList *list); + +#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H diff --git a/ld_script.txt b/ld_script.txt index 546f6b5fe..5c7a3751d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -249,7 +249,7 @@ SECTIONS { src/trainer_fan_club.o(.text); src/quest_log_events.o(.text); src/union_room.o(.text); - src/rfu_union_tool.o(.text); + src/union_room_player_avatar.o(.text); src/union_room_battle.o(.text); src/pokemon_special_anim.o(.text); src/pokemon_special_anim_scene.o(.text); @@ -542,7 +542,7 @@ SECTIONS { src/trainer_fan_club.o(.rodata); src/quest_log_events.o(.rodata); src/union_room.o(.rodata); - src/rfu_union_tool.o(.rodata); + src/union_room_player_avatar.o(.rodata); src/union_room_battle.o(.rodata); src/union_room_message.o(.rodata); src/pokemon_special_anim.o(.rodata); diff --git a/src/pokemon.c b/src/pokemon.c index 6a164028e..e3cae699c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -34,6 +34,7 @@ #include "constants/trainers.h" #include "constants/hold_effects.h" #include "constants/battle_move_effects.h" +#include "constants/union_room.h" #define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name #define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name @@ -1643,7 +1644,9 @@ static const u16 sDeoxysBaseStats[] = }; #endif -const u16 gLinkPlayerFacilityClasses[] = +// The classes used by other players in the Union Room. +// These should correspond with the overworld graphics in sUnionRoomObjGfxIds +const u16 gUnionRoomFacilityClasses[NUM_UNION_ROOM_CLASSES * GENDER_COUNT] = { // Male FACILITY_CLASS_COOLTRAINER_M, @@ -6031,19 +6034,19 @@ void SetDeoxysStats(void) u16 GetUnionRoomTrainerPic(void) { u8 linkId = GetMultiplayerId() ^ 1; - u32 arrId = gLinkPlayers[linkId].trainerId & 7; - arrId |= gLinkPlayers[linkId].gender << 3; - return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]); + u32 arrId = gLinkPlayers[linkId].trainerId % NUM_UNION_ROOM_CLASSES; + arrId |= gLinkPlayers[linkId].gender * NUM_UNION_ROOM_CLASSES; + return FacilityClassToPicIndex(gUnionRoomFacilityClasses[arrId]); } u16 GetUnionRoomTrainerClass(void) { u8 linkId = GetMultiplayerId() ^ 1; - u32 arrId = gLinkPlayers[linkId].trainerId & 7; - arrId |= gLinkPlayers[linkId].gender << 3; - return gFacilityClassToTrainerClass[gLinkPlayerFacilityClasses[arrId]]; + u32 arrId = gLinkPlayers[linkId].trainerId % NUM_UNION_ROOM_CLASSES; + arrId |= gLinkPlayers[linkId].gender * NUM_UNION_ROOM_CLASSES; + return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } void CreateEventLegalEnemyMon(void) diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c deleted file mode 100644 index d6e77519d..000000000 --- a/src/rfu_union_tool.c +++ /dev/null @@ -1,663 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "event_object_movement.h" -#include "field_player_avatar.h" -#include "fieldmap.h" -#include "rfu_union_tool.h" -#include "script.h" -#include "task.h" -#include "constants/event_object_movement.h" -#include "constants/union_room.h" -#include "constants/event_objects.h" - -static EWRAM_DATA struct UnionRoomObject * UnionObjWork = NULL; -static EWRAM_DATA u32 sUnionObjRefreshTimer = 0; - -static u8 StartUnionObjAnimTask(void); -static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member); -static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction); - -static const u8 sUnionObjectEventGfxIds[][10] = { - [MALE] = { - OBJ_EVENT_GFX_COOLTRAINER_M, - OBJ_EVENT_GFX_BLACKBELT, - OBJ_EVENT_GFX_CAMPER, - OBJ_EVENT_GFX_YOUNGSTER, - OBJ_EVENT_GFX_BOY, - OBJ_EVENT_GFX_BUG_CATCHER, - OBJ_EVENT_GFX_MAN, - OBJ_EVENT_GFX_ROCKER - }, - [FEMALE] = { - OBJ_EVENT_GFX_COOLTRAINER_F, - OBJ_EVENT_GFX_CHANNELER, - OBJ_EVENT_GFX_PICNICKER, - OBJ_EVENT_GFX_LASS, - OBJ_EVENT_GFX_WOMAN_1, - OBJ_EVENT_GFX_BATTLE_GIRL, - OBJ_EVENT_GFX_WOMAN_2, - OBJ_EVENT_GFX_BEAUTY - } -}; - -static const s16 sUnionPartnerCoords[][2] = { - { 4, 6}, - {13, 8}, - {10, 6}, - { 1, 8}, - {13, 4}, - { 7, 4}, - { 1, 4}, - { 7, 8} -}; - -static const s8 sFacingDirectionOffsets[][2] = { - [DIR_NONE] = { 0, 0}, - [DIR_SOUTH] = { 1, 0}, - [DIR_NORTH] = { 0, -1}, - [DIR_WEST] = {-1, 0}, - [DIR_EAST] = { 0, 1} -}; - -static const u8 sOppositeFacingDirection[] = { - [DIR_NONE] = DIR_NONE, - [DIR_SOUTH] = DIR_NORTH, - [DIR_NORTH] = DIR_SOUTH, - [DIR_WEST] = DIR_EAST, - [DIR_EAST] = DIR_WEST -}; - -static const u8 sUnionGroupMemberFacings[] = { - DIR_SOUTH, - DIR_WEST, - DIR_SOUTH, - DIR_EAST, - DIR_NORTH -}; - -static const u8 sUnionRoomLocalIds[] = { - 9, - 8, - 7, - 2, - 6, - 5, - 4, - 3 -}; - -// Unused -static const u16 sHidePlayerFlags[] = { - FLAG_HIDE_UNION_ROOM_PLAYER_1, - FLAG_HIDE_UNION_ROOM_PLAYER_2, - FLAG_HIDE_UNION_ROOM_PLAYER_3, - FLAG_HIDE_UNION_ROOM_PLAYER_4, - FLAG_HIDE_UNION_ROOM_PLAYER_5, - FLAG_HIDE_UNION_ROOM_PLAYER_6, - FLAG_HIDE_UNION_ROOM_PLAYER_7, - FLAG_HIDE_UNION_ROOM_PLAYER_8 -}; - -static bool32 is_walking_or_running(void) -{ - if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) - { - return TRUE; - } - else - { - return FALSE; - } -} - -static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id) -{ - return sUnionObjectEventGfxIds[gender][id % 8]; -} - -static void GetUnionRoomPlayerFacingCoords(u32 group, u32 member, s32 * xp, s32 * yp) -{ - *xp = sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7; - *yp = sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7; -} - -static bool32 IsUnionRoomPlayerFacingTileAt(u32 group, u32 member, s32 x, s32 y) -{ - if (sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7 != x) - { - return FALSE; - } - else if (sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7 != y) - { - return FALSE; - } - else - { - return TRUE; - } -} - -static bool32 IsUnionRoomPlayerHidden(u32 player_idx) -{ - return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); -} - -static void HideUnionRoomPlayer(u32 player_idx) -{ - FlagSet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); -} - -static void ShowUnionRoomPlayer(u32 player_idx) -{ - FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); -} - -static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) -{ - VarSet(VAR_OBJ_GFX_ID_0 + playerIdx, gfxId); -} - -static void CreateUnionRoomPlayerObjectEvent(u32 playerIdx) -{ - TrySpawnObjectEvent(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); -} - -static void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx) -{ - RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); -} - -static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) -{ - u8 objectId; - struct ObjectEvent * object; - if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) - { - return FALSE; - } - object = &gObjectEvents[objectId]; - if (ObjectEventIsMovementOverridden(object)) - { - return FALSE; - } - if (ObjectEventSetHeldMovement(object, *movement)) - { - AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 387); - return FALSE; - } - return TRUE; -} - -static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx) -{ - u8 objectId; - struct ObjectEvent * object; - if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) - { - return TRUE; - } - object = &gObjectEvents[objectId]; - if (!ObjectEventClearHeldMovementIfFinished(object)) - { - return FALSE; - } - if (!ArePlayerFieldControlsLocked()) - { - UnfreezeObjectEvent(object); - } - else - { - FreezeObjectEvent(object); - } - return TRUE; -} - -u8 ZeroUnionObjWork(struct UnionRoomObject * ptr) -{ - s32 i; - - sUnionObjRefreshTimer = 0; - UnionObjWork = ptr; - AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 442) - for (i = 0; i < 8; i++) - { - ptr[i].state = 0; - ptr[i].gfxId = 0; - ptr[i].animState = 0; - ptr[i].schedAnim = 0; - } - return StartUnionObjAnimTask(); -} - -static const u8 sMovement_UnionPlayerExit[2] = { - MOVEMENT_ACTION_FLY_UP, - MOVEMENT_ACTION_STEP_END -}; - -static bool32 AnimateUnionRoomPlayerDespawn(s8 * a0, u32 playerIdx, struct UnionRoomObject * ptr) -{ - switch (*a0) - { - case 0: - if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerExit) == TRUE) - { - HideUnionRoomPlayer(playerIdx); - (*a0)++; - } - break; - case 1: - if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx)) - { - RemoveUnionRoomPlayerObjectEvent(playerIdx); - HideUnionRoomPlayer(playerIdx); - *a0 = 0; - return TRUE; - } - break; - } - return FALSE; -} - -static const u8 sMovement_UnionPlayerEnter[2] = { - MOVEMENT_ACTION_FLY_DOWN, - MOVEMENT_ACTION_STEP_END -}; - -static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionRoomObject * ptr) -{ - s16 x, y; - - switch (*state_p) - { - case 0: - if (!is_walking_or_running()) - { - break; - } - PlayerGetDestCoords(&x, &y); - if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE) - { - break; - } - player_get_pos_including_state_based_drift(&x, &y); - if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE) - { - break; - } - SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId); - CreateUnionRoomPlayerObjectEvent(playerIdx); - ShowUnionRoomPlayer(playerIdx); - (*state_p)++; - // fallthrough - case 3: // incorrect? - if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == 1) - { - (*state_p)++; - } - break; - case 2: - if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx)) - { - *state_p = 0; - return TRUE; - } - break; - } - return FALSE; -} - -static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256) -{ - struct UnionRoomObject * ptr = &UnionObjWork[playerIdx]; - AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561) - ptr->schedAnim = UNION_ROOM_SPAWN_IN; - ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256); - if (ptr->state == 0) - { - return TRUE; - } - else - { - return FALSE; - } -} - -static bool32 DespawnGroupLeader(u32 playerIdx) -{ - struct UnionRoomObject * ptr = &UnionObjWork[playerIdx]; - AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577) - ptr->schedAnim = UNION_ROOM_SPAWN_OUT; - if (ptr->state == 1) - { - return TRUE; - } - else - { - return FALSE; - } -} - -static void AnimateUnionObj(u32 playerIdx, struct UnionRoomObject * ptr) -{ - switch (ptr->state) - { - case 0: - if (ptr->schedAnim == UNION_ROOM_SPAWN_IN) - { - ptr->state = 2; - ptr->animState = 0; - } - else - { - break; - } - // fallthrough - case 2: - if (!RfuUnionGroupMemberIsInvisible(playerIdx, 0) && ptr->schedAnim == 2) - { - ptr->state = 0; - ptr->animState = 0; - RemoveUnionRoomPlayerObjectEvent(playerIdx); - HideUnionRoomPlayer(playerIdx); - } - else if (AnimateUnionRoomPlayerSpawn(&ptr->animState, playerIdx, ptr) == TRUE) - { - ptr->state = 1; - } - break; - case 1: - if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT) - { - ptr->state = 3; - ptr->animState = 0; - } - else - { - break; - } - // fallthrough - case 3: - if (AnimateUnionRoomPlayerDespawn(&ptr->animState, playerIdx, ptr) == TRUE) - { - ptr->state = 0; - } - break; - } - ptr->schedAnim = UNION_ROOM_SPAWN_NONE; -} - -static void Task_AnimateUnionObjs(u8 taskId) -{ - s32 i; - AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 643) - for (i = 0; i < 8; i++) - { - AnimateUnionObj(i, &UnionObjWork[i]); - } -} - -static u8 StartUnionObjAnimTask(void) -{ - if (FuncIsActiveTask(Task_AnimateUnionObjs) == TRUE) - { - AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 655) - return NUM_TASKS; - } - else - { - return CreateTask(Task_AnimateUnionObjs, 5); - } -} - -static void DestroyAnimateUnionObjsTask(void) -{ - u8 taskId = FindTaskIdByFunc(Task_AnimateUnionObjs); - if (taskId < NUM_TASKS) - { - DestroyTask(taskId); - } -} - -void DestroyUnionRoomPlayerObjects(void) -{ - s32 i; - for (i = 0; i < 8; i++) - { - if (!IsUnionRoomPlayerHidden(i)) - { - RemoveUnionRoomPlayerObjectEvent(i); - HideUnionRoomPlayer(i); - } - } - UnionObjWork = NULL; - DestroyAnimateUnionObjsTask(); -} - -void CreateGroupMemberObjectsInvisible(u8 * sprite_ids, s32 group) -{ - s32 i; - - for (i = 0; i < 5; i++) - { - s32 obj_id = 5 * group + i; - sprite_ids[obj_id] = CreateVirtualObject(OBJ_EVENT_GFX_MAN, obj_id - 0x38, sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[i][0], sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[i][1], 3, 1); - SetVirtualObjectInvisibility(obj_id - 0x38, TRUE); - } -} - -void DestroyGroupMemberObjects(u8 *spriteIds) -{ - s32 i; - for (i = 0; i < 40; i++) - { - DestroySprite(&gSprites[spriteIds[i]]); - } -} - -void MakeGroupAssemblyAreasPassable(void) -{ - s32 i, j, x, y; - for (i = 0; i < 8; i++) - { - for (j = 0; j < 5; j++) - { - GetUnionRoomPlayerFacingCoords(i, j, &x, &y); - MapGridSetMetatileImpassabilityAt(x, y, FALSE); - } - } -} - -static u8 UnionPartnerObjectGetFacing(u32 member, u32 group, struct RfuGameData * gname) -{ - if (member != 0) - { - return sUnionGroupMemberFacings[member]; - } - else if (gname->activity == 0x45) - { - return DIR_SOUTH; - } - else - { - return DIR_EAST; - } -} - -static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member) -{ - return IsVirtualObjectInvisible(5 * group + member - 0x38); -} - -static void SpawnGroupMember(u32 groupNo, u32 memberNo, u8 direction, struct RfuGameData * gname) -{ - s32 x, y; - s32 objId = 5 * groupNo + memberNo; - if (RfuUnionGroupMemberIsInvisible(groupNo, memberNo) == TRUE) - { - SetVirtualObjectInvisibility(objId - 0x38, FALSE); - SetVirtualObjectSpriteAnim(objId - 0x38, UNION_ROOM_SPAWN_IN); - } - SetVirtualObjectGraphics(objId - 0x38, direction); - UnionPartnerObjectSetFacing(memberNo, groupNo, UnionPartnerObjectGetFacing(memberNo, groupNo, gname)); - GetUnionRoomPlayerFacingCoords(groupNo, memberNo, &x, &y); - MapGridSetMetatileImpassabilityAt(x, y, TRUE); -} - -static void DespawnGroupMember(u32 group, u32 member) -{ - s32 x, y; - SetVirtualObjectSpriteAnim(5 * group + member - 0x38, UNION_ROOM_SPAWN_OUT); - GetUnionRoomPlayerFacingCoords(group, member, &x, &y); - MapGridSetMetatileImpassabilityAt(x, y, FALSE); -} - -static void AssembleGroup(u32 group, struct RfuGameData * gname) -{ - s16 x, y, x2, y2; - s32 i; - - PlayerGetDestCoords(&x, &y); - player_get_pos_including_state_based_drift(&x2, &y2); - if (IsVirtualObjectInvisible(5 * group - 0x38) == TRUE) - { - if (IsUnionRoomPlayerFacingTileAt(group, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(group, 0, x2, y2) == TRUE) - { - return; - } - SpawnGroupMember(group, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->compatibility.playerTrainerId[0]), gname); - } - for (i = 1; i < 5; i++) - { - if (gname->partnerInfo[i - 1] == 0) - { - DespawnGroupMember(group, i); - } - else if (IsUnionRoomPlayerFacingTileAt(group, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(group, i, x2, y2) == FALSE) - { - SpawnGroupMember(group, i, GetUnionRoomPlayerGraphicsId((gname->partnerInfo[i - 1] >> 3) & 1, gname->partnerInfo[i - 1] & 7), gname); - } - } -} - -static void SpawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname) -{ - u32 i; - switch (gname->activity) - { - case 0x40: - case 0x54: - SpawnGroupLeader(group, gname->playerGender, gname->compatibility.playerTrainerId[0]); - for (i = 0; i < 5; i++) - { - DespawnGroupMember(group, i); - } - break; - case 0x41: - case 0x44: - case 0x45: - case 0x48: - case 0x51: - case 0x52: - case 0x53: - DespawnGroupLeader(group); - AssembleGroup(group, gname); - break; - default: - AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979) - } -} - -static void DespawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname) -{ - s32 i; - DespawnGroupLeader(group); - for (i = 0; i < 5; i++) - { - DespawnGroupMember(group, i); - } -} - -static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom * groups) -{ - s32 i; - struct RfuPlayer * x20_p; - sUnionObjRefreshTimer = 0; - for (i = 0, x20_p = groups->playerList->players; i < 8; i++) - { - if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) - { - SpawnGroupLeaderAndMembers(i, &x20_p[i].rfu.data); - } - else if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) - { - DespawnGroupLeaderAndMembers(i, &x20_p[i].rfu.data); - } - } -} - -void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p) -{ - sUnionObjRefreshTimer = 300; -} - -void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p) -{ - if (++sUnionObjRefreshTimer > 300) - { - UpdateUnionRoomPlayerSprites(uroom_p); - } -} - -bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds) -{ - s16 x, y; - s32 i, j; - struct RfuPlayer * x20_p; - if (!is_walking_or_running()) - { - return FALSE; - } - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - for (i = 0, x20_p = main0_p->players; i < 8; i++) - { - for (j = 0; j < 5; j++) - { - s32 objId = 5 * i + j; - if (x != sUnionPartnerCoords[i][0] + sFacingDirectionOffsets[j][0] + 7) - { - continue; - } - if (y != sUnionPartnerCoords[i][1] + sFacingDirectionOffsets[j][1] + 7) - { - continue; - } - if (IsVirtualObjectInvisible(objId - 0x38) != FALSE) - { - continue; - } - if (IsVirtualObjectAnimating(objId - 0x38) != FALSE) - { - continue; - } - if (x20_p[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) - { - continue; - } - UnionPartnerObjectSetFacing(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]); - *member_p = j; - *group_p = i; - return TRUE; - } - } - return FALSE; -} - -static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction) -{ - TurnVirtualObject(5 * group - 0x38 + member, direction); -} - -void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct RfuPlayerList *main0_p) -{ - return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->players[group].rfu.data)); -} diff --git a/src/union_room.c b/src/union_room.c index 2458e44ef..8b8410e3d 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -40,7 +40,7 @@ #include "union_room.h" #include "union_room_battle.h" #include "union_room_chat.h" -#include "rfu_union_tool.h" +#include "union_room_player_avatar.h" #include "union_room_message.h" #include "constants/songs.h" #include "constants/maps.h" @@ -2317,13 +2317,13 @@ static void Task_RunUnionRoom(u8 taskId) ClearRfuPlayerList(uroom->playerList->players, MAX_UNION_ROOM_LEADERS); sPlayerCurrActivity = IN_UNION_ROOM; uroom->searchTaskId = CreateTask_SearchForChildOrParent(uroom->incomingParentList, uroom->incomingChildList, LINK_GROUP_UNION_ROOM_RESUME); - ZeroUnionObjWork(uroom->objects); + InitUnionRoomPlayerObjects(uroom->objects); MakeGroupAssemblyAreasPassable(); uroom->state = UR_STATE_INIT_OBJECTS; break; case UR_STATE_INIT_OBJECTS: - CreateGroupMemberObjectsInvisible(uroom->spriteIds, taskData[0]); - if (++taskData[0] == 8) + CreateUnionRoomPlayerSprites(uroom->spriteIds, taskData[0]); + if (++taskData[0] == MAX_UNION_ROOM_LEADERS) uroom->state = UR_STATE_INIT_LINK; break; case UR_STATE_INIT_LINK: @@ -2515,7 +2515,7 @@ static void Task_RunUnionRoom(u8 taskId) if (!gReceivedRemoteLinkPlayers) { HandleCancelActivity(FALSE); - UpdateUnionGroupMemberFacing(taskData[0], taskData[1], uroom->playerList); + UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->playerList); uroom->state = UR_STATE_INIT_LINK; } break; @@ -2840,7 +2840,7 @@ static void Task_RunUnionRoom(u8 taskId) Free(uroom->incomingParentList); Free(uroom->incomingChildList); DestroyTask(uroom->searchTaskId); - DestroyGroupMemberObjects(uroom->spriteIds); + DestroyUnionRoomPlayerSprites(uroom->spriteIds); uroom->state = UR_STATE_START_ACTIVITY_FADE; break; case UR_STATE_START_ACTIVITY_FADE: @@ -3051,7 +3051,7 @@ static void Task_RunUnionRoom(u8 taskId) if (PrintOnTextbox(&uroom->textState, gStringVar4)) { HandleCancelActivity(TRUE); - UpdateUnionGroupMemberFacing(taskData[0], taskData[1], uroom->playerList); + UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->playerList); uroom->state = UR_STATE_MAIN; } break; diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c new file mode 100644 index 000000000..2cfa38167 --- /dev/null +++ b/src/union_room_player_avatar.c @@ -0,0 +1,615 @@ +#include "global.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "union_room_player_avatar.h" +#include "script.h" +#include "task.h" +#include "constants/event_object_movement.h" +#include "constants/union_room.h" +#include "constants/event_objects.h" + +#define UR_SPRITE_START_ID (MAX_SPRITES - MAX_UNION_ROOM_LEADERS) + +// Each parent player can lead a group of up to MAX_RFU_PLAYERS (including themselves). +// Multiply the leader's id by MAX_RFU_PLAYERS and add the member's id (0 if the leader) to +// get the sprite index of that player. +#define UR_PLAYER_SPRITE_ID(leaderId, memberId)(MAX_RFU_PLAYERS * leaderId + memberId) + +// Original symbol name from ASSERT statements +#define UnionObjWork sUnionObjWork + +static EWRAM_DATA struct UnionRoomObject * sUnionObjWork = NULL; +static EWRAM_DATA u32 sUnionObjRefreshTimer = 0; + +static u8 CreateTask_AnimateUnionRoomPlayers(void); +static u32 IsUnionRoomPlayerInvisible(u32 leaderId, u32 member); +static void SetUnionRoomObjectFacingDirection(s32 member, s32 leaderId, u8 direction); + +// + 2 is just to match, those elements are empty and never read +// Graphics ids should correspond with the classes in gUnionRoomFacilityClasses +static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES + 2] = { + [MALE] = { + OBJ_EVENT_GFX_COOLTRAINER_M, + OBJ_EVENT_GFX_BLACKBELT, + OBJ_EVENT_GFX_CAMPER, + OBJ_EVENT_GFX_YOUNGSTER, + OBJ_EVENT_GFX_BOY, + OBJ_EVENT_GFX_BUG_CATCHER, + OBJ_EVENT_GFX_MAN, + OBJ_EVENT_GFX_ROCKER + }, + [FEMALE] = { + OBJ_EVENT_GFX_COOLTRAINER_F, + OBJ_EVENT_GFX_CHANNELER, + OBJ_EVENT_GFX_PICNICKER, + OBJ_EVENT_GFX_LASS, + OBJ_EVENT_GFX_WOMAN_1, + OBJ_EVENT_GFX_BATTLE_GIRL, + OBJ_EVENT_GFX_WOMAN_2, + OBJ_EVENT_GFX_BEAUTY + } +}; + +static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_LEADERS][2] = { + { 4, 6}, + {13, 8}, + {10, 6}, + { 1, 8}, + {13, 4}, + { 7, 4}, + { 1, 4}, + { 7, 8} +}; + +// If there's a group of players interacting in the Union Room, the group +// leader will be at one of the positions above and each member in the group +// will be at one of the offsets from that position below. The leader will +// be at the first offset (0,0), as they're at the center. +static const s8 sUnionRoomGroupOffsets[][2] = { + { 0, 0}, // Center + { 1, 0}, // Left + { 0, -1}, // Top + {-1, 0}, // Right + { 0, 1} // Bottom +}; + +static const u8 sOppositeFacingDirection[] = { + [DIR_NONE] = DIR_NONE, + [DIR_SOUTH] = DIR_NORTH, + [DIR_NORTH] = DIR_SOUTH, + [DIR_WEST] = DIR_EAST, + [DIR_EAST] = DIR_WEST +}; + +// Compare to sUnionRoomGroupOffsets, the direction each group member +// needs to be facing in order to face the group leader in the center. +static const u8 sMemberFacingDirections[] = { + DIR_SOUTH, // Leader, but never read + DIR_WEST, + DIR_SOUTH, + DIR_EAST, + DIR_NORTH +}; + +static const u8 sUnionRoomLocalIds[] = { + LOCALID_UNION_ROOM_PLAYER_1, + LOCALID_UNION_ROOM_PLAYER_2, + LOCALID_UNION_ROOM_PLAYER_3, + LOCALID_UNION_ROOM_PLAYER_4, + LOCALID_UNION_ROOM_PLAYER_5, + LOCALID_UNION_ROOM_PLAYER_6, + LOCALID_UNION_ROOM_PLAYER_7, + LOCALID_UNION_ROOM_PLAYER_8 +}; + +// Unused +static const u16 sHidePlayerFlags[] = { + FLAG_HIDE_UNION_ROOM_PLAYER_1, + FLAG_HIDE_UNION_ROOM_PLAYER_2, + FLAG_HIDE_UNION_ROOM_PLAYER_3, + FLAG_HIDE_UNION_ROOM_PLAYER_4, + FLAG_HIDE_UNION_ROOM_PLAYER_5, + FLAG_HIDE_UNION_ROOM_PLAYER_6, + FLAG_HIDE_UNION_ROOM_PLAYER_7, + FLAG_HIDE_UNION_ROOM_PLAYER_8 +}; + +static bool32 IsPlayerStandingStill(void) +{ + if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) + return TRUE; + else + return FALSE; +} + +// Gender and trainer id are used to determine which sprite a player appears as +static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id) +{ + return sUnionRoomObjGfxIds[gender][id % NUM_UNION_ROOM_CLASSES]; +} + +static void GetUnionRoomPlayerCoords(u32 leaderId, u32 memberId, s32 * x, s32 * y) +{ + *x = sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0] + 7; + *y = sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1] + 7; +} + +static bool32 IsUnionRoomPlayerAt(u32 leaderId, u32 memberId, s32 x, s32 y) +{ + if ((sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0] + MAP_OFFSET == x) + && (sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1] + MAP_OFFSET == y)) + return TRUE; + else + return FALSE; +} + +static bool32 IsUnionRoomPlayerHidden(u32 leaderId) +{ + return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + leaderId); +} + +static void HideUnionRoomPlayer(u32 leaderId) +{ + FlagSet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + leaderId); +} + +static void ShowUnionRoomPlayer(u32 leaderId) +{ + FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + leaderId); +} + +static void SetUnionRoomPlayerGfx(u32 leaderId, u32 gfxId) +{ + VarSet(VAR_OBJ_GFX_ID_0 + leaderId, gfxId); +} + +static void CreateUnionRoomPlayerObjectEvent(u32 leaderId) +{ + TrySpawnObjectEvent(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); +} + +static void RemoveUnionRoomPlayerObjectEvent(u32 leaderId) +{ + RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); +} + +static bool32 SetUnionRoomPlayerEnterExitMovement(u32 leaderId, const u8 * movement) +{ + u8 objectId; + struct ObjectEvent * object; + if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + return FALSE; + object = &gObjectEvents[objectId]; + if (ObjectEventIsMovementOverridden(object)) + return FALSE; + if (ObjectEventSetHeldMovement(object, *movement)) + { + AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 387); + return FALSE; + } + return TRUE; +} + +static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 leaderId) +{ + u8 objectId; + struct ObjectEvent * object; + if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + return TRUE; + + object = &gObjectEvents[objectId]; + if (!ObjectEventClearHeldMovementIfFinished(object)) + return FALSE; + + if (!ArePlayerFieldControlsLocked()) + UnfreezeObjectEvent(object); + else + FreezeObjectEvent(object); + return TRUE; +} + +u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players) +{ + s32 i; + + sUnionObjRefreshTimer = 0; + sUnionObjWork = players; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 442) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) + { + players[i].state = 0; + players[i].gfxId = 0; + players[i].animState = 0; + players[i].schedAnim = UNION_ROOM_SPAWN_NONE; + } + return CreateTask_AnimateUnionRoomPlayers(); +} + +static const u8 sMovement_UnionPlayerExit[2] = { + MOVEMENT_ACTION_FLY_UP, + MOVEMENT_ACTION_STEP_END +}; + +static bool32 AnimateUnionRoomPlayerDespawn(s8 * state, u32 leaderId, struct UnionRoomObject * object) +{ + switch (*state) + { + case 0: + if (SetUnionRoomPlayerEnterExitMovement(leaderId, sMovement_UnionPlayerExit) == TRUE) + { + HideUnionRoomPlayer(leaderId); + (*state)++; + } + break; + case 1: + if (TryReleaseUnionRoomPlayerObjectEvent(leaderId)) + { + RemoveUnionRoomPlayerObjectEvent(leaderId); + HideUnionRoomPlayer(leaderId); + *state = 0; + return TRUE; + } + break; + } + return FALSE; +} + +static const u8 sMovement_UnionPlayerEnter[2] = { + MOVEMENT_ACTION_FLY_DOWN, + MOVEMENT_ACTION_STEP_END +}; + +static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 leaderId, struct UnionRoomObject * object) +{ + s16 x, y; + + switch (*state) + { + case 0: + if (!IsPlayerStandingStill()) + break; + PlayerGetDestCoords(&x, &y); + if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE) + break; + player_get_pos_including_state_based_drift(&x, &y); + if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE) + break; + SetUnionRoomPlayerGfx(leaderId, object->gfxId); + CreateUnionRoomPlayerObjectEvent(leaderId); + ShowUnionRoomPlayer(leaderId); + (*state)++; + // fallthrough + case 3: // incorrect? + if (SetUnionRoomPlayerEnterExitMovement(leaderId, sMovement_UnionPlayerEnter) == 1) + (*state)++; + break; + case 2: + if (TryReleaseUnionRoomPlayerObjectEvent(leaderId)) + { + *state = 0; + return TRUE; + } + break; + } + return FALSE; +} + +static bool32 SpawnGroupLeader(u32 leaderId, u32 gender, u32 id) +{ + struct UnionRoomObject * object = &sUnionObjWork[leaderId]; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561) + object->schedAnim = UNION_ROOM_SPAWN_IN; + object->gfxId = GetUnionRoomPlayerGraphicsId(gender, id); + + if (object->state == 0) + return TRUE; + else + return FALSE; +} + +static bool32 DespawnGroupLeader(u32 leaderId) +{ + struct UnionRoomObject * object = &sUnionObjWork[leaderId]; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577) + object->schedAnim = UNION_ROOM_SPAWN_OUT; + + if (object->state == 1) + return TRUE; + else + return FALSE; +} + +static void AnimateUnionRoomPlayer(u32 leaderId, struct UnionRoomObject * object) +{ + switch (object->state) + { + case 0: + if (object->schedAnim == UNION_ROOM_SPAWN_IN) + { + object->state = 2; + object->animState = 0; + } + else + { + break; + } + // fallthrough + case 2: + if (!IsUnionRoomPlayerInvisible(leaderId, 0) && object->schedAnim == UNION_ROOM_SPAWN_OUT) + { + object->state = 0; + object->animState = 0; + RemoveUnionRoomPlayerObjectEvent(leaderId); + HideUnionRoomPlayer(leaderId); + } + else if (AnimateUnionRoomPlayerSpawn(&object->animState, leaderId, object) == TRUE) + { + object->state = 1; + } + break; + case 1: + if (object->schedAnim != UNION_ROOM_SPAWN_OUT) + break; + object->state = 3; + object->animState = 0; + // fallthrough + case 3: + if (AnimateUnionRoomPlayerDespawn(&object->animState, leaderId, object) == TRUE) + object->state = 0; + break; + } + object->schedAnim = UNION_ROOM_SPAWN_NONE; +} + +static void Task_AnimateUnionRoomPlayers(u8 taskId) +{ + s32 i; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 643) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) + AnimateUnionRoomPlayer(i, &sUnionObjWork[i]); +} + +static u8 CreateTask_AnimateUnionRoomPlayers(void) +{ + if (FuncIsActiveTask(Task_AnimateUnionRoomPlayers) == TRUE) + { + AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 655) + return NUM_TASKS; + } + else + { + return CreateTask(Task_AnimateUnionRoomPlayers, 5); + } +} + +static void DestroyTask_AnimateUnionRoomPlayers(void) +{ + u8 taskId = FindTaskIdByFunc(Task_AnimateUnionRoomPlayers); + if (taskId < NUM_TASKS) + DestroyTask(taskId); +} + +void DestroyUnionRoomPlayerObjects(void) +{ + s32 i; + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) + { + if (!IsUnionRoomPlayerHidden(i)) + { + RemoveUnionRoomPlayerObjectEvent(i); + HideUnionRoomPlayer(i); + } + } + sUnionObjWork = NULL; + DestroyTask_AnimateUnionRoomPlayers(); +} + +void CreateUnionRoomPlayerSprites(u8 * spriteIds, s32 leaderId) +{ + s32 memberId; + + for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++) + { + s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId); + spriteIds[id] = CreateVirtualObject(OBJ_EVENT_GFX_MAN, + id - UR_SPRITE_START_ID, + sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0], + sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1], + 3, 1); + SetVirtualObjectInvisibility(id - UR_SPRITE_START_ID, TRUE); + } +} + +void DestroyUnionRoomPlayerSprites(u8 *spriteIds) +{ + s32 i; + for (i = 0; i < NUM_UNION_ROOM_SPRITES; i++) + DestroySprite(&gSprites[spriteIds[i]]); +} + +// Clear the impassable metatiles around the group leaders that get set +// to prevent the player from walking through the group member sprites. +void MakeGroupAssemblyAreasPassable(void) +{ + s32 leaderId, memberId, x, y; + for (leaderId = 0; leaderId < MAX_UNION_ROOM_LEADERS; leaderId++) + { + for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++) + { + GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y); + MapGridSetMetatileImpassabilityAt(x, y, FALSE); + } + } +} + +static u8 GetNewFacingDirectionForUnionRoomPlayer(u32 memberId, u32 leaderId, struct RfuGameData * gameData) +{ + if (memberId != 0) // If not leader + return sMemberFacingDirections[memberId]; + else if (gameData->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + return DIR_SOUTH; + else + return DIR_EAST; +} + +static u32 IsUnionRoomPlayerInvisible(u32 leaderId, u32 memberId) +{ + return IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID); +} + +static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct RfuGameData * gameData) +{ + s32 x, y; + s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId); + if (IsUnionRoomPlayerInvisible(leaderId, memberId) == TRUE) + { + SetVirtualObjectInvisibility(id - UR_SPRITE_START_ID, FALSE); + SetVirtualObjectSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN); + } + SetVirtualObjectGraphics(id - UR_SPRITE_START_ID, graphicsId); + SetUnionRoomObjectFacingDirection(memberId, leaderId, GetNewFacingDirectionForUnionRoomPlayer(memberId, leaderId, gameData)); + GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y); + MapGridSetMetatileImpassabilityAt(x, y, TRUE); +} + +static void DespawnGroupMember(u32 leaderId, u32 memberId) +{ + s32 x, y; + SetVirtualObjectSpriteAnim(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT); + GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y); + MapGridSetMetatileImpassabilityAt(x, y, FALSE); +} + +static void AssembleGroup(u32 leaderId, struct RfuGameData * gameData) +{ + s16 x, y, x2, y2; + s32 i; + + PlayerGetDestCoords(&x, &y); + player_get_pos_including_state_based_drift(&x2, &y2); + if (IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, 0) - UR_SPRITE_START_ID) == TRUE) + { + if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE || IsUnionRoomPlayerAt(leaderId, 0, x2, y2) == TRUE) + return; + SpawnGroupMember(leaderId, 0, GetUnionRoomPlayerGraphicsId(gameData->playerGender, gameData->compatibility.playerTrainerId[0]), gameData); + } + for (i = 1; i < MAX_RFU_PLAYERS; i++) + { + if (gameData->partnerInfo[i - 1] == 0) + DespawnGroupMember(leaderId, i); + else if (IsUnionRoomPlayerAt(leaderId, i, x, y) == FALSE && IsUnionRoomPlayerAt(leaderId, i, x2, y2) == FALSE) + SpawnGroupMember(leaderId, i, GetUnionRoomPlayerGraphicsId((gameData->partnerInfo[i - 1] >> PINFO_GENDER_SHIFT) & 1, + gameData->partnerInfo[i - 1] & PINFO_TID_MASK), + gameData); + } +} + +static void SpawnGroupLeaderAndMembers(u32 leaderId, struct RfuGameData * gameData) +{ + u32 i; + switch (gameData->activity) + { + case ACTIVITY_NONE | IN_UNION_ROOM: + case ACTIVITY_PLYRTALK | IN_UNION_ROOM: + SpawnGroupLeader(leaderId, gameData->playerGender, gameData->compatibility.playerTrainerId[0]); + for (i = 0; i < MAX_RFU_PLAYERS; i++) + DespawnGroupMember(leaderId, i); + break; + case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: + case ACTIVITY_TRADE | IN_UNION_ROOM: + case ACTIVITY_CHAT | IN_UNION_ROOM: + case ACTIVITY_CARD | IN_UNION_ROOM: + case ACTIVITY_ACCEPT | IN_UNION_ROOM: + case ACTIVITY_DECLINE | IN_UNION_ROOM: + case ACTIVITY_NPCTALK | IN_UNION_ROOM: + DespawnGroupLeader(leaderId); + AssembleGroup(leaderId, gameData); + break; + default: + AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979) + } +} + +static void DespawnGroupLeaderAndMembers(u32 leaderId, struct RfuGameData * gameData) +{ + s32 i; + DespawnGroupLeader(leaderId); + for (i = 0; i < MAX_RFU_PLAYERS; i++) + DespawnGroupMember(leaderId, i); +} + +static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom * uroom) +{ + s32 i; + struct RfuPlayer * leaders; + sUnionObjRefreshTimer = 0; + for (i = 0, leaders = uroom->playerList->players; i < MAX_UNION_ROOM_LEADERS; i++) + { + if (leaders[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + SpawnGroupLeaderAndMembers(i, &leaders[i].rfu.data); + else if (leaders[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) + DespawnGroupLeaderAndMembers(i, &leaders[i].rfu.data); + } +} + +void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom) +{ + sUnionObjRefreshTimer = 300; +} + +void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom) +{ + if (++sUnionObjRefreshTimer > 300) + UpdateUnionRoomPlayerSprites(uroom); +} + +bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdPtr, s16 *leaderIdPtr, u8 *spriteIds) +{ + s16 x, y; + s32 leaderId, memberId; + struct RfuPlayer * leaders; + if (!IsPlayerStandingStill()) + return FALSE; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + for (leaderId = 0, leaders = list->players; leaderId < MAX_UNION_ROOM_LEADERS; leaderId++) + { + for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++) + { + s32 objId = UR_PLAYER_SPRITE_ID(leaderId, memberId); + + // Is the player in front of a group member position? + if (x != sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0] + 7) + continue; + if (y != sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1] + 7) + continue; + + // Has a group member spawned at this position? + if (IsVirtualObjectInvisible(objId - UR_SPRITE_START_ID) != FALSE) + continue; + if (IsVirtualObjectAnimating(objId - UR_SPRITE_START_ID) != FALSE) + continue; + if (leaders[leaderId].groupScheduledAnim != UNION_ROOM_SPAWN_IN) + continue; + + // Interaction attempt successful, face player + SetUnionRoomObjectFacingDirection(memberId, leaderId, sOppositeFacingDirection[GetPlayerFacingDirection()]); + *memberIdPtr = memberId; + *leaderIdPtr = leaderId; + return TRUE; + } + } + return FALSE; +} + +static void SetUnionRoomObjectFacingDirection(s32 memberId, s32 leaderId, u8 direction) +{ + TurnVirtualObject(MAX_RFU_PLAYERS * leaderId - UR_SPRITE_START_ID + memberId, direction); +} + +void UpdateUnionRoomMemberFacing(u32 memberId, u32 leaderId, struct RfuPlayerList *list) +{ + return SetUnionRoomObjectFacingDirection(memberId, leaderId, GetNewFacingDirectionForUnionRoomPlayer(memberId, leaderId, &list->players[leaderId].rfu.data)); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 0dc0544c1..f957d320b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -102,7 +102,7 @@ .include "src/help_message.o" .include "src/quest_log_events.o" .include "src/union_room.o" - .include "src/rfu_union_tool.o" + .include "src/union_room_player_avatar.o" .include "src/union_room_battle.o" .include "src/pokemon_special_anim.o" .include "src/party_menu.o" From 91915c5662318efcc04e193ee053c737617683c7 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Nov 2022 13:39:39 -0500 Subject: [PATCH 15/42] Fix player list array sizes --- include/link_rfu.h | 6 +++--- include/union_room.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/link_rfu.h b/include/link_rfu.h index 47588004c..e3b60ccb4 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -240,8 +240,8 @@ void MG_DrawCheckerboardPattern(void); void Rfu_SetCloseLinkCallback(void); bool8 IsLinkRfuTaskFinished(void); void DestroyWirelessStatusIndicatorSprite(void); -void CreateTask_LinkMysteryGiftWithFriend(u32 arg0); -void CreateTask_LinkMysteryGiftOverWireless(u32 arg0); +void CreateTask_LinkMysteryGiftWithFriend(u32 activity); +void CreateTask_LinkMysteryGiftOverWireless(u32 activity); void CreateTask_SendMysteryGift(u32 activity); void Rfu_SendPacket(void *data); u8 CreateTask_ListenToWireless(void); @@ -292,7 +292,7 @@ bool8 LmanAcceptSlotFlagIsNotZero(void); void LinkRfu_StopManagerAndFinalizeSlots(void); bool32 RfuTryDisconnectLeavingChildren(void); bool32 IsRfuCommunicatingWithAllChildren(void); -bool32 WaitRfuState(bool32 a0); +bool32 WaitRfuState(bool32 force); bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *trainerName); void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name); u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name); diff --git a/include/union_room.h b/include/union_room.h index 51390c637..0e1fd6260 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -38,7 +38,7 @@ struct RfuPlayer struct RfuPlayerList { - struct RfuPlayer players[0]; // TODO: Should be size MAX_RFU_PLAYER_LIST_SIZE + struct RfuPlayer players[MAX_RFU_PLAYER_LIST_SIZE]; }; struct RfuIncomingPlayer @@ -49,7 +49,7 @@ struct RfuIncomingPlayer struct RfuIncomingPlayerList { - struct RfuIncomingPlayer players[0]; // TODO: Should be size MAX_RFU_PLAYERS + struct RfuIncomingPlayer players[MAX_RFU_PLAYERS]; }; struct WirelessLink_Leader From d055ebad83ed1dd97697a9b81155054e4721e76f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 27 Oct 2022 14:36:40 -0400 Subject: [PATCH 16/42] Document item_case --- include/item.h | 6 +- include/strings.h | 4 +- include/tm_case.h | 22 +- src/berry_pouch.c | 16 +- src/data/items.json | 750 +++++++++++++------------- src/data/items.json.txt | 2 +- src/item.c | 12 +- src/item_menu.c | 26 +- src/item_use.c | 4 +- src/party_menu.c | 2 +- src/shop.c | 10 +- src/strings.c | 4 +- src/tm_case.c | 1105 +++++++++++++++++++++++---------------- 13 files changed, 1086 insertions(+), 877 deletions(-) diff --git a/include/item.h b/include/item.h index e58348a78..1271e0d00 100644 --- a/include/item.h +++ b/include/item.h @@ -14,7 +14,7 @@ struct Item u8 holdEffectParam; const u8 *description; u8 importance; - u8 exitsBagOnUse; + u8 registrability; u8 pocket; u8 type; // unused for balls ItemUseFunc fieldUseFunc; @@ -69,7 +69,7 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId); u8 ItemId_GetBattleUsage(u16 itemId); ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); -u16 itemid_get_market_price(u16 itemId); +u16 ItemId_GetPrice(u16 itemId); void ClearBag(void); void ClearPCItemSlots(void); void TrySetObtainedItemQuestLogEvent(u16 itemId); @@ -79,7 +79,7 @@ void SortPocketAndPlaceHMsFirst(struct BagPocket * pocket); u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 itemId); u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 itemId); u16 BagGetQuantityByItemId(u16 item); -bool8 itemid_is_unique(u16 itemId); +u8 ItemId_GetImportance(u16 itemId); void BagPocketCompaction(struct ItemSlot * slots, u8 capacity); u16 GetPcItemQuantity(u16 *); void SetBagPocketsPointers(void); diff --git a/include/strings.h b/include/strings.h index 222ed935d..c6df3df91 100644 --- a/include/strings.h +++ b/include/strings.h @@ -103,8 +103,8 @@ extern const u8 gText_ItemCantBeHeld[]; extern const u8 gText_TMCase[]; extern const u8 gText_Close[]; extern const u8 gText_TMCaseWillBePutAway[]; -extern const u8 gText_FontSize0[]; -extern const u8 gText_FontSize2[]; +extern const u8 gText_Font0[]; +extern const u8 gText_Font2[]; extern const u8 gText_OhNoICantBuyThat[]; extern const u8 gText_HowManyWouldYouLikeToSell[]; extern const u8 gText_ICanPayThisMuch_WouldThatBeOkay[]; diff --git a/include/tm_case.h b/include/tm_case.h index 22fb021e0..b940596f2 100644 --- a/include/tm_case.h +++ b/include/tm_case.h @@ -1,17 +1,21 @@ #ifndef GUARD_TM_CASE_H #define GUARD_TM_CASE_H -enum TmCaseType -{ - TMCASE_FROMFIELD, - TMCASE_FROMPARTYGIVE, - TMCASE_FROMMARTSELL, - TMCASE_FROMPOKEMONSTORAGEPC, - TMCASE_FROMBATTLE, - TMCASE_NA +// Values for 'type' argument to InitTMCase +enum { + TMCASE_FIELD, + TMCASE_GIVE_PARTY, + TMCASE_SELL, + TMCASE_GIVE_PC, + TMCASE_POKEDUDE, + TMCASE_REOPENING, }; -void InitTMCase(u8 a0, void (* a1)(void), u8 a2); +// Alternative value for 'allowSelectClose' argument to InitTMCase. +// Indicates that the previous value should be preserved +#define TMCASE_KEEP_PREV 0xFF + +void InitTMCase(u8 type, void (* exitCallback)(void), bool8 allowSelectClose); void ResetTMCaseCursorPos(void); void Pokedude_InitTMCase(void); diff --git a/src/berry_pouch.c b/src/berry_pouch.c index b18e0cd4a..2baf367de 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -684,13 +684,13 @@ static void SetUpListMenuTemplate(void) static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId) { - StringCopy(gStringVar4, gText_FontSize0); + StringCopy(gStringVar4, gText_Font0); StringAppend(gStringVar4, gText_NumberClear01); ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, gStringVar1); CopyItemName(itemId, gStringVar1); StringAppend(gStringVar4, sText_Space); - StringAppend(gStringVar4, gText_FontSize2); + StringAppend(gStringVar4, gText_Font2); StringAppend(gStringVar4, gStringVar1); StringCopy(dest, gStringVar4); } @@ -1265,7 +1265,7 @@ static void Task_ContextMenu_FromPokemonPC(u8 taskId) static void Task_ContextMenu_Sell(u8 taskId) { s16 * data = gTasks[taskId].data; - if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + if (ItemId_GetPrice(gSpecialVar_ItemId) == 0) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); @@ -1293,7 +1293,7 @@ static void Task_ContextMenu_Sell(u8 taskId) static void Task_AskSellMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_SellMultiple_CreateYesNoMenu); } @@ -1323,7 +1323,7 @@ static void Task_Sell_PrintSelectMultipleUI(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); BerryPouchPrint(windowId, FONT_0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); - SellMultiple_UpdateSellPriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); + SellMultiple_UpdateSellPriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); PrintMoneyInWin2(); CreateScrollIndicatorArrows_SellQuantity(); gTasks[taskId].func = Task_Sell_SelectMultiple; @@ -1340,7 +1340,7 @@ static void Task_Sell_SelectMultiple(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { PrintxQuantityOnWindow(1, data[8], 2); - SellMultiple_UpdateSellPriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); + SellMultiple_UpdateSellPriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); } else if (JOY_NEW(A_BUTTON)) { @@ -1373,7 +1373,7 @@ static void Task_SellYes(u8 taskId) PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); DisplayItemMessageInBerryPouch(taskId, FONT_2, gStringVar4, Task_SellBerries_PlaySfxAndRemoveBerries); } @@ -1383,7 +1383,7 @@ static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId) s16 * data = gTasks[taskId].data; PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); - AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); + AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]); RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); SortAndCountBerries(); diff --git a/src/data/items.json b/src/data/items.json index 9527febe7..25c9056ff 100644 --- a/src/data/items.json +++ b/src/data/items.json @@ -8,7 +8,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -24,7 +24,7 @@ "holdEffectParam": 0, "description_english": "The best BALL with the ultimate\\nperformance. It will catch any wild\\nPOKéMON without fail.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 0, "fieldUseFunc": "NULL", @@ -40,7 +40,7 @@ "holdEffectParam": 0, "description_english": "A very high-grade BALL that offers\\na higher POKéMON catch rate than\\na GREAT BALL.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 1, "fieldUseFunc": "NULL", @@ -56,7 +56,7 @@ "holdEffectParam": 0, "description_english": "A good, quality BALL that offers\\na higher POKéMON catch rate than\\na standard POKé BALL.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 2, "fieldUseFunc": "NULL", @@ -72,7 +72,7 @@ "holdEffectParam": 0, "description_english": "A BALL thrown to catch a wild\\nPOKéMON. It is designed in a\\ncapsule style.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 3, "fieldUseFunc": "NULL", @@ -88,7 +88,7 @@ "holdEffectParam": 0, "description_english": "A special BALL that is used only in\\nthe SAFARI ZONE. It is finished in\\na camouflage pattern.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 4, "fieldUseFunc": "NULL", @@ -104,7 +104,7 @@ "holdEffectParam": 0, "description_english": "A somewhat different BALL that\\nworks especially well on WATER- and\\nBUG-type POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 5, "fieldUseFunc": "NULL", @@ -120,7 +120,7 @@ "holdEffectParam": 0, "description_english": "A somewhat different BALL that\\nworks especially well on POKéMON\\ndeep in the sea.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 6, "fieldUseFunc": "NULL", @@ -136,7 +136,7 @@ "holdEffectParam": 0, "description_english": "A somewhat different BALL that\\nworks especially well on weaker\\nPOKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 7, "fieldUseFunc": "NULL", @@ -152,7 +152,7 @@ "holdEffectParam": 0, "description_english": "A somewhat different BALL that\\nworks especially well on POKéMON\\ncaught before.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 8, "fieldUseFunc": "NULL", @@ -168,7 +168,7 @@ "holdEffectParam": 0, "description_english": "A somewhat different BALL that\\nbecomes progressively better the\\nmore turns there are in a battle.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 9, "fieldUseFunc": "NULL", @@ -184,7 +184,7 @@ "holdEffectParam": 0, "description_english": "A comfortable BALL that makes a\\ncaptured wild POKéMON quickly grow\\nfriendly.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 10, "fieldUseFunc": "NULL", @@ -200,7 +200,7 @@ "holdEffectParam": 0, "description_english": "A rare BALL that has been\\nspecially made to commemorate an\\nevent of some sort.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_POKE_BALLS", "type": 11, "fieldUseFunc": "NULL", @@ -216,7 +216,7 @@ "holdEffectParam": 20, "description_english": "A spray-type wound medicine.\\nIt restores the HP of one POKéMON\\nby 20 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -232,7 +232,7 @@ "holdEffectParam": 0, "description_english": "A spray-type medicine.\\nIt heals one POKéMON from a\\npoisoning.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -248,7 +248,7 @@ "holdEffectParam": 0, "description_english": "A spray-type medicine.\\nIt heals one POKéMON of a burn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -264,7 +264,7 @@ "holdEffectParam": 0, "description_english": "A spray-type medicine.\\nIt defrosts a frozen POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -280,7 +280,7 @@ "holdEffectParam": 0, "description_english": "A spray-type medicine.\\nIt awakens a sleeping POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -296,7 +296,7 @@ "holdEffectParam": 0, "description_english": "A spray-type medicine.\\nIt heals one POKéMON from\\nparalysis.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -312,7 +312,7 @@ "holdEffectParam": 255, "description_english": "A medicine that fully restores the\\nHP and heals any status problems\\nof one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -328,7 +328,7 @@ "holdEffectParam": 255, "description_english": "A spray-type wound medicine.\\nIt fully restores the HP of one\\nPOKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -344,7 +344,7 @@ "holdEffectParam": 200, "description_english": "A spray-type wound medicine.\\nIt restores the HP of one POKéMON\\nby 200 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -360,7 +360,7 @@ "holdEffectParam": 50, "description_english": "A spray-type wound medicine.\\nIt restores the HP of one POKéMON\\nby 50 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -376,7 +376,7 @@ "holdEffectParam": 0, "description_english": "A spray-type medicine.\\nIt heals all the status problems of\\none POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -392,7 +392,7 @@ "holdEffectParam": 0, "description_english": "A medicine that revives a fainted\\nPOKéMON, restoring HP by half the\\nmaximum amount.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -408,7 +408,7 @@ "holdEffectParam": 0, "description_english": "A medicine that revives a fainted\\nPOKéMON, restoring HP fully.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -424,7 +424,7 @@ "holdEffectParam": 50, "description_english": "Water with a high mineral content.\\nIt restores the HP of one POKéMON\\nby 50 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -440,7 +440,7 @@ "holdEffectParam": 60, "description_english": "A fizzy soda drink.\\nIt restores the HP of one POKéMON\\nby 60 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -456,7 +456,7 @@ "holdEffectParam": 80, "description_english": "A very sweet drink.\\nIt restores the HP of one POKéMON\\nby 80 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -472,7 +472,7 @@ "holdEffectParam": 100, "description_english": "Highly nutritious milk.\\nIt restores the HP of one POKéMON\\nby 100 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -488,7 +488,7 @@ "holdEffectParam": 0, "description_english": "A very bitter medicine powder.\\nIt restores the HP of one POKéMON\\nby 50 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -504,7 +504,7 @@ "holdEffectParam": 0, "description_english": "A very bitter root.\\nIt restores the HP of one POKéMON\\nby 200 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -520,7 +520,7 @@ "holdEffectParam": 0, "description_english": "A very bitter medicine powder.\\nIt heals all the status problems of\\none POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -536,7 +536,7 @@ "holdEffectParam": 0, "description_english": "A very bitter medicinal herb.\\nIt revives a fainted POKéMON,\\nrestoring HP fully.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -552,7 +552,7 @@ "holdEffectParam": 10, "description_english": "Restores a selected move's PP by\\n10 points for one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Ether", @@ -568,7 +568,7 @@ "holdEffectParam": 255, "description_english": "Fully restores a selected move's PP\\nfor one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Ether", @@ -584,7 +584,7 @@ "holdEffectParam": 10, "description_english": "Restores the PP of all moves for\\none POKéMON by 10 points each.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Ether", @@ -600,7 +600,7 @@ "holdEffectParam": 255, "description_english": "Fully restores the PP of all moves\\nfor one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Ether", @@ -616,7 +616,7 @@ "holdEffectParam": 0, "description_english": "LAVARIDGE TOWN's local specialty.\\nIt heals all the status problems of\\none POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -632,7 +632,7 @@ "holdEffectParam": 0, "description_english": "A blue glass flute that awakens\\na sleeping POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -648,7 +648,7 @@ "holdEffectParam": 0, "description_english": "A yellow glass flute that snaps one\\nPOKéMON out of confusion.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -664,7 +664,7 @@ "holdEffectParam": 0, "description_english": "A red glass flute that snaps one\\nPOKéMON out of infatuation.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -680,7 +680,7 @@ "holdEffectParam": 50, "description_english": "A black glass flute.\\nWhen blown, it makes wild POKéMON\\nless likely to appear.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_BlackWhiteFlute", @@ -696,7 +696,7 @@ "holdEffectParam": 150, "description_english": "A white glass flute.\\nWhen blown, it makes wild POKéMON\\nmore likely to appear.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_BlackWhiteFlute", @@ -712,7 +712,7 @@ "holdEffectParam": 20, "description_english": "A 100% pure juice.\\nIt restores the HP of one POKéMON\\nby 20 points.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -728,7 +728,7 @@ "holdEffectParam": 0, "description_english": "Revives all fainted POKéMON,\\nrestoring HP fully.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_SacredAsh", @@ -744,7 +744,7 @@ "holdEffectParam": 0, "description_english": "Pure salt obtained from deep inside\\nthe SHOAL CAVE. It is extremely\\nsalty.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -760,7 +760,7 @@ "holdEffectParam": 0, "description_english": "A pretty seashell found deep inside\\nthe SHOAL CAVE. It is striped in\\nblue and white.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -776,7 +776,7 @@ "holdEffectParam": 0, "description_english": "A small red shard.\\nIt appears to be from some sort of\\na tool made long ago.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -792,7 +792,7 @@ "holdEffectParam": 0, "description_english": "A small blue shard.\\nIt appears to be from some sort of\\na tool made long ago.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -808,7 +808,7 @@ "holdEffectParam": 0, "description_english": "A small yellow shard.\\nIt appears to be from some sort of\\na tool made long ago.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -824,7 +824,7 @@ "holdEffectParam": 0, "description_english": "A small green shard.\\nIt appears to be from some sort of\\na tool made long ago.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -840,7 +840,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -856,7 +856,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -872,7 +872,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -888,7 +888,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -904,7 +904,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -920,7 +920,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -936,7 +936,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -952,7 +952,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -968,7 +968,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -984,7 +984,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1000,7 +1000,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1016,7 +1016,7 @@ "holdEffectParam": 0, "description_english": "A nutritious drink for POKéMON.\\nIt raises the base HP of one\\nPOKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -1032,7 +1032,7 @@ "holdEffectParam": 0, "description_english": "A nutritious drink for POKéMON.\\nIt raises the base ATTACK stat of\\none POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -1048,7 +1048,7 @@ "holdEffectParam": 0, "description_english": "A nutritious drink for POKéMON.\\nIt raises the base DEFENSE stat of\\none POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -1064,7 +1064,7 @@ "holdEffectParam": 0, "description_english": "A nutritious drink for POKéMON.\\nIt raises the base SPEED stat of\\none POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -1080,7 +1080,7 @@ "holdEffectParam": 0, "description_english": "A nutritious drink for POKéMON.\\nIt raises the base SP. ATK stat\\nof one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -1096,7 +1096,7 @@ "holdEffectParam": 0, "description_english": "A candy that is packed with energy.\\nIt raises the level of a POKéMON\\nby one.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_RareCandy", @@ -1112,7 +1112,7 @@ "holdEffectParam": 0, "description_english": "Slightly raises the maximum PP of\\na selected move for one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_PpUp", @@ -1128,7 +1128,7 @@ "holdEffectParam": 0, "description_english": "A nutritious drink for POKéMON.\\nIt raises the base SP. DEF stat\\nof one POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -1144,7 +1144,7 @@ "holdEffectParam": 0, "description_english": "Raises the PP of a selected move\\nto its maximum level for one\\nPOKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_PpUp", @@ -1160,7 +1160,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1176,7 +1176,7 @@ "holdEffectParam": 0, "description_english": "An item that prevents stat reduction\\namong party POKéMON for five turns\\nafter use.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1192,7 +1192,7 @@ "holdEffectParam": 0, "description_english": "Raises the critical-hit ratio of\\nPOKéMON in battle. Wears off if the\\nPOKéMON is withdrawn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1208,7 +1208,7 @@ "holdEffectParam": 0, "description_english": "Raises the ATTACK stat of POKéMON\\nin battle. Wears off if the POKéMON\\nis withdrawn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1224,7 +1224,7 @@ "holdEffectParam": 0, "description_english": "Raises the DEFENSE stat of POKéMON\\nin battle. Wears off if the POKéMON\\nis withdrawn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1240,7 +1240,7 @@ "holdEffectParam": 0, "description_english": "Raises the SPEED stat of POKéMON\\nin battle. Wears off if the POKéMON\\nis withdrawn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1256,7 +1256,7 @@ "holdEffectParam": 0, "description_english": "Raises the accuracy stat of\\nPOKéMON in battle. Wears off if the\\nPOKéMON is withdrawn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1272,7 +1272,7 @@ "holdEffectParam": 0, "description_english": "Raises the SP. ATK stat of\\nPOKéMON in battle. Wears off if the\\nPOKéMON is withdrawn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1288,7 +1288,7 @@ "holdEffectParam": 0, "description_english": "An attractive doll.\\nUse it to flee from any battle with\\na wild POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1304,7 +1304,7 @@ "holdEffectParam": 0, "description_english": "An attractive item.\\nUse it to flee from any battle with\\na wild POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1320,7 +1320,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1336,7 +1336,7 @@ "holdEffectParam": 200, "description_english": "Prevents weak wild POKéMON from\\nappearing for 200 steps.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_Repel", @@ -1352,7 +1352,7 @@ "holdEffectParam": 250, "description_english": "Prevents weak wild POKéMON from\\nappearing for 250 steps.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_Repel", @@ -1368,7 +1368,7 @@ "holdEffectParam": 0, "description_english": "A long, durable rope.\\nUse it to escape instantly from a\\ncave or a dungeon.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "ItemUseOutOfBattle_EscapeRope", @@ -1384,7 +1384,7 @@ "holdEffectParam": 100, "description_english": "Prevents weak wild POKéMON from\\nappearing for 100 steps.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_Repel", @@ -1400,7 +1400,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1416,7 +1416,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1432,7 +1432,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1448,7 +1448,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1464,7 +1464,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1480,7 +1480,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1496,7 +1496,7 @@ "holdEffectParam": 0, "description_english": "A peculiar stone that makes certain\\nspecies of POKéMON evolve.\\nIt is as red as the sun.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_EvoItem", @@ -1512,7 +1512,7 @@ "holdEffectParam": 0, "description_english": "A peculiar stone that makes certain\\nspecies of POKéMON evolve.\\nIt is as black as the night sky.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_EvoItem", @@ -1528,7 +1528,7 @@ "holdEffectParam": 0, "description_english": "A peculiar stone that makes certain\\nspecies of POKéMON evolve.\\nIt is colored orange.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_EvoItem", @@ -1544,7 +1544,7 @@ "holdEffectParam": 0, "description_english": "A peculiar stone that makes certain\\nspecies of POKéMON evolve.\\nIt has a thunderbolt pattern.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_EvoItem", @@ -1560,7 +1560,7 @@ "holdEffectParam": 0, "description_english": "A peculiar stone that makes certain\\nspecies of POKéMON evolve.\\nIt is a clear light blue.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_EvoItem", @@ -1576,7 +1576,7 @@ "holdEffectParam": 0, "description_english": "A peculiar stone that makes certain\\nspecies of POKéMON evolve.\\nIt has a leaf pattern.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_EvoItem", @@ -1592,7 +1592,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1608,7 +1608,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1624,7 +1624,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1640,7 +1640,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1656,7 +1656,7 @@ "holdEffectParam": 0, "description_english": "A small and rare mushroom.\\nIt is quite popular among certain\\npeople.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1672,7 +1672,7 @@ "holdEffectParam": 0, "description_english": "A large and rare mushroom.\\nIt is very popular among certain\\npeople.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1688,7 +1688,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1704,7 +1704,7 @@ "holdEffectParam": 0, "description_english": "A relatively small pearl that\\nsparkles in a pretty silver color.\\nIt can be sold cheaply.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1720,7 +1720,7 @@ "holdEffectParam": 0, "description_english": "A quite-large pearl that sparkles\\nin a pretty silver color.\\nIt can be sold at a high price.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1736,7 +1736,7 @@ "holdEffectParam": 0, "description_english": "A pretty red sand with a loose,\\nsilky feel.\\nIt can be sold at a high price.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1752,7 +1752,7 @@ "holdEffectParam": 0, "description_english": "A shard of a pretty gem that\\nsparkles in a red color.\\nIt can be sold at a high price.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1768,7 +1768,7 @@ "holdEffectParam": 0, "description_english": "A nugget of pure gold that gives\\noff a lustrous gleam.\\nIt can be sold at a high price.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1784,7 +1784,7 @@ "holdEffectParam": 0, "description_english": "A pretty, heart-shaped scale that\\nis extremely rare. It glows faintly\\nin the colors of a rainbow.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1800,7 +1800,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1816,7 +1816,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1832,7 +1832,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1848,7 +1848,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1864,7 +1864,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1880,7 +1880,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1896,7 +1896,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1912,7 +1912,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1928,7 +1928,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -1944,7 +1944,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nZIGZAGOON print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -1960,7 +1960,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nWINGULL print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -1976,7 +1976,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nPIKACHU print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -1992,7 +1992,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nMAGNEMITE print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2008,7 +2008,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nSLAKOTH print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2024,7 +2024,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nWAILMER print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2040,7 +2040,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL to be held by a\\nPOKéMON. It will bear the print of\\nthe POKéMON holding it.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2056,7 +2056,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nDUSKULL print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2072,7 +2072,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a cute\\nBELLOSSOM print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2088,7 +2088,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL to be held by a\\nPOKéMON. It will bear the print of\\nthe POKéMON holding it.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2104,7 +2104,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a\\ngorgeous, extravagant print.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2120,7 +2120,7 @@ "holdEffectParam": 0, "description_english": "A piece of MAIL featuring a print\\nof three cute POKéMON.\\nIt is to be held by a POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_MAIL", "fieldUseFunc": "FieldUseFunc_Mail", @@ -2136,7 +2136,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle to heal paralysis.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2152,7 +2152,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle to wake up.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2168,7 +2168,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle to cure poison.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2184,7 +2184,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle to heal a burn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2200,7 +2200,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle for defrosting.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2216,7 +2216,7 @@ "holdEffectParam": 10, "description_english": "When held by a POKéMON, it will be\\nused in battle to restore 10 PP.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Ether", @@ -2232,7 +2232,7 @@ "holdEffectParam": 10, "description_english": "When held by a POKéMON, it will be\\nused in battle to restore 10 HP.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2248,7 +2248,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle to lift confusion.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2264,7 +2264,7 @@ "holdEffectParam": 0, "description_english": "When held by a POKéMON, it will be\\nused in battle to heal any problem.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2280,7 +2280,7 @@ "holdEffectParam": 30, "description_english": "When held by a POKéMON, it will be\\nused in battle to restore 30 HP.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "FieldUseFunc_Medicine", @@ -2296,7 +2296,7 @@ "holdEffectParam": 8, "description_english": "A hold item that restores HP but\\nmay cause confusion when used.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2312,7 +2312,7 @@ "holdEffectParam": 8, "description_english": "A hold item that restores HP but\\nmay cause confusion when used.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2328,7 +2328,7 @@ "holdEffectParam": 8, "description_english": "A hold item that restores HP but\\nmay cause confusion when used.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2344,7 +2344,7 @@ "holdEffectParam": 8, "description_english": "A hold item that restores HP but\\nmay cause confusion when used.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2360,7 +2360,7 @@ "holdEffectParam": 8, "description_english": "A hold item that restores HP but\\nmay cause confusion when used.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2376,7 +2376,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2392,7 +2392,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2408,7 +2408,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2424,7 +2424,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2440,7 +2440,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2456,7 +2456,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2472,7 +2472,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2488,7 +2488,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2504,7 +2504,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2520,7 +2520,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2536,7 +2536,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2552,7 +2552,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2568,7 +2568,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2584,7 +2584,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2600,7 +2600,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2616,7 +2616,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2632,7 +2632,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2648,7 +2648,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2664,7 +2664,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2680,7 +2680,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2696,7 +2696,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it raises\\nthe ATTACK stat in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2712,7 +2712,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it raises\\nthe DEFENSE stat in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2728,7 +2728,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it raises\\nthe SPEED stat in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2744,7 +2744,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it raises\\nthe SP. ATK stat in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2760,7 +2760,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it raises\\nthe SP. DEF stat in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2776,7 +2776,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it raises\\nthe critical-hit ratio in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2792,7 +2792,7 @@ "holdEffectParam": 4, "description_english": "When held by a POKéMON, it sharply\\nraises one stat in a pinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2808,7 +2808,7 @@ "holdEffectParam": 0, "description_english": "Can be ground up into a powder as\\nan ingredient for medicine.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_BERRY_POUCH", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "ItemUseOutOfBattle_EnigmaBerry", @@ -2824,7 +2824,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2840,7 +2840,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2856,7 +2856,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2872,7 +2872,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nIt casts a tricky glare that lowers\\nthe opponent's accuracy.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2888,7 +2888,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt restores any lowered stat in\\nbattle. It can be used only once.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2904,7 +2904,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt promotes strong growth but\\nlowers SPEED while it is held.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2920,7 +2920,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nThe holder gets a share of EXP.\\npoints without having to battle.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2936,7 +2936,7 @@ "holdEffectParam": 20, "description_english": "An item to be held by a POKéMON.\\nA light and sharp claw. The holder\\nmay be able to strike first.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2952,7 +2952,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nA bell with a comforting chime that\\nmakes the holder calm and friendly.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2968,7 +2968,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt snaps the holder out of\\ninfatuation. It can be used once.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -2984,7 +2984,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt powers up one move, which\\nbecomes the only usable one.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3000,7 +3000,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nIt may cause the foe to flinch\\nupon taking damage.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3016,7 +3016,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA shiny silver powder that boosts\\nthe power of BUG-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3032,7 +3032,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nIt doubles the battle money if the\\nholding POKéMON takes part.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3048,7 +3048,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt repels wild POKéMON if the\\nholder is first in the party.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3064,7 +3064,7 @@ "holdEffectParam": 0, "description_english": "An orb to be held by a LATIOS or\\nLATIAS. It raises the SP. ATK\\nand SP. DEF stats.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3080,7 +3080,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nA fang that gleams a sharp silver.\\nIt raises the SP. ATK stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3096,7 +3096,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nA scale that shines a faint pink.\\nIt raises the SP. DEF stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3112,7 +3112,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nThe holding POKéMON can flee from\\nany wild POKéMON for sure.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3128,7 +3128,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nThe holding POKéMON is prevented\\nfrom evolving.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3144,7 +3144,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nThe holding POKéMON may endure an\\nattack, leaving just 1 HP.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3160,7 +3160,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nAn egg filled with happiness that\\nearns extra EXP. points in battle.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3176,7 +3176,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nA lens that boosts the critical-hit\\nratio of the holding POKéMON.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3192,7 +3192,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA special metallic film that boosts\\nthe power of STEEL-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3208,7 +3208,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nThe holding POKéMON gradually\\nregains HP during battle.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3224,7 +3224,7 @@ "holdEffectParam": 10, "description_english": "A thick and tough scale.\\nA DRAGON-type POKéMON may be\\nholding it.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3240,7 +3240,7 @@ "holdEffectParam": 0, "description_english": "An orb to be held by a PIKACHU\\nthat raises the SP. ATK stat.\\nTouching it may cause a shock.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3256,7 +3256,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA loose, silky sand that boosts the\\npower of GROUND-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3272,7 +3272,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nAn unbreakable stone that boosts\\nthe power of ROCK-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3288,7 +3288,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA seed imbued with life that boosts\\nthe power of GRASS-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3304,7 +3304,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA shady-looking pair of glasses\\nthat boosts DARK-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3320,7 +3320,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA belt that boosts determination\\nand FIGHTING-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3336,7 +3336,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA powerful magnet that boosts the\\npower of ELECTRIC-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3352,7 +3352,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA teardrop-shaped gem that boosts\\nthe power of WATER-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3368,7 +3368,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA long, sharp beak that boosts the\\npower of FLYING-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3384,7 +3384,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA small, poisonous barb that boosts\\nthe power of POISON-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3400,7 +3400,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA piece of ice that repels heat\\nand boosts ICE-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3416,7 +3416,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA sinister, eerie tag that boosts\\nGHOST-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3432,7 +3432,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA spoon imbued with telekinetic\\npower boosts PSYCHIC-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3448,7 +3448,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA combustible fuel that boosts the\\npower of FIRE-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3464,7 +3464,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA hard and sharp fang that boosts\\nthe power of DRAGON-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3480,7 +3480,7 @@ "holdEffectParam": 10, "description_english": "An item to be held by a POKéMON.\\nA sumptuous scarf that boosts the\\npower of NORMAL-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3496,7 +3496,7 @@ "holdEffectParam": 0, "description_english": "A transparent device filled with all\\nsorts of data.\\nIt is made by SILPH CO.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3512,7 +3512,7 @@ "holdEffectParam": 8, "description_english": "An item to be held by a POKéMON.\\nThe holding POKéMON regains some\\nHP upon striking the foe.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3528,7 +3528,7 @@ "holdEffectParam": 5, "description_english": "An item to be held by a POKéMON.\\nIt slightly boosts the power of\\nWATER-type moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3544,7 +3544,7 @@ "holdEffectParam": 5, "description_english": "An item to be held by a POKéMON.\\nIts tricky aroma slightly reduces\\nthe foe's accuracy.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3560,7 +3560,7 @@ "holdEffectParam": 0, "description_english": "A glove to be held by a CHANSEY.\\nIt raises CHANSEY's critical-hit\\nratio.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3576,7 +3576,7 @@ "holdEffectParam": 0, "description_english": "A fine, hard powder to be held by\\na DITTO.\\nIt raises DITTO's DEFENSE stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3592,7 +3592,7 @@ "holdEffectParam": 0, "description_english": "A hard bone of some sort to be\\nheld by a CUBONE or MAROWAK.\\nIt raises the ATTACK stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3608,7 +3608,7 @@ "holdEffectParam": 0, "description_english": "A stick of leek to be held by a\\nFARFETCH'D. It raises FARFETCH'D's\\ncritical-hit ratio.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3624,7 +3624,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3640,7 +3640,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3656,7 +3656,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3672,7 +3672,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3688,7 +3688,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3704,7 +3704,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3720,7 +3720,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3736,7 +3736,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3752,7 +3752,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3768,7 +3768,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3784,7 +3784,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3800,7 +3800,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3816,7 +3816,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3832,7 +3832,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3848,7 +3848,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3864,7 +3864,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3880,7 +3880,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3896,7 +3896,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3912,7 +3912,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3928,7 +3928,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3944,7 +3944,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3960,7 +3960,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3976,7 +3976,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -3992,7 +3992,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4008,7 +4008,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4024,7 +4024,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4040,7 +4040,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4056,7 +4056,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4072,7 +4072,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt boosts the holding POKéMON's\\nCOOL condition in CONTESTS.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4088,7 +4088,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt boosts the holding POKéMON's\\nBEAUTY condition in CONTESTS.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4104,7 +4104,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt boosts the holding POKéMON's\\nCUTE condition in CONTESTS.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4120,7 +4120,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt boosts the holding POKéMON's\\nSMART condition in CONTESTS.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4136,7 +4136,7 @@ "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nIt boosts the holding POKéMON's\\nTOUGH condition in CONTESTS.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4152,7 +4152,7 @@ "holdEffectParam": 0, "description_english": "A folding bicycle that is at least\\ntwice as fast as walking.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_Bike", @@ -4168,7 +4168,7 @@ "holdEffectParam": 0, "description_english": "A case for holding COINS obtained\\nat the GAME CORNER.\\nIt holds up to 9,999 COINS.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_CoinCase", @@ -4184,7 +4184,7 @@ "holdEffectParam": 0, "description_english": "A device used for finding items.\\nIf there is a hidden item nearby\\nwhen it is used, it emits a signal.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "ItemUseOutOfBattle_Itemfinder", @@ -4200,7 +4200,7 @@ "holdEffectParam": 0, "description_english": "An old and beat-up fishing rod.\\nUse it by any body of water to \\nfish for wild POKéMON.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_Rod", @@ -4216,7 +4216,7 @@ "holdEffectParam": 0, "description_english": "A new, good-quality fishing rod.\\nUse it by any body of water to \\nfish for wild POKéMON.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_Rod", @@ -4232,7 +4232,7 @@ "holdEffectParam": 0, "description_english": "An awesome, high-tech fishing rod.\\nUse it by any body of water to fish\\nfor wild POKéMON.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_Rod", @@ -4248,7 +4248,7 @@ "holdEffectParam": 0, "description_english": "The ticket required for sailing on\\nthe ferry S.S. ANNE.\\nIt has a drawing of a ship on it.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4264,7 +4264,7 @@ "holdEffectParam": 0, "description_english": "The pass required for entering\\nPOKéMON CONTESTS. It has a\\ndrawing of an award ribbon on it.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4280,7 +4280,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4296,7 +4296,7 @@ "holdEffectParam": 0, "description_english": "A nifty watering pail.\\nUse it to promote strong growth in\\nBERRIES planted in soft soil.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4312,7 +4312,7 @@ "holdEffectParam": 0, "description_english": "A package that contains mechanical\\nparts of some sort made by the\\nDEVON CORPORATION.", "importance": 2, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4328,7 +4328,7 @@ "holdEffectParam": 0, "description_english": "A sack used to collect volcanic\\nash automatically during walks\\nover deep ash.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4344,7 +4344,7 @@ "holdEffectParam": 0, "description_english": "The key to NEW MAUVILLE, which\\nwas constructed beneath MAUVILLE\\nCITY.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4360,7 +4360,7 @@ "holdEffectParam": 0, "description_english": "A folding bicycle that is capable\\nof stunts like jumps and wheelies.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_Bike", @@ -4376,7 +4376,7 @@ "holdEffectParam": 0, "description_english": "A case for holding {POKEBLOCK}S made\\nwith a BERRY BLENDER. It releases\\none {POKEBLOCK} when shaken.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4392,7 +4392,7 @@ "holdEffectParam": 0, "description_english": "An extremely important letter to\\nSTEVEN from the PRESIDENT of the\\nDEVON CORPORATION.", "importance": 2, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4408,7 +4408,7 @@ "holdEffectParam": 0, "description_english": "The ticket required for sailing on a\\nferry to a distant southern island.\\nIt features a drawing of an island.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4424,7 +4424,7 @@ "holdEffectParam": 0, "description_english": "An orb that glows red.\\nIt is said to contain an incredible\\npower from ancient times.", "importance": 2, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4440,7 +4440,7 @@ "holdEffectParam": 0, "description_english": "An orb that glows blue.\\nIt is said to contain an incredible\\npower from ancient times.", "importance": 2, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4456,7 +4456,7 @@ "holdEffectParam": 0, "description_english": "A device used to search for\\nlife-forms in water.\\nIt looks too difficult to use.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4472,7 +4472,7 @@ "holdEffectParam": 0, "description_english": "A pair of protective goggles.\\nThey enable a TRAINER to travel\\nthrough even desert sandstorms.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4488,7 +4488,7 @@ "holdEffectParam": 0, "description_english": "A meteorite that fell from space\\nonto MT. MOON long ago.\\nIt is very lumpy and hard.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4504,7 +4504,7 @@ "holdEffectParam": 0, "description_english": "A key that opens the door to Room\\n1 inside the ABANDONED SHIP.\\nIt is old and looks easily broken.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4520,7 +4520,7 @@ "holdEffectParam": 0, "description_english": "A key that opens the door to Room\\n2 inside the ABANDONED SHIP.\\nIt is old and looks easily broken.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4536,7 +4536,7 @@ "holdEffectParam": 0, "description_english": "A key that opens the door to Room\\n4 inside the ABANDONED SHIP.\\nIt is old and looks easily broken.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4552,7 +4552,7 @@ "holdEffectParam": 0, "description_english": "A key that opens the door to Room\\n6 inside the ABANDONED SHIP.\\nIt is old and looks easily broken.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4568,7 +4568,7 @@ "holdEffectParam": 0, "description_english": "A key that opens the storage hold\\ninside the ABANDONED SHIP.\\nIt is old and looks easily broken.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4584,7 +4584,7 @@ "holdEffectParam": 0, "description_english": "A fossil of an ancient, seafloor-\\ndwelling POKéMON. It appears to be\\npart of a plant root.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4600,7 +4600,7 @@ "holdEffectParam": 0, "description_english": "A fossil of an ancient, seafloor-\\ndwelling POKéMON. It appears to be\\npart of a claw.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4616,7 +4616,7 @@ "holdEffectParam": 0, "description_english": "A scope that signals the presence\\nof any unseeable POKéMON.\\nIt is made by the DEVON CORP.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -4632,7 +4632,7 @@ "holdEffectParam": 0, "description_english": "An extremely powerful attack.\\nHowever, if the user is hit before\\nusing the move, they will flinch.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4649,7 +4649,7 @@ "holdEffectParam": 0, "description_english": "Sharp, huge claws hook and slash\\nthe foe quickly and with great\\npower.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4666,7 +4666,7 @@ "holdEffectParam": 0, "description_english": "The foe is hit with a pulsing blast\\nof water. It may also confuse the\\ntarget.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4683,7 +4683,7 @@ "holdEffectParam": 0, "description_english": "The user calms its spirit and\\nfocuses its mind to raise its\\nSP. ATK and SP. DEF stats.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4700,7 +4700,7 @@ "holdEffectParam": 0, "description_english": "A savage roar that causes the foe\\nto switch out of battle. In the\\nwild, ROAR ends the battle.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4717,7 +4717,7 @@ "holdEffectParam": 0, "description_english": "A move that leaves the foe badly\\npoisoned. Its poison damage worsens\\nevery turn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4734,7 +4734,7 @@ "holdEffectParam": 0, "description_english": "Summons a hailstorm that lasts for\\nfive turns. The hailstorm damages\\nall types except the ICE type.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4751,7 +4751,7 @@ "holdEffectParam": 0, "description_english": "The user tightens all its muscles\\nand bulks up, boosting both its\\nATTACK and DEFENSE stats.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4768,7 +4768,7 @@ "holdEffectParam": 0, "description_english": "The user shoots seeds at the foe\\nin rapid succession. Two to five\\nseeds are shot at once.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4785,7 +4785,7 @@ "holdEffectParam": 0, "description_english": "A variable move that changes type\\nand power depending on the POKéMON\\nusing it.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4802,7 +4802,7 @@ "holdEffectParam": 0, "description_english": "The weather is turned sunny for\\nfive turns. Over that time, FIRE-\\ntype moves are powered up.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4819,7 +4819,7 @@ "holdEffectParam": 0, "description_english": "A taunted foe may become enraged.\\nIt will then only be able to use\\nattack moves.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4836,7 +4836,7 @@ "holdEffectParam": 0, "description_english": "An icy-cold beam is shot at the\\nfoe. It may leave the target\\nfrozen.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4853,7 +4853,7 @@ "holdEffectParam": 0, "description_english": "A vicious snow-and-wind attack that\\nstrikes all foes in battle. It may\\ncause freezing.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4870,7 +4870,7 @@ "holdEffectParam": 0, "description_english": "A harsh attack that inflicts severe\\ndamage on the foe. However, the\\nuser must rest the next turn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4887,7 +4887,7 @@ "holdEffectParam": 0, "description_english": "A wall of light is created over\\nfive turns. It reduces damage from\\nSP. ATK attacks.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4904,7 +4904,7 @@ "holdEffectParam": 0, "description_english": "The user is completely protected\\nfrom attack in the turn it is used.\\nIt may fail if used in succession.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4921,7 +4921,7 @@ "holdEffectParam": 0, "description_english": "A heavy rain is summoned for five\\nturns. Over that time, WATER-type\\nmoves are powered up.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4938,7 +4938,7 @@ "holdEffectParam": 0, "description_english": "The user strikes the foe with\\ntentacles or roots, stealing the\\ntarget's HP and healing itself.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4955,7 +4955,7 @@ "holdEffectParam": 0, "description_english": "Protects the party with a shield\\nagainst all status problems over\\nfive turns.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4972,7 +4972,7 @@ "holdEffectParam": 0, "description_english": "This attack move grows more\\npowerful the more the POKéMON\\ndislikes its TRAINER.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -4989,7 +4989,7 @@ "holdEffectParam": 0, "description_english": "A 2-turn attack that uses the first\\nturn for absorbing sunlight, then\\nblasting the foe in the next turn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5006,7 +5006,7 @@ "holdEffectParam": 0, "description_english": "The foe is slammed with a sturdy\\ntail of steel. It may lower the\\ntarget's DEFENSE stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5023,7 +5023,7 @@ "holdEffectParam": 0, "description_english": "A massive jolt of electricity is\\nlaunched at the foe. It may cause\\nparalysis.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5040,7 +5040,7 @@ "holdEffectParam": 0, "description_english": "Strikes the foe with a huge\\nthunderbolt. It may cause\\nparalysis.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5057,7 +5057,7 @@ "holdEffectParam": 0, "description_english": "Causes an earthquake that strikes\\nall POKéMON in battle, excluding\\nthe user.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5074,7 +5074,7 @@ "holdEffectParam": 0, "description_english": "This attack move grows more\\npowerful the more the POKéMON\\nlikes its TRAINER.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5091,7 +5091,7 @@ "holdEffectParam": 0, "description_english": "A 2-turn attack in which the user\\ndigs underground, then strikes.\\nIt can be used to exit dungeons.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5108,7 +5108,7 @@ "holdEffectParam": 0, "description_english": "A powerful blast of telekinetic\\nenergy strikes the foe. It may\\nlower the target's SP. DEF stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5125,7 +5125,7 @@ "holdEffectParam": 0, "description_english": "The foe is attacked with a shadowy\\nlump. It may lower the target's\\nSP. DEF stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5142,7 +5142,7 @@ "holdEffectParam": 0, "description_english": "Strikes the foe with a rock-hard\\nfist, etc. It shatters barriers such\\nas REFLECT and LIGHT SCREEN.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5159,7 +5159,7 @@ "holdEffectParam": 0, "description_english": "The user begins moving so quickly\\nthat it creates illusory copies to\\nraise its evasiveness.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5176,7 +5176,7 @@ "holdEffectParam": 0, "description_english": "A tough barrier is put up over five\\nturns. It reduces damage from\\nphysical attacks over that time.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5193,7 +5193,7 @@ "holdEffectParam": 0, "description_english": "A rapid jolt of electricity strikes\\nthe foe. This attack is impossible\\nto evade.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5210,7 +5210,7 @@ "holdEffectParam": 0, "description_english": "The foe is roasted with a heavy\\nblast of fire. It may leave the\\ntarget with a burn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5227,7 +5227,7 @@ "holdEffectParam": 0, "description_english": "Toxic sludge is hurled at the foe\\nwith great force. It may also\\npoison the target.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5244,7 +5244,7 @@ "holdEffectParam": 0, "description_english": "Summons a sandstorm that lasts for\\nfive turns. It damages all types\\nexcept ROCK, GROUND, and STEEL.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5261,7 +5261,7 @@ "holdEffectParam": 0, "description_english": "The foe is incinerated with an\\nintense flame. It may leave the\\ntarget with a burn.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5278,7 +5278,7 @@ "holdEffectParam": 0, "description_english": "Boulders are hurled at the foe.\\nIt also lowers the target's SPEED\\nstat if it hits.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5295,7 +5295,7 @@ "holdEffectParam": 0, "description_english": "An extremely fast attack against\\none target. It is impossible to\\nevade.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5312,7 +5312,7 @@ "holdEffectParam": 0, "description_english": "If enraged by this move, the target\\nbecomes incapable of using the same\\nmove twice in a row.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5329,7 +5329,7 @@ "holdEffectParam": 0, "description_english": "An attack move that becomes very\\npowerful if the user is poisoned,\\nburned, or paralyzed.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5346,7 +5346,7 @@ "holdEffectParam": 0, "description_english": "An attack move that may have an\\nadditional effect depending on the\\nbattle terrain.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5363,7 +5363,7 @@ "holdEffectParam": 0, "description_english": "A move that makes the user fall\\nasleep over two turns to restore HP\\nand heal any status problems.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5380,7 +5380,7 @@ "holdEffectParam": 0, "description_english": "The foe, if it is the opposite\\ngender as the user, becomes\\ninfatuated and may not attack.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5397,7 +5397,7 @@ "holdEffectParam": 0, "description_english": "An attack that gives the user an\\nopportunity to steal the foe's hold\\nitem.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5414,7 +5414,7 @@ "holdEffectParam": 0, "description_english": "The foe is struck with steel-hard\\nwings. It may also raise the user's\\nDEFENSE stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5431,7 +5431,7 @@ "holdEffectParam": 0, "description_english": "A special power is transmitted to\\nthe foe, causing it to switch\\nabilities with the user.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5448,7 +5448,7 @@ "holdEffectParam": 0, "description_english": "A move that steals the effects of\\nany status-changing or healing move\\nthat the foe tries to use.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5465,7 +5465,7 @@ "holdEffectParam": 0, "description_english": "A maximum-power attack of great\\nferocity, but one that also sharply\\nreduces the user's SP. ATK stat.", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5482,7 +5482,7 @@ "holdEffectParam": 0, "description_english": "Attacks the foe with sharp blades\\nor claws. It can also cut down thin\\ntrees and grass outside of battle.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5499,7 +5499,7 @@ "holdEffectParam": 0, "description_english": "The user flies up on the first turn,\\nthen attacks next turn. It can be\\nused to fly to any known town.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5516,7 +5516,7 @@ "holdEffectParam": 0, "description_english": "Creates a huge wave, then crashes\\nit down on the foe. It can be used\\nfor traveling on water.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5533,7 +5533,7 @@ "holdEffectParam": 0, "description_english": "The user builds enormous power,\\nthen slams the foe. It can be used\\nfor moving large, round boulders.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5550,7 +5550,7 @@ "holdEffectParam": 0, "description_english": "Looses a powerful blast of light\\nthat reduces the foe's accuracy.\\nIt also lights up dark caves.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5567,7 +5567,7 @@ "holdEffectParam": 0, "description_english": "Hits the foe with a rock-crushingly\\ntough attack. It can smash cracked\\nboulders.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5584,7 +5584,7 @@ "holdEffectParam": 0, "description_english": "A powerful charge attack. It can\\nbe used for climbing a torrential\\nwaterfall.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5601,7 +5601,7 @@ "holdEffectParam": 0, "description_english": "A 2-turn attack in which the user\\ndives underwater on the first turn,\\nthen strikes in the next turn.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_TM_CASE", "type": "ITEM_TYPE_PARTY_MENU", "fieldUseFunc": "NULL", @@ -5618,7 +5618,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5634,7 +5634,7 @@ "holdEffectParam": 0, "description_english": "?????", "importance": 0, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5650,7 +5650,7 @@ "holdEffectParam": 0, "description_english": "A parcel to be delivered to PROF.\\nOAK from VIRIDIAN CITY's POKéMON\\nMART.", "importance": 2, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5666,7 +5666,7 @@ "holdEffectParam": 0, "description_english": "A flute that is said to instantly\\nawaken any POKéMON. It has a\\nlovely tone.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_PokeFlute", @@ -5682,7 +5682,7 @@ "holdEffectParam": 0, "description_english": "The key to CINNABAR ISLAND GYM's\\nfront door. It is colored red and\\ndecorated.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5698,7 +5698,7 @@ "holdEffectParam": 0, "description_english": "Take this voucher to the BIKE SHOP\\nin CERULEAN CITY and exchange it\\nfor a bicycle.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5714,7 +5714,7 @@ "holdEffectParam": 0, "description_english": "A set of false teeth lost by the\\nSAFARI ZONE'S WARDEN. It makes his\\nsmile sparkle.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5730,7 +5730,7 @@ "holdEffectParam": 0, "description_english": "A piece of amber that contains\\nthe genes of an ancient POKéMON.\\nIt is clear with a reddish tint.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5746,7 +5746,7 @@ "holdEffectParam": 0, "description_english": "A card-type key that unlocks doors\\nin SILPH CO.'s HEAD OFFICE in\\nSAFFRON CITY.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5762,7 +5762,7 @@ "holdEffectParam": 0, "description_english": "A key that operates the elevator\\nin TEAM ROCKET's HIDEOUT.\\nIt bears the TEAM ROCKET logo.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5778,7 +5778,7 @@ "holdEffectParam": 0, "description_english": "A fossil of an ancient, seafloor-\\ndwelling POKéMON. It appears to be\\npart of a seashell.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5794,7 +5794,7 @@ "holdEffectParam": 0, "description_english": "A fossil of an ancient, seafloor-\\ndwelling POKéMON. It appears to be\\npart of a shell.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5810,7 +5810,7 @@ "holdEffectParam": 0, "description_english": "A scope that makes unseeable\\nPOKéMON visible.\\nIt is made by SILPH CO.", "importance": 1, - "exitsBagOnUse": 0, + "registrability": 0, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5826,7 +5826,7 @@ "holdEffectParam": 0, "description_english": "A folding bicycle that allows\\nfaster movement than the RUNNING\\nSHOES.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_Bike", @@ -5842,7 +5842,7 @@ "holdEffectParam": 0, "description_english": "A very convenient map that can be\\nviewed anytime. It even shows your \\npresent location.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_TownMap", @@ -5858,7 +5858,7 @@ "holdEffectParam": 0, "description_english": "A device that indicates TRAINERS\\nwho want to battle. The battery\\ncharges while traveling.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_VsSeeker", @@ -5874,7 +5874,7 @@ "holdEffectParam": 0, "description_english": "A device that enables you to\\nrecall what you've heard and seen\\nabout famous people.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_FameChecker", @@ -5890,7 +5890,7 @@ "holdEffectParam": 0, "description_english": "A case that holds TMs and HMs.\\nIt is attached to the BAG's\\ncompartment for important items.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_TmCase", @@ -5906,7 +5906,7 @@ "holdEffectParam": 0, "description_english": "A pouch for carrying BERRIES.\\nIt is attached to the BAG's\\ncompartment for important items.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_BerryPouch", @@ -5922,7 +5922,7 @@ "holdEffectParam": 0, "description_english": "A television set that is tuned to\\na program with useful tips for\\nnovice TRAINERS.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_FIELD", "fieldUseFunc": "FieldUseFunc_TeachyTv", @@ -5938,7 +5938,7 @@ "holdEffectParam": 0, "description_english": "A pass for ferries between ONE,\\nTWO, and THREE ISLAND.\\nIt has a drawing of three islands.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5954,7 +5954,7 @@ "holdEffectParam": 0, "description_english": "A pass for ferries between\\nVERMILION and the SEVII ISLANDS.\\nIt features a drawing of a rainbow.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5970,7 +5970,7 @@ "holdEffectParam": 0, "description_english": "An aromatic tea prepared by an old\\nlady. It will slake even the worst\\nthirst.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -5986,7 +5986,7 @@ "holdEffectParam": 0, "description_english": "A ticket required to board the ship\\nto NAVEL ROCK.\\nIt glows with a mystic light.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -6002,7 +6002,7 @@ "holdEffectParam": 0, "description_english": "A ticket required to board the ship\\nto BIRTH ISLAND.\\nIt glows beautifully.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -6018,7 +6018,7 @@ "holdEffectParam": 0, "description_english": "A jar for storing BERRY POWDER\\nmade using a BERRY CRUSHER.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_PowderJar", @@ -6034,7 +6034,7 @@ "holdEffectParam": 0, "description_english": "An exquisitely beautiful gem that\\nhas a red glow.\\nIt symbolizes passion.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", @@ -6050,7 +6050,7 @@ "holdEffectParam": 0, "description_english": "An exquisitely beautiful gem that\\nhas a blue glow.\\nIt symbolizes honesty.", "importance": 1, - "exitsBagOnUse": 1, + "registrability": 1, "pocket": "POCKET_KEY_ITEMS", "type": "ITEM_TYPE_BAG_MENU", "fieldUseFunc": "FieldUseFunc_OakStopsYou", diff --git a/src/data/items.json.txt b/src/data/items.json.txt index 0daa783aa..a389a5c83 100644 --- a/src/data/items.json.txt +++ b/src/data/items.json.txt @@ -20,7 +20,7 @@ const struct Item gItems[] = { .description = gItemDescription_{{ item.itemId }}, ## endif .importance = {{ item.importance }}, - .exitsBagOnUse = {{ item.exitsBagOnUse }}, + .registrability = {{ item.registrability }}, .pocket = {{ item.pocket }}, .type = {{ item.type }}, .fieldUseFunc = {{ item.fieldUseFunc }}, diff --git a/src/item.c b/src/item.c index 763838133..e072a5692 100644 --- a/src/item.c +++ b/src/item.c @@ -621,12 +621,13 @@ const u8 * ItemId_GetName(u16 itemId) return gItems[SanitizeItemId(itemId)].name; } -u16 itemid_get_number(u16 itemId) +// Unused +u16 ItemId_GetId(u16 itemId) { return gItems[SanitizeItemId(itemId)].itemId; } -u16 itemid_get_market_price(u16 itemId) +u16 ItemId_GetPrice(u16 itemId) { return gItems[SanitizeItemId(itemId)].price; } @@ -646,14 +647,15 @@ const u8 * ItemId_GetDescription(u16 itemId) return gItems[SanitizeItemId(itemId)].description; } -bool8 itemid_is_unique(u16 itemId) +u8 ItemId_GetImportance(u16 itemId) { return gItems[SanitizeItemId(itemId)].importance; } -u8 itemid_get_x19(u16 itemId) +// Unused +u8 ItemId_GetRegistrability(u16 itemId) { - return gItems[SanitizeItemId(itemId)].exitsBagOnUse; + return gItems[SanitizeItemId(itemId)].registrability; } u8 ItemId_GetPocket(u16 itemId) diff --git a/src/item_menu.c b/src/item_menu.c index 3ee223343..d499d6081 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -714,7 +714,7 @@ static void BagListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) { bagItemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemId); bagItemQuantity = BagGetQuantityByPocketPosition(gBagMenuState.pocket + 1, itemId); - if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) + if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && ItemId_GetImportance(bagItemId) == 0) { ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); @@ -1611,7 +1611,7 @@ static void Task_ItemMenuAction_Give(u8 taskId) CopyWindowToVram(0, COPYWIN_MAP); if (!CanWriteMailHere(itemId)) DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); - else if (!itemid_is_unique(itemId)) + else if (ItemId_GetImportance(itemId) == 0) { if (CalculatePlayerPartyCount() == 0) { @@ -1717,7 +1717,7 @@ static void Task_ItemContext_FieldGive(u8 taskId) ItemMenu_SetExitCallback(GoToBerryPouch_Give); ItemMenu_StartFadeToExitCallback(taskId); } - else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && ItemId_GetImportance(itemId) == 0) { Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; @@ -1730,7 +1730,7 @@ static void Task_ItemContext_FieldGive(u8 taskId) static void GoToTMCase_Give(void) { - InitTMCase(TMCASE_FROMPARTYGIVE, ReturnToBagMenuFromSubmenu_Give, FALSE); + InitTMCase(TMCASE_GIVE_PARTY, ReturnToBagMenuFromSubmenu_Give, FALSE); } static void GoToBerryPouch_Give(void) @@ -1761,7 +1761,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId) ItemMenu_SetExitCallback(GoToBerryPouch_PCBox); ItemMenu_StartFadeToExitCallback(taskId); } - else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && ItemId_GetImportance(itemId) == 0) { Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; @@ -1774,7 +1774,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId) static void GoToTMCase_PCBox(void) { - InitTMCase(TMCASE_FROMPOKEMONSTORAGEPC, ReturnToBagMenuFromSubmenu_PCBox, FALSE); + InitTMCase(TMCASE_GIVE_PC, ReturnToBagMenuFromSubmenu_PCBox, FALSE); } static void GoToBerryPouch_PCBox(void) @@ -1800,7 +1800,7 @@ static void Task_ItemContext_Sell(u8 taskId) ItemMenu_SetExitCallback(GoToBerryPouch_Sell); ItemMenu_StartFadeToExitCallback(taskId); } - else if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + else if (ItemId_GetPrice(gSpecialVar_ItemId) == 0) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); @@ -1827,7 +1827,7 @@ static void Task_ItemContext_Sell(u8 taskId) static void GoToTMCase_Sell(void) { - InitTMCase(TMCASE_FROMMARTSELL, ReturnToBagMenuFromSubmenu_Sell, FALSE); + InitTMCase(TMCASE_SELL, ReturnToBagMenuFromSubmenu_Sell, FALSE); } static void GoToBerryPouch_Sell(void) @@ -1843,7 +1843,7 @@ static void ReturnToBagMenuFromSubmenu_Sell(void) static void Task_PrintSaleConfirmationText(u8 taskId) { s16 *data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ShowSellYesNoMenu); } @@ -1873,7 +1873,7 @@ static void Task_InitSaleQuantitySelectInterface(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); BagPrintTextOnWindow(r4, FONT_0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); - UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); + UpdateSalePriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); BagPrintMoneyAmount(); CreatePocketScrollArrowPair_SellQuantity(); gTasks[taskId].func = Task_SelectQuantityToSell; @@ -1890,7 +1890,7 @@ static void Task_SelectQuantityToSell(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { UpdateQuantityToTossOrDeposit(data[8], 2); - UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); + UpdateSalePriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); } else if (JOY_NEW(A_BUTTON)) { @@ -1923,7 +1923,7 @@ static void Task_SellItem_Yes(u8 taskId) PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_FinalizeSaleToShop); } @@ -1933,7 +1933,7 @@ static void Task_FinalizeSaleToShop(u8 taskId) s16 *data = gTasks[taskId].data; PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); - AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); + AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]); RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); diff --git a/src/item_use.c b/src/item_use.c index 7c5091ccd..331aa5656 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -457,7 +457,7 @@ void FieldUseFunc_TmCase(u8 taskId) static void InitTMCaseFromBag(void) { - InitTMCase(0, CB2_BagMenuFromStartMenu, 0); + InitTMCase(TMCASE_FIELD, CB2_BagMenuFromStartMenu, FALSE); } static void Task_InitTMCaseFromField(u8 taskId) @@ -466,7 +466,7 @@ static void Task_InitTMCaseFromField(u8 taskId) { CleanupOverworldWindowsAndTilemaps(); SetFieldCallback2ForItemUse(); - InitTMCase(0, CB2_ReturnToField, 1); + InitTMCase(TMCASE_FIELD, CB2_ReturnToField, TRUE); DestroyTask(taskId); } } diff --git a/src/party_menu.c b/src/party_menu.c index 33293ed9c..4b64d8480 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4258,7 +4258,7 @@ static void CB2_ReturnToBagMenu(void) static void CB2_ReturnToTMCaseMenu(void) { - InitTMCase(TMCASE_NA, NULL, 0xFF); + InitTMCase(TMCASE_REOPENING, NULL, TMCASE_KEEP_PREV); } static void CB2_ReturnToBerryPouchMenu(void) diff --git a/src/shop.c b/src/shop.c index 7327874ca..37c3c7ee0 100644 --- a/src/shop.c +++ b/src/shop.c @@ -614,7 +614,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 item, u8 y) if (item != INDEX_CANCEL) { - ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, 4); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(item), 0, 4); x = 4 - StringLength(gStringVar1); loc = gStringVar4; while (x-- != 0) @@ -902,7 +902,7 @@ static void Task_BuyMenu(u8 taskId) BuyMenuRemoveScrollIndicatorArrows(); BuyMenuPrintCursor(tListTaskId, 2); RecolorItemDescriptionBox(1); - gShopData.itemPrice = itemid_get_market_price(itemId); + gShopData.itemPrice = ItemId_GetPrice(itemId); if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) { BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); @@ -931,7 +931,7 @@ static void Task_BuyHowManyDialogueInit(u8 taskId) BuyMenuQuantityBoxNormalBorder(3, 0); BuyMenuPrintItemQuantityAndPrice(taskId); ScheduleBgCopyTilemapToVram(0); - maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); + maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / ItemId_GetPrice(tItemId); if (maxQuantity > 99) gShopData.maxQuantity = 99; else @@ -949,7 +949,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE) { - gShopData.itemPrice = itemid_get_market_price(tItemId) * tItemCount; + gShopData.itemPrice = ItemId_GetPrice(tItemId) * tItemCount; BuyMenuPrintItemQuantityAndPrice(taskId); } else @@ -1102,7 +1102,7 @@ void RecordItemPurchase(u16 item, u16 quantity, u8 a2) if (history->unk0 < 999999) { - history->unk0 += (itemid_get_market_price(item) >> (a2 - 1)) * quantity; + history->unk0 += (ItemId_GetPrice(item) >> (a2 - 1)) * quantity; if (history->unk0 > 999999) history->unk0 = 999999; } diff --git a/src/strings.c b/src/strings.c index 9ce0e031c..e9b40707e 100644 --- a/src/strings.c +++ b/src/strings.c @@ -207,8 +207,8 @@ const u8 gText_PokeFluteAwakenedMon[] = _("The POKé FLUTE awakened sleeping\nPO const u8 gText_TMCase[] = _("TM CASE"); const u8 gText_Close[] = _("CLOSE"); const u8 gText_TMCaseWillBePutAway[] = _("The TM CASE will be\nput away."); -const u8 gText_FontSize0[] = _("{FONT_0}"); -const u8 gText_FontSize2[] = _("{FONT_2}"); +const u8 gText_Font0[] = _("{FONT_0}"); +const u8 gText_Font2[] = _("{FONT_2}"); const u8 gText_EmptySpace[] = _(" "); const u8 gText_BerryPouch[] = _("BERRY POUCH"); const u8 gText_TheBerryPouchWillBePutAway[] = _("The BERRY POUCH will be\nput away."); diff --git a/src/tm_case.c b/src/tm_case.c index 8ef9e7fbb..401a2a57c 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1,4 +1,5 @@ #include "global.h" +#include "tm_case.h" #include "gflib.h" #include "decompress.h" #include "graphics.h" @@ -23,45 +24,96 @@ #include "constants/items.h" #include "constants/songs.h" -#define TM_CASE_TM_TAG 400 +// Any item in the TM Case with nonzero importance is considered an HM +#define IS_HM(itemId) (ItemId_GetImportance(itemId) != 0) -struct UnkStruct_203B10C -{ - void (* savedCallback)(void); - u8 tmCaseMenuType; - u8 unk_05; - u8 unk_06; - u16 selectedRow; - u16 scrollOffset; +#define TAG_SCROLL_ARROW 110 + +enum { + WIN_LIST, + WIN_DESCRIPTION, + WIN_SELECTED_MSG, + WIN_TITLE, + WIN_MOVE_INFO_LABELS, + WIN_MOVE_INFO, + WIN_MESSAGE, + WIN_SELL_QUANTITY, + WIN_MONEY, }; -struct UnkStruct_203B118 -{ - void (* savedCallback)(void); - u8 tmSpriteId; +// Window IDs for the context menu that opens when a TM/HM is selected +enum { + WIN_USE_GIVE_EXIT, + WIN_GIVE_EXIT, +}; + +// IDs for the actions in the context menu +enum { + ACTION_USE, + ACTION_GIVE, + ACTION_EXIT +}; + +enum { + COLOR_LIGHT, + COLOR_DARK, + COLOR_CURSOR_SELECTED, + COLOR_MOVE_INFO, + COLOR_CURSOR_ERASE = 0xFF +}; + +// Base position for TM/HM disc sprite +#define DISC_BASE_X 41 +#define DISC_BASE_Y 46 + +#define DISC_CASE_DISTANCE 20 // The total number of pixels a disc travels vertically in/out of the case +#define DISC_Y_MOVE 10 // The number of pixels a disc travels vertically per movement step + +#define TAG_DISC 400 + +#define DISC_HIDDEN 0xFF // When no TM/HM is selected, hide the disc sprite + +enum { + ANIM_TM, + ANIM_HM, +}; + +// The "static" resources are preserved even if the TM case is exited. This is +// useful for when its left temporarily (e.g. going to the party menu to teach a TM) +// but also to preserve the selected item when the TM case is fully closed. +static EWRAM_DATA struct { + void (* exitCallback)(void); + u8 menuType; + bool8 allowSelectClose; + u8 unused; + u16 selectedRow; + u16 scrollOffset; +} sTMCaseStaticResources = {}; + +// The "dynamic" resources will be reset any time the TM case is exited, even temporarily. +static EWRAM_DATA struct { + void (* nextScreenCallback)(void); + u8 discSpriteId; u8 maxTMsShown; u8 numTMs; u8 contextMenuWindowId; - u8 scrollIndicatorArrowPairId; + u8 scrollArrowsTaskId; u16 currItem; const u8 * menuActionIndices; u8 numMenuActions; s16 seqId; - u8 filler_14[8]; -}; + u8 unused[8]; +} * sTMCaseDynamicResources = NULL; -struct UnkStruct_203B11C -{ +// Save the player's bag state when the Pokedude's bag is being shown +static EWRAM_DATA struct { struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; - u16 unk_160; - u16 unk_162; -}; + u16 selectedRow; + u16 scrollOffset; +} * sPokedudeBagBackup = NULL; -static EWRAM_DATA struct UnkStruct_203B10C sTMCaseStaticResources = {}; -static EWRAM_DATA struct UnkStruct_203B118 * sTMCaseDynamicResources = NULL; -static EWRAM_DATA struct UnkStruct_203B11C * sPokedudePackBackup = NULL; -static EWRAM_DATA void *sTilemapBuffer = NULL; // tilemap buffer +static EWRAM_DATA void *sTilemapBuffer = NULL; static EWRAM_DATA struct ListMenuItem * sListMenuItemsBuffer = NULL; static EWRAM_DATA u8 (* sListMenuStringsBuffer)[29] = NULL; static EWRAM_DATA u16 * sTMSpritePaletteBuffer = NULL; @@ -74,28 +126,29 @@ static bool8 HandleLoadTMCaseGraphicsAndPalettes(void); static void CreateTMCaseListMenuBuffers(void); static void InitTMCaseListMenuItems(void); static void GetTMNumberAndMoveString(u8 * dest, u16 itemId); -static void TMCase_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void TMCase_ItemPrintFunc(u8 windowId, u32 itemId, u8 y); -static void TMCase_MoveCursor_UpdatePrintedDescription(s32 itemIndex); -static void PrintListMenuCursorAt_WithColorIdx(u8 a0, u8 a1); -static void CreateTMCaseScrollIndicatorArrowPair_Main(void); +static void List_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void List_ItemPrintFunc(u8 windowId, u32 itemId, u8 y); +static void PrintDescription(s32 itemIndex); +static void PrintMoveInfo(u16 itemId); +static void PrintListCursorAtRow(u8 y, u8 colorIdx); +static void CreateListScrollArrows(void); static void TMCaseSetup_GetTMCount(void); static void TMCaseSetup_InitListMenuPositions(void); static void TMCaseSetup_UpdateVisualMenuOffset(void); static void Task_FadeOutAndCloseTMCase(u8 taskId); -static void Task_TMCaseMain(u8 taskId); -static void Task_SelectTMAction_FromFieldBag(u8 taskId); -static void Task_TMContextMenu_HandleInput(u8 taskId); -static void TMHMContextMenuAction_Use(u8 taskId); -static void TMHMContextMenuAction_Give(u8 taskId); +static void Task_HandleListInput(u8 taskId); +static void Task_SelectedTMHM_Field(u8 taskId); +static void Task_ContextMenu_HandleInput(u8 taskId); +static void Action_Use(u8 taskId); +static void Action_Give(u8 taskId); static void PrintError_ThereIsNoPokemon(u8 taskId); static void PrintError_ItemCantBeHeld(u8 taskId); static void Task_WaitButtonAfterErrorPrint(u8 taskId); -static void Subtask_CloseContextMenuAndReturnToMain(u8 taskId); -static void TMHMContextMenuAction_Exit(u8 taskId); -static void Task_SelectTMAction_Type1(u8 taskId); -static void Task_SelectTMAction_Type3(u8 taskId); -static void Task_SelectTMAction_FromSellMenu(u8 taskId); +static void CloseMessageAndReturnToList(u8 taskId); +static void Action_Exit(u8 taskId); +static void Task_SelectedTMHM_GiveParty(u8 taskId); +static void Task_SelectedTMHM_GivePC(u8 taskId); +static void Task_SelectedTMHM_Sell(u8 taskId); static void Task_AskConfirmSaleWithAmount(u8 taskId); static void Task_PlaceYesNoBox(u8 taskId); static void Task_SaleOfTMsCanceled(u8 taskId); @@ -105,28 +158,27 @@ static void Task_QuantitySelect_HandleInput(u8 taskId); static void Task_PrintSaleConfirmedText(u8 taskId); static void Task_DoSaleOfTMs(u8 taskId); static void Task_AfterSale_ReturnToList(u8 taskId); -static void Task_TMCaseDude1(u8 taskId); -static void Task_TMCaseDude_Playback(u8 taskId); +static void Task_Pokedude_Start(u8 taskId); +static void Task_Pokedude_Run(u8 taskId); static void InitWindowTemplatesAndPals(void); -static void AddTextPrinterParameterized_ColorByIndex(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +static void TMCase_Print(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); static void TMCase_SetWindowBorder1(u8 windowId); static void TMCase_SetWindowBorder2(u8 windowId); -static void TMCase_PrintMessageWithFollowupTask(u8 taskId, u8 fontId, const u8 * str, TaskFunc func); -static void PrintStringTMCaseOnWindow3(void); -static void DrawMoveInfoUIMarkers(void); -static void TMCase_MoveCursor_UpdatePrintedTMInfo(u16 itemId); +static void PrintMessageWithFollowupTask(u8 taskId, u8 fontId, const u8 * str, TaskFunc func); +static void PrintTitle(void); +static void DrawMoveInfoLabels(void); static void PlaceHMTileInWindow(u8 windowId, u8 x, u8 y); -static void HandlePrintMoneyOnHand(void); +static void PrintPlayersMoney(void); static void HandleCreateYesNoMenu(u8 taskId, const struct YesNoFuncTable * ptrs); -static u8 AddTMContextMenu(u8 * a0, u8 a1); -static void RemoveTMContextMenu(u8 * a0); -static u8 CreateTMSprite(u16 itemId); -static void SetTMSpriteAnim(struct Sprite *sprite, u8 var); -static void TintTMSpriteByType(u8 type); -static void UpdateTMSpritePosition(struct Sprite *sprite, u8 var); -static void InitSelectedTMSpriteData(u8 a0, u16 itemId); -static void SpriteCB_MoveTMSpriteInCase(struct Sprite *sprite); -static void LoadTMTypePalettes(void); +static u8 AddContextMenu(u8 * windowId, u8 windowIndex); +static void RemoveContextMenu(u8 * windowId); +static u8 CreateDiscSprite(u16 itemId); +static void SetDiscSpriteAnim(struct Sprite *sprite, u8 tmIdx); +static void TintDiscpriteByType(u8 type); +static void SetDiscSpritePosition(struct Sprite *sprite, u8 tmIdx); +static void SwapDisc(u8 spriteId, u16 itemId); +static void SpriteCB_SwapDisc(struct Sprite *sprite); +static void LoadDiscTypePalettes(void); static const struct BgTemplate sBGTemplates[] = { { @@ -156,21 +208,24 @@ static const struct BgTemplate sBGTemplates[] = { } }; +// The list of functions to run when a TM/HM is selected. +// What happens when one is selected depends on how the player arrived at the TM case static void (*const sSelectTMActionTasks[])(u8 taskId) = { - Task_SelectTMAction_FromFieldBag, - Task_SelectTMAction_Type1, - Task_SelectTMAction_FromSellMenu, - Task_SelectTMAction_Type3 + [TMCASE_FIELD] = Task_SelectedTMHM_Field, + [TMCASE_GIVE_PARTY] = Task_SelectedTMHM_GiveParty, + [TMCASE_SELL] = Task_SelectedTMHM_Sell, + [TMCASE_GIVE_PC] = Task_SelectedTMHM_GivePC }; -static const struct MenuAction sMenuActions_UseGiveExit[] = { - {gOtherText_Use, TMHMContextMenuAction_Use }, - {gOtherText_Give, TMHMContextMenuAction_Give}, - {gOtherText_Exit, TMHMContextMenuAction_Exit}, +static const struct MenuAction sMenuActions[] = { + [ACTION_USE] = {gOtherText_Use, Action_Use }, + [ACTION_GIVE] = {gOtherText_Give, Action_Give}, + [ACTION_EXIT] = {gOtherText_Exit, Action_Exit}, }; -static const u8 sMenuActionIndices_Field[] = {0, 1, 2}; -static const u8 sMenuActionIndices_UnionRoom[] = {1, 2}; +static const u8 sMenuActionIndices_Field[] = {ACTION_USE, ACTION_GIVE, ACTION_EXIT}; +static const u8 sMenuActionIndices_UnionRoom[] = {ACTION_GIVE, ACTION_EXIT}; + static const struct YesNoFuncTable sYesNoFuncTable = {Task_PrintSaleConfirmedText, Task_SaleOfTMsCanceled}; static const u8 sText_ClearTo18[] = _("{CLEAR_TO 18}"); @@ -179,30 +234,126 @@ static const u8 sText_SingleSpace[] = _(" "); static ALIGNED(4) const u16 sPal3Override[] = {RGB(8, 8, 8), RGB(30, 16, 6)}; static const u8 sTextColors[][3] = { - {0, 1, 2}, - {0, 2, 3}, - {0, 3, 6}, - {0, 14, 10} + [COLOR_LIGHT] = {0, 1, 2}, + [COLOR_DARK] = {0, 2, 3}, + [COLOR_CURSOR_SELECTED] = {0, 3, 6}, + [COLOR_MOVE_INFO] = {0, 14, 10}, }; static const struct WindowTemplate sWindowTemplates[] = { - {0x00, 0x0a, 0x01, 0x13, 0x0a, 0x0f, 0x0081}, - {0x00, 0x0c, 0x0c, 0x12, 0x08, 0x0a, 0x013f}, - {0x01, 0x05, 0x0f, 0x0f, 0x04, 0x0d, 0x01f9}, - {0x00, 0x00, 0x01, 0x0a, 0x02, 0x0f, 0x0235}, - {0x00, 0x01, 0x0d, 0x05, 0x06, 0x0c, 0x0249}, - {0x00, 0x07, 0x0d, 0x05, 0x06, 0x0c, 0x0267}, - {0x01, 0x02, 0x0f, 0x1a, 0x04, 0x0b, 0x0285}, - {0x01, 0x11, 0x09, 0x0c, 0x04, 0x0f, 0x02ed}, - {0x01, 0x01, 0x01, 0x08, 0x03, 0x0d, 0x031d}, + [WIN_LIST] = { + .bg = 0, + .tilemapLeft = 10, + .tilemapTop = 1, + .width = 19, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x081 + }, + [WIN_DESCRIPTION] = { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 12, + .width = 18, + .height = 8, + .paletteNum = 10, + .baseBlock = 0x13f + }, + [WIN_SELECTED_MSG] = { + .bg = 1, + .tilemapLeft = 5, + .tilemapTop = 15, + .width = 15, + .height = 4, + .paletteNum = 13, + .baseBlock = 0x1f9 + }, + [WIN_TITLE] = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 1, + .width = 10, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x235 + }, + [WIN_MOVE_INFO_LABELS] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 13, + .width = 5, + .height = 6, + .paletteNum = 12, + .baseBlock = 0x249 + }, + [WIN_MOVE_INFO] = { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 13, + .width = 5, + .height = 6, + .paletteNum = 12, + .baseBlock = 0x267 + }, + [WIN_MESSAGE] = { + .bg = 1, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 11, + .baseBlock = 0x285 + }, + [WIN_SELL_QUANTITY] = { + .bg = 1, + .tilemapLeft = 17, + .tilemapTop = 9, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x2ed + }, + [WIN_MONEY] = { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 8, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x31d + }, DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate sYesNoWindowTemplate = {0x01, 0x15, 0x09, 0x06, 0x04, 0x0f, 0x0335}; +static const struct WindowTemplate sYesNoWindowTemplate = { + .bg = 1, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x335 +}; -static const struct WindowTemplate sTMContextWindowTemplates[] = { - {0x01, 0x16, 0x0d, 0x07, 0x06, 0x0f, 0x01cf}, - {0x01, 0x16, 0x0f, 0x07, 0x04, 0x0f, 0x01cf} +static const struct WindowTemplate sWindowTemplates_ContextMenu[] = { + [WIN_USE_GIVE_EXIT] = { + .bg = 1, + .tilemapLeft = 22, + .tilemapTop = 13, + .width = 7, + .height = 6, + .paletteNum = 15, + .baseBlock = 0x1cf + }, + [WIN_GIVE_EXIT] = { + .bg = 1, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x1cf + }, }; static const struct OamData sTMSpriteOamData = { @@ -210,35 +361,35 @@ static const struct OamData sTMSpriteOamData = { .priority = 2 }; -static const union AnimCmd sTMSpriteAnim0[] = { +static const union AnimCmd sAnim_TM[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd sTMSpriteAnim1[] = { +static const union AnimCmd sAnim_HM[] = { ANIMCMD_FRAME(16, 0), ANIMCMD_END }; -static const union AnimCmd *const sTMSpriteAnims[] = { - sTMSpriteAnim0, - sTMSpriteAnim1 +static const union AnimCmd *const sAnims_Disc[] = { + [ANIM_TM] = sAnim_TM, + [ANIM_HM] = sAnim_HM }; -static const struct CompressedSpriteSheet sTMSpriteSheet = { - (const void *)gTMCaseDisc_Gfx, - 0x400, - TM_CASE_TM_TAG +static const struct CompressedSpriteSheet sSpriteSheet_Disc = { + .data = gTMCaseDisc_Gfx, + .size = 0x400, + .tag = TAG_DISC }; -static const struct SpriteTemplate sTMSpriteTemplate = { - TM_CASE_TM_TAG, - TM_CASE_TM_TAG, - &sTMSpriteOamData, - sTMSpriteAnims, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy +static const struct SpriteTemplate sSpriteTemplate_Disc = { + .tileTag = TAG_DISC, + .paletteTag = TAG_DISC, + .oam = &sTMSpriteOamData, + .anims = sAnims_Disc, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy }; static const u16 sTMSpritePaletteOffsetByType[NUMBER_OF_MON_TYPES] = { @@ -261,19 +412,19 @@ static const u16 sTMSpritePaletteOffsetByType[NUMBER_OF_MON_TYPES] = { [TYPE_DRAGON] = 0x100 }; -void InitTMCase(u8 type, void (* callback)(void), u8 a2) +void InitTMCase(u8 type, void (* exitCallback)(void), bool8 allowSelectClose) { ResetBufferPointers_NoFree(); - sTMCaseDynamicResources = Alloc(sizeof(struct UnkStruct_203B118)); - sTMCaseDynamicResources->savedCallback = 0; - sTMCaseDynamicResources->scrollIndicatorArrowPairId = 0xFF; - sTMCaseDynamicResources->contextMenuWindowId = 0xFF; - if (type != 5) - sTMCaseStaticResources.tmCaseMenuType = type; - if (callback != NULL) - sTMCaseStaticResources.savedCallback = callback; - if (a2 != 0xFF) - sTMCaseStaticResources.unk_05 = a2; + sTMCaseDynamicResources = Alloc(sizeof(*sTMCaseDynamicResources)); + sTMCaseDynamicResources->nextScreenCallback = NULL; + sTMCaseDynamicResources->scrollArrowsTaskId = TASK_NONE; + sTMCaseDynamicResources->contextMenuWindowId = WINDOW_NONE; + if (type != TMCASE_REOPENING) + sTMCaseStaticResources.menuType = type; + if (exitCallback != NULL) + sTMCaseStaticResources.exitCallback = exitCallback; + if (allowSelectClose != TMCASE_KEEP_PREV) + sTMCaseStaticResources.allowSelectClose = allowSelectClose; gTextFlags.autoScroll = FALSE; SetMainCallback2(CB2_SetUpTMCaseUI_Blocking); } @@ -307,6 +458,14 @@ static void CB2_SetUpTMCaseUI_Blocking(void) } } +#define tListTaskId data[0] +#define tSelection data[1] +#define tQuantityOwned data[2] +#define tQuantitySelected data[8] + +#define tPokedudeState data[8] // Re-used +#define tPokedudeTimer data[9] + static bool8 DoSetUpTMCaseUI(void) { u8 taskId; @@ -362,7 +521,7 @@ static bool8 DoSetUpTMCaseUI(void) gMain.state++; break; case 11: - DrawMoveInfoUIMarkers(); + DrawMoveInfoLabels(); gMain.state++; break; case 12: @@ -371,23 +530,23 @@ static bool8 DoSetUpTMCaseUI(void) gMain.state++; break; case 13: - PrintStringTMCaseOnWindow3(); + PrintTitle(); gMain.state++; break; case 14: - if (sTMCaseStaticResources.tmCaseMenuType == 4) - taskId = CreateTask(Task_TMCaseDude1, 0); + if (sTMCaseStaticResources.menuType == TMCASE_POKEDUDE) + taskId = CreateTask(Task_Pokedude_Start, 0); else - taskId = CreateTask(Task_TMCaseMain, 0); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); + taskId = CreateTask(Task_HandleListInput, 0); + gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); gMain.state++; break; case 15: - CreateTMCaseScrollIndicatorArrowPair_Main(); + CreateListScrollArrows(); gMain.state++; break; case 16: - sTMCaseDynamicResources->tmSpriteId = CreateTMSprite(BagGetItemIdByPocketPosition(POCKET_TM_CASE, sTMCaseStaticResources.scrollOffset + sTMCaseStaticResources.selectedRow)); + sTMCaseDynamicResources->discSpriteId = CreateDiscSprite(BagGetItemIdByPocketPosition(POCKET_TM_CASE, sTMCaseStaticResources.scrollOffset + sTMCaseStaticResources.selectedRow)); gMain.state++; break; case 17: @@ -423,7 +582,7 @@ static void LoadBGTemplates(void) ptr = &sTilemapBuffer; *ptr = AllocZeroed(0x800); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates)); + InitBgsFromTemplates(0, sBGTemplates, ARRAY_COUNT(sBGTemplates)); SetBgTilemapBuffer(2, *ptr); ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(2); @@ -462,11 +621,11 @@ static bool8 HandleLoadTMCaseGraphicsAndPalettes(void) sTMCaseDynamicResources->seqId++; break; case 4: - LoadCompressedSpriteSheet(&sTMSpriteSheet); + LoadCompressedSpriteSheet(&sSpriteSheet_Disc); sTMCaseDynamicResources->seqId++; break; default: - LoadTMTypePalettes(); + LoadDiscTypePalettes(); sTMCaseDynamicResources->seqId = 0; return TRUE; } @@ -493,10 +652,11 @@ static void InitTMCaseListMenuItems(void) sListMenuItemsBuffer[i].index = i; } sListMenuItemsBuffer[i].label = gText_Close; - sListMenuItemsBuffer[i].index = -2; + sListMenuItemsBuffer[i].index = LIST_CANCEL; + gMultiuseListMenuTemplate.items = sListMenuItemsBuffer; - gMultiuseListMenuTemplate.totalItems = sTMCaseDynamicResources->numTMs + 1; - gMultiuseListMenuTemplate.windowId = 0; + gMultiuseListMenuTemplate.totalItems = sTMCaseDynamicResources->numTMs + 1; // +1 for Cancel + gMultiuseListMenuTemplate.windowId = WIN_LIST; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 8; gMultiuseListMenuTemplate.cursor_X = 0; @@ -508,15 +668,15 @@ static void InitTMCaseListMenuItems(void) gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; - gMultiuseListMenuTemplate.moveCursorFunc = TMCase_MoveCursorFunc; - gMultiuseListMenuTemplate.itemPrintFunc = TMCase_ItemPrintFunc; + gMultiuseListMenuTemplate.moveCursorFunc = List_MoveCursorFunc; + gMultiuseListMenuTemplate.itemPrintFunc = List_ItemPrintFunc; gMultiuseListMenuTemplate.cursorKind = 0; gMultiuseListMenuTemplate.scrollMultiple = 0; } static void GetTMNumberAndMoveString(u8 * dest, u16 itemId) { - StringCopy(gStringVar4, gText_FontSize0); + StringCopy(gStringVar4, gText_Font0); if (itemId >= ITEM_HM01) { StringAppend(gStringVar4, sText_ClearTo18); @@ -531,38 +691,38 @@ static void GetTMNumberAndMoveString(u8 * dest, u16 itemId) StringAppend(gStringVar4, gStringVar1); } StringAppend(gStringVar4, sText_SingleSpace); - StringAppend(gStringVar4, gText_FontSize2); + StringAppend(gStringVar4, gText_Font2); StringAppend(gStringVar4, gMoveNames[ItemIdToBattleMoveId(itemId)]); StringCopy(dest, gStringVar4); } -static void TMCase_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +static void List_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) { u16 itemId; - if (itemIndex == -2) - itemId = 0; + if (itemIndex == LIST_CANCEL) + itemId = ITEM_NONE; else itemId = BagGetItemIdByPocketPosition(POCKET_TM_CASE, itemIndex); if (onInit != TRUE) { PlaySE(SE_SELECT); - InitSelectedTMSpriteData(sTMCaseDynamicResources->tmSpriteId, itemId); + SwapDisc(sTMCaseDynamicResources->discSpriteId, itemId); } - TMCase_MoveCursor_UpdatePrintedDescription(itemIndex); - TMCase_MoveCursor_UpdatePrintedTMInfo(itemId); + PrintDescription(itemIndex); + PrintMoveInfo(itemId); } -static void TMCase_ItemPrintFunc(u8 windowId, u32 itemId, u8 y) +static void List_ItemPrintFunc(u8 windowId, u32 itemIndex, u8 y) { - if (itemId != -2) + if (itemIndex != LIST_CANCEL) { - if (!itemid_is_unique(BagGetItemIdByPocketPosition(POCKET_TM_CASE, itemId))) + if (!IS_HM(BagGetItemIdByPocketPosition(POCKET_TM_CASE, itemIndex))) { - ConvertIntToDecimalStringN(gStringVar1, BagGetQuantityByPocketPosition(POCKET_TM_CASE, itemId), STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, BagGetQuantityByPocketPosition(POCKET_TM_CASE, itemIndex), STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - AddTextPrinterParameterized_ColorByIndex(windowId, FONT_0, gStringVar4, 0x7E, y, 0, 0, 0xFF, 1); + TMCase_Print(windowId, FONT_0, gStringVar4, 126, y, 0, 0, TEXT_SKIP_DRAW, COLOR_DARK); } else { @@ -571,62 +731,69 @@ static void TMCase_ItemPrintFunc(u8 windowId, u32 itemId, u8 y) } } -static void TMCase_MoveCursor_UpdatePrintedDescription(s32 itemIndex) +static void PrintDescription(s32 itemIndex) { const u8 * str; - if (itemIndex != -2) - { + if (itemIndex != LIST_CANCEL) str = ItemId_GetDescription(BagGetItemIdByPocketPosition(POCKET_TM_CASE, itemIndex)); - } else - { str = gText_TMCaseWillBePutAway; - } - FillWindowPixelBuffer(1, 0); - AddTextPrinterParameterized_ColorByIndex(1, FONT_2, str, 2, 3, 1, 0, 0, 0); + FillWindowPixelBuffer(WIN_DESCRIPTION, 0); + TMCase_Print(WIN_DESCRIPTION, FONT_2, str, 2, 3, 1, 0, 0, COLOR_LIGHT); } -static void FillBG2RowWithPalette_2timesNplus1(s32 a0) +// Darkens (or subsequently lightens) the blue bg tiles around the description window when a TM/HM is selected. +// shade=0: lighten, shade=1: darken +static void SetDescriptionWindowShade(s32 shade) { - SetBgTilemapPalette(2, 0, 12, 30, 8, 2 * a0 + 1); + SetBgTilemapPalette(2, 0, 12, 30, 8, 2 * shade + 1); ScheduleBgCopyTilemapToVram(2); } -static void PrintListMenuCursorByID_WithColorIdx(u8 a0, u8 a1) +static void PrintListCursor(u8 listTaskId, u8 colorIdx) { - PrintListMenuCursorAt_WithColorIdx(ListMenuGetYCoordForPrintingArrowCursor(a0), a1); + PrintListCursorAtRow(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), colorIdx); } -static void PrintListMenuCursorAt_WithColorIdx(u8 a0, u8 a1) +static void PrintListCursorAtRow(u8 y, u8 colorIdx) { - if (a1 == 0xFF) + if (colorIdx == COLOR_CURSOR_ERASE) { - FillWindowPixelRect(0, 0, 0, a0, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT)); - CopyWindowToVram(0, COPYWIN_GFX); + // Never used. Would erase cursor (but also a portion of the list text) + FillWindowPixelRect(WIN_LIST, 0, 0, y, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT)); + CopyWindowToVram(WIN_LIST, COPYWIN_GFX); } else { - AddTextPrinterParameterized_ColorByIndex(0, FONT_2, gText_SelectorArrow2, 0, a0, 0, 0, 0, a1); + TMCase_Print(WIN_LIST, FONT_2, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx); } } -static void CreateTMCaseScrollIndicatorArrowPair_Main(void) +static void CreateListScrollArrows(void) { - sTMCaseDynamicResources->scrollIndicatorArrowPairId = AddScrollIndicatorArrowPairParameterized(2, 0xA0, 0x08, 0x58, sTMCaseDynamicResources->numTMs - sTMCaseDynamicResources->maxTMsShown + 1, 0x6E, 0x6E, &sTMCaseStaticResources.scrollOffset); + sTMCaseDynamicResources->scrollArrowsTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, + 160, 8, 88, + sTMCaseDynamicResources->numTMs - sTMCaseDynamicResources->maxTMsShown + 1, + TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, + &sTMCaseStaticResources.scrollOffset); } -static void CreateTMCaseScrollIndicatorArrowPair_SellQuantitySelect(void) +static void CreateQuantityScrollArrows(void) { sTMCaseDynamicResources->currItem = 1; - sTMCaseDynamicResources->scrollIndicatorArrowPairId = AddScrollIndicatorArrowPairParameterized(2, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &sTMCaseDynamicResources->currItem); + sTMCaseDynamicResources->scrollArrowsTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, + 152, 72, 104, + 2, + TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, + &sTMCaseDynamicResources->currItem); } -static void RemoveTMCaseScrollIndicatorArrowPair(void) +static void RemoveScrollArrows(void) { - if (sTMCaseDynamicResources->scrollIndicatorArrowPairId != 0xFF) + if (sTMCaseDynamicResources->scrollArrowsTaskId != TASK_NONE) { - RemoveScrollIndicatorArrowPair(sTMCaseDynamicResources->scrollIndicatorArrowPairId); - sTMCaseDynamicResources->scrollIndicatorArrowPairId = 0xFF; + RemoveScrollIndicatorArrowPair(sTMCaseDynamicResources->scrollArrowsTaskId); + sTMCaseDynamicResources->scrollArrowsTaskId = TASK_NONE; } } @@ -709,18 +876,18 @@ static void Task_FadeOutAndCloseTMCase(u8 taskId) if (!gPaletteFade.active) { - DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); - if (sTMCaseDynamicResources->savedCallback != NULL) - SetMainCallback2(sTMCaseDynamicResources->savedCallback); + DestroyListMenuTask(tListTaskId, &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + if (sTMCaseDynamicResources->nextScreenCallback != NULL) + SetMainCallback2(sTMCaseDynamicResources->nextScreenCallback); else - SetMainCallback2(sTMCaseStaticResources.savedCallback); - RemoveTMCaseScrollIndicatorArrowPair(); + SetMainCallback2(sTMCaseStaticResources.exitCallback); + RemoveScrollArrows(); DestroyTMCaseBuffers(); DestroyTask(taskId); } } -static void Task_TMCaseMain(u8 taskId) +static void Task_HandleListInput(u8 taskId) { s16 * data = gTasks[taskId].data; s32 input; @@ -729,9 +896,9 @@ static void Task_TMCaseMain(u8 taskId) { if (MenuHelpers_CallLinkSomething() != TRUE) { - input = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); - if (JOY_NEW(SELECT_BUTTON) && sTMCaseStaticResources.unk_05 == 1) + input = ListMenu_ProcessInput(tListTaskId); + ListMenuGetScrollAndRow(tListTaskId, &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + if (JOY_NEW(SELECT_BUTTON) && sTMCaseStaticResources.allowSelectClose == TRUE) { PlaySE(SE_SELECT); gSpecialVar_ItemId = ITEM_NONE; @@ -741,22 +908,22 @@ static void Task_TMCaseMain(u8 taskId) { switch (input) { - case -1: + case LIST_NOTHING_CHOSEN: break; - case -2: + case LIST_CANCEL: PlaySE(SE_SELECT); - gSpecialVar_ItemId = 0; + gSpecialVar_ItemId = ITEM_NONE; Task_BeginFadeOutFromTMCase(taskId); break; default: PlaySE(SE_SELECT); - FillBG2RowWithPalette_2timesNplus1(1); - RemoveTMCaseScrollIndicatorArrowPair(); - PrintListMenuCursorByID_WithColorIdx(data[0], 2); - data[1] = input; - data[2] = BagGetQuantityByPocketPosition(POCKET_TM_CASE, input); + SetDescriptionWindowShade(1); + RemoveScrollArrows(); + PrintListCursor(tListTaskId, COLOR_CURSOR_SELECTED); + tSelection = input; + tQuantityOwned = BagGetQuantityByPocketPosition(POCKET_TM_CASE, input); gSpecialVar_ItemId = BagGetItemIdByPocketPosition(POCKET_TM_CASE, input); - gTasks[taskId].func = sSelectTMActionTasks[sTMCaseStaticResources.tmCaseMenuType]; + gTasks[taskId].func = sSelectTMActionTasks[sTMCaseStaticResources.menuType]; break; } } @@ -764,47 +931,67 @@ static void Task_TMCaseMain(u8 taskId) } } -static void Subtask_ReturnToTMCaseMain(u8 taskId) +static void ReturnToList(u8 taskId) { - FillBG2RowWithPalette_2timesNplus1(0); - CreateTMCaseScrollIndicatorArrowPair_Main(); - gTasks[taskId].func = Task_TMCaseMain; + SetDescriptionWindowShade(0); + CreateListScrollArrows(); + gTasks[taskId].func = Task_HandleListInput; } -static void Task_SelectTMAction_FromFieldBag(u8 taskId) +// When a TM/HM in the list is selected in the field, create a context +// menu with a list of actions that can be taken. +static void Task_SelectedTMHM_Field(u8 taskId) { u8 * strbuf; - TMCase_SetWindowBorder2(2); + + // Create context window + TMCase_SetWindowBorder2(WIN_SELECTED_MSG); if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE) { - AddTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId, 0); + // Regular TM/HM context menu + AddContextMenu(&sTMCaseDynamicResources->contextMenuWindowId, WIN_USE_GIVE_EXIT); sTMCaseDynamicResources->menuActionIndices = sMenuActionIndices_Field; - sTMCaseDynamicResources->numMenuActions = NELEMS(sMenuActionIndices_Field); + sTMCaseDynamicResources->numMenuActions = ARRAY_COUNT(sMenuActionIndices_Field); } else { - AddTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId, 1); + // In Union Room, "Use" is removed from the context menu + AddContextMenu(&sTMCaseDynamicResources->contextMenuWindowId, WIN_GIVE_EXIT); sTMCaseDynamicResources->menuActionIndices = sMenuActionIndices_UnionRoom; - sTMCaseDynamicResources->numMenuActions = NELEMS(sMenuActionIndices_UnionRoom); + sTMCaseDynamicResources->numMenuActions = ARRAY_COUNT(sMenuActionIndices_UnionRoom); } - AddItemMenuActionTextPrinters(sTMCaseDynamicResources->contextMenuWindowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 0, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sTMCaseDynamicResources->numMenuActions, sMenuActions_UseGiveExit, sTMCaseDynamicResources->menuActionIndices); + + // Print context window actions + AddItemMenuActionTextPrinters(sTMCaseDynamicResources->contextMenuWindowId, + FONT_2, + GetMenuCursorDimensionByFont(FONT_2, 0), + 2, + 0, + GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, + sTMCaseDynamicResources->numMenuActions, + sMenuActions, + sTMCaseDynamicResources->menuActionIndices); + Menu_InitCursor(sTMCaseDynamicResources->contextMenuWindowId, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sTMCaseDynamicResources->numMenuActions, 0); + + // Print label text next to the context window strbuf = Alloc(256); GetTMNumberAndMoveString(strbuf, gSpecialVar_ItemId); StringAppend(strbuf, gText_Var1IsSelected + 2); // +2 skips over the stringvar - AddTextPrinterParameterized_ColorByIndex(2, FONT_2, strbuf, 0, 2, 1, 0, 0, 1); + TMCase_Print(WIN_SELECTED_MSG, FONT_2, strbuf, 0, 2, 1, 0, 0, COLOR_DARK); Free(strbuf); - if (itemid_is_unique(gSpecialVar_ItemId)) + if (IS_HM(gSpecialVar_ItemId)) { - PlaceHMTileInWindow(2, 0, 2); - CopyWindowToVram(2, COPYWIN_GFX); + PlaceHMTileInWindow(WIN_SELECTED_MSG, 0, 2); + CopyWindowToVram(WIN_SELECTED_MSG, COPYWIN_GFX); } + ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - gTasks[taskId].func = Task_TMContextMenu_HandleInput; + gTasks[taskId].func = Task_ContextMenu_HandleInput; } -static void Task_TMContextMenu_HandleInput(u8 taskId) +static void Task_ContextMenu_HandleInput(u8 taskId) { s8 input; @@ -813,26 +1000,27 @@ static void Task_TMContextMenu_HandleInput(u8 taskId) input = Menu_ProcessInputNoWrapAround(); switch (input) { - case -1: + case MENU_B_PRESSED: + // Run last action in list (Exit) PlaySE(SE_SELECT); - sMenuActions_UseGiveExit[sTMCaseDynamicResources->menuActionIndices[sTMCaseDynamicResources->numMenuActions - 1]].func.void_u8(taskId); + sMenuActions[sTMCaseDynamicResources->menuActionIndices[sTMCaseDynamicResources->numMenuActions - 1]].func.void_u8(taskId); break; - case -2: + case MENU_NOTHING_CHOSEN: break; default: PlaySE(SE_SELECT); - sMenuActions_UseGiveExit[sTMCaseDynamicResources->menuActionIndices[input]].func.void_u8(taskId); + sMenuActions[sTMCaseDynamicResources->menuActionIndices[input]].func.void_u8(taskId); break; } } } -static void TMHMContextMenuAction_Use(u8 taskId) +static void Action_Use(u8 taskId) { - RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId); - ClearStdWindowAndFrameToTransparent(2, FALSE); - ClearWindowTilemap(2); - PutWindowTilemap(0); + RemoveContextMenu(&sTMCaseDynamicResources->contextMenuWindowId); + ClearStdWindowAndFrameToTransparent(WIN_SELECTED_MSG, FALSE); + ClearWindowTilemap(WIN_SELECTED_MSG); + PutWindowTilemap(WIN_LIST); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); if (CalculatePlayerPartyCount() == 0) @@ -841,25 +1029,26 @@ static void TMHMContextMenuAction_Use(u8 taskId) } else { + // Chose a TM/HM to use, exit TM case for party menu gItemUseCB = ItemUseCB_TMHM; - sTMCaseDynamicResources->savedCallback = CB2_ShowPartyMenuForItemUse; + sTMCaseDynamicResources->nextScreenCallback = CB2_ShowPartyMenuForItemUse; Task_BeginFadeOutFromTMCase(taskId); } } -static void TMHMContextMenuAction_Give(u8 taskId) +static void Action_Give(u8 taskId) { s16 * data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1]); - RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId); - ClearStdWindowAndFrameToTransparent(2, FALSE); - ClearWindowTilemap(2); - PutWindowTilemap(1); - PutWindowTilemap(4); - PutWindowTilemap(5); + u16 itemId = BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection); + RemoveContextMenu(&sTMCaseDynamicResources->contextMenuWindowId); + ClearStdWindowAndFrameToTransparent(WIN_SELECTED_MSG, FALSE); + ClearWindowTilemap(WIN_SELECTED_MSG); + PutWindowTilemap(WIN_DESCRIPTION); + PutWindowTilemap(WIN_MOVE_INFO_LABELS); + PutWindowTilemap(WIN_MOVE_INFO); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - if (!itemid_is_unique(itemId)) + if (!IS_HM(itemId)) { if (CalculatePlayerPartyCount() == 0) { @@ -867,7 +1056,7 @@ static void TMHMContextMenuAction_Give(u8 taskId) } else { - sTMCaseDynamicResources->savedCallback = CB2_ChooseMonToGiveItem; + sTMCaseDynamicResources->nextScreenCallback = CB2_ChooseMonToGiveItem; Task_BeginFadeOutFromTMCase(taskId); } } @@ -879,14 +1068,14 @@ static void TMHMContextMenuAction_Give(u8 taskId) static void PrintError_ThereIsNoPokemon(u8 taskId) { - TMCase_PrintMessageWithFollowupTask(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitButtonAfterErrorPrint); + PrintMessageWithFollowupTask(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitButtonAfterErrorPrint); } static void PrintError_ItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); - TMCase_PrintMessageWithFollowupTask(taskId, FONT_2, gStringVar4, Task_WaitButtonAfterErrorPrint); + PrintMessageWithFollowupTask(taskId, FONT_2, gStringVar4, Task_WaitButtonAfterErrorPrint); } static void Task_WaitButtonAfterErrorPrint(u8 taskId) @@ -894,99 +1083,102 @@ static void Task_WaitButtonAfterErrorPrint(u8 taskId) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - Subtask_CloseContextMenuAndReturnToMain(taskId); + CloseMessageAndReturnToList(taskId); } } -static void Subtask_CloseContextMenuAndReturnToMain(u8 taskId) +static void CloseMessageAndReturnToList(u8 taskId) { s16 * data = gTasks[taskId].data; - DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); - PrintListMenuCursorByID_WithColorIdx(data[0], 1); - ClearDialogWindowAndFrameToTransparent(6, FALSE); - ClearWindowTilemap(6); - PutWindowTilemap(1); - PutWindowTilemap(4); - PutWindowTilemap(5); + DestroyListMenuTask(tListTaskId, &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); + PrintListCursor(tListTaskId, COLOR_DARK); + ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); + ClearWindowTilemap(WIN_MESSAGE); + PutWindowTilemap(WIN_DESCRIPTION); + PutWindowTilemap(WIN_MOVE_INFO_LABELS); + PutWindowTilemap(WIN_MOVE_INFO); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - Subtask_ReturnToTMCaseMain(taskId); + ReturnToList(taskId); } -static void TMHMContextMenuAction_Exit(u8 taskId) +static void Action_Exit(u8 taskId) { s16 * data = gTasks[taskId].data; - RemoveTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId); - ClearStdWindowAndFrameToTransparent(2, FALSE); - ClearWindowTilemap(2); - PutWindowTilemap(0); - PrintListMenuCursorByID_WithColorIdx(data[0], 1); - PutWindowTilemap(1); - PutWindowTilemap(4); - PutWindowTilemap(5); + RemoveContextMenu(&sTMCaseDynamicResources->contextMenuWindowId); + ClearStdWindowAndFrameToTransparent(WIN_SELECTED_MSG, FALSE); + ClearWindowTilemap(WIN_SELECTED_MSG); + PutWindowTilemap(WIN_LIST); + PrintListCursor(tListTaskId, COLOR_DARK); + PutWindowTilemap(WIN_DESCRIPTION); + PutWindowTilemap(WIN_MOVE_INFO_LABELS); + PutWindowTilemap(WIN_MOVE_INFO); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - Subtask_ReturnToTMCaseMain(taskId); + ReturnToList(taskId); } -static void Task_SelectTMAction_Type1(u8 taskId) +static void Task_SelectedTMHM_GiveParty(u8 taskId) { s16 * data = gTasks[taskId].data; - if (!itemid_is_unique(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1]))) + if (!IS_HM(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection))) { - sTMCaseDynamicResources->savedCallback = CB2_GiveHoldItem; + sTMCaseDynamicResources->nextScreenCallback = CB2_GiveHoldItem; Task_BeginFadeOutFromTMCase(taskId); } else { + // Can't hold "important" items (e.g. key items) PrintError_ItemCantBeHeld(taskId); } } -static void Task_SelectTMAction_Type3(u8 taskId) +static void Task_SelectedTMHM_GivePC(u8 taskId) { s16 * data = gTasks[taskId].data; - if (!itemid_is_unique(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1]))) + if (!IS_HM(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection))) { - sTMCaseDynamicResources->savedCallback = CB2_ReturnToPokeStorage; + sTMCaseDynamicResources->nextScreenCallback = CB2_ReturnToPokeStorage; Task_BeginFadeOutFromTMCase(taskId); } else { + // Can't hold "important" items (e.g. key items) PrintError_ItemCantBeHeld(taskId); } } -static void Task_SelectTMAction_FromSellMenu(u8 taskId) +static void Task_SelectedTMHM_Sell(u8 taskId) { s16 * data = gTasks[taskId].data; - if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + if (ItemId_GetPrice(gSpecialVar_ItemId) == 0) { + // Can't sell TM/HMs with no price (by default this is just the HMs) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Subtask_CloseContextMenuAndReturnToMain); + PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, CloseMessageAndReturnToList); } else { - data[8] = 1; - if (data[2] == 1) + tQuantitySelected = 1; + if (tQuantityOwned == 1) { - HandlePrintMoneyOnHand(); + PrintPlayersMoney(); Task_AskConfirmSaleWithAmount(taskId); } else { - if (data[2] > 99) - data[2] = 99; + if (tQuantityOwned > 99) + tQuantityOwned = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitQuantitySelectUI); + PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitQuantitySelectUI); } } } @@ -995,9 +1187,9 @@ static void Task_AskConfirmSaleWithAmount(u8 taskId) { s16 * data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)) / 2 * tQuantitySelected, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_PlaceYesNoBox); + PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_PlaceYesNoBox); } static void Task_PlaceYesNoBox(u8 taskId) @@ -1009,30 +1201,30 @@ static void Task_SaleOfTMsCanceled(u8 taskId) { s16 * data = gTasks[taskId].data; - ClearStdWindowAndFrameToTransparent(8, FALSE); - ClearDialogWindowAndFrameToTransparent(6, FALSE); - PutWindowTilemap(0); - PutWindowTilemap(1); - PutWindowTilemap(3); - PutWindowTilemap(4); - PutWindowTilemap(5); + ClearStdWindowAndFrameToTransparent(WIN_MONEY, FALSE); + ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); + PutWindowTilemap(WIN_LIST); + PutWindowTilemap(WIN_DESCRIPTION); + PutWindowTilemap(WIN_TITLE); + PutWindowTilemap(WIN_MOVE_INFO_LABELS); + PutWindowTilemap(WIN_MOVE_INFO); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - PrintListMenuCursorByID_WithColorIdx(data[0], 1); - Subtask_ReturnToTMCaseMain(taskId); + PrintListCursor(tListTaskId, COLOR_DARK); + ReturnToList(taskId); } static void Task_InitQuantitySelectUI(u8 taskId) { s16 * data = gTasks[taskId].data; - TMCase_SetWindowBorder1(7); + TMCase_SetWindowBorder1(WIN_SELL_QUANTITY); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - AddTextPrinterParameterized_ColorByIndex(7, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1); - SellTM_PrintQuantityAndSalePrice(1, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])) / 2 * data[8]); - HandlePrintMoneyOnHand(); - CreateTMCaseScrollIndicatorArrowPair_SellQuantitySelect(); + TMCase_Print(WIN_SELL_QUANTITY, FONT_0, gStringVar4, 4, 10, 1, 0, 0, COLOR_DARK); + SellTM_PrintQuantityAndSalePrice(1, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)) / 2 * tQuantitySelected); + PrintPlayersMoney(); + CreateQuantityScrollArrows(); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); gTasks[taskId].func = Task_QuantitySelect_HandleInput; @@ -1040,44 +1232,44 @@ static void Task_InitQuantitySelectUI(u8 taskId) static void SellTM_PrintQuantityAndSalePrice(s16 quantity, s32 amount) { - FillWindowPixelBuffer(7, 0x11); + FillWindowPixelBuffer(WIN_SELL_QUANTITY, 0x11); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - AddTextPrinterParameterized_ColorByIndex(7, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1); - PrintMoneyAmount(7, 0x38, 0x0A, amount, 0); + TMCase_Print(WIN_SELL_QUANTITY, FONT_0, gStringVar4, 4, 10, 1, 0, 0, COLOR_DARK); + PrintMoneyAmount(WIN_SELL_QUANTITY, 0x38, 0x0A, amount, 0); } static void Task_QuantitySelect_HandleInput(u8 taskId) { s16 * data = gTasks[taskId].data; - if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == 1) + if (AdjustQuantityAccordingToDPadInput(&tQuantitySelected, tQuantityOwned) == 1) { - SellTM_PrintQuantityAndSalePrice(data[8], itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])) / 2 * data[8]); + SellTM_PrintQuantityAndSalePrice(tQuantitySelected, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)) / 2 * tQuantitySelected); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(7, FALSE); + ClearStdWindowAndFrameToTransparent(WIN_SELL_QUANTITY, FALSE); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - RemoveTMCaseScrollIndicatorArrowPair(); + RemoveScrollArrows(); Task_AskConfirmSaleWithAmount(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(7, FALSE); - ClearStdWindowAndFrameToTransparent(8, FALSE); - ClearDialogWindowAndFrameToTransparent(6, FALSE); - PutWindowTilemap(3); - PutWindowTilemap(0); - PutWindowTilemap(1); + ClearStdWindowAndFrameToTransparent(WIN_SELL_QUANTITY, FALSE); + ClearStdWindowAndFrameToTransparent(WIN_MONEY, FALSE); + ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); + PutWindowTilemap(WIN_TITLE); + PutWindowTilemap(WIN_LIST); + PutWindowTilemap(WIN_DESCRIPTION); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); - RemoveTMCaseScrollIndicatorArrowPair(); - PrintListMenuCursorByID_WithColorIdx(data[0], 1); - Subtask_ReturnToTMCaseMain(taskId); + RemoveScrollArrows(); + PrintListCursor(tListTaskId, COLOR_DARK); + ReturnToList(taskId); } } @@ -1085,12 +1277,12 @@ static void Task_PrintSaleConfirmedText(u8 taskId) { s16 * data = gTasks[taskId].data; - PutWindowTilemap(0); + PutWindowTilemap(WIN_LIST); ScheduleBgCopyTilemapToVram(0); CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)) / 2 * tQuantitySelected, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - TMCase_PrintMessageWithFollowupTask(taskId, FONT_2, gStringVar4, Task_DoSaleOfTMs); + PrintMessageWithFollowupTask(taskId, FONT_2, gStringVar4, Task_DoSaleOfTMs); } static void Task_DoSaleOfTMs(u8 taskId) @@ -1098,16 +1290,16 @@ static void Task_DoSaleOfTMs(u8 taskId) s16 * data = gTasks[taskId].data; PlaySE(SE_SHOP); - RemoveBagItem(gSpecialVar_ItemId, data[8]); - AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); - RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); - DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + RemoveBagItem(gSpecialVar_ItemId, tQuantitySelected); + AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * tQuantitySelected); + RecordItemPurchase(gSpecialVar_ItemId, tQuantitySelected, 2); + DestroyListMenuTask(tListTaskId, &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); TMCaseSetup_GetTMCount(); TMCaseSetup_InitListMenuPositions(); InitTMCaseListMenuItems(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); - PrintListMenuCursorByID_WithColorIdx(data[0], 2); - PrintMoneyAmountInMoneyBox(8, GetMoney(&gSaveBlock1Ptr->money), 0); + tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); + PrintListCursor(tListTaskId, COLOR_CURSOR_SELECTED); + PrintMoneyAmountInMoneyBox(WIN_MONEY, GetMoney(&gSaveBlock1Ptr->money), 0); gTasks[taskId].func = Task_AfterSale_ReturnToList; } @@ -1116,74 +1308,75 @@ static void Task_AfterSale_ReturnToList(u8 taskId) if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(8, FALSE); - ClearDialogWindowAndFrameToTransparent(6, FALSE); - PutWindowTilemap(1); - PutWindowTilemap(3); - PutWindowTilemap(4); - PutWindowTilemap(5); - Subtask_CloseContextMenuAndReturnToMain(taskId); + ClearStdWindowAndFrameToTransparent(WIN_MONEY, FALSE); + ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); + PutWindowTilemap(WIN_DESCRIPTION); + PutWindowTilemap(WIN_TITLE); + PutWindowTilemap(WIN_MOVE_INFO_LABELS); + PutWindowTilemap(WIN_MOVE_INFO); + CloseMessageAndReturnToList(taskId); } } void Pokedude_InitTMCase(void) { - sPokedudePackBackup = AllocZeroed(sizeof(*sPokedudePackBackup)); - memcpy(sPokedudePackBackup->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); - memcpy(sPokedudePackBackup->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); - sPokedudePackBackup->unk_160 = sTMCaseStaticResources.selectedRow; - sPokedudePackBackup->unk_162 = sTMCaseStaticResources.scrollOffset; - ClearItemSlots(gSaveBlock1Ptr->bagPocket_TMHM, NELEMS(gSaveBlock1Ptr->bagPocket_TMHM)); - ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, NELEMS(gSaveBlock1Ptr->bagPocket_KeyItems)); + sPokedudeBagBackup = AllocZeroed(sizeof(*sPokedudeBagBackup)); + memcpy(sPokedudeBagBackup->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(sPokedudeBagBackup->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + sPokedudeBagBackup->selectedRow = sTMCaseStaticResources.selectedRow; + sPokedudeBagBackup->scrollOffset = sTMCaseStaticResources.scrollOffset; + ClearItemSlots(gSaveBlock1Ptr->bagPocket_TMHM, ARRAY_COUNT(gSaveBlock1Ptr->bagPocket_TMHM)); + ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, ARRAY_COUNT(gSaveBlock1Ptr->bagPocket_KeyItems)); ResetTMCaseCursorPos(); AddBagItem(ITEM_TM01, 1); AddBagItem(ITEM_TM03, 1); AddBagItem(ITEM_TM09, 1); AddBagItem(ITEM_TM35, 1); - InitTMCase(4, CB2_ReturnToTeachyTV, 0); + InitTMCase(TMCASE_POKEDUDE, CB2_ReturnToTeachyTV, 0); } -static void Task_TMCaseDude1(u8 taskId) +static void Task_Pokedude_Start(u8 taskId) { s16 * data = gTasks[taskId].data; if (!gPaletteFade.active) { - data[8] = 0; - data[9] = 0; - gTasks[taskId].func = Task_TMCaseDude_Playback; + tPokedudeState = 0; + tPokedudeTimer = 0; + gTasks[taskId].func = Task_Pokedude_Run; } } -static void Task_TMCaseDude_Playback(u8 taskId) +#define POKEDUDE_INPUT_DELAY 101 + +static void Task_Pokedude_Run(u8 taskId) { s16 * data = gTasks[taskId].data; if (JOY_NEW(B_BUTTON)) { - if (data[8] < 21) + if (tPokedudeState < 21) { - data[8] = 21; + tPokedudeState = 21; SetTeachyTvControllerModeToResume(); } } - switch (data[8]) + switch (tPokedudeState) { case 0: BeginNormalPaletteFade(0xFFFF8405, 4, 0, 6, 0); - FillBG2RowWithPalette_2timesNplus1(1); - data[8]++; + SetDescriptionWindowShade(1); + tPokedudeState++; break; case 1: case 11: if (!gPaletteFade.active) { - data[9]++; - if (data[9] > 0x65) + if (++tPokedudeTimer > POKEDUDE_INPUT_DELAY) { - data[9] = 0; - data[8]++; + tPokedudeTimer = 0; + tPokedudeState++; } } break; @@ -1193,17 +1386,16 @@ static void Task_TMCaseDude_Playback(u8 taskId) case 12: case 13: case 14: - if (data[9] == 0) + if (tPokedudeTimer == 0) { gMain.newKeys = 0; gMain.newAndRepeatedKeys = DPAD_DOWN; - ListMenu_ProcessInput(data[0]); + ListMenu_ProcessInput(tListTaskId); } - data[9]++; - if (data[9] > 0x65) + if (++tPokedudeTimer > POKEDUDE_INPUT_DELAY) { - data[9] = 0; - data[8]++; + tPokedudeTimer = 0; + tPokedudeState++; } break; case 5: @@ -1212,71 +1404,71 @@ static void Task_TMCaseDude_Playback(u8 taskId) case 15: case 16: case 17: - if (data[9] == 0) + if (tPokedudeTimer == 0) { gMain.newKeys = 0; gMain.newAndRepeatedKeys = DPAD_UP; - ListMenu_ProcessInput(data[0]); + ListMenu_ProcessInput(tListTaskId); } - data[9]++; - if (data[9] > 0x65) + if (++tPokedudeTimer > POKEDUDE_INPUT_DELAY) { - data[9] = 0; - data[8]++; + tPokedudeTimer = 0; + tPokedudeState++; } break; case 8: - FillBG2RowWithPalette_2timesNplus1(1); - TMCase_PrintMessageWithFollowupTask(taskId, FONT_4, gPokedudeText_TMTypes, 0); - gTasks[taskId].func = Task_TMCaseDude_Playback; - data[8]++; + SetDescriptionWindowShade(1); + PrintMessageWithFollowupTask(taskId, FONT_4, gPokedudeText_TMTypes, NULL); + gTasks[taskId].func = Task_Pokedude_Run; + tPokedudeState++; break; case 9: case 19: RunTextPrinters(); - if (!IsTextPrinterActive(6)) - data[8]++; + if (!IsTextPrinterActive(WIN_MESSAGE)) + tPokedudeState++; break; case 10: if (JOY_NEW(A_BUTTON | B_BUTTON)) { - FillBG2RowWithPalette_2timesNplus1(0); + SetDescriptionWindowShade(0); BeginNormalPaletteFade(0x00000400, 0, 6, 0, 0); - ClearDialogWindowAndFrameToTransparent(6, FALSE); + ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); ScheduleBgCopyTilemapToVram(1); - data[8]++; + tPokedudeState++; } break; case 18: - FillBG2RowWithPalette_2timesNplus1(1); - TMCase_PrintMessageWithFollowupTask(taskId, FONT_4, gPokedudeText_ReadTMDescription, NULL); - gTasks[taskId].func = Task_TMCaseDude_Playback; // this function - data[8]++; + SetDescriptionWindowShade(1); + PrintMessageWithFollowupTask(taskId, FONT_4, gPokedudeText_ReadTMDescription, NULL); + gTasks[taskId].func = Task_Pokedude_Run; // this function + tPokedudeState++; break; case 20: if (JOY_NEW(A_BUTTON | B_BUTTON)) - data[8]++; + tPokedudeState++; break; case 21: if (!gPaletteFade.active) { - memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokedudePackBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); - memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokedudePackBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); - DestroyListMenuTask(data[0], NULL, NULL); - sTMCaseStaticResources.selectedRow = sPokedudePackBackup->unk_160; - sTMCaseStaticResources.scrollOffset = sPokedudePackBackup->unk_162; - Free(sPokedudePackBackup); + // Restore the player's bag + memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokedudeBagBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokedudeBagBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + DestroyListMenuTask(tListTaskId, NULL, NULL); + sTMCaseStaticResources.selectedRow = sPokedudeBagBackup->selectedRow; + sTMCaseStaticResources.scrollOffset = sPokedudeBagBackup->scrollOffset; + Free(sPokedudeBagBackup); CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); CB2_SetUpReshowBattleScreenAfterMenu(); BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 16, 0); - data[8]++; + tPokedudeState++; } break; default: if (!gPaletteFade.active) { - SetMainCallback2(sTMCaseStaticResources.savedCallback); - RemoveTMCaseScrollIndicatorArrowPair(); + SetMainCallback2(sTMCaseStaticResources.exitCallback); + RemoveScrollArrows(); DestroyTMCaseBuffers(); DestroyTask(taskId); } @@ -1298,17 +1490,17 @@ static void InitWindowTemplatesAndPals(void) LoadPalette(sPal3Override, 0xF6, 0x04); LoadPalette(sPal3Override, 0xD6, 0x04); ListMenuLoadStdPalAt(0xc0, 0x01); - for (i = 0; i < 9; i++) + for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, 0x00); - PutWindowTilemap(0); - PutWindowTilemap(1); - PutWindowTilemap(3); - PutWindowTilemap(4); - PutWindowTilemap(5); + PutWindowTilemap(WIN_LIST); + PutWindowTilemap(WIN_DESCRIPTION); + PutWindowTilemap(WIN_TITLE); + PutWindowTilemap(WIN_MOVE_INFO_LABELS); + PutWindowTilemap(WIN_MOVE_INFO); ScheduleBgCopyTilemapToVram(0); } -static void AddTextPrinterParameterized_ColorByIndex(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +static void TMCase_Print(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, sTextColors[colorIdx], speed, str); } @@ -1323,46 +1515,47 @@ static void TMCase_SetWindowBorder2(u8 windowId) DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 0x78, 0x0D); } -static void TMCase_PrintMessageWithFollowupTask(u8 taskId, u8 fontId, const u8 * str, TaskFunc func) +static void PrintMessageWithFollowupTask(u8 taskId, u8 fontId, const u8 * str, TaskFunc func) { - DisplayMessageAndContinueTask(taskId, 6, 0x64, 0x0B, fontId, GetTextSpeedSetting(), str, func); + DisplayMessageAndContinueTask(taskId, WIN_MESSAGE, 0x64, 0x0B, fontId, GetTextSpeedSetting(), str, func); ScheduleBgCopyTilemapToVram(1); } -static void PrintStringTMCaseOnWindow3(void) +static void PrintTitle(void) { u32 distance = 72 - GetStringWidth(FONT_1, gText_TMCase, 0); - AddTextPrinterParameterized3(3, FONT_1, distance / 2, 1, sTextColors[0], 0, gText_TMCase); + AddTextPrinterParameterized3(WIN_TITLE, FONT_1, distance / 2, 1, sTextColors[COLOR_LIGHT], 0, gText_TMCase); } -static void DrawMoveInfoUIMarkers(void) +static void DrawMoveInfoLabels(void) { - BlitMoveInfoIcon(4, 19, 0, 0); - BlitMoveInfoIcon(4, 20, 0, 12); - BlitMoveInfoIcon(4, 21, 0, 24); - BlitMoveInfoIcon(4, 22, 0, 36); - CopyWindowToVram(4, COPYWIN_GFX); + BlitMoveInfoIcon(WIN_MOVE_INFO_LABELS, 19, 0, 0); + BlitMoveInfoIcon(WIN_MOVE_INFO_LABELS, 20, 0, 12); + BlitMoveInfoIcon(WIN_MOVE_INFO_LABELS, 21, 0, 24); + BlitMoveInfoIcon(WIN_MOVE_INFO_LABELS, 22, 0, 36); + CopyWindowToVram(WIN_MOVE_INFO_LABELS, COPYWIN_GFX); } -static void TMCase_MoveCursor_UpdatePrintedTMInfo(u16 itemId) +static void PrintMoveInfo(u16 itemId) { u8 i; u16 move; const u8 * str; - FillWindowPixelRect(5, 0, 0, 0, 40, 48); + FillWindowPixelRect(WIN_MOVE_INFO, 0, 0, 0, 40, 48); if (itemId == ITEM_NONE) { for (i = 0; i < 4; i++) - { - AddTextPrinterParameterized_ColorByIndex(5, FONT_3, gText_ThreeHyphens, 7, 12 * i, 0, 0, 0xFF, 3); - } - CopyWindowToVram(5, COPYWIN_GFX); + TMCase_Print(WIN_MOVE_INFO, FONT_3, gText_ThreeHyphens, 7, 12 * i, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + CopyWindowToVram(WIN_MOVE_INFO, COPYWIN_GFX); } else { + // Draw type icon move = ItemIdToBattleMoveId(itemId); - BlitMoveInfoIcon(5, gBattleMoves[move].type + 1, 0, 0); + BlitMoveInfoIcon(WIN_MOVE_INFO, gBattleMoves[move].type + 1, 0, 0); + + // Print power if (gBattleMoves[move].power < 2) str = gText_ThreeHyphens; else @@ -1370,7 +1563,9 @@ static void TMCase_MoveCursor_UpdatePrintedTMInfo(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); str = gStringVar1; } - AddTextPrinterParameterized_ColorByIndex(5, FONT_3, str, 7, 12, 0, 0, 0xFF, 3); + TMCase_Print(WIN_MOVE_INFO, FONT_3, str, 7, 12, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + + // Print accuracy if (gBattleMoves[move].accuracy == 0) str = gText_ThreeHyphens; else @@ -1378,10 +1573,13 @@ static void TMCase_MoveCursor_UpdatePrintedTMInfo(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); str = gStringVar1; } - AddTextPrinterParameterized_ColorByIndex(5, FONT_3, str, 7, 24, 0, 0, 0xFF, 3); + TMCase_Print(WIN_MOVE_INFO, FONT_3, str, 7, 24, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + + // Print PP ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized_ColorByIndex(5, FONT_3, gStringVar1, 7, 36, 0, 0, 0xFF, 3); - CopyWindowToVram(5, COPYWIN_GFX); + TMCase_Print(WIN_MOVE_INFO, FONT_3, gStringVar1, 7, 36, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + + CopyWindowToVram(WIN_MOVE_INFO, COPYWIN_GFX); } } @@ -1390,144 +1588,149 @@ static void PlaceHMTileInWindow(u8 windowId, u8 x, u8 y) BlitBitmapToWindow(windowId, gTMCaseHM_Gfx, x, y, 16, 12); } -static void HandlePrintMoneyOnHand(void) +static void PrintPlayersMoney(void) { - PrintMoneyAmountInMoneyBoxWithBorder(8, 0x78, 0xD, GetMoney(&gSaveBlock1Ptr->money)); + PrintMoneyAmountInMoneyBoxWithBorder(WIN_MONEY, 120, 13, GetMoney(&gSaveBlock1Ptr->money)); } static void HandleCreateYesNoMenu(u8 taskId, const struct YesNoFuncTable *ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &sYesNoWindowTemplate, FONT_2, 0, 2, 0x5B, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sYesNoWindowTemplate, FONT_2, 0, 2, 91, 14, ptrs); } -static u8 AddTMContextMenu(u8 * a0, u8 a1) +static u8 AddContextMenu(u8 * windowId, u8 windowIndex) { - if (*a0 == 0xFF) + if (*windowId == WINDOW_NONE) { - *a0 = AddWindow(&sTMContextWindowTemplates[a1]); - TMCase_SetWindowBorder1(*a0); + *windowId = AddWindow(&sWindowTemplates_ContextMenu[windowIndex]); + TMCase_SetWindowBorder1(*windowId); ScheduleBgCopyTilemapToVram(0); } - return *a0; + return *windowId; } -static void RemoveTMContextMenu(u8 * a0) +static void RemoveContextMenu(u8 * windowId) { - ClearStdWindowAndFrameToTransparent(*a0, FALSE); - ClearWindowTilemap(*a0); - RemoveWindow(*a0); + ClearStdWindowAndFrameToTransparent(*windowId, FALSE); + ClearWindowTilemap(*windowId); + RemoveWindow(*windowId); ScheduleBgCopyTilemapToVram(0); - *a0 = 0xFF; + *windowId = WINDOW_NONE; } -static u8 CreateTMSprite(u16 itemId) +static u8 CreateDiscSprite(u16 itemId) { - u8 spriteId = CreateSprite(&sTMSpriteTemplate, 0x29, 0x2E, 0); + u8 spriteId = CreateSprite(&sSpriteTemplate_Disc, DISC_BASE_X, DISC_BASE_Y, 0); u8 tmIdx; if (itemId == ITEM_NONE) { - UpdateTMSpritePosition(&gSprites[spriteId], 0xFF); + SetDiscSpritePosition(&gSprites[spriteId], DISC_HIDDEN); return spriteId; } else { tmIdx = itemId - ITEM_TM01; - SetTMSpriteAnim(&gSprites[spriteId], tmIdx); - TintTMSpriteByType(gBattleMoves[ItemIdToBattleMoveId(itemId)].type); - UpdateTMSpritePosition(&gSprites[spriteId], tmIdx); + SetDiscSpriteAnim(&gSprites[spriteId], tmIdx); + TintDiscpriteByType(gBattleMoves[ItemIdToBattleMoveId(itemId)].type); + SetDiscSpritePosition(&gSprites[spriteId], tmIdx); return spriteId; } } -static void SetTMSpriteAnim(struct Sprite *sprite, u8 idx) +static void SetDiscSpriteAnim(struct Sprite *sprite, u8 tmIdx) { - if (idx >= NUM_TECHNICAL_MACHINES) - StartSpriteAnim(sprite, 1); + if (tmIdx >= NUM_TECHNICAL_MACHINES) + StartSpriteAnim(sprite, ANIM_HM); else - StartSpriteAnim(sprite, 0); + StartSpriteAnim(sprite, ANIM_TM); } -static void TintTMSpriteByType(u8 type) +static void TintDiscpriteByType(u8 type) { - u8 palIndex = IndexOfSpritePaletteTag(TM_CASE_TM_TAG) << 4; + u8 palIndex = IndexOfSpritePaletteTag(TAG_DISC) << 4; LoadPalette(sTMSpritePaletteBuffer + sTMSpritePaletteOffsetByType[type], 0x100 | palIndex, 0x20); - if (sTMCaseStaticResources.tmCaseMenuType == 4) - { + if (sTMCaseStaticResources.menuType == TMCASE_POKEDUDE) BlendPalettes(1 << (0x10 + palIndex), 4, RGB_BLACK); - } } -static void UpdateTMSpritePosition(struct Sprite *sprite, u8 var) +static void SetDiscSpritePosition(struct Sprite *sprite, u8 tmIdx) { s32 x, y; - if (var == 0xFF) + if (tmIdx == DISC_HIDDEN) { - x = 0x1B; - y = 0x36; - sprite->y2 = 0x14; + x = 27; + y = 54; + sprite->y2 = DISC_CASE_DISTANCE; } else { - if (var >= 50) - var -= 50; + if (tmIdx >= NUM_TECHNICAL_MACHINES) + tmIdx -= NUM_TECHNICAL_MACHINES; else - var += 8; - x = 0x29 - (((0xE00 * var) / 58) >> 8); - y = 0x2E + (((0x800 * var) / 58) >> 8); + tmIdx += NUM_HIDDEN_MACHINES; + + x = DISC_BASE_X - Q_24_8_TO_INT(Q_24_8(14 * tmIdx) / (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES)); + y = DISC_BASE_Y + Q_24_8_TO_INT(Q_24_8(8 * tmIdx) / (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES)); } sprite->x = x; sprite->y = y; } -static void InitSelectedTMSpriteData(u8 spriteId, u16 itemId) +#define sItemId data[0] +#define sState data[1] + +static void SwapDisc(u8 spriteId, u16 itemId) { - gSprites[spriteId].data[0] = itemId; - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].callback = SpriteCB_MoveTMSpriteInCase; + gSprites[spriteId].sItemId = itemId; + gSprites[spriteId].sState = 0; + gSprites[spriteId].callback = SpriteCB_SwapDisc; } -static void SpriteCB_MoveTMSpriteInCase(struct Sprite *sprite) +static void SpriteCB_SwapDisc(struct Sprite *sprite) { - switch (sprite->data[1]) + switch (sprite->sState) { case 0: - if (sprite->y2 >= 20) + // Lower old disc back into case + if (sprite->y2 >= DISC_CASE_DISTANCE) { - if (sprite->data[0] != ITEM_NONE) + // Old disc is hidden, set up new disc + if (sprite->sItemId != ITEM_NONE) { - sprite->data[1]++; - TintTMSpriteByType(gBattleMoves[ItemIdToBattleMoveId(sprite->data[0])].type); - sprite->data[0] -= ITEM_TM01; - SetTMSpriteAnim(sprite, sprite->data[0]); - UpdateTMSpritePosition(sprite, sprite->data[0]); + sprite->sState++; + TintDiscpriteByType(gBattleMoves[ItemIdToBattleMoveId(sprite->sItemId)].type); + sprite->sItemId -= ITEM_TM01; + SetDiscSpriteAnim(sprite, sprite->sItemId); + SetDiscSpritePosition(sprite, sprite->sItemId); } else sprite->callback = SpriteCallbackDummy; } else { - sprite->y2 += 10; + sprite->y2 += DISC_Y_MOVE; } break; case 1: + // Raise new disc out of case if (sprite->y2 <= 0) sprite->callback = SpriteCallbackDummy; else - sprite->y2 -= 10; + sprite->y2 -= DISC_Y_MOVE; } } // - 1 excludes TYPE_MYSTERY -#define NUM_TM_COLORS ((NUMBER_OF_MON_TYPES - 1) * 16) +#define NUM_DISC_COLORS ((NUMBER_OF_MON_TYPES - 1) * 16) -static void LoadTMTypePalettes(void) +static void LoadDiscTypePalettes(void) { struct SpritePalette spritePalette; - sTMSpritePaletteBuffer = Alloc(NUM_TM_COLORS * sizeof(u16)); + sTMSpritePaletteBuffer = Alloc(NUM_DISC_COLORS * sizeof(u16)); LZDecompressWram(gTMCaseDiscTypes1_Pal, sTMSpritePaletteBuffer); // Decompress the first 16 LZDecompressWram(gTMCaseDiscTypes2_Pal, sTMSpritePaletteBuffer + 0x100); // Decompress the rest (Only 17 total, this is just Dragon type) - spritePalette.data = sTMSpritePaletteBuffer + NUM_TM_COLORS; - spritePalette.tag = TM_CASE_TM_TAG; + spritePalette.data = sTMSpritePaletteBuffer + NUM_DISC_COLORS; + spritePalette.tag = TAG_DISC; LoadSpritePalette(&spritePalette); } From 092f19f323fe29f8999fdcb95b04b8abaf3e5c35 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 11 Nov 2022 11:56:59 -0500 Subject: [PATCH 17/42] Sync menu_helpers.c --- include/menu_helpers.h | 12 +++---- src/berry_pouch.c | 16 ++++----- src/item_menu.c | 26 +++++++------- src/item_pc.c | 4 +-- src/mail.c | 2 +- src/menu.c | 16 ++++----- src/menu_helpers.c | 69 +++++++++++++++++------------------- src/option_menu.c | 4 +-- src/party_menu.c | 16 ++++----- src/pokemon_summary_screen.c | 8 ++--- src/quest_log.c | 2 +- src/quest_log_events.c | 2 +- src/start_menu.c | 6 ++-- src/tm_case.c | 10 +++--- 14 files changed, 94 insertions(+), 99 deletions(-) diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 2aeef23e9..f4a61cf93 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -15,19 +15,19 @@ struct YesNoFuncTable }; bool16 RunTextPrinters_CheckActive(u8 textPrinterId); -bool8 MenuHelpers_CallLinkSomething(void); -bool8 sub_80BF748(void); -bool8 MenuHelpers_LinkSomething(void); +bool8 IsActiveOverworldLinkBusy(void); +bool8 MenuHelpers_ShouldWaitForLinkRecv(void); +bool8 MenuHelpers_IsLinkActive(void); void SetVBlankHBlankCallbacksToNull(void); void ResetAllBgsCoordinatesAndBgCntRegs(void); u8 GetDialogBoxFontId(void); bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity_p, u16 qmax); void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); -u8 GetLRKeysState(void); +u8 GetLRKeysPressed(void); u8 GetLRKeysPressedAndHeld(void); -bool8 itemid_link_can_give_berry(u16 itemId); -bool8 CanWriteMailHere(u16 itemId); +bool8 IsHoldingItemAllowed(u16 itemId); +bool8 IsWritingMailAllowed(u16 itemId); void ResetVramOamAndBgCntRegs(void); #endif //GUARD_MENU_HELPERS_H diff --git a/src/berry_pouch.c b/src/berry_pouch.c index e113fd2d9..8f4c38a9b 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -457,11 +457,11 @@ static void CB2_InitBerryPouch(void) { while (1) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE) break; if (RunBerryPouchInit() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -498,7 +498,7 @@ static bool8 RunBerryPouchInit(void) gMain.state++; break; case 6: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) ResetTasks(); gMain.state++; break; @@ -934,7 +934,7 @@ static void Task_BerryPouchMain(u8 taskId) { s16 * data = gTasks[taskId].data; s32 menuInput; - if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE) + if (!gPaletteFade.active && IsActiveOverworldLinkBusy() != TRUE) { menuInput = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); @@ -1004,9 +1004,9 @@ static void CreateNormalContextMenu(u8 taskId) sContextMenuOptions = sOptions_UseToss_Exit; sContextMenuNumOptions = 3; } - else if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + else if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE) { - if (!itemid_link_can_give_berry(gSpecialVar_ItemId)) + if (!IsHoldingItemAllowed(gSpecialVar_ItemId)) { sContextMenuOptions = sOptions_Exit; sContextMenuNumOptions = 1; @@ -1040,7 +1040,7 @@ static void Task_NormalContextMenu(u8 taskId) static void Task_NormalContextMenu_HandleInput(u8 taskId) { s8 input; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (IsActiveOverworldLinkBusy() != TRUE) { input = Menu_ProcessInputNoWrapAround(); switch (input) @@ -1243,7 +1243,7 @@ static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId) { s16 * data = gTasks[taskId].data; u16 itemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1]); - if (!itemid_link_can_give_berry(itemId)) + if (!IsHoldingItemAllowed(itemId)) { CopyItemName(itemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_TheStrVar1CantBeHeldHere); diff --git a/src/item_menu.c b/src/item_menu.c index ae8d98235..def4cd6ff 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -377,11 +377,11 @@ static void CB2_OpenBagMenu(void) { while (1) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE) break; if (LoadBagMenuGraphics() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -419,7 +419,7 @@ static bool8 LoadBagMenuGraphics(void) gMain.state++; break; case 6: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) { ResetTasks(); } @@ -1050,7 +1050,7 @@ static void Task_BagMenu_HandleInput(u8 taskId) return; if (FuncIsActiveTask(Task_AnimateWin0v) == TRUE) return; - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE) return; switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket)) { @@ -1131,15 +1131,15 @@ static u8 ProcessPocketSwitchInput(u8 taskId, u8 pocketId) u8 lrState; if (sBagMenuDisplay->pocketSwitchMode != 0) return 0; - lrState = GetLRKeysState(); - if (JOY_NEW(DPAD_LEFT) || lrState == 1) + lrState = GetLRKeysPressed(); + if (JOY_NEW(DPAD_LEFT) || lrState == MENU_L_PRESSED) { if (pocketId == POCKET_ITEMS - 1) return 0; PlaySE(SE_BAG_POCKET); return 1; } - if (JOY_NEW(DPAD_RIGHT) || lrState == 2) + if (JOY_NEW(DPAD_RIGHT) || lrState == MENU_R_PRESSED) { if (pocketId >= POCKET_POKE_BALLS - 1) return 0; @@ -1174,7 +1174,7 @@ static void SwitchPockets(u8 taskId, s16 direction, bool16 a2) static void Task_AnimateSwitchPockets(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!MenuHelpers_LinkSomething() && !BagIsTutorial()) + if (!MenuHelpers_IsLinkActive() && !BagIsTutorial()) { switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket + data[11])) { @@ -1244,7 +1244,7 @@ static void Task_MoveItemInPocket_HandleInput(u8 taskId) s32 input; u16 itemsAbove; u16 cursorPos; - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE) return; input = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); @@ -1370,7 +1370,7 @@ static void OpenContextMenu(u8 taskId) sContextMenuNumItems = 2; break; default: - if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE) { if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) { @@ -1447,7 +1447,7 @@ static void Task_ItemContext_FieldOrBattle(u8 taskId) static void Task_FieldItemContextMenuHandleInput(u8 taskId) { s8 input; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (IsActiveOverworldLinkBusy() != TRUE) { input = Menu_ProcessInputNoWrapAround(); switch (input) @@ -1609,7 +1609,7 @@ static void Task_ItemMenuAction_Give(u8 taskId) PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, COPYWIN_MAP); - if (!CanWriteMailHere(itemId)) + if (!IsWritingMailAllowed(itemId)) DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); else if (!itemid_is_unique(itemId)) { @@ -1703,7 +1703,7 @@ static void Task_ItemContext_FieldGive(u8 taskId) { s16 *data = gTasks[taskId].data; u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); - if (!CanWriteMailHere(itemId)) + if (!IsWritingMailAllowed(itemId)) { DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } diff --git a/src/item_pc.c b/src/item_pc.c index 22ba74f04..5e778e574 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -259,7 +259,7 @@ static void ItemPc_RunSetup(void) { if (ItemPc_DoGfxSetup() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -379,7 +379,7 @@ static bool8 ItemPc_DoGfxSetup(void) gMain.state++; break; case 20: - if (MenuHelpers_CallLinkSomething() != TRUE) + if (IsActiveOverworldLinkBusy() != TRUE) gMain.state++; break; default: diff --git a/src/mail.c b/src/mail.c index 121f5045b..a4e1ef0a1 100644 --- a/src/mail.c +++ b/src/mail.c @@ -629,7 +629,7 @@ static void CB2_InitMailView(void) SetMainCallback2(CB2_RunShowMailCB); break; } - } while (MenuHelpers_LinkSomething() != TRUE); + } while (MenuHelpers_IsLinkActive() != TRUE); } static void BufferMailMessage(void) diff --git a/src/menu.c b/src/menu.c index f09ef59df..79efe85e8 100644 --- a/src/menu.c +++ b/src/menu.c @@ -729,13 +729,13 @@ static s8 sub_81105A0(void) MultichoiceGrid_MoveCursor(0, 1); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysState() == 1) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { PlaySE(SE_SELECT); MultichoiceGrid_MoveCursor(-1, 0); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysState() == 2) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { PlaySE(SE_SELECT); MultichoiceGrid_MoveCursor(1, 0); @@ -769,13 +769,13 @@ s8 Menu_ProcessInputGridLayout(void) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysState() == 1) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysState() == 2) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0)) PlaySE(SE_SELECT); @@ -808,13 +808,13 @@ static s8 sub_81106F4(void) MultichoiceGrid_MoveCursor(0, 1); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1) + else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { PlaySE(SE_SELECT); MultichoiceGrid_MoveCursor(-1, 0); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2) + else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { PlaySE(SE_SELECT); MultichoiceGrid_MoveCursor(1, 0); @@ -850,13 +850,13 @@ static s8 sub_81107A0(void) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1) + else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2) + else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0)) PlaySE(SE_SELECT); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index af875e1b5..7bdd9f83b 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -12,15 +12,15 @@ #include "constants/items.h" #include "constants/maps.h" -static EWRAM_DATA const struct YesNoFuncTable *gUnknown_20399C8 = NULL; -static EWRAM_DATA TaskFunc gUnknown_20399CC = NULL; -static EWRAM_DATA u8 gUnknown_20399D0 = {0}; +static EWRAM_DATA const struct YesNoFuncTable *sYesNo = NULL; +static EWRAM_DATA TaskFunc sMessageNextTask = NULL; +static EWRAM_DATA u8 sMessageWindowId = {0}; static void Task_ContinueTaskAfterMessagePrints(u8 taskId); void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc) { - gUnknown_20399D0 = windowId; + sMessageWindowId = windowId; DrawDialogFrameWithCustomTileAndPalette(windowId, TRUE, tileNum, paletteNum); if (string != gStringVar4) @@ -28,7 +28,7 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 palet gTextFlags.canABSpeedUpPrint = 1; AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); - gUnknown_20399CC = taskFunc; + sMessageNextTask = taskFunc; gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints; } @@ -40,8 +40,8 @@ bool16 RunTextPrinters_CheckActive(u8 textPrinterId) static void Task_ContinueTaskAfterMessagePrints(u8 taskId) { - if (!RunTextPrinters_CheckActive(gUnknown_20399D0)) - gUnknown_20399CC(taskId); + if (!RunTextPrinters_CheckActive(sMessageWindowId)) + sMessageNextTask(taskId); } static void Task_CallYesOrNoCallback(u8 taskId) @@ -50,12 +50,12 @@ static void Task_CallYesOrNoCallback(u8 taskId) { case 0: PlaySE(SE_SELECT); - gTasks[taskId].func = gUnknown_20399C8->yesFunc; + gTasks[taskId].func = sYesNo->yesFunc; break; case 1: case MENU_B_PRESSED: PlaySE(SE_SELECT); - gTasks[taskId].func = gUnknown_20399C8->noFunc; + gTasks[taskId].func = sYesNo->noFunc; break; } } @@ -63,18 +63,18 @@ static void Task_CallYesOrNoCallback(u8 taskId) void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo) { CreateYesNoMenu(template, fontId, left, top, tileStart, palette, 0); - gUnknown_20399C8 = yesNo; + sYesNo = yesNo; gTasks[taskId].func = Task_CallYesOrNoCallback; } -u8 GetLRKeysState(void) +u8 GetLRKeysPressed(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { if (JOY_NEW(L_BUTTON)) - return 1; + return MENU_L_PRESSED; if (JOY_NEW(R_BUTTON)) - return 2; + return MENU_R_PRESSED; } return 0; } @@ -84,37 +84,34 @@ u8 GetLRKeysPressedAndHeld(void) if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { if (JOY_REPT(L_BUTTON)) - return 1; + return MENU_L_PRESSED; if (JOY_REPT(R_BUTTON)) - return 2; + return MENU_R_PRESSED; } return 0; } -bool8 itemid_link_can_give_berry(u16 itemId) +bool8 IsHoldingItemAllowed(u16 itemId) { - if (itemId != ITEM_ENIGMA_BERRY) - return TRUE; - else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER) - && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER)) + // Enigma Berry can't be held in link areas + if (itemId == ITEM_ENIGMA_BERRY + && ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER)) + || InUnionRoom() == TRUE)) return FALSE; - else if (InUnionRoom() != TRUE) - return TRUE; else - return FALSE; + return TRUE; } -bool8 CanWriteMailHere(u16 itemId) +bool8 IsWritingMailAllowed(u16 itemId) { - if (IsUpdateLinkStateCBActive() != TRUE && InUnionRoom() != TRUE) - return TRUE; - else if (ItemIsMail(itemId) != TRUE) - return TRUE; - else + if ((IsUpdateLinkStateCBActive() == TRUE || InUnionRoom() == TRUE) && ItemIsMail(itemId) == TRUE) return FALSE; + else + return TRUE; } -bool8 MenuHelpers_LinkSomething(void) +bool8 MenuHelpers_IsLinkActive(void) { if (IsUpdateLinkStateCBActive() == TRUE || gReceivedRemoteLinkPlayers == 1) return TRUE; @@ -122,22 +119,20 @@ bool8 MenuHelpers_LinkSomething(void) return FALSE; } -bool8 MenuHelpers_CallLinkSomething(void) +bool8 IsActiveOverworldLinkBusy(void) { - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) return FALSE; else return (u8)Overworld_LinkRecvQueueLengthMoreThan2(); } -bool8 sub_80BF748(void) +bool8 MenuHelpers_ShouldWaitForLinkRecv(void) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return TRUE; - else if (IsLinkRecvQueueAtOverworldMax() != TRUE) - return FALSE; else - return TRUE; + return FALSE; } void SetVBlankHBlankCallbacksToNull(void) diff --git a/src/option_menu.c b/src/option_menu.c index 49de39a62..f16ae5dde 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -12,7 +12,7 @@ #include "gba/m4a_internal.h" // can't include the one in menu_helpers.h since Task_OptionMenu needs bool32 for matching -bool32 MenuHelpers_CallLinkSomething(void); +bool32 IsActiveOverworldLinkBusy(void); // Menu items enum @@ -371,7 +371,7 @@ static void Task_OptionMenu(u8 taskId) sOptionMenuPtr->loadState++; break; case 2: - if (((bool32)MenuHelpers_CallLinkSomething()) == TRUE) + if (((bool32)IsActiveOverworldLinkBusy()) == TRUE) break; switch (OptionMenu_ProcessInput()) { diff --git a/src/party_menu.c b/src/party_menu.c index f9f51c887..6e4e3702a 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -476,7 +476,7 @@ static void CB2_InitPartyMenu(void) { while (TRUE) { - if (sub_80BF748() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -509,7 +509,7 @@ static bool8 ShowPartyMenu(void) ++gMain.state; break; case 5: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) ResetTasks(); ++gMain.state; break; @@ -1118,7 +1118,7 @@ u8 GetPartyMenuType(void) void Task_HandleChooseMonInput(u8 taskId) { - if (!gPaletteFade.active && sub_80BF748() != TRUE) + if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 *slotPtr = GetCurrentPartySlotPtr(); @@ -1248,7 +1248,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) DisplayCancelChooseMonYesNo(taskId); else { - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) gSpecialVar_0x8004 = SLOT_CANCEL; gPartyMenuUseExitCallback = FALSE; *slotPtr = SLOT_CANCEL; @@ -1548,7 +1548,7 @@ bool8 IsPartyMenuTextPrinterActive(void) static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId) { - if (sub_80BF748() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); gTasks[taskId].func = Task_HandleChooseMonInput; @@ -1561,7 +1561,7 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId) { ClearStdWindowAndFrameToTransparent(6, FALSE); ClearWindowTilemap(6); - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) { gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon; } @@ -3061,7 +3061,7 @@ static void Task_TryCreateSelectionWindow(u8 taskId) static void Task_HandleSelectionMenuInput(u8 taskId) { - if (!gPaletteFade.active && sub_80BF748() != TRUE) + if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 input; s16 *data = gTasks[taskId].data; @@ -3912,7 +3912,7 @@ static void CursorCB_FieldMove(u8 taskId) return; PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); - if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE) { if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED) DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index b9f3a4333..e4dba1e53 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1117,7 +1117,7 @@ static void Task_InputHandler_Info(u8 taskId) sMonSummaryScreen->state3270 = PSS_STATE3270_PLAYCRY; break; case PSS_STATE3270_HANDLEINPUT: - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE) return; else if (IsLinkRecvQueueAtOverworldMax() == TRUE) return; @@ -3501,7 +3501,7 @@ static void Task_HandleInput_SelectMove(u8 taskId) switch (sMonSummaryScreen->selectMoveInputHandlerState) { case 0: - if (MenuHelpers_CallLinkSomething() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return; if (JOY_NEW(DPAD_UP)) @@ -3662,7 +3662,7 @@ static void Task_HandleInput_SelectMove(u8 taskId) sMonSummaryScreen->selectMoveInputHandlerState = 3; break; case 3: - if (MenuHelpers_CallLinkSomething() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return; CopyWindowToVram(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], 2); @@ -3880,7 +3880,7 @@ static void Task_InputHandler_SelectOrForgetMove(u8 taskId) sMonSummaryScreen->selectMoveInputHandlerState = 4; break; case 4: - if (MenuHelpers_CallLinkSomething() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE) return; CopyWindowToVram(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], 2); diff --git a/src/quest_log.c b/src/quest_log.c index e2d55f544..4149e267b 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1275,7 +1275,7 @@ static void SortQuestLogInSav1(void) void SaveQuestLogData(void) { - if (MenuHelpers_LinkSomething() != TRUE) + if (MenuHelpers_IsLinkActive() != TRUE) { QuestLog_CutRecording(); SortQuestLogInSav1(); diff --git a/src/quest_log_events.c b/src/quest_log_events.c index 6dc645b93..6bf109676 100644 --- a/src/quest_log_events.c +++ b/src/quest_log_events.c @@ -189,7 +189,7 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData) if (TrySetLinkQuestLogEvent(eventId, eventData) == TRUE) return; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) return; if (InUnionRoom() == TRUE) diff --git a/src/start_menu.c b/src/start_menu.c index ec2616338..9ffa7fa45 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -319,7 +319,7 @@ static s8 DoDrawStartMenu(void) break; case 5: sStartMenuCursorPos = Menu_InitCursor(GetStartMenuWindowId(), FONT_2, 0, 0, 15, sNumStartMenuItems, sStartMenuCursorPos); - if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) + if (!MenuHelpers_IsLinkActive() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) { DrawHelpMessageWindowWithText(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]]); } @@ -403,7 +403,7 @@ static bool8 StartCB_HandleInput(void) { PlaySE(SE_SELECT); sStartMenuCursorPos = Menu_MoveCursor(-1); - if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) + if (!MenuHelpers_IsLinkActive() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) { PrintTextOnHelpMessageWindow(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]], 2); } @@ -412,7 +412,7 @@ static bool8 StartCB_HandleInput(void) { PlaySE(SE_SELECT); sStartMenuCursorPos = Menu_MoveCursor(+1); - if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) + if (!MenuHelpers_IsLinkActive() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) { PrintTextOnHelpMessageWindow(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]], 2); } diff --git a/src/tm_case.c b/src/tm_case.c index 18d1beafe..980d36f20 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -298,11 +298,11 @@ static void CB2_SetUpTMCaseUI_Blocking(void) { while (1) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE) break; if (DoSetUpTMCaseUI() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -727,7 +727,7 @@ static void Task_TMCaseMain(u8 taskId) if (!gPaletteFade.active) { - if (MenuHelpers_CallLinkSomething() != TRUE) + if (IsActiveOverworldLinkBusy() != TRUE) { input = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); @@ -775,7 +775,7 @@ static void Task_SelectTMAction_FromFieldBag(u8 taskId) { u8 * strbuf; TMCase_SetWindowBorder2(2); - if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE) + if (!MenuHelpers_IsLinkActive() && InUnionRoom() != TRUE) { AddTMContextMenu(&sTMCaseDynamicResources->contextMenuWindowId, 0); sTMCaseDynamicResources->menuActionIndices = sMenuActionIndices_Field; @@ -808,7 +808,7 @@ static void Task_TMContextMenu_HandleInput(u8 taskId) { s8 input; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (IsActiveOverworldLinkBusy() != TRUE) { input = Menu_ProcessInputNoWrapAround(); switch (input) From c257ba1e6bcd86b1c30bb9a9aeb098799dd8e8aa Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Mon, 14 Nov 2022 23:50:20 +0800 Subject: [PATCH 18/42] Document src/battle_interface.c --- graphics/battle_interface/ball_display.png | Bin 210 -> 0 bytes .../ball_display_unused_extra.png | Bin 156 -> 0 bytes graphics/battle_interface/exp_bar.png | Bin 109 -> 0 bytes graphics/battle_interface/healthbar.pal | 19 + graphics/battle_interface/healthbox.pal | 19 + .../healthbox_doubles_opponent.png | Bin 270 -> 371 bytes .../healthbox_doubles_player.png | Bin 277 -> 377 bytes .../battle_interface/healthbox_elements.png | Bin 0 -> 1226 bytes .../healthbox_singles_opponent.png | Bin 282 -> 377 bytes .../healthbox_singles_player.png | Bin 369 -> 462 bytes graphics/battle_interface/hp_bar.png | Bin 161 -> 0 bytes graphics/battle_interface/hp_bar_anim.png | Bin 149 -> 0 bytes graphics/battle_interface/misc.png | Bin 96 -> 0 bytes graphics/battle_interface/misc_frame_end.png | Bin 82 -> 0 bytes ...l_status_bar.png => party_summary_bar.png} | Bin graphics/battle_interface/status2.png | Bin 196 -> 0 bytes graphics/battle_interface/status3.png | Bin 198 -> 0 bytes graphics/battle_interface/status4.png | Bin 195 -> 0 bytes graphics/battle_interface/status_brn.png | Bin 116 -> 0 bytes graphics/battle_interface/status_frz.png | Bin 116 -> 0 bytes graphics/battle_interface/status_par.png | Bin 112 -> 0 bytes graphics/battle_interface/status_psn.png | Bin 116 -> 0 bytes graphics/battle_interface/status_slp.png | Bin 117 -> 0 bytes .../textbox.bin} | Bin .../{window.png => textbox.png} | Bin .../{window1.pal => textbox1.pal} | 0 .../{window2.pal => textbox2.pal} | 0 graphics_file_rules.mk | 2 +- include/battle.h | 2 +- include/battle_interface.h | 36 +- include/graphics.h | 17 +- src/battle_anim_special.c | 9 - src/battle_bg.c | 12 +- src/battle_gfx_sfx_util.c | 4 +- src/battle_interface.c | 1459 +++++++++-------- src/battle_main.c | 2 +- src/daycare.c | 6 +- src/graphics.c | 37 +- src/trade_scene.c | 12 +- 39 files changed, 844 insertions(+), 792 deletions(-) delete mode 100644 graphics/battle_interface/ball_display.png delete mode 100644 graphics/battle_interface/ball_display_unused_extra.png delete mode 100644 graphics/battle_interface/exp_bar.png create mode 100644 graphics/battle_interface/healthbar.pal create mode 100644 graphics/battle_interface/healthbox.pal create mode 100644 graphics/battle_interface/healthbox_elements.png delete mode 100644 graphics/battle_interface/hp_bar.png delete mode 100644 graphics/battle_interface/hp_bar_anim.png delete mode 100644 graphics/battle_interface/misc.png delete mode 100644 graphics/battle_interface/misc_frame_end.png rename graphics/battle_interface/{ball_status_bar.png => party_summary_bar.png} (100%) delete mode 100644 graphics/battle_interface/status2.png delete mode 100644 graphics/battle_interface/status3.png delete mode 100644 graphics/battle_interface/status4.png delete mode 100644 graphics/battle_interface/status_brn.png delete mode 100644 graphics/battle_interface/status_frz.png delete mode 100644 graphics/battle_interface/status_par.png delete mode 100644 graphics/battle_interface/status_psn.png delete mode 100644 graphics/battle_interface/status_slp.png rename graphics/{interface/menu_map.bin => battle_interface/textbox.bin} (100%) rename graphics/battle_interface/{window.png => textbox.png} (100%) rename graphics/battle_interface/{window1.pal => textbox1.pal} (100%) rename graphics/battle_interface/{window2.pal => textbox2.pal} (100%) diff --git a/graphics/battle_interface/ball_display.png b/graphics/battle_interface/ball_display.png deleted file mode 100644 index 3072a91aef9caf964eaccaa99bee6474642da342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!VDzu-cxxDqznRlLR^8grKRQn|NpO^-P_#U z?d2F1loj>=YS8~Jj`y;nivO>Py4w8zndR9v9RH&%*Eo8)uQf^m>R~Ji@(X5gcy=QV z$O-UtaSY*@nVi7En~;!jb;hX!0v8R98x)VQp5PBM<4Z^|HA_ukIPJs`AuC|S(jd^p z(7kZAw|8m+hqpJkgVKSd7q4PsBpbqZIZS1dPQJm-U^P|jk#zopr E0OG7jU;qFB diff --git a/graphics/battle_interface/ball_display_unused_extra.png b/graphics/battle_interface/ball_display_unused_extra.png deleted file mode 100644 index d7c1958d4956edb87eecae346952f5e2bec58fb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^93afX3?$7I7w-U41_3@Hu0Yz-((?cR|5wlMZEo)N za*PVfiu!*w=>HbSds$J%|JOuaZT|nv^6VOp|527}9KGDv8l?dBsC&9NhH%VGPGD%h zz`({9*1M92M^M(7S;8r%;g3S3QH>&DWDbxPgg&ebxsLQ0Gp*T A)Bpeg diff --git a/graphics/battle_interface/exp_bar.png b/graphics/battle_interface/exp_bar.png deleted file mode 100644 index b1a0c440e33c36529f2162a738fc8758fd92ab22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^9ze{&0wfrA>2ZGpQYM}*jv*3LlP#QC5?&}U8JtmJ zGMK~0l&?_6n5c00C~M2!#v5Rw)xy;!(tXOJ|1Jy+^O$xN-VhX#1)1aN>gTe~DWM4f DVX7VB diff --git a/graphics/battle_interface/healthbar.pal b/graphics/battle_interface/healthbar.pal new file mode 100644 index 000000000..829e6bd44 --- /dev/null +++ b/graphics/battle_interface/healthbar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +57 57 57 +255 255 255 +213 205 189 +131 131 139 +74 65 90 +82 106 90 +255 213 82 +255 180 65 +222 106 90 +115 255 172 +90 213 131 +255 230 57 +205 172 8 +255 90 57 +172 65 74 diff --git a/graphics/battle_interface/healthbox.pal b/graphics/battle_interface/healthbox.pal new file mode 100644 index 000000000..bc8e8f2bc --- /dev/null +++ b/graphics/battle_interface/healthbox.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 65 65 +255 255 222 +222 213 180 +197 189 115 +123 148 131 +82 106 98 +32 57 0 +57 82 65 +255 230 0 +255 156 148 +65 205 255 +0 0 255 +0 255 0 +255 0 0 +106 148 255 diff --git a/graphics/battle_interface/healthbox_doubles_opponent.png b/graphics/battle_interface/healthbox_doubles_opponent.png index 5d38ffbfaf2134746ec4589930abfc56a8e23d51..3a494a52a0b2b3120f2dabf7ca917e3923e53be8 100644 GIT binary patch delta 355 zcmV-p0i6Dh0`mfp8Gi!+001ZqZ599k00d`2O+f$vv5yP2XskIMF-{!2oDV{MSw2E0000NbVXQn zQ*UN;cVTj607pzjP)*Mw;>uv=PAn$Mb}UXqJIdTe9Xz z%OTKcG}O=x@PJ*l^+qq;@+mNOnEr&I1&7H`cmr|7@5wo&iEID>002ovPDHLkV1kpB Bk$?aI delta 253 zcmV0*(TZ8Gir(00262XskIMF-{!2oDS@!vBgU0000NbVXQn zQ*UN;cVTj607pzjP)Vii&`ew)cfcaz!~g^$qD%g<1^@s{jF{Q-{7(_}MvK{?S>$D1AQP}m zKp=O5d`04E++rAr_Hy(49R)%dXD?VKk3!tOKGq4qPBO(6$H70<_kO1%&P0 zi`cV@C-DCGyAr?>0K}GKU>^Ws&J0un)mdi)%fJMbGgbG0Z-ww+P;FV300000NkvXX Hu0mjfgoKqi delta 260 zcmV+f0sH>>0+j-g8Gir(0026Dukr%T0dO)p8g@U9IHO%vraG9FqqY9YX#vE%{nSYpWo>h0Yi$pcOg zv>*#`8ZXEK#=R6E3Vbt-g7^UogaK>xjZFX=>IU?bOBJ?=0ewOnNK`oH03s@^u?%R0 z!2g+LH=vV<&uU>Hnad>xdJaf7V||SZy0-5~0IudsSMz|R$D0%Y1;g+*B4FyuiU4^0 z-FX_Y=?$VcUTqkl001-P6!-uD?iu)=2e>Q`6kw5N16IQ>>HGi&Y6uJE9TV#S0000< KMNUMnLSTYqX>2I~ diff --git a/graphics/battle_interface/healthbox_elements.png b/graphics/battle_interface/healthbox_elements.png new file mode 100644 index 0000000000000000000000000000000000000000..aadcc8554e65c1f27a301cbb5cb7c922edf88077 GIT binary patch literal 1226 zcmV;*1U37KP)i}00Cl4M??UK1szBL00Ztx zL_t(|oV}L4Zrnx`g$FS7B3CI~@CWcZN+Vm10=J9A3Q`&ZveFYs4`9I97f6v8aIv*r zZN~trrrJQ|G&G=c3I?ht=L~0N`M0711R3kD4#{usz2|aCS*ho&7pud|11DEEw^z5f zE16gxSP{6ny1c;pir6wBwh%3FyM9!N_3S~I{OpA)OaCZpI=I}yyVE)O~Zh z1Hv*OtYthPEaPDw_z&lBvFr!dF>h9&UL3vrT^;e?>NjxJgW7LuHA@7*m|+PI?3)ZgXcF0sZ*tb=p$o^hUA*VHz<->DgpzM- zv2{^f)i!5L$Evq&Yg-g`T|{7Kg4Hg-9LoFWTtWuPTiX^TtkkuN{>{Eb0IWrcS_S{9 z$vBI*0DP0PHf`r%N~_{q@+_9xiY;u=wG^tb$+Jz`CT%Bx!cG8!Pj6h6 zx{*?FUIovN4SDU7Mx)5k2TC^p8pVtv-nckFoS=Cgyb7LsC0xqTu*m>~CXvmxP5SfC zusOUSKYUO=;$NJy^^AtvGQ9Yz2e|(IC-AWgL`z-ZR07*qoM6N<$f)(mAh5!Hn literal 0 HcmV?d00001 diff --git a/graphics/battle_interface/healthbox_singles_opponent.png b/graphics/battle_interface/healthbox_singles_opponent.png index 5f02199b5312b6579d069aedced02bed2763f41e..be88c22f6d818d563782ae55508095209ebfceb9 100644 GIT binary patch delta 361 zcmV-v0ha!n0{H@v8Gi!+001ZqZ599k00d`2O+f$vv5yP2XskIMF-{!2oDPoOR~jN0000NbVXQn zQ*UN;cVTj607pzjP)%fHr zYOHF2^K(y3WZ<%6-zWmg;$omIHw49fIY2~>I40=_GGN&rlL!b?9^_3sv3q8sc3tHH zTosYmcFYAb;$mrS{{z5#kX`_ITQMHe0e3C8woeDV54v2S{dZvXFnpJr0O0ocJq8Bt z00Mp~qxxlQ1WI%I0=puk=3EmW}PQKO;idG`Z5tr4_00000NkvXX Hu0mjf$imDGbh#T9y95F}J%Igq>=J?jyM%Bc13>Hx$K(qq&nF Q00000NkvXXt^-0~f;mfW%K!iX diff --git a/graphics/battle_interface/healthbox_singles_player.png b/graphics/battle_interface/healthbox_singles_player.png index 2478cc57d947c5f187ca2bb2cc919ef15e77c9fe..a395b6543e1304d7fc221ff0058921dff0bbb6f5 100644 GIT binary patch delta 447 zcmV;w0YLuo0?q@F8Gi!+001EPVoU%400d`2O+f$vv5yPKF}I?sD-8z%#e%?Km!M8KLEUzS^F@+A0dZ+c}`A$A+kZ{#g_r( z@o(k&NCzM*=(>{Xffxn70K5Zdb-@FW88ce|Y8Vcuu@#`3DzXC5I@(gW9uYvu16&9o z-~lEW5Jp^p+<*v@QSu delta 353 zcmV-n0iOQO1Mvco8Gir(001&g&7uGR0XRuSK~z|U?bW>wfW~ z!f0@Dg`m5M;Ob!D34k3I#oy#w?x&uECUm9ur3KovE*eoyQ(;(N0%|4-J)oYuqR<0Y zqirk*Jz%jDCTIb*BTmo)s);EeN$7xI0enNCW|IHp2KdYoj(!QP{c<fd|K<0jS5o6aWcjd5n#KrmMsVz|Z+Dg@6PB84VaB zAg2K*2xJKr;93)40b~FckOs^_kaQqi$hzn z>-#280qFxQ4hNZTwkU4$T=GQTsG+j(#9401?{ddJR_(G~Z4iA@_j#T4Ca$@ymyWeo z2pm#yl54R!p?5{1kZnHCf)>ZAOd6~g_D@Liy&E@Ucf$RLPo~?gZ)b~*Yd)|ZWVffQ KpUXO@geCxRK0AT{ diff --git a/graphics/battle_interface/hp_bar_anim.png b/graphics/battle_interface/hp_bar_anim.png deleted file mode 100644 index 5d1fc5f5274347f368ce7928d63cc62c283a89dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^6M&e51xPS_dvU}YNX2-%IEH9UTzhdL?@6su_4wp2F)MnvXk)&~*XwrOlaf~?A3kv(WS^(2pUXO@geCws*E{F{ diff --git a/graphics/battle_interface/misc.png b/graphics/battle_interface/misc.png deleted file mode 100644 index cf1d76046616f9c67218b20060ed28fac845eebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^5kSnr0wfsbHgw4WDRoa5#}J9B$v^s8-YsG*v1D7N sIj@t2L+hOb6N~74MZ$L!KeUP0q8hbZj-E@g=~%IStlcwMK@hr?QFC5E6yuX zS2RsF6l>nOZTTP3bD#emKH_ij?&QUccG0LkU)fi-L}X^HTeZ<&UV(3aZ*2OGAFIvu vtjcx^+R03BEZxB_rrWS~eWP!`?axs8Wgjk{zpp;!7RY&?u6{1-oD!M;Lx v?`Qtiy+ATzc6Gu`rm}k8H&;HKUth)i?D?A8$-?H$AlG@i`njxgN@xNAPM=bY diff --git a/graphics/battle_interface/status_brn.png b/graphics/battle_interface/status_brn.png deleted file mode 100644 index 16b441367a1d0ef0e508c36c8beb9827dfaf4dc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5i7!-Jz4*cu9 zx^LfR;njbRX8G!H?`%on)(_rP;8;?iGQqc8NZg5eh4PCk(fln(gB`bc};<0!#5bsr!3*rZ}8n;7s1Yn80_0A!RY6=}w)8{y(0t P1{vq+>gTe~DWM4fE3PG4 diff --git a/graphics/battle_interface/status_par.png b/graphics/battle_interface/status_par.png deleted file mode 100644 index 3df34c5f6b27ff63d7002bceee75b0cdd9fc40ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^5?GRo7{ K&t;ucLK6UOnj(_` diff --git a/graphics/battle_interface/status_psn.png b/graphics/battle_interface/status_psn.png deleted file mode 100644 index 8b79b24647cb24423ddc32cc8f93858a3011486f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5gTe~DWM4fDDEZp diff --git a/graphics/battle_interface/status_slp.png b/graphics/battle_interface/status_slp.png deleted file mode 100644 index e3da5c0f32dd879aad17f1cd869b153fac996cc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^5 $@ $(UNUSEDGFXDIR)/old_contest.4bpp: $(UNUSEDGFXDIR)/old_contest_frame_1.4bpp \ diff --git a/include/battle.h b/include/battle.h index 3acfadaab..1086fa3ec 100644 --- a/include/battle.h +++ b/include/battle.h @@ -581,7 +581,7 @@ struct BattleBarInfo u8 healthboxSpriteId; s32 maxValue; s32 oldValue; - s32 receivedValue; + s32 receivedValue; // if positive/negative, fills the bar to the left/right respectively s32 currValue; }; diff --git a/include/battle_interface.h b/include/battle_interface.h index 3415836a8..067436c05 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -25,25 +25,31 @@ enum HP_BAR_FULL, }; -#define TAG_HEALTHBOX_PLAYER1_TILE 0xD6FF -#define TAG_HEALTHBOX_PLAYER2_TILE 0xD700 -#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701 -#define TAG_HEALTHBOX_OPPONENT2_TILE 0xD702 +#define TAG_HEALTHBOX_PLAYER1_TILE 55039 +#define TAG_HEALTHBOX_PLAYER2_TILE 55040 +#define TAG_HEALTHBOX_OPPONENT1_TILE 55041 +#define TAG_HEALTHBOX_OPPONENT2_TILE 55042 -#define TAG_HEALTHBAR_PLAYER1_TILE 0xD704 -#define TAG_HEALTHBAR_OPPONENT1_TILE 0xD705 -#define TAG_HEALTHBAR_PLAYER2_TILE 0xD706 -#define TAG_HEALTHBAR_OPPONENT2_TILE 0xD707 +#define TAG_HEALTHBAR_PLAYER1_TILE 55044 +#define TAG_HEALTHBAR_OPPONENT1_TILE 55045 +#define TAG_HEALTHBAR_PLAYER2_TILE 55046 +#define TAG_HEALTHBAR_OPPONENT2_TILE 55047 -#define TAG_HEALTHBOX_SAFARI_TILE 0xD70B +#define TAG_HEALTHBOX_PALS_1 55049 +#define TAG_HEALTHBOX_PALS_2 55050 +#define TAG_HEALTHBOX_SAFARI_TILE 55051 +#define TAG_PARTY_SUMMARY_BAR_PLAYER_TILE 55052 +#define TAG_PARTY_SUMMARY_BAR_OPPONENT_TILE 55053 -#define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C -#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714 +#define TAG_PARTY_SUMMARY_BAR_PLAYER_PAL 55056 +#define TAG_PARTY_SUMMARY_BAR_OPPONENT_PAL 55057 +#define TAG_PARTY_SUMMARY_BALL_PLAYER_PAL 55058 +#define TAG_PARTY_SUMMARY_BALL_OPPONENT_PAL 55059 +#define TAG_PARTY_SUMMARY_BALL_PLAYER_TILE 55060 +#define TAG_PARTY_SUMMARY_BALL_OPPONENT_TILE 55061 -#define TAG_HEALTHBOX_PAL 0xD6FF -#define TAG_HEALTHBAR_PAL 0xD704 -#define TAG_STATUS_SUMMARY_BAR_PAL 0xD710 -#define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712 +#define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE +#define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE enum { diff --git a/include/graphics.h b/include/graphics.h index 8abeb08b1..7c4ebc051 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2878,9 +2878,6 @@ extern const u8 gUnknown_8E99118[]; extern const u16 gStandardMenuPalette[]; // egg_hatch -extern const u32 gBattleTextboxTiles[]; -extern const u32 gBattleTextboxTilemap[]; -extern const u32 gBattleTextboxPalette[]; extern const u32 gTradeGba2_Pal[]; extern const u32 gTradeGba_Gfx[]; @@ -4322,8 +4319,6 @@ extern const u32 gHealthboxDoublesPlayerGfx[]; extern const u32 gHealthboxDoublesOpponentGfx[]; extern const u32 gHealthboxSafariGfx[]; extern const u32 gBlankGfxCompressed[]; -extern const u16 gBattleInterface_BallStatusBarPal[]; -extern const u16 gBattleInterface_BallDisplayPal[]; extern const u32 gInterfaceGfx_HPNumbers[]; extern const u32 gGhostFrontPic[]; extern const u32 gGhostPalette[]; @@ -4861,11 +4856,13 @@ extern const u16 gHoennTrainerCard_Pal[]; extern const u32 gHoennTrainerCard_Gfx[]; // battle_interface -extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[]; -extern const u8 gHealthboxElementsGfxTable[][32]; -extern const u16 gBattleInterface_BallStatusBarPal[]; -extern const u16 gBattleInterface_BallDisplayPal[]; -extern const u16 gBattleInterface_SummaryBallDisplayGfx[]; +extern const u32 gBattleInterface_Textbox_Gfx[]; +extern const u32 gBattleInterface_Textbox_Pal[]; +extern const u32 gBattleInterface_Textbox_Tilemap[]; +extern const u32 gBattleInterface_PartySummaryBar_Gfx[]; +extern const u8 gBattleInterface_Gfx[][32]; +extern const u16 gBattleInterface_Healthbox_Pal[]; +extern const u16 gBattleInterface_Healthbar_Pal[]; // item_menu extern const u32 gUnknown_8E830CC[]; diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 78400812d..48f7435b7 100644 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -17,7 +17,6 @@ #include "constants/moves.h" #include "constants/songs.h" -// Defines #define TAG_PARTICLES_POKEBALL 55020 #define TAG_PARTICLES_GREATBALL 55021 #define TAG_PARTICLES_SAFARIBALL 55022 @@ -31,15 +30,10 @@ #define TAG_PARTICLES_LUXURYBALL 55030 #define TAG_PARTICLES_PREMIERBALL 55031 -#define TAG_HEALTHBOX_PALS_1 55049 -#define TAG_HEALTHBOX_PALS_2 55050 - -// RAM u32 gMonShrinkDuration; u16 gMonShrinkDelta; u16 gMonShrinkDistance; -// Function Declarations static void AnimTask_UnusedLevelUpHealthBox_Step(u8); static void AnimTask_FlashHealthboxOnLevelUp_Step(u8); static void AnimTask_ThrowBall_WaitAnimObjComplete(u8); @@ -94,7 +88,6 @@ static void TimerBallOpenParticleAnimation(u8); static void PremierBallOpenParticleAnimation(u8); static void SpriteCB_SafariBaitOrRock_Init(struct Sprite *); -// Data struct CaptureStar { s8 xOffset; @@ -408,8 +401,6 @@ const struct SpriteTemplate gSafariRockTemplate = .callback = SpriteCB_SafariBaitOrRock_Init, }; -// Functions - // Unused void AnimTask_LevelUpHealthBox(u8 taskId) { diff --git a/src/battle_bg.c b/src/battle_bg.c index 4b5b17b72..8260e7091 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -713,10 +713,10 @@ void DrawMainBattleBackground(void) void LoadBattleTextboxAndBackground(void) { - LZDecompressVram(gBattleTextboxTiles, (void *)BG_CHAR_ADDR(0)); - CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0x000); + LZDecompressVram(gBattleInterface_Textbox_Gfx, (void *)BG_CHAR_ADDR(0)); + CopyToBgTilemapBuffer(0, gBattleInterface_Textbox_Tilemap, 0, 0x000); CopyBgTilemapBufferToVram(0); - LoadCompressedPalette(gBattleTextboxPalette, 0x00, 0x40); + LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x00, 0x40); LoadBattleMenuWindowGfx(); DrawMainBattleBackground(); } @@ -1076,14 +1076,14 @@ bool8 LoadChosenBattleElement(u8 caseId) switch (caseId) { case 0: - LZDecompressVram(gBattleTextboxTiles, (void *)BG_CHAR_ADDR(0)); + LZDecompressVram(gBattleInterface_Textbox_Gfx, (void *)BG_CHAR_ADDR(0)); break; case 1: - CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0x000); + CopyToBgTilemapBuffer(0, gBattleInterface_Textbox_Tilemap, 0, 0x000); CopyBgTilemapBufferToVram(0); break; case 2: - LoadCompressedPalette(gBattleTextboxPalette, 0x00, 0x40); + LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x00, 0x40); break; case 3: battleScene = GetBattleTerrainOverride(); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index bd43270e0..a681dfec6 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -98,11 +98,11 @@ static const struct CompressedSpriteSheet sSpriteSheets_HealthBar[MAX_BATTLERS_C static const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] = { { - .data = gBattleInterface_BallStatusBarPal, + .data = gBattleInterface_Healthbox_Pal, .tag = TAG_HEALTHBOX_PAL, }, { - .data = gBattleInterface_BallDisplayPal, + .data = gBattleInterface_Healthbar_Pal, .tag = TAG_HEALTHBAR_PAL, }, }; diff --git a/src/battle_interface.c b/src/battle_interface.c index c9575d373..5bad50de9 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -11,11 +11,6 @@ #include "safari_zone.h" #include "constants/songs.h" -#define GetStringRightAlignXOffset(fontId, string, destWidth) ({ \ - s32 w = GetStringWidth(fontId, string, 0); \ - destWidth - w; \ -}) - #undef abs #define abs(a) ((a) < 0 ? -(a) : (a)) @@ -28,171 +23,90 @@ struct TestingBar u32 tileOffset; }; -enum -{ // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c - // These are indexes into the tables, which are filled with 8x8 square pixel data. - HEALTHBOX_GFX_0, //hp bar [black section] - HEALTHBOX_GFX_1, //hp bar "H" - HEALTHBOX_GFX_2, //hp bar "P" - HEALTHBOX_GFX_HP_BAR_GREEN, //hp bar [0 pixels] - HEALTHBOX_GFX_4, //hp bar [1 pixels] - HEALTHBOX_GFX_5, //hp bar [2 pixels] - HEALTHBOX_GFX_6, //hp bar [3 pixels] - HEALTHBOX_GFX_7, //hp bar [4 pixels] - HEALTHBOX_GFX_8, //hp bar [5 pixels] - HEALTHBOX_GFX_9, //hp bar [6 pixels] - HEALTHBOX_GFX_10, //hp bar [7 pixels] - HEALTHBOX_GFX_11, //hp bar [8 pixels] - HEALTHBOX_GFX_12, //exp bar [0 pixels] - HEALTHBOX_GFX_13, //exp bar [1 pixels] - HEALTHBOX_GFX_14, //exp bar [2 pixels] - HEALTHBOX_GFX_15, //exp bar [3 pixels] - HEALTHBOX_GFX_16, //exp bar [4 pixels] - HEALTHBOX_GFX_17, //exp bar [5 pixels] - HEALTHBOX_GFX_18, //exp bar [6 pixels] - HEALTHBOX_GFX_19, //exp bar [7 pixels] - HEALTHBOX_GFX_20, //exp bar [8 pixels] - HEALTHBOX_GFX_STATUS_PSN_BATTLER0, //status psn "(P" - HEALTHBOX_GFX_22, //status psn "SN" - HEALTHBOX_GFX_23, //status psn "|)"" - HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, //status prz - HEALTHBOX_GFX_25, - HEALTHBOX_GFX_26, - HEALTHBOX_GFX_STATUS_SLP_BATTLER0, //status slp - HEALTHBOX_GFX_28, - HEALTHBOX_GFX_29, - HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, //status frz - HEALTHBOX_GFX_31, - HEALTHBOX_GFX_32, - HEALTHBOX_GFX_STATUS_BRN_BATTLER0, //status brn - HEALTHBOX_GFX_34, - HEALTHBOX_GFX_35, - HEALTHBOX_GFX_36, //misc [Black section] - HEALTHBOX_GFX_37, //misc [Black section] - HEALTHBOX_GFX_38, //misc [Black section] - HEALTHBOX_GFX_39, //misc [Blank Health Window?] - HEALTHBOX_GFX_40, //misc [Blank Health Window?] - HEALTHBOX_GFX_41, //misc [Blank Health Window?] - HEALTHBOX_GFX_42, //misc [Blank Health Window?] - HEALTHBOX_GFX_43, //misc [Top of Health Window?] - HEALTHBOX_GFX_44, //misc [Top of Health Window?] - HEALTHBOX_GFX_45, //misc [Top of Health Window?] - HEALTHBOX_GFX_46, //misc [Blank Health Window?] - HEALTHBOX_GFX_HP_BAR_YELLOW, //hp bar yellow [0 pixels] - HEALTHBOX_GFX_48, //hp bar yellow [1 pixels] - HEALTHBOX_GFX_49, //hp bar yellow [2 pixels] - HEALTHBOX_GFX_50, //hp bar yellow [3 pixels] - HEALTHBOX_GFX_51, //hp bar yellow [4 pixels] - HEALTHBOX_GFX_52, //hp bar yellow [5 pixels] - HEALTHBOX_GFX_53, //hp bar yellow [6 pixels] - HEALTHBOX_GFX_54, //hp bar yellow [7 pixels] - HEALTHBOX_GFX_55, //hp bar yellow [8 pixels] - HEALTHBOX_GFX_HP_BAR_RED, //hp bar red [0 pixels] - HEALTHBOX_GFX_57, //hp bar red [1 pixels] - HEALTHBOX_GFX_58, //hp bar red [2 pixels] - HEALTHBOX_GFX_59, //hp bar red [3 pixels] - HEALTHBOX_GFX_60, //hp bar red [4 pixels] - HEALTHBOX_GFX_61, //hp bar red [5 pixels] - HEALTHBOX_GFX_62, //hp bar red [6 pixels] - HEALTHBOX_GFX_63, //hp bar red [7 pixels] - HEALTHBOX_GFX_64, //hp bar red [8 pixels] - HEALTHBOX_GFX_65, //hp bar frame end - HEALTHBOX_GFX_66, //status ball [full] - HEALTHBOX_GFX_67, //status ball [empty] - HEALTHBOX_GFX_68, //status ball [fainted] - HEALTHBOX_GFX_69, //status ball [statused] - HEALTHBOX_GFX_70, //status ball [unused extra] - HEALTHBOX_GFX_STATUS_PSN_BATTLER1, //status2 "PSN" - HEALTHBOX_GFX_72, - HEALTHBOX_GFX_73, - HEALTHBOX_GFX_STATUS_PRZ_BATTLER1, //status2 "PRZ" - HEALTHBOX_GFX_75, - HEALTHBOX_GFX_76, - HEALTHBOX_GFX_STATUS_SLP_BATTLER1, //status2 "SLP" - HEALTHBOX_GFX_78, - HEALTHBOX_GFX_79, - HEALTHBOX_GFX_STATUS_FRZ_BATTLER1, //status2 "FRZ" - HEALTHBOX_GFX_81, - HEALTHBOX_GFX_82, - HEALTHBOX_GFX_STATUS_BRN_BATTLER1, //status2 "BRN" - HEALTHBOX_GFX_84, - HEALTHBOX_GFX_85, - HEALTHBOX_GFX_STATUS_PSN_BATTLER2, //status3 "PSN" - HEALTHBOX_GFX_87, - HEALTHBOX_GFX_88, - HEALTHBOX_GFX_STATUS_PRZ_BATTLER2, //status3 "PRZ" - HEALTHBOX_GFX_90, - HEALTHBOX_GFX_91, - HEALTHBOX_GFX_STATUS_SLP_BATTLER2, //status3 "SLP" - HEALTHBOX_GFX_93, - HEALTHBOX_GFX_94, - HEALTHBOX_GFX_STATUS_FRZ_BATTLER2, //status3 "FRZ" - HEALTHBOX_GFX_96, - HEALTHBOX_GFX_97, - HEALTHBOX_GFX_STATUS_BRN_BATTLER2, //status3 "BRN" - HEALTHBOX_GFX_99, - HEALTHBOX_GFX_100, - HEALTHBOX_GFX_STATUS_PSN_BATTLER3, //status4 "PSN" - HEALTHBOX_GFX_102, - HEALTHBOX_GFX_103, - HEALTHBOX_GFX_STATUS_PRZ_BATTLER3, //status4 "PRZ" - HEALTHBOX_GFX_105, - HEALTHBOX_GFX_106, - HEALTHBOX_GFX_STATUS_SLP_BATTLER3, //status4 "SLP" - HEALTHBOX_GFX_108, - HEALTHBOX_GFX_109, - HEALTHBOX_GFX_STATUS_FRZ_BATTLER3, //status4 "FRZ" - HEALTHBOX_GFX_111, - HEALTHBOX_GFX_112, - HEALTHBOX_GFX_STATUS_BRN_BATTLER3, //status4 "BRN" - HEALTHBOX_GFX_114, - HEALTHBOX_GFX_115, - HEALTHBOX_GFX_116, //unknown_D12FEC - HEALTHBOX_GFX_117, //unknown_D1300C -}; +// These are used as indexes for each "section of tiles" in gBattleInterface_Gfx +#define B_INTERFACE_GFX_TRANSPARENT 0 +#define B_INTERFACE_GFX_HP_BAR_HP_TEXT 1 +#define B_INTERFACE_GFX_HP_BAR_GREEN 3 +#define B_INTERFACE_GFX_EXP_BAR 12 +#define B_INTERFACE_GFX_STATUS_PSN_BATTLER0 21 // BATTLER0: B_POSITION_PLAYER_LEFT +#define B_INTERFACE_GFX_STATUS_PAR_BATTLER0 24 +#define B_INTERFACE_GFX_STATUS_SLP_BATTLER0 27 +#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER0 30 +#define B_INTERFACE_GFX_STATUS_BRN_BATTLER0 33 +// tiles 36 through 38 are unused +#define B_INTERFACE_GFX_STATUS_NONE 39 +// tiles 40 through 42 are unused +#define B_INTERFACE_GFX_SAFARI_HEALTHBOX_0 43 +#define B_INTERFACE_GFX_SAFARI_HEALTHBOX_1 44 +#define B_INTERFACE_GFX_SAFARI_HEALTHBOX_2 45 +// tile 46 is unused +#define B_INTERFACE_GFX_HP_BAR_YELLOW 47 +#define B_INTERFACE_GFX_HP_BAR_RED 56 +#define B_INTERFACE_GFX_HP_BAR_LEFT_BORDER 65 // Used in place of the HP text graphic if the pokemon is statused +#define B_INTERFACE_GFX_BALL_PARTY_SUMMARY 66 +#define B_INTERFACE_GFX_BALL_CAUGHT 70 +#define B_INTERFACE_GFX_STATUS_PSN_BATTLER1 71 // BATTLER1: B_POSITION_OPPONENT_LEFT +#define B_INTERFACE_GFX_STATUS_PAR_BATTLER1 74 +#define B_INTERFACE_GFX_STATUS_SLP_BATTLER1 77 +#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER1 80 +#define B_INTERFACE_GFX_STATUS_BRN_BATTLER1 83 +#define B_INTERFACE_GFX_STATUS_PSN_BATTLER2 86 // BATTLER2: B_POSITION_PLAYER_RIGHT +#define B_INTERFACE_GFX_STATUS_PAR_BATTLER2 89 +#define B_INTERFACE_GFX_STATUS_SLP_BATTLER2 92 +#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER2 95 +#define B_INTERFACE_GFX_STATUS_BRN_BATTLER2 98 +#define B_INTERFACE_GFX_STATUS_PSN_BATTLER3 101 // BATTLER3: B_POSITION_OPPONENT_RIGHT +#define B_INTERFACE_GFX_STATUS_PAR_BATTLER3 104 +#define B_INTERFACE_GFX_STATUS_SLP_BATTLER3 107 +#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER3 110 +#define B_INTERFACE_GFX_STATUS_BRN_BATTLER3 113 +#define B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_TEXT 116 // Used in the player's +#define B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_BAR 117 // healthbox in double battles + static void SpriteCB_HealthBoxOther(struct Sprite *sprite); static void SpriteCB_HealthBar(struct Sprite *sprite); -static const u8 *GetHealthboxElementGfxPtr(u8 which); +static const u8 *GetBattleInterfaceGfxPtr(u8 which); static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); -static void sub_8049388(u8 taskId); -static void sub_80493E4(u8 taskId); -static void sub_8049568(struct Sprite *sprite); -static void sub_8049630(struct Sprite *sprite); -static void sub_804948C(u8 taskId); -static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite); +static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId); +static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId); +static void SpriteCB_PartySummaryBar_Exit(struct Sprite *sprite); +static void SpriteCB_PartySummaryBall_Exit(struct Sprite *sprite); +static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId); +static void SpriteCB_PartySummaryBall_OnSwitchout(struct Sprite *sprite); static void UpdateStatusIconInHealthbox(u8 spriteId); -static void SpriteCB_StatusSummaryBar(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite); +static void SpriteCB_PartySummaryBar(struct Sprite *sprite); +static void SpriteCB_PartySummaryBall_OnBattleStart(struct Sprite *sprite); static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); -static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale); +static u8 GetReceivedValueInPixels(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale); static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); -static void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y); +static void DrawHealthbarOntoScreen(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y); static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); static void RemoveWindowOnHealthbox(u32 windowId); static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); -static const struct OamData gOamData_8260270 = { +static const struct OamData sOamData_Healthbox = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { - { - .tileTag = 55039, - .paletteTag = 55039, - .oam = &gOamData_8260270, + [B_POSITION_PLAYER_LEFT / 2] = { + .tileTag = TAG_HEALTHBOX_PLAYER1_TILE, + .paletteTag = TAG_HEALTHBOX_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy - }, { - .tileTag = 55040, - .paletteTag = 55039, - .oam = &gOamData_8260270, + }, + [B_POSITION_PLAYER_RIGHT / 2] = { + .tileTag = TAG_HEALTHBOX_PLAYER2_TILE, + .paletteTag = TAG_HEALTHBOX_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -200,17 +114,18 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { }; static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { - { - .tileTag = 55041, - .paletteTag = 55039, - .oam = &gOamData_8260270, + [B_POSITION_OPPONENT_LEFT / 2] = { + .tileTag = TAG_HEALTHBOX_OPPONENT1_TILE, + .paletteTag = TAG_HEALTHBOX_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy - }, { - .tileTag = 55042, - .paletteTag = 55039, - .oam = &gOamData_8260270, + }, + [B_POSITION_OPPONENT_RIGHT / 2] = { + .tileTag = TAG_HEALTHBOX_OPPONENT2_TILE, + .paletteTag = TAG_HEALTHBOX_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -219,205 +134,312 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { static const struct SpriteTemplate sHealthboxSafariSpriteTemplate = { - .tileTag = 55051, - .paletteTag = 55039, - .oam = &gOamData_8260270, + .tileTag = TAG_HEALTHBOX_SAFARI_TILE, + .paletteTag = TAG_HEALTHBOX_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gUnknown_82602F0 = { +static const struct OamData sOamData_Healthbar = { .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .priority = 1 }; -static const struct SpriteTemplate gUnknown_82602F8[] = { - { - .tileTag = 55044, - .paletteTag = 55044, - .oam = &gUnknown_82602F0, +static const struct SpriteTemplate sHealthbarSpriteTemplates[] = { + [B_POSITION_PLAYER_LEFT] = { + .tileTag = TAG_HEALTHBAR_PLAYER1_TILE, + .paletteTag = TAG_HEALTHBAR_PAL, + .oam = &sOamData_Healthbar, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HealthBar - }, { - .tileTag = 55045, - .paletteTag = 55044, - .oam = &gUnknown_82602F0, + }, + [B_POSITION_OPPONENT_LEFT] = { + .tileTag = TAG_HEALTHBAR_OPPONENT1_TILE, + .paletteTag = TAG_HEALTHBAR_PAL, + .oam = &sOamData_Healthbar, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HealthBar - }, { - .tileTag = 55046, - .paletteTag = 55044, - .oam = &gUnknown_82602F0, + }, + [B_POSITION_PLAYER_RIGHT] = { + .tileTag = TAG_HEALTHBAR_PLAYER2_TILE, + .paletteTag = TAG_HEALTHBAR_PAL, + .oam = &sOamData_Healthbar, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HealthBar - }, { - .tileTag = 55047, - .paletteTag = 55044, - .oam = &gUnknown_82602F0, + }, + [B_POSITION_OPPONENT_RIGHT] = { + .tileTag = TAG_HEALTHBAR_OPPONENT2_TILE, + .paletteTag = TAG_HEALTHBAR_PAL, + .oam = &sOamData_Healthbar, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HealthBar } }; -static const struct Subsprite gUnknown_8260358[] = { - { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, - { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 }, - { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0030, 1 }, - { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0034, 1 }, - { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0038, 1 } +static const struct Subsprite sUnused_Subsprites_0[] = { + { -16, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 32, 1 }, + { -16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 48, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 52, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 56, 1 } }; -static const struct Subsprite gUnknown_826036C[] = { - { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0040, 1 }, - { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0060, 1 }, - { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0070, 1 }, - { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0074, 1 }, - { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0078, 1 } +static const struct Subsprite sUnused_Subsprites_2[] = { + { -16, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 64, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 96, 1 }, + { -16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 112, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 116, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 120, 1 } }; -static const struct Subsprite gUnknown_8260380[] = { - { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, - { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +static const struct Subsprite sUnused_Subsprites_1[] = { + { -16, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 32, 1 } }; -static const struct Subsprite gUnknown_8260388[] = { - { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, - { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +static const struct Subsprite sUnused_Subsprites_3[] = { + { -16, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 32, 1 } }; -static const struct Subsprite gUnknown_8260390[] = { - { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, - { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 } +static const struct Subsprite sHealthBar_Subsprites_Player[] = { + { + .x = -16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 1 + } }; -static const struct Subsprite gUnknown_8260398[] = { - { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, - { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, - { 224, 0, SPRITE_SHAPE(8x8), SPRITE_SIZE(8x8), 0x0008, 1 } +static const struct Subsprite sHealthBar_Subsprites_Opponent[] = { + { + .x = -16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 8, + .priority = 1 + }, }; -static const struct SubspriteTable gUnknown_82603A4[] = { - {NELEMS(gUnknown_8260358), gUnknown_8260358}, - {NELEMS(gUnknown_8260380), gUnknown_8260380}, - {NELEMS(gUnknown_826036C), gUnknown_826036C}, - {NELEMS(gUnknown_8260388), gUnknown_8260388} +// Unused +static const struct SubspriteTable sUnused_SubspriteTable[] = { + {ARRAY_COUNT(sUnused_Subsprites_0), sUnused_Subsprites_0}, + {ARRAY_COUNT(sUnused_Subsprites_1), sUnused_Subsprites_1}, + {ARRAY_COUNT(sUnused_Subsprites_2), sUnused_Subsprites_2}, + {ARRAY_COUNT(sUnused_Subsprites_3), sUnused_Subsprites_3} }; -static const struct SubspriteTable gUnknown_82603C4[] = { - {NELEMS(gUnknown_8260390), gUnknown_8260390}, - {NELEMS(gUnknown_8260398), gUnknown_8260398} +static const struct SubspriteTable sHealthBar_SubspriteTable[] = { + [B_SIDE_PLAYER] = {ARRAY_COUNT(sHealthBar_Subsprites_Player), sHealthBar_Subsprites_Player}, + [B_SIDE_OPPONENT] = {ARRAY_COUNT(sHealthBar_Subsprites_Opponent), sHealthBar_Subsprites_Opponent}, }; -static const struct Subsprite gUnknown_82603D4[] = { - { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, - { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, - { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, - { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +static const struct Subsprite sStatusSummaryBar_Subsprites_Enter[] = { + { + .x = -96, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = -64, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 1 + } }; -static const struct Subsprite gUnknown_82603E4[] = { - { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, - { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, - { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, - { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, - { 32, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, - { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +static const struct Subsprite sStatusSummaryBar_Subsprites_Exit[] = { + { + .x = -96, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = -64, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 64, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 1 + } }; -static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = -{ - {NELEMS(gUnknown_82603D4), gUnknown_82603D4} +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Enter[] = { + {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Enter), sStatusSummaryBar_Subsprites_Enter} }; -static const struct SubspriteTable gUnknown_8260404[] = { - {NELEMS(gUnknown_82603E4), gUnknown_82603E4} +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Exit[] = { + {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Exit), sStatusSummaryBar_Subsprites_Exit} }; static const u16 sBattleInterface_Unused[] = INCBIN_U16("graphics/battle_interface/unused.4bpp"); -static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheets[] = { - {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, - {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} +static const struct CompressedSpriteSheet sPartySummaryBarSpriteSheets[] = { + {gBattleInterface_PartySummaryBar_Gfx, 16 * TILE_SIZE_4BPP, TAG_PARTY_SUMMARY_BAR_PLAYER_TILE}, + {gBattleInterface_PartySummaryBar_Gfx, 16 * TILE_SIZE_4BPP, TAG_PARTY_SUMMARY_BAR_OPPONENT_TILE} }; -static const struct SpritePalette sStatusSummaryBarSpritePals[] = { - {gBattleInterface_BallStatusBarPal, 55056}, - {gBattleInterface_BallStatusBarPal, 55057} +static const struct SpritePalette sPartySummaryBarSpritePals[] = { + {gBattleInterface_Healthbox_Pal, TAG_PARTY_SUMMARY_BAR_PLAYER_PAL}, + {gBattleInterface_Healthbox_Pal, TAG_PARTY_SUMMARY_BAR_OPPONENT_PAL} }; -static const struct SpritePalette sStatusSummaryBallsSpritePals[] = { - {gBattleInterface_BallDisplayPal, 55058}, - {gBattleInterface_BallDisplayPal, 55059} +static const struct SpritePalette sPartySummaryBallSpritePals[] = { + {gBattleInterface_Healthbar_Pal, TAG_PARTY_SUMMARY_BALL_PLAYER_PAL}, + {gBattleInterface_Healthbar_Pal, TAG_PARTY_SUMMARY_BALL_OPPONENT_PAL} }; -static const struct SpriteSheet sStatusSummaryBallsSpriteSheets[] = { - {gBattleInterface_SummaryBallDisplayGfx, 0x0080, 55060}, - {gBattleInterface_SummaryBallDisplayGfx, 0x0080, 55061} +static const struct SpriteSheet sPartySummaryBallSpriteSheets[] = { + {gBattleInterface_Gfx + B_INTERFACE_GFX_BALL_PARTY_SUMMARY, 4 * TILE_SIZE_4BPP, TAG_PARTY_SUMMARY_BALL_PLAYER_TILE}, + {gBattleInterface_Gfx + B_INTERFACE_GFX_BALL_PARTY_SUMMARY, 4 * TILE_SIZE_4BPP, TAG_PARTY_SUMMARY_BALL_OPPONENT_TILE} }; -static const struct OamData gUnknown_82604AC = { +// Unused +static const struct OamData sOamData_Healthbox2 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -static const struct OamData gUnknown_82604B4 = { +static const struct OamData sOamData_PartySummaryBall = { .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .priority = 1 }; -static const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { +static const struct SpriteTemplate sPartySummaryBarSpriteTemplates[] = { { - .tileTag = 55052, - .paletteTag = 55056, - .oam = &gOamData_8260270, + .tileTag = TAG_PARTY_SUMMARY_BAR_PLAYER_TILE, + .paletteTag = TAG_PARTY_SUMMARY_BAR_PLAYER_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBar + .callback = SpriteCB_PartySummaryBar }, { - .tileTag = 55053, - .paletteTag = 55057, - .oam = &gOamData_8260270, + .tileTag = TAG_PARTY_SUMMARY_BAR_OPPONENT_TILE, + .paletteTag = TAG_PARTY_SUMMARY_BAR_OPPONENT_PAL, + .oam = &sOamData_Healthbox, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBar + .callback = SpriteCB_PartySummaryBar } }; -static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { +static const struct SpriteTemplate sPartySummaryBallSpriteTemplates[] = { { - .tileTag = 55060, - .paletteTag = 55058, - .oam = &gUnknown_82604B4, + .tileTag = TAG_PARTY_SUMMARY_BALL_PLAYER_TILE, + .paletteTag = TAG_PARTY_SUMMARY_BALL_PLAYER_PAL, + .oam = &sOamData_PartySummaryBall, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBallsOnBattleStart + .callback = SpriteCB_PartySummaryBall_OnBattleStart }, { - .tileTag = 55061, - .paletteTag = 55059, - .oam = &gUnknown_82604B4, + .tileTag = TAG_PARTY_SUMMARY_BALL_OPPONENT_TILE, + .paletteTag = TAG_PARTY_SUMMARY_BALL_OPPONENT_PAL, + .oam = &sOamData_PartySummaryBall, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBallsOnBattleStart + .callback = SpriteCB_PartySummaryBall_OnBattleStart } }; -static void sub_8047B0C(s16 number, u16 *dest, bool8 unk) +static void Debug_DrawNumber(s16 number, u16 *dest, bool8 singleRow) { s8 i, j; u8 buff[4]; for (i = 0; i < 4; i++) - { buff[i] = 0; - } for (i = 3; ; i--) { @@ -428,35 +450,35 @@ static void sub_8047B0C(s16 number, u16 *dest, bool8 unk) } else { - for (; i > -1; i--) + while (i > -1) { buff[i] = 0xFF; + i--; } + if (buff[3] == 0xFF) buff[3] = 0; break; } } - - - if (!unk) + if (!singleRow) { for (i = 0, j = 0; i < 4; i++) { if (buff[j] == 0xFF) { dest[j + 0x00] &= 0xFC00; - dest[j + 0x00] |= 0x1E; + dest[j + 0x00] |= 30; dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x1E; + dest[i + 0x20] |= 30; } else { dest[j + 0x00] &= 0xFC00; - dest[j + 0x00] |= 0x14 + buff[j]; + dest[j + 0x00] |= 20 + buff[j]; dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x34 + buff[i]; + dest[i + 0x20] |= 20 + buff[i] + 1 * TILE_SIZE_4BPP; } j++; } @@ -468,174 +490,181 @@ static void sub_8047B0C(s16 number, u16 *dest, bool8 unk) if (buff[i] == 0xFF) { dest[i + 0x00] &= 0xFC00; - dest[i + 0x00] |= 0x1E; + dest[i + 0x00] |= 30; dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x1E; + dest[i + 0x20] |= 30; } else { dest[i + 0x00] &= 0xFC00; - dest[i + 0x00] |= 0x14 + buff[i]; + dest[i + 0x00] |= 20 + buff[i]; dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x34 + buff[i]; + dest[i + 0x20] |= 20 + buff[i] + 1 * TILE_SIZE_4BPP; } } } } -static void sub_8047CAC(s16 num1, s16 num2, u16 *dest) +// Unused +static void Debug_DrawNumberPair(s16 num1, s16 num2, u16 *dest) { - dest[4] = 0x1E; - sub_8047B0C(num2, &dest[0], FALSE); - sub_8047B0C(num1, &dest[5], TRUE); + dest[4] = 30; + Debug_DrawNumber(num2, &dest[0], FALSE); + Debug_DrawNumber(num1, &dest[5], TRUE); } -// Because the healthbox is too large to fit into one sprite, it is divided into two sprites. -// healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. -// healthboxRight or healthboxOther is the right part of the healthbox. -// There's also the third sprite under name of healthbarSprite that refers to the healthbar visible on the healtbox. +// Because the healthbox is too large to fit into one sprite, it is divided +// into two sprites. The left sprite is used as the 'main' healthbox sprite, +// while the right sprite is the 'other' healthbox sprite. +// There is also a third sprite for the healthbar, visible on the healthbox. -// data fields for healthboxMain -// oam.affineParam holds healthboxRight spriteId -#define hMain_HealthBarSpriteId data[5] -#define hMain_Battler data[6] -#define hMain_Data7 data[7] +// sprite data for main (left) healthbox sprite +#define sHealthboxOtherSpriteId oam.affineParam +#define sHealthBarSpriteId data[5] +#define sBattlerId data[6] -// data fields for healthboxRight -#define hOther_HealthBoxSpriteId data[5] +// sprite data for other (right) healthbox sprite +#define sHealthboxSpriteId data[5] -// data fields for healthbar -#define hBar_HealthBoxSpriteId data[5] -#define hBar_Data6 data[6] +// sprite data for healthbar sprite +#define sHealthboxSpriteId data[5] +#define sHealthbarType data[6] -u8 CreateBattlerHealthboxSprites(u8 a) +enum { - s16 data6 = 0; - u8 healthboxLeftSpriteId; - u8 healthboxRightSpriteId; + HEALTHBAR_TYPE_PLAYER_SINGLE, + HEALTHBAR_TYPE_PLAYER_DOUBLE, + HEALTHBAR_TYPE_OPPONENT, +}; + +u8 CreateBattlerHealthboxSprites(u8 battlerId) +{ + s16 healthbarType = HEALTHBAR_TYPE_PLAYER_SINGLE; + u8 healthboxSpriteId; + u8 healthboxOtherSpriteId; u8 healthbarSpriteId; - struct Sprite *sprite; + struct Sprite *healthbarSprite; if (!IsDoubleBattle()) { - if (GetBattlerSide(a) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { - healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); - healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + healthboxSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[B_POSITION_PLAYER_LEFT / 2], 240, 160, 1); + healthboxOtherSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[B_POSITION_PLAYER_LEFT / 2], 240, 160, 1); - gSprites[healthboxLeftSpriteId].oam.shape = SPRITE_SHAPE(64x64); - gSprites[healthboxRightSpriteId].oam.shape = SPRITE_SHAPE(64x64); - gSprites[healthboxRightSpriteId].oam.tileNum += 64; + gSprites[healthboxSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxOtherSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxOtherSpriteId].oam.tileNum += 2 * TILE_SIZE_4BPP; } else { - healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1); - healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1); + healthboxSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[B_POSITION_OPPONENT_LEFT / 2], 240, 160, 1); + healthboxOtherSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[B_POSITION_OPPONENT_LEFT / 2], 240, 160, 1); - gSprites[healthboxRightSpriteId].oam.tileNum += 32; - data6 = 2; + gSprites[healthboxOtherSpriteId].oam.tileNum += 1 * TILE_SIZE_4BPP; + healthbarType = HEALTHBAR_TYPE_OPPONENT; } - gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; - gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; - gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + gSprites[healthboxSpriteId].sHealthboxOtherSpriteId = healthboxOtherSpriteId; + gSprites[healthboxOtherSpriteId].sHealthboxSpriteId = healthboxSpriteId; + gSprites[healthboxOtherSpriteId].callback = SpriteCB_HealthBoxOther; } else { - if (GetBattlerSide(a) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { - healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); - healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + healthboxSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1); + healthboxOtherSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1); - gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; - gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; - gSprites[healthboxRightSpriteId].oam.tileNum += 32; - gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; - data6 = 1; + gSprites[healthboxSpriteId].sHealthboxOtherSpriteId = healthboxOtherSpriteId; + gSprites[healthboxOtherSpriteId].sHealthboxSpriteId = healthboxSpriteId; + gSprites[healthboxOtherSpriteId].oam.tileNum += 1 * TILE_SIZE_4BPP; + gSprites[healthboxOtherSpriteId].callback = SpriteCB_HealthBoxOther; + healthbarType = HEALTHBAR_TYPE_PLAYER_DOUBLE; } else { - healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); - healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + healthboxSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1); + healthboxOtherSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1); - gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; - gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; - gSprites[healthboxRightSpriteId].oam.tileNum += 32; - gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; - data6 = 2; + gSprites[healthboxSpriteId].sHealthboxOtherSpriteId = healthboxOtherSpriteId; + gSprites[healthboxOtherSpriteId].sHealthboxSpriteId = healthboxSpriteId; + gSprites[healthboxOtherSpriteId].oam.tileNum += 1 * TILE_SIZE_4BPP; + gSprites[healthboxOtherSpriteId].callback = SpriteCB_HealthBoxOther; + healthbarType = HEALTHBAR_TYPE_OPPONENT; } } - healthbarSpriteId = CreateSpriteAtEnd(&gUnknown_82602F8[gBattlerPositions[a]], 140, 60, 0); - sprite = &gSprites[healthbarSpriteId]; - SetSubspriteTables(sprite, &gUnknown_82603C4[GetBattlerSide(a)]); - sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; - sprite->oam.priority = 1; - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); + healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0); + healthbarSprite = &gSprites[healthbarSpriteId]; + SetSubspriteTables(healthbarSprite, &sHealthBar_SubspriteTable[GetBattlerSide(battlerId)]); + healthbarSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + healthbarSprite->oam.priority = 1; + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_HP_BAR_HP_TEXT), OBJ_VRAM0 + healthbarSprite->oam.tileNum * TILE_SIZE_4BPP, 2 * TILE_SIZE_4BPP); - gSprites[healthboxLeftSpriteId].hBar_HealthBoxSpriteId = healthbarSpriteId; - gSprites[healthboxLeftSpriteId].hBar_Data6 = a; - gSprites[healthboxLeftSpriteId].invisible = TRUE; - gSprites[healthboxRightSpriteId].invisible = TRUE; - sprite->data[5] = healthboxLeftSpriteId; - sprite->data[6] = data6; - sprite->invisible = TRUE; + gSprites[healthboxSpriteId].sHealthBarSpriteId = healthbarSpriteId; + gSprites[healthboxSpriteId].sBattlerId = battlerId; + gSprites[healthboxSpriteId].invisible = TRUE; + gSprites[healthboxOtherSpriteId].invisible = TRUE; + healthbarSprite->sHealthboxSpriteId = healthboxSpriteId; + healthbarSprite->sHealthbarType = healthbarType; + healthbarSprite->invisible = TRUE; - return healthboxLeftSpriteId; + return healthboxSpriteId; } u8 CreateSafariPlayerHealthboxSprites(void) { - u8 healthboxLeftSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1); - u8 healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1); + u8 healthboxSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1); + u8 healthboxOtherSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1); - gSprites[healthboxLeftSpriteId].oam.shape = SPRITE_SHAPE(64x64); - gSprites[healthboxRightSpriteId].oam.shape = SPRITE_SHAPE(64x64); - gSprites[healthboxRightSpriteId].oam.tileNum += 0x40; - gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; - gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; - gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; - return healthboxLeftSpriteId; + gSprites[healthboxSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxOtherSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxOtherSpriteId].oam.tileNum += 2 * TILE_SIZE_4BPP; + gSprites[healthboxSpriteId].sHealthboxOtherSpriteId = healthboxOtherSpriteId; + gSprites[healthboxOtherSpriteId].sHealthboxSpriteId = healthboxSpriteId; + gSprites[healthboxOtherSpriteId].callback = SpriteCB_HealthBoxOther; + return healthboxSpriteId; } -static const u8 *GetHealthboxElementGfxPtr(u8 elementId) +static const u8 *GetBattleInterfaceGfxPtr(u8 elementId) { - return gHealthboxElementsGfxTable[elementId]; + return gBattleInterface_Gfx[elementId]; } // Syncs the position of healthbar accordingly with the healthbox. static void SpriteCB_HealthBar(struct Sprite *sprite) { - u8 r5 = sprite->data[5]; + u8 healthboxSpriteId = sprite->sHealthboxSpriteId; - switch (sprite->data[6]) + switch (sprite->sHealthbarType) { - case 0: - sprite->x = gSprites[r5].x + 16; - sprite->y = gSprites[r5].y; + case HEALTHBAR_TYPE_PLAYER_SINGLE: + sprite->x = gSprites[healthboxSpriteId].x + 16; + sprite->y = gSprites[healthboxSpriteId].y; break; - case 1: - sprite->x = gSprites[r5].x + 16; - sprite->y = gSprites[r5].y; + case HEALTHBAR_TYPE_PLAYER_DOUBLE: + sprite->x = gSprites[healthboxSpriteId].x + 16; + sprite->y = gSprites[healthboxSpriteId].y; break; default: - case 2: - sprite->x = gSprites[r5].x + 8; - sprite->y = gSprites[r5].y; + case HEALTHBAR_TYPE_OPPONENT: + sprite->x = gSprites[healthboxSpriteId].x + 8; + sprite->y = gSprites[healthboxSpriteId].y; break; } - sprite->x2 = gSprites[r5].x2; - sprite->y2 = gSprites[r5].y2; + sprite->x2 = gSprites[healthboxSpriteId].x2; + sprite->y2 = gSprites[healthboxSpriteId].y2; } static void SpriteCB_HealthBoxOther(struct Sprite *sprite) { - u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; + u8 healthboxSpriteId = sprite->sHealthboxSpriteId; - sprite->x = gSprites[healthboxMainSpriteId].x + 64; - sprite->y = gSprites[healthboxMainSpriteId].y; + sprite->x = gSprites[healthboxSpriteId].x + 64; + sprite->y = gSprites[healthboxSpriteId].y; - sprite->x2 = gSprites[healthboxMainSpriteId].x2; - sprite->y2 = gSprites[healthboxMainSpriteId].y2; + sprite->x2 = gSprites[healthboxSpriteId].x2; + sprite->y2 = gSprites[healthboxSpriteId].y2; } void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue) @@ -650,15 +679,15 @@ void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldV void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) { gSprites[healthboxSpriteId].invisible = TRUE; - gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; - gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; + gSprites[gSprites[healthboxSpriteId].sHealthBarSpriteId].invisible = TRUE; + gSprites[gSprites[healthboxSpriteId].sHealthboxOtherSpriteId].invisible = TRUE; } void SetHealthboxSpriteVisible(u8 healthboxSpriteId) { gSprites[healthboxSpriteId].invisible = FALSE; - gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; - gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; + gSprites[gSprites[healthboxSpriteId].sHealthBarSpriteId].invisible = FALSE; + gSprites[gSprites[healthboxSpriteId].sHealthboxOtherSpriteId].invisible = FALSE; } static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) @@ -669,14 +698,13 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) void DestoryHealthboxSprite(u8 healthboxSpriteId) { - DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); - DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); + DestroySprite(&gSprites[gSprites[healthboxSpriteId].sHealthboxOtherSpriteId]); + DestroySprite(&gSprites[gSprites[healthboxSpriteId].sHealthBarSpriteId]); DestroySprite(&gSprites[healthboxSpriteId]); } void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerOnly) { - } void UpdateOamPriorityInAllHealthboxes(u8 priority) @@ -685,12 +713,12 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority) for (i = 0; i < gBattlersCount; i++) { - u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i]; - u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam; - u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + u8 healthboxSpriteId = gHealthboxSpriteIds[i]; + u8 healthboxOtherSpriteId = gSprites[gHealthboxSpriteIds[i]].sHealthboxOtherSpriteId; + u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].sHealthBarSpriteId; - gSprites[healthboxLeftSpriteId].oam.priority = priority; - gSprites[healthboxRightSpriteId].oam.priority = priority; + gSprites[healthboxSpriteId].oam.priority = priority; + gSprites[healthboxOtherSpriteId].oam.priority = priority; gSprites[healthbarSpriteId].oam.priority = priority; } } @@ -742,7 +770,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; - if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + if (GetBattlerSide(gSprites[healthboxSpriteId].sBattlerId) == B_SIDE_PLAYER) { objVram = (void *)(OBJ_VRAM0); if (!IsDoubleBattle()) @@ -763,22 +791,22 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { u32 windowId, spriteTileNum; u8 *windowTileData; - u8 *strptr; - void *objVram; - if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle()) + if (GetBattlerSide(gSprites[healthboxSpriteId].sBattlerId) == B_SIDE_PLAYER && !IsDoubleBattle()) { + // Only in the Japanese release can HP be displayed as text outside of double battles u8 text[8]; if (maxOrCurrent != HP_CURRENT) // singles, max { ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum; - TextIntoHealthboxObject( (void *)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0xA40, windowTileData, 2); + TextIntoHealthboxObject((void *)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0xA40, windowTileData, 2); RemoveWindowOnHealthbox(windowId); } else // singles, current { + u8 *strptr; strptr = ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); *strptr++ = CHAR_SLASH; *strptr++ = EOS; @@ -794,17 +822,16 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) u8 battler; u8 text[20] = __("{COLOR 01}{HIGHLIGHT 02}"); - battler = gSprites[healthboxSpriteId].hMain_Battler; + battler = gSprites[healthboxSpriteId].sBattlerId; if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT) - { UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, value, maxOrCurrent); - } else { + // Only in the Japanese release can HP be displayed as text outside of double battles u32 var; u8 i; - if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + if (GetBattlerSide(gSprites[healthboxSpriteId].sBattlerId) == B_SIDE_PLAYER) { if (maxOrCurrent == HP_CURRENT) var = 29; @@ -826,39 +853,39 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32], (void *)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)), - 0x20); + 1 * TILE_SIZE_4BPP); } } } } -static const u8 gUnknown_8260540[] = _("/"); +static const u8 sText_Slash[] = _("/"); static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { u32 windowId, spriteTileNum; u8 *windowTileData; - void *objVram; u8 battlerId; u8 text[20] = __("{COLOR 01}{HIGHLIGHT 00}"); - battlerId = gSprites[healthboxSpriteId].hMain_Battler; + battlerId = gSprites[healthboxSpriteId].sBattlerId; - if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible + if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) { u8 var = 4; - u8 r7; + u8 healthBarSpriteId; u8 *txtPtr; u8 i; if (maxOrCurrent == HP_CURRENT) var = 0; - r7 = gSprites[healthboxSpriteId].data[5]; + healthBarSpriteId = gSprites[healthboxSpriteId].sHealthBarSpriteId; txtPtr = ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - if (!maxOrCurrent) - StringCopy(txtPtr, gUnknown_8260540); + if (maxOrCurrent == HP_CURRENT) + StringCopy(txtPtr, sText_Slash); + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); for (i = var; i < var + 3; i++) @@ -866,31 +893,33 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 if (i < 3) { CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], - (void *)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)), - 0x20); + (void *)((OBJ_VRAM0) + (1 + gSprites[healthBarSpriteId].oam.tileNum + i) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); } else { CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], - (void *)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)), - 0x20); + (void *)((OBJ_VRAM0 + 0x20) + (i + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); } } if (maxOrCurrent == HP_CURRENT) { CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224], - (void *)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)), - 0x20); - CpuFill32(0, (void *)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20); + (void *)((OBJ_VRAM0) + ((gSprites[healthBarSpriteId].oam.tileNum + 4) * TILE_SIZE_4BPP)), + 1 * TILE_SIZE_4BPP); + CpuFill32(0, + (void *)((OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP)), + 1 * TILE_SIZE_4BPP); } else { - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side. + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116), + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_TEXT), (void *)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP), - 0x20); + 1 * TILE_SIZE_4BPP); } } } @@ -904,7 +933,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) u8 *barFontGfx; u8 i, var, nature, healthBarSpriteId; - barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)]; + barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].sBattlerId) * 384)]; var = 5; nature = GetNature(mon); StringCopy(text + 6, gNatureNamePointers[nature]); @@ -915,13 +944,13 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) u8 elementId; if ((text[j] >= 55 && text[j] <= 74) || (text[j] >= 135 && text[j] <= 154)) - elementId = HEALTHBOX_GFX_44; + elementId = B_INTERFACE_GFX_SAFARI_HEALTHBOX_1; else if ((text[j] >= 75 && text[j] <= 79) || (text[j] >= 155 && text[j] <= 159)) - elementId = HEALTHBOX_GFX_45; + elementId = B_INTERFACE_GFX_SAFARI_HEALTHBOX_2; else - elementId = HEALTHBOX_GFX_43; + elementId = B_INTERFACE_GFX_SAFARI_HEALTHBOX_0; - CpuCopy32(GetHealthboxElementGfxPtr(elementId), barFontGfx + (i * 64), 0x20); + CpuCopy32(GetBattleInterfaceGfxPtr(elementId), barFontGfx + (i * 64), 0x20); } for (j = 1; j < var + 1; j++) @@ -935,7 +964,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) barFontGfx += 0x20; } - healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + healthBarSpriteId = gSprites[healthboxSpriteId].sHealthBarSpriteId; ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); text[5] = CHAR_SPACE; @@ -984,9 +1013,9 @@ void SwapHpBarsWithHpText(void) if (noBars == TRUE) // bars to text { - healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].sHealthBarSpriteId; - CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100); + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 8 * TILE_SIZE_4BPP); UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); } @@ -994,7 +1023,9 @@ void SwapHpBarsWithHpText(void) { UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_117), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_BAR), + (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); } } else @@ -1008,9 +1039,9 @@ void SwapHpBarsWithHpText(void) } else { - healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].sHealthBarSpriteId; - CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100); + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 8 * TILE_SIZE_4BPP); UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); } @@ -1023,7 +1054,7 @@ void SwapHpBarsWithHpText(void) UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], HEALTHBOX_NICK); } } - gSprites[gHealthboxSpriteIds[i]].hMain_Data7 ^= 1; + gSprites[gHealthboxSpriteIds[i]].data[7] ^= 1; } } } @@ -1032,13 +1063,25 @@ void SwapHpBarsWithHpText(void) #define tSummaryBarSpriteId data[1] #define tBallIconSpriteId(n) data[3 + n] #define tIsBattleStart data[10] -#define tData15 data[15] +#define tTimer data[11] +#define tBlendWeight data[15] + +// sprite data for party summary bar +#define sEnterSpeed data[0] +#define sExitSpeed data[1] + +// sprite data for party summary ball icon +#define sSummaryBarSpriteId data[0] +#define sTimer data[1] +#define sIsOpponent data[2] +#define sSpeed data[3] +#define sIsEmptyBall data[7] u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bool8 isSwitchingMons, bool8 isBattleStart) { bool8 isOpponent; s8 nValidMons; - s16 bar_X, bar_Y, bar_pos2_X, bar_data0; + s16 x, y, x2, speed; s32 i; u8 summaryBarSpriteId; u8 ballIconSpritesIds[PARTY_SIZE]; @@ -1049,46 +1092,46 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { isOpponent = FALSE; - bar_X = 136, bar_Y = 96; - bar_pos2_X = 100; - bar_data0 = -5; + x = 136, y = 96; + x2 = 100; + speed = -5; } else { isOpponent = TRUE; if (!isSwitchingMons || !IsDoubleBattle()) - bar_X = 104, bar_Y = 40; + x = 104, y = 40; else - bar_X = 104, bar_Y = 16; + x = 104, y = 16; - bar_pos2_X = -100; - bar_data0 = 5; + x2 = -100; + speed = 5; } } else { isOpponent = TRUE; - bar_X = 104, bar_Y = 40; - bar_pos2_X = -100; - bar_data0 = 5; + x = 104, y = 40; + x2 = -100; + speed = 5; } for (i = 0, nValidMons = 0; i < PARTY_SIZE; i++) { - if (partyInfo[i].hp != 0xFFFF) + if (partyInfo[i].hp != HP_EMPTY_SLOT) nValidMons++; } - LoadCompressedSpriteSheetUsingHeap(&sStatusSummaryBarSpriteSheets[isOpponent]); - LoadSpriteSheet(&sStatusSummaryBallsSpriteSheets[isOpponent]); - LoadSpritePalette(&sStatusSummaryBarSpritePals[isOpponent]); - LoadSpritePalette(&sStatusSummaryBallsSpritePals[isOpponent]); + LoadCompressedSpriteSheetUsingHeap(&sPartySummaryBarSpriteSheets[isOpponent]); + LoadSpriteSheet(&sPartySummaryBallSpriteSheets[isOpponent]); + LoadSpritePalette(&sPartySummaryBarSpritePals[isOpponent]); + LoadSpritePalette(&sPartySummaryBallSpritePals[isOpponent]); - summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10); - SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable); - gSprites[summaryBarSpriteId].x2 = bar_pos2_X; - gSprites[summaryBarSpriteId].data[0] = bar_data0; + summaryBarSpriteId = CreateSprite(&sPartySummaryBarSpriteTemplates[isOpponent], x, y, 10); + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Enter); + gSprites[summaryBarSpriteId].x2 = x2; + gSprites[summaryBarSpriteId].sEnterSpeed = speed; if (isOpponent) { @@ -1096,16 +1139,14 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, gSprites[summaryBarSpriteId].oam.matrixNum = ST_OAM_HFLIP; } else - { gSprites[summaryBarSpriteId].x += 96; - } for (i = 0; i < PARTY_SIZE; i++) { - ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9); + ballIconSpritesIds[i] = CreateSpriteAtEnd(&sPartySummaryBallSpriteTemplates[isOpponent], x, y - 4, 9); if (!isBattleStart) - gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBallsOnSwitchout; + gSprites[ballIconSpritesIds[i]].callback = SpriteCB_PartySummaryBall_OnSwitchout; if (!isOpponent) { @@ -1113,22 +1154,22 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, gSprites[ballIconSpritesIds[i]].y2 = 0; } - gSprites[ballIconSpritesIds[i]].data[0] = summaryBarSpriteId; + gSprites[ballIconSpritesIds[i]].sSummaryBarSpriteId = summaryBarSpriteId; if (!isOpponent) { gSprites[ballIconSpritesIds[i]].x += 10 * i + 24; - gSprites[ballIconSpritesIds[i]].data[1] = i * 7 + 10; + gSprites[ballIconSpritesIds[i]].sTimer = i * 7 + 10; gSprites[ballIconSpritesIds[i]].x2 = 120; } else { gSprites[ballIconSpritesIds[i]].x -= 10 * (5 - i) + 24; - gSprites[ballIconSpritesIds[i]].data[1] = (6 - i) * 7 + 10; + gSprites[ballIconSpritesIds[i]].sTimer = (6 - i) * 7 + 10; gSprites[ballIconSpritesIds[i]].x2 = -120; } - gSprites[ballIconSpritesIds[i]].data[2] = isOpponent; + gSprites[ballIconSpritesIds[i]].sIsOpponent = isOpponent; } if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) @@ -1139,37 +1180,25 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { if (partyInfo[i].hp == HP_EMPTY_SLOT) { - // empty slot or an egg gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; - gSprites[ballIconSpritesIds[i]].data[7] = 1; + gSprites[ballIconSpritesIds[i]].sIsEmptyBall = TRUE; } - else if (partyInfo[i].hp == 0) // fainted mon - { + else if (partyInfo[i].hp == 0) gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; - } - else if (partyInfo[i].status != 0) // mon with major status - { + else if (partyInfo[i].status != STATUS1_NONE) gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; - } } else { if (i >= nValidMons) { - // empty slot or an egg gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; - gSprites[ballIconSpritesIds[i]].data[7] = 1; + gSprites[ballIconSpritesIds[i]].sIsEmptyBall = TRUE; } else if (partyInfo[i].hp == 0) - { - // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; - } - else if (partyInfo[i].status != 0) - { - // mon with major status + else if (partyInfo[i].status != STATUS1_NONE) gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; - } } } } @@ -1181,34 +1210,25 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { if (partyInfo[i].hp == HP_EMPTY_SLOT) { - // empty slot or an egg gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; - gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; + gSprites[ballIconSpritesIds[5 - i]].sIsEmptyBall = TRUE; } else if (partyInfo[i].hp == 0) - { - // fainted mon gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3; - } - else if (partyInfo[i].status != 0) - { - // mon with major status + else if (partyInfo[i].status != STATUS1_NONE) gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 2; - } } else { ballIconSpritesIds[5 - i] += 0; - if (i >= nValidMons) // empty slot or an egg + if (i >= nValidMons) { gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; - gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; + gSprites[ballIconSpritesIds[5 - i]].sIsEmptyBall = TRUE; } - else if (partyInfo[i].hp == 0) // fainted mon - { + else if (partyInfo[i].hp == 0) gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3; - } - else if (partyInfo[i].status != 0) // mon with major status + else if (partyInfo[i].status != STATUS1_NONE) { do { @@ -1250,7 +1270,7 @@ void Task_HidePartyStatusSummary(u8 taskId) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); - gTasks[taskId].tData15 = 16; + gTasks[taskId].tBlendWeight = 16; for (i = 0; i < PARTY_SIZE; i++) gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND; @@ -1263,51 +1283,50 @@ void Task_HidePartyStatusSummary(u8 taskId) { if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) { - gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i; - gSprites[ballIconSpriteIds[5 - i]].data[3] = 0; + gSprites[ballIconSpriteIds[5 - i]].sTimer = 7 * i; + gSprites[ballIconSpriteIds[5 - i]].sSpeed = 0; gSprites[ballIconSpriteIds[5 - i]].data[4] = 0; - gSprites[ballIconSpriteIds[5 - i]].callback = sub_8049630; + gSprites[ballIconSpriteIds[5 - i]].callback = SpriteCB_PartySummaryBall_Exit; } else { - gSprites[ballIconSpriteIds[i]].data[1] = 7 * i; - gSprites[ballIconSpriteIds[i]].data[3] = 0; + gSprites[ballIconSpriteIds[i]].sTimer = 7 * i; + gSprites[ballIconSpriteIds[i]].sSpeed = 0; gSprites[ballIconSpriteIds[i]].data[4] = 0; - gSprites[ballIconSpriteIds[i]].callback = sub_8049630; + gSprites[ballIconSpriteIds[i]].callback = SpriteCB_PartySummaryBall_Exit; } } - gSprites[summaryBarSpriteId].data[0] /= 2; - gSprites[summaryBarSpriteId].data[1] = 0; - gSprites[summaryBarSpriteId].callback = sub_8049568; - SetSubspriteTables(&gSprites[summaryBarSpriteId], gUnknown_8260404); - gTasks[taskId].func = sub_8049388; + gSprites[summaryBarSpriteId].sEnterSpeed /= 2; + gSprites[summaryBarSpriteId].sExitSpeed = 0; + gSprites[summaryBarSpriteId].callback = SpriteCB_PartySummaryBar_Exit; + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Exit); + gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_1; } else - { - gTasks[taskId].func = sub_804948C; - } + gTasks[taskId].func = Task_HidePartyStatusSummary_DuringBattle; + } -static void sub_8049388(u8 taskId) +static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId) { - if ((gTasks[taskId].data[11]++ % 2) == 0) + if ((gTasks[taskId].tTimer++ % 2) == 0) { - if (--gTasks[taskId].tData15 < 0) + if (--gTasks[taskId].tBlendWeight < 0) return; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlendWeight, 16 - gTasks[taskId].tBlendWeight)); } - if (gTasks[taskId].tData15 == 0) - gTasks[taskId].func = sub_80493E4; + if (gTasks[taskId].tBlendWeight == 0) + gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_2; } -static void sub_80493E4(u8 taskId) +static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; u8 battlerId = gTasks[taskId].tBattler; - if (--gTasks[taskId].tData15 == -1) + if (--gTasks[taskId].tBlendWeight == -1) { u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; @@ -1320,7 +1339,7 @@ static void sub_80493E4(u8 taskId) for (i = 1; i < PARTY_SIZE; i++) DestroySprite(&gSprites[ballIconSpriteIds[i]]); } - else if (gTasks[taskId].tData15 == -3) + else if (gTasks[taskId].tBlendWeight == -3) { SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -1328,17 +1347,15 @@ static void sub_80493E4(u8 taskId) } } -static void sub_804948C(u8 taskId) +static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; u8 battlerId = gTasks[taskId].tBattler; - if (--gTasks[taskId].tData15 >= 0) - { - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); - } - else if (gTasks[taskId].tData15 == -1) + if (--gTasks[taskId].tBlendWeight >= 0) + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlendWeight, 16 - gTasks[taskId].tBlendWeight)); + else if (gTasks[taskId].tBlendWeight == -1) { u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; @@ -1351,7 +1368,7 @@ static void sub_804948C(u8 taskId) for (i = 1; i < PARTY_SIZE; i++) DestroySprite(&gSprites[ballIconSpriteIds[i]]); } - else if (gTasks[taskId].tData15 == -3) + else if (gTasks[taskId].tBlendWeight == -3) { SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -1363,61 +1380,57 @@ static void sub_804948C(u8 taskId) #undef tSummaryBarSpriteId #undef tBallIconSpriteId #undef tIsBattleStart -#undef tData15 +#undef tBlendWeight -static void SpriteCB_StatusSummaryBar(struct Sprite *sprite) +static void SpriteCB_PartySummaryBar(struct Sprite *sprite) { if (sprite->x2 != 0) - sprite->x2 += sprite->data[0]; + sprite->x2 += sprite->sEnterSpeed; } -static void sub_8049568(struct Sprite *sprite) +static void SpriteCB_PartySummaryBar_Exit(struct Sprite *sprite) { - sprite->data[1] += 32; - if (sprite->data[0] > 0) - sprite->x2 += sprite->data[1] >> 4; + sprite->sExitSpeed += 32; + if (sprite->sEnterSpeed > 0) + sprite->x2 += sprite->sExitSpeed >> 4; else - sprite->x2 -= sprite->data[1] >> 4; - sprite->data[1] &= 0xF; + sprite->x2 -= sprite->sExitSpeed >> 4; + sprite->sExitSpeed &= 0xF; } -static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) +static void SpriteCB_PartySummaryBall_OnBattleStart(struct Sprite *sprite) { - u8 var1; - u16 var2; - s8 pan; + bool8 isOpponent; + u16 speed; - if (sprite->data[1] > 0) + if (sprite->sTimer > 0) { - sprite->data[1]--; + sprite->sTimer--; return; } - var1 = sprite->data[2]; - var2 = sprite->data[3]; - var2 += 56; - sprite->data[3] = var2 & 0xFFF0; + isOpponent = sprite->sIsOpponent; + speed = sprite->sSpeed; + speed += 56; + sprite->sSpeed = speed & 0xFFF0; - if (var1 != 0) + if (isOpponent != FALSE) { - sprite->x2 += var2 >> 4; + sprite->x2 += speed / 16; if (sprite->x2 > 0) sprite->x2 = 0; } else { - sprite->x2 -= var2 >> 4; + sprite->x2 -= speed / 16; if (sprite->x2 < 0) sprite->x2 = 0; } if (sprite->x2 == 0) { - pan = SOUND_PAN_TARGET; - if (var1 != 0) - pan = SOUND_PAN_ATTACKER; - - if (sprite->data[7] != 0) + s8 pan = isOpponent ? SOUND_PAN_ATTACKER : SOUND_PAN_TARGET; + if (sprite->sIsEmptyBall != FALSE) PlaySE2WithPanning(SE_BALL_TRAY_EXIT, pan); else PlaySE1WithPanning(SE_BALL_TRAY_BALL, pan); @@ -1426,41 +1439,51 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) } } -static void sub_8049630(struct Sprite *sprite) +static void SpriteCB_PartySummaryBall_Exit(struct Sprite *sprite) { - u8 var1; - u16 var2; + bool8 isOpponent; + u16 speed; - if (sprite->data[1] > 0) + if (sprite->sTimer > 0) { - sprite->data[1]--; + sprite->sTimer--; return; } - var1 = sprite->data[2]; - var2 = sprite->data[3]; - var2 += 56; - sprite->data[3] = var2 & 0xFFF0; - if (var1 != 0) - sprite->x2 += var2 >> 4; + isOpponent = sprite->sIsOpponent; + speed = sprite->sSpeed; + speed += 56; + sprite->sSpeed = speed & 0xFFF0; + if (isOpponent != FALSE) + sprite->x2 += speed / 16; else - sprite->x2 -= var2 >> 4; - if (sprite->x2 + sprite->x > 248 - || sprite->x2 + sprite->x < -8) + sprite->x2 -= speed / 16; + + if (sprite->x2 + sprite->x > DISPLAY_WIDTH + 8 || sprite->x2 + sprite->x < -8) { sprite->invisible = TRUE; sprite->callback = SpriteCallbackDummy; } } -static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) +static void SpriteCB_PartySummaryBall_OnSwitchout(struct Sprite *sprite) { - u8 barSpriteId = sprite->data[0]; + u8 summaryBarSpriteId = sprite->sSummaryBarSpriteId; - sprite->x2 = gSprites[barSpriteId].x2; - sprite->y2 = gSprites[barSpriteId].y2; + sprite->x2 = gSprites[summaryBarSpriteId].x2; + sprite->y2 = gSprites[summaryBarSpriteId].y2; } -static const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); + +#undef sSummaryBarSpriteId +#undef sTimer +#undef sIsOpponent +#undef sSpeed +#undef sIsEmptyBall + +#undef sEnterSpeed +#undef sExitSpeed + +static const u8 sText_HealthboxNickname[] = _("{HIGHLIGHT 02}"); void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) { @@ -1471,7 +1494,7 @@ void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) u16 species; u8 gender; - ptr = StringCopy(gDisplayedStringBattle, gUnknown_8260556); + ptr = StringCopy(gDisplayedStringBattle, sText_HealthboxNickname); GetMonData(mon, MON_DATA_NICKNAME, nickname); StringGet_Nickname(nickname); ptr = StringCopy(ptr, nickname); @@ -1484,7 +1507,7 @@ void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && StringCompare(nickname, gSpeciesNames[species]) == 0) gender = 100; - if (CheckBattleTypeGhost(mon, gSprites[healthboxSpriteId].hMain_Battler)) + if (CheckBattleTypeGhost(mon, gSprites[healthboxSpriteId].sBattlerId)) gender = 100; // AddTextPrinterAndCreateWindowOnHealthbox's arguments are the same in all 3 cases. @@ -1512,7 +1535,7 @@ void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; - if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + if (GetBattlerSide(gSprites[healthboxSpriteId].sBattlerId) == B_SIDE_PLAYER) { TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6); ptr = (void *)(OBJ_VRAM0); @@ -1520,15 +1543,15 @@ void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) ptr += spriteTileNum + 0x800; else ptr += spriteTileNum + 0x400; + TextIntoHealthboxObject(ptr, windowTileData + 0xC0, 1); } else - { TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7); - } RemoveWindowOnHealthbox(windowId); } + void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) { u8 battlerId, healthBarSpriteId; @@ -1539,7 +1562,7 @@ void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) return; - battlerId = gSprites[healthboxSpriteId].hMain_Battler; + battlerId = gSprites[healthboxSpriteId].sBattlerId; if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) return; if (CheckBattleTypeGhost(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId)) @@ -1547,12 +1570,12 @@ void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT)) return; - healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + healthBarSpriteId = gSprites[healthboxSpriteId].sHealthBarSpriteId; if (noStatus) - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_BALL_CAUGHT), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 1 * TILE_SIZE_4BPP); else - CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 1 * TILE_SIZE_4BPP); } enum @@ -1581,8 +1604,8 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) s16 tileNumAdder; u8 statusPalId; - battlerId = gSprites[healthboxSpriteId].hMain_Battler; - healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + battlerId = gSprites[healthboxSpriteId].sBattlerId; + healthBarSpriteId = gSprites[healthboxSpriteId].sHealthBarSpriteId; if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); @@ -1599,38 +1622,42 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) if (status & STATUS1_SLEEP) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_SLP_BATTLER0, battlerId)); + statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_SLP_BATTLER0, battlerId)); statusPalId = PAL_STATUS_SLP; } else if (status & STATUS1_PSN_ANY) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PSN_BATTLER0, battlerId)); + statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_PSN_BATTLER0, battlerId)); statusPalId = PAL_STATUS_PSN; } else if (status & STATUS1_BURN) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_BRN_BATTLER0, battlerId)); + statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_BRN_BATTLER0, battlerId)); statusPalId = PAL_STATUS_BRN; } else if (status & STATUS1_FREEZE) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battlerId)); + statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_FRZ_BATTLER0, battlerId)); statusPalId = PAL_STATUS_FRZ; } else if (status & STATUS1_PARALYSIS) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battlerId)); + statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_PAR_BATTLER0, battlerId)); statusPalId = PAL_STATUS_PAR; } else { - statusGfxPtr = GetHealthboxElementGfxPtr(HEALTHBOX_GFX_39); + statusGfxPtr = GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_STATUS_NONE); for (i = 0; i < 3; i++) - CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32); + CpuCopy32(statusGfxPtr, + (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64); + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_HP_BAR_HP_TEXT), + (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), + 2 * TILE_SIZE_4BPP); TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE); return; @@ -1641,13 +1668,17 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void *)(OBJ_PLTT + pltAdder * 2), 2); - CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); + CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 3 * TILE_SIZE_4BPP); if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) { - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32); - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32); + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_TRANSPARENT), + (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_HP_BAR_LEFT_BORDER), + (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); } } TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE); @@ -1659,55 +1690,55 @@ static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) switch (statusElementId) { - case HEALTHBOX_GFX_STATUS_PSN_BATTLER0: + case B_INTERFACE_GFX_STATUS_PSN_BATTLER0: if (battlerId == 0) - ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER0; + ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER0; else if (battlerId == 1) - ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER1; + ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER1; else if (battlerId == 2) - ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER2; + ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER2; else - ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER3; + ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER3; break; - case HEALTHBOX_GFX_STATUS_PRZ_BATTLER0: + case B_INTERFACE_GFX_STATUS_PAR_BATTLER0: if (battlerId == 0) - ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER0; + ret = B_INTERFACE_GFX_STATUS_PAR_BATTLER0; else if (battlerId == 1) - ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER1; + ret = B_INTERFACE_GFX_STATUS_PAR_BATTLER1; else if (battlerId == 2) - ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER2; + ret = B_INTERFACE_GFX_STATUS_PAR_BATTLER2; else - ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER3; + ret = B_INTERFACE_GFX_STATUS_PAR_BATTLER3; break; - case HEALTHBOX_GFX_STATUS_SLP_BATTLER0: + case B_INTERFACE_GFX_STATUS_SLP_BATTLER0: if (battlerId == 0) - ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER0; + ret = B_INTERFACE_GFX_STATUS_SLP_BATTLER0; else if (battlerId == 1) - ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER1; + ret = B_INTERFACE_GFX_STATUS_SLP_BATTLER1; else if (battlerId == 2) - ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER2; + ret = B_INTERFACE_GFX_STATUS_SLP_BATTLER2; else - ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER3; + ret = B_INTERFACE_GFX_STATUS_SLP_BATTLER3; break; - case HEALTHBOX_GFX_STATUS_FRZ_BATTLER0: + case B_INTERFACE_GFX_STATUS_FRZ_BATTLER0: if (battlerId == 0) - ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER0; + ret = B_INTERFACE_GFX_STATUS_FRZ_BATTLER0; else if (battlerId == 1) - ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER1; + ret = B_INTERFACE_GFX_STATUS_FRZ_BATTLER1; else if (battlerId == 2) - ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER2; + ret = B_INTERFACE_GFX_STATUS_FRZ_BATTLER2; else - ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER3; + ret = B_INTERFACE_GFX_STATUS_FRZ_BATTLER3; break; - case HEALTHBOX_GFX_STATUS_BRN_BATTLER0: + case B_INTERFACE_GFX_STATUS_BRN_BATTLER0: if (battlerId == 0) - ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER0; + ret = B_INTERFACE_GFX_STATUS_BRN_BATTLER0; else if (battlerId == 1) - ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER1; + ret = B_INTERFACE_GFX_STATUS_BRN_BATTLER1; else if (battlerId == 2) - ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER2; + ret = B_INTERFACE_GFX_STATUS_BRN_BATTLER2; else - ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER3; + ret = B_INTERFACE_GFX_STATUS_BRN_BATTLER3; break; } return ret; @@ -1735,7 +1766,7 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) txtPtr = StringCopy(text, gText_HighlightRed_Left); ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2); - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, text, 0x2F), 3, &windowId); + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 47 - GetStringWidth(FONT_0, text, 0), 3, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2); SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4); @@ -1745,12 +1776,12 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId) { s32 maxHp, currHp; - u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + u8 battlerId = gSprites[healthboxSpriteId].sBattlerId; if (elementId == HEALTHBOX_ALL && !IsDoubleBattle()) GetBattlerSide(battlerId); // Pointless function call. - if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + if (GetBattlerSide(gSprites[healthboxSpriteId].sBattlerId) == B_SIDE_PLAYER) { u8 isDoubles; @@ -1814,35 +1845,41 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem } } -#define B_EXPBAR_PIXELS 64 -#define B_HEALTHBAR_PIXELS 48 +#define B_HEALTHBAR_NUM_PIXELS 48 +#define B_HEALTHBAR_NUM_TILES (B_HEALTHBAR_NUM_PIXELS / 8) +#define B_EXPBAR_NUM_PIXELS 64 +#define B_EXPBAR_NUM_TILES (B_EXPBAR_NUM_PIXELS / 8) s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) { s32 currentBarValue; - if (whichBar == HEALTH_BAR) // health bar + if (whichBar == HEALTH_BAR) { currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, gBattleSpritesDataPtr->battleBars[battlerId].oldValue, gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, &gBattleSpritesDataPtr->battleBars[battlerId].currValue, - B_HEALTHBAR_PIXELS / 8, 1); + B_HEALTHBAR_NUM_TILES, + 1); } else // exp bar { - u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].oldValue, - gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, - gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8); - if (expFraction == 0) - expFraction = 1; - expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction); + u16 increment = GetReceivedValueInPixels(gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + B_EXPBAR_NUM_TILES); + + if (increment == 0) + increment = 1; + increment = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / increment); currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, gBattleSpritesDataPtr->battleBars[battlerId].oldValue, gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, &gBattleSpritesDataPtr->battleBars[battlerId].currValue, - B_EXPBAR_PIXELS / 8, expFraction); + B_EXPBAR_NUM_TILES, + increment); } if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)) @@ -1856,36 +1893,39 @@ s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) { - u8 array[8]; - u8 filledPixelsCount, level; + u8 filledPixels[B_HEALTHBAR_NUM_TILES > B_EXPBAR_NUM_TILES ? B_HEALTHBAR_NUM_TILES : B_EXPBAR_NUM_TILES]; + u8 totalFilledPixels, level; u8 barElementId; u8 i; switch (whichBar) { case HEALTH_BAR: - filledPixelsCount = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + totalFilledPixels = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, gBattleSpritesDataPtr->battleBars[battlerId].oldValue, gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, &gBattleSpritesDataPtr->battleBars[battlerId].currValue, - array, B_HEALTHBAR_PIXELS / 8); + filledPixels, + B_HEALTHBAR_NUM_TILES); - if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp - barElementId = HEALTHBOX_GFX_HP_BAR_GREEN; - else if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp - barElementId = HEALTHBOX_GFX_HP_BAR_YELLOW; + if (totalFilledPixels > (B_HEALTHBAR_NUM_PIXELS * 50 / 100)) // more than 50 % hp + barElementId = B_INTERFACE_GFX_HP_BAR_GREEN; + else if (totalFilledPixels > (B_HEALTHBAR_NUM_PIXELS * 20 / 100)) // more than 20% hp + barElementId = B_INTERFACE_GFX_HP_BAR_YELLOW; else - barElementId = HEALTHBOX_GFX_HP_BAR_RED; // 20 % or less + barElementId = B_INTERFACE_GFX_HP_BAR_RED; // 20 % or less - for (i = 0; i < 6; i++) + for (i = 0; i < B_HEALTHBAR_NUM_TILES; i++) { - u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId; - if (i < 2) - CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, - (void *)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32); - else - CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, - (void *)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].sHealthBarSpriteId; + if (i < 2) // first 2 tiles are on left healthbar sprite + CpuCopy32(GetBattleInterfaceGfxPtr(barElementId) + filledPixels[i] * TILE_SIZE_4BPP, + (void *)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), // + 2 here is due to B_INTERFACE_GFX_HP_BAR_HP_TEXT + 1 * TILE_SIZE_4BPP); + else // remaining 4 tiles are on right healthbar sprite + CpuCopy32(GetBattleInterfaceGfxPtr(barElementId) + filledPixels[i] * TILE_SIZE_4BPP, + (void *)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); } break; case EXP_BAR: @@ -1893,33 +1933,37 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) gBattleSpritesDataPtr->battleBars[battlerId].oldValue, gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, &gBattleSpritesDataPtr->battleBars[battlerId].currValue, - array, B_EXPBAR_PIXELS / 8); + filledPixels, + B_EXPBAR_NUM_TILES); level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL); if (level == MAX_LEVEL) { - for (i = 0; i < 8; i++) - array[i] = 0; + for (i = 0; i < B_EXPBAR_NUM_TILES; i++) + filledPixels[i] = 0; } - for (i = 0; i < 8; i++) + for (i = 0; i < B_EXPBAR_NUM_TILES; i++) { - if (i < 4) - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, - (void *)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32); - else - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, - (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + if (i < 4) // first 4 tiles are on left healthbox sprite + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_EXP_BAR) + filledPixels[i] * TILE_SIZE_4BPP, + (void *)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 36 + i) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); + else // remaining 4 tiles are on right healthbox sprite + CpuCopy32(GetBattleInterfaceGfxPtr(B_INTERFACE_GFX_EXP_BAR) + filledPixels[i] * TILE_SIZE_4BPP, + (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), + 1 * TILE_SIZE_4BPP); } break; } } -static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 scale, u16 toAdd) + +static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 totalPixels, u16 increment) { s32 ret, newValue; - scale *= 8; + totalPixels *= 8; if (*currValue == -32768) // first function call { - if (maxValue < scale) + if (maxValue < totalPixels) *currValue = Q_24_8(oldValue); else *currValue = oldValue; @@ -1931,7 +1975,7 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c else if (newValue > maxValue) newValue = maxValue; - if (maxValue < scale) + if (maxValue < totalPixels) { if (newValue == Q_24_8_TO_INT(*currValue) && (*currValue & 0xFF) == 0) return -1; @@ -1942,13 +1986,13 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c return -1; } - if (maxValue < scale) // handle cases of max var having less pixels than the whole bar + if (maxValue < totalPixels) // handle cases of max var having less pixels than the whole bar { - s32 toAdd_ = Q_24_8(maxValue) / scale; + s32 incrementInQ = Q_24_8(maxValue) / totalPixels; if (receivedValue < 0) // fill bar right { - *currValue += toAdd_; + *currValue += incrementInQ; ret = Q_24_8_TO_INT(*currValue); if (ret >= newValue) { @@ -1958,7 +2002,7 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c } else // move bar left { - *currValue -= toAdd_; + *currValue -= incrementInQ; ret = Q_24_8_TO_INT(*currValue); // try round up if ((*currValue & 0xFF) > 0) @@ -1974,14 +2018,14 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c { if (receivedValue < 0) // fill bar right { - *currValue += toAdd; + *currValue += increment; if (*currValue > newValue) *currValue = newValue; ret = *currValue; } else // move bar left { - *currValue -= toAdd; + *currValue -= increment; if (*currValue < newValue) *currValue = newValue; ret = *currValue; @@ -1991,9 +2035,9 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c return ret; } -static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *filledPixels, u8 numTiles) { - u8 pixels, filledPixels, totalPixels; + u8 numPixelsToFill, totalFilledPixels, totalPixels; u8 i; s32 newValue = oldValue - receivedValue; @@ -2002,100 +2046,102 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 else if (newValue > maxValue) newValue = maxValue; - totalPixels = scale * 8; + totalPixels = numTiles * 8; - for (i = 0; i < scale; i++) - arg4[i] = 0; + for (i = 0; i < numTiles; i++) + filledPixels[i] = 0; if (maxValue < totalPixels) - pixels = (*currValue * totalPixels / maxValue) >> 8; + numPixelsToFill = Q_24_8_TO_INT(*currValue * totalPixels / maxValue); else - pixels = *currValue * totalPixels / maxValue; + numPixelsToFill = *currValue * totalPixels / maxValue; - filledPixels = pixels; + totalFilledPixels = numPixelsToFill; - if (filledPixels == 0 && newValue > 0) + if (numPixelsToFill == 0 && newValue > 0) { - arg4[0] = 1; - filledPixels = 1; + filledPixels[0] = 1; + totalFilledPixels = 1; } else { - for (i = 0; i < scale; i++) + for (i = 0; i < numTiles; i++) { - if (pixels >= 8) - { - arg4[i] = 8; - } + if (numPixelsToFill >= 8) // too many to fill into a single tile + filledPixels[i] = 8; else { - arg4[i] = pixels; + filledPixels[i] = numPixelsToFill; break; } - pixels -= 8; + numPixelsToFill -= 8; } } - return filledPixels; + return totalFilledPixels; } +// Unused // These functions seem as if they were made for testing the health bar. -static s16 sub_804A460(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +static s16 UpdateAndDrawHealthbarOntoScreen(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) { - s16 ret; + s16 hpVal; - ret = CalcNewBarValue(barInfo->maxValue, + hpVal = CalcNewBarValue(barInfo->maxValue, barInfo->oldValue, barInfo->receivedValue, - currValue, B_HEALTHBAR_PIXELS / 8, 1); + currValue, + B_HEALTHBAR_NUM_TILES, + 1); - sub_804A510(barInfo, currValue, bg, x, y); + DrawHealthbarOntoScreen(barInfo, currValue, bg, x, y); - return ret; + return hpVal; } -static s16 sub_804A4C8(struct TestingBar *barInfo, s32 *currValue) +// Unused +static s16 CalcNewHealthbarValue(struct TestingBar *barInfo, s32 *currValue) { - s16 ret; - - ret = CalcNewBarValue(barInfo->maxValue, + return CalcNewBarValue(barInfo->maxValue, barInfo->oldValue, barInfo->receivedValue, - currValue, B_HEALTHBAR_PIXELS / 8, 1); - - return ret; + currValue, + B_HEALTHBAR_NUM_TILES, + 1); } -static void sub_804A4F0(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +// Unused +static void DoDrawHealthbarOntoScreen(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) { - sub_804A510(barInfo, currValue, bg, x, y); + DrawHealthbarOntoScreen(barInfo, currValue, bg, x, y); } -static void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +// Unused +static void DrawHealthbarOntoScreen(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) { - u8 spC[B_HEALTHBAR_PIXELS / 8]; - u16 tiles[B_HEALTHBAR_PIXELS / 8]; + u8 filledPixels[B_HEALTHBAR_NUM_TILES]; + u16 tiles[B_HEALTHBAR_NUM_TILES]; u8 i; CalcBarFilledPixels(barInfo->maxValue, barInfo->oldValue, barInfo->receivedValue, - currValue, spC, B_HEALTHBAR_PIXELS / 8); + currValue, + filledPixels, + B_HEALTHBAR_NUM_TILES); - for (i = 0; i < B_HEALTHBAR_PIXELS / 8; i++) - { - tiles[i] = (barInfo->pal << 12) | (barInfo->tileOffset + spC[i]); - } + for (i = 0; i < ARRAY_COUNT(tiles); i++) + tiles[i] = (barInfo->pal << 12) | (barInfo->tileOffset + filledPixels[i]); CopyToBgTilemapBufferRect_ChangePalette(bg, tiles, x, y, 6, 1, 17); } -static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) +static u8 GetReceivedValueInPixels(s32 oldValue, s32 receivedValue, s32 maxValue, u8 totalPixels) { s32 newVal, result; s8 oldToMax, newToMax; - scale *= 8; + totalPixels *= 8; newVal = oldValue - receivedValue; if (newVal < 0) @@ -2103,8 +2149,8 @@ static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 else if (newVal > maxValue) newVal = maxValue; - oldToMax = oldValue * scale / maxValue; - newToMax = newVal * scale / maxValue; + oldToMax = oldValue * totalPixels / maxValue; + newToMax = newVal * totalPixels / maxValue; result = oldToMax - newToMax; return abs(result); @@ -2125,15 +2171,13 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp) u8 result; if (hp == maxhp) - { result = HP_BAR_FULL; - } else { - u8 fraction = GetScaledHPFraction(hp, maxhp, B_HEALTHBAR_PIXELS); - if (fraction > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp + u8 fraction = GetScaledHPFraction(hp, maxhp, B_HEALTHBAR_NUM_PIXELS); + if (fraction > (B_HEALTHBAR_NUM_PIXELS * 50 / 100)) result = HP_BAR_GREEN; - else if (fraction > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp + else if (fraction > (B_HEALTHBAR_NUM_PIXELS * 20 / 100)) result = HP_BAR_YELLOW; else if (fraction > 0) result = HP_BAR_RED; @@ -2151,10 +2195,9 @@ static const struct WindowTemplate sHealthboxWindowTemplate = { .width = 8, .height = 2, .paletteNum = 0, - .baseBlock = 0x000 + .baseBlock = 0 }; - static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId) { u16 winId; diff --git a/src/battle_main.c b/src/battle_main.c index 24615d154..9b66cd75c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1773,7 +1773,7 @@ void CB2_InitEndLinkBattle(void) gBattle_BG3_X = 0; gBattle_BG3_Y = 0; InitBattleBgsVideo(); - LoadCompressedPalette(gBattleTextboxPalette, 0, 64); + LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0, 64); LoadBattleMenuWindowGfx(); ResetSpriteData(); ResetTasks(); diff --git a/src/daycare.c b/src/daycare.c index d7d2a8caa..7284ea22f 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1816,9 +1816,9 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 2: - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); + DecompressAndLoadBgGfxUsingHeap(0, gBattleInterface_Textbox_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(0, gBattleInterface_Textbox_Tilemap, 0, 0); + LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0, 0x20); gMain.state++; break; case 3: diff --git a/src/graphics.c b/src/graphics.c index eb07dbecd..47dfaea23 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1,8 +1,8 @@ #include "global.h" -const u32 gBattleTextboxTiles[] = INCBIN_U32("graphics/battle_interface/window.4bpp.lz"); -const u32 gBattleTextboxPalette[] = INCBIN_U32("graphics/battle_interface/window.gbapal.lz"); -const u32 gBattleTextboxTilemap[] = INCBIN_U32("graphics/interface/menu_map.bin.lz"); +const u32 gBattleInterface_Textbox_Gfx[] = INCBIN_U32("graphics/battle_interface/textbox.4bpp.lz"); +const u32 gBattleInterface_Textbox_Pal[] = INCBIN_U32("graphics/battle_interface/textbox.gbapal.lz"); +const u32 gBattleInterface_Textbox_Tilemap[] = INCBIN_U32("graphics/battle_interface/textbox.bin.lz"); const u32 gMonFrontPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/front.4bpp.lz"); const u32 gMonBackPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/back.4bpp.lz"); @@ -348,33 +348,10 @@ const u32 gUnusedGfx_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.4bpp const u32 gUnusedPal_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.gbapal.lz"); const u32 gUnusedTilemap_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.bin.lz"); -// Battle Interface +const u16 gBattleInterface_Healthbox_Pal[] = INCBIN_U16("graphics/battle_interface/healthbox.gbapal"); +const u16 gBattleInterface_Healthbar_Pal[] = INCBIN_U16("graphics/battle_interface/healthbar.gbapal"); +const u8 gBattleInterface_Gfx[] = INCBIN_U8("graphics/battle_interface/healthbox_elements.4bpp"); -const u16 gBattleInterface_BallStatusBarPal[] = INCBIN_U16("graphics/battle_interface/ball_status_bar.gbapal"); - -const u16 gBattleInterface_BallDisplayPal[] = INCBIN_U16("graphics/battle_interface/ball_display.gbapal"); - -//Originally an array? -const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hp_bar.4bpp"); -const u8 gHealthboxElementsGfxTable_ExpBar[] = INCBIN_U8("graphics/battle_interface/exp_bar.4bpp"); -const u8 gHealthboxElementsGfxTable_StatusPsn[] = INCBIN_U8("graphics/battle_interface/status_psn.4bpp"); -const u8 gHealthboxElementsGfxTable_StatusPar[] = INCBIN_U8("graphics/battle_interface/status_par.4bpp"); -const u8 gHealthboxElementsGfxTable_StatusSlp[] = INCBIN_U8("graphics/battle_interface/status_slp.4bpp"); -const u8 gHealthboxElementsGfxTable_StatusFrz[] = INCBIN_U8("graphics/battle_interface/status_frz.4bpp"); -const u8 gHealthboxElementsGfxTable_StatusBrn[] = INCBIN_U8("graphics/battle_interface/status_brn.4bpp"); -const u8 gHealthboxElementsGfxTable_Misc[] = INCBIN_U8("graphics/battle_interface/misc.4bpp"); -const u8 gHealthboxElementsGfxTable_HpBarAnim[] = INCBIN_U8("graphics/battle_interface/hp_bar_anim.4bpp"); -const u8 gHealthboxElementsGfxTable_MiscFrameEnd[] = INCBIN_U8("graphics/battle_interface/misc_frame_end.4bpp"); - -const u8 gBattleInterface_SummaryBallDisplayGfx[] = INCBIN_U8("graphics/battle_interface/ball_display.4bpp"); - -//Originally an array? -const u8 gBattleInterface_UnusedSummaryBallDisplayGfx[] = INCBIN_U8("graphics/battle_interface/ball_display_unused_extra.4bpp"); -const u8 gBattleInterfaceGfx_Status2[] = INCBIN_U8("graphics/battle_interface/status2.4bpp"); // these three duplicate sets of graphics are for the opponent pokemon -const u8 gBattleInterfaceGfx_Status3[] = INCBIN_U8("graphics/battle_interface/status3.4bpp"); // and are also for use in double battles. they use dynamic palettes so -const u8 gBattleInterfaceGfx_Status4[] = INCBIN_U8("graphics/battle_interface/status4.4bpp"); // coloring them is an extreme headache and wont be done for now -const u8 gUnknown_8D12A44[] = INCBIN_U8("graphics/unknown/unknown_D12A44.4bpp"); -const u8 gUnknown_8D12A64[] = INCBIN_U8("graphics/unknown/unknown_D12A64.4bpp"); const u32 gBattleInterfaceGfx_UnusedWindow3[] = INCBIN_U32("graphics/battle_interface/unused_window3.4bpp.lz"); const u32 gBattleInterfaceGfx_UnusedWindow4[] = INCBIN_U32("graphics/battle_interface/unused_window4.4bpp.lz"); @@ -1023,7 +1000,7 @@ const u32 gBattleAnimBgPalette_MuddyWater[] = INCBIN_U32("graphics/battle_anims/ const u32 gEnemyMonShadow_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz"); -const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[] = INCBIN_U32("graphics/battle_interface/ball_status_bar.4bpp.lz"); +const u32 gBattleInterface_PartySummaryBar_Gfx[] = INCBIN_U32("graphics/battle_interface/party_summary_bar.4bpp.lz"); const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); diff --git a/src/trade_scene.c b/src/trade_scene.c index a946299b9..c02b28320 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -937,16 +937,16 @@ static void TradeAnimInit_LoadGfx(void) SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); DeactivateAllTextPrinters(); // Doing the graphics load... - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); + DecompressAndLoadBgGfxUsingHeap(0, gBattleInterface_Textbox_Gfx, 0, 0, 0); + LZDecompressWram(gBattleInterface_Textbox_Tilemap, gDecompressionBuffer); CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); + LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x000, 0x20); InitWindows(sTradeMessageWindowTemplates); // ... and doing the same load again - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); + DecompressAndLoadBgGfxUsingHeap(0, gBattleInterface_Textbox_Gfx, 0, 0, 0); + LZDecompressWram(gBattleInterface_Textbox_Tilemap, gDecompressionBuffer); CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); + LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x000, 0x20); } static void CB2_InitTradeAnim_InGameTrade(void) From a0f41da30d0da423d106967c879852d590dd1026 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 14 Nov 2022 11:33:17 -0500 Subject: [PATCH 19/42] Label missed symbol --- src/data/union_room.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/union_room.h b/src/data/union_room.h index 6c8254d1b..557a93297 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -467,4 +467,5 @@ static const u8 sLinkGroupToURoomActivity[] = { [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS }; -static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}"); +// Unused +static const u8 sDotSeparatedValues[] = _("{DYNAMIC 00}·{DYNAMIC 01}"); From 519443e214120994dc899c67c904b7cfc0114154 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 18 Nov 2022 14:26:03 -0500 Subject: [PATCH 20/42] Sync battle transitions --- data/field_effect_scripts.s | 4 +- include/battle_transition.h | 47 +- include/constants/field_effects.h | 1 + include/trainer_pokemon_sprites.h | 2 +- src/battle_main.c | 16 +- src/battle_setup.c | 66 +- src/battle_tower.c | 8 +- src/battle_transition.c | 3129 +++++++++++++++-------------- src/hall_of_fame.c | 2 +- src/pokedex_screen.c | 2 +- src/teachy_tv.c | 8 +- src/trainer_card.c | 2 +- src/trainer_pokemon_sprites.c | 2 +- src/trainer_tower.c | 4 +- 14 files changed, 1728 insertions(+), 1565 deletions(-) diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 0dc13e882..3245a5bef 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -252,8 +252,8 @@ gFldEffScript_UseDive:: end gFldEffScript_Pokeball:: - loadpal sSpritePalette_SlidingPokeball - callnative FldEff_Pokeball + loadpal gSpritePalette_Pokeball + callnative FldEff_PokeballTrail end gFldEffScript_XIcon:: diff --git a/include/battle_transition.h b/include/battle_transition.h index 4ef5f19d9..c0b99b600 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -13,29 +13,32 @@ enum MUGSHOTS_COUNT }; -#define B_TRANSITION_BLUR 0 -#define B_TRANSITION_DISTORTED_WAVE 1 -#define B_TRANSITION_HORIZONTAL_CORRUGATE 2 -#define B_TRANSITION_BIG_POKEBALL 3 -#define B_TRANSITION_SLIDING_POKEBALLS 4 -#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 -#define B_TRANSITION_FULLSCREEN_WAVE 6 -#define B_TRANSITION_BLACK_WAVE_TO_RIGHT 7 -#define B_TRANSITION_SLICED_SCREEN 8 -#define B_TRANSITION_WHITEFADE_IN_STRIPES 9 -#define B_TRANSITION_GRID_SQUARES 10 -#define B_TRANSITION_BLACK_DOODLES 11 -#define B_TRANSITION_LORELEI 12 -#define B_TRANSITION_BRUNO 13 -#define B_TRANSITION_AGATHA 14 -#define B_TRANSITION_LANCE 15 -#define B_TRANSITION_BLUE 16 -#define B_TRANSITION_ANTI_CLOCKWISE_SPIRAL 17 +enum { + B_TRANSITION_BLUR, + B_TRANSITION_SWIRL, + B_TRANSITION_SHUFFLE, + B_TRANSITION_BIG_POKEBALL, + B_TRANSITION_POKEBALLS_TRAIL, + B_TRANSITION_CLOCKWISE_WIPE, + B_TRANSITION_RIPPLE, + B_TRANSITION_WAVE, + B_TRANSITION_SLICE, + B_TRANSITION_WHITE_BARS_FADE, + B_TRANSITION_GRID_SQUARES, + B_TRANSITION_ANGLED_WIPES, + B_TRANSITION_LORELEI, + B_TRANSITION_BRUNO, + B_TRANSITION_AGATHA, + B_TRANSITION_LANCE, + B_TRANSITION_BLUE, + B_TRANSITION_SPIRAL, + B_TRANSITION_COUNT +}; -extern const struct SpritePalette sSpritePalette_SlidingPokeball; +extern const struct SpritePalette gSpritePalette_Pokeball; -bool8 BT_IsDone(void); -void BT_StartOnField(u8 transitionId); -bool8 FldEff_Pokeball(void); +bool8 IsBattleTransitionDone(void); +void BattleTransition_StartOnField(u8 transitionId); +bool8 FldEff_PokeballTrail(void); #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index edf393f98..0b2351017 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -74,6 +74,7 @@ #define FLDEFF_PAL_TAG_GENERAL_0 0x1004 #define FLDEFF_PAL_TAG_GENERAL_1 0x1005 +#define FLDEFF_PAL_TAG_POKEBALL_TRAIL 0x1009 #define FLDEFF_PAL_TAG_ASH 0x100D #define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index 412941005..4d9577ab8 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -8,7 +8,7 @@ bool16 ResetAllPicSprites(void); u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 FreeAndDestroyMonPicSprite(u16); u16 FreeAndDestroyTrainerPicSprite(u16); -u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass); +u16 PlayerGenderToFrontTrainerPicId(u8 gender, bool8 getClass); u16 CreateMonPicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 LoadMonPicInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId); u16 CreateMonPicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys); diff --git a/src/battle_main.c b/src/battle_main.c index 9b66cd75c..40a797e2a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -278,31 +278,27 @@ const struct OamData gOamData_BattlerPlayer = .affineParam = 0, }; -// not used -static const union AnimCmd gUnknown_824F020[] = +static const union AnimCmd sAnim_Unused[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_JUMP(0), }; -// not used -static const union AnimCmd *const gUnknown_824F028[] = +static const union AnimCmd *const sAnims_Unused[] = { - gUnknown_824F020, + sAnim_Unused, }; -// not used -static const union AffineAnimCmd gUnknown_824F02C[] = +static const union AffineAnimCmd sAffineAnim_Unused[] = { AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 4), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 0x3C), AFFINEANIMCMD_JUMP(1), }; -// not used -static const union AffineAnimCmd *const gUnknown_824F044[] = +static const union AffineAnimCmd *const sAffineAnims_Unused[] = { - gUnknown_824F02C, + sAffineAnim_Unused, }; static const s8 sPlayerThrowXTranslation[] = { -32, -16, -16, -32, -32, 0, 0, 0 }; diff --git a/src/battle_setup.c b/src/battle_setup.c index c056bba39..3a08e6610 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -33,6 +33,13 @@ #include "constants/pokemon.h" #include "constants/trainers.h" +enum { + TRANSITION_TYPE_NORMAL, + TRANSITION_TYPE_CAVE, + TRANSITION_TYPE_FLASH, + TRANSITION_TYPE_WATER, +}; + enum { TRAINER_PARAM_LOAD_VAL_8BIT, @@ -74,20 +81,22 @@ static EWRAM_DATA u8 *sTrainerBattleEndScript = NULL; static EWRAM_DATA u8 *sTrainerABattleScriptRetAddr = NULL; static EWRAM_DATA u16 sRivalBattleFlags = 0; +// The first transition is used if the enemy pokemon are lower level than our pokemon. +// Otherwise, the second transition is used. static const u8 sBattleTransitionTable_Wild[][2] = { - { B_TRANSITION_SLICED_SCREEN, B_TRANSITION_WHITEFADE_IN_STRIPES }, - { B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES }, - { B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES }, - { B_TRANSITION_BLACK_WAVE_TO_RIGHT, B_TRANSITION_FULLSCREEN_WAVE }, + [TRANSITION_TYPE_NORMAL] = {B_TRANSITION_SLICE, B_TRANSITION_WHITE_BARS_FADE}, + [TRANSITION_TYPE_CAVE] = {B_TRANSITION_CLOCKWISE_WIPE, B_TRANSITION_GRID_SQUARES}, + [TRANSITION_TYPE_FLASH] = {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, + [TRANSITION_TYPE_WATER] = {B_TRANSITION_WAVE, B_TRANSITION_RIPPLE}, }; static const u8 sBattleTransitionTable_Trainer[][2] = { - { B_TRANSITION_SLIDING_POKEBALLS, B_TRANSITION_BLACK_DOODLES }, - { B_TRANSITION_HORIZONTAL_CORRUGATE, B_TRANSITION_BIG_POKEBALL }, - { B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES }, - { B_TRANSITION_DISTORTED_WAVE, B_TRANSITION_FULLSCREEN_WAVE }, + [TRANSITION_TYPE_NORMAL] = {B_TRANSITION_POKEBALLS_TRAIL, B_TRANSITION_ANGLED_WIPES}, + [TRANSITION_TYPE_CAVE] = {B_TRANSITION_SHUFFLE, B_TRANSITION_BIG_POKEBALL}, + [TRANSITION_TYPE_FLASH] = {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, + [TRANSITION_TYPE_WATER] = {B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, }; static const struct TrainerBattleParameter sOrdinaryBattleParams[] = @@ -182,12 +191,12 @@ static void Task_BattleStart(u8 taskId) if (!FldEffPoison_IsActive()) { HelpSystem_Disable(); - BT_StartOnField(tTransition); + BattleTransition_StartOnField(tTransition); ++tState; } break; case 1: - if (BT_IsDone() == TRUE) + if (IsBattleTransitionDone() == TRUE) { HelpSystem_Enable(); CleanupOverworldWindowsAndTilemaps(); @@ -294,7 +303,7 @@ void StartOldManTutorialBattle(void) LockPlayerFieldControls(); gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; gBattleTypeFlags = BATTLE_TYPE_OLD_MAN_TUTORIAL; - CreateBattleStartTask(B_TRANSITION_SLICED_SCREEN, 0); + CreateBattleStartTask(B_TRANSITION_SLICE, 0); } void StartScriptedWildBattle(void) @@ -373,9 +382,9 @@ void StartGroudonKyogreBattle(void) gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; if (gGameVersion == VERSION_FIRE_RED) - CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_RS_VS_TRAINER); + CreateBattleStartTask(B_TRANSITION_ANGLED_WIPES, MUS_RS_VS_TRAINER); else // pointless, exactly the same - CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_RS_VS_TRAINER); + CreateBattleStartTask(B_TRANSITION_ANGLED_WIPES, MUS_RS_VS_TRAINER); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); } @@ -506,26 +515,27 @@ u8 BattleSetup_GetTerrainId(void) static u8 GetBattleTransitionTypeByMap(void) { - u16 tileBehavior; + u16 behavior; s16 x, y; PlayerGetDestCoords(&x, &y); - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + if (Overworld_GetFlashLevel()) - return B_TRANSITION_HORIZONTAL_CORRUGATE; - if (!MetatileBehavior_IsSurfable(tileBehavior)) + return TRANSITION_TYPE_FLASH; + + if (MetatileBehavior_IsSurfable(behavior)) + return TRANSITION_TYPE_WATER; + + switch (gMapHeader.mapType) { - switch (gMapHeader.mapType) - { - case MAP_TYPE_UNDERGROUND: - return B_TRANSITION_DISTORTED_WAVE; - case MAP_TYPE_UNDERWATER: - return B_TRANSITION_BIG_POKEBALL; - default: - return B_TRANSITION_BLUR; - } + case MAP_TYPE_UNDERGROUND: + return TRANSITION_TYPE_CAVE; + case MAP_TYPE_UNDERWATER: + return TRANSITION_TYPE_WATER; + default: + return TRANSITION_TYPE_NORMAL; } - return B_TRANSITION_BIG_POKEBALL; } static u16 GetSumOfPlayerPartyLevel(u8 numMons) @@ -652,7 +662,7 @@ u8 BattleSetup_GetBattleTowerBattleTransition(void) u8 playerLevel = GetSumOfPlayerPartyLevel(1); if (enemyLevel < playerLevel) - return B_TRANSITION_SLIDING_POKEBALLS; + return B_TRANSITION_POKEBALLS_TRAIL; else return B_TRANSITION_BIG_POKEBALL; } diff --git a/src/battle_tower.c b/src/battle_tower.c index 9ec6d3838..9586b2dee 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -882,7 +882,7 @@ static void CB2_FinishEReaderBattle(void) static void Task_WaitBT(u8 taskId) { - if (BT_IsDone() == TRUE) + if (IsBattleTransitionDone() == TRUE) { gMain.savedCallback = CB2_FinishEReaderBattle; CleanupOverworldWindowsAndTilemaps(); @@ -910,7 +910,7 @@ void StartSpecialBattle(void) CreateTask(Task_WaitBT, 1); PlayMapChosenOrBattleBGM(0); transition = BattleSetup_GetBattleTowerBattleTransition(); - BT_StartOnField(transition); + BattleTransition_StartOnField(transition); break; case 1: // secret base battle for (i = 0; i < PARTY_SIZE; i++) @@ -922,7 +922,7 @@ void StartSpecialBattle(void) CreateTask(Task_WaitBT, 1); PlayMapChosenOrBattleBGM(0); transition = BattleSetup_GetBattleTowerBattleTransition(); - BT_StartOnField(transition); + BattleTransition_StartOnField(transition); break; case 2: // e-reader trainer battle ZeroEnemyPartyMons(); @@ -936,7 +936,7 @@ void StartSpecialBattle(void) CreateTask(Task_WaitBT, 1); PlayMapChosenOrBattleBGM(0); transition = BattleSetup_GetBattleTowerBattleTransition(); - BT_StartOnField(transition); + BattleTransition_StartOnField(transition); break; } } diff --git a/src/battle_transition.c b/src/battle_transition.c index fc164b1b9..b4f69f6b9 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -18,6 +18,33 @@ #include "event_object_movement.h" #include "constants/songs.h" +#define PALTAG_UNUSED_MUGSHOT 0x100A + +#define B_TRANS_DMA_FLAGS (1 | ((DMA_SRC_INC | DMA_DEST_FIXED | DMA_REPEAT | DMA_16BIT | DMA_START_HBLANK | DMA_ENABLE) << 16)) + +// Used by each transition task to determine which of its functions to call +#define tState data[0] + +// Below are data defines for InitBlackWipe and UpdateBlackWipe, for the TransitionData data array. +// These will be re-used by any transitions that use these functions. +#define tWipeStartX data[0] +#define tWipeStartY data[1] +#define tWipeCurrX data[2] +#define tWipeCurrY data[3] +#define tWipeEndX data[4] +#define tWipeEndY data[5] +#define tWipeXMove data[6] +#define tWipeYMove data[7] +#define tWipeXDist data[8] +#define tWipeYDist data[9] +#define tWipeTemp data[10] + +#define SET_TILE(ptr, posY, posX, tile) \ +{ \ + u32 index = (posY) * 32 + posX; \ + ptr[index] = tile | (15 << 12); \ +} + typedef bool8 (*TransitionStateFunc)(struct Task *task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); @@ -33,8 +60,8 @@ struct TransitionData u16 bldCnt; u16 bldAlpha; u16 bldY; - s16 bg123HOfs; - s16 bg123VOfs; + s16 cameraX; + s16 cameraY; s16 bg0HOfsOpponent; s16 bg0HOfsPlayer; s16 bg0VOfs; @@ -44,267 +71,251 @@ struct TransitionData s16 data[11]; // for multiple purposes }; -static EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; +static EWRAM_DATA struct TransitionData *sTransitionData = NULL; -static bool8 BT_Phase1_FadeOut(struct Task *task); -static bool8 BT_Phase1_FadeIn(struct Task *task); -static bool8 BT_Phase2BlackDoodles_Init(struct Task *task); -static bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task); -static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task); -static bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task); -static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task); -static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task); -static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task); -static bool8 BT_Phase2GridSquares_IsDone(struct Task *task); -static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task); -static bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task); -static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task); -static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task); -static bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task); -static bool8 BT_Phase2SlicedScreen_Init(struct Task *task); -static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task); -static bool8 BT_Phase2SlicedScreen_End(struct Task *task); -static bool8 BT_Phase2Mugshot_Init(struct Task *task); -static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task); -static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task); -static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task); -static bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task); -static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task); -static bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task); -static bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task); -static bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task); -static bool8 BT_Phase2Mugshot_End(struct Task *task); -static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task); -static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task); -static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task); -static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task); -static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task); -static bool8 BT_Phase2FullScreenWave_Init(struct Task *task); -static bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task); -static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task); -static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task); -static bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task); -static bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task); -static bool8 BT_Phase2BigPokeball_Init(struct Task *task); -static bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task); -static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task); -static bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task); -static bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task); -static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task); -static bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task); -static bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task); -static bool8 BT_Phase2DistortedWave_InitWave(struct Task *task); -static bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task); -static bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task); -static bool8 BT_Phase2Blur_Anim(struct Task *task); -static bool8 BT_Phase2Blur_IsDone(struct Task *task); -static bool8 BT_Phase1Blink(struct Task *task); -static bool8 BT_WaitForPhase1(struct Task *task); -static bool8 BT_Phase2LaunchAnimTask(struct Task *task); -static bool8 BT_WaitForPhase2(struct Task *task); +static bool8 TransitionIntro_FadeToGray(struct Task *task); +static bool8 TransitionIntro_FadeFromGray(struct Task *task); +static bool8 AngledWipes_Init(struct Task *task); +static bool8 AngledWipes_SetWipeData(struct Task *task); +static bool8 AngledWipes_DoWipe(struct Task *task); +static bool8 AngledWipes_TryEnd(struct Task *task); +static bool8 AngledWipes_StartNext(struct Task *task); +static bool8 GridSquares_Init(struct Task *task); +static bool8 GridSquares_Main(struct Task *task); +static bool8 GridSquares_End(struct Task *task); +static bool8 WhiteBarsFade_Init(struct Task *task); +static bool8 WhiteBarsFade_StartBars(struct Task *task); +static bool8 WhiteBarsFade_WaitBars(struct Task *task); +static bool8 WhiteBarsFade_BlendToBlack(struct Task *task); +static bool8 WhiteBarsFade_End(struct Task *task); +static bool8 Slice_Init(struct Task *task); +static bool8 Slice_Main(struct Task *task); +static bool8 Slice_End(struct Task *task); +static bool8 Mugshot_Init(struct Task *task); +static bool8 Mugshot_SetGfx(struct Task *task); +static bool8 Mugshot_ShowBanner(struct Task *task); +static bool8 Mugshot_StartOpponentSlide(struct Task *task); +static bool8 Mugshot_WaitStartPlayerSlide(struct Task *task); +static bool8 Mugshot_WaitPlayerSlide(struct Task *task); +static bool8 Mugshot_GradualWhiteFade(struct Task *task); +static bool8 Mugshot_InitFadeWhiteToBlack(struct Task *task); +static bool8 Mugshot_FadeToBlack(struct Task *task); +static bool8 Mugshot_End(struct Task *task); +static bool8 Spiral_Init(struct Task *task); +static bool8 Spiral_End(struct Task *task); +static bool8 Wave_Init(struct Task *task); +static bool8 Wave_Main(struct Task *task); +static bool8 Wave_End(struct Task *task); +static bool8 Ripple_Init(struct Task *task); +static bool8 Ripple_Main(struct Task *task); +static bool8 ClockwiseWipe_Init(struct Task *task); +static bool8 ClockwiseWipe_TopRight(struct Task *task); +static bool8 ClockwiseWipe_Right(struct Task *task); +static bool8 ClockwiseWipe_Bottom(struct Task *task); +static bool8 ClockwiseWipe_Left(struct Task *task); +static bool8 ClockwiseWipe_TopLeft(struct Task *task); +static bool8 ClockwiseWipe_End(struct Task *task); +static bool8 PokeballsTrail_Init(struct Task *task); +static bool8 PokeballsTrail_Main(struct Task *task); +static bool8 PokeballsTrail_End(struct Task *task); +static bool8 BigPokeball_Init(struct Task *task); +static bool8 BigPokeball_SetGfx(struct Task *task); +static bool8 PatternWeave_Blend1(struct Task *task); +static bool8 PatternWeave_Blend2(struct Task *task); +static bool8 PatternWeave_FinishAppear(struct Task *task); +static bool8 PatternWeave_CircularMask(struct Task *task); +static bool8 Shuffle_Init(struct Task *task); +static bool8 Shuffle_End(struct Task *task); +static bool8 Swirl_Init(struct Task *task); +static bool8 Swirl_End(struct Task *task); +static bool8 Blur_Init(struct Task *task); +static bool8 Blur_Main(struct Task *task); +static bool8 Blur_End(struct Task *task); +static bool8 Transition_StartIntro(struct Task *task); +static bool8 Transition_WaitForIntro(struct Task *task); +static bool8 Transition_StartMain(struct Task *task); +static bool8 Transition_WaitForMain(struct Task *task); -static void BT_Phase2Blur(u8 taskId); -static void BT_Phase2DistortedWave(u8 taskId); -static void BT_Phase2HorizontalCorrugate(u8 taskId); -static void BT_Phase2BigPokeball(u8 taskId); -static void BT_Phase2SlidingPokeballs(u8 taskId); -static void BT_Phase2ClockwiseBlackFade(u8 taskId); -static void BT_Phase2FullScreenWave(u8 taskId); -static void BT_Phase2BlackWaveToRight(u8 taskId); -static void BT_Phase2SlicedScreen(u8 taskId); -static void BT_Phase2WhiteFadeInStripes(u8 taskId); -static void BT_Phase2GridSquares(u8 taskId); -static void BT_Phase2BlackDoodles(u8 taskId); -static void BT_Phase2StartLoreleiMugshot(u8 taskId); -static void BT_Phase2StartBrunoMugshot(u8 taskId); -static void BT_Phase2StartAgathaMugshot(u8 taskId); -static void BT_Phase2StartLanceMugshot(u8 taskId); -static void BT_Phase2StartBlueMugshot(u8 taskId); -static void BT_Phase2AntiClockwiseSpiral(u8 taskId); -static void BT_Phase1Task(u8 taskId); -static void BT_Phase2Mugshot(u8 taskId); -static void BT_Phase1SubTask(u8 taskId); +static void Task_Blur(u8 taskId); +static void Task_Swirl(u8 taskId); +static void Task_Shuffle(u8 taskId); +static void Task_BigPokeball(u8 taskId); +static void Task_PokeballsTrail(u8 taskId); +static void Task_ClockwiseWipe(u8 taskId); +static void Task_Ripple(u8 taskId); +static void Task_Wave(u8 taskId); +static void Task_Slice(u8 taskId); +static void Task_WhiteBarsFade(u8 taskId); +static void Task_GridSquares(u8 taskId); +static void Task_AngledWipes(u8 taskId); +static void Task_Lorelei(u8 taskId); +static void Task_Bruno(u8 taskId); +static void Task_Agatha(u8 taskId); +static void Task_Lance(u8 taskId); +static void Task_Blue(u8 taskId); +static void Task_Spiral(u8 taskId); +static void Task_Intro(u8 taskId); +static void DoMugshotTransition(u8 taskId); +static void Task_BattleTransition_Intro(u8 taskId); -static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); -static void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); -static void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite); +static void SpriteCB_MugshotTrainerPic(struct Sprite *sprite); +static void SpriteCB_FldEffPokeballTrail(struct Sprite *sprite); +static void SpriteCB_WhiteBarFade(struct Sprite *sprite); -static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); -static bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); -static bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite); -static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite); -static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite); +static bool8 MugshotTrainerPic_Pause(struct Sprite *sprite); +static bool8 MugshotTrainerPic_Init(struct Sprite *sprite); +static bool8 MugshotTrainerPic_Slide(struct Sprite *sprite); +static bool8 MugshotTrainerPic_SlideSlow(struct Sprite *sprite); +static bool8 MugshotTrainerPic_SlideOffscreen(struct Sprite *sprite); -static void VBCB_BT_Phase2DistortedWave(void); -static void HBCB_BT_Phase2DistortedWave(void); -static void VBCB_BT_Phase2HorizontalCorrugate(void); -static void HBCB_BT_Phase2HorizontalCorrugate(void); -static void VBCB_BT_Phase2BigPokeball1(void); -static void VBCB_BT_Phase2BigPokeball2(void); -static void HBCB_BT_Phase2BigPokeball(void); -static void VBCB_BT_Phase2ClockwiseBlackFade(void); -static void VBCB_BT_Phase2FullScreenWave(void); -static void HBCB_BT_Phase2FullScreenWave(void); -static void VBCB_BT_Phase2BlackWaveToRight(void); -static void VBCB_BT_Phase2AntiClockwiseBlackFade(void); -static void VBCB_BT_Phase2Mugshot1_Slide(void); -static void VBCB_BT_Phase2Mugshot2_WhiteFade(void); -static void HBCB_BT_Phase2Mugshot(void); -static void VBCB_BT_Phase2SlicedScreen(void); -static void HBCB_BT_Phase2SlicedScreen(void); -static void VBCB_BT_Phase2WhiteFadeInStripes1(void); -static void VBCB_BT_Phase2WhiteFadeInStripes2(void); -static void HBCB_BT_Phase2WhiteFadeInStripes(void); -static void VBCB_BT_Phase2BlackDoodles(void); +static void VBlankCB_Swirl(void); +static void HBlankCB_Swirl(void); +static void VBlankCB_Shuffle(void); +static void HBlankCB_Shuffle(void); +static void VBlankCB_PatternWeave(void); +static void VBlankCB_CircularMask(void); +static void VBlankCB_ClockwiseWipe(void); +static void VBlankCB_Ripple(void); +static void HBlankCB_Ripple(void); +static void VBlankCB_Wave(void); +static void VBlankCB_Spiral(void); +static void VBlankCB_Mugshots(void); +static void VBlankCB_MugshotsFadeOut(void); +static void HBlankCB_Mugshots(void); +static void VBlankCB_Slice(void); +static void HBlankCB_Slice(void); +static void VBlankCB_WhiteBarsFade(void); +static void VBlankCB_WhiteBarsFade_Blend(void); +static void HBlankCB_WhiteBarsFade(void); +static void VBlankCB_AngledWipes(void); -static void BT_LaunchTask(u8 transitionId); -static void BT_TaskMain(u8 taskId); -static void BT_InitCtrlBlk(void); -static void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); -static bool8 BT_IsPhase1Done(void); -static void BT_VBSyncOamAndPltt(void); -static void BT_GetBg0TilesetBase(u16 **tilesetPtr); -static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); -static void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); -static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius); -static void BT_BlendPalettesToBlack(void); -static void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); -static bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2); -static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value); -static void BT_StartSpriteSlide(s16 spriteId); -static s16 BT_IsSpriteSlideFinished(s16 spriteId); -static void BT_Phase2Mugshots_CreateSprites(struct Task *task); +static void LaunchBattleTransitionTask(u8 transitionId); +static void Task_BattleTransition(u8 taskId); +static void InitTransitionData(void); +static void CreateIntroTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); +static bool8 IsIntroTaskDone(void); +static void VBlankCB_BattleTransition(void); +static void GetBg0TilemapDst(u16 **tilesetPtr); +static void GetBg0TilesDst(u16 **tilemapPtr, u16 **tilesetPtr); +static void SetSinWave(s16 *buffer, s16 offset, s16 sinIndex, s16 frequency, s16 amplitude, s16 bufSize); +static void SetCircularMask(s16 *buffer, s16 x, s16 y, s16 radius); +static void FadeScreenBlack(void); +static void InitBlackWipe(s16 *data, s16 startX, s16 startY, s16 endX, s16 endY, s16 stepX, s16 stepY); +static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact); +static void SetTrainerPicSlideDirection(s16 spriteId, bool16 value); +static void IncrementTrainerPicState(s16 spriteId); +static s16 IsTrainerPicSlideDone(s16 spriteId); +static void Mugshots_CreateTrainerPics(struct Task *task); -static const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); -static const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); -static const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); +static const u32 sBigPokeball_Tileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); +static const u32 sPokeballTrail_Tileset[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); +static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); static const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); -static const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); -static const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); +static const u8 sUnusedBrendan_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); +static const u8 sUnusedLass_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); static const u32 sGridSquareTileset[] = INCBIN_U32("graphics/battle_transitions/grid_square_tileset.4bpp"); -static const TaskFunc sBT_Phase1Tasks[] = +// All battle transitions use the same intro +static const TaskFunc sTasks_Intro[] = { - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, - BT_Phase1Task, + [0 ... B_TRANSITION_COUNT - 1] = &Task_Intro, }; -static const TaskFunc sBT_Phase2Tasks[] = +// After the intro each transition has a unique main task. +// This task will call the functions that do the transition effects. +static const TaskFunc sTasks_Main[] = { - [B_TRANSITION_BLUR] = BT_Phase2Blur, - [B_TRANSITION_DISTORTED_WAVE] = BT_Phase2DistortedWave, - [B_TRANSITION_HORIZONTAL_CORRUGATE] = BT_Phase2HorizontalCorrugate, - [B_TRANSITION_BIG_POKEBALL] = BT_Phase2BigPokeball, - [B_TRANSITION_SLIDING_POKEBALLS] = BT_Phase2SlidingPokeballs, - [B_TRANSITION_CLOCKWISE_BLACKFADE] = BT_Phase2ClockwiseBlackFade, - [B_TRANSITION_FULLSCREEN_WAVE] = BT_Phase2FullScreenWave, - [B_TRANSITION_BLACK_WAVE_TO_RIGHT] = BT_Phase2BlackWaveToRight, - [B_TRANSITION_SLICED_SCREEN] = BT_Phase2SlicedScreen, - [B_TRANSITION_WHITEFADE_IN_STRIPES] = BT_Phase2WhiteFadeInStripes, - [B_TRANSITION_GRID_SQUARES] = BT_Phase2GridSquares, - [B_TRANSITION_BLACK_DOODLES] = BT_Phase2BlackDoodles, - [B_TRANSITION_LORELEI] = BT_Phase2StartLoreleiMugshot, - [B_TRANSITION_BRUNO] = BT_Phase2StartBrunoMugshot, - [B_TRANSITION_AGATHA] = BT_Phase2StartAgathaMugshot, - [B_TRANSITION_LANCE] = BT_Phase2StartLanceMugshot, - [B_TRANSITION_BLUE] = BT_Phase2StartBlueMugshot, - [B_TRANSITION_ANTI_CLOCKWISE_SPIRAL] = BT_Phase2AntiClockwiseSpiral, + [B_TRANSITION_BLUR] = Task_Blur, + [B_TRANSITION_SWIRL] = Task_Swirl, + [B_TRANSITION_SHUFFLE] = Task_Shuffle, + [B_TRANSITION_BIG_POKEBALL] = Task_BigPokeball, + [B_TRANSITION_POKEBALLS_TRAIL] = Task_PokeballsTrail, + [B_TRANSITION_CLOCKWISE_WIPE] = Task_ClockwiseWipe, + [B_TRANSITION_RIPPLE] = Task_Ripple, + [B_TRANSITION_WAVE] = Task_Wave, + [B_TRANSITION_SLICE] = Task_Slice, + [B_TRANSITION_WHITE_BARS_FADE] = Task_WhiteBarsFade, + [B_TRANSITION_GRID_SQUARES] = Task_GridSquares, + [B_TRANSITION_ANGLED_WIPES] = Task_AngledWipes, + [B_TRANSITION_LORELEI] = Task_Lorelei, + [B_TRANSITION_BRUNO] = Task_Bruno, + [B_TRANSITION_AGATHA] = Task_Agatha, + [B_TRANSITION_LANCE] = Task_Lance, + [B_TRANSITION_BLUE] = Task_Blue, + [B_TRANSITION_SPIRAL] = Task_Spiral, }; -static const TransitionStateFunc sBT_MainPhases[] = +static const TransitionStateFunc sTaskHandlers[] = { - BT_Phase1Blink, - BT_WaitForPhase1, - BT_Phase2LaunchAnimTask, - BT_WaitForPhase2, + Transition_StartIntro, + Transition_WaitForIntro, + Transition_StartMain, + Transition_WaitForMain, }; -static const TransitionStateFunc sBT_Phase2BlurFuncs[] = +static const TransitionStateFunc sBlur_Funcs[] = { - BT_Phase2Blur_InitBgMosaic, - BT_Phase2Blur_Anim, - BT_Phase2Blur_IsDone, + Blur_Init, + Blur_Main, + Blur_End, }; -static const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] = +static const TransitionStateFunc sSwirl_Funcs[] = { - BT_Phase2DistortedWave_InitWave, - BT_Phase2DistortedWave_UpdateWave, + Swirl_Init, + Swirl_End, }; -static const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] = +static const TransitionStateFunc sShuffle_Funcs[] = { - BT_Phase2HorizontalCorrugate_Init, - BT_Phase2HorizontalCorrugate_UpdateWave, + Shuffle_Init, + Shuffle_End, }; -static const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = +static const TransitionStateFunc sBigPokeball_Funcs[] = { - BT_Phase2BigPokeball_Init, - BT_Phase2BigPokeball_LoadTilemapAndWave, - BT_Phase2BigPokeball_UpdateWave1IncEva, - BT_Phase2BigPokeball_UpdateWave2DecEvb, - BT_Phase2BigPokeball_UpdateWave3, - BT_Phase2BigPokeball_CircleEffect, + BigPokeball_Init, + BigPokeball_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + PatternWeave_CircularMask, }; -static const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] = +static const TransitionStateFunc sPokeballsTrail_Funcs[] = { - BT_Phase2SlidingPokeballs_LoadBgGfx, - BT_Phase2SlidingPokeballs_SetupFldeffArgs, - BT_Phase2SlidingPokeballs_IsDone, + PokeballsTrail_Init, + PokeballsTrail_Main, + PokeballsTrail_End, }; -static const s16 gUnknown_83FA400[] = { -16, 256 }; +#define NUM_POKEBALL_TRAILS 5 +static const s16 sPokeballsTrail_StartXCoords[] = { -16, DISPLAY_WIDTH + 16 }; +static const s16 sPokeballsTrail_Delays[NUM_POKEBALL_TRAILS] = { 0, 16, 32, 8, 24 }; +static const s16 sPokeballsTrail_Speeds[] = { 8, -8 }; -static const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 }; - -static const s16 gUnknown_83FA40E[] = { 8, -8 }; - -static const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] = +static const TransitionStateFunc sClockwiseWipe_Funcs[] = { - BT_Phase2ClockwiseBlackFade_Init, - BT_Phase2ClockwiseBlackFade_Step1, - BT_Phase2ClockwiseBlackFade_Step2, - BT_Phase2ClockwiseBlackFade_Step3, - BT_Phase2ClockwiseBlackFade_Step4, - BT_Phase2ClockwiseBlackFade_Step5, - BT_Phase2ClockwiseBlackFade_End, + ClockwiseWipe_Init, + ClockwiseWipe_TopRight, + ClockwiseWipe_Right, + ClockwiseWipe_Bottom, + ClockwiseWipe_Left, + ClockwiseWipe_TopLeft, + ClockwiseWipe_End, }; -static const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] = +static const TransitionStateFunc sRipple_Funcs[] = { - BT_Phase2FullScreenWave_Init, - BT_Phase2FullScreenWave_UpdateWave, + Ripple_Init, + Ripple_Main, }; -static const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] = +static const TransitionStateFunc sWave_Funcs[] = { - BT_Phase2BlackWaveToRight_Init, - BT_Phase2BlackWaveToRight_UpdateWave, - BT_Phase2BlackWaveToRight_End, + Wave_Init, + Wave_Main, + Wave_End, }; static const s16 gUnknown_83FA444[] = { @@ -318,164 +329,173 @@ static const s16 gUnknown_83FA444[] = -0x100, -0x266E, }; -static const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] = +static const TransitionStateFunc sSpiral_Funcs[] = { - BT_Phase2AntiClockwiseSpiral_Init, - BT_Phase2AntiClockwiseSpiral_Update, + Spiral_Init, + Spiral_End, }; -static const TransitionStateFunc sBT_Phase2MugshotFuncs[] = +static const TransitionStateFunc sMugshot_Funcs[] = { - BT_Phase2Mugshot_Init, - BT_Phase2Mugshot_LoadGfx, - BT_Phase2Mugshot_VsBarsSlideIn, - BT_Phase2Mugshot_StartSpriteSlide, - BT_Phase2Mugshot_WaitForOpponentInPlace, - BT_Phase2Mugshot_WaitForPlayerInPlace, - BT_Phase2Mugshot_ExpandWhiteBand, - BT_Phase2Mugshot_StartBlackFade, - BT_Phase2Mugshot_WaitForBlackFade, - BT_Phase2Mugshot_End, + Mugshot_Init, + Mugshot_SetGfx, + Mugshot_ShowBanner, + Mugshot_StartOpponentSlide, + Mugshot_WaitStartPlayerSlide, + Mugshot_WaitPlayerSlide, + Mugshot_GradualWhiteFade, + Mugshot_InitFadeWhiteToBlack, + Mugshot_FadeToBlack, + Mugshot_End, }; static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = { - // TODO: document these with macro - 0x70, 0x71, 0x72, 0x73, 0x7D + [MUGSHOT_LORELEI] = TRAINER_PIC_ELITE_FOUR_LORELEI, + [MUGSHOT_BRUNO] = TRAINER_PIC_ELITE_FOUR_BRUNO, + [MUGSHOT_AGATHA] = TRAINER_PIC_ELITE_FOUR_AGATHA, + [MUGSHOT_LANCE] = TRAINER_PIC_ELITE_FOUR_LANCE, + [MUGSHOT_BLUE] = TRAINER_PIC_CHAMPION_RIVAL, }; static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = { - {0x200, 0x200}, - {0x200, 0x200}, - {0x200, 0x200}, - {0x200, 0x200}, - {0x200, 0x200}, + [MUGSHOT_LORELEI] = {0x200, 0x200}, + [MUGSHOT_BRUNO] = {0x200, 0x200}, + [MUGSHOT_AGATHA] = {0x200, 0x200}, + [MUGSHOT_LANCE] = {0x200, 0x200}, + [MUGSHOT_BLUE] = {0x200, 0x200}, }; static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = { - { -8, 0 }, - { -10, 0 }, - { 0, 0 }, - { -32, 0 }, - { 0, 0 }, + [MUGSHOT_LORELEI] = { -8, 0 }, + [MUGSHOT_BRUNO] = { -10, 0 }, + [MUGSHOT_AGATHA] = { 0, 0 }, + [MUGSHOT_LANCE] = { -32, 0 }, + [MUGSHOT_BLUE] = { 0, 0 }, }; -static const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] = +static const TransitionSpriteCallback sMugshotTrainerPicFuncs[] = { - BT_Phase2MugshotsSpriteFuncs_Wait, - BT_Phase2MugshotsSpriteFuncs_InitParams, - BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn, - BT_Phase2MugshotsSpriteFuncs_DecelerateSprite, - BT_Phase2MugshotsSpriteFuncs_Wait, - BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2, // not used - BT_Phase2MugshotsSpriteFuncs_Wait, + MugshotTrainerPic_Pause, + MugshotTrainerPic_Init, + MugshotTrainerPic_Slide, + MugshotTrainerPic_SlideSlow, + MugshotTrainerPic_Pause, + MugshotTrainerPic_SlideOffscreen, + MugshotTrainerPic_Pause, }; -static const s16 sMugShotSlideVelocity[] = { 12, -12 }; +// One element per slide direction. +// Sign of acceleration is opposite speed, so slide decelerates. +static const s16 sTrainerPicSlideSpeeds[] = {12, -12}; +static const s16 sTrainerPicSlideAccels[] = {-1, 1}; -static const s16 sMugShotSlideDeceleration[] = { -1, 1 }; - -static const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] = +static const TransitionStateFunc sSlice_Funcs[] = { - BT_Phase2SlicedScreen_Init, - BT_Phase2SlicedScreen_UpdateOffsets, - BT_Phase2SlicedScreen_End, + Slice_Init, + Slice_Main, + Slice_End, }; -static const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = +static const TransitionStateFunc sWhiteBarsFade_Funcs[] = { - BT_Phase2WhiteFadeInStripes_Init, - BT_Phase2WhiteFadeInStripes_SetupSprites, - BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone, - BT_Phase2WhiteFadeInStripes_Stop, - BT_Phase2WhiteFadeInStripes_IsDone, + WhiteBarsFade_Init, + WhiteBarsFade_StartBars, + WhiteBarsFade_WaitBars, + WhiteBarsFade_BlendToBlack, + WhiteBarsFade_End, }; -static const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 }; +#define NUM_WHITE_BARS 6 +#define WHITE_BAR_HEIGHT (1 + DISPLAY_HEIGHT / NUM_WHITE_BARS) +static const u16 sWhiteBarsFade_StartDelays[NUM_WHITE_BARS] = {0, 9, 15, 6, 12, 3}; -static const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] = +static const TransitionStateFunc sGridSquares_Funcs[] = { - BT_Phase2GridSquares_LoadGfx, - BT_Phase2GridSquares_UpdateTileset, - BT_Phase2GridSquares_IsDone, + GridSquares_Init, + GridSquares_Main, + GridSquares_End, }; -static const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = +static const TransitionStateFunc sAngledWipes_Funcs[] = { - BT_Phase2BlackDoodles_Init, - BT_Phase2BlackDoodles_InitSingleBrush, - BT_Phase2BlackDoodles_DrawSingleBrush, - BT_Phase2BlackDoodles_IsDone, - BT_Phase2BlackDoodles_NextBrush, + AngledWipes_Init, + AngledWipes_SetWipeData, + AngledWipes_DoWipe, + AngledWipes_TryEnd, + AngledWipes_StartNext, }; -static const s16 sBlackDoodlesSegments[][5] = +#define NUM_ANGLED_WIPES 7 + +static const s16 sAngledWipes_MoveData[NUM_ANGLED_WIPES][5] = { - { 0x38, 0x00, 0x00, 0xA0, 0 }, - { 0x68, 0xA0, 0xF0, 0x58, 1 }, - { 0xF0, 0x48, 0x38, 0x00, 1 }, - { 0x00, 0x20, 0x90, 0xA0, 0 }, - { 0x90, 0xA0, 0xB8, 0x00, 1 }, - { 0x38, 0x00, 0xA8, 0xA0, 0 }, - { 0xA8, 0xA0, 0x30, 0x00, 1 }, +// startX startY endX endY yDirection + {56, 0, 0, DISPLAY_HEIGHT, 0}, + {104, DISPLAY_HEIGHT, DISPLAY_WIDTH, 88, 1}, + {DISPLAY_WIDTH, 72, 56, 0, 1}, + {0, 32, 144, DISPLAY_HEIGHT, 0}, + {144, DISPLAY_HEIGHT, 184, 0, 1}, + {56, 0, 168, DISPLAY_HEIGHT, 0}, + {168, DISPLAY_HEIGHT, 48, 0, 1}, }; -static const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; +static const s16 sAngledWipes_EndDelays[NUM_ANGLED_WIPES] = { 1, 1, 1, 1, 1, 1, 0 }; -static const TransitionStateFunc sBT_Phase1FadeFuncs[] = +static const TransitionStateFunc sTransitionIntroFuncs[] = { - BT_Phase1_FadeOut, - BT_Phase1_FadeIn, + TransitionIntro_FadeToGray, + TransitionIntro_FadeFromGray, }; -static const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = +static const struct SpriteFrameImage sSpriteImage_Pokeball[] = { { - .data = sSpriteImage_SlidingPokeball, - .size = 0x200, + .data = sPokeball_Gfx, + .size = sizeof(sPokeball_Gfx), }, }; -static const union AnimCmd sSpriteAnim_SlidingPokeball[] = +static const union AnimCmd sSpriteAnim_Pokeball[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball }; +static const union AnimCmd *const sSpriteAnimTable_Pokeball[] = { sSpriteAnim_Pokeball }; -static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] = +static const union AffineAnimCmd sSpriteAffineAnim_Pokeball1[] = { AFFINEANIMCMD_FRAME(0, 0, -4, 1), AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] = +static const union AffineAnimCmd sSpriteAffineAnim_Pokeball2[] = { AFFINEANIMCMD_FRAME(0, 0, 4, 1), AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_Pokeball[] = { - sSpriteAffineAnim_SlidingPokeball1, - sSpriteAffineAnim_SlidingPokeball2, + sSpriteAffineAnim_Pokeball1, + sSpriteAffineAnim_Pokeball2, }; -static const struct SpriteTemplate sSpriteTemplate_SlidingPokeball = +static const struct SpriteTemplate sSpriteTemplate_Pokeball = { .tileTag = TAG_NONE, - .paletteTag = 0x1009, + .paletteTag = FLDEFF_PAL_TAG_POKEBALL_TRAIL, .oam = &gObjectEventBaseOam_32x32, - .anims = sSpriteAnimTable_SlidingPokeball, - .images = sSpriteImageTable_SlidingPokeball, - .affineAnims = sSpriteAffineAnimTable_SlidingPokeball, - .callback = SpriteCB_BT_Phase2SlidingPokeballs, + .anims = sSpriteAnimTable_Pokeball, + .images = sSpriteImage_Pokeball, + .affineAnims = sSpriteAffineAnimTable_Pokeball, + .callback = SpriteCB_FldEffPokeballTrail, }; -static const struct OamData sOamData_Unused = +static const struct OamData sOam_UnusedBrendanLass = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -492,82 +512,82 @@ static const struct OamData sOamData_Unused = .affineParam = 0, }; -static const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = +static const struct SpriteFrameImage sImageTable_UnusedBrendan[] = { { - .data = sSpriteImage_UnusedBrendan, - .size = 0x800, + .data = sUnusedBrendan_Gfx, + .size = sizeof(sUnusedBrendan_Gfx), }, }; -static const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = +static const struct SpriteFrameImage sImageTable_UnusedLass[] = { { - .data = sSpriteImage_UnusedLass, - .size = 0x800, + .data = sUnusedLass_Gfx, + .size = sizeof(sUnusedLass_Gfx), }, }; -static const union AnimCmd sSpriteAnim_Unused[] = +static const union AnimCmd sSpriteAnim_UnusedBrendanLass[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused }; +static const union AnimCmd *const sSpriteAnimTable_UnusedBrendanLass[] = { sSpriteAnim_UnusedBrendanLass }; -static const struct SpriteTemplate sSpriteTemplateTable_Unused[] = +static const struct SpriteTemplate sSpriteTemplate_UnusedBrendanLass[] = { { .tileTag = TAG_NONE, - .paletteTag = 0x100A, - .oam = &sOamData_Unused, - .anims = sSpriteAnimTable_Unused, - .images = sSpriteImageTable_UnusedBrendan, + .paletteTag = PALTAG_UNUSED_MUGSHOT, + .oam = &sOam_UnusedBrendanLass, + .anims = sSpriteAnimTable_UnusedBrendanLass, + .images = sImageTable_UnusedBrendan, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BT_Phase2Mugshots, + .callback = SpriteCB_MugshotTrainerPic, }, { .tileTag = TAG_NONE, - .paletteTag = 0x100A, - .oam = &sOamData_Unused, - .anims = sSpriteAnimTable_Unused, - .images = sSpriteImageTable_UnusedLass, + .paletteTag = PALTAG_UNUSED_MUGSHOT, + .oam = &sOam_UnusedBrendanLass, + .anims = sSpriteAnimTable_UnusedBrendanLass, + .images = sImageTable_UnusedLass, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BT_Phase2Mugshots, + .callback = SpriteCB_MugshotTrainerPic, }, }; // this palette is shared by big pokeball and sliding pokeball -static const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); +static const u16 sFieldEffectPal_Pokeball[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); -const struct SpritePalette sSpritePalette_SlidingPokeball = +const struct SpritePalette gSpritePalette_Pokeball = { - .data = sSlidingPokeballBigPokeballPalette, - .tag = 0x1009, + .data = sFieldEffectPal_Pokeball, + .tag = FLDEFF_PAL_TAG_POKEBALL_TRAIL, }; -static const u16 sVsBarLoreleiPalette[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal"); -static const u16 sVsBarBrunoPalette[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal"); -static const u16 sVsBarAgathaPalette[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal"); -static const u16 sVsBarLancePalette[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal"); -static const u16 sVsBarBluePalette[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal"); -static const u16 sVsBarMalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal"); -static const u16 sVsBarFemalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal"); +static const u16 sMugshotPal_Lorelei[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal"); +static const u16 sMugshotPal_Bruno[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal"); +static const u16 sMugshotPal_Agatha[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal"); +static const u16 sMugshotPal_Lance[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal"); +static const u16 sMugshotPal_Blue[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal"); +static const u16 sMugshotPal_Red[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal"); +static const u16 sMugshotPal_Green[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal"); -static const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = +static const u16 *const sOpponentMugshotsPals[MUGSHOTS_COUNT] = { - sVsBarLoreleiPalette, - sVsBarBrunoPalette, - sVsBarAgathaPalette, - sVsBarLancePalette, - sVsBarBluePalette, + [MUGSHOT_LORELEI] = sMugshotPal_Lorelei, + [MUGSHOT_BRUNO] = sMugshotPal_Bruno, + [MUGSHOT_AGATHA] = sMugshotPal_Agatha, + [MUGSHOT_LANCE] = sMugshotPal_Lance, + [MUGSHOT_BLUE] = sMugshotPal_Blue, }; -static const u16 *const sVsBarPlayerPalettes[] = +static const u16 *const sPlayerMugshotsPals[GENDER_COUNT] = { - sVsBarMalePlayerPalette, - sVsBarFemalePlayerPalette, + [MALE] = sMugshotPal_Red, + [FEMALE] = sMugshotPal_Green, }; static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); @@ -575,36 +595,35 @@ static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitio static const struct SpritePalette sSpritePalette_UnusedTrainer = { .data = sUnusedTrainerPalette, - .tag = 0x100A, + .tag = PALTAG_UNUSED_MUGSHOT, }; -static const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); -static const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); +static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); +static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); -void BT_StartOnField(u8 transitionId) +void BattleTransition_StartOnField(u8 transitionId) { - sTransitionStructPtr = AllocZeroed(sizeof(struct TransitionData)); + sTransitionData = AllocZeroed(sizeof(*sTransitionData)); gMain.callback2 = CB2_OverworldBasic; - BT_LaunchTask(transitionId); + LaunchBattleTransitionTask(transitionId); } -// not used -static void BT_StartWithoutAlloc(u8 transitionId) +// Unused +static void BattleTransition_Start(u8 transitionId) { - BT_LaunchTask(transitionId); + LaunchBattleTransitionTask(transitionId); } -#define tState data[0] #define tTransitionId data[1] #define tTransitionDone data[15] -bool8 BT_IsDone(void) +bool8 IsBattleTransitionDone(void) { - u8 taskId = FindTaskIdByFunc(BT_TaskMain); + u8 taskId = FindTaskIdByFunc(Task_BattleTransition); if (gTasks[taskId].tTransitionDone) { - BT_InitCtrlBlk(); - FREE_AND_SET_NULL(sTransitionStructPtr); + InitTransitionData(); + FREE_AND_SET_NULL(sTransitionData); DestroyTask(taskId); return TRUE; } @@ -614,25 +633,25 @@ bool8 BT_IsDone(void) } } -static void BT_LaunchTask(u8 transitionId) +static void LaunchBattleTransitionTask(u8 transitionId) { - u8 taskId = CreateTask(BT_TaskMain, 2); + u8 taskId = CreateTask(Task_BattleTransition, 2); gTasks[taskId].tTransitionId = transitionId; } -static void BT_TaskMain(u8 taskId) +static void Task_BattleTransition(u8 taskId) { - while (sBT_MainPhases[gTasks[taskId].tState](&gTasks[taskId])); + while (sTaskHandlers[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase1Blink(struct Task *task) +static bool8 Transition_StartIntro(struct Task *task) { SetWeatherScreenFadeOut(); - CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); - if (sBT_Phase1Tasks[task->tTransitionId] != NULL) + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, sizeof(gPlttBufferUnfaded)); + if (sTasks_Intro[task->tTransitionId] != NULL) { - CreateTask(sBT_Phase1Tasks[task->tTransitionId], 4); - ++task->tState; + CreateTask(sTasks_Intro[task->tTransitionId], 4); + task->tState++; return FALSE; } else @@ -642,11 +661,11 @@ static bool8 BT_Phase1Blink(struct Task *task) } } -static bool8 BT_WaitForPhase1(struct Task *task) +static bool8 Transition_WaitForIntro(struct Task *task) { - if (FindTaskIdByFunc(sBT_Phase1Tasks[task->tTransitionId]) == TAIL_SENTINEL) + if (FindTaskIdByFunc(sTasks_Intro[task->tTransitionId]) == TASK_NONE) { - ++task->tState; + task->tState++; return TRUE; } else @@ -655,122 +674,132 @@ static bool8 BT_WaitForPhase1(struct Task *task) } } -static bool8 BT_Phase2LaunchAnimTask(struct Task *task) +static bool8 Transition_StartMain(struct Task *task) { - CreateTask(sBT_Phase2Tasks[task->tTransitionId], 0); - ++task->tState; + CreateTask(sTasks_Main[task->tTransitionId], 0); + task->tState++; return FALSE; } -static bool8 BT_WaitForPhase2(struct Task *task) +static bool8 Transition_WaitForMain(struct Task *task) { task->tTransitionDone = FALSE; - if (FindTaskIdByFunc(sBT_Phase2Tasks[task->tTransitionId]) == TAIL_SENTINEL) + if (FindTaskIdByFunc(sTasks_Main[task->tTransitionId]) == TASK_NONE) task->tTransitionDone = TRUE; return FALSE; } -static void BT_Phase1Task(u8 taskId) +#undef tTransitionId +#undef tTransitionDone + +static void Task_Intro(u8 taskId) { - if (!gTasks[taskId].tState) + if (gTasks[taskId].tState == 0) { - ++gTasks[taskId].tState; - BT_CreatePhase1SubTask(0, 0, 2, 2, 2); + gTasks[taskId].tState++; + CreateIntroTask(0, 0, 2, 2, 2); } - else if (BT_IsPhase1Done()) + else if (IsIntroTaskDone()) { DestroyTask(taskId); } } -#define tInterval data[1] -#define tMosaicSize data[2] +//-------------------- +// B_TRANSITION_BLUR +//-------------------- -static void BT_Phase2Blur(u8 taskId) +#define tDelay data[1] +#define tCounter data[2] + +static void Task_Blur(u8 taskId) { - while (sBT_Phase2BlurFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sBlur_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task) +static bool8 Blur_Init(struct Task *task) { SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuRegBits(REG_OFFSET_BG1CNT, BGCNT_MOSAIC); SetGpuRegBits(REG_OFFSET_BG2CNT, BGCNT_MOSAIC); SetGpuRegBits(REG_OFFSET_BG3CNT, BGCNT_MOSAIC); - ++task->tState; + task->tState++; return TRUE; } -static bool8 BT_Phase2Blur_Anim(struct Task *task) +static bool8 Blur_Main(struct Task *task) { - if (task->tInterval) + if (task->tDelay != 0) { - --task->tInterval; + task->tDelay--; } else { - task->tInterval = 2; - if (++task->tMosaicSize == 10) - BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 0x10, RGB_BLACK); - // The mosaic size argument is shared by HSIZE and VSIZE - SetGpuReg(REG_OFFSET_MOSAIC, (task->tMosaicSize & 0xF) + ((task->tMosaicSize & 0xF) << 4)); - if (task->tMosaicSize > 14) - ++task->tState; + task->tDelay = 2; + if (++task->tCounter == 10) + BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); + SetGpuReg(REG_OFFSET_MOSAIC, (task->tCounter & 0xF) + ((task->tCounter & 0xF) << 4)); + if (task->tCounter > 14) + task->tState++; } return FALSE; } -static bool8 BT_Phase2Blur_IsDone(struct Task *task) +static bool8 Blur_End(struct Task *task) { if (!gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(BT_Phase2Blur)); + DestroyTask(FindTaskIdByFunc(Task_Blur)); return FALSE; } -#undef tInterval -#undef tMosaicSize +#undef tDelay +#undef tCounter -#define tTheta data[1] +//-------------------- +// B_TRANSITION_SWIRL +//-------------------- + +#define tSinIndex data[1] #define tAmplitude data[2] -static void BT_Phase2DistortedWave(u8 taskId) +static void Task_Swirl(u8 taskId) { - while (sBT_Phase2DistortedWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sSwirl_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2DistortedWave_InitWave(struct Task *task) +static bool8 Swirl_Init(struct Task *task) { - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 0x10, RGB_BLACK); - BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[1], sTransitionStructPtr->bg123HOfs, 0, 2, 0, 160); - SetVBlankCallback(VBCB_BT_Phase2DistortedWave); - SetHBlankCallback(HBCB_BT_Phase2DistortedWave); + BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 16, RGB_BLACK); + SetSinWave(gScanlineEffectRegBuffers[1], sTransitionData->cameraX, 0, 2, 0, DISPLAY_HEIGHT); + SetVBlankCallback(VBlankCB_Swirl); + SetHBlankCallback(HBlankCB_Swirl); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); - ++task->tState; + task->tState++; return FALSE; } -static bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task) +static bool8 Swirl_End(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - task->tTheta += 4; + sTransitionData->vblankDma = FALSE; + task->tSinIndex += 4; task->tAmplitude += 8; - BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], sTransitionStructPtr->bg123HOfs, task->tTheta, 2, task->tAmplitude, 160); + SetSinWave(gScanlineEffectRegBuffers[0], sTransitionData->cameraX, task->tSinIndex, 2, task->tAmplitude, 160); if (!gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(BT_Phase2DistortedWave)); - ++sTransitionStructPtr->vblankDma; + DestroyTask(FindTaskIdByFunc(Task_Swirl)); + sTransitionData->vblankDma++; return FALSE; } -static void VBCB_BT_Phase2DistortedWave(void) +static void VBlankCB_Swirl(void) { - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } -static void HBCB_BT_Phase2DistortedWave(void) +static void HBlankCB_Swirl(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -779,50 +808,62 @@ static void HBCB_BT_Phase2DistortedWave(void) REG_BG3HOFS = offset; } -static void BT_Phase2HorizontalCorrugate(u8 taskId) +#undef tSinIndex +#undef tAmplitude + +//---------------------- +// B_TRANSITION_SHUFFLE +//---------------------- + +#define tSinVal data[1] +#define tAmplitude data[2] + +static void Task_Shuffle(u8 taskId) { - while (sBT_Phase2HorizontalCorrugateFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sShuffle_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task) +static bool8 Shuffle_Init(struct Task *task) { - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 0x10, RGB_BLACK); - memset(gScanlineEffectRegBuffers[1], sTransitionStructPtr->bg123VOfs, 320); - SetVBlankCallback(VBCB_BT_Phase2HorizontalCorrugate); - SetHBlankCallback(HBCB_BT_Phase2HorizontalCorrugate); + BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 16, RGB_BLACK); + memset(gScanlineEffectRegBuffers[1], sTransitionData->cameraY, DISPLAY_HEIGHT * 2); + SetVBlankCallback(VBlankCB_Shuffle); + SetHBlankCallback(HBlankCB_Shuffle); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); - ++task->tState; + task->tState++; return FALSE; } -static bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) +static bool8 Shuffle_End(struct Task *task) { u8 i; - u16 theta, amplitude; + u16 sinVal, amplitude; - sTransitionStructPtr->vblankDma = FALSE; - theta = task->tTheta; + sTransitionData->vblankDma = FALSE; + sinVal = task->tSinVal; amplitude = task->tAmplitude >> 8; - task->tTheta += 4224; + task->tSinVal += 4224; task->tAmplitude += 384; - for (i = 0; i < 160; ++i, theta += 4224) - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(theta / 256, amplitude); + + for (i = 0; i < DISPLAY_HEIGHT; i++, sinVal += 4224) + gScanlineEffectRegBuffers[0][i] = sTransitionData->cameraY + Sin(sinVal / 256, amplitude); + if (!gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(BT_Phase2HorizontalCorrugate)); - ++sTransitionStructPtr->vblankDma; + DestroyTask(FindTaskIdByFunc(Task_Shuffle)); + sTransitionData->vblankDma++; return FALSE; } -static void VBCB_BT_Phase2HorizontalCorrugate(void) +static void VBlankCB_Shuffle(void) { - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } -static void HBCB_BT_Phase2HorizontalCorrugate(void) +static void HBlankCB_Shuffle(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -831,402 +872,425 @@ static void HBCB_BT_Phase2HorizontalCorrugate(void) REG_BG3VOFS = offset; } -#undef tTheta +#undef tSinVal #undef tAmplitude -#define tEvb data[1] -#define tEva data[2] -#define tInterval data[3] -#define tTheta data[4] -#define tAmplitude data[5] +//------------------------------------------------------------------------ +// B_TRANSITION_BIG_POKEBALL +// +// In Emerald, the "PatternWeave" effect of this transition is used +// by multiple different transitions. In FRLG it's unique to this one. +//------------------------------------------------------------------------ -static void BT_Phase2BigPokeball(u8 taskId) +#define tBlendTarget1 data[1] +#define tBlendTarget2 data[2] +#define tBlendDelay data[3] + +// Data 1-3 change purpose for PatternWeave_CircularMask +#define tRadius data[1] +#define tRadiusDelta data[2] +#define tVBlankSet data[3] + +#define tSinIndex data[4] +#define tAmplitude data[5] +#define tEndDelay data[8] + +static void Task_BigPokeball(u8 taskId) { - while (sBT_Phase2BigPokeballFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sBigPokeball_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2BigPokeball_Init(struct Task *task) -{ - u16 i, *tilemapAddr, *tilesetAddr; +// Separate function in Emerald +#define InitPatternWeaveTransition(task) \ +{ \ + u16 i; \ + InitTransitionData(); \ + ScanlineEffect_Clear(); \ + task->tBlendTarget1 = 16; \ + task->tBlendTarget2 = 0; \ + task->tSinIndex = 0; \ + task->tAmplitude = 0x4000; \ + sTransitionData->winIn = WININ_WIN0_ALL; \ + sTransitionData->winOut = 0; \ + sTransitionData->win0H = DISPLAY_WIDTH; \ + sTransitionData->win0V = DISPLAY_HEIGHT; \ + sTransitionData->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL; \ + sTransitionData->bldAlpha = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); \ + for (i = 0; i < DISPLAY_HEIGHT; i++) \ + gScanlineEffectRegBuffers[1][i] = DISPLAY_WIDTH; \ + SetVBlankCallback(VBlankCB_PatternWeave); \ +} - BT_InitCtrlBlk(); - ScanlineEffect_Clear(); - task->tEvb = 16; - task->tEva = 0; - task-> tTheta = 0; - task-> tAmplitude = 0x4000; - sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0H = WIN_RANGE(0, 0xF0); - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD; - sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; - for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = 0xF0; - SetVBlankCallback(VBCB_BT_Phase2BigPokeball1); - BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); - CpuFill16(0, tilemapAddr, 0x800); - CpuCopy16(sBigPokeballTileset, tilesetAddr, 0x580); - LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); - ++task->tState; +static bool8 BigPokeball_Init(struct Task *task) +{ + u16 *tilemap, *tileset; + + InitPatternWeaveTransition(task); + GetBg0TilesDst(&tilemap, &tileset); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); + CpuCopy16(sBigPokeball_Tileset, tileset, 0x580); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + task->tState++; return FALSE; } -static bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task) +static bool8 BigPokeball_SetGfx(struct Task *task) { s16 i, j; - u16 *tilemapAddr, *tilesetAddr; - const u16 *BigPokeballMap = sBigPokeballTilemap; + u16 *tilemap, *tileset; + const u16 *bigPokeballMap = sBigPokeball_Tilemap; - BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); - for (i = 0; i < 20; ++i) - for (j = 0; j < 30; ++j, ++BigPokeballMap) - tilemapAddr[i * 32 + j] = *BigPokeballMap | 0xF000; // use palette #15 - BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude, 160); - ++task->tState; + GetBg0TilesDst(&tilemap, &tileset); + for (i = 0; i < 20; i++) + for (j = 0; j < 30; j++, bigPokeballMap++) + SET_TILE(tilemap, i, j, *bigPokeballMap); + + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + task->tState++; return TRUE; } -static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) +static bool8 PatternWeave_Blend1(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - if (task->tInterval == 0 || --task->tInterval == 0) + sTransitionData->vblankDma = FALSE; + if (task->tBlendDelay == 0 || --task->tBlendDelay == 0) { - ++task->tEva; - task->tInterval = 1; // Broken logic. This makes the condition always TRUE. + task->tBlendTarget2++; + task->tBlendDelay = 1; // Broken logic. This makes the condition always TRUE. } - sTransitionStructPtr->bldAlpha = BLDALPHA_BLEND(task->tEva, task->tEvb); + sTransitionData->bldAlpha = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); // Increment eva until it reaches 50% coeff - if (task->tEva > 15) - ++task->tState; - task->tTheta += 12; + if (task->tBlendTarget2 > 15) + task->tState++; + task->tSinIndex += 12; task->tAmplitude -= 384; // Assign a very high frequency value so that 2 adjacent values in gScanlineEffectRegBuffers[0] will have different sign. - BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); - ++sTransitionStructPtr->vblankDma; + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) +static bool8 PatternWeave_Blend2(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - if (task->tInterval == 0 || --task->tInterval == 0) + sTransitionData->vblankDma = FALSE; + if (task->tBlendDelay == 0 || --task->tBlendDelay == 0) { - --task->tEvb; - task->tInterval = 2; + task->tBlendTarget1--; + task->tBlendDelay = 2; } - sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; - if (!task->tEvb) - ++task->tState; + sTransitionData->bldAlpha = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); + if (task->tBlendTarget1 == 0) + task->tState++; if (task->tAmplitude > 0) { - task->tTheta += 12; + task->tSinIndex += 12; task->tAmplitude -= 384; } else { task->tAmplitude = 0; } - BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); - ++sTransitionStructPtr->vblankDma; + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); + sTransitionData->vblankDma++; return FALSE; } -#undef tEvb -#undef tEva -#undef tInterval - -#define tRadius data[1] -#define tDeltaRadius data[2] -#define tKeepVBCB data[3] - -static bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) +static bool8 PatternWeave_FinishAppear(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; + sTransitionData->vblankDma = FALSE; if (task->tAmplitude > 0) { - task->tTheta += 12; + task->tSinIndex += 12; task->tAmplitude -= 384; } else { task->tAmplitude = 0; } - BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); if (task->tAmplitude <= 0) { - ++task->tState; - task->tRadius = 160; - task->tDeltaRadius = 256; - task->tKeepVBCB = 0; + task->tState++; + task->tRadius = DISPLAY_HEIGHT; + task->tRadiusDelta = 1 << 8; + task->tVBlankSet = FALSE; } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) +// Do a shrinking circular mask to go to a black screen after the pattern appears. +static bool8 PatternWeave_CircularMask(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - if (task->tDeltaRadius < 2048) - task->tDeltaRadius += 256; - if (task->tRadius) + sTransitionData->vblankDma = FALSE; + if (task->tRadiusDelta < (8 << 8)) + task->tRadiusDelta += (1 << 8); + if (task->tRadius != 0) { - task->tRadius -= (task->tDeltaRadius >> 8); + task->tRadius -= (task->tRadiusDelta >> 8); if (task->tRadius < 0) task->tRadius = 0; } - BT_GenerateCircle(gScanlineEffectRegBuffers[0], 120, 80, task->tRadius); + SetCircularMask(gScanlineEffectRegBuffers[0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, task->tRadius); if (task->tRadius == 0) { DmaStop(0); - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2BigPokeball)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_BigPokeball)); // FindTaskIdByFunc(task->func) in Emerald to accomdate other functions } - if (task->tKeepVBCB == 0) + if (!task->tVBlankSet) { - ++task->tKeepVBCB; - SetVBlankCallback(VBCB_BT_Phase2BigPokeball2); + task->tVBlankSet++; + SetVBlankCallback(VBlankCB_CircularMask); } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) +static void VBlankCB_SetWinAndBlend(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); - SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); - SetGpuReg(REG_OFFSET_BLDALPHA, sTransitionStructPtr->bldAlpha); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionData->bldCnt); + SetGpuReg(REG_OFFSET_BLDALPHA, sTransitionData->bldAlpha); } -static void VBCB_BT_Phase2BigPokeball1(void) +static void VBlankCB_PatternWeave(void) { - BT_VBStopDma0SyncSrcBufferSetLcdRegs(); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_SetWinAndBlend(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, B_TRANS_DMA_FLAGS); } -static void VBCB_BT_Phase2BigPokeball2(void) +static void VBlankCB_CircularMask(void) { - BT_VBStopDma0SyncSrcBufferSetLcdRegs(); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_SetWinAndBlend(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -#undef tRadius -#undef tDeltaRadius -#undef tKeepVBCB -#undef tTheta #undef tAmplitude +#undef tSinIndex +#undef tBlendTarget1 +#undef tBlendTarget2 +#undef tRadius +#undef tRadiusDelta +#undef tVBlankSet -// TODO: Document this effect after knowing more about field effects. -static void BT_Phase2SlidingPokeballs(u8 taskId) +//------------------------------ +// B_TRANSITION_POKEBALLS_TRAIL +//------------------------------ + +#define sSide data[0] +#define sDelay data[1] +#define sPrevX data[2] + +static void Task_PokeballsTrail(u8 taskId) { - while (sBT_Phase2SlidingPokeballsFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sPokeballsTrail_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task) +static bool8 PokeballsTrail_Init(struct Task *task) { - u16 *tilemapAddr, *tilesetAddr; + u16 *tilemap, *tileset; - BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); - CpuCopy16(sSlidingPokeballTilemap, tilesetAddr, 0x40); - CpuFill32(0, tilemapAddr, 0x800); - LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); - ++task->tState; + GetBg0TilesDst(&tilemap, &tileset); + CpuCopy16(sPokeballTrail_Tileset, tileset, 0x40); + CpuFill32(0, tilemap, BG_SCREEN_SIZE); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + task->tState++; return FALSE; } -static bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task) +static bool8 PokeballsTrail_Main(struct Task *task) { - s16 i, rand; - s16 arr0[NELEMS(gUnknown_83FA400)]; - s16 arr1[NELEMS(gUnknown_83FA404)]; + s16 i, side; + s16 startX[ARRAY_COUNT(sPokeballsTrail_StartXCoords)]; + s16 delays[ARRAY_COUNT(sPokeballsTrail_Delays)]; + memcpy(startX, sPokeballsTrail_StartXCoords, sizeof(sPokeballsTrail_StartXCoords)); + memcpy(delays, sPokeballsTrail_Delays, sizeof(sPokeballsTrail_Delays)); - memcpy(arr0, gUnknown_83FA400, sizeof(gUnknown_83FA400)); - memcpy(arr1, gUnknown_83FA404, sizeof(gUnknown_83FA404)); - rand = Random() & 1; - for (i = 0; i <= 4; ++i, rand ^= 1) + // Randomly pick which side the first ball should start on. + // The side is then flipped for each subsequent ball. + side = Random() & 1; + for (i = 0; i < NUM_POKEBALL_TRAILS; i++, side ^= 1) { - gFieldEffectArguments[0] = arr0[rand]; // x + gFieldEffectArguments[0] = startX[side]; // x gFieldEffectArguments[1] = (i * 32) + 16; // y - gFieldEffectArguments[2] = rand; - gFieldEffectArguments[3] = arr1[i]; + gFieldEffectArguments[2] = side; + gFieldEffectArguments[3] = delays[i]; FieldEffectStart(FLDEFF_POKEBALL); } - ++task->tState; + task->tState++; return FALSE; } -static bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task) +static bool8 PokeballsTrail_End(struct Task *task) { if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) { - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2SlidingPokeballs)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_PokeballsTrail)); } return FALSE; } -bool8 FldEff_Pokeball(void) +bool8 FldEff_PokeballTrail(void) { - u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_SlidingPokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Pokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].data[0] = gFieldEffectArguments[2]; - gSprites[spriteId].data[1] = gFieldEffectArguments[3]; - gSprites[spriteId].data[2] = -1; + gSprites[spriteId].sSide = gFieldEffectArguments[2]; + gSprites[spriteId].sDelay = gFieldEffectArguments[3]; + gSprites[spriteId].sPrevX = -1; InitSpriteAffineAnim(&gSprites[spriteId]); StartSpriteAffineAnim(&gSprites[spriteId], gFieldEffectArguments[2]); return FALSE; } -#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ -{ \ - u32 index = (posY) * 32 + posX; \ - ptr[index] = toStore; \ -} - -static void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite) +static void SpriteCB_FldEffPokeballTrail(struct Sprite *sprite) { - s16 arr0[NELEMS(gUnknown_83FA40E)]; + s16 speeds[ARRAY_COUNT(sPokeballsTrail_Speeds)]; + memcpy(speeds, sPokeballsTrail_Speeds, sizeof(sPokeballsTrail_Speeds)); - memcpy(arr0, gUnknown_83FA40E, sizeof(gUnknown_83FA40E)); - if (sprite->data[1]) + if (sprite->sDelay) { - --sprite->data[1]; + sprite->sDelay--; } else { - if ((u16)sprite->x <= 240) + if (sprite->x >= 0 && sprite->x <= DISPLAY_WIDTH) { + // Set Pokéball position s16 posX = sprite->x >> 3; s16 posY = sprite->y >> 3; - if (posX != sprite->data[2]) + // If Pokéball moved forward clear trail behind it + if (posX != sprite->sPrevX) { u16 *ptr; - sprite->data[2] = posX; + sprite->sPrevX = posX; ptr = (u16 *)BG_SCREEN_ADDR((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) & 0x1F); - SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001); - SOME_VRAM_STORE(ptr, posY - 1, posX, 0xF001); - SOME_VRAM_STORE(ptr, posY - 0, posX, 0xF001); - SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001); + SET_TILE(ptr, posY - 2, posX, 1); + SET_TILE(ptr, posY - 1, posX, 1); + SET_TILE(ptr, posY - 0, posX, 1); + SET_TILE(ptr, posY + 1, posX, 1); } } - sprite->x += arr0[sprite->data[0]]; - if (sprite->x < -15 || sprite->x > 255) + sprite->x += speeds[sprite->sSide]; + if (sprite->x < -15 || sprite->x > DISPLAY_WIDTH + 15) FieldEffectStop(sprite, FLDEFF_POKEBALL); } } -#define trStartPtX data[0] -#define trStartPtY data[1] -#define trCurrentPtX data[2] -#define trCurrentPtY data[3] -#define trEndPtX data[4] -#define trEndPtY data[5] +#undef sSide +#undef sDelay +#undef sPrevX -static void BT_Phase2ClockwiseBlackFade(u8 taskId) +//----------------------------- +// B_TRANSITION_CLOCKWISE_WIPE +//----------------------------- + +static void Task_ClockwiseWipe(u8 taskId) { - while (sBT_Phase2ClockwiseBlackFadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sClockwiseWipe_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) +static bool8 ClockwiseWipe_Init(struct Task *task) { u16 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->winIn = 0; - sTransitionStructPtr->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; - sTransitionStructPtr->win0H = WIN_RANGE(0xF0, 0xF1); - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0xF3, 0xF4); - SetVBlankCallback(VBCB_BT_Phase2ClockwiseBlackFade); - sTransitionStructPtr->trEndPtX = 120; - ++task->tState; + sTransitionData->winIn = 0; + sTransitionData->winOut = WINOUT_WIN01_ALL; + sTransitionData->win0H = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); + sTransitionData->win0V = DISPLAY_HEIGHT; + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = WIN_RANGE(DISPLAY_WIDTH + 3, DISPLAY_WIDTH + 4); + SetVBlankCallback(VBlankCB_ClockwiseWipe); + sTransitionData->tWipeEndX = DISPLAY_WIDTH / 2; + task->tState++; return TRUE; } -static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) +static bool8 ClockwiseWipe_TopRight(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, -1, 1, 1); + sTransitionData->vblankDma = FALSE; + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, -1, 1, 1); do { - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE(0x78, sTransitionStructPtr->trCurrentPtX + 1); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = WIN_RANGE(DISPLAY_WIDTH / 2, sTransitionData->tWipeCurrX + 1); } - while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + while (!UpdateBlackWipe(sTransitionData->data, TRUE, TRUE)); - sTransitionStructPtr->trEndPtX += 32; - if (sTransitionStructPtr->trEndPtX >= 240) + sTransitionData->tWipeEndX += 32; + if (sTransitionData->tWipeEndX >= DISPLAY_WIDTH) { - sTransitionStructPtr->trEndPtY = 0; - ++task->tState; + sTransitionData->tWipeEndY = 0; + task->tState++; } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) +static bool8 ClockwiseWipe_Right(struct Task *task) { - s16 left, right; + s16 start, end; vu8 finished = FALSE; - sTransitionStructPtr->vblankDma = FALSE; - BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, 240, sTransitionStructPtr->trEndPtY, 1, 1); + sTransitionData->vblankDma = FALSE; + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, DISPLAY_WIDTH, sTransitionData->tWipeEndY, 1, 1); while (TRUE) { - left = 120; - right = sTransitionStructPtr->trCurrentPtX + 1; - if (sTransitionStructPtr->trEndPtY >= 80) + start = DISPLAY_WIDTH / 2; + end = sTransitionData->tWipeCurrX + 1; + if (sTransitionData->tWipeEndY >= DISPLAY_HEIGHT / 2) { - left = sTransitionStructPtr->trCurrentPtX; - right = 240; + start = sTransitionData->tWipeCurrX; + end = DISPLAY_WIDTH; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = WIN_RANGE2(start, end); if (finished) break; - finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + finished = UpdateBlackWipe(sTransitionData->data, TRUE, TRUE); } - sTransitionStructPtr->trEndPtY += 16; - if (sTransitionStructPtr->trEndPtY >= 160) + sTransitionData->tWipeEndY += 16; + if (sTransitionData->tWipeEndY >= DISPLAY_HEIGHT) { - sTransitionStructPtr->trEndPtX = 240; - ++task->tState; + sTransitionData->tWipeEndX = DISPLAY_WIDTH; + task->tState++; } else { - while (sTransitionStructPtr->trCurrentPtY < sTransitionStructPtr->trEndPtY) - gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); + while (sTransitionData->tWipeCurrY < sTransitionData->tWipeEndY) + gScanlineEffectRegBuffers[0][++sTransitionData->tWipeCurrY] = WIN_RANGE2(start, end); } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) +static bool8 ClockwiseWipe_Bottom(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 160, 1, 1); + sTransitionData->vblankDma = FALSE; + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, DISPLAY_HEIGHT, 1, 1); do { - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX << 8) | 0xF0; + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = (sTransitionData->tWipeCurrX << 8) | DISPLAY_WIDTH; } - while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); - sTransitionStructPtr->trEndPtX -= 32; - if (sTransitionStructPtr->trEndPtX <= 0) + while (!UpdateBlackWipe(sTransitionData->data, TRUE, TRUE)); + sTransitionData->tWipeEndX -= 32; + if (sTransitionData->tWipeEndX <= 0) { - sTransitionStructPtr->trEndPtY = 160; - ++task->tState; + sTransitionData->tWipeEndY = DISPLAY_HEIGHT; + task->tState++; } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } @@ -1238,166 +1302,158 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) * 1. With current setup, nothing is displayed inside WIN0 and everything * is displayed outside WIN0. Thus, if the rotation angle is > 1.5π, it * won't be able to handle the situation. - * 2. The programmer sometimes swapped the place of left and right boundary - * of WIN0 (see variables left and right), which will sometimes cause right - * to be smaller than left. In this way, garbage data will be written to WIN0H. + * 2. The programmer sometimes swapped the place of start and end boundary + * of WIN0 (see variables start and end), which will sometimes cause end + * to be smaller than start. In this way, garbage data will be written to WIN0H. */ -static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) +static bool8 ClockwiseWipe_Left(struct Task *task) { - s16 right, left; + s16 end, start; u16 win0H; vu8 finished = FALSE; - sTransitionStructPtr->vblankDma = FALSE; - BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, 0, sTransitionStructPtr->trEndPtY, 1, 1); + sTransitionData->vblankDma = FALSE; + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0, sTransitionData->tWipeEndY, 1, 1); while (TRUE) { - right = (gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY]) & 0xFF; - left = sTransitionStructPtr->trCurrentPtX; - if (sTransitionStructPtr->trEndPtY <= 80) + end = (gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY]) & 0xFF; + start = sTransitionData->tWipeCurrX; + if (sTransitionData->tWipeEndY <= DISPLAY_HEIGHT / 2) { - left = 120; - right = sTransitionStructPtr->trCurrentPtX; + start = DISPLAY_WIDTH / 2; + end = sTransitionData->tWipeCurrX; } - win0H = WIN_RANGE2(left, right); - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = win0H; + win0H = WIN_RANGE2(start, end); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = win0H; if (finished) break; - finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + finished = UpdateBlackWipe(sTransitionData->data, TRUE, TRUE); } - sTransitionStructPtr->trEndPtY -= 16; - if (sTransitionStructPtr->trEndPtY <= 0) + sTransitionData->tWipeEndY -= 16; + if (sTransitionData->tWipeEndY <= 0) { - sTransitionStructPtr->trEndPtX = 0; - ++task->tState; + sTransitionData->tWipeEndX = 0; + task->tState++; } else { - while (sTransitionStructPtr->trCurrentPtY > sTransitionStructPtr->trEndPtY) - gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); + while (sTransitionData->tWipeCurrY > sTransitionData->tWipeEndY) + gScanlineEffectRegBuffers[0][--sTransitionData->tWipeCurrY] = WIN_RANGE2(start, end); } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) +static bool8 ClockwiseWipe_TopLeft(struct Task *task) { - s16 left, right; - - sTransitionStructPtr->vblankDma = FALSE; - BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 0, 1, 1); + sTransitionData->vblankDma = FALSE; + InitBlackWipe(sTransitionData->data, 120, 80, sTransitionData->tWipeEndX, 0, 1, 1); do { - left = 120; - right = sTransitionStructPtr->trCurrentPtX; - if (sTransitionStructPtr->trCurrentPtX >= 120) + s16 start = DISPLAY_WIDTH / 2; + s16 end = sTransitionData->tWipeCurrX; + if (sTransitionData->tWipeCurrX >= 120) { - left = 0; - right = 240; + start = 0; + end = DISPLAY_WIDTH; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = WIN_RANGE2(start, end); } - while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); - sTransitionStructPtr->trEndPtX += 32; - if (sTransitionStructPtr->trCurrentPtX > 120) - ++task->tState; - ++sTransitionStructPtr->vblankDma; + while (!UpdateBlackWipe(sTransitionData->data, TRUE, TRUE)); + sTransitionData->tWipeEndX += 32; + if (sTransitionData->tWipeCurrX > DISPLAY_WIDTH / 2) + task->tState++; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) +static bool8 ClockwiseWipe_End(struct Task *task) { DmaStop(0); - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2ClockwiseBlackFade)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_ClockwiseWipe)); return FALSE; } -static void VBCB_BT_Phase2ClockwiseBlackFade(void) +static void VBlankCB_ClockwiseWipe(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -#undef trStartPtX -#undef trStartPtY -#undef trCurrentPtX -#undef trCurrentPtY -#undef trEndPtX -#undef trEndPtY +//--------------------- +// B_TRANSITION_RIPPLE +//--------------------- -#define tTheta data[1] -#define tAmplitude data[2] -#define tDelayForFade data[3] -#define tStartFade data[4] +#define tSinVal data[1] +#define tAmplitude data[2] +#define tTimer data[3] +#define tFadeStarted data[4] -static void BT_Phase2FullScreenWave(u8 taskId) +static void Task_Ripple(u8 taskId) { - while (sBT_Phase2FullScreenWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRipple_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2FullScreenWave_Init(struct Task *task) +static bool8 Ripple_Init(struct Task *task) { u8 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123VOfs; - SetVBlankCallback(VBCB_BT_Phase2FullScreenWave); - SetHBlankCallback(HBCB_BT_Phase2FullScreenWave); + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = sTransitionData->cameraY; + SetVBlankCallback(VBlankCB_Ripple); + SetHBlankCallback(HBlankCB_Ripple); EnableInterrupts(INTR_FLAG_HBLANK); - ++task->tState; + task->tState++; return TRUE; } -static bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) +static bool8 Ripple_Main(struct Task *task) { u8 i; s16 amplitude; - u16 theta, frequency; + u16 sinVal, speed; - sTransitionStructPtr->vblankDma = FALSE; + sTransitionData->vblankDma = FALSE; amplitude = task->tAmplitude >> 8; - theta = task->tTheta; - frequency = 384; - task->tTheta += 0x400; + sinVal = task->tSinVal; + speed = 384; + task->tSinVal += 0x400; if (task->tAmplitude <= 0x1FFF) task->tAmplitude += 384; - for (i = 0; i < 160; ++i, theta += frequency) + for (i = 0; i < DISPLAY_HEIGHT; i++, sinVal += speed) { - s16 var = theta >> 8; - - ++var; - --var; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(var, amplitude); + s16 sinIndex = sinVal >> 8; + gScanlineEffectRegBuffers[0][i] = sTransitionData->cameraY + Sin(sinIndex & 0xFFFF, amplitude); } - if (++task->tDelayForFade == 41) + if (++task->tTimer == 41) { - ++task->tStartFade; - BeginNormalPaletteFade(PALETTES_ALL, -8, 0, 0x10, RGB_BLACK); + task->tFadeStarted++; + BeginNormalPaletteFade(PALETTES_ALL, -8, 0, 16, RGB_BLACK); } - if (task->tStartFade && !gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(BT_Phase2FullScreenWave)); - ++sTransitionStructPtr->vblankDma; + if (task->tFadeStarted && !gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(Task_Ripple)); + sTransitionData->vblankDma++; return FALSE; } -static void VBCB_BT_Phase2FullScreenWave(void) +static void VBlankCB_Ripple(void) { - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } -static void HBCB_BT_Phase2FullScreenWave(void) +static void HBlankCB_Ripple(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -1406,107 +1462,113 @@ static void HBCB_BT_Phase2FullScreenWave(void) REG_BG3VOFS = offset; } -#undef tTheta -#undef tAmplitude -#undef tDelayForFade -#undef tStartFade +#undef tSinVal +#undef tAmplitudeVal +#undef tTimer +#undef tFadeStarted -#define tOffset data[1] -#define tTheta data[2] +//------------------- +// B_TRANSITION_WAVE +//------------------- -static void BT_Phase2BlackWaveToRight(u8 taskId) +#define tX data[1] +#define tSinIndex data[2] + +static void Task_Wave(u8 taskId) { - while (sBT_Phase2BlackWaveToRightFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sWave_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) +static bool8 Wave_Init(struct Task *task) { u8 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0H = WIN_RANGE(0, 0xF0); - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0, 0xF2); - SetVBlankCallback(VBCB_BT_Phase2BlackWaveToRight); - ++task->tState; + sTransitionData->winIn = WININ_WIN0_ALL; + sTransitionData->winOut = 0; + sTransitionData->win0H = DISPLAY_WIDTH; + sTransitionData->win0V = DISPLAY_HEIGHT; + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = DISPLAY_WIDTH + 2; + SetVBlankCallback(VBlankCB_Wave); + task->tState++; return TRUE; } -static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) +static bool8 Wave_Main(struct Task *task) { - u8 i, theta; + u8 i, sinIndex; u16 *winVal; - bool8 nextFunc; + bool8 finished; - sTransitionStructPtr->vblankDma = FALSE; + sTransitionData->vblankDma = FALSE; winVal = gScanlineEffectRegBuffers[0]; - theta = task->tTheta; - task->tTheta += 16; - task->tOffset += 8; - for (i = 0, nextFunc = TRUE; i < 160; ++i, theta += 4, ++winVal) + sinIndex = task->tSinIndex; + task->tSinIndex += 16; + task->tX += 8; + for (i = 0, finished = TRUE; i < DISPLAY_HEIGHT; i++, sinIndex += 4, winVal++) { - s16 left = task->tOffset + Sin(theta, 40); - if (left < 0) - left = 0; - if (left > 240) - left = 240; - *winVal = WIN_RANGE(left, 0xF1); - if (left < 240) - nextFunc = FALSE; + s16 x = task->tX + Sin(sinIndex, 40); + if (x < 0) + x = 0; + if (x > DISPLAY_WIDTH) + x = DISPLAY_WIDTH; + *winVal = WIN_RANGE(x, DISPLAY_WIDTH + 1); + if (x < DISPLAY_WIDTH) + finished = FALSE; } - if (nextFunc) - ++task->tState; - ++sTransitionStructPtr->vblankDma; + if (finished) + task->tState++; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) +static bool8 Wave_End(struct Task *task) { DmaStop(0); - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2BlackWaveToRight)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_Wave)); return FALSE; } -static void VBCB_BT_Phase2BlackWaveToRight(void) +static void VBlankCB_Wave(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -#undef tOffset -#undef tTheta +#undef tX +#undef tSinIndex -// Unused +//--------------------- +// B_TRANSITION_SPIRAL +//--------------------- -static void BT_Phase2AntiClockwiseSpiral(u8 taskId) +static void Task_Spiral(u8 taskId) { - while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void BT_AntiClockwiseSpiral_DoUpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe) +static void Spiral_UpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe) { - u8 theta = 0; + u8 sinIndex = 0; s16 i, amplitude1, amplitude2; s16 y1, x1, y2, x2; - for (i = 320; i < 960; ++i) - gScanlineEffectRegBuffers[1][i] = 120; + for (i = DISPLAY_HEIGHT * 2; i < DISPLAY_HEIGHT * 6; i++) + gScanlineEffectRegBuffers[1][i] = DISPLAY_WIDTH / 2; - for (i = 0; i < (deltaAngleMax * 16); ++i, ++theta) + for (i = 0; i < (deltaAngleMax * 16); i++, sinIndex++) { - amplitude1 = initRadius + (theta >> 3); - if ((theta >> 3) != ((theta + 1) >> 3)) + amplitude1 = initRadius + (sinIndex >> 3); + if ((sinIndex >> 3) != ((sinIndex + 1) >> 3)) { amplitude2 = amplitude1 + 1; } @@ -1515,28 +1577,28 @@ static void BT_AntiClockwiseSpiral_DoUpdateFrame(s16 initRadius, s16 deltaAngleM amplitude2 = amplitude1; } - y1 = 80 - Sin(theta, amplitude1); - x1 = Cos(theta, amplitude1) + 120; - y2 = 80 - Sin(theta + 1, amplitude2); - x2 = Cos(theta + 1, amplitude2) + 120; + y1 = DISPLAY_HEIGHT / 2 - Sin(sinIndex, amplitude1); + x1 = Cos(sinIndex, amplitude1) + DISPLAY_WIDTH / 2; + y2 = DISPLAY_HEIGHT / 2 - Sin(sinIndex + 1, amplitude2); + x2 = Cos(sinIndex + 1, amplitude2) + DISPLAY_WIDTH / 2; if (y1 < 0 && y2 < 0) continue; - if (y1 > 159 && y2 > 159) + if (y1 > DISPLAY_HEIGHT - 1 && y2 > DISPLAY_HEIGHT - 1) continue; if (y1 < 0) y1 = 0; - if (y1 > 159) - y1 = 159; + if (y1 > DISPLAY_HEIGHT - 1) + y1 = DISPLAY_HEIGHT - 1; if (x1 < 0) x1 = 0; if (x1 > 255) x1 = 255; if (y2 < 0) y2 = 0; - if (y2 > 159) - y2 = 159; + if (y2 > DISPLAY_HEIGHT - 1) + y2 = DISPLAY_HEIGHT - 1; if (x2 < 0) x2 = 0; if (x2 > 255) @@ -1544,54 +1606,53 @@ static void BT_AntiClockwiseSpiral_DoUpdateFrame(s16 initRadius, s16 deltaAngleM y2 -= y1; - if (theta >= 64 && theta < 192) + if (sinIndex >= 64 && sinIndex < 64 * 3) { - gScanlineEffectRegBuffers[1][y1 + 320] = x1; + gScanlineEffectRegBuffers[1][y1 + DISPLAY_HEIGHT * 2] = x1; if (y2 == 0) continue; x2 -= x1; if (x2 < -1 && x1 > 1) - --x1; + x1--; else if (x2 > 1 && x1 < 255) - ++x1; + x1++; if (y2 < 0) for (; y2 < 0; y2++) - gScanlineEffectRegBuffers[1][y1 + y2 + 320] = x1; + gScanlineEffectRegBuffers[1][y1 + y2 + DISPLAY_HEIGHT * 2] = x1; else for (; y2 > 0; y2--) - gScanlineEffectRegBuffers[1][y1 + y2 + 320] = x1; + gScanlineEffectRegBuffers[1][y1 + y2 + DISPLAY_HEIGHT * 2] = x1; } else { - gScanlineEffectRegBuffers[1][y1 + 480] = x1; + gScanlineEffectRegBuffers[1][y1 + DISPLAY_HEIGHT * 3] = x1; if (y2 == 0) continue; x2 -= x1; if (x2 < -1 && x1 > 1) - --x1; + x1--; else if (x2 > 1 && x1 < 255) - ++x1; + x1++; if (y2 < 0) for (; y2 < 0; y2++) - gScanlineEffectRegBuffers[1][y1 + y2 + 480] = x1; + gScanlineEffectRegBuffers[1][y1 + y2 + DISPLAY_HEIGHT * 3] = x1; else for (; y2 > 0; y2--) - gScanlineEffectRegBuffers[1][y1 + y2 + 480] = x1; + gScanlineEffectRegBuffers[1][y1 + y2 + DISPLAY_HEIGHT * 3] = x1; } } if (offsetMaybe == 0 || deltaAngleMax % 4 == 0) { - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i * 2 + offsetMaybe] = gScanlineEffectRegBuffers[1][i + 320] << 8 | gScanlineEffectRegBuffers[1][i + 480]; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i * 2 + offsetMaybe] = gScanlineEffectRegBuffers[1][i + DISPLAY_HEIGHT * 2] << 8 + | gScanlineEffectRegBuffers[1][i + DISPLAY_HEIGHT * 3]; return; } @@ -1600,61 +1661,61 @@ static void BT_AntiClockwiseSpiral_DoUpdateFrame(s16 initRadius, s16 deltaAngleM switch (deltaAngleMax / 4) { case 0: - if (y1 > 80) - y1 = 80; + if (y1 > DISPLAY_HEIGHT / 2) + y1 = DISPLAY_HEIGHT / 2; for (i = y1; i > 0; i--) { - sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; if (x1 < 0 || x1 > 255) continue; - sTransitionStructPtr->bg123HOfs = 400 - i; - sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + sTransitionData->cameraX = 400 - i; + sTransitionData->data[10] = gScanlineEffectRegBuffers[1][400 - i]; if (gScanlineEffectRegBuffers[1][560 - i] < x1) - gScanlineEffectRegBuffers[1][560 - i] = 120; + gScanlineEffectRegBuffers[1][560 - i] = DISPLAY_WIDTH / 2; else if (gScanlineEffectRegBuffers[1][400 - i] < x1) gScanlineEffectRegBuffers[1][400 - i] = x1; } break; case 1: - if (y1 > 80) - y1 = 80; + if (y1 > DISPLAY_HEIGHT / 2) + y1 = DISPLAY_HEIGHT / 2; for (i = y1; i > 0; i--) { - sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; if (x1 < 0 || x1 > 255) continue; - sTransitionStructPtr->bg123HOfs = 400 - i; - sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + sTransitionData->cameraX = 400 - i; + sTransitionData->data[10] = gScanlineEffectRegBuffers[1][400 - i]; if (gScanlineEffectRegBuffers[1][400 - i] < x1) gScanlineEffectRegBuffers[1][400 - i] = x1; } break; case 2: - if (y1 < -79) - y1 = -79; + if (y1 < -(DISPLAY_HEIGHT / 2 - 1)) + y1 = -(DISPLAY_HEIGHT / 2 - 1); for (i = y1; i <= 0; i++) { - sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; if (x1 < 0 || x1 > 255) continue; - sTransitionStructPtr->bg123HOfs = 560 - i; - sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; + sTransitionData->cameraX = 560 - i; + sTransitionData->data[10] = gScanlineEffectRegBuffers[1][560 - i]; if (gScanlineEffectRegBuffers[1][400 - i] >= x1) - gScanlineEffectRegBuffers[1][400 - i] = 120; + gScanlineEffectRegBuffers[1][400 - i] = DISPLAY_WIDTH / 2; else if (gScanlineEffectRegBuffers[1][560 - i] > x1) gScanlineEffectRegBuffers[1][560 - i] = x1; } break; case 3: - if (y1 < -79) - y1 = -79; + if (y1 < -(DISPLAY_HEIGHT / 2 - 1)) + y1 = -(DISPLAY_HEIGHT / 2 - 1); for (i = y1; i <= 0; i++) { - sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; if (x1 < 0 || x1 > 255) continue; - sTransitionStructPtr->bg123HOfs = 560 - i; - sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; + sTransitionData->cameraX = 560 - i; + sTransitionData->data[10] = gScanlineEffectRegBuffers[1][560 - i]; if (gScanlineEffectRegBuffers[1][560 - i] > x1) gScanlineEffectRegBuffers[1][560 - i] = x1; } @@ -1663,583 +1724,645 @@ static void BT_AntiClockwiseSpiral_DoUpdateFrame(s16 initRadius, s16 deltaAngleM break; } - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i * 2 + offsetMaybe] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i * 2 + offsetMaybe] = (gScanlineEffectRegBuffers[1][i + DISPLAY_HEIGHT * 2] << 8) + | gScanlineEffectRegBuffers[1][i + DISPLAY_HEIGHT * 3]; } -static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) +static bool8 Spiral_Init(struct Task *task) { - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->winIn = 0; - sTransitionStructPtr->winOut = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->win0H = WIN_RANGE(0x78, 0x78); - sTransitionStructPtr->win0V = WIN_RANGE(0x30, 0x70); - sTransitionStructPtr->win1V = WIN_RANGE(0x10, 0x90); - sTransitionStructPtr->counter = 0; - BT_AntiClockwiseSpiral_DoUpdateFrame(0, 0, 0); - BT_AntiClockwiseSpiral_DoUpdateFrame(0, 0, 1); - DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); - SetVBlankCallback(VBCB_BT_Phase2AntiClockwiseBlackFade); - ++task->tState; + sTransitionData->winIn = 0; + sTransitionData->winOut = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sTransitionData->win0H = WIN_RANGE(DISPLAY_WIDTH / 2, DISPLAY_WIDTH / 2); + sTransitionData->win0V = WIN_RANGE(48, DISPLAY_HEIGHT - 48); + sTransitionData->win1V = WIN_RANGE(16, DISPLAY_HEIGHT - 16); + sTransitionData->counter = 0; + Spiral_UpdateFrame(0, 0, 0); + Spiral_UpdateFrame(0, 0, 1); + DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], DISPLAY_HEIGHT * 4); + SetVBlankCallback(VBlankCB_Spiral); + task->tState++; task->data[1] = 0; task->data[2] = 0; return FALSE; } -static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) +static bool8 Spiral_End(struct Task *task) { s16 win_top, win_bottom; - BT_AntiClockwiseSpiral_DoUpdateFrame(task->data[2], task->data[1], 1); - sTransitionStructPtr->vblankDma |= TRUE; + Spiral_UpdateFrame(task->data[2], task->data[1], 1); + sTransitionData->vblankDma |= TRUE; if (++task->data[1] == 17) { - BT_AntiClockwiseSpiral_DoUpdateFrame(task->data[2], 16, 0); + Spiral_UpdateFrame(task->data[2], 16, 0); win_top = 48 - task->data[2]; if (win_top < 0) win_top = 0; win_bottom = task->data[2] + 112; if (win_bottom > 255) win_bottom = 255; - sTransitionStructPtr->win0V = win_top | win_bottom; // UB: win_top should be shifted + sTransitionData->win0V = win_top | win_bottom; // UB: win_top should be shifted task->data[2] += 32; task->data[1] = 0; - BT_AntiClockwiseSpiral_DoUpdateFrame(task->data[2], 0, 1); + Spiral_UpdateFrame(task->data[2], 0, 1); win_top = 48 - task->data[2]; if (win_top < 0) win_top = 0; win_bottom = task->data[2] + 112; if (win_bottom > 255) win_bottom = 255; - sTransitionStructPtr->win1V = win_top | win_bottom; // UB: win_top should be shifted - sTransitionStructPtr->vblankDma |= TRUE; - if (task->data[2] > 159) + sTransitionData->win1V = win_top | win_bottom; // UB: win_top should be shifted + sTransitionData->vblankDma |= TRUE; + if (task->data[2] >= DISPLAY_HEIGHT) { - sTransitionStructPtr->counter = 1; - BT_BlendPalettesToBlack(); + sTransitionData->counter = 1; + FadeScreenBlack(); } } return FALSE; } -static void VBCB_BT_Phase2AntiClockwiseBlackFade(void) +static void VBlankCB_Spiral(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->counter) + VBlankCB_BattleTransition(); + if (sTransitionData->counter) { - DestroyTask(FindTaskIdByFunc(BT_Phase2AntiClockwiseSpiral)); + DestroyTask(FindTaskIdByFunc(Task_Spiral)); } else { - if (sTransitionStructPtr->vblankDma) + if (sTransitionData->vblankDma) { - DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); - sTransitionStructPtr->vblankDma = FALSE; + DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], DISPLAY_HEIGHT * 4); + sTransitionData->vblankDma = FALSE; } - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); - SetGpuReg(REG_OFFSET_WIN1V, sTransitionStructPtr->win1V); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); + SetGpuReg(REG_OFFSET_WIN1V, sTransitionData->win1V); SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[0][0]); SetGpuReg(REG_OFFSET_WIN1H, gScanlineEffectRegBuffers[0][1]); - DmaSet(0, gScanlineEffectRegBuffers[0], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + DmaSet(0, gScanlineEffectRegBuffers[0], ®_WIN0H, (DMA_32BIT << 16) | B_TRANS_DMA_FLAGS); } } -#define tTheta data[1] -#define tbg0HOfsOpponent data[2] -#define tbg0HOfsPlayer data[3] -#define tCounter data[3] -#define tHalfBandwidth data[4] +//---------------------------------------------------------------- +// B_TRANSITION_LORELEI, B_TRANSITION_BRUNO, B_TRANSITION_AGATHA, +// B_TRANSITION_LANCE, and B_TRANSITION_BLUE +// +// These are all the "mugshot" transitions, where a banner shows +// the trainer pic of the player and their opponent. +//---------------------------------------------------------------- + +#define tSinIndex data[1] +#define tTopBannerX data[2] +#define tBottomBannerX data[3] +#define tTimer data[3] // Re-used +#define tFadeSpread data[4] #define tOpponentSpriteId data[13] -#define tPlayerSpriteId data[14] -#define tWhichMugshot data[15] +#define tPlayerSpriteId data[14] +#define tMugshotId data[15] -#define spState data[0] -#define spSpeed data[1] -#define spAbsAcc data[2] -#define sphasSlideFinished data[6] -#define spOpponentOrPlayer data[7] +// Sprite data for trainer sprites in mugshots +#define sState data[0] +#define sSlideSpeed data[1] +#define sSlideAccel data[2] +#define sDone data[6] +#define sSlideDir data[7] -static void BT_Phase2StartLoreleiMugshot(u8 taskId) +static void Task_Lorelei(u8 taskId) { - gTasks[taskId].tWhichMugshot = MUGSHOT_LORELEI; - BT_Phase2Mugshot(taskId); + gTasks[taskId].tMugshotId = MUGSHOT_LORELEI; + DoMugshotTransition(taskId); } -static void BT_Phase2StartBrunoMugshot(u8 taskId) +static void Task_Bruno(u8 taskId) { - gTasks[taskId].tWhichMugshot = MUGSHOT_BRUNO; - BT_Phase2Mugshot(taskId); + gTasks[taskId].tMugshotId = MUGSHOT_BRUNO; + DoMugshotTransition(taskId); } -static void BT_Phase2StartAgathaMugshot(u8 taskId) +static void Task_Agatha(u8 taskId) { - gTasks[taskId].tWhichMugshot = MUGSHOT_AGATHA; - BT_Phase2Mugshot(taskId); + gTasks[taskId].tMugshotId = MUGSHOT_AGATHA; + DoMugshotTransition(taskId); } -static void BT_Phase2StartLanceMugshot(u8 taskId) +static void Task_Lance(u8 taskId) { - gTasks[taskId].tWhichMugshot = MUGSHOT_LANCE; - BT_Phase2Mugshot(taskId); + gTasks[taskId].tMugshotId = MUGSHOT_LANCE; + DoMugshotTransition(taskId); } -static void BT_Phase2StartBlueMugshot(u8 taskId) +static void Task_Blue(u8 taskId) { - gTasks[taskId].tWhichMugshot = MUGSHOT_BLUE; - BT_Phase2Mugshot(taskId); + gTasks[taskId].tMugshotId = MUGSHOT_BLUE; + DoMugshotTransition(taskId); } -static void BT_Phase2Mugshot(u8 taskId) +static void DoMugshotTransition(u8 taskId) { - while (sBT_Phase2MugshotFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sMugshot_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2Mugshot_Init(struct Task *task) +static bool8 Mugshot_Init(struct Task *task) { u8 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - BT_Phase2Mugshots_CreateSprites(task); - task->tTheta = 0; - task->tbg0HOfsOpponent = 1; - task->tbg0HOfsPlayer = 239; - sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->winOut = WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0xF0, 0xF1); - SetVBlankCallback(VBCB_BT_Phase2Mugshot1_Slide); - ++task->tState; + Mugshots_CreateTrainerPics(task); + + task->tSinIndex = 0; + task->tTopBannerX = 1; + task->tBottomBannerX = DISPLAY_WIDTH - 1; + sTransitionData->winIn = WININ_WIN0_ALL; + sTransitionData->winOut = WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sTransitionData->win0V = DISPLAY_HEIGHT; + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); + SetVBlankCallback(VBlankCB_Mugshots); + task->tState++; return FALSE; } -static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task) +static bool8 Mugshot_SetGfx(struct Task *task) { s16 i, j; - u16 *tilemapAddr, *tilesetAddr; - const u16 *mugshotsMap = sVsBarTilemap; + u16 *tilemap, *tileset; + const u16 *mugshotsMap = sMugshotsTilemap; - BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); - CpuCopy16(sVsBarTileset, tilesetAddr, 0x1E0); - LoadPalette(sVsBarOpponentPalettes[task->tWhichMugshot], 0xF0, 0x20); - LoadPalette(sVsBarPlayerPalettes[gSaveBlock2Ptr->playerGender], 0xFA, 0xC); - for (i = 0; i < 20; ++i) - for (j = 0; j < 32; ++j, ++mugshotsMap) - tilemapAddr[i * 32 + j] = *mugshotsMap | 0xF000; // use palette #15 + GetBg0TilesDst(&tilemap, &tileset); + CpuCopy16(sVsBarTileset, tileset, 0x1E0); + LoadPalette(sOpponentMugshotsPals[task->tMugshotId], 0xF0, 0x20); + LoadPalette(sPlayerMugshotsPals[gSaveBlock2Ptr->playerGender], 0xFA, 0xC); + + for (i = 0; i < 20; i++) + for (j = 0; j < 32; j++, mugshotsMap++) + SET_TILE(tilemap, i, j, *mugshotsMap); + EnableInterrupts(INTR_FLAG_HBLANK); - SetHBlankCallback(HBCB_BT_Phase2Mugshot); - ++task->tState; + SetHBlankCallback(HBlankCB_Mugshots); + task->tState++; return FALSE; } -static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) +static bool8 Mugshot_ShowBanner(struct Task *task) { - u8 i, theta; + u8 i, sinIndex; u16 *winVal; - s16 value; - s32 mergedBg0hOfs; + s16 x; + s32 mergedValue; - sTransitionStructPtr->vblankDma = FALSE; + sTransitionData->vblankDma = FALSE; winVal = gScanlineEffectRegBuffers[0]; - theta = task->tTheta; - task->tTheta += 0x10; - for (i = 0; i < 80; ++i, ++winVal, theta += 0x10) + sinIndex = task->tSinIndex; + task->tSinIndex += 16; + + // Update top banner + for (i = 0; i < DISPLAY_HEIGHT / 2; i++, winVal++, sinIndex += 16) { - value = task->tbg0HOfsOpponent + Sin(theta, 0x10); - if (value < 0) - value = 1; - if (value > 0xF0) - value = 0xF0; - *winVal = value; + x = task->tTopBannerX + Sin(sinIndex, 16); + if (x < 0) + x = 1; + if (x > DISPLAY_WIDTH) + x = DISPLAY_WIDTH; + *winVal = x; } - for (; i < 160; ++i, ++winVal, theta += 0x10) + + // Update bottom banner + for (; i < DISPLAY_HEIGHT; i++, winVal++, sinIndex += 16) { - value = task->tCounter - Sin(theta, 0x10); - if (value < 0) - value = 0; - if (value > 0xEF) - value = 0xEF; - *winVal = (value << 8) | (0xF0); + x = task->tBottomBannerX - Sin(sinIndex, 16); + if (x < 0) + x = 0; + if (x > DISPLAY_WIDTH - 1) + x = DISPLAY_WIDTH - 1; + *winVal = (x << 8) | (DISPLAY_WIDTH); } - task->tbg0HOfsOpponent += 8; - task->tCounter -= 8; - if (task->tbg0HOfsOpponent > 0xF0) - task->tbg0HOfsOpponent = 0xF0; - if (task->tCounter < 0) - task->tCounter = 0; - mergedBg0hOfs = *(s32 *)(&task->tbg0HOfsOpponent); - if (mergedBg0hOfs == 0x00F0) - ++task->tState; - sTransitionStructPtr->bg0HOfsOpponent -= 8; - sTransitionStructPtr->bg0HOfsPlayer += 8; - ++sTransitionStructPtr->vblankDma; + + // Slide banners across screen + task->tTopBannerX += 8; + task->tBottomBannerX -= 8; + + if (task->tTopBannerX > DISPLAY_WIDTH) + task->tTopBannerX = DISPLAY_WIDTH; + if (task->tBottomBannerX < 0) + task->tBottomBannerX = 0; + + mergedValue = *(s32 *)(&task->tTopBannerX); + if (mergedValue == DISPLAY_WIDTH) + task->tState++; + + sTransitionData->bg0HOfsOpponent -= 8; + sTransitionData->bg0HOfsPlayer += 8; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) +static bool8 Mugshot_StartOpponentSlide(struct Task *task) { u8 i; u16 *winVal; - sTransitionStructPtr->vblankDma = FALSE; - for (i = 0, winVal = gScanlineEffectRegBuffers[0]; i < 160; ++i, ++winVal) - *winVal = 0xF0; - ++task->tState; - task->tTheta = 0; - task->tbg0HOfsOpponent = 0; - task->tbg0HOfsPlayer = 0; - sTransitionStructPtr->bg0HOfsOpponent -= 8; - sTransitionStructPtr->bg0HOfsPlayer += 8; - BT_SetSpriteAsOpponentOrPlayer(task->tOpponentSpriteId, FALSE); - BT_SetSpriteAsOpponentOrPlayer(task->tPlayerSpriteId, TRUE); - BT_StartSpriteSlide(task->tOpponentSpriteId); + sTransitionData->vblankDma = FALSE; + for (i = 0, winVal = gScanlineEffectRegBuffers[0]; i < DISPLAY_HEIGHT; i++, winVal++) + *winVal = DISPLAY_WIDTH; + task->tState++; + + // Clear old data + task->tSinIndex = 0; + task->tTopBannerX = 0; + task->tBottomBannerX = 0; + + sTransitionData->bg0HOfsOpponent -= 8; + sTransitionData->bg0HOfsPlayer += 8; + + SetTrainerPicSlideDirection(task->tOpponentSpriteId, 0); + SetTrainerPicSlideDirection(task->tPlayerSpriteId, 1); + + // Start opponent slide + IncrementTrainerPicState(task->tOpponentSpriteId); PlaySE(SE_MUGSHOT); - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task) +static bool8 Mugshot_WaitStartPlayerSlide(struct Task *task) { - sTransitionStructPtr->bg0HOfsOpponent -= 8; - sTransitionStructPtr->bg0HOfsPlayer += 8; - if (BT_IsSpriteSlideFinished(task->tOpponentSpriteId)) + sTransitionData->bg0HOfsOpponent -= 8; + sTransitionData->bg0HOfsPlayer += 8; + + // Start player's slide in once the opponent is finished + if (IsTrainerPicSlideDone(task->tOpponentSpriteId)) { - ++task->tState; - BT_StartSpriteSlide(task->tPlayerSpriteId); + task->tState++; + IncrementTrainerPicState(task->tPlayerSpriteId); } return FALSE; } -static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) +static bool8 Mugshot_WaitPlayerSlide(struct Task *task) { - sTransitionStructPtr->bg0HOfsOpponent -= 8; - sTransitionStructPtr->bg0HOfsPlayer += 8; - if (BT_IsSpriteSlideFinished(task->tPlayerSpriteId)) + sTransitionData->bg0HOfsOpponent -= 8; + sTransitionData->bg0HOfsPlayer += 8; + + if (IsTrainerPicSlideDone(task->tPlayerSpriteId)) { - sTransitionStructPtr->vblankDma = FALSE; + sTransitionData->vblankDma = FALSE; SetVBlankCallback(NULL); DmaStop(0); - memset(gScanlineEffectRegBuffers[0], 0, 320); - memset(gScanlineEffectRegBuffers[1], 0, 320); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); + memset(gScanlineEffectRegBuffers[0], 0, DISPLAY_HEIGHT * 2); + memset(gScanlineEffectRegBuffers[1], 0, DISPLAY_HEIGHT * 2); + SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH); SetGpuReg(REG_OFFSET_BLDY, 0); - ++task->tState; - task->tCounter = 0; - task->tHalfBandwidth = 0; - sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; - SetVBlankCallback(VBCB_BT_Phase2Mugshot2_WhiteFade); + task->tState++; + task->tTimer = 0; + task->tFadeSpread = 0; + sTransitionData->bldCnt = BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN; + SetVBlankCallback(VBlankCB_MugshotsFadeOut); } return FALSE; } -static bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task) +static bool8 Mugshot_GradualWhiteFade(struct Task *task) { - bool32 nextFunc; + bool32 active; - sTransitionStructPtr->vblankDma = FALSE; - nextFunc = TRUE; - sTransitionStructPtr->bg0HOfsOpponent -= 8; - sTransitionStructPtr->bg0HOfsPlayer += 8; - if (task->tHalfBandwidth < 80) - task->tHalfBandwidth += 2; - if (task->tHalfBandwidth > 80) - task->tHalfBandwidth = 80; - if (++task->tCounter & 1) + sTransitionData->vblankDma = FALSE; + active = TRUE; + sTransitionData->bg0HOfsOpponent -= 8; + sTransitionData->bg0HOfsPlayer += 8; + + if (task->tFadeSpread < DISPLAY_HEIGHT / 2) + task->tFadeSpread += 2; + if (task->tFadeSpread > DISPLAY_HEIGHT / 2) + task->tFadeSpread = DISPLAY_HEIGHT / 2; + + if (++task->tTimer & 1) { s16 i; - - for (i = 0, nextFunc = FALSE; i <= task->tHalfBandwidth; ++i) + for (i = 0, active = FALSE; i <= task->tFadeSpread; i++) { - s16 y1 = 80 - i; - s16 y2 = 80 + i; - + // Fade starts in middle of screen and + // spreads outwards in both directions. + s16 y1 = DISPLAY_HEIGHT / 2 - i; + s16 y2 = DISPLAY_HEIGHT / 2 + i; if (gScanlineEffectRegBuffers[0][y1] <= 15) { - nextFunc = TRUE; - ++gScanlineEffectRegBuffers[0][y1]; + active = TRUE; + gScanlineEffectRegBuffers[0][y1]++; } if (gScanlineEffectRegBuffers[0][y2] <= 15) { - nextFunc = TRUE; - ++gScanlineEffectRegBuffers[0][y2]; + active = TRUE; + gScanlineEffectRegBuffers[0][y2]++; } } } - if (task->tHalfBandwidth == 80 && !nextFunc) - ++task->tState; - ++sTransitionStructPtr->vblankDma; + if (task->tFadeSpread == DISPLAY_HEIGHT / 2 && !active) + task->tState++; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task) +// Set palette to white to replace the scanline white fade +// before the screen fades to black. +static bool8 Mugshot_InitFadeWhiteToBlack(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - BlendPalettes(PALETTES_ALL, 0x10, RGB_WHITE); - sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; - task->tCounter = 0; - ++task->tState; + sTransitionData->vblankDma = FALSE; + BlendPalettes(PALETTES_ALL, 16, RGB_WHITE); + sTransitionData->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; + task->tTimer = 0; + task->tState++; return TRUE; } -static bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task) +static bool8 Mugshot_FadeToBlack(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - ++task->tCounter; - memset(gScanlineEffectRegBuffers[0], task->tCounter, 320); - if (task->tCounter > 15) - ++task->tState; - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma = FALSE; + task->tTimer++; + memset(gScanlineEffectRegBuffers[0], task->tTimer, DISPLAY_HEIGHT * 2); + if (task->tTimer > 15) + task->tState++; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2Mugshot_End(struct Task *task) +static bool8 Mugshot_End(struct Task *task) { DmaStop(0); - BT_BlendPalettesToBlack(); + FadeScreenBlack(); DestroyTask(FindTaskIdByFunc(task->func)); return FALSE; } -static void VBCB_BT_Phase2Mugshot1_Slide(void) +static void VBlankCB_Mugshots(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - SetGpuReg(REG_OFFSET_BG0VOFS, sTransitionStructPtr->bg0VOfs); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + SetGpuReg(REG_OFFSET_BG0VOFS, sTransitionData->bg0VOfs); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void VBCB_BT_Phase2Mugshot2_WhiteFade(void) +static void VBlankCB_MugshotsFadeOut(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionData->bldCnt); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, B_TRANS_DMA_FLAGS); } -static void HBCB_BT_Phase2Mugshot(void) +static void HBlankCB_Mugshots(void) { - if (REG_VCOUNT < 80) - REG_BG0HOFS = sTransitionStructPtr->bg0HOfsOpponent; + if (REG_VCOUNT < DISPLAY_HEIGHT / 2) + REG_BG0HOFS = sTransitionData->bg0HOfsOpponent; else - REG_BG0HOFS = sTransitionStructPtr->bg0HOfsPlayer; + REG_BG0HOFS = sTransitionData->bg0HOfsPlayer; } -static void BT_Phase2Mugshots_CreateSprites(struct Task *task) +static void Mugshots_CreateTrainerPics(struct Task *task) { struct Sprite *opponentSprite, *playerSprite; s16 mugshotId; gReservedSpritePaletteCount = 10; - mugshotId = task->tWhichMugshot; - task->tOpponentSpriteId = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotId], sMugshotsOpponentCoords[mugshotId][0] - 32, sMugshotsOpponentCoords[mugshotId][1] + 42, 0, gDecompressionBuffer); - task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 272, 106, 0, gDecompressionBuffer); + mugshotId = task->tMugshotId; + task->tOpponentSpriteId = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotId], + sMugshotsOpponentCoords[mugshotId][0] - 32, + sMugshotsOpponentCoords[mugshotId][1] + 42, + 0, gDecompressionBuffer); + task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender, TRUE), + DISPLAY_WIDTH + 32, + 106, + 0, gDecompressionBuffer); gReservedSpritePaletteCount = 12; + opponentSprite = &gSprites[task->tOpponentSpriteId]; playerSprite = &gSprites[task->tPlayerSpriteId]; - opponentSprite->callback = SpriteCB_BT_Phase2Mugshots; - playerSprite->callback = SpriteCB_BT_Phase2Mugshots; - opponentSprite->oam.affineMode = 3; - playerSprite->oam.affineMode = 3; + + opponentSprite->callback = SpriteCB_MugshotTrainerPic; + playerSprite->callback = SpriteCB_MugshotTrainerPic; + + opponentSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + playerSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + opponentSprite->oam.matrixNum = AllocOamMatrix(); playerSprite->oam.matrixNum = AllocOamMatrix(); - opponentSprite->oam.shape = 1; - playerSprite->oam.shape = 1; - opponentSprite->oam.size = 3; - playerSprite->oam.size = 3; - CalcCenterToCornerVec(opponentSprite, 1, 3, 3); - CalcCenterToCornerVec(playerSprite, 1, 3, 3); + + opponentSprite->oam.shape = SPRITE_SHAPE(64x32); + playerSprite->oam.shape = SPRITE_SHAPE(64x32); + + opponentSprite->oam.size = SPRITE_SIZE(64x32); + playerSprite->oam.size = SPRITE_SIZE(64x32); + + CalcCenterToCornerVec(opponentSprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE); + CalcCenterToCornerVec(playerSprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE); + SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotId][0], sMugshotsOpponentRotationScales[mugshotId][1], 0); SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0); } -static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite) +static void SpriteCB_MugshotTrainerPic(struct Sprite *sprite) { - while (sBT_Phase2MugshotSpriteFuncs[sprite->spState](sprite)); + while (sMugshotTrainerPicFuncs[sprite->sState](sprite)); } -static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite) +// Wait until IncrementTrainerPicState is called +static bool8 MugshotTrainerPic_Pause(struct Sprite *sprite) { return FALSE; } -static bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite) +static bool8 MugshotTrainerPic_Init(struct Sprite *sprite) { - s16 arr0[2]; - s16 arr1[2]; + s16 speeds[ARRAY_COUNT(sTrainerPicSlideSpeeds)]; + s16 accels[ARRAY_COUNT(sTrainerPicSlideAccels)]; - memcpy(arr0, sMugShotSlideVelocity, sizeof(sMugShotSlideVelocity)); - memcpy(arr1, sMugShotSlideDeceleration, sizeof(sMugShotSlideDeceleration)); - ++sprite->spState; - sprite->spSpeed = arr0[sprite->spOpponentOrPlayer]; - sprite->spAbsAcc = arr1[sprite->spOpponentOrPlayer]; + memcpy(speeds, sTrainerPicSlideSpeeds, sizeof(sTrainerPicSlideSpeeds)); + memcpy(accels, sTrainerPicSlideAccels, sizeof(sTrainerPicSlideAccels)); + sprite->sState++; + sprite->sSlideSpeed = speeds[sprite->sSlideDir]; + sprite->sSlideAccel = accels[sprite->sSlideDir]; return TRUE; } -static bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite) +static bool8 MugshotTrainerPic_Slide(struct Sprite *sprite) { - sprite->x += sprite->spSpeed; - if (sprite->spOpponentOrPlayer && sprite->x < 133) - ++sprite->spState; - else if (!sprite->spOpponentOrPlayer && sprite->x > 103) - ++sprite->spState; + sprite->x += sprite->sSlideSpeed; + + // Advance state when pic passes ~40% of screen + if (sprite->sSlideDir && sprite->x < DISPLAY_WIDTH - 107) + sprite->sState++; + else if (!sprite->sSlideDir && sprite->x > 103) + sprite->sState++; return FALSE; } -static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite) +static bool8 MugshotTrainerPic_SlideSlow(struct Sprite *sprite) { - sprite->spSpeed += sprite->spAbsAcc; - sprite->x += sprite->spSpeed; - if (sprite->spSpeed == 0) + // Add acceleration value to speed, then add speed. + // For both sides acceleration is opposite speed, so slide slows down. + sprite->sSlideSpeed += sprite->sSlideAccel; + sprite->x += sprite->sSlideSpeed; + + // Advance state when slide comes to a stop + if (sprite->sSlideSpeed == 0) { - ++sprite->spState; - sprite->spAbsAcc = -sprite->spAbsAcc; - sprite->sphasSlideFinished = 1; + sprite->sState++; + sprite->sSlideAccel = -sprite->sSlideAccel; + sprite->sDone = TRUE; } return FALSE; } -// not used -static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite) +// Slides trainer pic offscreen. This is never reached, because it's preceded +// by a second MugshotTrainerPic_Pause, and IncrementTrainerPicState is +// only called once per trainer pic. +static bool8 MugshotTrainerPic_SlideOffscreen(struct Sprite *sprite) { - sprite->spSpeed += sprite->spAbsAcc; - sprite->x += sprite->spSpeed; - if (sprite->x < -31 || sprite->x > 271) - ++sprite->spState; + sprite->sSlideSpeed += sprite->sSlideAccel; + sprite->x += sprite->sSlideSpeed; + if (sprite->x < -31 || sprite->x > DISPLAY_WIDTH + 31) + sprite->sState++; return FALSE; } -static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value) +static void SetTrainerPicSlideDirection(s16 spriteId, bool16 dirId) { - gSprites[spriteId].spOpponentOrPlayer = value; + gSprites[spriteId].sSlideDir = dirId; } -static void BT_StartSpriteSlide(s16 spriteId) +static void IncrementTrainerPicState(s16 spriteId) { - ++gSprites[spriteId].spState; + gSprites[spriteId].sState++; } -static s16 BT_IsSpriteSlideFinished(s16 spriteId) +static s16 IsTrainerPicSlideDone(s16 spriteId) { - return gSprites[spriteId].sphasSlideFinished; + return gSprites[spriteId].sDone; } -#undef tTheta -#undef tbg0HOfsOpponent -#undef tbg0HOfsPlayer -#undef tCounter -#undef tHalfBandwidth +#undef sState +#undef sSlideSpeed +#undef sSlideAccel +#undef sDone +#undef sSlideDir +#undef tSinIndex +#undef tTopBannerX +#undef tBottomBannerX +#undef tTimer +#undef tFadeSpread #undef tOpponentSpriteId #undef tPlayerSpriteId -#undef tWhichMugshot +#undef tMugshotId -#undef spState -#undef spSpeed -#undef spAbsAcc -#undef sphasSlideFinished -#undef spOpponentOrPlayer +//-------------------- +// B_TRANSITION_SLICE +//-------------------- -#define tSpeed data[1] -#define tAcc data[2] -#define tJerk data[3] +#define tEffectX data[1] +#define tSpeed data[2] +#define tAccel data[3] -static void BT_Phase2SlicedScreen(u8 taskId) +static void Task_Slice(u8 taskId) { - while (sBT_Phase2SlicedScreenFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sSlice_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2SlicedScreen_Init(struct Task *task) +static bool8 Slice_Init(struct Task *task) { u16 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - task->tAcc = 256; - task->tJerk = 1; - sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - for (i = 0; i < 160; ++i) + task->tSpeed = 1 << 8; + task->tAccel = 1; + sTransitionData->winIn = WININ_WIN0_ALL; + sTransitionData->winOut = 0; + sTransitionData->win0V = DISPLAY_HEIGHT; + for (i = 0; i < DISPLAY_HEIGHT; i++) { - gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123HOfs; - gScanlineEffectRegBuffers[1][160 + i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = sTransitionData->cameraX; + gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT + i] = DISPLAY_WIDTH; } EnableInterrupts(INTR_FLAG_HBLANK); - SetVBlankCallback(VBCB_BT_Phase2SlicedScreen); - SetHBlankCallback(HBCB_BT_Phase2SlicedScreen); - ++task->tState; + SetVBlankCallback(VBlankCB_Slice); + SetHBlankCallback(HBlankCB_Slice); + task->tState++; return TRUE; } -static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) +static bool8 Slice_Main(struct Task *task) { u16 i; - sTransitionStructPtr->vblankDma = FALSE; - task->tSpeed += (task->tAcc >> 8); - if (task->tSpeed > 0xF0) - task->tSpeed = 0xF0; - if (task->tAcc <= 0xFFF) - task->tAcc += task->tJerk; - if (task->tJerk < 128) - task->tJerk <<= 1; - for (i = 0; i < 160; ++i) + sTransitionData->vblankDma = FALSE; + task->tEffectX += (task->tSpeed >> 8); + if (task->tEffectX > DISPLAY_WIDTH) + task->tEffectX = DISPLAY_WIDTH; + if (task->tSpeed <= 0xFFF) + task->tSpeed += task->tAccel; + if (task->tAccel < 128) + task->tAccel <<= 1; + + for (i = 0; i < DISPLAY_HEIGHT; i++) { u16 *ofsBuffer = &gScanlineEffectRegBuffers[0][i]; - u16 *win0HBuffer = &gScanlineEffectRegBuffers[0][i + 160]; + u16 *win0HBuffer = &gScanlineEffectRegBuffers[0][i + DISPLAY_HEIGHT]; + + // Alternate rows if (i & 1) { - *ofsBuffer = sTransitionStructPtr->bg123HOfs + task->tSpeed; - *win0HBuffer = 0xF0 - task->tSpeed; + *ofsBuffer = sTransitionData->cameraX + task->tEffectX; + *win0HBuffer = DISPLAY_WIDTH - task->tEffectX; } else { - *ofsBuffer = sTransitionStructPtr->bg123HOfs - task->tSpeed; - *win0HBuffer = WIN_RANGE(task->tSpeed, 0xF1); + *ofsBuffer = sTransitionData->cameraX - task->tEffectX; + *win0HBuffer = WIN_RANGE(task->tEffectX, DISPLAY_WIDTH + 1); } } - if (task->tSpeed > 0xEF) - ++task->tState; - ++sTransitionStructPtr->vblankDma; + if (task->tEffectX >= DISPLAY_WIDTH) + task->tState++; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2SlicedScreen_End(struct Task *task) +static bool8 Slice_End(struct Task *task) { DmaStop(0); - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2SlicedScreen)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_Slice)); return FALSE; } -static void VBCB_BT_Phase2SlicedScreen(void) +static void VBlankCB_Slice(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); - DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_BattleTransition(); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 4); + DmaSet(0, &gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void HBCB_BT_Phase2SlicedScreen(void) +static void HBlankCB_Slice(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -2248,128 +2371,138 @@ static void HBCB_BT_Phase2SlicedScreen(void) REG_BG3HOFS = offset; } +#undef tEffectX #undef tSpeed -#undef tAcc -#undef tJerk +#undef tAccel -#define spBldyCounter data[0] -#define spFinished data[1] -#define spAltDelay data[2] -#define spDelay data[5] -#define spLastSprite data[6] +//------------------------------ +// B_TRANSITION_WHITE_BARS_FADE +//------------------------------ -static void BT_Phase2WhiteFadeInStripes(u8 taskId) +#define sFade data[0] +#define sFinished data[1] +#define sDestroyAttempts data[2] +#define sDelay data[5] +#define sIsMainSprite data[6] + +#define FADE_TARGET (16 << 8) + +static void Task_WhiteBarsFade(u8 taskId) { - while (sBT_Phase2WhiteFadeInStripesFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sWhiteBarsFade_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) +static bool8 WhiteBarsFade_Init(struct Task *task) { u16 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; - sTransitionStructPtr->bldY = 0; - sTransitionStructPtr->winIn = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ; - sTransitionStructPtr->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - for (i = 0; i < 160; ++i) + sTransitionData->bldCnt = BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN; + sTransitionData->bldY = 0; + sTransitionData->winIn = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ; + sTransitionData->winOut = WINOUT_WIN01_ALL; + sTransitionData->win0V = DISPLAY_HEIGHT; + for (i = 0; i < DISPLAY_HEIGHT; i++) { gScanlineEffectRegBuffers[1][i] = 0; - gScanlineEffectRegBuffers[1][i + 160] = 0xF0; + gScanlineEffectRegBuffers[1][i + DISPLAY_HEIGHT] = DISPLAY_WIDTH; } EnableInterrupts(INTR_FLAG_HBLANK); - SetHBlankCallback(HBCB_BT_Phase2WhiteFadeInStripes); - SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes1); - ++task->tState; + SetHBlankCallback(HBlankCB_WhiteBarsFade); + SetVBlankCallback(VBlankCB_WhiteBarsFade); + task->tState++; return FALSE; } -static bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task) +static bool8 WhiteBarsFade_StartBars(struct Task *task) { s16 i, posY; - s16 buffer[NELEMS(sWhiteStripeDelay)]; + s16 delays[ARRAY_COUNT(sWhiteBarsFade_StartDelays)]; struct Sprite *sprite; + memcpy(delays, sWhiteBarsFade_StartDelays, sizeof(sWhiteBarsFade_StartDelays)); - memcpy(buffer, sWhiteStripeDelay, sizeof(sWhiteStripeDelay)); - for (i = 0, posY = 0; i < 6; ++i, posY += 0x1B) + for (i = 0, posY = 0; i < NUM_WHITE_BARS; i++, posY += WHITE_BAR_HEIGHT) { - sprite = &gSprites[CreateInvisibleSprite(SpriteCB_BT_Phase2WhiteFadeInStripes)]; - sprite->x = 0xF0; + sprite = &gSprites[CreateInvisibleSprite(SpriteCB_WhiteBarFade)]; + sprite->x = DISPLAY_WIDTH; sprite->y = posY; - sprite->spDelay = buffer[i]; + sprite->sDelay = delays[i]; } - ++sprite->spLastSprite; - ++task->tState; + + // Set on one sprite only. This one will enable the DMA + // copy in VBlank and wait for the others to destroy. + sprite->sIsMainSprite++; + + task->tState++; return FALSE; } -static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) +static bool8 WhiteBarsFade_WaitBars(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; - if (sTransitionStructPtr->counter > 5) + sTransitionData->vblankDma = FALSE; + if (sTransitionData->counter >= NUM_WHITE_BARS) { - BlendPalettes(PALETTES_ALL, 0x10, RGB_WHITE); - ++task->tState; + BlendPalettes(PALETTES_ALL, 16, RGB_WHITE); + task->tState++; } return FALSE; } -static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) +static bool8 WhiteBarsFade_BlendToBlack(struct Task *task) { - sTransitionStructPtr->vblankDma = FALSE; + sTransitionData->vblankDma = FALSE; DmaStop(0); SetVBlankCallback(NULL); SetHBlankCallback(NULL); - sTransitionStructPtr->win0H = WIN_RANGE(0, 240); - sTransitionStructPtr->bldY = 0; - sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; - sTransitionStructPtr->winIn = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WININ_WIN0_CLR; - sTransitionStructPtr->counter = 0; - SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes2); - ++task->tState; + sTransitionData->win0H = DISPLAY_WIDTH; + sTransitionData->bldY = 0; + sTransitionData->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; + sTransitionData->winIn = WININ_WIN0_ALL; + sTransitionData->counter = 0; + SetVBlankCallback(VBlankCB_WhiteBarsFade_Blend); + task->tState++; return FALSE; } -static bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task) +static bool8 WhiteBarsFade_End(struct Task *task) { - sTransitionStructPtr->counter += 480; - sTransitionStructPtr->bldY = sTransitionStructPtr->counter >> 8; - if (sTransitionStructPtr->bldY > 16) + sTransitionData->counter += 480; + sTransitionData->bldY = sTransitionData->counter >> 8; + if (sTransitionData->bldY > 16) { - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2WhiteFadeInStripes)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_WhiteBarsFade)); } return FALSE; } -static void VBCB_BT_Phase2WhiteFadeInStripes1(void) +static void VBlankCB_WhiteBarsFade(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0H); // BUG: This should obviously be sTransitionStructPtr->win0V - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); - DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + VBlankCB_BattleTransition(); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionData->bldCnt); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0H); // BUG: This should obviously be sTransitionData->win0V + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 4); + DmaSet(0, &gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void VBCB_BT_Phase2WhiteFadeInStripes2(void) +static void VBlankCB_WhiteBarsFade_Blend(void) { - BT_VBSyncOamAndPltt(); - SetGpuReg(REG_OFFSET_BLDY, sTransitionStructPtr->bldY); - SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0H, sTransitionStructPtr->win0H); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + VBlankCB_BattleTransition(); + SetGpuReg(REG_OFFSET_BLDY, sTransitionData->bldY); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionData->bldCnt); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0H, sTransitionData->win0H); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); } -static void HBCB_BT_Phase2WhiteFadeInStripes(void) +static void HBlankCB_WhiteBarsFade(void) { vu16 index = REG_VCOUNT; @@ -2378,201 +2511,218 @@ static void HBCB_BT_Phase2WhiteFadeInStripes(void) REG_BLDY = gScanlineEffectRegBuffers[1][index]; } -static void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) +static void SpriteCB_WhiteBarFade(struct Sprite *sprite) { - if (sprite->spDelay) + if (sprite->sDelay) { - --sprite->spDelay; - if (sprite->spLastSprite) - sTransitionStructPtr->vblankDma = TRUE; + sprite->sDelay--; + if (sprite->sIsMainSprite) + sTransitionData->vblankDma = TRUE; } else { u16 i; u16 *bldY = &gScanlineEffectRegBuffers[0][sprite->y]; - u16 *win0H = &gScanlineEffectRegBuffers[0][sprite->y + 160]; - u32 stripeWidth = sprite->spLastSprite ? 0x19 : 0x1B; + u16 *win0H = &gScanlineEffectRegBuffers[0][sprite->y + DISPLAY_HEIGHT]; + + // Each bar is 27 pixels high. With 6 bars this is a total of 162, which is 2 pixels taller than the screen. + // 1 bar is therefore shortened by 2 pixels + u32 stripeWidth = sprite->sIsMainSprite ? (WHITE_BAR_HEIGHT - 2) : WHITE_BAR_HEIGHT; - for (i = 0; i < stripeWidth; ++i) + for (i = 0; i < stripeWidth; i++) { - bldY[i] = sprite->spBldyCounter >> 8; + bldY[i] = sprite->sFade >> 8; win0H[i] = (u8)(sprite->x); } - if (sprite->x == 0 && sprite->spBldyCounter == 0x1000) - sprite->spFinished = 1; + if (sprite->x == 0 && sprite->sFade == FADE_TARGET) + sprite->sFinished = TRUE; sprite->x -= 24; - sprite->spBldyCounter += 192; + sprite->sFade += 192; if (sprite->x < 0) sprite->x = 0; - if (sprite->spBldyCounter > 0x1000) - sprite->spBldyCounter = 0x1000; - if (sprite->spLastSprite) - sTransitionStructPtr->vblankDma = TRUE; - if (sprite->spFinished) + if (sprite->sFade > FADE_TARGET) + sprite->sFade = FADE_TARGET; + if (sprite->sIsMainSprite) + sTransitionData->vblankDma = TRUE; + if (sprite->sFinished) { - if (sprite->spLastSprite == FALSE || (sTransitionStructPtr->counter > 4)) + if (sprite->sIsMainSprite == FALSE || (sTransitionData->counter > 4)) { - ++sTransitionStructPtr->counter; + sTransitionData->counter++; DestroySprite(sprite); } } } } -#undef spBldyCounter -#undef spFinished -#undef spAltDelay -#undef spDelay -#undef spLastSprite +#undef sFade +#undef sFinished +#undef sDestroyAttempts +#undef sDelay +#undef sIsMainSprite -#define tDelay data[1] -#define tWhichGrid data[2] +//--------------------------- +// B_TRANSITION_GRID_SQUARES +//--------------------------- -static void BT_Phase2GridSquares(u8 taskId) +#define tDelay data[1] +#define tShrinkStage data[2] + +static void Task_GridSquares(u8 taskId) { - while (sBT_Phase2GridSquaresFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sGridSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task) +static bool8 GridSquares_Init(struct Task *task) { - u16 *tilemapAddr, *tilesetAddr; + u16 *tilemap, *tileset; - BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); - CpuCopy16(sGridSquareTileset, tilesetAddr, 0x20); - CpuFill16(0xF000, tilemapAddr, 0x800); - LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); - ++task->tState; + GetBg0TilesDst(&tilemap, &tileset); + CpuCopy16(sGridSquareTileset, tileset, 0x20); + CpuFill16(0xF0 << 8, tilemap, BG_SCREEN_SIZE); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + task->tState++; return FALSE; } -static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task) +static bool8 GridSquares_Main(struct Task *task) { - u16 *tilesetAddr; + u16 *tileset; if (task->tDelay == 0) { - BT_GetBg0TilesetBase(&tilesetAddr); + GetBg0TilemapDst(&tileset); task->tDelay = 3; - ++task->tWhichGrid; - CpuCopy16(sGridSquareTileset + (task->tWhichGrid * 8), tilesetAddr, 0x20); - if (task->tWhichGrid > 0xD) + task->tShrinkStage++; + CpuCopy16(&sGridSquareTileset[task->tShrinkStage * 8], tileset, 0x20); + if (task->tShrinkStage > 13) { - ++task->tState; + task->tState++; task->tDelay = 16; } } - --task->tDelay; + task->tDelay--; return FALSE; } -static bool8 BT_Phase2GridSquares_IsDone(struct Task *task) +static bool8 GridSquares_End(struct Task *task) { if (--task->tDelay == 0) { - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2GridSquares)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_GridSquares)); } return FALSE; } #undef tDelay -#undef tWhichGrid +#undef tShrinkStage -#define tWhichBrush data[1] -#define tWhichSide data[2] -#define tDelay data[3] +//--------------------------- +// B_TRANSITION_ANGLED_WIPES +//--------------------------- -#define trCurrentPtX data[2] -#define trCurrentPtY data[3] +#define tWipeId data[1] +#define tDir data[2] +#define tDelay data[3] -static void BT_Phase2BlackDoodles(u8 taskId) +static void Task_AngledWipes(u8 taskId) { - while (sBT_Phase2BlackDoodlesFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sAngledWipes_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase2BlackDoodles_Init(struct Task *task) +static bool8 AngledWipes_Init(struct Task *task) { u16 i; - BT_InitCtrlBlk(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->winIn = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; - sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); - for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[0][i] = WIN_RANGE(0, 0xF0); - CpuCopy16(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 0x140); - SetVBlankCallback(VBCB_BT_Phase2BlackDoodles); - ++task->tState; + sTransitionData->winIn = WININ_WIN0_ALL; + sTransitionData->winOut = 0; + sTransitionData->win0V = DISPLAY_HEIGHT; + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[0][i] = WIN_RANGE(0, DISPLAY_WIDTH); + CpuCopy16(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + SetVBlankCallback(VBlankCB_AngledWipes); + task->tState++; return TRUE; } -static bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task) +static bool8 AngledWipes_SetWipeData(struct Task *task) { - BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, sBlackDoodlesSegments[task->tWhichBrush][0], sBlackDoodlesSegments[task->tWhichBrush][1], sBlackDoodlesSegments[task->tWhichBrush][2], sBlackDoodlesSegments[task->tWhichBrush][3], 1, 1); - task->tWhichSide = sBlackDoodlesSegments[task->tWhichBrush][4]; - ++task->tState; + InitBlackWipe(sTransitionData->data, + sAngledWipes_MoveData[task->tWipeId][0], + sAngledWipes_MoveData[task->tWipeId][1], + sAngledWipes_MoveData[task->tWipeId][2], + sAngledWipes_MoveData[task->tWipeId][3], + 1, 1); + task->tDir = sAngledWipes_MoveData[task->tWipeId][4]; + task->tState++; return TRUE; } -static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) +static bool8 AngledWipes_DoWipe(struct Task *task) { s16 i; - bool8 nextFunc; + bool8 finished; - sTransitionStructPtr->vblankDma = FALSE; - for (i = 0, nextFunc = FALSE; i < 16; ++i) + sTransitionData->vblankDma = FALSE; + for (i = 0, finished = FALSE; i < 16; i++) { - s16 left = gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] >> 8; - s16 right = gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] & 0xFF; - if (task->tWhichSide == 0) + s16 left = gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] >> 8; + s16 right = gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] & 0xFF; + if (task->tDir == 0) { - if (left < sTransitionStructPtr->trCurrentPtX) - left = sTransitionStructPtr->trCurrentPtX; + // Moving down + if (left < sTransitionData->tWipeCurrX) + left = sTransitionData->tWipeCurrX; if (left > right) left = right; } else { - if (right > sTransitionStructPtr->trCurrentPtX) - right = sTransitionStructPtr->trCurrentPtX; + // Moving up + if (right > sTransitionData->tWipeCurrX) + right = sTransitionData->tWipeCurrX; if (right <= left) right = left; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); - if (nextFunc) + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = WIN_RANGE2(left, right); + if (finished) { - ++task->tState; + task->tState++; break; } - else - nextFunc = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + finished = UpdateBlackWipe(sTransitionData->data, TRUE, TRUE); } - ++sTransitionStructPtr->vblankDma; + sTransitionData->vblankDma++; return FALSE; } -static bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task) +static bool8 AngledWipes_TryEnd(struct Task *task) { - if (++task->tWhichBrush < 7) + if (++task->tWipeId < NUM_ANGLED_WIPES) { - ++task->tState; - task->tDelay = sBlackDoodlesDelay[task->tWhichBrush - 1]; + // Continue with next wipe + task->tState++; + task->tDelay = sAngledWipes_EndDelays[task->tWipeId - 1]; return TRUE; } else { + // End transition DmaStop(0); - BT_BlendPalettesToBlack(); - DestroyTask(FindTaskIdByFunc(BT_Phase2BlackDoodles)); + FadeScreenBlack(); + DestroyTask(FindTaskIdByFunc(Task_AngledWipes)); return FALSE; } } -static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) +static bool8 AngledWipes_StartNext(struct Task *task) { if (--task->tDelay == 0) { + // Return to AngledWipes_SetWipeData task->tState = 1; return TRUE; } @@ -2580,123 +2730,131 @@ static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) return FALSE; } -static void VBCB_BT_Phase2BlackDoodles(void) +static void VBlankCB_AngledWipes(void) { DmaStop(0); - BT_VBSyncOamAndPltt(); - if (sTransitionStructPtr->vblankDma) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); - SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); - SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + VBlankCB_BattleTransition(); + if (sTransitionData->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + SetGpuReg(REG_OFFSET_WININ, sTransitionData->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionData->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionData->win0V); SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -#undef tWhichBrush -#undef tWhichSide +#undef tWipeId +#undef tDir #undef tDelay -#undef trCurrentPtX -#undef trCurrentPtY +//----------------------------------- +// Transition intro +//----------------------------------- -#define tFadeOutDelay data[1] -#define tFadeInDelay data[2] -#define tBlinkTimes data[3] -#define tFadeOutSpeed data[4] -#define tFadeInSpeed data[5] -#define tDelayCounter data[6] -#define tCoeff data[7] +#define tFadeToGrayDelay data[1] +#define tFadeFromGrayDelay data[2] +#define tNumFades data[3] +#define tFadeToGraySpeed data[4] +#define tFadeFromGraySpeed data[5] +#define tDelayTimer data[6] +#define tBlend data[7] -static void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed) +static void CreateIntroTask(s16 fadeToGrayDelay, s16 fadeFromGrayDelay, s16 numFades, s16 fadeToGraySpeed, s16 fadeFromGraySpeed) { - u8 taskId = CreateTask(BT_Phase1SubTask, 3); - gTasks[taskId].tFadeOutDelay = fadeOutDelay; - gTasks[taskId].tFadeInDelay = fadeInDelay; - gTasks[taskId].tBlinkTimes = blinkTimes; - gTasks[taskId].tFadeOutSpeed = fadeOutSpeed; - gTasks[taskId].tFadeInSpeed = fadeInSpeed; - gTasks[taskId].tDelayCounter = fadeOutDelay; + u8 taskId = CreateTask(Task_BattleTransition_Intro, 3); + gTasks[taskId].tFadeToGrayDelay = fadeToGrayDelay; + gTasks[taskId].tFadeFromGrayDelay = fadeFromGrayDelay; + gTasks[taskId].tNumFades = numFades; + gTasks[taskId].tFadeToGraySpeed = fadeToGraySpeed; + gTasks[taskId].tFadeFromGraySpeed = fadeFromGraySpeed; + gTasks[taskId].tDelayTimer = fadeToGrayDelay; } -static bool8 BT_IsPhase1Done(void) +static bool8 IsIntroTaskDone(void) { - if (FindTaskIdByFunc(BT_Phase1SubTask) == TAIL_SENTINEL) + if (FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) return TRUE; else return FALSE; } -static void BT_Phase1SubTask(u8 taskId) +static void Task_BattleTransition_Intro(u8 taskId) { - while (sBT_Phase1FadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); + while (sTransitionIntroFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 BT_Phase1_FadeOut(struct Task *task) +static bool8 TransitionIntro_FadeToGray(struct Task *task) { - if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) + if (task->tDelayTimer == 0 || --task->tDelayTimer == 0) { - task->tDelayCounter = task->tFadeOutDelay; - task->tCoeff += task->tFadeOutSpeed; - if (task->tCoeff > 16) - task->tCoeff = 16; - BlendPalettes(-1, task->tCoeff, RGB(11, 11, 11)); + task->tDelayTimer = task->tFadeToGrayDelay; + task->tBlend += task->tFadeToGraySpeed; + if (task->tBlend > 16) + task->tBlend = 16; + BlendPalettes(-1, task->tBlend, RGB(11, 11, 11)); } - if (task->tCoeff > 15) + if (task->tBlend >= 16) { - ++task->tState; - task->tDelayCounter = task->tFadeInDelay; + // Fade to gray complete, start fade back + task->tState++; + task->tDelayTimer = task->tFadeFromGrayDelay; } return FALSE; } -static bool8 BT_Phase1_FadeIn(struct Task *task) +static bool8 TransitionIntro_FadeFromGray(struct Task *task) { - if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) + if (task->tDelayTimer == 0 || --task->tDelayTimer == 0) { - task->tDelayCounter = task->tFadeInDelay; - task->tCoeff -= task->tFadeInSpeed; - if (task->tCoeff < 0) - task->tCoeff = 0; - BlendPalettes(PALETTES_ALL, task->tCoeff, RGB(11, 11, 11)); + task->tDelayTimer = task->tFadeFromGrayDelay; + task->tBlend -= task->tFadeFromGraySpeed; + if (task->tBlend < 0) + task->tBlend = 0; + BlendPalettes(PALETTES_ALL, task->tBlend, RGB(11, 11, 11)); } - if (task->tCoeff == 0) + if (task->tBlend == 0) { - if (--task->tBlinkTimes == 0) + if (--task->tNumFades == 0) { - DestroyTask(FindTaskIdByFunc(BT_Phase1SubTask)); + // All fades done, end intro + DestroyTask(FindTaskIdByFunc(Task_BattleTransition_Intro)); } else { - task->tDelayCounter = task->tFadeOutDelay; + // Fade from gray complete, start new fade + task->tDelayTimer = task->tFadeToGrayDelay; task->tState = 0; } } return FALSE; } -#undef tFadeOutDelay -#undef tFadeInDelay -#undef tBlinkTimes -#undef tFadeOutSpeed -#undef tFadeInSpeed -#undef tDelayCounter -#undef tCoeff +#undef tFadeToGrayDelay +#undef tFadeFromGrayDelay +#undef tNumFades +#undef tFadeToGraySpeed +#undef tFadeFromGraySpeed +#undef tDelayTimer +#undef tBlend -static void BT_InitCtrlBlk(void) +//----------------------------------- +// General transition functions +//----------------------------------- + +static void InitTransitionData(void) { - memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); - FieldCameraGetPixelOffsetAtGround(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); + memset(sTransitionData, 0, sizeof(*sTransitionData)); + FieldCameraGetPixelOffsetAtGround(&sTransitionData->cameraX, &sTransitionData->cameraY); } -static void BT_VBSyncOamAndPltt(void) +static void VBlankCB_BattleTransition(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void BT_GetBg0TilesetBase(u16 **tilesetPtr) +static void GetBg0TilemapDst(u16 **tilesetPtr) { u16 charBase; @@ -2705,7 +2863,7 @@ static void BT_GetBg0TilesetBase(u16 **tilesetPtr) *tilesetPtr = (u16 *)(VRAM + charBase); } -static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) +static void GetBg0TilesDst(u16 **tilemapPtr, u16 **tilesetPtr) { u16 screenBase, charBase; @@ -2717,26 +2875,26 @@ static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) *tilesetPtr = (u16 *)(VRAM + charBase); } -static void BT_BlendPalettesToBlack(void) +static void FadeScreenBlack(void) { - BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); } -static void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize) +static void SetSinWave(s16 *buffer, s16 offset, s16 index, s16 frequency, s16 amplitude, s16 bufSize) { u8 i; - for (i = 0; bufSize > 0; --bufSize, ++i, theta += frequency) - buffer[i] = offset + Sin(0xFF & theta, amplitude); + for (i = 0; bufSize > 0; bufSize--, i++, index += frequency) + buffer[i] = offset + Sin(index & 0xFF, amplitude); } -static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) +static void SetCircularMask(s16 *buffer, s16 x, s16 y, s16 radius) { s16 i; - memset(buffer, 0xA, 320); + memset(buffer, 10, DISPLAY_HEIGHT * sizeof(u16)); // 64 iterations because we only want to cover [0, π/2) discretely. - for (i = 0; i < 64; ++i) + for (i = 0; i < 64; i++) { s16 sinResult, cosResult, leftX, topY, bottomY, nextTopY, nextBottomY, winVal; @@ -2751,12 +2909,12 @@ static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) bottomY = y + cosResult; if (leftX < 0) leftX = 0; - if (winVal > 240) - winVal = 240; + if (winVal > DISPLAY_WIDTH) + winVal = DISPLAY_WIDTH; if (topY < 0) topY = 0; - if (bottomY > 159) - bottomY = 159; + if (bottomY > DISPLAY_HEIGHT - 1) + bottomY = DISPLAY_HEIGHT - 1; winVal |= (leftX << 8); buffer[topY] = winVal; buffer[bottomY] = winVal; @@ -2765,8 +2923,8 @@ static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) nextBottomY = y + cosResult; if (nextTopY < 0) nextTopY = 0; - if (nextBottomY > 159) - nextBottomY = 159; + if (nextBottomY > DISPLAY_HEIGHT - 1) + nextBottomY = DISPLAY_HEIGHT - 1; // fill everything in between with the same WIN0H value while (topY > nextTopY) buffer[--topY] = winVal; @@ -2779,94 +2937,89 @@ static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) } } -#define trStartPtX data[0] -#define trStartPtY data[1] -#define trCurrentPtX data[2] -#define trCurrentPtY data[3] -#define trEndPtX data[4] -#define trEndPtY data[5] -#define trStepX data[6] -#define trStepY data[7] -#define trAbsDeltaX data[8] -#define trAbsDeltaY data[9] -#define trAccum data[10] // track one dimension based on slope - -static void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY) +static void InitBlackWipe(s16 *data, s16 startX, s16 startY, s16 endX, s16 endY, s16 stepX, s16 stepY) { - trStartPtX = startPtX; - trStartPtY = startPtY; - trCurrentPtX = startPtX; - trCurrentPtY = startPtY; - trEndPtX = endPtX; - trEndPtY = endPtY; - trStepX = stepX; - trStepY = stepY; - trAbsDeltaX = endPtX - startPtX; - if (trAbsDeltaX < 0) + tWipeStartX = startX; + tWipeStartY = startY; + tWipeCurrX = startX; + tWipeCurrY = startY; + tWipeEndX = endX; + tWipeEndY = endY; + tWipeXMove = stepX; + tWipeYMove = stepY; + tWipeXDist = endX - startX; + if (tWipeXDist < 0) { - trAbsDeltaX = -trAbsDeltaX; - trStepX = -stepX; + // If end was less than start, reverse direction + tWipeXDist = -tWipeXDist; + tWipeXMove = -stepX; } - trAbsDeltaY = endPtY - startPtY; - if (trAbsDeltaY < 0) + tWipeYDist = endY - startY; + if (tWipeYDist < 0) { - trAbsDeltaY = -trAbsDeltaY; - trStepY = -stepY; + // If end was less than start, reverse direction + tWipeYDist = -tWipeYDist; + tWipeYMove = -stepY; } - trAccum = 0; + tWipeTemp = 0; } -static bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2) +static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact) { - u8 finish; + u8 numFinished; - if (trAbsDeltaX > trAbsDeltaY) + if (tWipeXDist > tWipeYDist) { - trCurrentPtX += trStepX; - trAccum += trAbsDeltaY; - if (trAccum > trAbsDeltaX) + // X has further to move, move it first + tWipeCurrX += tWipeXMove; + + // If it has been far enough since Y's + // last move then move it too + tWipeTemp += tWipeYDist; + if (tWipeTemp > tWipeXDist) { - trCurrentPtY += trStepY; - trAccum -= trAbsDeltaX; + tWipeCurrY += tWipeYMove; + tWipeTemp -= tWipeXDist; } } else { - trCurrentPtY += trStepY; - trAccum += trAbsDeltaX; - if (trAccum > trAbsDeltaY) + // Y has further to move, move it first + tWipeCurrY += tWipeYMove; + + // If it has been far enough since X's + // last move then move it too + tWipeTemp += tWipeXDist; + if (tWipeTemp > tWipeYDist) { - trCurrentPtX += trStepX; - trAccum -= trAbsDeltaY; + tWipeCurrX += tWipeXMove; + tWipeTemp -= tWipeYDist; } } - finish = 0; - if ((trStepX > 0 && trCurrentPtX >= trEndPtX) || (trStepX < 0 && trCurrentPtX <= trEndPtX)) + + numFinished = 0; + + // Has X coord reached end? + if ((tWipeXMove > 0 && tWipeCurrX >= tWipeEndX) + || (tWipeXMove < 0 && tWipeCurrX <= tWipeEndX)) { - ++finish; - if (checkBoundary1) - trCurrentPtX = trEndPtX; + numFinished++; + if (xExact) + tWipeCurrX = tWipeEndX; } - if ((trStepY > 0 && trCurrentPtY >= trEndPtY) || (trStepY < 0 && trCurrentPtY <= trEndPtY)) + + // Has Y coord reached end? + if ((tWipeYMove > 0 && tWipeCurrY >= tWipeEndY) + || (tWipeYMove < 0 && tWipeCurrY <= tWipeEndY)) { - ++finish; - if (checkBoundary2) - trCurrentPtY = trEndPtY; + numFinished++; + if (yExact) + tWipeCurrY = tWipeEndY; } - if (finish == 2) + + // Return TRUE if both coords have reached end + if (numFinished == 2) return TRUE; else return FALSE; } - -#undef trStartPtX -#undef trStartPtY -#undef trCurrentPtX -#undef trCurrentPtY -#undef trEndPtX -#undef trEndPtY -#undef trStepX -#undef trStepY -#undef trAbsDeltaX -#undef trAbsDeltaY -#undef trAccum diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 92248ac4c..424649d54 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -618,7 +618,7 @@ static void Task_Hof_SpawnPlayerPic(u8 taskId) ShowBg(0); ShowBg(1); ShowBg(3); - gTasks[taskId].data[4] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 0x78, 0x48, 6, 0xFFFF); + gTasks[taskId].data[4] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 0x78, 0x48, 6, 0xFFFF); AddWindow(&sWindowTemplate); LoadStdWindowGfx(1, 0x21D, 0xD0); gTasks[taskId].data[3] = 120; diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 2c5662d9f..5da6f5b3d 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -3108,7 +3108,7 @@ u8 DexScreen_DrawMonAreaPage(void) gSprites[sPokedexScreenData->windowIds[14]].oam.priority = 1; gSprites[sPokedexScreenData->windowIds[14]].y2 = gPokedexEntries[speciesId].pokemonOffset; SetOamMatrix(2, gPokedexEntries[speciesId].pokemonScale, 0, 0, gPokedexEntries[speciesId].pokemonScale); - sPokedexScreenData->windowIds[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 80, 104, 0, 0xFFFF); + sPokedexScreenData->windowIds[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender, TRUE), 1, 80, 104, 0, 0xFFFF); gSprites[sPokedexScreenData->windowIds[15]].oam.paletteNum = 2; gSprites[sPokedexScreenData->windowIds[15]].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[sPokedexScreenData->windowIds[15]].oam.matrixNum = 1; diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 93134bcd2..eb4c51887 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1179,9 +1179,9 @@ static void TeachyTvPrepBattle(u8 taskId) InitPokedudePartyAndOpponent(); PlayMapChosenOrBattleBGM(MUS_DUMMY); if (sStaticResources.whichScript == TTVSCR_BATTLE) - data[6] = B_TRANSITION_WHITEFADE_IN_STRIPES; + data[6] = B_TRANSITION_WHITE_BARS_FADE; else - data[6] = B_TRANSITION_SLICED_SCREEN; + data[6] = B_TRANSITION_SLICE; data[7] = 0; gTasks[taskId].func = TeachyTvPreBattleAnimAndSetBattleCallback; } @@ -1192,11 +1192,11 @@ static void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) switch (data[7]) { case 0: - BT_StartOnField(data[6]); + BattleTransition_StartOnField(data[6]); ++data[7]; break; case 1: - if (BT_IsDone()) + if (IsBattleTransitionDone()) { SetMainCallback2(CB2_InitBattle); DestroyTask(taskId); diff --git a/src/trainer_card.c b/src/trainer_card.c index 98a2f62e2..ec7192400 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1927,7 +1927,7 @@ static void CreateTrainerCardTrainerPic(void) } else { - CreateTrainerCardTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.rse.gender, TRUE), TRUE, + CreateTrainerCardTrainerPicSprite(PlayerGenderToFrontTrainerPicId(sTrainerCardDataPtr->trainerCard.rse.gender, TRUE), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 44ccdbeb1..a17502b63 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -273,7 +273,7 @@ u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, return CreateTrainerCardSprite(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE); } -u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass) +u16 PlayerGenderToFrontTrainerPicId(u8 gender, bool8 getClass) { if (getClass == TRUE) { diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 71b383531..b0f6dcb23 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -721,7 +721,7 @@ static void CB2_EndTrainerTowerBattle(void) static void Task_DoTrainerTowerBattle(u8 taskId) { - if (BT_IsDone() == TRUE) + if (IsBattleTransitionDone() == TRUE) { gMain.savedCallback = CB2_EndTrainerTowerBattle; CleanupOverworldWindowsAndTilemaps(); @@ -741,7 +741,7 @@ static void DoTrainerTowerBattle(void) BuildEnemyParty(); CreateTask(Task_DoTrainerTowerBattle, 1); PlayMapChosenOrBattleBGM(0); - BT_StartOnField(BattleSetup_GetBattleTowerBattleTransition()); + BattleTransition_StartOnField(BattleSetup_GetBattleTowerBattleTransition()); } static void TrainerTowerGetChallengeType(void) From e872033fdd088b4d5f6a19d2bb94a1947a23f5ef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 18 Nov 2022 21:45:42 -0500 Subject: [PATCH 21/42] Misc symbol roundup --- .../{unk_835B988.pal => player_unused.pal} | 0 .../object_events/object_event_graphics.h | 6 +-- src/event_object_movement.c | 2 +- src/menu.c | 24 ++++----- src/text_printer.c | 49 ++++++++++--------- src/trainer_tower_sets.c | 8 +-- 6 files changed, 45 insertions(+), 44 deletions(-) rename graphics/object_events/palettes/{unk_835B988.pal => player_unused.pal} (100%) diff --git a/graphics/object_events/palettes/unk_835B988.pal b/graphics/object_events/palettes/player_unused.pal similarity index 100% rename from graphics/object_events/palettes/unk_835B988.pal rename to graphics/object_events/palettes/player_unused.pal diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 97da9e822..85433d0f0 100644 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -1,5 +1,5 @@ const u16 gObjectEventPal_Player[] = INCBIN_U16("graphics/object_events/palettes/player.gbapal"); -const u16 gUnknown_835B988[] = INCBIN_U16("graphics/object_events/palettes/unk_835B988.gbapal"); +const u16 gObjectEventPal_PlayerUnused[] = INCBIN_U16("graphics/object_events/palettes/player_unused.gbapal"); // Identical except for the transparency const u16 gObjectEventPaletteNull1[16] = {}; const u16 gObjectEventPaletteNull2[16] = {}; const u16 gObjectEventPaletteNull3[16] = {}; @@ -190,7 +190,7 @@ const u16 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U16("graphics/field_effec const u16 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U16("graphics/field_effects/pics/shadow_medium.4bpp"); const u16 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U16("graphics/field_effects/pics/shadow_large.4bpp"); const u16 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U16("graphics/field_effects/pics/shadow_extra_large.4bpp"); -const u16 filler_8398188[0x90] = {}; +const u16 sFiller1[0x90] = {}; const u16 gFieldEffectObjectPic_CutGrass[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp"); const u16 gFieldEffectObjectPic_CutGrass2[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp"); // Unused const u16 gFieldEffectPal_CutGrass[] = INCBIN_U16("graphics/field_effects/fldeff_cut.gbapal"); @@ -199,7 +199,7 @@ const u16 gFieldEffectObjectPic_Ash[] = INCBIN_U16("graphics/field_effects/pics/ const u16 gFieldEffectObjectPic_Arrow[] = INCBIN_U16("graphics/field_effects/pics/arrow.4bpp"); const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/general_0.gbapal"); const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal"); -const u16 filler_8398FE8[16] = {0}; +const u16 sFiller2[0x10] = {}; const u16 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U16("graphics/field_effects/pics/ground_impact_dust.4bpp"); const u16 gFieldEffectObjectPic_UnusedGrass3[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_3.4bpp"); // Unused const u16 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U16("graphics/field_effects/pics/jump_tall_grass.4bpp"); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 0a1fe3bd7..0b3caa398 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4686,7 +4686,7 @@ u8 GetAcroWheelieDirectionAnimNum(u8 direction) return sAcroBunnyHopBackWheelDirectionAnimNums[direction]; } -u8 Unref_GetAnimNums_080634A0(u8 direction) +u8 GetAcroBunnyHopFrontWheelDirectionAnimNum(u8 direction) { return sAcroBunnyHopFrontWheelDirectionAnimNums[direction]; } diff --git a/src/menu.c b/src/menu.c index f09ef59df..ac640102d 100644 --- a/src/menu.c +++ b/src/menu.c @@ -34,7 +34,7 @@ static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLef static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum); static u8 MultichoiceGrid_MoveCursor(s8 deltaX, s8 deltaY); -static const u8 gUnknown_8456618[3] = {15, 1, 2}; +static const u8 sTopBarWindowTextColors[3] = {15, 1, 2}; void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileNum, u8 paletteNum) { @@ -193,7 +193,7 @@ void TopBarWindowPrintString(const u8 *string, u8 unused, bool8 copyToVram) PutWindowTilemap(sTopBarWindowId); FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15)); width = GetStringWidth(FONT_0, string, 0); - AddTextPrinterParameterized3(sTopBarWindowId, FONT_0, -20 - width, 1, gUnknown_8456618, 0, string); + AddTextPrinterParameterized3(sTopBarWindowId, FONT_0, -20 - width, 1, sTopBarWindowTextColors, 0, string); if (copyToVram) CopyWindowToVram(sTopBarWindowId, COPYWIN_FULL); } @@ -287,8 +287,8 @@ u8 Menu_InitCursor(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 return Menu_InitCursorInternal(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos, 0); } -// not used -static u8 sub_810F818(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos) +// Unused +static u8 InitMenuDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos) { return Menu_InitCursor(windowId, fontId, left, top, GetMenuCursorDimensionByFont(fontId, 1), numChoices, initialCursorPos); } @@ -501,8 +501,8 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l CopyWindowToVram(windowId, COPYWIN_GFX); } -// not used -static void sub_810FDE4(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray) +// Unused +static void PrintMenuActionTextsAtTopById(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray) { AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, strs, orderArray); } @@ -705,8 +705,8 @@ static u8 MultichoiceGrid_MoveCursorIfValid(s8 deltaX, s8 deltaY) } } -// not used -static s8 sub_81105A0(void) +// Unused +static s8 Menu_ProcessGridInput_NoSoundLimit(void) { if (JOY_NEW(A_BUTTON)) { @@ -784,8 +784,8 @@ s8 Menu_ProcessInputGridLayout(void) return MENU_NOTHING_CHOSEN; } -// not used -static s8 sub_81106F4(void) +// Unused +static s8 Menu_ProcessGridInputRepeat_NoSoundLimit(void) { if (JOY_NEW(A_BUTTON)) { @@ -824,8 +824,8 @@ static s8 sub_81106F4(void) return MENU_NOTHING_CHOSEN; } -// not used -static s8 sub_81107A0(void) +// Unused +static s8 Menu_ProcessGridInputRepeat(void) { u8 oldPos = sMenu.cursorPos; diff --git a/src/text_printer.c b/src/text_printer.c index 329463859..fddb00307 100644 --- a/src/text_printer.c +++ b/src/text_printer.c @@ -275,46 +275,47 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } } -void sub_8003614(void *tileData, u16 currentX, u16 currentY, u16 width, u16 height) +// Unused +static void CopyGlyphToWindow_Parameterized(void *tileData, u16 currentX, u16 currentY, u16 width, u16 height) { - int r0, r1; - u8 r2; - u16 r3; + int glyphWidth, glyphHeight; + u8 sizeType; + u16 sizeX; if (width - currentX < gGlyphInfo.width) - r0 = width - currentX; + glyphWidth = width - currentX; else - r0 = gGlyphInfo.width; + glyphWidth = gGlyphInfo.width; if (height - currentY < gGlyphInfo.height) - r1 = height - currentY; + glyphHeight = height - currentY; else - r1 = gGlyphInfo.height; + glyphHeight = gGlyphInfo.height; - r2 = 0; - r3 = (width + (width & 7)) >> 3; - if (r0 > 8) - r2 |= 1; - if (r1 > 8) - r2 |= 2; + sizeType = 0; + sizeX = (width + (width & 7)) >> 3; + if (glyphWidth > 8) + sizeType |= 1; + if (glyphHeight > 8) + sizeType |= 2; - switch (r2) + switch (sizeType) { case 0: - GLYPH_COPY(0, 0, r0, r1, tileData, currentX, currentY, r3); + GLYPH_COPY(0, 0, glyphWidth, glyphHeight, tileData, currentX, currentY, sizeX); return; case 1: - GLYPH_COPY(0, 0, 8, r1, tileData, currentX, currentY, r3); - GLYPH_COPY(8, 0, r0 - 8, r1, tileData, currentX, currentY, r3); + GLYPH_COPY(0, 0, 8, glyphHeight, tileData, currentX, currentY, sizeX); + GLYPH_COPY(8, 0, glyphWidth - 8, glyphHeight, tileData, currentX, currentY, sizeX); return; case 2: - GLYPH_COPY(0, 0, r0, 8, tileData, currentX, currentY, r3); - GLYPH_COPY(0, 8, r0, r1 - 8, tileData, currentX, currentY, r3); + GLYPH_COPY(0, 0, glyphWidth, 8, tileData, currentX, currentY, sizeX); + GLYPH_COPY(0, 8, glyphWidth, glyphHeight - 8, tileData, currentX, currentY, sizeX); return; case 3: - GLYPH_COPY(0, 0, 8, 8, tileData, currentX, currentY, r3); - GLYPH_COPY(8, 0, r0 - 8, 8, tileData, currentX, currentY, r3); - GLYPH_COPY(0, 8, 8, r1 - 8, tileData, currentX, currentY, r3); - GLYPH_COPY(8, 8, r0 - 8, r1 - 8, tileData, currentX, currentY, r3); + GLYPH_COPY(0, 0, 8, 8, tileData, currentX, currentY, sizeX); + GLYPH_COPY(8, 0, glyphWidth - 8, 8, tileData, currentX, currentY, sizeX); + GLYPH_COPY(0, 8, 8, glyphHeight - 8, tileData, currentX, currentY, sizeX); + GLYPH_COPY(8, 8, glyphWidth - 8, glyphHeight - 8, tileData, currentX, currentY, sizeX); return; } } diff --git a/src/trainer_tower_sets.c b/src/trainer_tower_sets.c index 65bab48bc..a79580e10 100644 --- a/src/trainer_tower_sets.c +++ b/src/trainer_tower_sets.c @@ -322,7 +322,7 @@ static const struct TrainerTowerFloor sTrainerTowerFloor_Single_7 = { .checksum = 0x00016456 }; -static const struct TrainerTowerFloor gUnknown_847B36C = { +static const struct TrainerTowerFloor sTrainerTowerFloor_Single_Unused = { .id = 3, .floorIdx = MAX_TRAINER_TOWER_FLOORS, .challengeType = CHALLENGE_TYPE_SINGLE, @@ -5539,7 +5539,7 @@ static const struct TrainerTowerFloor sTrainerTowerFloor_Double_8 = { .checksum = 0x000160f4 }; -static const struct TrainerTowerFloor gUnknown_847FD0C = { +static const struct TrainerTowerFloor sTrainerTowerFloor_Double_Unused1 = { .id = 22, .floorIdx = MAX_TRAINER_TOWER_FLOORS, .challengeType = CHALLENGE_TYPE_DOUBLE, @@ -7179,7 +7179,7 @@ static const struct TrainerTowerFloor sTrainerTowerFloor_Mixed_2 = { .checksum = 0x0001624b }; -static const struct TrainerTowerFloor gUnknown_848144C = { +static const struct TrainerTowerFloor sTrainerTowerFloor_Double_Unused2 = { .id = 28, .floorIdx = MAX_TRAINER_TOWER_FLOORS, .challengeType = CHALLENGE_TYPE_DOUBLE, @@ -7773,7 +7773,7 @@ static const struct TrainerTowerFloor sTrainerTowerFloor_Double_7 = { .checksum = 0x00015272 }; -static const struct TrainerTowerFloor gUnknown_8481C0C = { +static const struct TrainerTowerFloor sTrainerTowerFloor_Double_Unused3 = { .id = 30, .floorIdx = MAX_TRAINER_TOWER_FLOORS, .challengeType = CHALLENGE_TYPE_DOUBLE, From 0517667b5b5eddb4c64ace3502e85c269e01c66c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 18 Nov 2022 22:02:26 -0500 Subject: [PATCH 22/42] Standardize battle_transition graphics --- ..._pokeball_tileset.png => big_pokeball.png} | Bin ...rid_square_tileset.png => grid_square.png} | Bin .../{vsbar_tileset.png => mugshot_banner.png} | Bin ...eball_tilemap.bin => sliding_pokeball.bin} | Bin graphics_file_rules.mk | 25 ------------------ src/battle_transition.c | 24 ++++++++--------- 6 files changed, 12 insertions(+), 37 deletions(-) rename graphics/battle_transitions/{big_pokeball_tileset.png => big_pokeball.png} (100%) rename graphics/battle_transitions/{grid_square_tileset.png => grid_square.png} (100%) rename graphics/battle_transitions/{vsbar_tileset.png => mugshot_banner.png} (100%) rename graphics/battle_transitions/{sliding_pokeball_tilemap.bin => sliding_pokeball.bin} (100%) diff --git a/graphics/battle_transitions/big_pokeball_tileset.png b/graphics/battle_transitions/big_pokeball.png similarity index 100% rename from graphics/battle_transitions/big_pokeball_tileset.png rename to graphics/battle_transitions/big_pokeball.png diff --git a/graphics/battle_transitions/grid_square_tileset.png b/graphics/battle_transitions/grid_square.png similarity index 100% rename from graphics/battle_transitions/grid_square_tileset.png rename to graphics/battle_transitions/grid_square.png diff --git a/graphics/battle_transitions/vsbar_tileset.png b/graphics/battle_transitions/mugshot_banner.png similarity index 100% rename from graphics/battle_transitions/vsbar_tileset.png rename to graphics/battle_transitions/mugshot_banner.png diff --git a/graphics/battle_transitions/sliding_pokeball_tilemap.bin b/graphics/battle_transitions/sliding_pokeball.bin similarity index 100% rename from graphics/battle_transitions/sliding_pokeball_tilemap.bin rename to graphics/battle_transitions/sliding_pokeball.bin diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 06ba0b330..77b059049 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -248,28 +248,6 @@ $(ROULETTEGFXDIR)/poke_icons2.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ $(ROULETTEGFXDIR)/makuhita.4bpp @cat $^ >$@ -$(BATTRANSGFXDIR)/85BBC14.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 -Wnum_tiles - -$(BATTRANSGFXDIR)/rayquaza.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 938 -Wnum_tiles - -$(BATTRANSGFXDIR)/frontier_square_1.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_1.4bpp - @cat $^ >$@ - -$(BATTRANSGFXDIR)/frontier_square_2.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_2.4bpp - @cat $^ >$@ - -$(BATTRANSGFXDIR)/frontier_square_3.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_3.4bpp - @cat $^ >$@ - -$(BATTRANSGFXDIR)/frontier_square_4.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_4.4bpp - @cat $^ >$@ - $(SLOTMACHINEGFXDIR)/reel_time_gfx.4bpp: $(SLOTMACHINEGFXDIR)/reel_time_pikachu.4bpp \ $(SLOTMACHINEGFXDIR)/reel_time_machine.4bpp @cat $^ >$@ @@ -450,9 +428,6 @@ $(FIELDEFFECTSGFXDIR)/pics/tree_disguise.4bpp: %.4bpp: %.png $(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 8 -Wnum_tiles - -$(BATTRANSGFXDIR)/frontier_transition.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 43 -Wnum_tiles graphics/tm_case/tm_case.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 91 -Wnum_tiles diff --git a/src/battle_transition.c b/src/battle_transition.c index b4f69f6b9..673a2f3d9 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -207,13 +207,13 @@ static void IncrementTrainerPicState(s16 spriteId); static s16 IsTrainerPicSlideDone(s16 spriteId); static void Mugshots_CreateTrainerPics(struct Task *task); -static const u32 sBigPokeball_Tileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); -static const u32 sPokeballTrail_Tileset[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); -static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); -static const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); +static const u32 sBigPokeball_Gfx[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp"); +static const u32 sSlidingPokeball_Tilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball.bin"); +static const u8 sSlidingPokeball_Gfx[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); +static const u32 sMugshotBanner_Gfx[] = INCBIN_U32("graphics/battle_transitions/mugshot_banner.4bpp"); static const u8 sUnusedBrendan_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); static const u8 sUnusedLass_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); -static const u32 sGridSquareTileset[] = INCBIN_U32("graphics/battle_transitions/grid_square_tileset.4bpp"); +static const u32 sGridSquare_Gfx[] = INCBIN_U32("graphics/battle_transitions/grid_square.4bpp"); // All battle transitions use the same intro static const TaskFunc sTasks_Intro[] = @@ -453,8 +453,8 @@ static const TransitionStateFunc sTransitionIntroFuncs[] = static const struct SpriteFrameImage sSpriteImage_Pokeball[] = { { - .data = sPokeball_Gfx, - .size = sizeof(sPokeball_Gfx), + .data = sSlidingPokeball_Gfx, + .size = sizeof(sSlidingPokeball_Gfx), }, }; @@ -928,7 +928,7 @@ static bool8 BigPokeball_Init(struct Task *task) InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - CpuCopy16(sBigPokeball_Tileset, tileset, 0x580); + CpuCopy16(sBigPokeball_Gfx, tileset, sizeof(sBigPokeball_Gfx)); LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; @@ -1098,7 +1098,7 @@ static bool8 PokeballsTrail_Init(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuCopy16(sPokeballTrail_Tileset, tileset, 0x40); + CpuCopy16(sSlidingPokeball_Tilemap, tileset, 0x40); CpuFill32(0, tilemap, BG_SCREEN_SIZE); LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; @@ -1897,7 +1897,7 @@ static bool8 Mugshot_SetGfx(struct Task *task) const u16 *mugshotsMap = sMugshotsTilemap; GetBg0TilesDst(&tilemap, &tileset); - CpuCopy16(sVsBarTileset, tileset, 0x1E0); + CpuCopy16(sMugshotBanner_Gfx, tileset, sizeof(sMugshotBanner_Gfx)); LoadPalette(sOpponentMugshotsPals[task->tMugshotId], 0xF0, 0x20); LoadPalette(sPlayerMugshotsPals[gSaveBlock2Ptr->playerGender], 0xFA, 0xC); @@ -2578,7 +2578,7 @@ static bool8 GridSquares_Init(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuCopy16(sGridSquareTileset, tileset, 0x20); + CpuCopy16(sGridSquare_Gfx, tileset, 0x20); CpuFill16(0xF0 << 8, tilemap, BG_SCREEN_SIZE); LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; @@ -2594,7 +2594,7 @@ static bool8 GridSquares_Main(struct Task *task) GetBg0TilemapDst(&tileset); task->tDelay = 3; task->tShrinkStage++; - CpuCopy16(&sGridSquareTileset[task->tShrinkStage * 8], tileset, 0x20); + CpuCopy16(&sGridSquare_Gfx[task->tShrinkStage * 8], tileset, 0x20); if (task->tShrinkStage > 13) { task->tState++; From f51f5b9545c7915c1a49d72aa3898f8b85593a10 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 19 Nov 2022 01:23:29 -0500 Subject: [PATCH 23/42] Review changes, label missed symbol --- src/battle_transition.c | 48 ++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 673a2f3d9..4c8782d2b 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -317,16 +317,24 @@ static const TransitionStateFunc sWave_Funcs[] = Wave_Main, Wave_End, }; -static const s16 gUnknown_83FA444[] = +static const s16 sSpiral_AngleData[] = { - 0x0, 0x26E, - 0x100, 0x69, - 0x0, -0x69, - -0x100, -0x266E, - 0x0, 0x26E, - 0x100, 0x69, - 0x0, -0x69, - -0x100, -0x266E, + 0x0, + 0x26E, + 0x100, + 0x69, + 0x0, + -0x69, + -0x100, + -0x266E, + 0x0, + 0x26E, + 0x100, + 0x69, + 0x0, + -0x69, + -0x100, + -0x266E, }; static const TransitionStateFunc sSpiral_Funcs[] = @@ -906,16 +914,16 @@ static void Task_BigPokeball(u8 taskId) u16 i; \ InitTransitionData(); \ ScanlineEffect_Clear(); \ - task->tBlendTarget1 = 16; \ - task->tBlendTarget2 = 0; \ - task->tSinIndex = 0; \ - task->tAmplitude = 0x4000; \ + (task)->tBlendTarget1 = 16; \ + (task)->tBlendTarget2 = 0; \ + (task)->tSinIndex = 0; \ + (task)->tAmplitude = 0x4000; \ sTransitionData->winIn = WININ_WIN0_ALL; \ sTransitionData->winOut = 0; \ sTransitionData->win0H = DISPLAY_WIDTH; \ sTransitionData->win0V = DISPLAY_HEIGHT; \ sTransitionData->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL; \ - sTransitionData->bldAlpha = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); \ + sTransitionData->bldAlpha = BLDALPHA_BLEND((task)->tBlendTarget2, (task)->tBlendTarget1); \ for (i = 0; i < DISPLAY_HEIGHT; i++) \ gScanlineEffectRegBuffers[1][i] = DISPLAY_WIDTH; \ SetVBlankCallback(VBlankCB_PatternWeave); \ @@ -1098,7 +1106,7 @@ static bool8 PokeballsTrail_Init(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuCopy16(sSlidingPokeball_Tilemap, tileset, 0x40); + CpuCopy16(sSlidingPokeball_Tilemap, tileset, sizeof(sSlidingPokeball_Tilemap)); CpuFill32(0, tilemap, BG_SCREEN_SIZE); LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; @@ -1665,7 +1673,7 @@ static void Spiral_UpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe y1 = DISPLAY_HEIGHT / 2; for (i = y1; i > 0; i--) { - sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; + sTransitionData->data[2] = x1 = ((i * sSpiral_AngleData[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; if (x1 < 0 || x1 > 255) continue; sTransitionData->cameraX = 400 - i; @@ -1681,7 +1689,7 @@ static void Spiral_UpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe y1 = DISPLAY_HEIGHT / 2; for (i = y1; i > 0; i--) { - sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; + sTransitionData->data[2] = x1 = ((i * sSpiral_AngleData[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; if (x1 < 0 || x1 > 255) continue; sTransitionData->cameraX = 400 - i; @@ -1695,7 +1703,7 @@ static void Spiral_UpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe y1 = -(DISPLAY_HEIGHT / 2 - 1); for (i = y1; i <= 0; i++) { - sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; + sTransitionData->data[2] = x1 = ((i * sSpiral_AngleData[deltaAngleMax]) >> 8) + DISPLAY_WIDTH / 2; if (x1 < 0 || x1 > 255) continue; sTransitionData->cameraX = 560 - i; @@ -1711,7 +1719,7 @@ static void Spiral_UpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe y1 = -(DISPLAY_HEIGHT / 2 - 1); for (i = y1; i <= 0; i++) { - sTransitionData->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + sTransitionData->data[2] = x1 = ((i * sSpiral_AngleData[deltaAngleMax]) >> 8) + 120; if (x1 < 0 || x1 > 255) continue; sTransitionData->cameraX = 560 - i; @@ -1755,7 +1763,7 @@ static bool8 Spiral_End(struct Task *task) Spiral_UpdateFrame(task->data[2], task->data[1], 1); sTransitionData->vblankDma |= TRUE; - if (++task->data[1] == 17) + if (++task->data[1] == (int)ARRAY_COUNT(sSpiral_AngleData) + 1) { Spiral_UpdateFrame(task->data[2], 16, 0); win_top = 48 - task->data[2]; From 3c3101b72ca9e2d1dad163bba0e4360b31103d73 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 19 Nov 2022 18:39:26 -0500 Subject: [PATCH 24/42] Sync mevent file names --- common_syms/{mevent.txt => mystery_gift.txt} | 0 include/link_rfu.h | 2 +- include/{mevent.h => mystery_gift.h} | 6 ++--- ...{mevent_server.h => mystery_gift_server.h} | 6 ++--- include/strings.h | 2 +- include/{menews_jisan.h => wonder_news.h} | 6 ++--- ld_script.txt | 24 +++++++++---------- src/cable_club.c | 2 +- src/easy_chat.c | 2 +- src/easy_chat_2.c | 2 +- src/field_control_avatar.c | 2 +- src/field_specials.c | 2 +- src/{mevent.c => mystery_gift.c} | 4 ++-- ...{mevent_client.c => mystery_gift_client.c} | 4 ++-- ...t_server_helpers.c => mystery_gift_link.c} | 2 +- src/mystery_gift_menu.c | 6 ++--- ...event_scripts.c => mystery_gift_scripts.c} | 2 +- ...{mevent_server.c => mystery_gift_server.c} | 4 ++-- src/mystery_gift_show_card.c | 2 +- src/mystery_gift_show_news.c | 2 +- src/new_game.c | 2 +- src/script.c | 2 +- src/trade_scene.c | 2 +- src/union_room.c | 2 +- src/union_room_message.c | 2 +- src/{menews_jisan.c => wonder_news.c} | 4 ++-- sym_common.txt | 2 +- sym_ewram.txt | 8 +++---- 28 files changed, 53 insertions(+), 53 deletions(-) rename common_syms/{mevent.txt => mystery_gift.txt} (100%) rename include/{mevent.h => mystery_gift.h} (97%) rename include/{mevent_server.h => mystery_gift_server.h} (97%) rename include/{menews_jisan.h => wonder_news.h} (59%) rename src/{mevent.c => mystery_gift.c} (99%) rename src/{mevent_client.c => mystery_gift_client.c} (99%) rename src/{mevent_server_helpers.c => mystery_gift_link.c} (99%) rename src/{mevent_scripts.c => mystery_gift_scripts.c} (99%) rename src/{mevent_server.c => mystery_gift_server.c} (99%) rename src/{menews_jisan.c => wonder_news.c} (98%) diff --git a/common_syms/mevent.txt b/common_syms/mystery_gift.txt similarity index 100% rename from common_syms/mevent.txt rename to common_syms/mystery_gift.txt diff --git a/include/link_rfu.h b/include/link_rfu.h index e3b60ccb4..65d1cf6dd 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -324,7 +324,7 @@ void RfuSetNormalDisconnectMode(void); void SetUnionRoomChatPlayerData(u32 numPlayers); void ClearRecvCommands(void); -#include "mevent_server.h" +#include "mystery_gift_server.h" extern const struct mevent_server_cmd gServerScript_ClientCanceledCard[]; #endif //GUARD_LINK_RFU_H diff --git a/include/mevent.h b/include/mystery_gift.h similarity index 97% rename from include/mevent.h rename to include/mystery_gift.h index 92c664d46..e25598c9a 100644 --- a/include/mevent.h +++ b/include/mystery_gift.h @@ -1,5 +1,5 @@ -#ifndef GUARD_MEVENT_H -#define GUARD_MEVENT_H +#ifndef GUARD_MYSTERY_GIFT_H +#define GUARD_MYSTERY_GIFT_H #include "global.h" @@ -105,4 +105,4 @@ void MysteryGift_DisableStats(void); bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId); u16 GetWonderCardFlagId(void); -#endif //GUARD_MEVENT_H +#endif // GUARD_MYSTERY_GIFT_H diff --git a/include/mevent_server.h b/include/mystery_gift_server.h similarity index 97% rename from include/mevent_server.h rename to include/mystery_gift_server.h index 9560fe25f..06bac26f3 100644 --- a/include/mevent_server.h +++ b/include/mystery_gift_server.h @@ -1,5 +1,5 @@ -#ifndef GUARD_MEVENT_SERVER_H -#define GUARD_MEVENT_SERVER_H +#ifndef GUARD_MYSTERY_GIFT_SERVER_H +#define GUARD_MYSTERY_GIFT_SERVER_H #include "global.h" @@ -126,4 +126,4 @@ void mevent_srv_init_wnews(void); void mevent_srv_new_wcard(void); u32 mevent_srv_common_do_exec(u16 * a0); -#endif //GUARD_MEVENT_SERVER_H +#endif //GUARD_MYSTERY_GIFT_SERVER_H diff --git a/include/strings.h b/include/strings.h index 0d1fe4afa..8326616b0 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1141,7 +1141,7 @@ extern const u8 gText_PeopleBattling[]; extern const u8 gText_PeopleInUnionRoom[]; extern const u8 gText_PeopleCommunicating[]; -// mevent +// mystery_gift extern const u8 gJPText_ReceiveMysteryGiftWithEReader[]; extern const u8 gJPText_SelectConnectFromEReaderMenu[]; extern const u8 gJPText_SelectConnectWithGBA[]; diff --git a/include/menews_jisan.h b/include/wonder_news.h similarity index 59% rename from include/menews_jisan.h rename to include/wonder_news.h index 8e1c251f9..ec845906e 100644 --- a/include/menews_jisan.h +++ b/include/wonder_news.h @@ -1,5 +1,5 @@ -#ifndef GUARD_MENEWS_JISAN_H -#define GUARD_MENEWS_JISAN_H +#ifndef GUARD_WONDER_NEWS_H +#define GUARD_WONDER_NEWS_H #include "global.h" @@ -7,4 +7,4 @@ void MENewsJisan_SetRandomReward(u32 a0); void MENewsJisanReset(void); void MENewsJisanStepCounter(void); -#endif //GUARD_MENEWS_JISAN_H +#endif //GUARD_WONDER_NEWS_H diff --git a/ld_script.txt b/ld_script.txt index 5c7a3751d..e19fa1ee6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -275,13 +275,13 @@ SECTIONS { src/slot_machine.o(.text); src/roamer.o(.text); src/mystery_gift_menu.o(.text); - src/mevent.o(.text); - src/mevent_server_helpers.o(.text); - src/mevent_client.o(.text); - src/mevent_server.o(.text); + src/mystery_gift.o(.text); + src/mystery_gift_link.o(.text); + src/mystery_gift_client.o(.text); + src/mystery_gift_server.o(.text); src/mystery_gift_show_card.o(.text); src/mystery_gift_show_news.o(.text); - src/menews_jisan.o(.text); + src/wonder_news.o(.text); src/seagallop.o(.text); src/pokemon_jump.o(.text); src/berry_crush.o(.text); @@ -568,15 +568,15 @@ SECTIONS { src/slot_machine.o(.rodata); src/roamer.o(.rodata); src/mystery_gift_menu.o(.rodata); - src/mevent.o(.rodata); - src/mevent_server_helpers.o(.rodata); - src/mevent_client.o(.rodata); - src/mevent_server.o(.rodata); + src/mystery_gift.o(.rodata); + src/mystery_gift_link.o(.rodata); + src/mystery_gift_client.o(.rodata); + src/mystery_gift_server.o(.rodata); src/mystery_gift_show_card.o(.rodata); src/mystery_gift_show_news.o(.rodata); - src/mevent_scripts.o(.rodata); - src/menews_jisan.o(.rodata); - src/menews_jisan.o(.rodata.str1.4); + src/mystery_gift_scripts.o(.rodata); + src/wonder_news.o(.rodata); + src/wonder_news.o(.rodata.str1.4); src/seagallop.o(.rodata); src/pokemon_jump.o(.rodata); src/berry_crush.o(.rodata); diff --git a/src/cable_club.c b/src/cable_club.c index b3fbc1f78..730b42d3d 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -10,7 +10,7 @@ #include "link.h" #include "load_save.h" #include "m4a.h" -#include "mevent.h" +#include "mystery_gift.h" #include "new_menu_helpers.h" #include "overworld.h" #include "quest_log.h" diff --git a/src/easy_chat.c b/src/easy_chat.c index 096bda634..443500453 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -4,7 +4,7 @@ #include "easy_chat.h" #include "event_data.h" #include "field_message_box.h" -#include "mevent.h" +#include "mystery_gift.h" #include "menu.h" #include "mail.h" #include "pokedex.h" diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 5a3c9a7cb..1688e92e0 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -3,7 +3,7 @@ #include "easy_chat.h" #include "event_data.h" #include "menu.h" -#include "mevent.h" +#include "mystery_gift.h" #include "overworld.h" #include "strings.h" #include "task.h" diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 615a70e60..c673a0753 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -14,7 +14,7 @@ #include "field_specials.h" #include "item_menu.h" #include "link.h" -#include "menews_jisan.h" +#include "wonder_news.h" #include "metatile_behavior.h" #include "overworld.h" #include "renewable_hidden_items.h" diff --git a/src/field_specials.c b/src/field_specials.c index 84ffd75e3..8ee9bb04c 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -28,7 +28,7 @@ #include "pokedex.h" #include "text_window.h" #include "menu.h" -#include "mevent.h" +#include "mystery_gift.h" #include "naming_screen.h" #include "party_menu.h" #include "dynamic_placeholder_text_util.h" diff --git a/src/mevent.c b/src/mystery_gift.c similarity index 99% rename from src/mevent.c rename to src/mystery_gift.c index 984c792b3..a12238263 100644 --- a/src/mevent.c +++ b/src/mystery_gift.c @@ -12,11 +12,11 @@ #include "event_data.h" #include "battle_tower.h" #include "new_game.h" -#include "menews_jisan.h" +#include "wonder_news.h" #include "cereader_tool.h" #include "mystery_gift_menu.h" #include "help_system.h" -#include "mevent.h" +#include "mystery_gift.h" #include "strings.h" struct MEventTaskData1 diff --git a/src/mevent_client.c b/src/mystery_gift_client.c similarity index 99% rename from src/mevent_client.c rename to src/mystery_gift_client.c index e2d226ed6..289de83f4 100644 --- a/src/mevent_client.c +++ b/src/mystery_gift_client.c @@ -5,8 +5,8 @@ #include "script.h" #include "battle_tower.h" #include "mystery_event_script.h" -#include "mevent.h" -#include "mevent_server.h" +#include "mystery_gift.h" +#include "mystery_gift_server.h" static EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL; diff --git a/src/mevent_server_helpers.c b/src/mystery_gift_link.c similarity index 99% rename from src/mevent_server_helpers.c rename to src/mystery_gift_link.c index 33148d539..f90151d6b 100644 --- a/src/mevent_server_helpers.c +++ b/src/mystery_gift_link.c @@ -2,7 +2,7 @@ #include "util.h" #include "link.h" #include "link_rfu.h" -#include "mevent_server.h" +#include "mystery_gift_server.h" static u32 mevent_receive_func(struct mevent_srv_sub *); static u32 mevent_send_func(struct mevent_srv_sub *); diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index b07a57ee0..7e65298cd 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -9,12 +9,12 @@ #include "title_screen.h" #include "list_menu.h" #include "link_rfu.h" -#include "mevent.h" +#include "mystery_gift.h" #include "save.h" #include "link.h" #include "event_data.h" -#include "mevent_server.h" -#include "menews_jisan.h" +#include "mystery_gift_server.h" +#include "wonder_news.h" #include "help_system.h" #include "strings.h" #include "constants/songs.h" diff --git a/src/mevent_scripts.c b/src/mystery_gift_scripts.c similarity index 99% rename from src/mevent_scripts.c rename to src/mystery_gift_scripts.c index 0c2918655..b99c16405 100644 --- a/src/mevent_scripts.c +++ b/src/mystery_gift_scripts.c @@ -1,5 +1,5 @@ #include "global.h" -#include "mevent_server.h" +#include "mystery_gift_server.h" extern const struct mevent_server_cmd gServerScript_ClientCanceledCard[]; diff --git a/src/mevent_server.c b/src/mystery_gift_server.c similarity index 99% rename from src/mevent_server.c rename to src/mystery_gift_server.c index 7d4929195..98211e2ae 100644 --- a/src/mevent_server.c +++ b/src/mystery_gift_server.c @@ -1,8 +1,8 @@ #include "global.h" #include "gflib.h" #include "script.h" -#include "mevent.h" -#include "mevent_server.h" +#include "mystery_gift.h" +#include "mystery_gift_server.h" EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL; diff --git a/src/mystery_gift_show_card.c b/src/mystery_gift_show_card.c index c462bda76..16382ce8f 100644 --- a/src/mystery_gift_show_card.c +++ b/src/mystery_gift_show_card.c @@ -5,7 +5,7 @@ #include "new_menu_helpers.h" #include "pokemon_icon.h" #include "mystery_gift_menu.h" -#include "mevent.h" +#include "mystery_gift.h" #include "battle_anim.h" #include "constants/mystery_gift.h" diff --git a/src/mystery_gift_show_news.c b/src/mystery_gift_show_news.c index b97e74c8c..e1112d726 100644 --- a/src/mystery_gift_show_news.c +++ b/src/mystery_gift_show_news.c @@ -2,7 +2,7 @@ #include "gflib.h" #include "menu_indicators.h" #include "new_menu_helpers.h" -#include "mevent.h" +#include "mystery_gift.h" #include "mystery_gift_menu.h" #include "menu.h" #include "link_rfu.h" diff --git a/src/new_game.c b/src/new_game.c index d6400d763..18ff73e29 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -22,7 +22,7 @@ #include "berry.h" #include "easy_chat.h" #include "union_room_chat.h" -#include "mevent.h" +#include "mystery_gift.h" #include "renewable_hidden_items.h" #include "trainer_tower.h" #include "script.h" diff --git a/src/script.c b/src/script.c index 641c63572..9095ab3ba 100644 --- a/src/script.c +++ b/src/script.c @@ -7,7 +7,7 @@ extern void ResetContextNpcTextColor(void); // field_specials extern u16 CalcCRC16WithTable(u8 *data, int length); // util -extern bool32 ValidateReceivedWonderCard(void); // mevent +extern bool32 ValidateReceivedWonderCard(void); #define RAM_SCRIPT_MAGIC 51 diff --git a/src/trade_scene.c b/src/trade_scene.c index 50f8e4780..8e0e2598d 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -6,7 +6,7 @@ #include "trade.h" #include "link.h" #include "link_rfu.h" -#include "mevent.h" +#include "mystery_gift.h" #include "graphics.h" #include "strings.h" #include "menu.h" diff --git a/src/union_room.c b/src/union_room.c index 8b8410e3d..5c21a0ac6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -20,7 +20,7 @@ #include "list_menu.h" #include "load_save.h" #include "menu.h" -#include "mevent.h" +#include "mystery_gift.h" #include "mystery_gift_menu.h" #include "new_menu_helpers.h" #include "overworld.h" diff --git a/src/union_room_message.c b/src/union_room_message.c index 21d74736f..d3c3c6e46 100644 --- a/src/union_room_message.c +++ b/src/union_room_message.c @@ -1,6 +1,6 @@ #include "global.h" #include "link_rfu.h" -#include "mevent_server.h" +#include "mystery_gift_server.h" #include "constants/union_room.h" ALIGNED(4) const u8 gText_UR_EmptyString[] = _(""); diff --git a/src/menews_jisan.c b/src/wonder_news.c similarity index 98% rename from src/menews_jisan.c rename to src/wonder_news.c index d8d4af917..20f0ab3e7 100644 --- a/src/menews_jisan.c +++ b/src/wonder_news.c @@ -1,8 +1,8 @@ #include "global.h" -#include "mevent.h" +#include "mystery_gift.h" #include "random.h" #include "event_data.h" -#include "menews_jisan.h" +#include "wonder_news.h" #include "constants/items.h" static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *); diff --git a/sym_common.txt b/sym_common.txt index e130c3bf4..51b041064 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -40,7 +40,7 @@ .include "fame_checker.o" .include "help_system_util.o" .align 4 - .include "mevent.o" + .include "mystery_gift.o" .align 4 .include "battle_controller_pokedude.o" .align 4 diff --git a/sym_ewram.txt b/sym_ewram.txt index f957d320b..cee4e8281 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -121,10 +121,10 @@ .include "src/slot_machine.o" .include "src/roamer.o" .include "src/mystery_gift_menu.o" - .include "src/mevent.o" - .include "src/mevent_server_helpers.o" - .include "src/mevent_client.o" - .include "src/mevent_server.o" + .include "src/mystery_gift.o" + .include "src/mystery_gift_link.o" + .include "src/mystery_gift_client.o" + .include "src/mystery_gift_server.o" .include "src/mystery_gift_show_card.o" .include "src/mystery_gift_show_news.o" .include "src/seagallop.o" From 97987bc1b7eca5ab4d8fce0852d7954877082e29 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Sun, 20 Nov 2022 08:11:13 +0800 Subject: [PATCH 25/42] Document src/region-map.c --- include/region_map.h | 2 +- src/region_map.c | 271 ++++++++++++++++++++++--------------------- 2 files changed, 139 insertions(+), 134 deletions(-) diff --git a/include/region_map.h b/include/region_map.h index ccbb6d2fc..fec528e1b 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -14,7 +14,7 @@ enum { u8 *GetMapName(u8 *dest, u16 mapsec, u16 fill); u8 *GetMapNameGeneric(u8 *dest, u16 mapsec); u8 *GetMapNameGeneric_(u8 *dest, u16 mapsec); -void InitRegionMapWithExitCB(u8 a0, void (*a1)(void)); +void InitRegionMapWithExitCB(u8 type, void (*callback)(void)); void CB2_OpenFlyMap(void); #endif // GUARD_REGION_MAP_H diff --git a/src/region_map.c b/src/region_map.c index a767ade9a..07232a3f6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -76,6 +76,15 @@ enum { MAPPERM_COUNT }; +enum { + MAPEDGE_TOP_LEFT, + MAPEDGE_MID_LEFT, + MAPEDGE_BOT_LEFT, + MAPEDGE_TOP_RIGHT, + MAPEDGE_MID_RIGHT, + MAPEDGE_BOT_RIGHT, +}; + #define FREE_IF_NOT_NULL(ptr) ({ \ if (ptr) { \ FREE_AND_SET_NULL(ptr); \ @@ -264,7 +273,7 @@ struct RegionMapGpuRegs struct FlyMap { u8 state; - u8 unknown; // Never read + u8 unused; // Never read bool8 selectedDestination; }; @@ -302,9 +311,9 @@ static u8 GetSelectedRegionMap(void); static void InitSwitchMapMenu(u8, u8, TaskFunc); static void Task_SwitchMapMenu(u8); static void FreeSwitchMapMenu(u8); -static bool8 sub_80C12EC(void); +static bool8 BrightenScreenForSwitchMapMenu(void); static void LoadSwitchMapTilemap(u8, u16 *); -static void DrawSwitchMapSelectionHighlight(void); +static void SetGpuRegsToDimScreen(void); static bool8 DimScreenForSwitchMapMenu(void); static bool8 HandleSwitchMapInput(void); static bool8 CreateSwitchMapCursor(void); @@ -324,7 +333,7 @@ static void Task_MapOpenAnim(u8); static void FreeMapOpenCloseAnim(void); static void FreeMapEdgeSprites(void); static bool8 MoveMapEdgesOutward(void); -static void sub_80C2B48(void); +static void SetGpuWindowDimsToMapEdges(void); static void DoMapCloseAnim(u8); static void Task_MapCloseAnim(u8); static bool8 MoveMapEdgesInward(void); @@ -387,12 +396,7 @@ static const u16 sPlayerIcon_RedPal[] = INCBIN_U16("graphics/region_map/player_i static const u16 sPlayerIcon_LeafPal[] = INCBIN_U16("graphics/region_map/player_icon_leaf.gbapal"); static const u16 sMiscIcon_Pal[] = INCBIN_U16("graphics/region_map/misc_icon.gbapal"); // For dungeon and fly icons static const u16 sRegionMap_Pal[] = INCBIN_U16("graphics/region_map/region_map.gbapal"); -static const u16 unref_83EF37C[] = { - RGB(0, 0, 31), - RGB(0, 12, 31), - RGB_WHITE, - RGB_WHITE -}; +static const u16 sUnusedPalette[] = { RGB(0, 0, 31), RGB(0, 12, 31), RGB_WHITE, RGB_WHITE }; static const u16 sSwitchMapCursor_Pal[] = INCBIN_U16("graphics/region_map/switch_map_cursor.gbapal"); static const u16 sMapEdge_Pal[] = INCBIN_U16("graphics/region_map/map_edge.gbapal"); static const u32 sSwitchMapCursorLeft_Gfx[] = INCBIN_U32("graphics/region_map/switch_map_cursor_left.4bpp.lz"); @@ -727,7 +731,7 @@ static const union AnimCmd *const sAnims_MapEdge[] = { sAnim_MapEdge }; -static const struct GpuWindowParams gUnknown_83F1C34 = { +static const struct GpuWindowParams sMapWindowDim = { .left = 24, .top = 16, .right = 216, @@ -952,12 +956,12 @@ static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) } } -static void sub_80BFEA0(void) +static void TintMapEdgesPalette(void) { - u16 pal[16]; - CpuCopy16(&sRegionMap_Pal[32], pal, sizeof(pal)); - RegionMap_DarkenPalette(pal, NELEMS(pal), 95); - LoadPalette(pal, 32, sizeof(pal)); + u16 mapEdgesPal[16]; + CpuCopy16(&sRegionMap_Pal[0x20], mapEdgesPal, sizeof(mapEdgesPal)); + RegionMap_DarkenPalette(mapEdgesPal, NELEMS(mapEdgesPal), 95); + LoadPalette(mapEdgesPal, 0x20, sizeof(mapEdgesPal)); LoadPalette(&sRegionMap_Pal[0x2F], 0x2F, sizeof(sRegionMap_Pal[0x2F])); } @@ -1105,7 +1109,7 @@ static bool8 LoadRegionMapGfx(void) break; case 1: LoadPalette(sRegionMap_Pal, 0, sizeof(sRegionMap_Pal)); - sub_80BFEA0(); + TintMapEdgesPalette(); if (sRegionMap->type != REGIONMAP_TYPE_NORMAL) { LoadPalette(&sTopBar_Pal[15], 16 * 0, sizeof(sTopBar_Pal[15])); @@ -1276,7 +1280,7 @@ static void Task_RegionMap(u8 taskId) DoMapCloseAnim(taskId); // FIXME: goto required to match // sRegionMap->mainState++; - goto _080C0798; + goto INCREMENT_MAIN_STATE_AND_BREAK; } else { @@ -1285,7 +1289,7 @@ static void Task_RegionMap(u8 taskId) break; case 5: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - _080C0798: + INCREMENT_MAIN_STATE_AND_BREAK: sRegionMap->mainState++; break; default: @@ -1420,7 +1424,9 @@ static void UpdateMapsecNameBox(void) ResetGpuRegs(); SetBldCnt(0, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_OBJ, BLDCNT_EFFECT_DARKEN); SetBldY(BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2); - SetWinIn(57, 57); + SetWinIn( + (WININ_WIN0_BG0 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR), + (WININ_WIN1_BG0 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR) >> 8); SetWinOut(WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[WIN_MAP_NAME]); SetGpuWindowDims(WIN_DUNGEON_NAME, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); @@ -1589,7 +1595,7 @@ static void ResetGpuRegsForSwitchMapMenu(void) SetBldAlpha(16 - sSwitchMapMenu->alpha, sSwitchMapMenu->alpha); } -static bool8 sub_80C1014(void) +static bool8 FadeSwitchMapMenuIn(void) { if (sSwitchMapMenu->alpha < 16) { @@ -1603,7 +1609,7 @@ static bool8 sub_80C1014(void) } } -static bool8 sub_80C1058(void) +static bool8 FadeSwitchMapMenuOut(void) { if (sSwitchMapMenu->alpha >= 2) { @@ -1649,9 +1655,9 @@ static void Task_SwitchMapMenu(u8 taskId) sSwitchMapMenu->mainState++; break; case 6: - if (sub_80C1014() == TRUE) + if (FadeSwitchMapMenuIn() == TRUE) { - DrawSwitchMapSelectionHighlight(); + SetGpuRegsToDimScreen(); sSwitchMapMenu->mainState++; } break; @@ -1681,7 +1687,7 @@ static void Task_SwitchMapMenu(u8 taskId) } break; case 10: - if (sub_80C12EC() == TRUE) + if (BrightenScreenForSwitchMapMenu() == TRUE) { FreeSwitchMapCursor(); ResetGpuRegsForSwitchMapMenu(); @@ -1689,7 +1695,7 @@ static void Task_SwitchMapMenu(u8 taskId) } break; case 11: - if (sub_80C1058() == TRUE) + if (FadeSwitchMapMenuOut() == TRUE) { sSwitchMapMenu->mainState++; } @@ -1716,7 +1722,7 @@ static void FreeSwitchMapMenu(u8 taskId) FREE_IF_NOT_NULL(sSwitchMapMenu); } -static bool8 sub_80C12EC(void) +static bool8 BrightenScreenForSwitchMapMenu(void) { if (sSwitchMapMenu->blendY != 0) { @@ -1748,7 +1754,7 @@ static void LoadSwitchMapTilemap(u8 bg, u16 *map) } } -static void DrawSwitchMapSelectionHighlight(void) +static void SetGpuRegsToDimScreen(void) { struct GpuWindowParams data; data.left = sSwitchMapMenu->highlight.left = 72; @@ -1757,7 +1763,7 @@ static void DrawSwitchMapSelectionHighlight(void) data.bottom = sSwitchMapMenu->highlight.bottom = sSwitchMapMenu->highlight.top + 32; ResetGpuRegs(); SetBldCnt(0, (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_OBJ), BLDCNT_EFFECT_DARKEN); - SetWinIn(31, 21); + SetWinIn((WININ_WIN0_BG_ALL | WININ_WIN0_OBJ), (WININ_WIN1_BG0 | WININ_WIN1_BG2 | WININ_WIN1_OBJ) >> 8); SetWinOut(WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetDispCnt(1, FALSE); SetGpuWindowDims(1, &data); @@ -1765,7 +1771,7 @@ static void DrawSwitchMapSelectionHighlight(void) static bool8 DimScreenForSwitchMapMenu(void) { - if (sSwitchMapMenu->blendY < (BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2)) + if (sSwitchMapMenu->blendY < 6) { sSwitchMapMenu->blendY++; SetBldY(sSwitchMapMenu->blendY); @@ -1797,7 +1803,7 @@ static bool8 HandleSwitchMapInput(void) sSwitchMapMenu->currentSelection++; changedSelection = TRUE; } - if (JOY_NEW(A_BUTTON) && sSwitchMapMenu->blendY == (BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2)) + if (JOY_NEW(A_BUTTON) && sSwitchMapMenu->blendY == 6) { PlaySE(SE_M_SWIFT); sSwitchMapMenu->chosenRegion = sSwitchMapMenu->currentSelection; @@ -2111,7 +2117,7 @@ static void InitScreenForDungeonMapPreview(void) ResetGpuRegs(); SetBldCnt(0, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_OBJ, BLDCNT_EFFECT_DARKEN); SetBldY(sDungeonMapPreview->blendY); - SetWinIn(0, 13); + SetWinIn(0, (WININ_WIN1_BG0 | WININ_WIN1_BG2 | WININ_WIN1_BG3) >> 8); SetWinOut(WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetDispCnt(1, FALSE); x = GetMapCursorX(); @@ -2126,7 +2132,7 @@ static void InitScreenForDungeonMapPreview(void) sDungeonMapPreview->bottomIncrement = (136 - sDungeonMapPreview->bottom) / 8; } -static bool8 UpdateDungeonMapPreview(bool8 a0) +static bool8 UpdateDungeonMapPreview(bool8 a0) // todo: rename a0 { struct GpuWindowParams data; @@ -2139,7 +2145,7 @@ static bool8 UpdateDungeonMapPreview(bool8 a0) sDungeonMapPreview->right += sDungeonMapPreview->rightIncrement; sDungeonMapPreview->bottom += sDungeonMapPreview->bottomIncrement; sDungeonMapPreview->updateCounter++; - if (sDungeonMapPreview->blendY < (BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2)) + if (sDungeonMapPreview->blendY < 6) sDungeonMapPreview->blendY++; } else @@ -2175,7 +2181,6 @@ static bool8 UpdateDungeonMapPreview(bool8 a0) static void SpriteCB_MapEdge(struct Sprite *sprite) { - } static void CreateMapEdgeSprite(u8 mapEdgeNum, u8 tileTag, u8 palTag) @@ -2249,28 +2254,28 @@ static bool8 LoadMapEdgeGfx(void) switch (sMapOpenCloseAnim->loadGfxState) { case 0: - LZ77UnCompWram(sMapEdge_TopLeft, sMapOpenCloseAnim->mapEdges[0]->tiles); - CreateMapEdgeSprite(0, 4, 4); + LZ77UnCompWram(sMapEdge_TopLeft, sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->tiles); + CreateMapEdgeSprite(MAPEDGE_TOP_LEFT, 4, 4); break; case 1: - LZ77UnCompWram(sMapEdge_MidLeft, sMapOpenCloseAnim->mapEdges[1]->tiles); - CreateMapEdgeSprite(1, 5, 5); + LZ77UnCompWram(sMapEdge_MidLeft, sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->tiles); + CreateMapEdgeSprite(MAPEDGE_MID_LEFT, 5, 5); break; case 2: - LZ77UnCompWram(sMapEdge_BottomLeft, sMapOpenCloseAnim->mapEdges[2]->tiles); - CreateMapEdgeSprite(2, 6, 6); + LZ77UnCompWram(sMapEdge_BottomLeft, sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->tiles); + CreateMapEdgeSprite(MAPEDGE_BOT_LEFT, 6, 6); break; case 3: - LZ77UnCompWram(sMapEdge_TopRight, sMapOpenCloseAnim->mapEdges[3]->tiles); - CreateMapEdgeSprite(3, 7, 7); + LZ77UnCompWram(sMapEdge_TopRight, sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->tiles); + CreateMapEdgeSprite(MAPEDGE_TOP_RIGHT, 7, 7); break; case 4: - LZ77UnCompWram(sMapEdge_MidRight, sMapOpenCloseAnim->mapEdges[4]->tiles); - CreateMapEdgeSprite(4, 8, 8); + LZ77UnCompWram(sMapEdge_MidRight, sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->tiles); + CreateMapEdgeSprite(MAPEDGE_MID_RIGHT, 8, 8); break; case 5: - LZ77UnCompWram(sMapEdge_BottomRight, sMapOpenCloseAnim->mapEdges[5]->tiles); - CreateMapEdgeSprite(5, 9, 9); + LZ77UnCompWram(sMapEdge_BottomRight, sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->tiles); + CreateMapEdgeSprite(MAPEDGE_BOT_RIGHT, 9, 9); break; case 6: LZ77UnCompWram(sMapEdge_Gfx, sMapOpenCloseAnim->tiles); @@ -2291,24 +2296,24 @@ static bool8 LoadMapEdgeGfx(void) static void InitScreenForMapOpenAnim(void) { struct GpuWindowParams data; - data.left = sMapOpenCloseAnim->mapEdges[0]->x + 8; + data.left = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->x + 8; data.top = 16; - data.right = sMapOpenCloseAnim->mapEdges[3]->x - 8; + data.right = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->x - 8; data.bottom = 160; SetBldCnt(0, BLDCNT_TGT1_BG1, BLDCNT_EFFECT_NONE); - SetWinIn(18, 0); + SetWinIn((WININ_WIN0_BG1 | WININ_WIN0_OBJ), 0); SetWinOut(WINOUT_WIN01_OBJ); SetGpuWindowDims(0, &data); SetDispCnt(0, FALSE); } -static void sub_80C253C(void) +static void SetGpuRegsToFadeMapToWhite(void) { - struct GpuWindowParams data = gUnknown_83F1C34; + struct GpuWindowParams data = sMapWindowDim; ResetGpuRegs(); SetBldCnt(BLDCNT_TGT2_BG1 >> 8, (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_BD), BLDCNT_EFFECT_LIGHTEN); SetBldY(sMapOpenCloseAnim->blendY); - SetWinIn(55, 0); + SetWinIn((WININ_WIN0_ALL & ~WININ_WIN0_BG3), 0); SetWinOut(WINOUT_WIN01_BG1 | WINOUT_WIN01_OBJ); SetGpuWindowDims(0, &data); SetDispCnt(0, FALSE); @@ -2374,7 +2379,7 @@ static void Task_MapOpenAnim(u8 taskId) ShowBg(3); ShowBg(1); SetMapEdgeInvisibility(NELEMS(sMapOpenCloseAnim->mapEdges), FALSE); - sub_80C2B48(); + SetGpuWindowDimsToMapEdges(); sMapOpenCloseAnim->openState++; break; case 5: @@ -2394,8 +2399,8 @@ static void Task_MapOpenAnim(u8 taskId) sMapOpenCloseAnim->openState++; break; case 8: - sMapOpenCloseAnim->blendY = (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3); - sub_80C253C(); + sMapOpenCloseAnim->blendY = 15; + SetGpuRegsToFadeMapToWhite(); SetBg0andBg3Hidden(FALSE); SetFlyIconInvisibility(GetSelectedRegionMap(), NELEMS(sMapIcons->flyIcons), FALSE); SetDungeonIconInvisibility(GetSelectedRegionMap(), NELEMS(sMapIcons->dungeonIcons), FALSE); @@ -2430,7 +2435,7 @@ static void Task_MapOpenAnim(u8 taskId) sMapOpenCloseAnim->openState++; break; case 12: - if (sMapOpenCloseAnim->blendY == BLDCNT_TGT1_BG1) + if (sMapOpenCloseAnim->blendY == 2) { SetMapEdgeInvisibility(NELEMS(sMapOpenCloseAnim->mapEdges), TRUE); sMapOpenCloseAnim->openState++; @@ -2456,79 +2461,79 @@ static void Task_MapOpenAnim(u8 taskId) static bool8 MoveMapEdgesOutward(void) { - sub_80C2B48(); - if (sMapOpenCloseAnim->mapEdges[0]->sprite->x == 0) + SetGpuWindowDimsToMapEdges(); + if (sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x == 0) { return TRUE; } else if (sMapOpenCloseAnim->moveState > 17) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 1; } else if (sMapOpenCloseAnim->moveState > 14) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 2; } else if (sMapOpenCloseAnim->moveState > 10) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 3; } else if (sMapOpenCloseAnim->moveState > 6) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 5; } else { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 8; } sMapOpenCloseAnim->moveState++; return FALSE; } -static void sub_80C2B48(void) +static void SetGpuWindowDimsToMapEdges(void) { struct GpuWindowParams data; - data.left = sMapOpenCloseAnim->mapEdges[0]->sprite->x; + data.left = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x; data.top = 16; - data.right = sMapOpenCloseAnim->mapEdges[3]->sprite->x; + data.right = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x; data.bottom = 160; SetGpuWindowDims(0, &data); } -static void sub_80C2B9C(void) +static void InitScreenForMapCloseAnim(void) { struct GpuWindowParams data; - data.left = sMapOpenCloseAnim->mapEdges[0]->x + 16; + data.left = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->x + 16; data.top = 16; - data.right = sMapOpenCloseAnim->mapEdges[3]->x - 16; + data.right = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->x - 16; data.bottom = 160; SetBldCnt(0, BLDCNT_TGT1_BG1, BLDCNT_EFFECT_NONE); - SetWinIn(18, 0); + SetWinIn((WININ_WIN0_BG1 | WININ_WIN0_OBJ), 0); SetWinOut(WINOUT_WIN01_OBJ); SetGpuWindowDims(0, &data); SetDispCnt(0, FALSE); @@ -2578,11 +2583,11 @@ static void Task_MapCloseAnim(u8 taskId) sMapOpenCloseAnim->closeState++; break; case 4: - sub_80C253C(); + SetGpuRegsToFadeMapToWhite(); sMapOpenCloseAnim->closeState++; break; case 5: - if (sMapOpenCloseAnim->blendY == (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3)) + if (sMapOpenCloseAnim->blendY == 15) { SetBldY(sMapOpenCloseAnim->blendY); sMapOpenCloseAnim->closeState++; @@ -2594,8 +2599,8 @@ static void Task_MapCloseAnim(u8 taskId) } break; case 6: - sub_80C2B9C(); - sub_80C2B48(); + InitScreenForMapCloseAnim(); + SetGpuWindowDimsToMapEdges(); PlaySE(SE_CARD_FLIPPING); sMapOpenCloseAnim->closeState++; break; @@ -2612,55 +2617,55 @@ static void Task_MapCloseAnim(u8 taskId) static bool8 MoveMapEdgesInward(void) { - sub_80C2B48(); - if (sMapOpenCloseAnim->mapEdges[0]->sprite->x == 104) + SetGpuWindowDimsToMapEdges(); + if (sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x == 104) { return TRUE; } else if (sMapOpenCloseAnim->moveState > 17) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 1; } else if (sMapOpenCloseAnim->moveState > 14) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 2; } else if (sMapOpenCloseAnim->moveState > 10) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 3; } else if (sMapOpenCloseAnim->moveState > 6) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 5; } else { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 8; } sMapOpenCloseAnim->moveState++; return FALSE; @@ -3994,7 +3999,7 @@ static void InitFlyMap(void) { sFlyMap = AllocZeroed(sizeof(struct FlyMap)); sFlyMap->state = 0; - sFlyMap->unknown = 0; + sFlyMap->unused = 0; } static void FreeFlyMap(u8 taskId) From 1ebe523b29ba59d401b517f61c7ea5209e91af29 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Sun, 20 Nov 2022 08:16:07 +0800 Subject: [PATCH 26/42] Document src/title_screen.c --- graphics/title_screen/blank_obj.png | Bin 148 -> 0 bytes graphics/title_screen/blank_sprite.png | Bin 0 -> 103 bytes ...blank_fire_sprite.png => blank_flames.png} | Bin graphics/title_screen/firered/fire_sprite.png | Bin 539 -> 0 bytes graphics/title_screen/firered/flames.png | Bin 0 -> 534 bytes .../firered/{fire_sprite.pal => slash.pal} | 0 .../title_screen/firered/slash_sprite.pal | 19 - .../leafgreen/blank_leaf_sprite.png | Bin 135 -> 0 bytes .../title_screen/leafgreen/leaf_sprite.png | Bin 350 -> 0 bytes graphics/title_screen/leafgreen/leaves.png | Bin 0 -> 294 bytes .../leafgreen/{leaf_sprite.pal => slash.pal} | 0 .../title_screen/leafgreen/slash_sprite.pal | 19 - graphics/title_screen/leafgreen/streak.png | Bin 0 -> 230 bytes graphics/title_screen/slash.png | Bin 0 -> 276 bytes graphics/title_screen/slash_sprite.png | Bin 188 -> 0 bytes .../{unk_83BFBE4.bin => unused1.bin} | Bin .../{unk_83C0408.bin => unused2.bin} | Bin .../{unk_83C0C00.bin => unused3.bin} | Bin .../{unk_83C139C.bin => unused4.bin} | Bin .../{unk_83C1BB8.bin => unused5.bin} | Bin .../{unk_83C2380.bin => unused6.bin} | Bin include/graphics.h | 4 +- src/graphics.c | 8 +- src/title_screen.c | 762 ++++++++++-------- 24 files changed, 434 insertions(+), 378 deletions(-) delete mode 100644 graphics/title_screen/blank_obj.png create mode 100644 graphics/title_screen/blank_sprite.png rename graphics/title_screen/firered/{blank_fire_sprite.png => blank_flames.png} (100%) delete mode 100644 graphics/title_screen/firered/fire_sprite.png create mode 100644 graphics/title_screen/firered/flames.png rename graphics/title_screen/firered/{fire_sprite.pal => slash.pal} (100%) delete mode 100644 graphics/title_screen/firered/slash_sprite.pal delete mode 100644 graphics/title_screen/leafgreen/blank_leaf_sprite.png delete mode 100644 graphics/title_screen/leafgreen/leaf_sprite.png create mode 100644 graphics/title_screen/leafgreen/leaves.png rename graphics/title_screen/leafgreen/{leaf_sprite.pal => slash.pal} (100%) delete mode 100644 graphics/title_screen/leafgreen/slash_sprite.pal create mode 100644 graphics/title_screen/leafgreen/streak.png create mode 100644 graphics/title_screen/slash.png delete mode 100644 graphics/title_screen/slash_sprite.png rename graphics/title_screen/{unk_83BFBE4.bin => unused1.bin} (100%) rename graphics/title_screen/{unk_83C0408.bin => unused2.bin} (100%) rename graphics/title_screen/{unk_83C0C00.bin => unused3.bin} (100%) rename graphics/title_screen/{unk_83C139C.bin => unused4.bin} (100%) rename graphics/title_screen/{unk_83C1BB8.bin => unused5.bin} (100%) rename graphics/title_screen/{unk_83C2380.bin => unused6.bin} (100%) diff --git a/graphics/title_screen/blank_obj.png b/graphics/title_screen/blank_obj.png deleted file mode 100644 index 682c224323a44b4aca64afba080b8004fee8aa5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QU(D&A+AAZx9mN7cFB@8)y>UU zuipFr&FlYFg(b}r-M&Vq09~`(k z{dDSOKF&)|*8h=t&(d$-CY_qM{WqH&%SyI+cS`>}L;&t;ucLK6U1fZ|zwV!fPN#iRfL00000000000000008-7g1>}|c0004@ zNkl07*qoM6N<$f>Jx?@c;k- literal 0 HcmV?d00001 diff --git a/graphics/title_screen/firered/fire_sprite.pal b/graphics/title_screen/firered/slash.pal similarity index 100% rename from graphics/title_screen/firered/fire_sprite.pal rename to graphics/title_screen/firered/slash.pal diff --git a/graphics/title_screen/firered/slash_sprite.pal b/graphics/title_screen/firered/slash_sprite.pal deleted file mode 100644 index 815547f37..000000000 --- a/graphics/title_screen/firered/slash_sprite.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -82 205 180 -0 0 0 -255 255 189 -255 246 139 -255 213 65 -255 172 0 -197 164 49 -115 180 139 -98 189 156 -90 197 164 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -82 205 180 diff --git a/graphics/title_screen/leafgreen/blank_leaf_sprite.png b/graphics/title_screen/leafgreen/blank_leaf_sprite.png deleted file mode 100644 index d783c12041999b07eb0bf66092aab85dfa537b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^96;>A0wfrY&u<9_QhuH;jv*3L&-N(_9dO`a{%mnU zVu$>c|J*ibWkt7^-jy_(slsH!xc-7_*QJOHQ!UrczPY7ZoyBp&6IFHVx69||7H&Ky jnm4DV-+HF)`oEERhj|WLTzP-b4`hR?mPz+4 zE%!P;`~Pgp|Fc2gnzw8z{(pALw>8!8rep!tLI6;4)p5OLKn`O`kY6x^!?PP{K+YXc z7sn8b-nAjOd5Y9NTHd_`HTk-v2>J|uz7I>tz z`N}KK4x0^;4+B+VR6^&j>d>isvgl~;m1OnUz5T+jbt@Tt52$6xHtcnn^)Gyan%WDk z$ce4)&v!qL&|3WT_dm4_*QaN*ZE#y&xA2{Z|LdQj+ePYf%<7&B#@;?)rp|J9%AA8I z7l{6QI`8M&WdF%_MX#Ine{vmBz4haq#jKM0do|h0b0j^YcK8^5jlY+bnf*%eg+z%+ tcG{1S{v&Uuf9*Hfe}0FY&Dql(ym>AkqzczPDpCT4fTydU%Q~loCIB!mmd^kH diff --git a/graphics/title_screen/leafgreen/leaves.png b/graphics/title_screen/leafgreen/leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..0887ab78e12d6fcfe9083e98380bad582614a55b GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zkZhg&9bGIrw=GkTMAH32}W^9VM{DYs!DiqUa+*`RODTecMcKRe~yn(B8`vVdwK0I0a?xZW}#XQQW!V@L(#(U54a!v;Lu zxqLxoO-_0n`tSVr;Z~V6L)L2A%usuwbIgxDJTv=v|1gwaywP#2UHGqnMdS62&LSTK ztX(wKxkTPaSDJn0RjlAUC-5~{@%Cn+{Y~NiEw85}UGng8|7Ufd?|E@7S7yh1KlKaJ zCES0V-7|e}mom@Y$?(j{Gq5aYP0g1XUQa_#_8vUCz+`?{_l#raC#LGH$B=8fhAs3{#z#9v$Wjn`0W3)DgVy~eQVybrTG8ZDc{yqznhXZy^`MvsGhyV)7O># z8MiPetN4in7eRK2m$*ih1m~xflqVLYGPwJ=0G**wmRh7>tY=c#y5u2HiMgkXV~9j} za>4NS%G}E0G|-o z|NsBLd-tyJqy0&s2xCc*UoeBivm0qZ4tt5GuPggAZecDX#i`a&%YZ`SC9V-A!TD(= z<%vb94DLQIKwA~cQi~Lf^-Ky|mplY2Df4u34DmR=_1r<;1_cq8z?Tlc^@FT0aLb*! z&uS*Q)8T}7*{yH3x$pZw|MfU{@%`^#+*4X4rm)IfVF4nkjuwFqR*4lXKqPjeh2sRP z$O{&c7cC4kScPV=2LiUFg%K4{a>H&x ZhHe=ZMdmrr7XeLS@O1TaS?83{1OP7aMtJ}L diff --git a/graphics/title_screen/unk_83BFBE4.bin b/graphics/title_screen/unused1.bin similarity index 100% rename from graphics/title_screen/unk_83BFBE4.bin rename to graphics/title_screen/unused1.bin diff --git a/graphics/title_screen/unk_83C0408.bin b/graphics/title_screen/unused2.bin similarity index 100% rename from graphics/title_screen/unk_83C0408.bin rename to graphics/title_screen/unused2.bin diff --git a/graphics/title_screen/unk_83C0C00.bin b/graphics/title_screen/unused3.bin similarity index 100% rename from graphics/title_screen/unk_83C0C00.bin rename to graphics/title_screen/unused3.bin diff --git a/graphics/title_screen/unk_83C139C.bin b/graphics/title_screen/unused4.bin similarity index 100% rename from graphics/title_screen/unk_83C139C.bin rename to graphics/title_screen/unused4.bin diff --git a/graphics/title_screen/unk_83C1BB8.bin b/graphics/title_screen/unused5.bin similarity index 100% rename from graphics/title_screen/unk_83C1BB8.bin rename to graphics/title_screen/unused5.bin diff --git a/graphics/title_screen/unk_83C2380.bin b/graphics/title_screen/unused6.bin similarity index 100% rename from graphics/title_screen/unk_83C2380.bin rename to graphics/title_screen/unused6.bin diff --git a/include/graphics.h b/include/graphics.h index 31c168b65..e86ea2e27 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4310,8 +4310,8 @@ extern const u8 gGraphics_TitleScreen_BoxArtMonMap[]; extern u16 gGraphics_TitleScreen_BackgroundPals[]; // If this is const, title_screen.c does not match extern const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[]; extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[]; -extern const u16 gGraphics_TitleScreen_FireOrLeafPals[]; -extern const u32 gGraphics_TitleScreen_BlankObjTiles[]; +extern const u16 gTitleScreen_Slash_Pal[]; +extern const u32 gTitleScreen_BlankSprite_Tiles[]; // battle_gfx_sfx_util extern const u32 gHealthboxSinglesPlayerGfx[]; diff --git a/src/graphics.c b/src/graphics.c index c188da6b4..0cdca0e46 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1364,8 +1364,7 @@ const u8 gGraphics_TitleScreen_BoxArtMonMap[] = INCBIN_U8("graphics/title_screen const u16 gGraphics_TitleScreen_BackgroundPals[] = INCBIN_U16("graphics/title_screen/firered/background.gbapal"); const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[] = INCBIN_U8("graphics/title_screen/copyright_press_start.4bpp.lz"); const u8 gGraphics_TitleScreen_CopyrightPressStartMap[] = INCBIN_U8("graphics/title_screen/copyright_press_start.bin.lz"); -const u16 gGraphics_TitleScreen_FireOrLeafPals[] = INCBIN_U16("graphics/title_screen/firered/fire_sprite.gbapal"); -const u32 gGraphics_TitleScreen_BlankObjTiles[] = INCBIN_U32("graphics/title_screen/blank_obj.4bpp.lz"); +const u16 gTitleScreen_Slash_Pal[] = INCBIN_U16("graphics/title_screen/firered/slash.gbapal"); #endif #ifdef LEAFGREEN @@ -1378,10 +1377,11 @@ const u8 gGraphics_TitleScreen_BoxArtMonMap[] = INCBIN_U8("graphics/title_screen const u16 gGraphics_TitleScreen_BackgroundPals[] = INCBIN_U16("graphics/title_screen/leafgreen/background.gbapal"); const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[] = INCBIN_U8("graphics/title_screen/copyright_press_start.4bpp.lz"); const u8 gGraphics_TitleScreen_CopyrightPressStartMap[] = INCBIN_U8("graphics/title_screen/copyright_press_start.bin.lz"); -const u16 gGraphics_TitleScreen_FireOrLeafPals[] = INCBIN_U16("graphics/title_screen/leafgreen/leaf_sprite.gbapal"); -const u32 gGraphics_TitleScreen_BlankObjTiles[] = INCBIN_U32("graphics/title_screen/blank_obj.4bpp.lz"); +const u16 gTitleScreen_Slash_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/slash.gbapal"); #endif +const u32 gTitleScreen_BlankSprite_Tiles[] = INCBIN_U32("graphics/title_screen/blank_sprite.4bpp.lz"); + const u16 gCreditsAllRightsReservedGfxPal[] = INCBIN_U16("graphics/credits/unk_8EAE548.gbapal"); const u8 gCreditsAllRightsReservedGfxTiles[] = INCBIN_U8("graphics/credits/unk_8EAE548.4bpp.lz"); const u8 gCreditsAllRightsReservedGfxMap[] = INCBIN_U8("graphics/credits/unk_8EAE548.bin.lz"); diff --git a/src/title_screen.c b/src/title_screen.c index eb65b00f7..3f7c51414 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -23,7 +23,7 @@ enum TitleScreenScene TITLESCREENSCENE_FLASHSPRITE, TITLESCREENSCENE_FADEIN, TITLESCREENSCENE_RUN, - TITLESCREENSCEEN_RESTART, + TITLESCREENSCENE_RESTART, TITLESCREENSCENE_CRY }; @@ -40,52 +40,57 @@ static void CB2_TitleScreenRun(void); static void VBlankCB(void); static void Task_TitleScreenTimer(u8 taskId); static void Task_TitleScreenMain(u8 taskId); -static void SetTitleScreenScene(s16 * data, u8 a1); -static void SetTitleScreenScene_Init(s16 * data); -static void SetTitleScreenScene_FlashSprite(s16 * data); -static void SetTitleScreenScene_FadeIn(s16 * data); -static void SetTitleScreenScene_Run(s16 * data); +static void SetTitleScreenScene(s16 *data, u8 sceneNum); +static void SetTitleScreenScene_Init(s16 *data); +static void SetTitleScreenScene_FlashSprite(s16 *data); +static void SetTitleScreenScene_FadeIn(s16 *data); +static void SetTitleScreenScene_Run(s16 *data); static void SetGpuRegsForTitleScreenRun(void); -static void SetTitleScreenScene_Restart(s16 * data); -static void SetTitleScreenScene_Cry(s16 * data); +static void SetTitleScreenScene_Restart(s16 *data); +static void SetTitleScreenScene_Cry(s16 *data); static void Task_TitleScreen_SlideWin0(u8 taskId); static void Task_TitleScreen_BlinkPressStart(u8 taskId); static void SignalEndTitleScreenPaletteSomethingTask(void); -static void UpdateScanlineEffectRegBuffer(s16 a0); +static void UpdateScanlineEffectRegBuffer(s16 y); static void ScheduleStopScanlineEffect(void); static void LoadMainTitleScreenPalsAndResetBgs(void); static void CB2_FadeOutTransitionToSaveClearScreen(void); -static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite *sprite); static void CB2_FadeOutTransitionToBerryFix(void); static void LoadSpriteGfxAndPals(void); -static void Task_FlameOrLeafSpawner(u8 taskId); +#if defined(FIRERED) +static void SpriteCallback_TitleScreenFlame(struct Sprite *sprite); +static void Task_FlameSpawner(u8 taskId); +#elif defined(LEAFGREEN) +static void SpriteCallback_TitleScreenLeaf(struct Sprite *sprite); +static void Task_LeafSpawner(u8 taskId); +#endif static void TitleScreen_srand(u8 taskId, u8 field, u16 seed); static u16 TitleScreen_rand(u8 taskId, u8 field); static u32 CreateBlankSprite(void); -static void SetPalOnOrCreateBlankSprite(bool32 a0); +static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite); static u8 CreateSlashSprite(void); static void ScheduleHideSlashSprite(u8 spriteId); static bool32 IsSlashSpriteHidden(u8 spriteId); static void SpriteCallback_Slash(struct Sprite *sprite); -// bg3 static const u8 sBorderBgTiles[] = INCBIN_U8("graphics/title_screen/border_bg.4bpp.lz"); + #if defined(FIRERED) static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/firered/border_bg.bin.lz"); #elif defined(LEAFGREEN) static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/leafgreen/border_bg.bin.lz"); #endif -//sprites -static const u32 sSlashSpriteTiles[] = INCBIN_U32("graphics/title_screen/slash_sprite.4bpp.lz"); +static const u32 sTitleScreen_Slash_Gfx[] = INCBIN_U32("graphics/title_screen/slash.4bpp.lz"); + #if defined(FIRERED) -static const u16 sSlashSpritePals[] = INCBIN_U16("graphics/title_screen/firered/slash_sprite.gbapal"); -static const u32 sFireSpriteTiles[] = INCBIN_U32("graphics/title_screen/firered/fire_sprite.4bpp.lz"); -static const u32 sBlankFireSpriteTiles[] = INCBIN_U32("graphics/title_screen/firered/blank_fire_sprite.4bpp.lz"); +static const u16 sTitleScreen_Flames_Pal[] = INCBIN_U16("graphics/title_screen/firered/flames.gbapal"); +static const u32 sTitleScreen_Flames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/flames.4bpp.lz"); +static const u32 sTitleScreen_BlankFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/blank_flames.4bpp.lz"); #elif defined(LEAFGREEN) -static const u16 sSlashSpritePals[] = INCBIN_U16("graphics/title_screen/leafgreen/slash_sprite.gbapal"); -static const u32 sLeafSpriteTiles[] = INCBIN_U32("graphics/title_screen/leafgreen/leaf_sprite.4bpp.lz"); -static const u32 sBlankLeafSpriteTiles[] = INCBIN_U32("graphics/title_screen/leafgreen/blank_leaf_sprite.4bpp.lz"); +static const u16 sTitleScreen_Leaves_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/leaves.gbapal"); +static const u32 sTitleScreen_Leaves_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/leaves.4bpp.lz"); +static const u32 sTitleScreen_Streak_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/streak.4bpp.lz"); #endif static const struct OamData sOamData_FlameOrLeaf = { @@ -98,85 +103,99 @@ static const struct OamData sOamData_FlameOrLeaf = { }; #if defined(FIRERED) -static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = { - ANIMCMD_FRAME(0x00, 3), - ANIMCMD_FRAME(0x04, 6), - ANIMCMD_FRAME(0x08, 6), - ANIMCMD_FRAME(0x0c, 6), - ANIMCMD_FRAME(0x10, 6), - ANIMCMD_FRAME(0x14, 6), - ANIMCMD_FRAME(0x18, 6), - ANIMCMD_FRAME(0x1c, 6), - ANIMCMD_FRAME(0x20, 6), - ANIMCMD_FRAME(0x24, 6), +static const union AnimCmd sSpriteAnim_Flame[] = { + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(8, 6), + ANIMCMD_FRAME(12, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(20, 6), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(28, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(36, 6), ANIMCMD_END }; -static const union AnimCmd sSpriteAnims_FlameOrLeaf_1[] = { - ANIMCMD_FRAME(0x18, 6), - ANIMCMD_FRAME(0x1c, 6), - ANIMCMD_FRAME(0x20, 6), - ANIMCMD_FRAME(0x24, 6), +static const union AnimCmd sSpriteAnim_Flame_Unused[] = { + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(28, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(36, 6), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = { - sSpriteAnims_FlameOrLeaf_0, - sSpriteAnims_FlameOrLeaf_1 +static const union AnimCmd *const sSpriteAnim_FlameOrLeaf[] = { + sSpriteAnim_Flame, + sSpriteAnim_Flame_Unused, }; #elif defined(LEAFGREEN) -static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = { - ANIMCMD_FRAME(0x00, 8), - ANIMCMD_FRAME(0x04, 8), - ANIMCMD_FRAME(0x08, 8), - ANIMCMD_FRAME(0x0c, 8), - ANIMCMD_FRAME(0x10, 8), - ANIMCMD_FRAME(0x14, 8), - ANIMCMD_FRAME(0x18, 8), - ANIMCMD_FRAME(0x1c, 8), - ANIMCMD_FRAME(0x20, 8), - ANIMCMD_FRAME(0x24, 8), - ANIMCMD_FRAME(0x28, 8), +static const union AnimCmd sSpriteAnim_Leaf[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_FRAME(12, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(20, 8), + ANIMCMD_FRAME(24, 8), + ANIMCMD_FRAME(28, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(36, 8), + ANIMCMD_FRAME(40, 8), ANIMCMD_JUMP(0) }; -static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = { - sSpriteAnims_FlameOrLeaf_0 +static const union AnimCmd *const sSpriteAnim_FlameOrLeaf[] = { + sSpriteAnim_Leaf }; #endif -static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = { - .tileTag = 0, - .paletteTag = 0, +enum { + TILE_TAG_FLAME_OR_LEAF, + TILE_TAG_BLANK_OR_STREAK, + TILE_TAG_BLANK, + TILE_TAG_SLASH, +}; + +enum { + PAL_TAG_DEFAULT, + PAL_TAG_UNUSED, + PAL_TAG_SLASH, +}; + +static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf = { + .tileTag = TILE_TAG_FLAME_OR_LEAF, + .paletteTag = PAL_TAG_DEFAULT, .oam = &sOamData_FlameOrLeaf, - .anims = sSpriteAnimTable_FlameOrLeaf, + .anims = sSpriteAnim_FlameOrLeaf, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; #if defined(FIRERED) -static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { - .tileTag = 1, - .paletteTag = 0, +static const struct SpriteTemplate sSpriteTemplate_BlankFlame = { + .tileTag = TILE_TAG_BLANK_OR_STREAK, + .paletteTag = PAL_TAG_DEFAULT, .oam = &sOamData_FlameOrLeaf, - .anims = sSpriteAnimTable_FlameOrLeaf, + .anims = sSpriteAnim_FlameOrLeaf, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; + #elif defined(LEAFGREEN) -static const struct OamData sOamData_LG_83BF950 = { +static const struct OamData sOamData_Streak = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 3 }; -static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { - .tileTag = 1, - .paletteTag = 0, - .oam = &sOamData_LG_83BF950, +static const struct SpriteTemplate sSpriteTemplate_Streak = { + .tileTag = TILE_TAG_BLANK_OR_STREAK, + .paletteTag = PAL_TAG_DEFAULT, + .oam = &sOamData_Streak, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -184,7 +203,7 @@ static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { }; #endif -static const struct OamData sOamData_UnknownEmptySprite = { +static const struct OamData sOamData_BlankSprite = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_V_RECTANGLE, .size = ST_OAM_SIZE_3, @@ -193,10 +212,10 @@ static const struct OamData sOamData_UnknownEmptySprite = { .paletteNum = 0 }; -static const struct SpriteTemplate sUnknownEmptySprite = { - .tileTag = 2, - .paletteTag = 2, - .oam = &sOamData_UnknownEmptySprite, +static const struct SpriteTemplate sSpriteTemplate_BlankSprite = { + .tileTag = TILE_TAG_BLANK, + .paletteTag = PAL_TAG_SLASH, + .oam = &sOamData_BlankSprite, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -213,8 +232,8 @@ static const struct OamData sOamData_SlashSprite = { }; static const struct SpriteTemplate sSlashSpriteTemplate = { - .tileTag = 3, - .paletteTag = 2, + .tileTag = TILE_TAG_SLASH, + .paletteTag = PAL_TAG_SLASH, .oam = &sOamData_SlashSprite, .anims = gDummySpriteAnimTable, .images = NULL, @@ -258,62 +277,66 @@ static const struct BgTemplate sBgTemplates[] = { } }; -static void (*const sSceneFuncs[])(s16 * data) = { - SetTitleScreenScene_Init, - SetTitleScreenScene_FlashSprite, - SetTitleScreenScene_FadeIn, - SetTitleScreenScene_Run, - SetTitleScreenScene_Restart, - SetTitleScreenScene_Cry +static void (*const sSceneFuncs[])(s16 *data) = { + [TITLESCREENSCENE_INIT] = SetTitleScreenScene_Init, + [TITLESCREENSCENE_FLASHSPRITE] = SetTitleScreenScene_FlashSprite, + [TITLESCREENSCENE_FADEIN] = SetTitleScreenScene_FadeIn, + [TITLESCREENSCENE_RUN] = SetTitleScreenScene_Run, + [TITLESCREENSCENE_RESTART] = SetTitleScreenScene_Restart, + [TITLESCREENSCENE_CRY] = SetTitleScreenScene_Cry }; #if defined(FIRERED) static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sFireSpriteTiles, 0x500, 0}, - {sBlankFireSpriteTiles, 0x500, 1}, - {gGraphics_TitleScreen_BlankObjTiles, 0x400, 2}, - {sSlashSpriteTiles, 0x800, 3} + {sTitleScreen_Flames_Gfx, 0x500, TILE_TAG_FLAME_OR_LEAF}, + {sTitleScreen_BlankFlames_Gfx, 0x500, TILE_TAG_BLANK_OR_STREAK}, + {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, + {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} }; -#elif defined(LEAFGREEN) -static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sLeafSpriteTiles, 0x580, 0}, - {sBlankLeafSpriteTiles, 0x100, 1}, - {gGraphics_TitleScreen_BlankObjTiles, 0x400, 2}, - {sSlashSpriteTiles, 0x800, 3} -}; -#endif static const struct SpritePalette sSpritePals[] = { - {sSlashSpritePals, 0}, - {gGraphics_TitleScreen_FireOrLeafPals, 2}, + {sTitleScreen_Flames_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, {} }; -#if defined(FIRERED) -static const u8 gUnknown_83BFBD4[] = { - 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90 +static const u8 sFlameXPositions[] = { + 4, 16, 26, 32, 48, 200, 216, 224, 232, 60, 76, 92, 108, 128, 144, 0 }; #elif defined(LEAFGREEN) -static const u16 gUnknown_LG_83BFA10[] = { +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {sTitleScreen_Leaves_Gfx, 0x580, TILE_TAG_FLAME_OR_LEAF}, + {sTitleScreen_Streak_Gfx, 0x100, TILE_TAG_BLANK_OR_STREAK}, + {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, + {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} +}; + +static const struct SpritePalette sSpritePals[] = { + {sTitleScreen_Leaves_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, + {} +}; + +static const u16 sStreakYPositions[] = { 40, 80, 110, 60, 90, 70, 100, 50 }; #endif -static const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/title_screen/unk_83BFBE4.bin.lz"); -static const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/title_screen/unk_83C0408.bin.lz"); -static const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/title_screen/unk_83C0C00.bin.lz"); -static const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/title_screen/unk_83C139C.bin.lz"); -static const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/title_screen/unk_83C1BB8.bin.lz"); -static const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/title_screen/unk_83C2380.bin.lz"); +static const u32 sUnused_Tilemap1[] = INCBIN_U32("graphics/title_screen/unused1.bin.lz"); +static const u32 sUnused_Tilemap2[] = INCBIN_U32("graphics/title_screen/unused2.bin.lz"); +static const u32 sUnused_Tilemap3[] = INCBIN_U32("graphics/title_screen/unused3.bin.lz"); +static const u32 sUnused_Tilemap4[] = INCBIN_U32("graphics/title_screen/unused4.bin.lz"); +static const u32 sUnused_Tilemap5[] = INCBIN_U32("graphics/title_screen/unused5.bin.lz"); +static const u32 sUnused_Tilemap6[] = INCBIN_U32("graphics/title_screen/unused6.bin.lz"); -static const u32 *const gUnknown_83C2BA4[] = { - gUnknown_83BFBE4, - gUnknown_83C0408, - gUnknown_83C0C00, - gUnknown_83C139C, - gUnknown_83C1BB8, - gUnknown_83C2380 +static const u32 *const sUnused_Tilemaps[] = { + sUnused_Tilemap1, + sUnused_Tilemap2, + sUnused_Tilemap3, + sUnused_Tilemap4, + sUnused_Tilemap5, + sUnused_Tilemap6, }; void CB2_InitTitleScreen(void) @@ -338,7 +361,7 @@ void CB2_InitTitleScreen(void) ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - sTitleScreenTimerTaskId = 0xFF; + sTitleScreenTimerTaskId = TASK_NONE; break; case 1: LoadPalette(gGraphics_TitleScreen_GameTitleLogoPals, 0, 0x1A0); @@ -358,7 +381,7 @@ void CB2_InitTitleScreen(void) case 2: if (!FreeTempTileDataBuffersIfPossible()) { - BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK); + BlendPalettes(PALETTES_BG, 16, RGB_BLACK); CreateTask(Task_TitleScreenMain, 4); sTitleScreenTimerTaskId = CreateTask(Task_TitleScreenTimer, 2); SetVBlankCallback(VBlankCB); @@ -401,46 +424,52 @@ static void VBlankCB(void) TransferPlttBuffer(); ScanlineEffect_InitHBlankDmaTransfer(); - if (sTitleScreenTimerTaskId != 0xFF) + if (sTitleScreenTimerTaskId != TASK_NONE) gTasks[sTitleScreenTimerTaskId].data[0]++; } static void Task_TitleScreenTimer(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (data[0] >= 2700) { - sTitleScreenTimerTaskId = 0xFF; + sTitleScreenTimerTaskId = TASK_NONE; DestroyTask(taskId); } } +// task data for Task_TitleScreenMain and the scenes +#define tSceneNum data[0] +#define tState data[1] +#define tHasCreatedBlankSprite data[5] +#define tSlashSpriteId data[6] + static void Task_TitleScreenMain(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON) - && data[0] != 3 && data[0] != 4 && data[0] != 5) + && tSceneNum != TITLESCREENSCENE_RUN + && tSceneNum != TITLESCREENSCENE_RESTART + && tSceneNum != TITLESCREENSCENE_CRY) { ScheduleStopScanlineEffect(); LoadMainTitleScreenPalsAndResetBgs(); - SetPalOnOrCreateBlankSprite(data[5]); + SetPalOnOrCreateBlankSprite(tHasCreatedBlankSprite); SetTitleScreenScene(data, TITLESCREENSCENE_RUN); } else - { - sSceneFuncs[data[0]](data); - } + sSceneFuncs[tSceneNum](data); } -static void SetTitleScreenScene(s16 * data, u8 a1) +static void SetTitleScreenScene(s16 *data, u8 sceneNum) { - data[1] = 0; - data[0] = a1; + tState = 0; + tSceneNum = sceneNum; } -static void SetTitleScreenScene_Init(s16 * data) +static void SetTitleScreenScene_Init(s16 *data) { struct ScanlineEffectParams params; @@ -462,16 +491,16 @@ static void SetTitleScreenScene_Init(s16 * data) SetTitleScreenScene(data, TITLESCREENSCENE_FLASHSPRITE); } -static void SetTitleScreenScene_FlashSprite(s16 * data) +static void SetTitleScreenScene_FlashSprite(s16 *data) { - switch (data[1]) + switch (tState) { case 0: SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); - data[2] = 0x80; + data[2] = 128; UpdateScanlineEffectRegBuffer(data[2]); - data[1]++; + tState++; break; case 1: data[2] -= 4; @@ -479,7 +508,7 @@ static void SetTitleScreenScene_FlashSprite(s16 * data) if (data[2] < 0) { gScanlineEffect.state = 3; - data[1]++; + tState++; } break; case 2: @@ -489,29 +518,28 @@ static void SetTitleScreenScene_FlashSprite(s16 * data) } } -static void SetTitleScreenScene_FadeIn(s16 * data) +static void SetTitleScreenScene_FadeIn(s16 *data) { - u32 r4; - switch (data[1]) + switch (tState) { case 0: data[2] = 0; - data[1]++; + tState++; break; case 1: data[2]++; if (data[2] > 10) { - TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 0x10); - BeginNormalPaletteFade(0x00002000, 9, 0x10, 0, RGB_BLACK); - data[1]++; + TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 16); + BeginNormalPaletteFade(1 << 0xD, 9, 16, 0, RGB_BLACK); + tState++; } break; case 2: if (!gPaletteFade.active) { data[2] = 0; - data[1]++; + tState++; } break; case 3: @@ -519,16 +547,16 @@ static void SetTitleScreenScene_FadeIn(s16 * data) if (data[2] > 36) { CreateTask(Task_TitleScreen_SlideWin0, 3); - BlendPalettesGradually(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); + BlendPalettesGradually(1 << 0xD, -4, 1, 16, RGB(30, 30, 31), 0, 0); data[2] = 0; - data[1]++; + tState++; } break; case 4: if (!IsBlendPalettesGraduallyTaskActive(0)) { - BlendPalettesGradually(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -4, 15, 0, RGB(30, 30, 31), 0, 0); + tState++; } break; case 5: @@ -536,15 +564,15 @@ static void SetTitleScreenScene_FadeIn(s16 * data) if (data[2] > 20) { data[2] = 0; - BlendPalettesGradually(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -4, 1, 16, RGB(30, 30, 31), 0, 0); + tState++; } break; case 6: if (!IsBlendPalettesGraduallyTaskActive(0)) { - BlendPalettesGradually(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -4, 15, 0, RGB(30, 30, 31), 0, 0); + tState++; } break; case 7: @@ -552,21 +580,22 @@ static void SetTitleScreenScene_FadeIn(s16 * data) if (data[2] > 20) { data[2] = 0; - BlendPalettesGradually(0x2000, -3, 0x00, 0x10, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -3, 0, 16, RGB(30, 30, 31), 0, 0); + tState++; } break; case 8: if (!IsBlendPalettesGraduallyTaskActive(0)) { - data[5] = 1; - r4 = (0x10000 << CreateBlankSprite()) | 0x00001FFF; - BlendPalettes(r4, 0x10, RGB(30, 30, 31)); - BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31)); + u32 palettes; + tHasCreatedBlankSprite = TRUE; + palettes = (PALETTES_BG & ~(1 << 0xD) & ~(1 << 0xE) & ~(1 << 0xF)) | (0x10000 << CreateBlankSprite()); + BlendPalettes(palettes, 16, RGB(30, 30, 31)); + BeginNormalPaletteFade(palettes, 1, 16, 0, RGB(30, 30, 31)); ShowBg(0); - CpuCopy16(gGraphics_TitleScreen_BoxArtMonPals, gPlttBufferUnfaded + 0xD0, 0x20); - BlendPalettesGradually(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); - data[1]++; + CpuCopy16(gGraphics_TitleScreen_BoxArtMonPals, gPlttBufferUnfaded + 0xD0, 32); + BlendPalettesGradually(1 << 0xD, 1, 15, 0, RGB(30, 30, 31), 0, 0); + tState++; } break; case 9: @@ -581,29 +610,33 @@ static void SetTitleScreenScene_FadeIn(s16 * data) #define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP) #define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON) -static void SetTitleScreenScene_Run(s16 * data) +static void SetTitleScreenScene_Run(s16 *data) { - switch (data[1]) + switch (tState) { case 0: SetHelpContext(HELPCONTEXT_TITLE_SCREEN); CreateTask(Task_TitleScreen_BlinkPressStart, 0); - CreateTask(Task_FlameOrLeafSpawner, 5); +#if defined(FIRERED) + CreateTask(Task_FlameSpawner, 5); +#elif defined(LEAFGREEN) + CreateTask(Task_LeafSpawner, 5); +#endif SetGpuRegsForTitleScreenRun(); - data[6] = CreateSlashSprite(); + tSlashSpriteId = CreateSlashSprite(); HelpSystem_Enable(); - data[1]++; + tState++; // fallthrough case 1: if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) { - ScheduleHideSlashSprite(data[6]); + ScheduleHideSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen); } else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) { - ScheduleHideSlashSprite(data[6]); + ScheduleHideSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToBerryFix); } @@ -613,7 +646,7 @@ static void SetTitleScreenScene_Run(s16 * data) } else if (!FuncIsActiveTask(Task_TitleScreenTimer)) { - SetTitleScreenScene(data, TITLESCREENSCEEN_RESTART); + SetTitleScreenScene(data, TITLESCREENSCENE_RESTART); } break; } @@ -622,21 +655,21 @@ static void SetTitleScreenScene_Run(s16 * data) static void SetGpuRegsForTitleScreenRun(void) { SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x3F, 0x1F)); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WINOBJ_ALL); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 13); } -static void SetTitleScreenScene_Restart(s16 * data) +static void SetTitleScreenScene_Restart(s16 *data) { - switch (data[1]) + switch (tState) { case 0: - ScheduleHideSlashSprite(data[6]); - data[1]++; + ScheduleHideSlashSprite(tSlashSpriteId); + tState++; break; case 1: - if (!gPaletteFade.active && !IsSlashSpriteHidden(data[6])) + if (!gPaletteFade.active && !IsSlashSpriteHidden(tSlashSpriteId)) { FadeOutMapMusic(10); BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 0x10, RGB_BLACK); @@ -649,7 +682,7 @@ static void SetTitleScreenScene_Restart(s16 * data) { DestroyTask(FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart)); data[2] = 0; - data[1]++; + tState++; } break; case 3: @@ -657,7 +690,7 @@ static void SetTitleScreenScene_Restart(s16 * data) if (data[2] >= 20) { DestroyTask(FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart)); - data[1]++; + tState++; } break; case 4: @@ -668,28 +701,28 @@ static void SetTitleScreenScene_Restart(s16 * data) } } -static void SetTitleScreenScene_Cry(s16 * data) +static void SetTitleScreenScene_Cry(s16 *data) { - switch (data[1]) + switch (tState) { case 0: if (!gPaletteFade.active) { PlayCry_Normal(TITLE_SPECIES, 0); - ScheduleHideSlashSprite(data[6]); + ScheduleHideSlashSprite(tSlashSpriteId); data[2] = 0; - data[1]++; + tState++; } break; case 1: if (data[2] < 90) data[2]++; - else if (!IsSlashSpriteHidden(data[6])) + else if (!IsSlashSpriteHidden(tSlashSpriteId)) { - BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE); + BeginNormalPaletteFade((PALETTES_ALL & ~(1 << 0x1C) & ~(1 << 0x1D) & ~(1 << 0x1E) & ~(1 << 0x1F)), 0, 0, 16, RGB_WHITE); SignalEndTitleScreenPaletteSomethingTask(); FadeOutBGM(4); - data[1]++; + tState++; } break; case 2: @@ -711,30 +744,35 @@ static void SetTitleScreenScene_Cry(s16 * data) } } +#undef tSceneNum +#undef tState +#undef tHasCreatedBlankSprite +#undef tSlashSpriteId + static void Task_TitleScreen_SlideWin0(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0x00, 0x3F)); - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x00, 0x37)); - SetGpuReg(REG_OFFSET_WIN0V, 0xA0); - SetGpuReg(REG_OFFSET_WIN0H, 0x00); - BlendPalettes(0x00004000, 0, RGB_BLACK); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, DISPLAY_HEIGHT)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0)); + BlendPalettes(1 << 0xE, 0, RGB_BLACK); data[0]++; break; case 1: - data[1] += 0x180; + data[1] += 24 << 4; data[2] = data[1] >> 4; - if (data[2] >= 0xF0) + if (data[2] >= DISPLAY_WIDTH) { - data[2] = 0xF0; + data[2] = DISPLAY_WIDTH; data[0]++; } - SetGpuReg(REG_OFFSET_WIN0H, data[2]); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, data[2])); break; case 2: data[3]++; @@ -745,15 +783,15 @@ static void Task_TitleScreen_SlideWin0(u8 taskId) } break; case 3: - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 0x3B)); - SetGpuReg(REG_OFFSET_WIN0H, 0xF0F0); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH)); ChangeBgX(2, -0xF000, 0); - BlendPalettes(0x00008000, 0, RGB_BLACK); - data[1] = 0xF00; + BlendPalettes(1 << 0xF, 0, RGB_BLACK); + data[1] = 10 * 24 << 4; data[0]++; break; case 4: - data[1] -= 0x180; + data[1] -= 24 << 4; data[2] = data[1] >> 4; if (data[2] <= 0) { @@ -761,7 +799,7 @@ static void Task_TitleScreen_SlideWin0(u8 taskId) data[0]++; } ChangeBgX(2, -data[2] << 8, 0); - SetGpuReg(REG_OFFSET_WIN0H, (data[2] << 8) | 0xF0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(data[2], DISPLAY_WIDTH)); break; case 5: ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); @@ -772,7 +810,7 @@ static void Task_TitleScreen_SlideWin0(u8 taskId) static void Task_TitleScreen_BlinkPressStart(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; s32 i; if (data[15] && gPaletteFade.active) @@ -820,39 +858,33 @@ static void SignalEndTitleScreenPaletteSomethingTask(void) gTasks[taskId].data[15] = TRUE; } -static void UpdateScanlineEffectRegBuffer(s16 a0) +static void UpdateScanlineEffectRegBuffer(s16 y) { s32 i; - if (a0 >= 0) - { - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0] = 16; - } + if (y >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][y] = 16; for (i = 0; i < 16; i++) { - if (a0 + i >= 0) - { - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 + i] = 15 - i; - } - if (a0 - i >= 0) - { - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 - i] = 15 - i; - } + if (y + i >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][y + i] = 15 - i; + + if (y - i >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][y - i] = 15 - i; + } - for (i = a0 + 16; i < 160; i++) + + for (i = y + 16; i < 160; i++) { if (i >= 0) - { gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; - } } - for (i = a0 - 16; i >= 0; i--) + + for (i = y - 16; i >= 0; i--) { if (i >= 0) - { gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; - } } } @@ -869,7 +901,7 @@ static void LoadMainTitleScreenPalsAndResetBgs(void) u8 taskId; taskId = FindTaskIdByFunc(Task_TitleScreen_SlideWin0); - if (taskId != 0xFF) + if (taskId != TASK_NONE) DestroyTask(taskId); DestroyBlendPalettesGraduallyTask(); @@ -910,24 +942,30 @@ static void LoadSpriteGfxAndPals(void) LoadSpritePalettes(sSpritePals); } -static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite *sprite) +#if defined(FIRERED) + +#define sPosX data[0] +#define sSpeedX data[1] +#define sPosY data[2] +#define sSpeedY data[3] + +static void SpriteCallback_TitleScreenFlame(struct Sprite *sprite) { - s16 * data = sprite->data; - sprite->data[0] -= data[1]; - sprite->x = sprite->data[0] >> 4; + s16 *data = sprite->data; + sPosX -= sSpeedX; + sprite->x = sPosX >> 4; if (sprite->x < -8) { DestroySprite(sprite); return; } - data[2] += data[3]; - sprite->y = data[2] >> 4; - if (sprite->y < 0x10 || sprite->y > 0xc8) + sPosY += sSpeedY; + sprite->y = sPosY >> 4; + if (sprite->y < 16 || sprite->y > 200) { DestroySprite(sprite); return; } -#if defined(FIRERED) if (sprite->animEnded) { DestroySprite(sprite); @@ -938,178 +976,228 @@ static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite *sprite) StartSpriteAnim(sprite, 0); sprite->invisible = FALSE; } -#elif defined(LEAFGREEN) - if (!data[5]) - { - s32 r2; - s32 r1; - data[6]++; - r2 = data[1] * data[6]; - r1 = data[6] * data[3]; - r2 = (r2 * r2) >> 4; - r1 = (r1 * r1) >> 4; - if (r2 + r1 >= 0x510) - data[5] = TRUE; - } -#endif } -#if defined(FIRERED) -static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) +static bool32 CreateFlameSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 createFlame) { u8 spriteId; - if (templateId) - { - spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, x, y, 0); - } + if (createFlame) + spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf, x, y, 0); else - { - spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, x, y, 0); - } + spriteId = CreateSprite(&sSpriteTemplate_BlankFlame, x, y, 0); + if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = x << 4; - gSprites[spriteId].data[1] = xspeed; - gSprites[spriteId].data[2] = y << 4; - gSprites[spriteId].data[3] = yspeed; + gSprites[spriteId].sPosX = x * 16; + gSprites[spriteId].sSpeedX = xspeed; + gSprites[spriteId].sPosY = y * 16; + gSprites[spriteId].sSpeedY = yspeed; gSprites[spriteId].data[4] = 0; gSprites[spriteId].data[5] = (xspeed * yspeed) % 16; - gSprites[spriteId].data[6] = templateId; - gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf; + gSprites[spriteId].data[6] = createFlame; + gSprites[spriteId].callback = SpriteCallback_TitleScreenFlame; return TRUE; } return FALSE; } -static void Task_FlameOrLeafSpawner(u8 taskId) +#undef sPosX +#undef sSpeedX +#undef sPosY +#undef sSpeedY + +#define tState data[0] +#define tTimer data[1] +#define tDelay data[2] +#define tOff_Seed 3 // data[3] and data[4] +#define tOffsetX data[5] + +static void Task_FlameSpawner(u8 taskId) { - s16 * data = gTasks[taskId].data; - s32 x, y, xspeed, yspeed, templateId; + s16 *data = gTasks[taskId].data; + s32 x, y, xspeed, yspeed; s32 i; - switch (data[0]) + switch (tState) { case 0: TitleScreen_srand(taskId, 3, 30840); - data[0]++; + tState++; break; case 1: - data[1]++; - if (data[1] >= data[2]) + tTimer++; + if (tTimer >= tDelay) { - data[1] = 0; + tTimer = 0; TitleScreen_rand(taskId, 3); - data[2] = 18; + tDelay = 18; xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; - y = (TitleScreen_rand(taskId, 3) % 3) + 0x74; + y = (TitleScreen_rand(taskId, 3) % 3) + 116; x = TitleScreen_rand(taskId, 3) % 240; - CreateFlameOrLeafSprite( + CreateFlameSprite( x, y, xspeed, yspeed, - (TitleScreen_rand(taskId, 3) % 16) < 8 ? 0 : 1 + (TitleScreen_rand(taskId, 3) % 16) < 8 ? FALSE : TRUE ); for (i = 0; i < 15; i++) { - CreateFlameOrLeafSprite( - data[5] + gUnknown_83BFBD4[i], + CreateFlameSprite( + tOffsetX + sFlameXPositions[i], y, xspeed, yspeed, - 1 + TRUE ); xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; } - data[5]++; - if (data[5] > 3) - data[5] = 0; + tOffsetX++; + if (tOffsetX > 3) + tOffsetX = 0; } } } +#undef tState +#undef tTimer +#undef tDelay +#undef tOff_Seed +#undef tOffsetX + #elif defined(LEAFGREEN) -static void CreateFlameOrLeafSprite(s32 y0, s32 x1, s32 y1) +#define sPosX data[0] +#define sSpeedX data[1] +#define sPosY data[2] +#define sSpeedY data[3] + +static void SpriteCallback_TitleScreenLeaf(struct Sprite *sprite) { - u8 spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, 0xF0, y0, 0); - if (spriteId != MAX_SPRITES) + s16 *data = sprite->data; + sprite->sPosX -= sSpeedX; + sprite->x = sprite->sPosX >> 4; + if (sprite->x < -8) { - gSprites[spriteId].data[0] = 0xF00; - gSprites[spriteId].data[1] = x1; - gSprites[spriteId].data[2] = y0 << 4; - gSprites[spriteId].data[3] = y1; - gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf; + DestroySprite(sprite); + return; + } + sPosY += sSpeedY; + sprite->y = sPosY >> 4; + if (sprite->y < 16 || sprite->y > 200) + { + DestroySprite(sprite); + return; + } + if (!data[5]) + { // meaningless, since data[5] and data[6] are never used outside this block + s32 r2; + s32 r1; + data[6]++; + r2 = sSpeedX * data[6]; + r1 = sSpeedY * data[6]; + r2 = (r2 * r2) >> 4; + r1 = (r1 * r1) >> 4; + if (r2 + r1 >= 81 << 4) + data[5] = TRUE; } } -static void SpriteCallback_LG_8079800(struct Sprite *sprite) +static void CreateLeafSprite(s32 y, s32 xspeed, s32 yspeed) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf, DISPLAY_WIDTH, y, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].sPosX = DISPLAY_WIDTH * 16; + gSprites[spriteId].sSpeedX = xspeed; + gSprites[spriteId].sPosY = y * 16; + gSprites[spriteId].sSpeedY = yspeed; + gSprites[spriteId].callback = SpriteCallback_TitleScreenLeaf; + } +} + +#undef sPosX +#undef sSpeedX +#undef sPosY +#undef sSpeedY + +static void SpriteCallback_Streak(struct Sprite *sprite) { sprite->x -= 7; if (sprite->x < -16) { - sprite->x = 0x100; + sprite->x = DISPLAY_WIDTH + 16; sprite->data[7]++; - if (sprite->data[7] >= NELEMS(gUnknown_LG_83BFA10)) + if (sprite->data[7] >= ARRAY_COUNT(sStreakYPositions)) sprite->data[7] = 0; - sprite->y = gUnknown_LG_83BFA10[sprite->data[7]]; + sprite->y = sStreakYPositions[sprite->data[7]]; } } -static void sub_LG_8079844(void) +static void CreateStreakSprites(void) { int i; u8 spriteId; for (i = 0; i < 4; i++) { - spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, 0x100 + 0x28 * i, gUnknown_LG_83BFA10[i], 0xFF); + spriteId = CreateSprite(&sSpriteTemplate_Streak, DISPLAY_WIDTH + 16 + 40 * i, sStreakYPositions[i], 0xFF); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[7] = i; - gSprites[spriteId].callback = SpriteCallback_LG_8079800; + gSprites[spriteId].callback = SpriteCallback_Streak; } } } -static void Task_FlameOrLeafSpawner(u8 taskId) -{ - s16 * data = gTasks[taskId].data; - s32 rval; - s32 r6; - s32 r4; - s32 r0; +#define tState data[0] +#define tTimer data[1] +#define tDelay data[2] +#define tOff_Seed 3 // data[3] and data[4] - switch (data[0]) +static void Task_LeafSpawner(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 rval; + s32 xspeed; + s32 yspeed; + s32 y; + + switch (tState) { case 0: - sub_LG_8079844(); - TitleScreen_srand(taskId, 3, 30840); - data[0]++; + CreateStreakSprites(); + TitleScreen_srand(taskId, tOff_Seed, 30840); + tState++; break; case 1: - data[1]++; - if (data[1] >= data[2]) + tTimer++; + if (tTimer >= tDelay) { - data[1] = 0; - data[2] = (TitleScreen_rand(taskId, 3) % 6) + 6; - rval = TitleScreen_rand(taskId, 3) % 30; - r6 = 16; + tTimer = 0; + tDelay = (TitleScreen_rand(taskId, tOff_Seed) % 6) + 6; + rval = TitleScreen_rand(taskId, tOff_Seed) % 30; + xspeed = 16; if (rval >= 6) { - r6 = 48; + xspeed = 48; if (rval < 12) - r6 = 24; + xspeed = 24; } - r4 = (TitleScreen_rand(taskId, 3) % 4) - 2; - r0 = (TitleScreen_rand(taskId, 3) % 88) + 32; - CreateFlameOrLeafSprite(r0, r6, r4); + yspeed = (TitleScreen_rand(taskId, tOff_Seed) % 4) - 2; + y = (TitleScreen_rand(taskId, tOff_Seed) % 88) + 32; + CreateLeafSprite(y, xspeed, yspeed); } break; } } +#undef tState +#undef tData1 +#undef tData2 +#undef tData3And4 + #endif //FRLG static void TitleScreen_srand(u8 taskId, u8 field, u16 seed) @@ -1129,30 +1217,34 @@ static u16 TitleScreen_rand(u8 taskId, u8 field) static u32 CreateBlankSprite(void) { - CreateSprite(&sUnknownEmptySprite, 0x18, 0x90, 0); - return IndexOfSpritePaletteTag(2); + CreateSprite(&sSpriteTemplate_BlankSprite, 24, 144, 0); + return IndexOfSpritePaletteTag(PAL_TAG_SLASH); } -static void SetPalOnOrCreateBlankSprite(bool32 mode) +static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite) { u32 palIdx; - if (mode) + if (hasCreatedBlankSprite) { - palIdx = IndexOfSpritePaletteTag(2); - LoadPalette(gGraphics_TitleScreen_FireOrLeafPals, palIdx * 16 + 0x100, 0x20); + palIdx = IndexOfSpritePaletteTag(PAL_TAG_SLASH); + LoadPalette(gTitleScreen_Slash_Pal, palIdx * 16 + 0x100, 0x20); } else CreateBlankSprite(); } +#define sState data[0] +#define sTimer data[1] +#define sHidden data[2] + static u8 CreateSlashSprite(void) { - u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -0x20, 0x1B, 1); + u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -32, 27, 1); if (spriteId != MAX_SPRITES) { gSprites[spriteId].callback = SpriteCallback_Slash; - gSprites[spriteId].data[1] = 540; + gSprites[spriteId].sTimer = 540; } return spriteId; } @@ -1160,54 +1252,52 @@ static u8 CreateSlashSprite(void) static void ScheduleHideSlashSprite(u8 spriteId) { if (spriteId != MAX_SPRITES) - gSprites[spriteId].data[2] = TRUE; + gSprites[spriteId].sHidden = TRUE; } static bool32 IsSlashSpriteHidden(u8 spriteId) { if (spriteId != MAX_SPRITES) - return gSprites[spriteId].data[0] ^ 2 ? TRUE : FALSE; + return gSprites[spriteId].sState ^ 2 ? TRUE : FALSE; else return FALSE; } static void SpriteCallback_Slash(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - if (sprite->data[2]) + if (sprite->sHidden) { sprite->invisible = TRUE; - sprite->data[0] = 2; + sprite->sState = 2; } - sprite->data[1]--; - if (sprite->data[1] == 0) + sprite->sTimer--; + if (sprite->sTimer == 0) { sprite->invisible = FALSE; - sprite->data[0] = 1; + sprite->sState = 1; } break; case 1: sprite->x += 9; if (sprite->x == 67) - { sprite->y -= 7; - } + if (sprite->x == 148) - { sprite->y += 7; - } + if (sprite->x > 272) { sprite->invisible = TRUE; - if (sprite->data[2]) - sprite->data[0] = 2; + if (sprite->sHidden) + sprite->sState = 2; else { - sprite->x = -0x20; - sprite->data[1] = 540; - sprite->data[0] = 0; + sprite->x = -32; + sprite->sTimer = 540; + sprite->sState = 0; } } break; @@ -1215,3 +1305,7 @@ static void SpriteCallback_Slash(struct Sprite *sprite) break; } } + +#undef sState +#undef sTimer +#undef sHidden From 6d6f207eb4a6348ccf63fdddd7c904ea977cf60b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 19 Nov 2022 18:52:29 -0500 Subject: [PATCH 27/42] Initial mystery gift sync --- data/mystery_event_msg.s | 8 +- data/scripts/cable_club.inc | 2 +- data/specials.inc | 2 +- include/constants/flags.h | 42 +-- include/constants/vars.h | 2 +- include/easy_chat.h | 2 +- include/event_data.h | 4 +- include/global.h | 4 +- include/main.h | 3 +- include/mystery_gift.h | 68 ++-- include/mystery_gift_server.h | 2 +- include/wonder_news.h | 13 +- src/easy_chat.c | 4 +- src/easy_chat_2.c | 2 +- src/event_data.c | 4 +- src/field_control_avatar.c | 2 +- src/field_specials.c | 10 +- src/mystery_gift.c | 588 ++++++++++++++++++---------------- src/mystery_gift_client.c | 12 +- src/mystery_gift_menu.c | 56 +--- src/mystery_gift_server.c | 16 +- src/new_game.c | 2 +- src/script.c | 4 +- src/wonder_news.c | 97 +++--- 24 files changed, 488 insertions(+), 461 deletions(-) diff --git a/data/mystery_event_msg.s b/data/mystery_event_msg.s index 26048ca52..fed033c39 100644 --- a/data/mystery_event_msg.s +++ b/data/mystery_event_msg.s @@ -208,7 +208,7 @@ MysteryEventScript_AuroraTicket:: setvaddress MysteryEventScript_AuroraTicket lock faceplayer - vgoto_if_set FLAG_GOT_AURORA_TICKET, AuroraTicket_Obtained + vgoto_if_set FLAG_RECEIVED_AURORA_TICKET, AuroraTicket_Obtained vgoto_if_set FLAG_FOUGHT_DEOXYS, AuroraTicket_Obtained checkitem ITEM_AURORA_TICKET, 1 vgoto_if_eq VAR_RESULT, TRUE, AuroraTicket_Obtained @@ -219,7 +219,7 @@ MysteryEventScript_AuroraTicket:: vgoto_if_eq VAR_RESULT, FALSE, AuroraTicket_NoBagSpace giveitem ITEM_AURORA_TICKET setflag FLAG_ENABLE_SHIP_BIRTH_ISLAND - setflag FLAG_GOT_AURORA_TICKET + setflag FLAG_RECEIVED_AURORA_TICKET vmessage sText_AuroraTicket2 waitmessage waitbuttonpress @@ -266,7 +266,7 @@ MysteryEventScript_MysticTicket:: setvaddress MysteryEventScript_MysticTicket lock faceplayer - vgoto_if_set FLAG_GOT_MYSTIC_TICKET, MysticTicket_Obtained + vgoto_if_set FLAG_RECEIVED_MYSTIC_TICKET, MysticTicket_Obtained vgoto_if_set FLAG_FOUGHT_LUGIA, MysticTicket_Obtained vgoto_if_set FLAG_FOUGHT_HO_OH, MysticTicket_Obtained checkitem ITEM_MYSTIC_TICKET, 1 @@ -278,7 +278,7 @@ MysteryEventScript_MysticTicket:: vgoto_if_eq VAR_RESULT, FALSE, MysticTicket_NoBagSpace giveitem ITEM_MYSTIC_TICKET setflag FLAG_ENABLE_SHIP_NAVEL_ROCK - setflag FLAG_GOT_MYSTIC_TICKET + setflag FLAG_RECEIVED_MYSTIC_TICKET vmessage sText_MysticTicket1 waitmessage waitbuttonpress diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index f725dbaea..e7f53ada2 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -3,7 +3,7 @@ CableClub_OnTransition:: end CableClub_EventScript_HideOrShowMysteryGiftMan:: - specialvar VAR_RESULT, ValidateReceivedWonderCard + specialvar VAR_RESULT, ValidateSavedWonderCard goto_if_eq VAR_RESULT, FALSE, EventScript_HideMysteryGiftMan clearflag FLAG_HIDE_MG_DELIVERYMEN return diff --git a/data/specials.inc b/data/specials.inc index f815d05d6..5c6e5eb0c 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -392,7 +392,7 @@ gSpecials:: def_special Script_SetHelpContext def_special BackupHelpContext def_special RestoreHelpContext - def_special ValidateReceivedWonderCard + def_special ValidateSavedWonderCard def_special SetUnlockedPokedexFlags def_special InitUnionRoom def_special BufferUnionRoomPlayerName diff --git a/include/constants/flags.h b/include/constants/flags.h index 5baa6c75c..24e44dd9e 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -701,26 +701,28 @@ #define FLAG_0x2A4 0x2A4 #define FLAG_CAN_USE_ROCKET_HIDEOUT_LIFT 0x2A5 #define FLAG_GOT_TEA 0x2A6 -#define FLAG_GOT_AURORA_TICKET 0x2A7 -#define FLAG_GOT_MYSTIC_TICKET 0x2A8 -#define FLAG_0x2A9 0x2A9 -#define FLAG_0x2AA 0x2AA -#define FLAG_0x2AB 0x2AB -#define FLAG_0x2AC 0x2AC -#define FLAG_0x2AD 0x2AD -#define FLAG_0x2AE 0x2AE -#define FLAG_0x2AF 0x2AF -#define FLAG_0x2B0 0x2B0 -#define FLAG_0x2B1 0x2B1 -#define FLAG_0x2B2 0x2B2 -#define FLAG_0x2B3 0x2B3 -#define FLAG_0x2B4 0x2B4 -#define FLAG_0x2B5 0x2B5 -#define FLAG_0x2B6 0x2B6 -#define FLAG_0x2B7 0x2B7 -#define FLAG_0x2B8 0x2B8 -#define FLAG_0x2B9 0x2B9 -#define FLAG_0x2BA 0x2BA +#define FLAG_RECEIVED_AURORA_TICKET 0x2A7 +#define FLAG_RECEIVED_MYSTIC_TICKET 0x2A8 +#define FLAG_RECEIVED_OLD_SEA_MAP 0x2A9 +#define FLAG_WONDER_CARD_UNUSED_1 0x2AA +#define FLAG_WONDER_CARD_UNUSED_2 0x2AB +#define FLAG_WONDER_CARD_UNUSED_3 0x2AC +#define FLAG_WONDER_CARD_UNUSED_4 0x2AD +#define FLAG_WONDER_CARD_UNUSED_5 0x2AE +#define FLAG_WONDER_CARD_UNUSED_6 0x2AF +#define FLAG_WONDER_CARD_UNUSED_7 0x2B0 +#define FLAG_WONDER_CARD_UNUSED_8 0x2B1 +#define FLAG_WONDER_CARD_UNUSED_9 0x2B2 +#define FLAG_WONDER_CARD_UNUSED_10 0x2B3 +#define FLAG_WONDER_CARD_UNUSED_11 0x2B4 +#define FLAG_WONDER_CARD_UNUSED_12 0x2B5 +#define FLAG_WONDER_CARD_UNUSED_13 0x2B6 +#define FLAG_WONDER_CARD_UNUSED_14 0x2B7 +#define FLAG_WONDER_CARD_UNUSED_15 0x2B8 +#define FLAG_WONDER_CARD_UNUSED_16 0x2B9 +#define FLAG_WONDER_CARD_UNUSED_17 0x2BA +#define NUM_WONDER_CARD_FLAGS (1 + FLAG_WONDER_CARD_UNUSED_17 - FLAG_RECEIVED_AURORA_TICKET) + #define FLAG_GOT_POWDER_JAR 0x2BB #define FLAG_FOUGHT_MEWTWO 0x2BC #define FLAG_FOUGHT_MOLTRES 0x2BD diff --git a/include/constants/vars.h b/include/constants/vars.h index 56dafee12..5c7bbf8a3 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -84,7 +84,7 @@ // Bits 12-15 are the same for the player's party. // Used by Quest Log. #define VAR_QUEST_LOG_MON_COUNTS 0x4027 -#define VAR_MENEWS_JISAN_STEP_COUNTER 0x4028 +#define VAR_WONDER_NEWS_STEP_COUNTER 0x4028 #define VAR_0x4029 0x4029 #define VAR_0x402A 0x402A #define VAR_0x402B 0x402B diff --git a/include/easy_chat.h b/include/easy_chat.h index 853060f4f..ec5488bca 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -36,7 +36,7 @@ struct EasyChatWordsByLetter u8 *CopyEasyChatWord(u8 *dest, u16 word); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows); bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength); -void EC_ResetMEventProfileMaybe(void); +void InitQuestionnaireWords(void); void InitEasyChatPhrases(void); void EnableRareWord(u8); bool8 InitEasyChatSelection(void); diff --git a/include/event_data.h b/include/event_data.h index 5a6f98c6c..285b4cc83 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -49,8 +49,8 @@ bool8 FlagGet(u16 id); u16 * GetVarPointer(u16 id); bool32 IsMysteryGiftEnabled(void); void ResetSpecialVars(void); -void ResetMysteryEventFlags(void); -void ResetMysteryEventVars(void); +void ClearMysteryGiftFlags(void); +void ClearMysteryGiftVars(void); bool32 IsNationalPokedexEnabled(void); void EnableNationalPokedex_RSE(void); void ClearTempFieldEventData(void); diff --git a/include/global.h b/include/global.h index 79dedcdc2..417cee4f7 100644 --- a/include/global.h +++ b/include/global.h @@ -627,7 +627,7 @@ struct FameCheckerSaveData struct WonderNewsMetadata { - u8 unk_0_0:2; + u8 newsType:2; u8 unk_0_2:3; u8 unk_0_5:3; u8 berry; @@ -635,7 +635,7 @@ struct WonderNewsMetadata struct WonderNews { - u16 newsId; + u16 id; u8 sendType; // SEND_TYPE_* u8 bgType; u8 titleText[WONDER_NEWS_TEXT_LENGTH]; diff --git a/include/main.h b/include/main.h index a27145c7b..4a5f79a9d 100644 --- a/include/main.h +++ b/include/main.h @@ -69,7 +69,8 @@ void StartTimer1(void); void SeedRngAndSetTrainerId(void); u16 GetGeneratedTrainerIdLower(void); -extern const char RomHeaderGameCode[4]; +#define GAME_CODE_LENGTH 4 +extern const char RomHeaderGameCode[GAME_CODE_LENGTH]; extern const char RomHeaderSoftwareVersion; extern u8 gLinkTransferringData; diff --git a/include/mystery_gift.h b/include/mystery_gift.h index e25598c9a..a8ec84f86 100644 --- a/include/mystery_gift.h +++ b/include/mystery_gift.h @@ -2,6 +2,8 @@ #define GUARD_MYSTERY_GIFT_H #include "global.h" +#include "main.h" +#include "constants/mystery_gift.h" #define CARD_STAT_BATTLES_WON 0 #define CARD_STAT_BATTLES_LOST 1 @@ -17,21 +19,21 @@ enum { NEWS_INPUT_NONE = 0xFF }; -struct MEventClientHeaderStruct +struct MysteryGiftLinkGameData { u32 unk_00; u16 unk_04; u32 unk_08; u16 unk_0C; u32 unk_10; - u16 id; - u16 unk_16[4]; - struct WonderCardMetadata unk_20; - u8 maxDistributionMons; - u8 playerName[7]; - u8 playerTrainerId[4]; - u16 easyChatProfile[6]; - u8 gameCode[4]; + u16 flagId; + u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS]; + struct WonderCardMetadata cardMetadata; + u8 maxStamps; + u8 playerName[PLAYER_NAME_LENGTH]; + u8 playerTrainerId[TRAINER_ID_LENGTH]; + u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT]; + u8 gameCode[GAME_CODE_LENGTH]; u8 version; }; @@ -66,41 +68,41 @@ extern const u16 gCard5Pal[]; struct WonderNews * GetSavedWonderNews(void); struct WonderCard * GetSavedWonderCard(void); -struct WonderCardMetadata * sav1_get_mevent_buffer_2(void); -struct WonderNewsMetadata * GetMENewsJisanStructPtr(void); -bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct WonderNews * src); -bool32 ValidateReceivedWonderNews(void); -bool32 ValidateReceivedWonderCard(void); -bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src); -bool32 OverwriteSavedWonderCardWithReceivedCard(const struct WonderCard * data); -void MEvent_WonderCardResetUnk08_6(struct WonderCard * buffer); -bool32 MEvent_ReceiveDistributionMon(const u16 * data); -void BuildMEventClientHeader(struct MEventClientHeaderStruct * data); -bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data); -u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void *unused); -u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void *unused); -bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1); -u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command); +struct WonderCardMetadata * GetSavedWonderCardMetadata(void); +struct WonderNewsMetadata * GetSavedWonderNewsMetadata(void); +bool32 SaveWonderNews(const struct WonderNews * news); +bool32 ValidateSavedWonderNews(void); +bool32 ValidateSavedWonderCard(void); +bool32 IsWonderNewsSameAsSaved(const u8 * news); +bool32 SaveWonderCard(const struct WonderCard * card); +void DisableWonderCardSending(struct WonderCard * card); +bool32 MysteryGift_TrySaveStamp(const u16 * stamp); +void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData * data); +bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData * data); +u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, void *unused); +u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, void *unused); +bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData * data, const u16 * words); +u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData * data, u32 stat); bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata); bool32 WonderNews_Init(const struct WonderNews * news); s32 WonderCard_Enter(void); s32 WonderNews_Enter(void); -void DestroyWonderCard(void); -void DestroyWonderNews(void); +void ClearSavedWonderCardAndRelated(void); +void ClearSavedWonderNewsAndRelated(void); void WonderCard_Destroy(void); void WonderNews_Destroy(void); s32 WonderCard_Exit(bool32 flag); s32 WonderNews_Exit(bool32 flag); -bool32 CheckReceivedGiftFromWonderCard(void); +bool32 IsSavedWonderCardGiftNotReceived(void); void WonderNews_AddScrollIndicatorArrowPair(void); void WonderNews_RemoveScrollIndicatorArrowPair(void); -bool32 WonderNews_Test_Unk_02(void); -bool32 WonderCard_Test_Unk_08_6(void); +bool32 IsSendingSavedWonderNewsAllowed(void); +bool32 IsSendingSavedWonderCardAllowed(void); u32 WonderNews_GetInput(u16 input); -void InitMEventData(void); -u16 MEvent_GetBattleCardCount(u32 command); -void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId); -u16 *GetMEventProfileECWordsMaybe(void); +void ClearMysteryGift(void); +u16 MysteryGift_GetCardStat(u32 stat); +void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId); +u16 *GetQuestionnaireWordsPtr(void); void MysteryGift_DisableStats(void); bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId); u16 GetWonderCardFlagId(void); diff --git a/include/mystery_gift_server.h b/include/mystery_gift_server.h index 06bac26f3..2a9070afb 100644 --- a/include/mystery_gift_server.h +++ b/include/mystery_gift_server.h @@ -102,7 +102,7 @@ struct mevent_srv_common void *recvBuffer; struct WonderCard * card; struct WonderNews * news; - struct MEventClientHeaderStruct * mevent_unk1442cc; + struct MysteryGiftLinkGameData * mevent_unk1442cc; void *sendBuffer1; u32 sendBuffer1Size; void *sendBuffer2; diff --git a/include/wonder_news.h b/include/wonder_news.h index ec845906e..3cbb46055 100644 --- a/include/wonder_news.h +++ b/include/wonder_news.h @@ -3,8 +3,15 @@ #include "global.h" -void MENewsJisan_SetRandomReward(u32 a0); -void MENewsJisanReset(void); -void MENewsJisanStepCounter(void); +enum { + WONDER_NEWS_NONE, + WONDER_NEWS_RECV_FRIEND, + WONDER_NEWS_RECV_WIRELESS, + WONDER_NEWS_SENT, +}; + +void WonderNews_SetReward(u32 newsType); +void WonderNews_Reset(void); +void WonderNews_IncrementStepCounter(void); #endif //GUARD_WONDER_NEWS_H diff --git a/src/easy_chat.c b/src/easy_chat.c index 443500453..563a7bd5c 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -472,10 +472,10 @@ void InitEasyChatPhrases(void) #endif } -void EC_ResetMEventProfileMaybe(void) +void InitQuestionnaireWords(void) { s32 i; - u16 *ptr = GetMEventProfileECWordsMaybe(); + u16 *ptr = GetQuestionnaireWordsPtr(); for (i = 0; i < 4; i++) ptr[i] = EC_WORD_UNDEFINED; } diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 1688e92e0..6951da8e8 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -271,7 +271,7 @@ void ShowEasyChatScreen(void) words = gSaveBlock1Ptr->easyChatBattleLost; break; case EASY_CHAT_TYPE_QUESTIONNAIRE: - words = GetMEventProfileECWordsMaybe(); + words = GetQuestionnaireWordsPtr(); break; case EASY_CHAT_TYPE_MAIL: words = gSaveBlock1Ptr->mail[gSpecialVar_0x8005].words; diff --git a/src/event_data.c b/src/event_data.c index 5d3bad5d6..13ec93917 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -129,7 +129,7 @@ bool32 IsMysteryGiftEnabled(void) return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLED); } -void ResetMysteryEventFlags(void) +void ClearMysteryGiftFlags(void) { FlagClear(FLAG_MYSTERY_GIFT_DONE); FlagClear(FLAG_MYSTERY_GIFT_1); @@ -149,7 +149,7 @@ void ResetMysteryEventFlags(void) FlagClear(FLAG_MYSTERY_GIFT_15); } -void ResetMysteryEventVars(void) +void ClearMysteryGiftVars(void) { VarSet(VAR_EVENT_PICHU_SLOT, 0); VarSet(VAR_MYSTERY_GIFT_1, 0); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index c673a0753..31dd27e17 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -215,7 +215,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (input->tookStep) { IncrementGameStat(GAME_STAT_STEPS); - MENewsJisanStepCounter(); + WonderNews_IncrementStepCounter(); IncrementRenewableHiddenItemStepCounter(); RunMassageCooldownStepCounter(); IncrementResortGorgeousStepCounter(); diff --git a/src/field_specials.c b/src/field_specials.c index 8ee9bb04c..45fc701a9 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1955,15 +1955,15 @@ u16 BattleCardAction(void) switch (gSpecialVar_Result) { case 0: - return MEvent_GetBattleCardCount(3); + return MysteryGift_GetCardStat(3); case 1: - return MEvent_GetBattleCardCount(4); + return MysteryGift_GetCardStat(4); case 2: - return MEvent_GetBattleCardCount(0); + return MysteryGift_GetCardStat(0); case 3: - return MEvent_GetBattleCardCount(1); + return MysteryGift_GetCardStat(1); case 4: - return MEvent_GetBattleCardCount(2); + return MysteryGift_GetCardStat(2); default: AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873); return 0; diff --git a/src/mystery_gift.c b/src/mystery_gift.c index a12238263..fa164b924 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -19,6 +19,8 @@ #include "mystery_gift.h" #include "strings.h" +#define CALC_CRC(data) CalcCRC16WithTable((void *)&(data), sizeof(data)) + struct MEventTaskData1 { u16 stateAdvanceDelay; @@ -36,44 +38,44 @@ struct MEventTaskData1 }; static void Task_EReaderComm(u8 taskId); -static bool32 IsReceivedWonderNewsHeaderValid(const struct WonderNews * src); -static void BlankWonderNews(void); -static void BlankMENewsJisan(void); -static bool32 IsReceivedWonderCardHeaderValid(const struct WonderCard * src); -static void BlankSavedWonderCard(void); -static void BlankMEventBuffer2(void); -static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 *idsList, s32 count); -static void BlankBuffer344(void); +static bool32 ValidateWonderNews(const struct WonderNews * src); +static void ClearSavedWonderNews(void); +static void ClearSavedWonderNewsMetadata(void); +static bool32 ValidateWonderCard(const struct WonderCard * src); +static void ClearSavedWonderCard(void); +static void ClearSavedWonderCardMetadata(void); +static void IncrementCardStatForNewTrainer(u32 eventId, u32 trainerId, u32 *idsList, s32 count); +static void ClearSavedTrainerIds(void); extern const u8 gMultiBootProgram_EReader_Start[]; extern const u8 gMultiBootProgram_EReader_End[]; -static const u16 sGiftItemFlagIds[] = { - FLAG_GOT_AURORA_TICKET, - FLAG_GOT_MYSTIC_TICKET, - FLAG_0x2A9, - FLAG_0x2AA, - FLAG_0x2AB, - FLAG_0x2AC, - FLAG_0x2AD, - FLAG_0x2AE, - FLAG_0x2AF, - FLAG_0x2B0, - FLAG_0x2B1, - FLAG_0x2B2, - FLAG_0x2B3, - FLAG_0x2B4, - FLAG_0x2B5, - FLAG_0x2B6, - FLAG_0x2B7, - FLAG_0x2B8, - FLAG_0x2B9, - FLAG_0x2BA +static const u16 sReceivedGiftFlags[] = { + FLAG_RECEIVED_AURORA_TICKET, + FLAG_RECEIVED_MYSTIC_TICKET, + FLAG_RECEIVED_OLD_SEA_MAP, // Not used until Emerald + FLAG_WONDER_CARD_UNUSED_1, + FLAG_WONDER_CARD_UNUSED_2, + FLAG_WONDER_CARD_UNUSED_3, + FLAG_WONDER_CARD_UNUSED_4, + FLAG_WONDER_CARD_UNUSED_5, + FLAG_WONDER_CARD_UNUSED_6, + FLAG_WONDER_CARD_UNUSED_7, + FLAG_WONDER_CARD_UNUSED_8, + FLAG_WONDER_CARD_UNUSED_9, + FLAG_WONDER_CARD_UNUSED_10, + FLAG_WONDER_CARD_UNUSED_11, + FLAG_WONDER_CARD_UNUSED_12, + FLAG_WONDER_CARD_UNUSED_13, + FLAG_WONDER_CARD_UNUSED_14, + FLAG_WONDER_CARD_UNUSED_15, + FLAG_WONDER_CARD_UNUSED_16, + FLAG_WONDER_CARD_UNUSED_17 }; struct MEvent_Str_1 sMEventSendToEReaderManager; -static EWRAM_DATA bool32 sReceivedWonderCardIsValid = FALSE; +static EWRAM_DATA bool32 sStatsEnabled = FALSE; void SendUnknownSerialData_Init(struct MEvent_Str_1 *mgr, size_t size, const void *data) { @@ -475,11 +477,11 @@ static void Task_EReaderComm(u8 taskId) } } -void InitMEventData(void) +void ClearMysteryGift(void) { CpuFill32(0, &gSaveBlock1Ptr->mysteryGift, sizeof(gSaveBlock1Ptr->mysteryGift)); - BlankMENewsJisan(); - EC_ResetMEventProfileMaybe(); + ClearSavedWonderNewsMetadata(); + InitQuestionnaireWords(); } struct WonderNews * GetSavedWonderNews(void) @@ -492,301 +494,310 @@ struct WonderCard * GetSavedWonderCard(void) return &gSaveBlock1Ptr->mysteryGift.card; } -struct WonderCardMetadata * sav1_get_mevent_buffer_2(void) +struct WonderCardMetadata * GetSavedWonderCardMetadata(void) { return &gSaveBlock1Ptr->mysteryGift.cardMetadata; } -struct WonderNewsMetadata * GetMENewsJisanStructPtr(void) +struct WonderNewsMetadata * GetSavedWonderNewsMetadata(void) { return &gSaveBlock1Ptr->mysteryGift.newsMetadata; } -u16 * GetMEventProfileECWordsMaybe(void) +u16 * GetQuestionnaireWordsPtr(void) { return gSaveBlock1Ptr->mysteryGift.questionnaireWords; } -void DestroyWonderNews(void) +// Equivalent to ClearSavedWonderCardAndRelated, but nothing else to clear +void ClearSavedWonderNewsAndRelated(void) { - BlankWonderNews(); + ClearSavedWonderNews(); } -bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct WonderNews * src) +bool32 SaveWonderNews(const struct WonderNews * news) { - if (!IsReceivedWonderNewsHeaderValid(src)) + if (!ValidateWonderNews(news)) return FALSE; - BlankWonderNews(); - gSaveBlock1Ptr->mysteryGift.news = *src; - gSaveBlock1Ptr->mysteryGift.newsCrc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.news, sizeof(struct WonderNews)); + + ClearSavedWonderNews(); + gSaveBlock1Ptr->mysteryGift.news = *news; + gSaveBlock1Ptr->mysteryGift.newsCrc = CALC_CRC(gSaveBlock1Ptr->mysteryGift.news); return TRUE; } -bool32 ValidateReceivedWonderNews(void) +bool32 ValidateSavedWonderNews(void) { - if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.news, sizeof(struct WonderNews)) != gSaveBlock1Ptr->mysteryGift.newsCrc) + if (CALC_CRC(gSaveBlock1Ptr->mysteryGift.news) != gSaveBlock1Ptr->mysteryGift.newsCrc) return FALSE; - if (!IsReceivedWonderNewsHeaderValid(&gSaveBlock1Ptr->mysteryGift.news)) + if (!ValidateWonderNews(&gSaveBlock1Ptr->mysteryGift.news)) return FALSE; return TRUE; } -static bool32 IsReceivedWonderNewsHeaderValid(const struct WonderNews * data) +static bool32 ValidateWonderNews(const struct WonderNews * news) { - if (data->newsId == 0) + if (news->id == 0) return FALSE; return TRUE; } -bool32 WonderNews_Test_Unk_02(void) +bool32 IsSendingSavedWonderNewsAllowed(void) { - const struct WonderNews * data = &gSaveBlock1Ptr->mysteryGift.news; - if (data->sendType == 0) + const struct WonderNews * news = &gSaveBlock1Ptr->mysteryGift.news; + if (news->sendType == SEND_TYPE_DISALLOWED) return FALSE; return TRUE; } -static void BlankWonderNews(void) +static void ClearSavedWonderNews(void) { CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryGift.news)); gSaveBlock1Ptr->mysteryGift.newsCrc = 0; } -static void BlankMENewsJisan(void) +static void ClearSavedWonderNewsMetadata(void) { - CpuFill32(0, GetMENewsJisanStructPtr(), sizeof(struct WonderNewsMetadata)); - MENewsJisanReset(); + CpuFill32(0, GetSavedWonderNewsMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.newsMetadata)); + WonderNews_Reset(); } -bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src) +bool32 IsWonderNewsSameAsSaved(const u8 * news) { - const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->mysteryGift.news; + const u8 * savedNews = (const u8 *)&gSaveBlock1Ptr->mysteryGift.news; u32 i; - if (!ValidateReceivedWonderNews()) + if (!ValidateSavedWonderNews()) return FALSE; - for (i = 0; i < sizeof(struct WonderNews); i++) + + for (i = 0; i < sizeof(gSaveBlock1Ptr->mysteryGift.news); i++) { - if (r5[i] != src[i]) + if (savedNews[i] != news[i]) return FALSE; } return TRUE; } -void DestroyWonderCard(void) +void ClearSavedWonderCardAndRelated(void) { - BlankSavedWonderCard(); - BlankMEventBuffer2(); - BlankBuffer344(); + ClearSavedWonderCard(); + ClearSavedWonderCardMetadata(); + ClearSavedTrainerIds(); ClearRamScript(); - ResetMysteryEventFlags(); - ResetMysteryEventVars(); + ClearMysteryGiftFlags(); + ClearMysteryGiftVars(); ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); } -bool32 OverwriteSavedWonderCardWithReceivedCard(const struct WonderCard * data) +bool32 SaveWonderCard(const struct WonderCard * card) { - struct WonderCardMetadata * r2; - struct WonderCard * r1; - if (!IsReceivedWonderCardHeaderValid(data)) + struct WonderCardMetadata * metadata; + if (!ValidateWonderCard(card)) return FALSE; - DestroyWonderCard(); - memcpy(&gSaveBlock1Ptr->mysteryGift.card, data, sizeof(struct WonderCard)); - gSaveBlock1Ptr->mysteryGift.cardCrc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.card, sizeof(struct WonderCard)); - // Annoying hack to match - r2 = &gSaveBlock1Ptr->mysteryGift.cardMetadata; - r1 = &gSaveBlock1Ptr->mysteryGift.card; - r2->iconSpecies = r1->iconSpecies; + + ClearSavedWonderCardAndRelated(); + memcpy(&gSaveBlock1Ptr->mysteryGift.card, card, sizeof(struct WonderCard)); + gSaveBlock1Ptr->mysteryGift.cardCrc = CALC_CRC(gSaveBlock1Ptr->mysteryGift.card); + metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + metadata->iconSpecies = (&gSaveBlock1Ptr->mysteryGift.card)->iconSpecies; return TRUE; } -bool32 ValidateReceivedWonderCard(void) +bool32 ValidateSavedWonderCard(void) { - if (gSaveBlock1Ptr->mysteryGift.cardCrc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.card, sizeof(struct WonderCard))) + if (gSaveBlock1Ptr->mysteryGift.cardCrc != CALC_CRC(gSaveBlock1Ptr->mysteryGift.card)) return FALSE; - if (!IsReceivedWonderCardHeaderValid(&gSaveBlock1Ptr->mysteryGift.card)) + if (!ValidateWonderCard(&gSaveBlock1Ptr->mysteryGift.card)) return FALSE; if (!ValidateRamScript()) return FALSE; return TRUE; } -static bool32 IsReceivedWonderCardHeaderValid(const struct WonderCard * data) +static bool32 ValidateWonderCard(const struct WonderCard * card) { - if (data->flagId == 0) + if (card->flagId == 0) return FALSE; - if (data->type > 2) + if (card->type >= CARD_TYPE_COUNT) return FALSE; - if (!(data->sendType == 0 || data->sendType == 1 || data->sendType == 2)) + if (!(card->sendType == SEND_TYPE_DISALLOWED + || card->sendType == SEND_TYPE_ALLOWED + || card->sendType == SEND_TYPE_ALLOWED_ALWAYS)) return FALSE; - if (data->bgType > 7) + if (card->bgType >= NUM_WONDER_BGS) return FALSE; - if (data->maxStamps > 7) + if (card->maxStamps > MAX_STAMP_CARD_STAMPS) return FALSE; return TRUE; } -bool32 WonderCard_Test_Unk_08_6(void) +bool32 IsSendingSavedWonderCardAllowed(void) { - const struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->sendType == 0) + const struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->sendType == SEND_TYPE_DISALLOWED) return FALSE; return TRUE; } -static void BlankSavedWonderCard(void) +static void ClearSavedWonderCard(void) { - CpuFill32(0, &gSaveBlock1Ptr->mysteryGift.card, sizeof(struct WonderCard)); + CpuFill32(0, &gSaveBlock1Ptr->mysteryGift.card, sizeof(gSaveBlock1Ptr->mysteryGift.card)); gSaveBlock1Ptr->mysteryGift.cardCrc = 0; } -static void BlankMEventBuffer2(void) +static void ClearSavedWonderCardMetadata(void) { - CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16)); + CpuFill32(0, GetSavedWonderCardMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.cardMetadata)); gSaveBlock1Ptr->mysteryGift.cardMetadataCrc = 0; } u16 GetWonderCardFlagId(void) { - if (ValidateReceivedWonderCard()) + if (ValidateSavedWonderCard()) return gSaveBlock1Ptr->mysteryGift.card.flagId; return 0; } -void MEvent_WonderCardResetUnk08_6(struct WonderCard * buffer) +void DisableWonderCardSending(struct WonderCard * card) { - if (buffer->sendType == 1) - buffer->sendType = 0; + if (card->sendType == SEND_TYPE_ALLOWED) + card->sendType = SEND_TYPE_DISALLOWED; } -static bool32 IsCardIdInValidRange(u16 a0) +static bool32 IsWonderCardFlagIDInValidRange(u16 flagId) { - if (a0 >= 1000 && a0 < 1020) + if (flagId >= WONDER_CARD_FLAG_OFFSET && flagId < WONDER_CARD_FLAG_OFFSET + NUM_WONDER_CARD_FLAGS) return TRUE; return FALSE; } -bool32 CheckReceivedGiftFromWonderCard(void) +bool32 IsSavedWonderCardGiftNotReceived(void) { u16 value = GetWonderCardFlagId(); - if (!IsCardIdInValidRange(value)) + if (!IsWonderCardFlagIDInValidRange(value)) return FALSE; - if (FlagGet(sGiftItemFlagIds[value - 1000]) == TRUE) + + // If flag is set, player has received gift from this card + if (FlagGet(sReceivedGiftFlags[value - WONDER_CARD_FLAG_OFFSET]) == TRUE) return FALSE; return TRUE; } -static s32 CountReceivedDistributionMons(const struct WonderCardMetadata * data, s32 size) +static s32 GetNumStampsInMetadata(const struct WonderCardMetadata * data, s32 size) { - s32 r3 = 0; + s32 numStamps = 0; s32 i; for (i = 0; i < size; i++) { - if (data->stampData[1][i] && data->stampData[0][i]) - r3++; + if (data->stampData[STAMP_ID][i] && data->stampData[STAMP_SPECIES][i]) + numStamps++; } - return r3; + return numStamps; } -static bool32 HasPlayerAlreadyReceivedDistributedMon(const struct WonderCardMetadata * data1, const u16 * data2, s32 size) +static bool32 IsStampInMetadata(const struct WonderCardMetadata * metadata, const u16 * stamp, s32 maxStamps) { s32 i; - for (i = 0; i < size; i++) + for (i = 0; i < maxStamps; i++) { - if (data1->stampData[1][i] == data2[1]) + if (metadata->stampData[STAMP_ID][i] == stamp[STAMP_ID]) return TRUE; - if (data1->stampData[0][i] == data2[0]) + if (metadata->stampData[STAMP_SPECIES][i] == stamp[STAMP_SPECIES]) return TRUE; } return FALSE; } -static bool32 IsWonderCardSpeciesValid(const u16 * data) +static bool32 ValidateStamp(const u16 * stamp) { - if (data[1] == 0) + if (stamp[STAMP_ID] == 0) return FALSE; - if (data[0] == SPECIES_NONE) + if (stamp[STAMP_SPECIES] == SPECIES_NONE) return FALSE; - if (data[0] >= NUM_SPECIES) + if (stamp[STAMP_SPECIES] >= NUM_SPECIES) return FALSE; return TRUE; } -static s32 ValidateCardAndCountMonsReceived(void) +static s32 GetNumStampsInSavedCard(void) { - struct WonderCard * data; - if (!ValidateReceivedWonderCard()) + struct WonderCard * card; + if (!ValidateSavedWonderCard()) return 0; - data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type != 1) + card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type != CARD_TYPE_STAMP) return 0; - return CountReceivedDistributionMons(&gSaveBlock1Ptr->mysteryGift.cardMetadata, data->maxStamps); + return GetNumStampsInMetadata(&gSaveBlock1Ptr->mysteryGift.cardMetadata, card->maxStamps); } -bool32 MEvent_ReceiveDistributionMon(const u16 * data) +bool32 MysteryGift_TrySaveStamp(const u16 * stamp) { - struct WonderCard * buffer = &gSaveBlock1Ptr->mysteryGift.card; - s32 capacity = buffer->maxStamps; + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + s32 maxStamps = card->maxStamps; s32 i; - if (!IsWonderCardSpeciesValid(data)) + if (!ValidateStamp(stamp)) return FALSE; - if (HasPlayerAlreadyReceivedDistributedMon(&gSaveBlock1Ptr->mysteryGift.cardMetadata, data, capacity)) + if (IsStampInMetadata(&gSaveBlock1Ptr->mysteryGift.cardMetadata, stamp, maxStamps)) return FALSE; - for (i = 0; i < capacity; i++) + for (i = 0; i < maxStamps; i++) { - if (gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[1][i] == 0 && gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[0][i] == 0) + if (gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_ID][i] == 0 + && gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_SPECIES][i] == SPECIES_NONE) { - gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[1][i] = data[1]; - gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[0][i] = data[0]; + gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_ID][i] = stamp[STAMP_ID]; + gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_SPECIES][i] = stamp[STAMP_SPECIES]; return TRUE; } } return FALSE; } +#define GAME_DATA_VALID_VAR 0x101 + #if defined(FIRERED) -#define MEVENT_HEADER_VERSION_CODE 1 +#define VERSION_CODE 1 #elif defined(LEAFGREEN) -#define MEVENT_HEADER_VERSION_CODE 2 +#define VERSION_CODE 2 #endif -void BuildMEventClientHeader(struct MEventClientHeaderStruct * data) +void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData * data) { s32 i; - CpuFill32(0, data, sizeof(struct MEventClientHeaderStruct)); + CpuFill32(0, data, sizeof(*data)); // Magic - data->unk_00 = 0x101; + data->unk_00 = GAME_DATA_VALID_VAR; data->unk_04 = 1; data->unk_08 = 1; data->unk_0C = 1; - data->unk_10 = MEVENT_HEADER_VERSION_CODE; + data->unk_10 = VERSION_CODE; // Check whether a card already exists - if (ValidateReceivedWonderCard()) + if (ValidateSavedWonderCard()) { // Populate fields - data->id = GetSavedWonderCard()->flagId; - data->unk_20 = *sav1_get_mevent_buffer_2(); - data->maxDistributionMons = GetSavedWonderCard()->maxStamps; + data->flagId = GetSavedWonderCard()->flagId; + data->cardMetadata = *GetSavedWonderCardMetadata(); + data->maxStamps = GetSavedWonderCard()->maxStamps; } else - data->id = 0; + { + data->flagId = 0; + } - // Get something - for (i = 0; i < 4; i++) - data->unk_16[i] = gSaveBlock1Ptr->mysteryGift.questionnaireWords[i]; + for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) + data->questionnaireWords[i] = gSaveBlock1Ptr->mysteryGift.questionnaireWords[i]; - // Get player ID CopyTrainerId(data->playerTrainerId, gSaveBlock2Ptr->playerTrainerId); StringCopy(data->playerName, gSaveBlock2Ptr->playerName); - for (i = 0; i < 6; i++) + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) data->easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i]; - memcpy(data->gameCode, RomHeaderGameCode, 4); + + memcpy(data->gameCode, RomHeaderGameCode, GAME_CODE_LENGTH); data->version = RomHeaderSoftwareVersion; } -bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data) +bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData * data) { - if (data->unk_00 != 0x101) + if (data->unk_00 != GAME_DATA_VALID_VAR) return FALSE; if (!(data->unk_04 & 1)) return FALSE; @@ -799,145 +810,156 @@ bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data) return TRUE; } -u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void *unused) +u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, void *unused) { - if (a1->id == 0) + // Has a Wonder Card already? + if (data->flagId == 0) return 0; - if (*a0 == a1->id) + + // Has this Wonder Card already? + if (*flagId == data->flagId) return 1; + + // Player has a different Wonder Card return 2; } -u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void *unused) +u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, void *unused) { - s32 numSpaces = a1->maxDistributionMons - CountReceivedDistributionMons(&a1->unk_20, a1->maxDistributionMons); - if (numSpaces == 0) + s32 stampsMissing = data->maxStamps - GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps); + + // Has full stamp card? + if (stampsMissing == 0) return 1; - if (HasPlayerAlreadyReceivedDistributedMon(&a1->unk_20, a0, a1->maxDistributionMons)) + + // Already has stamp? + if (IsStampInMetadata(&data->cardMetadata, stamp, data->maxStamps)) return 3; - if (numSpaces == 1) + + // Only 1 empty stamp left? + if (stampsMissing == 1) return 4; + + // This is a new stamp return 2; } -bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1) +bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData * data, const u16 * words) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) { - if (a0->unk_16[i] != a1[i]) + if (data->questionnaireWords[i] != words[i]) return FALSE; } return TRUE; } -static s32 GetNumReceivedDistributionMons(const struct MEventClientHeaderStruct * a0) +static s32 GetNumStampsInLinkData(const struct MysteryGiftLinkGameData * data) { - return CountReceivedDistributionMons(&a0->unk_20, a0->maxDistributionMons); + return GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps); } -u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command) +u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData * data, u32 stat) { - switch (command) + switch (stat) { - case 0: - return a0->unk_20.battlesWon; - case 1: - return a0->unk_20.battlesLost; - case 2: - return a0->unk_20.numTrades; - case 3: - return GetNumReceivedDistributionMons(a0); - case 4: - return a0->maxDistributionMons; - default: - AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825); - return 0; + case CARD_STAT_BATTLES_WON: + return data->cardMetadata.battlesWon; + case CARD_STAT_BATTLES_LOST: + return data->cardMetadata.battlesLost; + case CARD_STAT_NUM_TRADES: + return data->cardMetadata.numTrades; + case CARD_STAT_NUM_STAMPS: + return GetNumStampsInLinkData(data); + case CARD_STAT_MAX_STAMPS: + return data->maxStamps; + default: + AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825); + return 0; } } -// Increments an interaction count in the save block -static void IncrementBattleCardCount(u32 command) +static void IncrementCardStat(u32 statType) { - struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type == 2) + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) { - u16 * dest = NULL; - switch (command) + u16 * stat = NULL; + switch (statType) { - case 0: - dest = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesWon; - break; - case 1: - dest = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesLost; - break; - case 2: - dest = &gSaveBlock1Ptr->mysteryGift.cardMetadata.numTrades; - break; - case 3: - break; - case 4: - break; + case CARD_STAT_BATTLES_WON: + stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesWon; + break; + case CARD_STAT_BATTLES_LOST: + stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesLost; + break; + case CARD_STAT_NUM_TRADES: + stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.numTrades; + break; + case CARD_STAT_NUM_STAMPS: + case CARD_STAT_MAX_STAMPS: + break; } - if (dest == NULL) + if (stat == NULL) { AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 868); } - else if (++(*dest) > 999) + else if (++(*stat) > MAX_WONDER_CARD_STAT) { - *dest = 999; + *stat = MAX_WONDER_CARD_STAT; } } } -u16 MEvent_GetBattleCardCount(u32 command) +u16 MysteryGift_GetCardStat(u32 stat) { - switch (command) + switch (stat) { - case 0: + case CARD_STAT_BATTLES_WON: + { + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) { - struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type == 2) - { - struct WonderCardMetadata * buffer = &gSaveBlock1Ptr->mysteryGift.cardMetadata; - return buffer->battlesWon; - } - break; + struct WonderCardMetadata * metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + return metadata->battlesWon; } - case 1: + break; + } + case CARD_STAT_BATTLES_LOST: + { + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) { - struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type == 2) - { - struct WonderCardMetadata * buffer = &gSaveBlock1Ptr->mysteryGift.cardMetadata; - return buffer->battlesLost; - } - break; + struct WonderCardMetadata * metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + return metadata->battlesLost; } - case 2: + break; + } + case CARD_STAT_NUM_TRADES: + { + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) { - struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type == 2) - { - struct WonderCardMetadata * buffer = &gSaveBlock1Ptr->mysteryGift.cardMetadata; - return buffer->numTrades; - } - break; - } - case 3: - { - struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type == 1) - return ValidateCardAndCountMonsReceived(); - break; - } - case 4: - { - struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card; - if (data->type == 1) - return data->maxStamps; - break; + struct WonderCardMetadata * metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + return metadata->numTrades; } + break; + } + case CARD_STAT_NUM_STAMPS: + { + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_STAMP) + return GetNumStampsInSavedCard(); + break; + } + case CARD_STAT_MAX_STAMPS: + { + struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_STAMP) + return card->maxStamps; + break; + } } AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 913); return 0; @@ -945,85 +967,93 @@ u16 MEvent_GetBattleCardCount(u32 command) void MysteryGift_DisableStats(void) { - sReceivedWonderCardIsValid = FALSE; + sStatsEnabled = FALSE; } bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId) { - sReceivedWonderCardIsValid = FALSE; + sStatsEnabled = FALSE; if (flagId == 0) return FALSE; - if (!ValidateReceivedWonderCard()) + if (!ValidateSavedWonderCard()) return FALSE; if (gSaveBlock1Ptr->mysteryGift.card.flagId != flagId) return FALSE; - sReceivedWonderCardIsValid = TRUE; + sStatsEnabled = TRUE; return TRUE; } -void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId) +void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId) { - if (sReceivedWonderCardIsValid) + if (sStatsEnabled) { - switch (eventId) + switch (stat) { - case 2: // trade - RecordIdOfWonderCardSender(2, trainerId, gSaveBlock1Ptr->mysteryGift.trainerIds[1], 5); - break; - case 0: // link win - RecordIdOfWonderCardSender(0, trainerId, gSaveBlock1Ptr->mysteryGift.trainerIds[0], 5); - break; - case 1: // link loss - RecordIdOfWonderCardSender(1, trainerId, gSaveBlock1Ptr->mysteryGift.trainerIds[0], 5); - break; - default: - AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988); + case CARD_STAT_NUM_TRADES: + IncrementCardStatForNewTrainer(CARD_STAT_NUM_TRADES, + trainerId, + gSaveBlock1Ptr->mysteryGift.trainerIds[1], + ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[1])); + break; + case CARD_STAT_BATTLES_WON: + IncrementCardStatForNewTrainer(CARD_STAT_BATTLES_WON, + trainerId, + gSaveBlock1Ptr->mysteryGift.trainerIds[0], + ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[0])); + break; + case CARD_STAT_BATTLES_LOST: + IncrementCardStatForNewTrainer(CARD_STAT_BATTLES_LOST, + trainerId, + gSaveBlock1Ptr->mysteryGift.trainerIds[0], + ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[0])); + break; + default: + AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988); + break; } } } -static void BlankBuffer344(void) +static void ClearSavedTrainerIds(void) { CpuFill32(0, gSaveBlock1Ptr->mysteryGift.trainerIds, sizeof(gSaveBlock1Ptr->mysteryGift.trainerIds)); } -// Looks up trainerId in an array idsList with count elements. -// If trainerId is found, rearranges idsList to put it in the front. -// Otherwise, drops the last element of the list and inserts -// trainerId at the front. -// Returns TRUE in the latter case. -static bool32 PlaceTrainerIdAtFrontOfList(u32 trainerId, u32 * idsList, s32 count) +// Returns TRUE if it's a new trainer id, FALSE if an existing one. +// In either case the given trainerId is saved in element 0 +static bool32 RecordTrainerId(u32 trainerId, u32 * trainerIds, s32 size) { s32 i; s32 j; - for (i = 0; i < count; i++) + for (i = 0; i < size; i++) { - if (idsList[i] == trainerId) + if (trainerIds[i] == trainerId) break; } - if (i == count) + + if (i == size) { - for (j = count - 1; j > 0; j--) - { - idsList[j] = idsList[j - 1]; - } - idsList[0] = trainerId; + // New trainer, shift array and insert new id at front + for (j = size - 1; j > 0; j--) + trainerIds[j] = trainerIds[j - 1]; + + trainerIds[0] = trainerId; return TRUE; } else { + // Existing trainer, shift back to old slot and move id to front for (j = i; j > 0; j--) - { - idsList[j] = idsList[j - 1]; - } - idsList[0] = trainerId; + trainerIds[j] = trainerIds[j - 1]; + + trainerIds[0] = trainerId; return FALSE; } } -static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 * idsList, s32 count) +static void IncrementCardStatForNewTrainer(u32 stat, u32 trainerId, u32 * trainerIds, s32 size) { - if (PlaceTrainerIdAtFrontOfList(trainerId, idsList, count)) - IncrementBattleCardCount(eventId); + if (RecordTrainerId(trainerId, trainerIds, size)) + IncrementCardStat(stat); } diff --git a/src/mystery_gift_client.c b/src/mystery_gift_client.c index 289de83f4..48fc8ffc3 100644 --- a/src/mystery_gift_client.c +++ b/src/mystery_gift_client.c @@ -188,19 +188,19 @@ static u32 client_mainseq_4(struct mevent_client * svr) svr->flag = 0; return 4; case 8: - BuildMEventClientHeader(svr->sendBuffer); - mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventClientHeaderStruct)); + MysteryGift_LoadLinkGameData(svr->sendBuffer); + mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); break; case 14: mevent_client_send_word(svr, 0x13, svr->param); break; case 10: - OverwriteSavedWonderCardWithReceivedCard(svr->recvBuffer); + SaveWonderCard(svr->recvBuffer); break; case 9: - if (!MEvent_HaveAlreadyReceivedWonderNews(svr->recvBuffer)) + if (!IsWonderNewsSameAsSaved(svr->recvBuffer)) { - OverwriteSavedWonderNewsWithReceivedNews(svr->recvBuffer); + SaveWonderNews(svr->recvBuffer); mevent_client_send_word(svr, 0x13, 0); } else @@ -212,7 +212,7 @@ static u32 client_mainseq_4(struct mevent_client * svr) svr->flag = 0; break; case 16: - MEvent_ReceiveDistributionMon(svr->recvBuffer); + MysteryGift_TrySaveStamp(svr->recvBuffer); break; case 17: InitRamScript_NoObjectEvent(svr->recvBuffer, 1000); diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 7e65298cd..cb8a5bfe9 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -784,13 +784,9 @@ s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 ValidateCardOrNews(bool32 cardOrNews) { if (cardOrNews == 0) - { - return ValidateReceivedWonderCard(); - } + return ValidateSavedWonderCard(); else - { - return ValidateReceivedWonderNews(); - } + return ValidateSavedWonderNews(); } bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) @@ -802,7 +798,7 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) case 0: if (cardOrNews == 0) { - WonderCard_Init(GetSavedWonderCard(), sav1_get_mevent_buffer_2()); + WonderCard_Init(GetSavedWonderCard(), GetSavedWonderCardMetadata()); } else { @@ -837,13 +833,9 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) bool32 DestroyNewsOrCard(bool32 cardOrNews) { if (cardOrNews == 0) - { - DestroyWonderCard(); - } + ClearSavedWonderCardAndRelated(); else - { - DestroyWonderNews(); - } + ClearSavedWonderNewsAndRelated(); return TRUE; } @@ -1128,25 +1120,17 @@ void task00_mystery_gift(u8 taskId) { case 0: data->IsCardOrNews = 0; - if (ValidateReceivedWonderCard() == TRUE) - { + if (ValidateSavedWonderCard() == TRUE) data->state = 18; - } else - { data->state = 2; - } break; case 1: data->IsCardOrNews = 1; - if (ValidateReceivedWonderNews() == TRUE) - { + if (ValidateSavedWonderNews() == TRUE) data->state = 18; - } else - { data->state = 2; - } break; case -2u: data->state = 37; @@ -1307,7 +1291,7 @@ void task00_mystery_gift(u8 taskId) switch (flag) { case 0: - if (CheckReceivedGiftFromWonderCard() == TRUE) + if (IsSavedWonderCardGiftNotReceived() == TRUE) { data->state = 12; } @@ -1382,13 +1366,9 @@ void task00_mystery_gift(u8 taskId) if (data->prevPromptWindowId == 3) { if (data->source == 1) - { - MENewsJisan_SetRandomReward(1); - } + WonderNews_SetReward(1); else - { - MENewsJisan_SetRandomReward(2); - } + WonderNews_SetReward(2); } if (sp0 == 0) { @@ -1452,25 +1432,17 @@ void task00_mystery_gift(u8 taskId) u32 result; if (data->IsCardOrNews == 0) { - if (WonderCard_Test_Unk_08_6()) - { + if (IsSendingSavedWonderCardAllowed()) result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); - } else - { result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); - } } else { - if (WonderNews_Test_Unk_02()) - { + if (IsSendingSavedWonderNewsAllowed()) result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); - } else - { result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); - } } switch (result) { @@ -1497,7 +1469,7 @@ void task00_mystery_gift(u8 taskId) switch (mevent_message_prompt_discard(&data->textState, &data->curPromptWindowId, data->IsCardOrNews)) { case 0: - if (data->IsCardOrNews == 0 && CheckReceivedGiftFromWonderCard() == TRUE) + if (data->IsCardOrNews == 0 && IsSavedWonderCardGiftNotReceived() == TRUE) { data->state = 23; } @@ -1628,7 +1600,7 @@ void task00_mystery_gift(u8 taskId) { if (data->source == 1 && data->prevPromptWindowId == 3) { - MENewsJisan_SetRandomReward(3); + WonderNews_SetReward(3); data->state = 17; } else diff --git a/src/mystery_gift_server.c b/src/mystery_gift_server.c index 98211e2ae..d2f15644a 100644 --- a/src/mystery_gift_server.c +++ b/src/mystery_gift_server.c @@ -48,7 +48,7 @@ static void mevent_srv_init_common(struct mevent_srv_common * svr, const void *c svr->card = AllocZeroed(sizeof(struct WonderCard)); svr->news = AllocZeroed(sizeof(struct WonderNews)); svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventClientHeaderStruct)); + svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MysteryGiftLinkGameData)); svr->cmdBuffer = cmdBuffer; svr->cmdidx = 0; mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); @@ -145,12 +145,12 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 5: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376); AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377); - memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventClientHeaderStruct)); + memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MysteryGiftLinkGameData)); break; case 6: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382); AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383); - svr->param = ValidateMEventClientHeader(svr->mevent_unk1442cc); + svr->param = MysteryGift_ValidateLinkGameData(svr->mevent_unk1442cc); break; case 4: if (svr->param == cmd->flag) @@ -162,7 +162,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 7: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396); ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->card); - svr->param = sub_8144418(ptr, svr->mevent_unk1442cc, ptr); + svr->param = MysteryGift_CompareCardFlags(ptr, svr->mevent_unk1442cc, ptr); break; case 8: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402); @@ -172,15 +172,15 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 9: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408); ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord); - svr->param = MEvent_CanPlayerReceiveDistributionMon(ptr, svr->mevent_unk1442cc, ptr); + svr->param = MysteryGift_CheckStamps(ptr, svr->mevent_unk1442cc, ptr); break; case 10: AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415); - svr->param = sub_81444B0(svr->mevent_unk1442cc, cmd->flag); + svr->param = MysteryGift_GetCardStatFromLinkData(svr->mevent_unk1442cc, cmd->flag); break; case 11: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420); - svr->param = sub_8144474(svr->mevent_unk1442cc, cmd->parameter); + svr->param = MysteryGift_DoesQuestionnaireMatch(svr->mevent_unk1442cc, cmd->parameter); break; case 12: AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426); @@ -243,7 +243,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 26: AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506); memcpy(svr->card, GetSavedWonderCard(), 332); - MEvent_WonderCardResetUnk08_6(svr->card); + DisableWonderCardSending(svr->card); break; case 27: AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512); diff --git a/src/new_game.c b/src/new_game.c index 18ff73e29..ab5fa9958 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -143,7 +143,7 @@ void NewGameInitData(void) ResetTrainerFanClub(); UnionRoomChat_InitializeRegisteredTexts(); ResetMiniGamesResults(); - InitMEventData(); + ClearMysteryGift(); SetAllRenewableItemFlags(); WarpToPlayersRoom(); RunScriptImmediately(EventScript_ResetAllMapFlags); diff --git a/src/script.c b/src/script.c index 9095ab3ba..4d021606d 100644 --- a/src/script.c +++ b/src/script.c @@ -2,12 +2,12 @@ #include "script.h" #include "event_data.h" #include "quest_log.h" +#include "mystery_gift.h" #include "constants/maps.h" #include "constants/map_scripts.h" extern void ResetContextNpcTextColor(void); // field_specials extern u16 CalcCRC16WithTable(u8 *data, int length); // util -extern bool32 ValidateReceivedWonderCard(void); #define RAM_SCRIPT_MAGIC 51 @@ -554,7 +554,7 @@ bool32 ValidateRamScript(void) u8 *GetSavedRamScriptIfValid(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; - if (!ValidateReceivedWonderCard()) + if (!ValidateSavedWonderCard()) return NULL; if (scriptData->magic != RAM_SCRIPT_MAGIC) return NULL; diff --git a/src/wonder_news.c b/src/wonder_news.c index 20f0ab3e7..4e7c4f472 100644 --- a/src/wonder_news.c +++ b/src/wonder_news.c @@ -5,85 +5,100 @@ #include "wonder_news.h" #include "constants/items.h" +/* + Wonder News related functions. + Because this feature is largely unused, the names in here are + mostly nebulous and without a real indication of purpose. +*/ + +enum { + NEWS_VAL_INVALID, + NEWS_VAL_RECV_FRIEND, + NEWS_VAL_RECV_WIRELESS, + NEWS_VAL_NONE, + NEWS_VAL_SENT, + NEWS_VAL_SENT_MAX, + NEWS_VAL_GET_MAX, +}; + static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *); static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *); static u32 GetMENewsJisanState(struct WonderNewsMetadata *); static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *); static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *); -void MENewsJisan_SetRandomReward(u32 a0) +void WonderNews_SetReward(u32 newsType) { - struct WonderNewsMetadata *r5 = GetMENewsJisanStructPtr(); + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - r5->unk_0_0 = a0; - switch (a0) + data->newsType = newsType; + switch (newsType) { - case 0: + case WONDER_NEWS_NONE: break; - case 1: - case 2: - r5->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY); + case WONDER_NEWS_RECV_FRIEND: + case WONDER_NEWS_RECV_WIRELESS: + data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY); break; - case 3: - r5->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY); + case WONDER_NEWS_SENT: + data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY); break; } } -void MENewsJisanReset(void) +void WonderNews_Reset(void) { - struct WonderNewsMetadata *r5 = GetMENewsJisanStructPtr(); + struct WonderNewsMetadata *r5 = GetSavedWonderNewsMetadata(); - r5->unk_0_0 = 0; + r5->newsType = 0; r5->unk_0_2 = 0; r5->unk_0_5 = 0; r5->berry = 0; - VarSet(VAR_MENEWS_JISAN_STEP_COUNTER, 0); + VarSet(VAR_WONDER_NEWS_STEP_COUNTER, 0); } -void MENewsJisanStepCounter(void) +void WonderNews_IncrementStepCounter(void) { - u16 *r4 = GetVarPointer(VAR_MENEWS_JISAN_STEP_COUNTER); - struct WonderNewsMetadata *r2 = GetMENewsJisanStructPtr(); - struct WonderNewsMetadata r0 = *r2; + u16 *stepCounter = GetVarPointer(VAR_WONDER_NEWS_STEP_COUNTER); + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - if ((u8)r0.unk_0_5 > 4 && ++(*r4) >= 500) + if (data->unk_0_5 > 4 && ++(*stepCounter) >= 500) { - r2->unk_0_5 = 0; - *r4 = 0; + data->unk_0_5 = 0; + *stepCounter = 0; } } u16 GetMENewsJisanItemAndState(void) { - u16 *r6 = &gSpecialVar_Result; - struct WonderNewsMetadata *r4 = GetMENewsJisanStructPtr(); + u16 *result = &gSpecialVar_Result; + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); u16 r5; - if (!IsMysteryGiftEnabled() || !ValidateReceivedWonderNews()) + if (!IsMysteryGiftEnabled() || !ValidateSavedWonderNews()) return 0; - r5 = GetMENewsJisanState(r4); + r5 = GetMENewsJisanState(data); switch (r5) { case 0: break; case 1: - *r6 = GetMENewsJisanRewardItem(r4); + *result = GetMENewsJisanRewardItem(data); break; case 2: - *r6 = GetMENewsJisanRewardItem(r4); + *result = GetMENewsJisanRewardItem(data); break; case 3: break; case 4: - *r6 = GetMENewsJisanRewardItem(r4); - MENewsJisanIncrementCounterUnk0_2(r4); + *result = GetMENewsJisanRewardItem(data); + MENewsJisanIncrementCounterUnk0_2(data); break; case 5: - *r6 = GetMENewsJisanRewardItem(r4); - MENewsJisanResetCounterUnk0_2(r4); + *result = GetMENewsJisanRewardItem(data); + MENewsJisanResetCounterUnk0_2(data); break; case 6: break; @@ -96,7 +111,7 @@ static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *a0) { u32 r4; - a0->unk_0_0 = 0; + a0->newsType = 0; r4 = a0->berry + FIRST_BERRY_INDEX - 1; a0->berry = 0; MENewsJisanIncrementCounterUnk0_5(a0); @@ -122,23 +137,21 @@ static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *a0) a0->unk_0_5 = 5; } -static u32 GetMENewsJisanState(struct WonderNewsMetadata *a0) +static u32 GetMENewsJisanState(struct WonderNewsMetadata *data) { - struct WonderNewsMetadata r0; - if ((u8)a0->unk_0_5 == 5) + if (data->unk_0_5 == 5) return 6; - r0 = *a0; - switch (r0.unk_0_0) + switch (data->newsType) { - case 0: + case WONDER_NEWS_NONE: return 3; - case 1: + case WONDER_NEWS_RECV_FRIEND: return 1; - case 2: + case WONDER_NEWS_RECV_WIRELESS: return 2; - case 3: - if ((u8)r0.unk_0_2 < 3) + case WONDER_NEWS_SENT: + if (data->unk_0_2 < 3) return 4; return 5; default: From 12b0c700699763a80addaf7f0341dd140de8e124 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 19 Nov 2022 21:18:10 -0500 Subject: [PATCH 28/42] Sync mystery_gift_link --- include/mystery_gift_server.h | 37 ++--- src/mystery_gift_client.c | 14 +- src/mystery_gift_link.c | 291 ++++++++++++++++++---------------- src/mystery_gift_server.c | 10 +- 4 files changed, 178 insertions(+), 174 deletions(-) diff --git a/include/mystery_gift_server.h b/include/mystery_gift_server.h index 2a9070afb..7c71ed856 100644 --- a/include/mystery_gift_server.h +++ b/include/mystery_gift_server.h @@ -5,11 +5,11 @@ #define ME_SEND_BUF_SIZE 0x400 -struct mevent_srv_sub +struct MysteryGiftLink { - s32 seqno; - u8 sendPlayerNo; - u8 recvPlayerNo; + s32 state; + u8 sendPlayerId; + u8 recvPlayerId; u16 recvIdent; u16 recvCounter; u16 recvCRC; @@ -18,17 +18,10 @@ struct mevent_srv_sub u16 sendCounter; u16 sendCRC; u16 sendSize; - void *recvBfr; - const void *sendBfr; - u32 (*recvFunc)(struct mevent_srv_sub *); - u32 (*sendFunc)(struct mevent_srv_sub *); -}; - -struct send_recv_header -{ - u16 ident; - u16 crc; - u16 size; + void *recvBuffer; + const void *sendBuffer; + u32 (*recvFunc)(struct MysteryGiftLink *); + u32 (*sendFunc)(struct MysteryGiftLink *); }; struct mevent_client_cmd @@ -63,7 +56,7 @@ struct mevent_client void *recvBuffer; struct mevent_client_cmd * cmdBuffer; void *buffer; - struct mevent_srv_sub manager; + struct MysteryGiftLink manager; }; struct mevent_server_cmd @@ -108,14 +101,14 @@ struct mevent_srv_common void *sendBuffer2; u32 sendBuffer2Size; u32 sendWord; - struct mevent_srv_sub manager; + struct MysteryGiftLink manager; }; -u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr); -u32 mevent_srv_sub_send(struct mevent_srv_sub * svr); -void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo); -void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void *src, u32 size); -void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void *dest); +u32 MysteryGiftLink_Recv(struct MysteryGiftLink * link); +u32 MysteryGiftLink_Send(struct MysteryGiftLink * link); +void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId); +void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void *src, u32 size); +void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void *dest); void mevent_client_do_init(void); u32 mevent_client_do_exec(u16 * a0); diff --git a/src/mystery_gift_client.c b/src/mystery_gift_client.c index 48fc8ffc3..5844f80e2 100644 --- a/src/mystery_gift_client.c +++ b/src/mystery_gift_client.c @@ -62,7 +62,7 @@ static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); svr->buffer = AllocZeroed(0x40); - mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); + MysteryGiftLink_Init(&svr->manager, sendPlayerNo, recvPlayerNo); } static void mevent_client_free_resources(struct mevent_client * svr) @@ -83,7 +83,7 @@ static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 w { CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); *(u32 *)svr->sendBuffer = word; - mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); + MysteryGiftLink_InitSend(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); } static u32 client_mainseq_0(struct mevent_client * svr) @@ -105,7 +105,7 @@ static u32 client_mainseq_1(struct mevent_client * svr) static u32 client_mainseq_2(struct mevent_client * svr) { // do recv - if (mevent_srv_sub_recv(&svr->manager)) + if (MysteryGiftLink_Recv(&svr->manager)) { svr->mainseqno = 4; svr->flag = 0; @@ -116,7 +116,7 @@ static u32 client_mainseq_2(struct mevent_client * svr) static u32 client_mainseq_3(struct mevent_client * svr) { // do send - if (mevent_srv_sub_send(&svr->manager)) + if (MysteryGiftLink_Send(&svr->manager)) { svr->mainseqno = 4; svr->flag = 0; @@ -139,7 +139,7 @@ static u32 client_mainseq_4(struct mevent_client * svr) svr->flag = 0; break; case 2: - mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer); + MysteryGiftLink_InitRecv(&svr->manager, cmd->parameter, svr->recvBuffer); svr->mainseqno = 2; svr->flag = 0; break; @@ -148,7 +148,7 @@ static u32 client_mainseq_4(struct mevent_client * svr) svr->flag = 0; break; case 20: - mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0); + MysteryGiftLink_InitSend(&svr->manager, 0x14, svr->sendBuffer, 0); svr->mainseqno = 3; svr->flag = 0; break; @@ -189,7 +189,7 @@ static u32 client_mainseq_4(struct mevent_client * svr) return 4; case 8: MysteryGift_LoadLinkGameData(svr->sendBuffer); - mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); + MysteryGiftLink_InitSend(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); break; case 14: mevent_client_send_word(svr, 0x13, svr->param); diff --git a/src/mystery_gift_link.c b/src/mystery_gift_link.c index f90151d6b..0ef2eb84a 100644 --- a/src/mystery_gift_link.c +++ b/src/mystery_gift_link.c @@ -4,200 +4,211 @@ #include "link_rfu.h" #include "mystery_gift_server.h" -static u32 mevent_receive_func(struct mevent_srv_sub *); -static u32 mevent_send_func(struct mevent_srv_sub *); +/* + Handles the link connection functions used by the Mystery Gift client/server. + Note: MysteryGiftLink is shortened to MGL for internal functions. +*/ -u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr) +struct SendRecvHeader { - return svr->recvFunc(svr); + u16 ident; + u16 crc; + u16 size; +}; + +static u32 MGL_Receive(struct MysteryGiftLink *); +static u32 MGL_Send(struct MysteryGiftLink *); + +u32 MysteryGiftLink_Recv(struct MysteryGiftLink * link) +{ + return link->recvFunc(link); } -u32 mevent_srv_sub_send(struct mevent_srv_sub * svr) +u32 MysteryGiftLink_Send(struct MysteryGiftLink * link) { - return svr->sendFunc(svr); + return link->sendFunc(link); } -void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo) +void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId) { - svr->sendPlayerNo = sendPlayerNo; - svr->recvPlayerNo = recvPlayerNo; - svr->seqno = 0; - svr->sendCRC = 0; - svr->sendSize = 0; - svr->sendCounter = 0; - svr->recvCRC = 0; - svr->recvSize = 0; - svr->recvCounter = 0; - svr->sendBfr = NULL; - svr->recvBfr = NULL; - svr->sendFunc = mevent_send_func; - svr->recvFunc = mevent_receive_func; + link->sendPlayerId = sendPlayerId; + link->recvPlayerId = recvPlayerId; + link->state = 0; + link->sendCRC = 0; + link->sendSize = 0; + link->sendCounter = 0; + link->recvCRC = 0; + link->recvSize = 0; + link->recvCounter = 0; + link->sendBuffer = NULL; + link->recvBuffer = NULL; + link->sendFunc = MGL_Send; + link->recvFunc = MGL_Receive; } -void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void *src, u32 size) +void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void *src, u32 size) { - svr->seqno = 0; - svr->sendIdent = ident; - svr->sendCounter = 0; - svr->sendCRC = 0; + link->state = 0; + link->sendIdent = ident; + link->sendCounter = 0; + link->sendCRC = 0; if (size != 0) - svr->sendSize = size; + link->sendSize = size; else - svr->sendSize = ME_SEND_BUF_SIZE; - svr->sendBfr = src; + link->sendSize = ME_SEND_BUF_SIZE; + link->sendBuffer = src; } -void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void *dest) +void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void *dest) { - svr->seqno = 0; - svr->recvIdent = ident; - svr->recvCounter = 0; - svr->recvCRC = 0; - svr->recvSize = 0; - svr->recvBfr = dest; + link->state = 0; + link->recvIdent = ident; + link->recvCounter = 0; + link->recvCRC = 0; + link->recvSize = 0; + link->recvBuffer = dest; } -static void mevent_recv_block(u32 recv_idx, void *dest, size_t size) +static void MGL_ReceiveBlock(u32 playerId, void *dest, size_t size) { - memcpy(dest, gBlockRecvBuffer[recv_idx], size); + memcpy(dest, gBlockRecvBuffer[playerId], size); } -static bool32 mevent_has_received(u32 recv_idx) +static bool32 MGL_HasReceived(u32 playerId) { - if ((GetBlockReceivedStatus() >> recv_idx) & 1) + if ((GetBlockReceivedStatus() >> playerId) & 1) return TRUE; else return FALSE; } -static void mevent_reset_recv(u32 recv_idx) +static void MGL_ResetReceived(u32 playerId) { - ResetBlockReceivedFlag(recv_idx); + ResetBlockReceivedFlag(playerId); } -static bool32 mevent_receive_func(struct mevent_srv_sub * svr) +static bool32 MGL_Receive(struct MysteryGiftLink * link) { - struct send_recv_header header; + struct SendRecvHeader header; - switch (svr->seqno) + switch (link->state) { - case 0: - if (mevent_has_received(svr->recvPlayerNo)) + case 0: + if (MGL_HasReceived(link->recvPlayerId)) + { + MGL_ReceiveBlock(link->recvPlayerId, &header, sizeof(header)); + link->recvSize = header.size; + link->recvCRC = header.crc; + if (link->recvSize > ME_SEND_BUF_SIZE) { - mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header)); - svr->recvSize = header.size; - svr->recvCRC = header.crc; - if (svr->recvSize > ME_SEND_BUF_SIZE) - { - LinkRfu_FatalError(); - return FALSE; - } - else if (svr->recvIdent != header.ident) - { - LinkRfu_FatalError(); - return FALSE; - } - else - { - svr->recvCounter = 0; - mevent_reset_recv(svr->recvPlayerNo); - ++svr->seqno; - } + LinkRfu_FatalError(); + return FALSE; } - break; - case 1: - if (mevent_has_received(svr->recvPlayerNo)) - { - size_t blocksiz = svr->recvCounter * 252; - if (svr->recvSize - blocksiz <= 252) - { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz); - ++svr->recvCounter; - ++svr->seqno; - } - else - { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252); - ++svr->recvCounter; - } - mevent_reset_recv(svr->recvPlayerNo); - } - break; - case 2: - if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) + else if (link->recvIdent != header.ident) { LinkRfu_FatalError(); return FALSE; } else { - svr->seqno = 0; - return TRUE; + link->recvCounter = 0; + MGL_ResetReceived(link->recvPlayerId); + link->state++; } - break; - + } + break; + case 1: + if (MGL_HasReceived(link->recvPlayerId)) + { + size_t blocksize = link->recvCounter * 252; + if (link->recvSize - blocksize <= 252) + { + MGL_ReceiveBlock(link->recvPlayerId, link->recvBuffer + blocksize, link->recvSize - blocksize); + link->recvCounter++; + link->state++; + } + else + { + MGL_ReceiveBlock(link->recvPlayerId, link->recvBuffer + blocksize, 252); + link->recvCounter++; + } + MGL_ResetReceived(link->recvPlayerId); + } + break; + case 2: + if (CalcCRC16WithTable(link->recvBuffer, link->recvSize) != link->recvCRC) + { + LinkRfu_FatalError(); + return FALSE; + } + else + { + link->state = 0; + return TRUE; + } + break; } return FALSE; } -static bool32 mevent_send_func(struct mevent_srv_sub * svr) +static bool32 MGL_Send(struct MysteryGiftLink * link) { - struct send_recv_header header; + struct SendRecvHeader header; - switch (svr->seqno) + switch (link->state) { - case 0: - if (IsLinkTaskFinished()) + case 0: + if (IsLinkTaskFinished()) + { + header.ident = link->sendIdent; + header.size = link->sendSize; + header.crc = CalcCRC16WithTable(link->sendBuffer, link->sendSize); + link->sendCRC = header.crc; + link->sendCounter = 0; + SendBlock(0, &header, sizeof(header)); + ++link->state; + } + break; + case 1: + if (IsLinkTaskFinished()) + { + if (MGL_HasReceived(link->sendPlayerId)) { - header.ident = svr->sendIdent; - header.size = svr->sendSize; - header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize); - svr->sendCRC = header.crc; - svr->sendCounter = 0; - SendBlock(0, &header, sizeof(header)); - ++svr->seqno; - } - break; - case 1: - if (IsLinkTaskFinished()) - { - if (mevent_has_received(svr->sendPlayerNo)) + size_t blocksize; + MGL_ResetReceived(link->sendPlayerId); + blocksize = 252 * link->sendCounter; + if (link->sendSize - blocksize <= 252) { - size_t blocksiz; - mevent_reset_recv(svr->sendPlayerNo); - blocksiz = 252 * svr->sendCounter; - if (svr->sendSize - blocksiz <= 252) - { - SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz); - ++svr->sendCounter; - ++svr->seqno; - } - else - { - SendBlock(0, svr->sendBfr + blocksiz, 252); - ++svr->sendCounter; - } + SendBlock(0, link->sendBuffer + blocksize, link->sendSize - blocksize); + link->sendCounter++; + link->state++; + } + else + { + SendBlock(0, link->sendBuffer + blocksize, 252); + link->sendCounter++; } } - break; - case 2: - if (IsLinkTaskFinished()) - { - if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) - LinkRfu_FatalError(); - else - ++svr->seqno; - } - break; - case 3: - if (mevent_has_received(svr->sendPlayerNo)) - { - mevent_reset_recv(svr->sendPlayerNo); - svr->seqno = 0; - return TRUE; - } - break; + } + break; + case 2: + if (IsLinkTaskFinished()) + { + if (CalcCRC16WithTable(link->sendBuffer, link->sendSize) != link->sendCRC) + LinkRfu_FatalError(); + else + link->state++; + } + break; + case 3: + if (MGL_HasReceived(link->sendPlayerId)) + { + MGL_ResetReceived(link->sendPlayerId); + link->state = 0; + return TRUE; + } + break; } return FALSE; diff --git a/src/mystery_gift_server.c b/src/mystery_gift_server.c index d2f15644a..d2f2b2262 100644 --- a/src/mystery_gift_server.c +++ b/src/mystery_gift_server.c @@ -51,7 +51,7 @@ static void mevent_srv_init_common(struct mevent_srv_common * svr, const void *c svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MysteryGiftLinkGameData)); svr->cmdBuffer = cmdBuffer; svr->cmdidx = 0; - mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); + MysteryGiftLink_Init(&svr->manager, sendPlayerNo, recvPlayerNo); } static void mevent_srv_free_resources(struct mevent_srv_common * svr) @@ -65,7 +65,7 @@ static void mevent_srv_free_resources(struct mevent_srv_common * svr) static void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void *src, u32 size) { AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257); - mevent_srv_sub_init_send(&svr->manager, ident, src, size); + MysteryGiftLink_InitSend(&svr->manager, ident, src, size); } static void *mevent_first_if_not_null_else_second(void *a0, void *a1) @@ -102,7 +102,7 @@ static u32 common_mainseq_1(struct mevent_srv_common * svr) static u32 common_mainseq_2(struct mevent_srv_common * svr) { // do recv - if (mevent_srv_sub_recv(&svr->manager)) + if (MysteryGiftLink_Recv(&svr->manager)) svr->mainseqno = 4; return 1; } @@ -110,7 +110,7 @@ static u32 common_mainseq_2(struct mevent_srv_common * svr) static u32 common_mainseq_3(struct mevent_srv_common * svr) { // do send - if (mevent_srv_sub_send(&svr->manager)) + if (MysteryGiftLink_Send(&svr->manager)) svr->mainseqno = 4; return 1; } @@ -134,7 +134,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) break; case 2: AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364); - mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer); + MysteryGiftLink_InitRecv(&svr->manager, cmd->flag, svr->recvBuffer); svr->mainseqno = 2; break; case 3: From 20e7148ade50e98db76c004efc7ebc9db9c5a706 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Sun, 20 Nov 2022 20:50:40 +0800 Subject: [PATCH 29/42] Address review comments --- src/region_map.c | 24 ++++++++-------- src/title_screen.c | 72 +++++++++++++++++++++++----------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/region_map.c b/src/region_map.c index 07232a3f6..23f354c71 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1428,11 +1428,11 @@ static void UpdateMapsecNameBox(void) (WININ_WIN0_BG0 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR), (WININ_WIN1_BG0 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR) >> 8); SetWinOut(WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[WIN_MAP_NAME]); - SetGpuWindowDims(WIN_DUNGEON_NAME, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); - SetDispCnt(WIN_MAP_NAME, FALSE); + SetGpuWindowDims(0, &sMapsecNameWindowDims[WIN_MAP_NAME]); + SetGpuWindowDims(1, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); + SetDispCnt(0, FALSE); if (GetDungeonMapsecUnderCursor() != MAPSEC_NONE) - SetDispCnt(WIN_DUNGEON_NAME, FALSE); + SetDispCnt(1, FALSE); } static void DisplayCurrentMapName(void) @@ -1441,7 +1441,7 @@ static void DisplayCurrentMapName(void) FillWindowPixelBuffer(WIN_MAP_NAME, PIXEL_FILL(0)); if (GetMapsecUnderCursor() == MAPSEC_NONE) { - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[CLEAR_NAME]); + SetGpuWindowDims(0, &sMapsecNameWindowDims[CLEAR_NAME]); } else { @@ -1449,13 +1449,13 @@ static void DisplayCurrentMapName(void) AddTextPrinterParameterized3(WIN_MAP_NAME, FONT_2, 2, 2, sTextColor_White, 0, sRegionMap->mapName); PutWindowTilemap(WIN_MAP_NAME); CopyWindowToVram(WIN_MAP_NAME, COPYWIN_GFX); - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[WIN_MAP_NAME]); + SetGpuWindowDims(0, &sMapsecNameWindowDims[WIN_MAP_NAME]); } } static void DrawDungeonNameBox(void) { - SetGpuWindowDims(WIN_DUNGEON_NAME, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); + SetGpuWindowDims(1, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); } static void DisplayCurrentDungeonName(void) @@ -1465,13 +1465,13 @@ static void DisplayCurrentDungeonName(void) sRegionMap->dungeonWinTop = FALSE; sRegionMap->dungeonWinRight = 24; sRegionMap->dungeonWinBottom = 32; - SetDispCnt(WIN_DUNGEON_NAME, TRUE); + SetDispCnt(1, TRUE); ClearWindowTilemap(WIN_DUNGEON_NAME); mapsecId = GetDungeonMapsecUnderCursor(); if (mapsecId != MAPSEC_NONE) { descOffset = mapsecId - MAPSECS_KANTO; - SetDispCnt(WIN_DUNGEON_NAME, FALSE); + SetDispCnt(1, FALSE); sRegionMap->dungeonWinTop = TRUE; sRegionMap->dungeonWinLeft = StringLength(sMapNames[descOffset]); sRegionMap->dungeonWinRight = sRegionMap->dungeonWinLeft * 10 + 50; @@ -1718,7 +1718,7 @@ static void FreeSwitchMapMenu(u8 taskId) PrintTopBarTextRight(gText_RegionMap_AButtonSwitch); UpdateMapsecNameBox(); DrawDungeonNameBox(); - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[CLEAR_NAME]); + SetGpuWindowDims(0, &sMapsecNameWindowDims[CLEAR_NAME]); FREE_IF_NOT_NULL(sSwitchMapMenu); } @@ -2132,11 +2132,11 @@ static void InitScreenForDungeonMapPreview(void) sDungeonMapPreview->bottomIncrement = (136 - sDungeonMapPreview->bottom) / 8; } -static bool8 UpdateDungeonMapPreview(bool8 a0) // todo: rename a0 +static bool8 UpdateDungeonMapPreview(bool8 closing) { struct GpuWindowParams data; - if (!a0) + if (!closing) { if (sDungeonMapPreview->updateCounter < 8) { diff --git a/src/title_screen.c b/src/title_screen.c index 3f7c51414..7c379bc34 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -69,8 +69,8 @@ static u16 TitleScreen_rand(u8 taskId, u8 field); static u32 CreateBlankSprite(void); static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite); static u8 CreateSlashSprite(void); -static void ScheduleHideSlashSprite(u8 spriteId); -static bool32 IsSlashSpriteHidden(u8 spriteId); +static void DeactivateSlashSprite(u8 spriteId); +static bool32 IsSlashSpriteDeactivated(u8 spriteId); static void SpriteCallback_Slash(struct Sprite *sprite); static const u8 sBorderBgTiles[] = INCBIN_U8("graphics/title_screen/border_bg.4bpp.lz"); @@ -81,16 +81,16 @@ static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/firered/border static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/leafgreen/border_bg.bin.lz"); #endif -static const u32 sTitleScreen_Slash_Gfx[] = INCBIN_U32("graphics/title_screen/slash.4bpp.lz"); +static const u32 sSlash_Gfx[] = INCBIN_U32("graphics/title_screen/slash.4bpp.lz"); #if defined(FIRERED) -static const u16 sTitleScreen_Flames_Pal[] = INCBIN_U16("graphics/title_screen/firered/flames.gbapal"); -static const u32 sTitleScreen_Flames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/flames.4bpp.lz"); -static const u32 sTitleScreen_BlankFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/blank_flames.4bpp.lz"); +static const u16 sFlames_Pal[] = INCBIN_U16("graphics/title_screen/firered/flames.gbapal"); +static const u32 sFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/flames.4bpp.lz"); +static const u32 sBlankFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/blank_flames.4bpp.lz"); #elif defined(LEAFGREEN) -static const u16 sTitleScreen_Leaves_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/leaves.gbapal"); -static const u32 sTitleScreen_Leaves_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/leaves.4bpp.lz"); -static const u32 sTitleScreen_Streak_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/streak.4bpp.lz"); +static const u16 sLeaves_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/leaves.gbapal"); +static const u32 sLeaves_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/leaves.4bpp.lz"); +static const u32 sStreak_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/streak.4bpp.lz"); #endif static const struct OamData sOamData_FlameOrLeaf = { @@ -288,15 +288,15 @@ static void (*const sSceneFuncs[])(s16 *data) = { #if defined(FIRERED) static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sTitleScreen_Flames_Gfx, 0x500, TILE_TAG_FLAME_OR_LEAF}, - {sTitleScreen_BlankFlames_Gfx, 0x500, TILE_TAG_BLANK_OR_STREAK}, + {sFlames_Gfx, 0x500, TILE_TAG_FLAME_OR_LEAF}, + {sBlankFlames_Gfx, 0x500, TILE_TAG_BLANK_OR_STREAK}, {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, - {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} + {sSlash_Gfx, 0x800, TILE_TAG_SLASH} }; static const struct SpritePalette sSpritePals[] = { - {sTitleScreen_Flames_Pal, PAL_TAG_DEFAULT}, - {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, + {sFlames_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, {} }; @@ -306,15 +306,15 @@ static const u8 sFlameXPositions[] = { #elif defined(LEAFGREEN) static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sTitleScreen_Leaves_Gfx, 0x580, TILE_TAG_FLAME_OR_LEAF}, - {sTitleScreen_Streak_Gfx, 0x100, TILE_TAG_BLANK_OR_STREAK}, + {sLeaves_Gfx, 0x580, TILE_TAG_FLAME_OR_LEAF}, + {sStreak_Gfx, 0x100, TILE_TAG_BLANK_OR_STREAK}, {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, - {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} + {sSlash_Gfx, 0x800, TILE_TAG_SLASH} }; static const struct SpritePalette sSpritePals[] = { - {sTitleScreen_Leaves_Pal, PAL_TAG_DEFAULT}, - {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, + {sLeaves_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, {} }; @@ -630,13 +630,13 @@ static void SetTitleScreenScene_Run(s16 *data) case 1: if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) { - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen); } else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) { - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToBerryFix); } @@ -665,11 +665,11 @@ static void SetTitleScreenScene_Restart(s16 *data) switch (tState) { case 0: - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); tState++; break; case 1: - if (!gPaletteFade.active && !IsSlashSpriteHidden(tSlashSpriteId)) + if (!gPaletteFade.active && !IsSlashSpriteDeactivated(tSlashSpriteId)) { FadeOutMapMusic(10); BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 0x10, RGB_BLACK); @@ -709,7 +709,7 @@ static void SetTitleScreenScene_Cry(s16 *data) if (!gPaletteFade.active) { PlayCry_Normal(TITLE_SPECIES, 0); - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); data[2] = 0; tState++; } @@ -717,7 +717,7 @@ static void SetTitleScreenScene_Cry(s16 *data) case 1: if (data[2] < 90) data[2]++; - else if (!IsSlashSpriteHidden(tSlashSpriteId)) + else if (!IsSlashSpriteDeactivated(tSlashSpriteId)) { BeginNormalPaletteFade((PALETTES_ALL & ~(1 << 0x1C) & ~(1 << 0x1D) & ~(1 << 0x1E) & ~(1 << 0x1F)), 0, 0, 16, RGB_WHITE); SignalEndTitleScreenPaletteSomethingTask(); @@ -1034,7 +1034,7 @@ static void Task_FlameSpawner(u8 taskId) xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; y = (TitleScreen_rand(taskId, 3) % 3) + 116; - x = TitleScreen_rand(taskId, 3) % 240; + x = TitleScreen_rand(taskId, 3) % DISPLAY_WIDTH; CreateFlameSprite( x, y, @@ -1234,9 +1234,9 @@ static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite) CreateBlankSprite(); } -#define sState data[0] -#define sTimer data[1] -#define sHidden data[2] +#define sState data[0] +#define sTimer data[1] +#define sDeactivate data[2] static u8 CreateSlashSprite(void) { @@ -1249,13 +1249,13 @@ static u8 CreateSlashSprite(void) return spriteId; } -static void ScheduleHideSlashSprite(u8 spriteId) +static void DeactivateSlashSprite(u8 spriteId) { if (spriteId != MAX_SPRITES) - gSprites[spriteId].sHidden = TRUE; + gSprites[spriteId].sDeactivate = TRUE; } -static bool32 IsSlashSpriteHidden(u8 spriteId) +static bool32 IsSlashSpriteDeactivated(u8 spriteId) { if (spriteId != MAX_SPRITES) return gSprites[spriteId].sState ^ 2 ? TRUE : FALSE; @@ -1268,7 +1268,7 @@ static void SpriteCallback_Slash(struct Sprite *sprite) switch (sprite->sState) { case 0: - if (sprite->sHidden) + if (sprite->sDeactivate) { sprite->invisible = TRUE; sprite->sState = 2; @@ -1288,10 +1288,10 @@ static void SpriteCallback_Slash(struct Sprite *sprite) if (sprite->x == 148) sprite->y += 7; - if (sprite->x > 272) + if (sprite->x > DISPLAY_WIDTH + 32) { sprite->invisible = TRUE; - if (sprite->sHidden) + if (sprite->sDeactivate) sprite->sState = 2; else { @@ -1308,4 +1308,4 @@ static void SpriteCallback_Slash(struct Sprite *sprite) #undef sState #undef sTimer -#undef sHidden +#undef sDeactivate From 52e1af81b30d956d6b61405d5340d8cb26725eb5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 21 Nov 2022 12:37:25 -0500 Subject: [PATCH 30/42] Document pokedex area markers --- include/pokedex.h | 84 +++++++++ include/pokedex_area_markers.h | 18 +- include/wild_encounter.h | 2 + include/wild_pokemon_area.h | 2 +- src/pokedex_area_markers.c | 301 +++++++++++++++++-------------- src/pokedex_screen.c | 12 +- src/wild_encounter.c | 2 +- src/wild_pokemon_area.c | 318 +++++++++++++++++---------------- 8 files changed, 434 insertions(+), 305 deletions(-) diff --git a/include/pokedex.h b/include/pokedex.h index 0e20648f7..8e27bbe56 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -15,6 +15,90 @@ enum FLAG_SET_CAUGHT }; +// IDs for the pokedex area markers +enum { + DEX_AREA_NONE, + DEX_AREA_PALLET_TOWN, + DEX_AREA_VIRIDIAN_CITY, + DEX_AREA_PEWTER_CITY, + DEX_AREA_CERULEAN_CITY, + DEX_AREA_LAVENDER_TOWN, + DEX_AREA_VERMILION_CITY, + DEX_AREA_CELADON_CITY, + DEX_AREA_FUCHSIA_CITY, + DEX_AREA_CINNABAR_ISLAND, + DEX_AREA_INDIGO_PLATEAU, + DEX_AREA_SAFFRON_CITY, + DEX_AREA_ROUTE_1, + DEX_AREA_ROUTE_2, + DEX_AREA_ROUTE_3, + DEX_AREA_ROUTE_4, + DEX_AREA_ROUTE_5, + DEX_AREA_ROUTE_6, + DEX_AREA_ROUTE_7, + DEX_AREA_ROUTE_8, + DEX_AREA_ROUTE_9, + DEX_AREA_ROUTE_10, + DEX_AREA_ROUTE_11, + DEX_AREA_ROUTE_12, + DEX_AREA_ROUTE_13, + DEX_AREA_ROUTE_14, + DEX_AREA_ROUTE_15, + DEX_AREA_ROUTE_16, + DEX_AREA_ROUTE_17, + DEX_AREA_ROUTE_18, + DEX_AREA_ROUTE_19, + DEX_AREA_ROUTE_20, + DEX_AREA_ROUTE_21, + DEX_AREA_ROUTE_22, + DEX_AREA_ROUTE_23, + DEX_AREA_ROUTE_24, + DEX_AREA_ROUTE_25, + DEX_AREA_VIRIDIAN_FOREST, + DEX_AREA_DIGLETTS_CAVE, + DEX_AREA_MT_MOON, + DEX_AREA_CERULEAN_CAVE, + DEX_AREA_ROCK_TUNNEL, + DEX_AREA_POWER_PLANT, + DEX_AREA_POKEMON_TOWER, + DEX_AREA_SAFARI_ZONE, + DEX_AREA_SEAFOAM_ISLANDS, + DEX_AREA_POKEMON_MANSION, + DEX_AREA_VICTORY_ROAD, + DEX_AREA_ONE_ISLAND, + DEX_AREA_TWO_ISLAND, + DEX_AREA_THREE_ISLAND, + DEX_AREA_FOUR_ISLAND, + DEX_AREA_FIVE_ISLAND, + DEX_AREA_SIX_ISLAND, // Not associated with any MAPSEC + DEX_AREA_SEVEN_ISLAND, // Not associated with any MAPSEC + DEX_AREA_KINDLE_ROAD, + DEX_AREA_TREASURE_BEACH, + DEX_AREA_CAPE_BRINK, + DEX_AREA_BOND_BRIDGE, + DEX_AREA_THREE_ISLE_PATH, + DEX_AREA_RESORT_GORGEOUS, + DEX_AREA_WATER_LABYRINTH, + DEX_AREA_FIVE_ISLE_MEADOW, + DEX_AREA_MEMORIAL_PILLAR, + DEX_AREA_OUTCAST_ISLAND, + DEX_AREA_GREEN_PATH, + DEX_AREA_WATER_PATH, + DEX_AREA_RUIN_VALLEY, + DEX_AREA_TRAINER_TOWER, + DEX_AREA_CANYON_ENTRANCE, + DEX_AREA_SEVAULT_CANYON, + DEX_AREA_TANOBY_RUINS, + DEX_AREA_MT_EMBER, + DEX_AREA_BERRY_FOREST, + DEX_AREA_ICEFALL_CAVE, + DEX_AREA_LOST_CAVE, + DEX_AREA_ALTERING_CAVE, + DEX_AREA_PATTERN_BUSH, + DEX_AREA_DOTTED_HOLE, + DEX_AREA_TANOBY_CHAMBER, +}; + struct PokedexEntry { /*0x00*/ u8 categoryName[12]; diff --git a/include/pokedex_area_markers.h b/include/pokedex_area_markers.h index c0b1978cc..48f54389f 100644 --- a/include/pokedex_area_markers.h +++ b/include/pokedex_area_markers.h @@ -1,19 +1,9 @@ #ifndef GUARD_POKEDEX_AREA_MARKERS_H #define GUARD_POKEDEX_AREA_MARKERS_H -struct PAM_TaskData -{ - struct SubspriteTable subsprites; - void *buffer; - u8 unk_0C; - u8 spr_id; - u16 tilesTag; - u16 unk_10; -}; - -void SetAreaSubsprite(s32 i, s32 whichArea, struct Subsprite * subsprites); -void Dtor_PokedexAreaMarkers(u8 taskId); -u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y); -u8 PokedexAreaMarkers_Any(u8 taskId); +void GetAreaMarkerSubsprite(s32 i, s32 dexArea, struct Subsprite * subsprites); +void DestroyPokedexAreaMarkers(u8 taskId); +u8 CreatePokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y); +u8 GetNumPokedexAreaMarkers(u8 taskId); #endif //GUARD_POKEDEX_AREA_MARKERS_H diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 8e151d55d..b73010306 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -8,6 +8,8 @@ #define ROCK_WILD_COUNT 5 #define FISH_WILD_COUNT 10 +#define NUM_ALTERING_CAVE_TABLES 9 + struct WildPokemon { u8 minLevel; diff --git a/include/wild_pokemon_area.h b/include/wild_pokemon_area.h index 354683408..f1d67fd86 100644 --- a/include/wild_pokemon_area.h +++ b/include/wild_pokemon_area.h @@ -1,6 +1,6 @@ #ifndef GUARD_WILD_POKEMON_AREA_H #define GUARD_WILD_POKEMON_AREA_H -s32 BuildPokedexAreaSubspriteBuffer(u16 species, struct Subsprite * subsprites); +s32 GetSpeciesPokedexAreaMarkers(u16 species, struct Subsprite * subsprites); #endif //GUARD_WILD_POKEMON_AREA_H diff --git a/src/pokedex_area_markers.c b/src/pokedex_area_markers.c index 5226133ac..6ca1090c9 100644 --- a/src/pokedex_area_markers.c +++ b/src/pokedex_area_markers.c @@ -4,160 +4,191 @@ #include "task.h" #include "wild_pokemon_area.h" #include "pokedex_area_markers.h" +#include "pokedex.h" + +/* + Controls the red ellipse markers that appear on the pokedex maps to show where a species is found. + All of the markers together are a single sprite, with each individual marker being represented by + a subsprite of the necessary size and shape. + + The data about each area marker is in sAreaMarkers, each specified by a DEX_AREA constant. + A MAPSEC is associated with a DEX_AREA constant by a series of arrays in wild_pokemon_area.c +*/ + +struct PAM_TaskData +{ + struct SubspriteTable subsprites; + void *buffer; + u8 unused; + u8 spriteId; + u16 tilesTag; + u16 paletteTag; // Never read +}; + +enum { + MARKER_CIRCULAR, + MARKER_SMALL_H, + MARKER_SMALL_V, + MARKER_MED_H, + MARKER_MED_V, + MARKER_LARGE_H, + MARKER_LARGE_V, +}; static const u16 sMarkerPal[] = INCBIN_U16("graphics/pokedex/area_markers/marker.gbapal"); static const u32 sMarkerTiles[] = INCBIN_U32("graphics/pokedex/area_markers/marker.4bpp.lz"); -static const struct Subsprite sSubsprite0 = { - .size = ST_OAM_SIZE_0, - .shape = ST_OAM_SQUARE, +static const struct Subsprite sSubsprite_Circular = { + .size = SPRITE_SIZE(8x8), + .shape = SPRITE_SHAPE(8x8), .priority = 1, .tileOffset = 0 }; -static const struct Subsprite sSubsprite1 = { - .size = ST_OAM_SIZE_0, - .shape = ST_OAM_H_RECTANGLE, +static const struct Subsprite sSubsprite_SmallHorizontal = { + .size = SPRITE_SIZE(16x8), + .shape = SPRITE_SHAPE(16x8), .priority = 1, .tileOffset = 1 }; -static const struct Subsprite sSubsprite2 = { - .size = ST_OAM_SIZE_0, - .shape = ST_OAM_V_RECTANGLE, +static const struct Subsprite sSubsprite_SmallVertical = { + .size = SPRITE_SIZE(8x16), + .shape = SPRITE_SHAPE(8x16), .priority = 1, .tileOffset = 3 }; -static const struct Subsprite sSubsprite3 = { - .size = ST_OAM_SIZE_2, - .shape = ST_OAM_H_RECTANGLE, +static const struct Subsprite sSubsprite_MediumHorizontal = { + .size = SPRITE_SIZE(32x16), + .shape = SPRITE_SHAPE(32x16), .priority = 1, .tileOffset = 5 }; -static const struct Subsprite sSubsprite4 = { - .size = ST_OAM_SIZE_2, - .shape = ST_OAM_V_RECTANGLE, +static const struct Subsprite sSubsprite_MediumVertical = { + .size = SPRITE_SIZE(16x32), + .shape = SPRITE_SHAPE(16x32), .priority = 1, .tileOffset = 13 }; -static const struct Subsprite sSubsprite5 = { - .size = ST_OAM_SIZE_2, - .shape = ST_OAM_H_RECTANGLE, +static const struct Subsprite sSubsprite_LargeHorizontal = { + .size = SPRITE_SIZE(32x16), + .shape = SPRITE_SHAPE(32x16), .priority = 1, .tileOffset = 21 }; -static const struct Subsprite sSubsprite6 = { - .size = ST_OAM_SIZE_2, - .shape = ST_OAM_V_RECTANGLE, +static const struct Subsprite sSubsprite_LargeVertical = { + .size = SPRITE_SIZE(16x32), + .shape = SPRITE_SHAPE(16x32), .priority = 1, .tileOffset = 29 }; static const struct Subsprite *const sSubsprites[] = { - &sSubsprite0, - &sSubsprite1, - &sSubsprite2, - &sSubsprite3, - &sSubsprite4, - &sSubsprite5, - &sSubsprite6 + [MARKER_CIRCULAR] = &sSubsprite_Circular, + [MARKER_SMALL_H] = &sSubsprite_SmallHorizontal, + [MARKER_SMALL_V] = &sSubsprite_SmallVertical, + [MARKER_MED_H] = &sSubsprite_MediumHorizontal, + [MARKER_MED_V] = &sSubsprite_MediumVertical, + [MARKER_LARGE_H] = &sSubsprite_LargeHorizontal, + [MARKER_LARGE_V] = &sSubsprite_LargeVertical }; -static const s8 sSubspriteLookupTable[][4] = { - { 0, 0x00, 0x00 }, - { 0, 0x36, 0x2c }, - { 0, 0x36, 0x1c }, - { 0, 0x36, 0x0c }, - { 0, 0x5c, 0x0c }, - { 0, 0x6e, 0x18 }, - { 0, 0x5c, 0x24 }, - { 0, 0x4c, 0x18 }, - { 0, 0x4e, 0x34 }, - { 0, 0x36, 0x3e }, - { 0, 0x2a, 0x02 }, - { 0, 0x5c, 0x18 }, - { 2, 0x36, 0x20 }, - { 2, 0x36, 0x10 }, - { 1, 0x3d, 0x0c }, - { 1, 0x4d, 0x0c }, - { 0, 0x5c, 0x12 }, - { 0, 0x5c, 0x1e }, - { 0, 0x54, 0x18 }, - { 1, 0x62, 0x18 }, - { 1, 0x62, 0x0c }, - { 2, 0x6e, 0x0c }, - { 1, 0x62, 0x24 }, - { 4, 0x6a, 0x19 }, - { 1, 0x64, 0x2e }, - { 2, 0x5e, 0x2d }, - { 1, 0x55, 0x34 }, - { 0, 0x44, 0x18 }, - { 4, 0x3e, 0x1a }, - { 1, 0x40, 0x34 }, - { 0, 0x4e, 0x3c }, - { 3, 0x37, 0x3a }, - { 2, 0x36, 0x32 }, - { 1, 0x28, 0x1c }, - { 4, 0x26, 0x04 }, - { 0, 0x5c, 0x04 }, - { 3, 0x5a, 0xfe }, - { 0, 0x33, 0x14 }, - { 1, 0x3d, 0x12 }, - { 0, 0x48, 0x08 }, - { 0, 0x57, 0x08 }, - { 0, 0x70, 0x0e }, - { 0, 0x71, 0x14 }, - { 0, 0x71, 0x19 }, - { 1, 0x4e, 0x2c }, - { 0, 0x41, 0x3c }, - { 0, 0x34, 0x3e }, - { 0, 0x2d, 0x07 }, - { 0, 0x0a, 0x0a }, - { 0, 0x0c, 0x23 }, - { 0, 0x0e, 0x34 }, - { 0, 0x0c, 0x54 }, - { 0, 0x2d, 0x51 }, - { 0, 0x4c, 0x54 }, - { 0, 0x68, 0x52 }, - { 2, 0x0e, 0x02 }, - { 0, 0x0a, 0x0f }, - { 0, 0x0c, 0x1d }, - { 1, 0x02, 0x34 }, - { 1, 0x0c, 0x38 }, - { 1, 0x2c, 0x4a }, - { 1, 0x24, 0x4e }, - { 2, 0x30, 0x50 }, - { 2, 0x34, 0x56 }, - { 0, 0x48, 0x4a }, - { 1, 0x48, 0x4e }, - { 2, 0x51, 0x50 }, - { 0, 0x4c, 0x5c }, - { 0, 0x68, 0x4b }, - { 0, 0x68, 0x56 }, - { 2, 0x6c, 0x53 }, - { 3, 0x60, 0x5a }, - { 0, 0x0e, 0x01 }, - { 0, 0x05, 0x34 }, - { 0, 0x0d, 0x50 }, - { 0, 0x36, 0x4a }, - { 0, 0x45, 0x49 }, - { 0, 0x4c, 0x4d }, - { 0, 0x49, 0x5f }, - { 3, 0x60, 0x5a } +static const s8 sAreaMarkers[][4] = { + // Marker, x, y + [DEX_AREA_NONE] = {}, + [DEX_AREA_PALLET_TOWN] = { MARKER_CIRCULAR, 54, 44 }, + [DEX_AREA_VIRIDIAN_CITY] = { MARKER_CIRCULAR, 54, 28 }, + [DEX_AREA_PEWTER_CITY] = { MARKER_CIRCULAR, 54, 12 }, + [DEX_AREA_CERULEAN_CITY] = { MARKER_CIRCULAR, 92, 12 }, + [DEX_AREA_LAVENDER_TOWN] = { MARKER_CIRCULAR, 110, 24 }, + [DEX_AREA_VERMILION_CITY] = { MARKER_CIRCULAR, 92, 36 }, + [DEX_AREA_CELADON_CITY] = { MARKER_CIRCULAR, 76, 24 }, + [DEX_AREA_FUCHSIA_CITY] = { MARKER_CIRCULAR, 78, 52 }, + [DEX_AREA_CINNABAR_ISLAND] = { MARKER_CIRCULAR, 54, 62 }, + [DEX_AREA_INDIGO_PLATEAU] = { MARKER_CIRCULAR, 42, 2 }, + [DEX_AREA_SAFFRON_CITY] = { MARKER_CIRCULAR, 92, 24 }, + [DEX_AREA_ROUTE_1] = { MARKER_SMALL_V, 54, 32 }, + [DEX_AREA_ROUTE_2] = { MARKER_SMALL_V, 54, 16 }, + [DEX_AREA_ROUTE_3] = { MARKER_SMALL_H, 61, 12 }, + [DEX_AREA_ROUTE_4] = { MARKER_SMALL_H, 77, 12 }, + [DEX_AREA_ROUTE_5] = { MARKER_CIRCULAR, 92, 18 }, + [DEX_AREA_ROUTE_6] = { MARKER_CIRCULAR, 92, 30 }, + [DEX_AREA_ROUTE_7] = { MARKER_CIRCULAR, 84, 24 }, + [DEX_AREA_ROUTE_8] = { MARKER_SMALL_H, 98, 24 }, + [DEX_AREA_ROUTE_9] = { MARKER_SMALL_H, 98, 12 }, + [DEX_AREA_ROUTE_10] = { MARKER_SMALL_V, 110, 12 }, + [DEX_AREA_ROUTE_11] = { MARKER_SMALL_H, 98, 36 }, + [DEX_AREA_ROUTE_12] = { MARKER_MED_V, 106, 25 }, + [DEX_AREA_ROUTE_13] = { MARKER_SMALL_H, 100, 46 }, + [DEX_AREA_ROUTE_14] = { MARKER_SMALL_V, 94, 45 }, + [DEX_AREA_ROUTE_15] = { MARKER_SMALL_H, 85, 52 }, + [DEX_AREA_ROUTE_16] = { MARKER_CIRCULAR, 68, 24 }, + [DEX_AREA_ROUTE_17] = { MARKER_MED_V, 62, 26 }, + [DEX_AREA_ROUTE_18] = { MARKER_SMALL_H, 64, 52 }, + [DEX_AREA_ROUTE_19] = { MARKER_CIRCULAR, 78, 60 }, + [DEX_AREA_ROUTE_20] = { MARKER_MED_H, 55, 58 }, + [DEX_AREA_ROUTE_21] = { MARKER_SMALL_V, 54, 50 }, + [DEX_AREA_ROUTE_22] = { MARKER_SMALL_H, 40, 28 }, + [DEX_AREA_ROUTE_23] = { MARKER_MED_V, 38, 4 }, + [DEX_AREA_ROUTE_24] = { MARKER_CIRCULAR, 92, 4 }, + [DEX_AREA_ROUTE_25] = { MARKER_MED_H, 90, 254 }, + [DEX_AREA_VIRIDIAN_FOREST] = { MARKER_CIRCULAR, 51, 20 }, + [DEX_AREA_DIGLETTS_CAVE] = { MARKER_SMALL_H, 61, 18 }, + [DEX_AREA_MT_MOON] = { MARKER_CIRCULAR, 72, 8 }, + [DEX_AREA_CERULEAN_CAVE] = { MARKER_CIRCULAR, 87, 8 }, + [DEX_AREA_ROCK_TUNNEL] = { MARKER_CIRCULAR, 112, 14 }, + [DEX_AREA_POWER_PLANT] = { MARKER_CIRCULAR, 113, 20 }, + [DEX_AREA_POKEMON_TOWER] = { MARKER_CIRCULAR, 113, 25 }, + [DEX_AREA_SAFARI_ZONE] = { MARKER_SMALL_H, 78, 44 }, + [DEX_AREA_SEAFOAM_ISLANDS] = { MARKER_CIRCULAR, 65, 60 }, + [DEX_AREA_POKEMON_MANSION] = { MARKER_CIRCULAR, 52, 62 }, + [DEX_AREA_VICTORY_ROAD] = { MARKER_CIRCULAR, 45, 7 }, + [DEX_AREA_ONE_ISLAND] = { MARKER_CIRCULAR, 10, 10 }, + [DEX_AREA_TWO_ISLAND] = { MARKER_CIRCULAR, 12, 35 }, + [DEX_AREA_THREE_ISLAND] = { MARKER_CIRCULAR, 14, 52 }, + [DEX_AREA_FOUR_ISLAND] = { MARKER_CIRCULAR, 12, 84 }, + [DEX_AREA_FIVE_ISLAND] = { MARKER_CIRCULAR, 45, 81 }, + [DEX_AREA_SIX_ISLAND] = { MARKER_CIRCULAR, 76, 84 }, + [DEX_AREA_SEVEN_ISLAND] = { MARKER_CIRCULAR, 104, 82 }, + [DEX_AREA_KINDLE_ROAD] = { MARKER_SMALL_V, 14, 2 }, + [DEX_AREA_TREASURE_BEACH] = { MARKER_CIRCULAR, 10, 15 }, + [DEX_AREA_CAPE_BRINK] = { MARKER_CIRCULAR, 12, 29 }, + [DEX_AREA_BOND_BRIDGE] = { MARKER_SMALL_H, 2, 52 }, + [DEX_AREA_THREE_ISLE_PATH] = { MARKER_SMALL_H, 12, 56 }, + [DEX_AREA_RESORT_GORGEOUS] = { MARKER_SMALL_H, 44, 74 }, + [DEX_AREA_WATER_LABYRINTH] = { MARKER_SMALL_H, 36, 78 }, + [DEX_AREA_FIVE_ISLE_MEADOW] = { MARKER_SMALL_V, 48, 80 }, + [DEX_AREA_MEMORIAL_PILLAR] = { MARKER_SMALL_V, 52, 86 }, + [DEX_AREA_OUTCAST_ISLAND] = { MARKER_CIRCULAR, 72, 74 }, + [DEX_AREA_GREEN_PATH] = { MARKER_SMALL_H, 72, 78 }, + [DEX_AREA_WATER_PATH] = { MARKER_SMALL_V, 81, 80 }, + [DEX_AREA_RUIN_VALLEY] = { MARKER_CIRCULAR, 76, 92 }, + [DEX_AREA_TRAINER_TOWER] = { MARKER_CIRCULAR, 104, 75 }, + [DEX_AREA_CANYON_ENTRANCE] = { MARKER_CIRCULAR, 104, 86 }, + [DEX_AREA_SEVAULT_CANYON] = { MARKER_SMALL_V, 108, 83 }, + [DEX_AREA_TANOBY_RUINS] = { MARKER_MED_H, 96, 90 }, + [DEX_AREA_MT_EMBER] = { MARKER_CIRCULAR, 14, 1 }, + [DEX_AREA_BERRY_FOREST] = { MARKER_CIRCULAR, 5, 52 }, + [DEX_AREA_ICEFALL_CAVE] = { MARKER_CIRCULAR, 13, 80 }, + [DEX_AREA_LOST_CAVE] = { MARKER_CIRCULAR, 54, 74 }, + [DEX_AREA_ALTERING_CAVE] = { MARKER_CIRCULAR, 69, 73 }, + [DEX_AREA_PATTERN_BUSH] = { MARKER_CIRCULAR, 76, 77 }, + [DEX_AREA_DOTTED_HOLE] = { MARKER_CIRCULAR, 73, 95 }, + [DEX_AREA_TANOBY_CHAMBER] = { MARKER_MED_H, 96, 90 }, }; static void Task_ShowAreaMarkers(u8 taskId) { struct PAM_TaskData * data = (void *)gTasks[taskId].data; - gSprites[data->spr_id].invisible = FALSE; + gSprites[data->spriteId].invisible = FALSE; } -u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y) +u8 CreatePokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y) { struct SpriteTemplate spriteTemplate; struct CompressedSpriteSheet spriteSheet; @@ -165,34 +196,42 @@ u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y) struct PAM_TaskData * data; struct Subsprite * subsprites; + // Load gfx spriteSheet.data = sMarkerTiles; spriteSheet.size = 0x4A0; spriteSheet.tag = tilesTag; LoadCompressedSpriteSheet(&spriteSheet); LoadPalette(sMarkerPal, 0x100 + 16 * palIdx, 0x20); + + // Get marker subsprites taskId = CreateTask(Task_ShowAreaMarkers, 0); data = (void *)gTasks[taskId].data; - data->unk_0C = 0; + data->unused = 0; data->tilesTag = tilesTag; - data->unk_10 = 0xFFFF; + data->paletteTag = TAG_NONE; subsprites = Alloc(120 * sizeof(struct Subsprite)); data->buffer = subsprites; data->subsprites.subsprites = subsprites; - data->subsprites.subspriteCount = BuildPokedexAreaSubspriteBuffer(species, subsprites); + data->subsprites.subspriteCount = GetSpeciesPokedexAreaMarkers(species, subsprites); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BD); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8)); SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_WININ, 0x1F1F); - SetGpuReg(REG_OFFSET_WINOUT, 0x2F3D); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_CLR); + + // Set marker subsprites on full sprite spriteTemplate = gDummySpriteTemplate; spriteTemplate.tileTag = tilesTag; - data->spr_id = CreateSprite(&spriteTemplate, 104, y + 32, 0); - SetSubspriteTables(&gSprites[data->spr_id], &data->subsprites); - gSprites[data->spr_id].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[data->spr_id].oam.paletteNum = palIdx; - gSprites[data->spr_id].subspriteTableNum = 0; - gSprites[data->spr_id].invisible = TRUE; + data->spriteId = CreateSprite(&spriteTemplate, 104, y + 32, 0); + SetSubspriteTables(&gSprites[data->spriteId], &data->subsprites); + gSprites[data->spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[data->spriteId].oam.paletteNum = palIdx; + gSprites[data->spriteId].subspriteTableNum = 0; + gSprites[data->spriteId].invisible = TRUE; + + // Show markers HideBg(1); SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); FillBgTilemapBufferRect_Palette0(1, 0x00F, 0, 0, 30, 20); @@ -201,17 +240,17 @@ u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y) return taskId; } -void Dtor_PokedexAreaMarkers(u8 taskId) +void DestroyPokedexAreaMarkers(u8 taskId) { struct PAM_TaskData * data = (void *)gTasks[taskId].data; FreeSpriteTilesByTag(data->tilesTag); - DestroySprite(&gSprites[data->spr_id]); + DestroySprite(&gSprites[data->spriteId]); Free(data->buffer); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_WININ, 0x1F1F); - SetGpuReg(REG_OFFSET_WINOUT, 0x1F1F); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); HideBg(1); SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 2); @@ -221,14 +260,14 @@ void Dtor_PokedexAreaMarkers(u8 taskId) DestroyTask(taskId); } -void SetAreaSubsprite(s32 i, s32 whichArea, struct Subsprite * subsprites) +void GetAreaMarkerSubsprite(s32 i, s32 dexArea, struct Subsprite * subsprites) { - subsprites[i] = *sSubsprites[sSubspriteLookupTable[whichArea][0]]; - subsprites[i].x = sSubspriteLookupTable[whichArea][1]; - subsprites[i].y = sSubspriteLookupTable[whichArea][2]; + subsprites[i] = *sSubsprites[sAreaMarkers[dexArea][0]]; + subsprites[i].x = sAreaMarkers[dexArea][1]; + subsprites[i].y = sAreaMarkers[dexArea][2]; } -u8 PokedexAreaMarkers_Any(u8 taskId) +u8 GetNumPokedexAreaMarkers(u8 taskId) { struct PAM_TaskData * data = (void *)gTasks[taskId].data; return data->subsprites.subspriteCount; diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 5da6f5b3d..691b3447f 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -21,6 +21,8 @@ #include "pokedex_area_markers.h" #include "field_specials.h" +#define TAG_AREA_MARKERS 2001 + enum TextMode { TEXT_LEFT, TEXT_CENTER, @@ -31,7 +33,8 @@ struct PokedexScreenData { u8 taskId; u8 state; - u8 data[4]; + u8 data[2]; + u8 areaMarkersTaskId; u32 unlockedCategories; u32 modeSelectInput; u16 modeSelectItemsAbove; @@ -3123,9 +3126,10 @@ u8 DexScreen_DrawMonAreaPage(void) } // Create the area markers - sPokedexScreenData->data[2] = Ctor_PokedexAreaMarkers(species, 2001, 3, kantoMapVoff * 8); - if (!(PokedexAreaMarkers_Any(sPokedexScreenData->data[2]))) + sPokedexScreenData->areaMarkersTaskId = CreatePokedexAreaMarkers(species, TAG_AREA_MARKERS, 3, kantoMapVoff * 8); + if (GetNumPokedexAreaMarkers(sPokedexScreenData->areaMarkersTaskId) == 0) { + // No markers, display "Area Unknown" BlitBitmapRectToWindow(sPokedexScreenData->windowIds[0], (void *)sBlitTiles_WideEllipse, 0, 0, 88, 16, 4, 28, 88, 16); { s32 strWidth = GetStringWidth(FONT_0, gText_AreaUnknown, 0); @@ -3149,7 +3153,7 @@ u8 DexScreen_DestroyAreaScreenResources(void) { int i; - Dtor_PokedexAreaMarkers(sPokedexScreenData->data[2]); + DestroyPokedexAreaMarkers(sPokedexScreenData->areaMarkersTaskId); for (i = 0; i < 13; i++) DexScreen_RemoveWindow(&sPokedexScreenData->windowIds[i]); diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 288a6b235..a49b48910 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -186,7 +186,7 @@ static u16 GetCurrentMapWildMonHeaderId(void) gSaveBlock1Ptr->location.mapNum == MAP_NUM(SIX_ISLAND_ALTERING_CAVE)) { u16 alteringCaveId = VarGet(VAR_ALTERING_CAVE_WILD_SET); - if (alteringCaveId > 8) + if (alteringCaveId >= NUM_ALTERING_CAVE_TABLES) alteringCaveId = 0; i += alteringCaveId; diff --git a/src/wild_pokemon_area.c b/src/wild_pokemon_area.c index c93ae36b6..1fc25e12c 100644 --- a/src/wild_pokemon_area.c +++ b/src/wild_pokemon_area.c @@ -4,16 +4,11 @@ #include "wild_encounter.h" #include "roamer.h" #include "overworld.h" +#include "pokedex.h" #include "pokedex_area_markers.h" #include "constants/region_map_sections.h" #include "constants/maps.h" -struct SeviiDexArea -{ - const u16 (*lut)[2]; - s32 count; -}; - struct RoamerPair { u16 roamer; @@ -21,137 +16,141 @@ struct RoamerPair }; static s32 GetRoamerIndex(u16 species); -static s32 CountRoamerNests(u16 species, struct Subsprite * subsprites); -static bool32 PokemonInAnyEncounterTableInMap(const struct WildPokemonHeader * data, s32 species); -static bool32 PokemonInEncounterTable(const struct WildPokemonInfo * pokemon, s32 species, s32 count); +static s32 GetRoamerPokedexAreaMarkers(u16 species, struct Subsprite * subsprites); +static bool32 IsSpeciesOnMap(const struct WildPokemonHeader * data, s32 species); +static bool32 IsSpeciesInEncounterTable(const struct WildPokemonInfo * pokemon, s32 species, s32 count); static u16 GetMapSecIdFromWildMonHeader(const struct WildPokemonHeader * header); -static bool32 TryGetMapSecPokedexAreaEntry(u16 mapSecId, const u16 (*lut)[2], s32 count, s32 * lutIdx_p, u16 * tableIdx_p); +static bool32 FindDexAreaByMapSec(u16 mapSecId, const u16 (*lut)[2], s32 count, s32 * lutIdx_p, u16 * tableIdx_p); static const u16 sDexAreas_Kanto[][2] = { - { MAPSEC_PALLET_TOWN, 1 }, - { MAPSEC_VIRIDIAN_CITY, 2 }, - { MAPSEC_PEWTER_CITY, 3 }, - { MAPSEC_CERULEAN_CITY, 4 }, - { MAPSEC_LAVENDER_TOWN, 5 }, - { MAPSEC_VERMILION_CITY, 6 }, - { MAPSEC_CELADON_CITY, 7 }, - { MAPSEC_FUCHSIA_CITY, 8 }, - { MAPSEC_CINNABAR_ISLAND, 9 }, - { MAPSEC_INDIGO_PLATEAU, 10 }, - { MAPSEC_SAFFRON_CITY, 11 }, - { MAPSEC_ROUTE_4_POKECENTER, 15 }, - { MAPSEC_ROUTE_10_POKECENTER, 21 }, - { MAPSEC_ROUTE_1, 12 }, - { MAPSEC_ROUTE_2, 13 }, - { MAPSEC_ROUTE_3, 14 }, - { MAPSEC_ROUTE_4, 15 }, - { MAPSEC_ROUTE_5, 16 }, - { MAPSEC_ROUTE_6, 17 }, - { MAPSEC_ROUTE_7, 18 }, - { MAPSEC_ROUTE_8, 19 }, - { MAPSEC_ROUTE_9, 20 }, - { MAPSEC_ROUTE_10, 21 }, - { MAPSEC_ROUTE_11, 22 }, - { MAPSEC_ROUTE_12, 23 }, - { MAPSEC_ROUTE_13, 24 }, - { MAPSEC_ROUTE_14, 25 }, - { MAPSEC_ROUTE_15, 26 }, - { MAPSEC_ROUTE_16, 27 }, - { MAPSEC_ROUTE_17, 28 }, - { MAPSEC_ROUTE_18, 29 }, - { MAPSEC_ROUTE_19, 30 }, - { MAPSEC_ROUTE_20, 31 }, - { MAPSEC_ROUTE_21, 32 }, - { MAPSEC_ROUTE_22, 33 }, - { MAPSEC_ROUTE_23, 34 }, - { MAPSEC_ROUTE_24, 35 }, - { MAPSEC_ROUTE_25, 36 }, - { MAPSEC_VIRIDIAN_FOREST, 37 }, - { MAPSEC_MT_MOON, 39 }, - { MAPSEC_S_S_ANNE, 6 }, - { MAPSEC_UNDERGROUND_PATH, 11 }, - { MAPSEC_UNDERGROUND_PATH_2, 11 }, - { MAPSEC_DIGLETTS_CAVE, 38 }, - { MAPSEC_KANTO_VICTORY_ROAD, 47 }, - { MAPSEC_ROCKET_HIDEOUT, 7 }, - { MAPSEC_SILPH_CO, 11 }, - { MAPSEC_POKEMON_MANSION, 46 }, - { MAPSEC_KANTO_SAFARI_ZONE, 44 }, - { MAPSEC_POKEMON_LEAGUE, 47 }, - { MAPSEC_ROCK_TUNNEL, 41 }, - { MAPSEC_SEAFOAM_ISLANDS, 45 }, - { MAPSEC_POKEMON_TOWER, 43 }, - { MAPSEC_CERULEAN_CAVE, 40 }, - { MAPSEC_POWER_PLANT, 42 } + { MAPSEC_PALLET_TOWN, DEX_AREA_PALLET_TOWN }, + { MAPSEC_VIRIDIAN_CITY, DEX_AREA_VIRIDIAN_CITY }, + { MAPSEC_PEWTER_CITY, DEX_AREA_PEWTER_CITY }, + { MAPSEC_CERULEAN_CITY, DEX_AREA_CERULEAN_CITY }, + { MAPSEC_LAVENDER_TOWN, DEX_AREA_LAVENDER_TOWN }, + { MAPSEC_VERMILION_CITY, DEX_AREA_VERMILION_CITY }, + { MAPSEC_CELADON_CITY, DEX_AREA_CELADON_CITY }, + { MAPSEC_FUCHSIA_CITY, DEX_AREA_FUCHSIA_CITY }, + { MAPSEC_CINNABAR_ISLAND, DEX_AREA_CINNABAR_ISLAND }, + { MAPSEC_INDIGO_PLATEAU, DEX_AREA_INDIGO_PLATEAU }, + { MAPSEC_SAFFRON_CITY, DEX_AREA_SAFFRON_CITY }, + { MAPSEC_ROUTE_4_POKECENTER, DEX_AREA_ROUTE_4 }, + { MAPSEC_ROUTE_10_POKECENTER, DEX_AREA_ROUTE_10 }, + { MAPSEC_ROUTE_1, DEX_AREA_ROUTE_1 }, + { MAPSEC_ROUTE_2, DEX_AREA_ROUTE_2 }, + { MAPSEC_ROUTE_3, DEX_AREA_ROUTE_3 }, + { MAPSEC_ROUTE_4, DEX_AREA_ROUTE_4 }, + { MAPSEC_ROUTE_5, DEX_AREA_ROUTE_5 }, + { MAPSEC_ROUTE_6, DEX_AREA_ROUTE_6 }, + { MAPSEC_ROUTE_7, DEX_AREA_ROUTE_7 }, + { MAPSEC_ROUTE_8, DEX_AREA_ROUTE_8 }, + { MAPSEC_ROUTE_9, DEX_AREA_ROUTE_9 }, + { MAPSEC_ROUTE_10, DEX_AREA_ROUTE_10 }, + { MAPSEC_ROUTE_11, DEX_AREA_ROUTE_11 }, + { MAPSEC_ROUTE_12, DEX_AREA_ROUTE_12 }, + { MAPSEC_ROUTE_13, DEX_AREA_ROUTE_13 }, + { MAPSEC_ROUTE_14, DEX_AREA_ROUTE_14 }, + { MAPSEC_ROUTE_15, DEX_AREA_ROUTE_15 }, + { MAPSEC_ROUTE_16, DEX_AREA_ROUTE_16 }, + { MAPSEC_ROUTE_17, DEX_AREA_ROUTE_17 }, + { MAPSEC_ROUTE_18, DEX_AREA_ROUTE_18 }, + { MAPSEC_ROUTE_19, DEX_AREA_ROUTE_19 }, + { MAPSEC_ROUTE_20, DEX_AREA_ROUTE_20 }, + { MAPSEC_ROUTE_21, DEX_AREA_ROUTE_21 }, + { MAPSEC_ROUTE_22, DEX_AREA_ROUTE_22 }, + { MAPSEC_ROUTE_23, DEX_AREA_ROUTE_23 }, + { MAPSEC_ROUTE_24, DEX_AREA_ROUTE_24 }, + { MAPSEC_ROUTE_25, DEX_AREA_ROUTE_25 }, + { MAPSEC_VIRIDIAN_FOREST, DEX_AREA_VIRIDIAN_FOREST }, + { MAPSEC_MT_MOON, DEX_AREA_MT_MOON }, + { MAPSEC_S_S_ANNE, DEX_AREA_VERMILION_CITY }, + { MAPSEC_UNDERGROUND_PATH, DEX_AREA_SAFFRON_CITY }, + { MAPSEC_UNDERGROUND_PATH_2, DEX_AREA_SAFFRON_CITY }, + { MAPSEC_DIGLETTS_CAVE, DEX_AREA_DIGLETTS_CAVE }, + { MAPSEC_KANTO_VICTORY_ROAD, DEX_AREA_VICTORY_ROAD }, + { MAPSEC_ROCKET_HIDEOUT, DEX_AREA_CELADON_CITY }, + { MAPSEC_SILPH_CO, DEX_AREA_SAFFRON_CITY }, + { MAPSEC_POKEMON_MANSION, DEX_AREA_POKEMON_MANSION }, + { MAPSEC_KANTO_SAFARI_ZONE, DEX_AREA_SAFARI_ZONE }, + { MAPSEC_POKEMON_LEAGUE, DEX_AREA_VICTORY_ROAD }, + { MAPSEC_ROCK_TUNNEL, DEX_AREA_ROCK_TUNNEL }, + { MAPSEC_SEAFOAM_ISLANDS, DEX_AREA_SEAFOAM_ISLANDS }, + { MAPSEC_POKEMON_TOWER, DEX_AREA_POKEMON_TOWER }, + { MAPSEC_CERULEAN_CAVE, DEX_AREA_CERULEAN_CAVE }, + { MAPSEC_POWER_PLANT, DEX_AREA_POWER_PLANT } }; static const u16 sDexAreas_Sevii1[][2] = { - { MAPSEC_KINDLE_ROAD, 55 }, - { MAPSEC_TREASURE_BEACH, 56 }, - { MAPSEC_ONE_ISLAND, 48 }, - { MAPSEC_MT_EMBER, 72 } + { MAPSEC_KINDLE_ROAD, DEX_AREA_KINDLE_ROAD }, + { MAPSEC_TREASURE_BEACH, DEX_AREA_TREASURE_BEACH }, + { MAPSEC_ONE_ISLAND, DEX_AREA_ONE_ISLAND }, + { MAPSEC_MT_EMBER, DEX_AREA_MT_EMBER } }; static const u16 sDexAreas_Sevii2[][2] = { - { MAPSEC_CAPE_BRINK, 57 }, - { MAPSEC_TWO_ISLAND, 49 } + { MAPSEC_CAPE_BRINK, DEX_AREA_CAPE_BRINK }, + { MAPSEC_TWO_ISLAND, DEX_AREA_TWO_ISLAND } }; static const u16 sDexAreas_Sevii3[][2] = { - { MAPSEC_BOND_BRIDGE, 58 }, - { MAPSEC_THREE_ISLE_PORT, 59 }, - { MAPSEC_THREE_ISLAND, 50 }, - { MAPSEC_BERRY_FOREST, 73 }, - { MAPSEC_THREE_ISLE_PATH, 59 } + { MAPSEC_BOND_BRIDGE, DEX_AREA_BOND_BRIDGE }, + { MAPSEC_THREE_ISLE_PORT, DEX_AREA_THREE_ISLE_PATH }, + { MAPSEC_THREE_ISLAND, DEX_AREA_THREE_ISLAND }, + { MAPSEC_BERRY_FOREST, DEX_AREA_BERRY_FOREST }, + { MAPSEC_THREE_ISLE_PATH, DEX_AREA_THREE_ISLE_PATH } }; static const u16 sDexAreas_Sevii4[][2] = { - { MAPSEC_FOUR_ISLAND, 51 }, - { MAPSEC_ICEFALL_CAVE, 74 } + { MAPSEC_FOUR_ISLAND, DEX_AREA_FOUR_ISLAND }, + { MAPSEC_ICEFALL_CAVE, DEX_AREA_ICEFALL_CAVE } }; static const u16 sDexAreas_Sevii5[][2] = { - { MAPSEC_RESORT_GORGEOUS, 60 }, - { MAPSEC_WATER_LABYRINTH, 61 }, - { MAPSEC_FIVE_ISLE_MEADOW, 62 }, - { MAPSEC_MEMORIAL_PILLAR, 63 }, - { MAPSEC_FIVE_ISLAND, 52 }, - { MAPSEC_ROCKET_WAREHOUSE, 62 }, - { MAPSEC_LOST_CAVE, 75 } + { MAPSEC_RESORT_GORGEOUS, DEX_AREA_RESORT_GORGEOUS }, + { MAPSEC_WATER_LABYRINTH, DEX_AREA_WATER_LABYRINTH }, + { MAPSEC_FIVE_ISLE_MEADOW, DEX_AREA_FIVE_ISLE_MEADOW }, + { MAPSEC_MEMORIAL_PILLAR, DEX_AREA_MEMORIAL_PILLAR }, + { MAPSEC_FIVE_ISLAND, DEX_AREA_FIVE_ISLAND }, + { MAPSEC_ROCKET_WAREHOUSE, DEX_AREA_FIVE_ISLE_MEADOW }, + { MAPSEC_LOST_CAVE, DEX_AREA_LOST_CAVE } }; static const u16 sDexAreas_Sevii6[][2] = { - { MAPSEC_OUTCAST_ISLAND, 64 }, - { MAPSEC_GREEN_PATH, 65 }, - { MAPSEC_WATER_PATH, 66 }, - { MAPSEC_RUIN_VALLEY, 67 }, - { MAPSEC_DOTTED_HOLE, 78 }, - { MAPSEC_PATTERN_BUSH, 77 }, - { MAPSEC_ALTERING_CAVE, 76 } + { MAPSEC_OUTCAST_ISLAND, DEX_AREA_OUTCAST_ISLAND }, + { MAPSEC_GREEN_PATH, DEX_AREA_GREEN_PATH }, + { MAPSEC_WATER_PATH, DEX_AREA_WATER_PATH }, + { MAPSEC_RUIN_VALLEY, DEX_AREA_RUIN_VALLEY }, + { MAPSEC_DOTTED_HOLE, DEX_AREA_DOTTED_HOLE }, + { MAPSEC_PATTERN_BUSH, DEX_AREA_PATTERN_BUSH }, + { MAPSEC_ALTERING_CAVE, DEX_AREA_ALTERING_CAVE } }; static const u16 sDexAreas_Sevii7[][2] = { - { MAPSEC_TRAINER_TOWER, 68 }, - { MAPSEC_CANYON_ENTRANCE, 69 }, - { MAPSEC_SEVAULT_CANYON, 70 }, - { MAPSEC_TANOBY_RUINS, 71 }, - { MAPSEC_MONEAN_CHAMBER, 79 }, - { MAPSEC_LIPTOO_CHAMBER, 79 }, - { MAPSEC_WEEPTH_CHAMBER, 79 }, - { MAPSEC_DILFORD_CHAMBER, 79 }, - { MAPSEC_SCUFIB_CHAMBER, 79 }, - { MAPSEC_RIXY_CHAMBER, 79 }, - { MAPSEC_VIAPOIS_CHAMBER, 79 } + { MAPSEC_TRAINER_TOWER, DEX_AREA_TRAINER_TOWER }, + { MAPSEC_CANYON_ENTRANCE, DEX_AREA_CANYON_ENTRANCE }, + { MAPSEC_SEVAULT_CANYON, DEX_AREA_SEVAULT_CANYON }, + { MAPSEC_TANOBY_RUINS, DEX_AREA_TANOBY_RUINS }, + { MAPSEC_MONEAN_CHAMBER, DEX_AREA_TANOBY_CHAMBER }, + { MAPSEC_LIPTOO_CHAMBER, DEX_AREA_TANOBY_CHAMBER }, + { MAPSEC_WEEPTH_CHAMBER, DEX_AREA_TANOBY_CHAMBER }, + { MAPSEC_DILFORD_CHAMBER, DEX_AREA_TANOBY_CHAMBER }, + { MAPSEC_SCUFIB_CHAMBER, DEX_AREA_TANOBY_CHAMBER }, + { MAPSEC_RIXY_CHAMBER, DEX_AREA_TANOBY_CHAMBER }, + { MAPSEC_VIAPOIS_CHAMBER, DEX_AREA_TANOBY_CHAMBER } }; -static const struct SeviiDexArea sSeviiDexAreas[] = { - { sDexAreas_Sevii1, 4 }, - { sDexAreas_Sevii2, 2 }, - { sDexAreas_Sevii3, 5 }, - { sDexAreas_Sevii4, 2 }, - { sDexAreas_Sevii5, 7 }, - { sDexAreas_Sevii6, 7 }, - { sDexAreas_Sevii7, 11 } +static const struct +{ + const u16 (*table)[2]; + s32 count; +} sSeviiDexAreas[] = { + { sDexAreas_Sevii1, ARRAY_COUNT(sDexAreas_Sevii1) }, + { sDexAreas_Sevii2, ARRAY_COUNT(sDexAreas_Sevii2) }, + { sDexAreas_Sevii3, ARRAY_COUNT(sDexAreas_Sevii3) }, + { sDexAreas_Sevii4, ARRAY_COUNT(sDexAreas_Sevii4) }, + { sDexAreas_Sevii5, ARRAY_COUNT(sDexAreas_Sevii5) }, + { sDexAreas_Sevii6, ARRAY_COUNT(sDexAreas_Sevii6) }, + { sDexAreas_Sevii7, ARRAY_COUNT(sDexAreas_Sevii7) } }; static const struct RoamerPair sRoamerPairs[] = { @@ -160,27 +159,27 @@ static const struct RoamerPair sRoamerPairs[] = { { SPECIES_RAIKOU, SPECIES_SQUIRTLE } }; -s32 BuildPokedexAreaSubspriteBuffer(u16 species, struct Subsprite * subsprites) +// Scans for the given species and populates 'subsprites' with the area markers. +// Returns the number of areas where the species was found. +s32 GetSpeciesPokedexAreaMarkers(u16 species, struct Subsprite * subsprites) { s32 areaCount; s32 j; s32 mapSecId; - u16 dexAreaSubspriteIdx; - s32 dexAreaEntryLUTidx; + u16 dexArea; + s32 tableIndex; s32 seviiAreas; s32 alteringCaveCount; s32 alteringCaveNum; s32 i; - if (GetRoamerIndex(species) >= SPECIES_NONE) - { - return CountRoamerNests(species, subsprites); - } + if (GetRoamerIndex(species) >= 0) + return GetRoamerPokedexAreaMarkers(species, subsprites); seviiAreas = GetUnlockedSeviiAreas(); alteringCaveCount = 0; alteringCaveNum = VarGet(VAR_ALTERING_CAVE_WILD_SET); - if (alteringCaveNum > 8) + if (alteringCaveNum >= NUM_ALTERING_CAVE_TABLES) alteringCaveNum = 0; for (i = 0, areaCount = 0; gWildMonHeaders[i].mapGroup != MAP_GROUP(UNDEFINED); i++) { @@ -191,27 +190,27 @@ s32 BuildPokedexAreaSubspriteBuffer(u16 species, struct Subsprite * subsprites) if (alteringCaveNum != alteringCaveCount - 1) continue; } - if (PokemonInAnyEncounterTableInMap(&gWildMonHeaders[i], species)) + if (IsSpeciesOnMap(&gWildMonHeaders[i], species)) { - dexAreaEntryLUTidx = 0; - while (TryGetMapSecPokedexAreaEntry(mapSecId, sDexAreas_Kanto, 55, &dexAreaEntryLUTidx, &dexAreaSubspriteIdx)) + // Search for all dex areas associated with this MAPSEC. + // In the vanilla game each MAPSEC only has at most one DEX_AREA. + tableIndex = 0; + while (FindDexAreaByMapSec(mapSecId, sDexAreas_Kanto, ARRAY_COUNT(sDexAreas_Kanto), &tableIndex, &dexArea)) { - if (dexAreaSubspriteIdx != 0) - { - SetAreaSubsprite(areaCount++, dexAreaSubspriteIdx, subsprites); - } + if (dexArea != DEX_AREA_NONE) + GetAreaMarkerSubsprite(areaCount++, dexArea, subsprites); } - for (j = 0; j < NELEMS(sSeviiDexAreas); j++) + + for (j = 0; j < ARRAY_COUNT(sSeviiDexAreas); j++) { if ((seviiAreas >> j) & 1) { - dexAreaEntryLUTidx = 0; - while (TryGetMapSecPokedexAreaEntry(mapSecId, sSeviiDexAreas[j].lut, sSeviiDexAreas[j].count, &dexAreaEntryLUTidx, &dexAreaSubspriteIdx)) + // Search for all dex areas associated with this MAPSEC in this unlocked Sevii Island + tableIndex = 0; + while (FindDexAreaByMapSec(mapSecId, sSeviiDexAreas[j].table, sSeviiDexAreas[j].count, &tableIndex, &dexArea)) { - if (dexAreaSubspriteIdx != 0) - { - SetAreaSubsprite(areaCount++, dexAreaSubspriteIdx, subsprites); - } + if (dexArea != DEX_AREA_NONE) + GetAreaMarkerSubsprite(areaCount++, dexArea, subsprites); } } } @@ -224,7 +223,7 @@ s32 BuildPokedexAreaSubspriteBuffer(u16 species, struct Subsprite * subsprites) static s32 GetRoamerIndex(u16 species) { s32 i; - for (i = 0; i < NELEMS(sRoamerPairs); i++) + for (i = 0; i < ARRAY_COUNT(sRoamerPairs); i++) { if (sRoamerPairs[i].roamer == species) return i; @@ -233,46 +232,54 @@ static s32 GetRoamerIndex(u16 species) return -1; } -static s32 CountRoamerNests(u16 species, struct Subsprite * subsprites) +static s32 GetRoamerPokedexAreaMarkers(u16 species, struct Subsprite * subsprites) { - u16 roamerLocation; + u16 mapSecId; s32 roamerIdx; - u16 dexAreaSubspriteIdx; - s32 dexAreaEntryLUTidx; + u16 dexArea; + s32 tableIndex; + // Make sure that this is a roamer species, and that it corresponds to the player's starter. roamerIdx = GetRoamerIndex(species); if (roamerIdx < 0) return 0; if (sRoamerPairs[roamerIdx].starter != GetStarterSpecies()) return 0; - roamerLocation = GetRoamerLocationMapSectionId(); - dexAreaEntryLUTidx = 0; - if (TryGetMapSecPokedexAreaEntry(roamerLocation, sDexAreas_Kanto, 55, &dexAreaEntryLUTidx, &dexAreaSubspriteIdx)) + + mapSecId = GetRoamerLocationMapSectionId(); + tableIndex = 0; + if (FindDexAreaByMapSec(mapSecId, sDexAreas_Kanto, ARRAY_COUNT(sDexAreas_Kanto), &tableIndex, &dexArea)) { - if (dexAreaSubspriteIdx != 0) + if (dexArea != DEX_AREA_NONE) { - SetAreaSubsprite(0, dexAreaSubspriteIdx, subsprites); + GetAreaMarkerSubsprite(0, dexArea, subsprites); return 1; } } return 0; } -static bool32 PokemonInAnyEncounterTableInMap(const struct WildPokemonHeader * data, s32 species) +static bool32 IsSpeciesOnMap(const struct WildPokemonHeader * data, s32 species) { - if (PokemonInEncounterTable(data->landMonsInfo, species, 12)) + if (IsSpeciesInEncounterTable(data->landMonsInfo, species, LAND_WILD_COUNT)) return TRUE; - if (PokemonInEncounterTable(data->waterMonsInfo, species, 5)) + if (IsSpeciesInEncounterTable(data->waterMonsInfo, species, WATER_WILD_COUNT)) return TRUE; - if (PokemonInEncounterTable(data->fishingMonsInfo, species, 12)) // 10 +// When searching the fishing encounters, this incorrectly uses the size of the land encounters. +// As a result it's reading out of bounds of the fishing encounters tables. +#ifdef BUGFIX + if (IsSpeciesInEncounterTable(data->fishingMonsInfo, species, FISH_WILD_COUNT)) +#else + if (IsSpeciesInEncounterTable(data->fishingMonsInfo, species, LAND_WILD_COUNT)) +#endif return TRUE; - if (PokemonInEncounterTable(data->rockSmashMonsInfo, species, 5)) + if (IsSpeciesInEncounterTable(data->rockSmashMonsInfo, species, ROCK_WILD_COUNT)) return TRUE; return FALSE; } -static bool32 PokemonInEncounterTable(const struct WildPokemonInfo * info, s32 species, s32 count) +static bool32 IsSpeciesInEncounterTable(const struct WildPokemonInfo * info, s32 species, s32 count) { s32 i; if (info != NULL) @@ -291,15 +298,18 @@ static u16 GetMapSecIdFromWildMonHeader(const struct WildPokemonHeader * header) return Overworld_GetMapHeaderByGroupAndId(header->mapGroup, header->mapNum)->regionMapSectionId; } -static bool32 TryGetMapSecPokedexAreaEntry(u16 mapSecId, const u16 (*lut)[2], s32 count, s32 * lutIdx_p, u16 * tableIdx_p) +// Search a MAPSEC -> DEX_AREA table for the given mapsec. +// Assigns the DEX_AREA (if found) to 'dexArea', and the first unread table index to 'index'. +// Returns TRUE if DEX_AREA was found, FALSE otherwise. +static bool32 FindDexAreaByMapSec(u16 mapSecId, const u16 (*table)[2], s32 count, s32 * index, u16 * dexArea) { s32 i; - for (i = *lutIdx_p; i < count; i++) + for (i = *index; i < count; i++) { - if (lut[i][0] == mapSecId) + if (table[i][0] == mapSecId) { - *tableIdx_p = lut[i][1]; - *lutIdx_p = i + 1; + *dexArea = table[i][1]; + *index = i + 1; return TRUE; } } From b79736aec895730facb18c9779b968bb2f19ca96 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 21 Nov 2022 13:44:14 -0500 Subject: [PATCH 31/42] Fix Route 25 marker coords --- src/pokedex_area_markers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokedex_area_markers.c b/src/pokedex_area_markers.c index 6ca1090c9..b98943b06 100644 --- a/src/pokedex_area_markers.c +++ b/src/pokedex_area_markers.c @@ -136,7 +136,7 @@ static const s8 sAreaMarkers[][4] = { [DEX_AREA_ROUTE_22] = { MARKER_SMALL_H, 40, 28 }, [DEX_AREA_ROUTE_23] = { MARKER_MED_V, 38, 4 }, [DEX_AREA_ROUTE_24] = { MARKER_CIRCULAR, 92, 4 }, - [DEX_AREA_ROUTE_25] = { MARKER_MED_H, 90, 254 }, + [DEX_AREA_ROUTE_25] = { MARKER_MED_H, 90, -2 }, [DEX_AREA_VIRIDIAN_FOREST] = { MARKER_CIRCULAR, 51, 20 }, [DEX_AREA_DIGLETTS_CAVE] = { MARKER_SMALL_H, 61, 18 }, [DEX_AREA_MT_MOON] = { MARKER_CIRCULAR, 72, 8 }, From af6837c093c7fbd9eeda74e64fa1e6b24e4a8c2d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 19 Nov 2022 21:49:50 -0500 Subject: [PATCH 32/42] Sync mystery gift server, client, scripts --- include/link_rfu.h | 2 +- include/mystery_gift.h | 4 +- include/mystery_gift_client.h | 91 ++++++++ include/mystery_gift_link.h | 50 +++++ include/mystery_gift_server.h | 170 +++++++------- src/mystery_gift.c | 4 +- src/mystery_gift_client.c | 359 +++++++++++++++--------------- src/mystery_gift_menu.c | 57 ++--- src/mystery_gift_scripts.c | 280 +++++++++++------------ src/mystery_gift_server.c | 406 +++++++++++++++++----------------- src/union_room_message.c | 25 ++- 11 files changed, 800 insertions(+), 648 deletions(-) create mode 100644 include/mystery_gift_client.h create mode 100644 include/mystery_gift_link.h diff --git a/include/link_rfu.h b/include/link_rfu.h index 65d1cf6dd..9610a9682 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -325,6 +325,6 @@ void SetUnionRoomChatPlayerData(u32 numPlayers); void ClearRecvCommands(void); #include "mystery_gift_server.h" -extern const struct mevent_server_cmd gServerScript_ClientCanceledCard[]; +extern const struct MysteryGiftServerCmd gServerScript_ClientCanceledCard[]; #endif //GUARD_LINK_RFU_H diff --git a/include/mystery_gift.h b/include/mystery_gift.h index a8ec84f86..a59b60ec8 100644 --- a/include/mystery_gift.h +++ b/include/mystery_gift.h @@ -79,8 +79,8 @@ void DisableWonderCardSending(struct WonderCard * card); bool32 MysteryGift_TrySaveStamp(const u16 * stamp); void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData * data); bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData * data); -u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, void *unused); -u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, void *unused); +u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, const void *unused); +u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, const void *unused); bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData * data, const u16 * words); u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData * data, u32 stat); bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata); diff --git a/include/mystery_gift_client.h b/include/mystery_gift_client.h new file mode 100644 index 000000000..c7817d161 --- /dev/null +++ b/include/mystery_gift_client.h @@ -0,0 +1,91 @@ +#ifndef GUARD_MYSTERY_GIFT_CLIENT_H +#define GUARD_MYSTERY_GIFT_CLIENT_H + +#include "mystery_gift_link.h" + +// Return values for client functions called by MysteryGiftClient_Run +enum { + CLI_RET_INIT, + CLI_RET_ACTIVE, + CLI_RET_YES_NO, + CLI_RET_PRINT_MSG, + CLI_RET_ASK_TOSS, + CLI_RET_COPY_MSG, + CLI_RET_END, +}; + +// IDs for client script instructions +enum { + CLI_NONE, + CLI_RETURN, + CLI_RECV, + CLI_SEND_LOADED, + CLI_COPY_RECV, + CLI_YES_NO, + CLI_COPY_RECV_IF_N, + CLI_COPY_RECV_IF, + CLI_LOAD_GAME_DATA, + CLI_SAVE_NEWS, + CLI_SAVE_CARD, + CLI_PRINT_MSG, + CLI_COPY_MSG, + CLI_ASK_TOSS, + CLI_LOAD_TOSS_RESPONSE, + CLI_RUN_MEVENT_SCRIPT, + CLI_SAVE_STAMP, + CLI_SAVE_RAM_SCRIPT, + CLI_RECV_EREADER_TRAINER, + CLI_SEND_STAT, + CLI_SEND_READY_END, + CLI_RUN_BUFFER_SCRIPT, +}; + +// IDs for client messages when ending a script. +// Given as the parameter to CLI_RETURN, and resolved to text in GetClientResultMessage +enum { + CLI_MSG_NOTHING_SENT, + CLI_MSG_RECORD_UPLOADED, + CLI_MSG_CARD_RECEIVED, + CLI_MSG_NEWS_RECEIVED, + CLI_MSG_STAMP_RECEIVED, + CLI_MSG_HAD_CARD, + CLI_MSG_HAD_STAMP, + CLI_MSG_HAD_NEWS, + CLI_MSG_NO_ROOM_STAMPS, + CLI_MSG_COMM_CANCELED, + CLI_MSG_CANT_ACCEPT, + CLI_MSG_COMM_ERROR, + CLI_MSG_TRAINER_RECEIVED, + CLI_MSG_BUFFER_SUCCESS, + CLI_MSG_BUFFER_FAILURE, +}; + +#define CLIENT_MAX_MSG_SIZE 64 + +struct MysteryGiftClientCmd +{ + u32 instr; + u32 parameter; +}; + +struct MysteryGiftClient +{ + u32 unused; + u32 param; + u32 funcId; + u32 funcState; + u32 cmdidx; + void *sendBuffer; + void *recvBuffer; + struct MysteryGiftClientCmd * script; + void *msg; + struct MysteryGiftLink link; +}; + +void MysteryGiftClient_Create(void); +u32 MysteryGiftClient_Run(u16 * endVal); +void MysteryGiftClient_AdvanceState(void); +void * MysteryGiftClient_GetMsg(void); +void MysteryGiftClient_SetParam(u32 value); + +#endif //GUARD_MYSTERY_GIFT_CLIENT_H diff --git a/include/mystery_gift_link.h b/include/mystery_gift_link.h new file mode 100644 index 000000000..8f36d9108 --- /dev/null +++ b/include/mystery_gift_link.h @@ -0,0 +1,50 @@ +#ifndef GUARD_MYSTERY_GIFT_LINK_H +#define GUARD_MYSTERY_GIFT_LINK_H + +#define MG_LINK_BUFFER_SIZE 0x400 +#define ME_SEND_BUF_SIZE MG_LINK_BUFFER_SIZE + +// Send/receive ids for the Client/Server to make sure +// they're sending/receiving the same thing +enum { + MG_LINKID_CLIENT_SCRIPT = 16, + MG_LINKID_GAME_DATA, + MG_LINKID_GAME_STAT, + MG_LINKID_RESPONSE, + MG_LINKID_READY_END, + MG_LINKID_DYNAMIC_MSG, + MG_LINKID_CARD, + MG_LINKID_NEWS, + MG_LINKID_STAMP, + MG_LINKID_RAM_SCRIPT, + MG_LINKID_EREADER_TRAINER, + MG_LINKID_UNK_1, + MG_LINKID_UNK_2, +}; + +struct MysteryGiftLink +{ + s32 state; + u8 sendPlayerId; + u8 recvPlayerId; + u16 recvIdent; + u16 recvCounter; + u16 recvCRC; + u16 recvSize; + u16 sendIdent; + u16 sendCounter; + u16 sendCRC; + u16 sendSize; + void * recvBuffer; + const void * sendBuffer; + u32 (*recvFunc)(struct MysteryGiftLink *); + u32 (*sendFunc)(struct MysteryGiftLink *); +}; + +void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId); +void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void * src, u32 size); +bool32 MysteryGiftLink_Recv(struct MysteryGiftLink * link); +bool32 MysteryGiftLink_Send(struct MysteryGiftLink * link); +void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void * dest); + +#endif //GUARD_MYSTERY_GIFT_LINK_H diff --git a/include/mystery_gift_server.h b/include/mystery_gift_server.h index 7c71ed856..64bb9e9bf 100644 --- a/include/mystery_gift_server.h +++ b/include/mystery_gift_server.h @@ -2,121 +2,103 @@ #define GUARD_MYSTERY_GIFT_SERVER_H #include "global.h" +#include "mystery_gift_link.h" -#define ME_SEND_BUF_SIZE 0x400 - -struct MysteryGiftLink -{ - s32 state; - u8 sendPlayerId; - u8 recvPlayerId; - u16 recvIdent; - u16 recvCounter; - u16 recvCRC; - u16 recvSize; - u16 sendIdent; - u16 sendCounter; - u16 sendCRC; - u16 sendSize; - void *recvBuffer; - const void *sendBuffer; - u32 (*recvFunc)(struct MysteryGiftLink *); - u32 (*sendFunc)(struct MysteryGiftLink *); +// Return values for Server_* functions. +// Other than SVR_RET_END, effectively useless (not checked for). +enum { + SVR_RET_INIT, + SVR_RET_ACTIVE, + SVR_RET_UNUSED, + SVR_RET_END }; -struct mevent_client_cmd -{ - u32 instr; - u32 parameter; +// IDs for server script instructions +enum { + SVR_RETURN, + SVR_SEND, + SVR_RECV, + SVR_GOTO, + SVR_GOTO_IF_EQ, + SVR_COPY_GAME_DATA, + SVR_CHECK_GAME_DATA, // In Emerald, this was separated into SVR_CHECK_GAME_DATA_CARD and SVR_CHECK_GAME_DATA_NEWS + SVR_CHECK_EXISTING_CARD, + SVR_READ_RESPONSE, + SVR_CHECK_EXISTING_STAMPS, + SVR_GET_CARD_STAT, + SVR_CHECK_QUESTIONNAIRE, + SVR_COMPARE, + SVR_LOAD_CARD, + SVR_LOAD_NEWS, + SVR_LOAD_RAM_SCRIPT, + SVR_LOAD_STAMP, + SVR_LOAD_UNK_2, + SVR_LOAD_CLIENT_SCRIPT, + SVR_LOAD_EREADER_TRAINER, + SVR_LOAD_MSG, + SVR_COPY_STAMP, + SVR_COPY_CARD, + SVR_COPY_NEWS, + SVR_SET_RAM_SCRIPT, + SVR_SET_CLIENT_SCRIPT, + SVR_COPY_SAVED_CARD, + SVR_COPY_SAVED_NEWS, + SVR_COPY_SAVED_RAM_SCRIPT, + SVR_LOAD_UNK_1, }; -// Client commands -#define CLI_RETURN(x) {.instr = 1, .parameter = x} -#define CLI_RECEIVE(x) {.instr = 2, .parameter = x} -#define CLI_WAITSND {.instr = 3, .parameter = 0} -#define CLI_JUMPBUF {.instr = 4, .parameter = 0} -#define CLI_SNDHEAD {.instr = 8, .parameter = 0} -#define CLI_VLDNEWS {.instr = 9, .parameter = 0} -#define CLI_RECVSAV {.instr = 10, .parameter = 0} -#define CLI_RECVBUF {.instr = 12, .parameter = 0} -#define CLI_REQWORD {.instr = 13, .parameter = 0} -#define CLI_SNDWORD {.instr = 14, .parameter = 0} -#define CLI_RECVMON {.instr = 16, .parameter = 0} -#define CLI_RECVRAM {.instr = 17, .parameter = 0} -#define CLI_SENDALL {.instr = 20, .parameter = 0} +// Create arguments for SVR_LOAD_CLIENT_SCRIPT or SVR_LOAD_MSG +// (a script/text size and pointer to send to the client) +#define PTR_ARG(pointer) .flag = sizeof(pointer), .parameter = pointer -struct mevent_client -{ - u32 unk_00; - u32 param; - u32 mainseqno; - u32 flag; - u32 cmdidx; - void *sendBuffer; - void *recvBuffer; - struct mevent_client_cmd * cmdBuffer; - void *buffer; - struct MysteryGiftLink manager; +// IDs for server messages when ending a script. +// Given as the parameter to SVR_RETURN, and resolved to text in GetServerResultMessage +enum { + SVR_MSG_NOTHING_SENT, + SVR_MSG_RECORD_UPLOADED, + SVR_MSG_CARD_SENT, + SVR_MSG_NEWS_SENT, + SVR_MSG_STAMP_SENT, + SVR_MSG_HAS_CARD, + SVR_MSG_HAS_STAMP, + SVR_MSG_HAS_NEWS, + SVR_MSG_NO_ROOM_STAMPS, + SVR_MSG_CLIENT_CANCELED, + SVR_MSG_CANT_SEND_GIFT_1, + SVR_MSG_COMM_ERROR, + SVR_MSG_GIFT_SENT_1, + SVR_MSG_GIFT_SENT_2, + SVR_MSG_CANT_SEND_GIFT_2, }; -struct mevent_server_cmd +struct MysteryGiftServerCmd { u32 instr; bool32 flag; - void *parameter; + const void *parameter; }; -// Server commands -#define SRV_RETURN(x) {.instr = 0, .flag = x} -#define SRV_WAITSND {.instr = 1} -#define SRV_RECV(x) {.instr = 2, .flag = x} -#define SRV_BRANCH(y) {.instr = 3, .parameter = (void *)y} -#define SRV_BRANCHIF(x, y) {.instr = 4, .flag = x, .parameter = (void *)y} -#define SRV_READ_1442CC {.instr = 5} -#define SRV_VALID_1442CC {.instr = 6} -#define SRV_CHECK_1442CC_14 {.instr = 7} -#define SRV_READWORD {.instr = 8} -#define SRV_SEND_CARD {.instr = 13} -#define SRV_SEND_NEWS {.instr = 14} -#define SRV_BUFFER_SEND {.instr = 15} -#define SRV_SEND(x, y) {.instr = 18, .flag = x, .parameter = (void *)y} -#define SRV_SENDSTR(x, y) {.instr = 20, .flag = x, .parameter = (void *)y} -#define SRV_BUFFER_CARD {.instr = 26} -#define SRV_BUFFER_NEWS {.instr = 27} -#define SRV_RAM_SCRIPT_IF_VALID {.instr = 28} - -struct mevent_srv_common +struct MysteryGiftServer { - u32 unk_00; + u32 unused; u32 param; - u32 mainseqno; + u32 funcId; u32 cmdidx; - const struct mevent_server_cmd * cmdBuffer; + const struct MysteryGiftServerCmd * script; void *recvBuffer; struct WonderCard * card; struct WonderNews * news; - struct MysteryGiftLinkGameData * mevent_unk1442cc; - void *sendBuffer1; - u32 sendBuffer1Size; - void *sendBuffer2; - u32 sendBuffer2Size; - u32 sendWord; + struct MysteryGiftLinkGameData * linkGameData; + const void *ramScript; + u32 ramScriptSize; + const void *clientScript; + u32 clientScriptSize; + u32 stamp; struct MysteryGiftLink manager; }; -u32 MysteryGiftLink_Recv(struct MysteryGiftLink * link); -u32 MysteryGiftLink_Send(struct MysteryGiftLink * link); -void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId); -void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void *src, u32 size); -void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void *dest); - -void mevent_client_do_init(void); -u32 mevent_client_do_exec(u16 * a0); -void mevent_client_inc_flag(void); -void *mevent_client_get_buffer(void); -void mevent_client_set_param(u32 a0); -void mevent_srv_init_wnews(void); -void mevent_srv_new_wcard(void); -u32 mevent_srv_common_do_exec(u16 * a0); +void MysterGiftServer_CreateForNews(void); +void MysterGiftServer_CreateForCard(void); +u32 MysterGiftServer_Run(u16 * endVal); #endif //GUARD_MYSTERY_GIFT_SERVER_H diff --git a/src/mystery_gift.c b/src/mystery_gift.c index fa164b924..8db1ee5e0 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -810,7 +810,7 @@ bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData * d return TRUE; } -u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, void *unused) +u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, const void *unused) { // Has a Wonder Card already? if (data->flagId == 0) @@ -824,7 +824,7 @@ u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLin return 2; } -u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, void *unused) +u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, const void *unused) { s32 stampsMissing = data->maxStamps - GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps); diff --git a/src/mystery_gift_client.c b/src/mystery_gift_client.c index 5844f80e2..dc1830b60 100644 --- a/src/mystery_gift_client.c +++ b/src/mystery_gift_client.c @@ -6,285 +6,296 @@ #include "battle_tower.h" #include "mystery_event_script.h" #include "mystery_gift.h" +#include "mystery_gift_client.h" #include "mystery_gift_server.h" -static EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL; +enum { + FUNC_INIT, + FUNC_DONE, + FUNC_RECV, + FUNC_SEND, + FUNC_RUN, + FUNC_WAIT, + FUNC_RUN_MEVENT, + FUNC_RUN_BUFFER, +}; -static void mevent_client_init(struct mevent_client *, u32, u32); -static u32 mevent_client_exec(struct mevent_client *); -static void mevent_client_free_resources(struct mevent_client *); +static EWRAM_DATA struct MysteryGiftClient * sClient = NULL; -extern const struct mevent_client_cmd gMEventClientScript_InitialListen[]; +static void MysteryGiftClient_Init(struct MysteryGiftClient *, u32, u32); +static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient *); +static void MysteryGiftClient_Free(struct MysteryGiftClient *); -void mevent_client_do_init(void) +extern const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[]; + +void MysteryGiftClient_Create(void) { - s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client)); - mevent_client_init(s_mevent_client_ptr, 1, 0); + sClient = AllocZeroed(sizeof(*sClient)); + MysteryGiftClient_Init(sClient, 1, 0); } -u32 mevent_client_do_exec(u16 * a0) +u32 MysteryGiftClient_Run(u16 * endVal) { u32 result; - if (s_mevent_client_ptr == NULL) - return 6; - result = mevent_client_exec(s_mevent_client_ptr); - if (result == 6) + if (sClient == NULL) + return CLI_RET_END; + result = MysteryGiftClient_CallFunc(sClient); + if (result == CLI_RET_END) { - *a0 = s_mevent_client_ptr->param; - mevent_client_free_resources(s_mevent_client_ptr); - Free(s_mevent_client_ptr); - s_mevent_client_ptr = NULL; + *endVal = sClient->param; + MysteryGiftClient_Free(sClient); + FREE_AND_SET_NULL(sClient); } return result; } -void mevent_client_inc_flag(void) +void MysteryGiftClient_AdvanceState(void) { - s_mevent_client_ptr->flag++; + sClient->funcState++; } -void *mevent_client_get_buffer(void) +void *MysteryGiftClient_GetMsg(void) { - return s_mevent_client_ptr->buffer; + return sClient->msg; } -void mevent_client_set_param(u32 a0) +void MysteryGiftClient_SetParam(u32 val) { - s_mevent_client_ptr->param = a0; + sClient->param = val; } -static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo) +static void MysteryGiftClient_Init(struct MysteryGiftClient * client, u32 sendPlayerId, u32 recvPlayerId) { - svr->unk_00 = 0; - svr->mainseqno = 0; - svr->flag = 0; - svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->buffer = AllocZeroed(0x40); - MysteryGiftLink_Init(&svr->manager, sendPlayerNo, recvPlayerNo); + client->unused = 0; + client->funcId = FUNC_INIT; + client->funcState = 0; + client->sendBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->script = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->msg = AllocZeroed(CLIENT_MAX_MSG_SIZE); + MysteryGiftLink_Init(&client->link, sendPlayerId, recvPlayerId); } -static void mevent_client_free_resources(struct mevent_client * svr) +static void MysteryGiftClient_Free(struct MysteryGiftClient * client) { - Free(svr->sendBuffer); - Free(svr->recvBuffer); - Free(svr->cmdBuffer); - Free(svr->buffer); + Free(client->sendBuffer); + Free(client->recvBuffer); + Free(client->script); + Free(client->msg); } -static void mevent_client_jmp_buffer(struct mevent_client * svr) +static void MysteryGiftClient_CopyRecvScript(struct MysteryGiftClient * client) { - memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; + memcpy(client->script, client->recvBuffer, MG_LINK_BUFFER_SIZE); + client->cmdidx = 0; } -static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word) +static void MysteryGiftClient_InitSendWord(struct MysteryGiftClient * client, u32 ident, u32 word) { - CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); - *(u32 *)svr->sendBuffer = word; - MysteryGiftLink_InitSend(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); + CpuFill32(0, client->sendBuffer, MG_LINK_BUFFER_SIZE); + *(u32 *)client->sendBuffer = word; + MysteryGiftLink_InitSend(&client->link, ident, client->sendBuffer, sizeof(word)); } -static u32 client_mainseq_0(struct mevent_client * svr) +static u32 Client_Init(struct MysteryGiftClient * client) { // init - memcpy(svr->cmdBuffer, gMEventClientScript_InitialListen, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; - svr->mainseqno = 4; - svr->flag = 0; - return 0; + memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE); + client->cmdidx = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; + return CLI_RET_INIT; } -static u32 client_mainseq_1(struct mevent_client * svr) +static u32 Client_Done(struct MysteryGiftClient * client) { - // done - return 6; + return CLI_RET_END; } -static u32 client_mainseq_2(struct mevent_client * svr) +static u32 Client_Recv(struct MysteryGiftClient * client) { - // do recv - if (MysteryGiftLink_Recv(&svr->manager)) + if (MysteryGiftLink_Recv(&client->link)) { - svr->mainseqno = 4; - svr->flag = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; } - return 1; + return CLI_RET_ACTIVE; } -static u32 client_mainseq_3(struct mevent_client * svr) +static u32 Client_Send(struct MysteryGiftClient * client) { - // do send - if (MysteryGiftLink_Send(&svr->manager)) + if (MysteryGiftLink_Send(&client->link)) { - svr->mainseqno = 4; - svr->flag = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; } - return 1; + return CLI_RET_ACTIVE; } -static u32 client_mainseq_4(struct mevent_client * svr) +static u32 Client_Run(struct MysteryGiftClient * client) { // process command - struct mevent_client_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - ++svr->cmdidx; + struct MysteryGiftClientCmd * cmd = &client->script[client->cmdidx]; + client->cmdidx++; switch (cmd->instr) { - case 0: + case CLI_NONE: break; - case 1: - svr->param = cmd->parameter; - svr->mainseqno = 1; - svr->flag = 0; + case CLI_RETURN: + client->param = cmd->parameter; // Set for endVal in MysteryGiftClient_Run + client->funcId = FUNC_DONE; + client->funcState = 0; break; - case 2: - MysteryGiftLink_InitRecv(&svr->manager, cmd->parameter, svr->recvBuffer); - svr->mainseqno = 2; - svr->flag = 0; + case CLI_RECV: + MysteryGiftLink_InitRecv(&client->link, cmd->parameter, client->recvBuffer); + client->funcId = FUNC_RECV; + client->funcState = 0; break; - case 3: - svr->mainseqno = 3; - svr->flag = 0; + case CLI_SEND_LOADED: + // Send without a MysteryGiftLink_InitSend + // Sends whatever has been loaded already + client->funcId = FUNC_SEND; + client->funcState = 0; break; - case 20: - MysteryGiftLink_InitSend(&svr->manager, 0x14, svr->sendBuffer, 0); - svr->mainseqno = 3; - svr->flag = 0; + case CLI_SEND_READY_END: + MysteryGiftLink_InitSend(&client->link, MG_LINKID_READY_END, client->sendBuffer, 0); + client->funcId = FUNC_SEND; + client->funcState = 0; break; - case 19: - mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter)); - svr->mainseqno = 3; - svr->flag = 0; + case CLI_SEND_STAT: + MysteryGiftClient_InitSendWord(client, MG_LINKID_GAME_STAT, GetGameStat(cmd->parameter)); + client->funcId = FUNC_SEND; + client->funcState = 0; break; - case 6: - if (svr->param == 0) - mevent_client_jmp_buffer(svr); + case CLI_COPY_RECV_IF_N: + if (client->param == FALSE) + MysteryGiftClient_CopyRecvScript(client); break; - case 7: - if (svr->param == 1) - mevent_client_jmp_buffer(svr); + case CLI_COPY_RECV_IF: + if (client->param == TRUE) + MysteryGiftClient_CopyRecvScript(client); break; - case 4: - mevent_client_jmp_buffer(svr); + case CLI_COPY_RECV: + MysteryGiftClient_CopyRecvScript(client); break; - case 5: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 2; - case 11: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 3; - case 12: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 5; - case 13: - svr->mainseqno = 5; - svr->flag = 0; - return 4; - case 8: - MysteryGift_LoadLinkGameData(svr->sendBuffer); - MysteryGiftLink_InitSend(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); + case CLI_YES_NO: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_YES_NO; + case CLI_PRINT_MSG: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_PRINT_MSG; + case CLI_COPY_MSG: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_COPY_MSG; + case CLI_ASK_TOSS: + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_ASK_TOSS; + case CLI_LOAD_GAME_DATA: + MysteryGift_LoadLinkGameData(client->sendBuffer); + MysteryGiftLink_InitSend(&client->link, MG_LINKID_GAME_DATA, client->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); break; - case 14: - mevent_client_send_word(svr, 0x13, svr->param); + case CLI_LOAD_TOSS_RESPONSE: + // param here is set by MG_STATE_CLIENT_ASK_TOSS or MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, client->param); break; - case 10: - SaveWonderCard(svr->recvBuffer); + case CLI_SAVE_CARD: + SaveWonderCard(client->recvBuffer); break; - case 9: - if (!IsWonderNewsSameAsSaved(svr->recvBuffer)) + case CLI_SAVE_NEWS: + if (!IsWonderNewsSameAsSaved(client->recvBuffer)) { - SaveWonderNews(svr->recvBuffer); - mevent_client_send_word(svr, 0x13, 0); + SaveWonderNews(client->recvBuffer); + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, FALSE); } else - // Other trainer already has news - mevent_client_send_word(svr, 0x13, 1); + { + // Wonder News has already been saved (or is invalid). + // Prepare a signal to indicate it was not saved. + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, TRUE); + } break; - case 15: - svr->mainseqno = 6; - svr->flag = 0; + case CLI_RUN_MEVENT_SCRIPT: + client->funcId = FUNC_RUN_MEVENT; + client->funcState = 0; break; - case 16: - MysteryGift_TrySaveStamp(svr->recvBuffer); + case CLI_SAVE_STAMP: + MysteryGift_TrySaveStamp(client->recvBuffer); break; - case 17: - InitRamScript_NoObjectEvent(svr->recvBuffer, 1000); + case CLI_SAVE_RAM_SCRIPT: + InitRamScript_NoObjectEvent(client->recvBuffer, sizeof(struct RamScriptData)); break; - case 18: - memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, svr->recvBuffer, sizeof(struct BattleTowerEReaderTrainer)); + case CLI_RECV_EREADER_TRAINER: + memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->battleTower.ereaderTrainer)); ValidateEReaderTrainer(); break; - case 21: - memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); - svr->mainseqno = 7; - svr->flag = 0; + case CLI_RUN_BUFFER_SCRIPT: + memcpy(gDecompressionBuffer, client->recvBuffer, MG_LINK_BUFFER_SIZE); + client->funcId = FUNC_RUN_BUFFER; + client->funcState = 0; break; } - return 1; + return CLI_RET_ACTIVE; } -static u32 client_mainseq_5(struct mevent_client * svr) +static u32 Client_Wait(struct MysteryGiftClient * client) { - // wait flag - if (svr->flag) + if (client->funcState) { - svr->mainseqno = 4; - svr->flag = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; } - return 1; + return CLI_RET_ACTIVE; } -static u32 client_mainseq_6(struct mevent_client * svr) +static u32 Client_RunMysteryEventScript(struct MysteryGiftClient * client) { - // Run mevent buffer script - switch (svr->flag) + switch (client->funcState) { case 0: - MEventScript_InitContext(svr->recvBuffer); - ++svr->flag; + MEventScript_InitContext(client->recvBuffer); + client->funcState++; break; case 1: - if (!MEventScript_Run(&svr->param)) + if (!MEventScript_Run(&client->param)) { - svr->mainseqno = 4; - svr->flag = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; } break; } - return 1; + return CLI_RET_ACTIVE; } -static u32 client_mainseq_7(struct mevent_client * svr) +static u32 Client_RunBufferScript(struct MysteryGiftClient * client) { - // exec arbitrary code u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; - if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + if (func(&client->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) { - svr->mainseqno = 4; - svr->flag = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; } - return 1; + return CLI_RET_ACTIVE; } -static u32 mevent_client_exec(struct mevent_client * svr) +static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient * client) { - u32 (*funcs[])(struct mevent_client *) = { - client_mainseq_0, - client_mainseq_1, - client_mainseq_2, - client_mainseq_3, - client_mainseq_4, - client_mainseq_5, - client_mainseq_6, - client_mainseq_7 + u32 (*funcs[])(struct MysteryGiftClient *) = { + [FUNC_INIT] = Client_Init, + [FUNC_DONE] = Client_Done, + [FUNC_RECV] = Client_Recv, + [FUNC_SEND] = Client_Send, + [FUNC_RUN] = Client_Run, + [FUNC_WAIT] = Client_Wait, + [FUNC_RUN_MEVENT] = Client_RunMysteryEventScript, + [FUNC_RUN_BUFFER] = Client_RunBufferScript }; - return funcs[svr->mainseqno](svr); + return funcs[client->funcId](client); } diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index cb8a5bfe9..a06b93ba3 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -14,6 +14,7 @@ #include "link.h" #include "event_data.h" #include "mystery_gift_server.h" +#include "mystery_gift_client.h" #include "wonder_news.h" #include "help_system.h" #include "strings.h" @@ -1222,7 +1223,7 @@ void task00_mystery_gift(u8 taskId) { ClearScreenInBg0(TRUE); data->state = 7; - mevent_client_do_init(); + MysteryGiftClient_Create(); } else if (gSpecialVar_Result == 5) { @@ -1235,7 +1236,7 @@ void task00_mystery_gift(u8 taskId) data->state = 8; break; case 8: - switch (mevent_client_do_exec(&data->curPromptWindowId)) + switch (MysteryGiftClient_Run(&data->curPromptWindowId)) { case 6: // done Rfu_SetCloseLinkCallback(); @@ -1243,8 +1244,8 @@ void task00_mystery_gift(u8 taskId) data->state = 13; break; case 5: - memcpy(data->buffer, mevent_client_get_buffer(), 0x40); - mevent_client_inc_flag(); + memcpy(data->buffer, MysteryGiftClient_GetMsg(), 0x40); + MysteryGiftClient_AdvanceState(); break; case 3: data->state = 10; @@ -1259,30 +1260,30 @@ void task00_mystery_gift(u8 taskId) } break; case 9: - flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()); + flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, MysteryGiftClient_GetMsg()); switch (flag) { case 0: - mevent_client_set_param(0); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(0); + MysteryGiftClient_AdvanceState(); data->state = 7; break; case 1: - mevent_client_set_param(1); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(1); + MysteryGiftClient_AdvanceState(); data->state = 7; break; case -1u: - mevent_client_set_param(1); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(1); + MysteryGiftClient_AdvanceState(); data->state = 7; break; } break; case 10: - if (PrintMysteryGiftMenuMessage(&data->textState, mevent_client_get_buffer())) + if (PrintMysteryGiftMenuMessage(&data->textState, MysteryGiftClient_GetMsg())) { - mevent_client_inc_flag(); + MysteryGiftClient_AdvanceState(); data->state = 7; } break; @@ -1297,19 +1298,19 @@ void task00_mystery_gift(u8 taskId) } else { - mevent_client_set_param(0); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(0); + MysteryGiftClient_AdvanceState(); data->state = 7; } break; case 1: - mevent_client_set_param(1); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(1); + MysteryGiftClient_AdvanceState(); data->state = 7; break; case -1u: - mevent_client_set_param(1); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(1); + MysteryGiftClient_AdvanceState(); data->state = 7; break; } @@ -1319,18 +1320,18 @@ void task00_mystery_gift(u8 taskId) switch (flag) { case 0: - mevent_client_set_param(0); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(0); + MysteryGiftClient_AdvanceState(); data->state = 7; break; case 1: - mevent_client_set_param(1); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(1); + MysteryGiftClient_AdvanceState(); data->state = 7; break; case -1u: - mevent_client_set_param(1); - mevent_client_inc_flag(); + MysteryGiftClient_SetParam(1); + MysteryGiftClient_AdvanceState(); data->state = 7; break; } @@ -1567,17 +1568,17 @@ void task00_mystery_gift(u8 taskId) if (data->IsCardOrNews == 0) { AddTextPrinterToWindow1(gText_SendingWonderCard); - mevent_srv_new_wcard(); + MysterGiftServer_CreateForCard(); } else { AddTextPrinterToWindow1(gText_SendingWonderNews); - mevent_srv_init_wnews(); + MysterGiftServer_CreateForNews(); } data->state = 32; break; case 32: - if (mevent_srv_common_do_exec(&data->curPromptWindowId) == 3) + if (MysterGiftServer_Run(&data->curPromptWindowId) == 3) { data->prevPromptWindowId = data->curPromptWindowId; data->state = 33; diff --git a/src/mystery_gift_scripts.c b/src/mystery_gift_scripts.c index b99c16405..0af0f2346 100644 --- a/src/mystery_gift_scripts.c +++ b/src/mystery_gift_scripts.c @@ -1,192 +1,198 @@ #include "global.h" #include "mystery_gift_server.h" +#include "mystery_gift_client.h" +#include "constants/mystery_gift.h" -extern const struct mevent_server_cmd gServerScript_ClientCanceledCard[]; +extern const struct MysteryGiftServerCmd gServerScript_ClientCanceledCard[]; // Unreferenced -const u8 gUnknown_84687A0[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?"); +static const u8 sText_CollectedAllStamps[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?"); -/* CLIENT SCRIPTS */ +//================== +// Client scripts +//================== -const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 - CLI_RECEIVE(0x10), - CLI_JUMPBUF +const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[] = { + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} }; -const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { - CLI_SNDHEAD, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF +static const struct MysteryGiftClientCmd sClientScript_SendGameData[] = { + {CLI_LOAD_GAME_DATA}, + {CLI_SEND_LOADED}, + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} }; -const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news - CLI_SENDALL, - CLI_RETURN(0x0a) +static const struct MysteryGiftClientCmd sClientScript_CantAccept[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_CANT_ACCEPT} }; -const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error - CLI_SENDALL, - CLI_RETURN(0x0b) +static const struct MysteryGiftClientCmd sClientScript_CommError[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_COMM_ERROR} }; -const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent - CLI_SENDALL, - CLI_RETURN(0x00) +static const struct MysteryGiftClientCmd sClientScript_NothingSent[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_NOTHING_SENT} }; -const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success - CLI_RECEIVE(0x16), - CLI_RECVSAV, - CLI_RECEIVE(0x19), - CLI_RECVRAM, - CLI_SENDALL, - CLI_RETURN(0x02) +static const struct MysteryGiftClientCmd sClientScript_SaveCard[] = { + {CLI_RECV, MG_LINKID_CARD}, + {CLI_SAVE_CARD}, + {CLI_RECV, MG_LINKID_RAM_SCRIPT}, + {CLI_SAVE_RAM_SCRIPT}, + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_CARD_RECEIVED} }; -const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { - CLI_RECEIVE(0x17), - CLI_VLDNEWS, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF +static const struct MysteryGiftClientCmd sClientScript_SaveNews[] = { + {CLI_RECV, MG_LINKID_NEWS}, + {CLI_SAVE_NEWS}, + {CLI_SEND_LOADED}, // Send whether or not the News was saved (read by sServerScript_SendNews) + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} }; -const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news - CLI_SENDALL, - CLI_RETURN(0x07) +static const struct MysteryGiftClientCmd sClientScript_HadNews[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_HAD_NEWS} }; -const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success - CLI_SENDALL, - CLI_RETURN(0x03) +static const struct MysteryGiftClientCmd sClientScript_NewsReceived[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_NEWS_RECEIVED} }; -const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { - CLI_REQWORD, - CLI_SNDWORD, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF +static const struct MysteryGiftClientCmd sClientScript_AskToss[] = { + {CLI_ASK_TOSS}, + {CLI_LOAD_TOSS_RESPONSE}, + {CLI_SEND_LOADED}, + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} }; -const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled - CLI_SENDALL, - CLI_RETURN(0x09) +static const struct MysteryGiftClientCmd sClientScript_Canceled[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_COMM_CANCELED} }; -const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card - CLI_SENDALL, - CLI_RETURN(0x05) +static const struct MysteryGiftClientCmd sClientScript_HadCard[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_HAD_CARD} }; -const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer - CLI_RECEIVE(0x15), - CLI_RECVBUF, - CLI_SENDALL, - CLI_RETURN(0x0d) +static const struct MysteryGiftClientCmd sClientScript_DynamicSuccess[] = { + {CLI_RECV, MG_LINKID_DYNAMIC_MSG}, + {CLI_COPY_MSG}, + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_BUFFER_SUCCESS} }; -/* SERVER SCRIPTS */ +//================== +// Server scripts +//================== -const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { - SRV_SEND(0x10, gMEventClientScript_UnableToRecv), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x0a) +static const struct MysteryGiftServerCmd sServerScript_CantSend[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_CantAccept)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CANT_SEND_GIFT_1} }; -const struct mevent_server_cmd gUnknown_8468950[] = { - SRV_SEND(0x10, gMEventClientScript_CommError), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x0b) +static const struct MysteryGiftServerCmd sServerScript_CommError[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_CommError)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_COMM_ERROR} }; -const struct mevent_server_cmd gUnknown_8468980[] = { - SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x09) +static const struct MysteryGiftServerCmd sServerScript_ClientCanceledNews[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_Canceled)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CLIENT_CANCELED} }; -const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { - SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x07) +static const struct MysteryGiftServerCmd sServerScript_HasNews[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_HadNews)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_HAS_NEWS} }; -const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { - SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), - SRV_WAITSND, - SRV_SEND_NEWS, - SRV_WAITSND, - SRV_RECV(0x13), - SRV_READWORD, - SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), - SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x03) +static const struct MysteryGiftServerCmd sServerScript_SendNews[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SaveNews)}, + {SVR_SEND}, + {SVR_LOAD_NEWS}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_RESPONSE}, + {SVR_READ_RESPONSE}, + {SVR_GOTO_IF_EQ, TRUE, sServerScript_HasNews}, // Wonder News was not saved + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_NewsReceived)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_NEWS_SENT} }; -const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { - SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), - SRV_WAITSND, - SRV_SEND_CARD, - SRV_WAITSND, - SRV_BUFFER_SEND, - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x02) +static const struct MysteryGiftServerCmd sServerScript_SendCard[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SaveCard)}, + {SVR_SEND}, + {SVR_LOAD_CARD}, + {SVR_SEND}, + {SVR_LOAD_RAM_SCRIPT}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CARD_SENT} }; -const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { - SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), - SRV_WAITSND, - SRV_RECV(0x13), - SRV_READWORD, - SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), - SRV_BRANCH(gServerScript_ClientCanceledCard) +static const struct MysteryGiftServerCmd sServerScript_TossPrompt[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_AskToss)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_RESPONSE}, + {SVR_READ_RESPONSE}, + {SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one + {SVR_GOTO, .parameter = gServerScript_ClientCanceledCard} // Kept old card, cancel new one }; -const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { - SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x05) +static const struct MysteryGiftServerCmd sServerScript_HasCard[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_HadCard)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_HAS_CARD} }; -const struct mevent_server_cmd gUnknown_8468B3C[] = { - SRV_SEND(0x10, gMEventClientScript_NothingSentOver), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x00) +static const struct MysteryGiftServerCmd sServerScript_NothingSent[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_NothingSent)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_NOTHING_SENT} }; -const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { - SRV_BUFFER_NEWS, - SRV_SEND(0x20, gMEventClientScript_Send1442CC), - SRV_WAITSND, - SRV_RECV(0x11), - SRV_READ_1442CC, - SRV_VALID_1442CC, - SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), - SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) +const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[] = { + {SVR_COPY_SAVED_NEWS}, + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SendGameData)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_GAME_DATA}, + {SVR_COPY_GAME_DATA}, + {SVR_CHECK_GAME_DATA}, + {SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend}, + {SVR_GOTO, .parameter = sServerScript_SendNews}, }; -const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { - SRV_BUFFER_CARD, - SRV_RAM_SCRIPT_IF_VALID, - SRV_SEND(0x20, gMEventClientScript_Send1442CC), - SRV_WAITSND, - SRV_RECV(0x11), - SRV_READ_1442CC, - SRV_VALID_1442CC, - SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), - SRV_CHECK_1442CC_14, - SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), - SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), - SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) +const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = { + {SVR_COPY_SAVED_CARD}, + {SVR_COPY_SAVED_RAM_SCRIPT}, + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SendGameData)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_GAME_DATA}, + {SVR_COPY_GAME_DATA}, + {SVR_CHECK_GAME_DATA}, + {SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend}, + {SVR_CHECK_EXISTING_CARD}, + {SVR_GOTO_IF_EQ, HAS_DIFF_CARD, sServerScript_TossPrompt}, + {SVR_GOTO_IF_EQ, HAS_NO_CARD, sServerScript_SendCard}, + {SVR_GOTO, .parameter = sServerScript_HasCard} // HAS_SAME_CARD }; diff --git a/src/mystery_gift_server.c b/src/mystery_gift_server.c index d2f2b2262..9c6868b6e 100644 --- a/src/mystery_gift_server.c +++ b/src/mystery_gift_server.c @@ -4,276 +4,286 @@ #include "mystery_gift.h" #include "mystery_gift_server.h" -EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL; +enum { + FUNC_INIT, + FUNC_DONE, + FUNC_RECV, + FUNC_SEND, + FUNC_RUN, +}; -static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); -static void mevent_srv_free_resources(struct mevent_srv_common *); -static u32 mevent_srv_exec_common(struct mevent_srv_common *); +static EWRAM_DATA struct MysteryGiftServer * sServer = NULL; -extern const struct mevent_server_cmd gMEventSrvScript_SendNews[]; -extern const struct mevent_server_cmd gMEventSrvScript_SendCard[]; +static void MysteryGiftServer_Init(struct MysteryGiftServer *, const void *, u32, u32); +static void MysteryGiftServer_Free(struct MysteryGiftServer *); +static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer *); -void mevent_srv_init_wnews(void) +extern const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[]; +extern const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[]; + +void MysterGiftServer_CreateForNews(void) { - s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); - mevent_srv_init_common(s_mevent_srv_common_ptr, gMEventSrvScript_SendNews, 0, 1); + sServer = AllocZeroed(sizeof(*sServer)); + MysteryGiftServer_Init(sServer, gMysteryGiftServerScript_SendWonderNews, 0, 1); } -void mevent_srv_new_wcard(void) +void MysterGiftServer_CreateForCard(void) { - s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); - mevent_srv_init_common(s_mevent_srv_common_ptr, gMEventSrvScript_SendCard, 0, 1); + sServer = AllocZeroed(sizeof(*sServer)); + MysteryGiftServer_Init(sServer, gMysteryGiftServerScript_SendWonderCard, 0, 1); } -u32 mevent_srv_common_do_exec(u16 * a0) +u32 MysterGiftServer_Run(u16 * endVal) { u32 result; - if (s_mevent_srv_common_ptr == NULL) - return 3; - result = mevent_srv_exec_common(s_mevent_srv_common_ptr); - if (result == 3) + if (sServer == NULL) + return SVR_RET_END; + result = MysteryGiftServer_CallFunc(sServer); + if (result == SVR_RET_END) { - *a0 = s_mevent_srv_common_ptr->param; - mevent_srv_free_resources(s_mevent_srv_common_ptr); - Free(s_mevent_srv_common_ptr); - s_mevent_srv_common_ptr = NULL; + *endVal = sServer->param; + MysteryGiftServer_Free(sServer); + FREE_AND_SET_NULL(sServer); } return result; } -static void mevent_srv_init_common(struct mevent_srv_common * svr, const void *cmdBuffer, u32 sendPlayerNo, u32 recvPlayerNo) +static void MysteryGiftServer_Init(struct MysteryGiftServer * svr, const void *script, u32 sendPlayerId, u32 recvPlayerId) { - svr->unk_00 = 0; - svr->mainseqno = 0; - svr->card = AllocZeroed(sizeof(struct WonderCard)); - svr->news = AllocZeroed(sizeof(struct WonderNews)); + svr->unused = 0; + svr->funcId = FUNC_INIT; + svr->card = AllocZeroed(sizeof(*svr->card)); + svr->news = AllocZeroed(sizeof(*svr->news)); svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MysteryGiftLinkGameData)); - svr->cmdBuffer = cmdBuffer; + svr->linkGameData = AllocZeroed(sizeof(*svr->linkGameData)); + svr->script = script; svr->cmdidx = 0; - MysteryGiftLink_Init(&svr->manager, sendPlayerNo, recvPlayerNo); + MysteryGiftLink_Init(&svr->manager, sendPlayerId, recvPlayerId); } -static void mevent_srv_free_resources(struct mevent_srv_common * svr) +static void MysteryGiftServer_Free(struct MysteryGiftServer * svr) { Free(svr->card); Free(svr->news); Free(svr->recvBuffer); - Free(svr->mevent_unk1442cc); + Free(svr->linkGameData); } -static void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void *src, u32 size) +static void MysteryGiftServer_InitSend(struct MysteryGiftServer * svr, u32 ident, const void *src, u32 size) { - AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257); + AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257); MysteryGiftLink_InitSend(&svr->manager, ident, src, size); } -static void *mevent_first_if_not_null_else_second(void *a0, void *a1) +// Given the command pointer parameter and the 'default' normal data. +// If the command's pointer is not empty use that as the send data, otherwise use the default. +static const void *MysteryGiftServer_GetSendData(const void *dynamicData, const void *defaultData) { - if (a0 != NULL) - return a0; + if (dynamicData != NULL) + return dynamicData; else - return a1; + return defaultData; } -static u32 mevent_compare_pointers(void *a0, void *a1) +static u32 MysteryGiftServer_Compare(const void *a, const void *b) { - if (a1 < a0) + if (b < a) return 0; - else if (a1 == a0) + else if (b == a) return 1; else return 2; } -static u32 common_mainseq_0(struct mevent_srv_common * svr) +static u32 Server_Init(struct MysteryGiftServer * svr) { - // start - svr->mainseqno = 4; - return 0; + svr->funcId = FUNC_RUN; + return SVR_RET_INIT; } -static u32 common_mainseq_1(struct mevent_srv_common * svr) +static u32 Server_Done(struct MysteryGiftServer * svr) { - // done - return 3; + return SVR_RET_END; } -static u32 common_mainseq_2(struct mevent_srv_common * svr) +static u32 Server_Recv(struct MysteryGiftServer * svr) { - // do recv if (MysteryGiftLink_Recv(&svr->manager)) - svr->mainseqno = 4; - return 1; + svr->funcId = FUNC_RUN; + return SVR_RET_ACTIVE; } -static u32 common_mainseq_3(struct mevent_srv_common * svr) +static u32 Server_Send(struct MysteryGiftServer * svr) { - // do send if (MysteryGiftLink_Send(&svr->manager)) - svr->mainseqno = 4; - return 1; + svr->funcId = FUNC_RUN; + return SVR_RET_ACTIVE; } -static u32 common_mainseq_4(struct mevent_srv_common * svr) +static u32 Server_Run(struct MysteryGiftServer * svr) { // process command - const struct mevent_server_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - void *ptr; + const struct MysteryGiftServerCmd * cmd = &svr->script[svr->cmdidx]; + const void *ptr; svr->cmdidx++; switch (cmd->instr) { - case 0: - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 354); - svr->mainseqno = 1; - svr->param = cmd->flag; - break; - case 1: - svr->mainseqno = 3; - break; - case 2: - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364); - MysteryGiftLink_InitRecv(&svr->manager, cmd->flag, svr->recvBuffer); - svr->mainseqno = 2; - break; - case 3: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 370); + case SVR_RETURN: + AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 354); + svr->funcId = FUNC_DONE; + svr->param = cmd->flag; // Set for endVal in MysteryGiftServer_Run + break; + case SVR_SEND: + svr->funcId = FUNC_SEND; + break; + case SVR_RECV: + AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364); + MysteryGiftLink_InitRecv(&svr->manager, cmd->flag, svr->recvBuffer); + svr->funcId = FUNC_RECV; + break; + case SVR_GOTO: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 370); + svr->cmdidx = 0; + svr->script = cmd->parameter; + break; + case SVR_COPY_GAME_DATA: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376); + AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377); + memcpy(svr->linkGameData, svr->recvBuffer, sizeof(*svr->linkGameData)); + break; + case SVR_CHECK_GAME_DATA: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382); + AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383); + svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData); + break; + case SVR_GOTO_IF_EQ: + if (svr->param == cmd->flag) + { svr->cmdidx = 0; - svr->cmdBuffer = cmd->parameter; - break; - case 5: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376); - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377); - memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MysteryGiftLinkGameData)); - break; - case 6: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382); - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383); - svr->param = MysteryGift_ValidateLinkGameData(svr->mevent_unk1442cc); - break; - case 4: - if (svr->param == cmd->flag) - { - svr->cmdidx = 0; - svr->cmdBuffer = cmd->parameter; - } - break; - case 7: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396); - ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->card); - svr->param = MysteryGift_CompareCardFlags(ptr, svr->mevent_unk1442cc, ptr); - break; - case 8: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402); - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 403); - svr->param = *(u32 *)svr->recvBuffer; - break; - case 9: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408); - ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord); - svr->param = MysteryGift_CheckStamps(ptr, svr->mevent_unk1442cc, ptr); - break; - case 10: - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415); - svr->param = MysteryGift_GetCardStatFromLinkData(svr->mevent_unk1442cc, cmd->flag); - break; - case 11: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420); - svr->param = MysteryGift_DoesQuestionnaireMatch(svr->mevent_unk1442cc, cmd->parameter); - break; - case 12: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426); - svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer); - break; - case 14: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432); - mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->news), sizeof(struct WonderNews)); - break; - case 13: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438); - mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->card), sizeof(struct WonderCard)); - break; - case 16: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444); - mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4); - break; - case 15: - if (cmd->parameter == NULL) - mevent_srv_common_init_send(svr, 0x19, svr->sendBuffer1, svr->sendBuffer1Size); - else - mevent_srv_common_init_send(svr, 0x19, cmd->parameter, cmd->flag); - break; - case 18: - if (cmd->parameter == NULL) - mevent_srv_common_init_send(svr, 0x10, svr->sendBuffer2, svr->sendBuffer2Size); - else - mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag); - break; - case 19: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 466); - mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188); - break; - case 20: - mevent_srv_common_init_send(svr, 0x15, cmd->parameter, cmd->flag); - break; - case 17: - mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag); - break; - case 22: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 481); - memcpy(svr->card, cmd->parameter, 332); - break; - case 23: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 486); - memcpy(svr->news, cmd->parameter, 444); - break; - case 21: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 491); - svr->sendWord = *(u32 *)cmd->parameter; - break; - case 24: - svr->sendBuffer1 = cmd->parameter; - svr->sendBuffer1Size = cmd->flag; - break; - case 25: - svr->sendBuffer2 = cmd->parameter; - svr->sendBuffer2Size = cmd->flag; - break; - case 26: - AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506); - memcpy(svr->card, GetSavedWonderCard(), 332); - DisableWonderCardSending(svr->card); - break; - case 27: - AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512); - memcpy(svr->news, GetSavedWonderNews(), 444); - break; - case 28: - AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 517); - svr->sendBuffer1 = GetSavedRamScriptIfValid(); - break; - case 29: - mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag); - break; + svr->script = cmd->parameter; + } + break; + case SVR_CHECK_EXISTING_CARD: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396); + ptr = MysteryGiftServer_GetSendData(cmd->parameter, svr->card); + svr->param = MysteryGift_CompareCardFlags(ptr, svr->linkGameData, ptr); + break; + case SVR_READ_RESPONSE: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402); + AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 403); + svr->param = *(u32 *)svr->recvBuffer; + break; + case SVR_CHECK_EXISTING_STAMPS: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408); + ptr = MysteryGiftServer_GetSendData(cmd->parameter, &svr->stamp); + svr->param = MysteryGift_CheckStamps(ptr, svr->linkGameData, ptr); + break; + case SVR_GET_CARD_STAT: + AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415); + svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->flag); + break; + case SVR_CHECK_QUESTIONNAIRE: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420); + svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->parameter); + break; + case SVR_COMPARE: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426); + svr->param = MysteryGiftServer_Compare(cmd->parameter, *(void **)svr->recvBuffer); + break; + case SVR_LOAD_NEWS: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432); + MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->parameter, svr->news), sizeof(struct WonderNews)); + break; + case SVR_LOAD_CARD: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438); + MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->parameter, svr->card), sizeof(struct WonderCard)); + break; + case SVR_LOAD_STAMP: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444); + MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->parameter, &svr->stamp), sizeof(svr->stamp)); + break; + case SVR_LOAD_RAM_SCRIPT: + if (cmd->parameter == NULL) + MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, svr->ramScript, svr->ramScriptSize); + else + MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->parameter, cmd->flag); + break; + case SVR_LOAD_CLIENT_SCRIPT: + if (cmd->parameter == NULL) + MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, svr->clientScript, svr->clientScriptSize); + else + MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->parameter, cmd->flag); + break; + case SVR_LOAD_EREADER_TRAINER: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 466); + MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->parameter, 188); + break; + case SVR_LOAD_MSG: + MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->parameter, cmd->flag); + break; + case SVR_LOAD_UNK_2: + MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->parameter, cmd->flag); + break; + case SVR_COPY_CARD: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 481); + memcpy(svr->card, cmd->parameter, sizeof(*svr->card)); + break; + case SVR_COPY_NEWS: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 486); + memcpy(svr->news, cmd->parameter, sizeof(*svr->news)); + break; + case SVR_COPY_STAMP: + AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 491); + svr->stamp = *(u32 *)cmd->parameter; + break; + case SVR_SET_RAM_SCRIPT: + svr->ramScript = cmd->parameter; + svr->ramScriptSize = cmd->flag; + break; + case SVR_SET_CLIENT_SCRIPT: + svr->clientScript = cmd->parameter; + svr->clientScriptSize = cmd->flag; + break; + case SVR_COPY_SAVED_CARD: + AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506); + memcpy(svr->card, GetSavedWonderCard(), sizeof(*svr->card)); + DisableWonderCardSending(svr->card); + break; + case SVR_COPY_SAVED_NEWS: + AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512); + memcpy(svr->news, GetSavedWonderNews(), sizeof(*svr->news)); + break; + case SVR_COPY_SAVED_RAM_SCRIPT: + AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 517); + svr->ramScript = GetSavedRamScriptIfValid(); + break; + case SVR_LOAD_UNK_1: + MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->parameter, cmd->flag); + break; } - return 1; + return SVR_RET_ACTIVE; } -static u32 (*const func_tbl[])(struct mevent_srv_common *) = { - common_mainseq_0, - common_mainseq_1, - common_mainseq_2, - common_mainseq_3, - common_mainseq_4 +static u32 (*const sFuncTable[])(struct MysteryGiftServer *) = { + [FUNC_INIT] = Server_Init, + [FUNC_DONE] = Server_Done, + [FUNC_RECV] = Server_Recv, + [FUNC_SEND] = Server_Send, + [FUNC_RUN] = Server_Run }; -static u32 mevent_srv_exec_common(struct mevent_srv_common * svr) +static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer * svr) { +// Original GF names +#define mainseqno funcId +#define func_tbl sFuncTable u32 response; AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 546); - response = func_tbl[svr->mainseqno](svr); + response = sFuncTable[svr->funcId](svr); AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 548); return response; +#undef mainseqno +#undef func_tbl } diff --git a/src/union_room_message.c b/src/union_room_message.c index d3c3c6e46..a1368e9fa 100644 --- a/src/union_room_message.c +++ b/src/union_room_message.c @@ -1,6 +1,7 @@ #include "global.h" #include "link_rfu.h" #include "mystery_gift_server.h" +#include "mystery_gift_client.h" #include "constants/union_room.h" ALIGNED(4) const u8 gText_UR_EmptyString[] = _(""); @@ -558,18 +559,18 @@ const u8 *const gTexts_UR_GladToMeetYou[GENDER_COUNT] = { ALIGNED(4) const u8 gText_UR_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); ALIGNED(4) static const u8 sText_CanceledReadingCard[] = _("Canceled reading the Card."); -static const struct mevent_client_cmd sClientScript_DynamicError[] = { - CLI_RECEIVE(0x15), - CLI_RECVBUF, - CLI_SENDALL, - CLI_RETURN(0x0e) +static const struct MysteryGiftClientCmd sClientScript_DynamicError[] = { + {CLI_RECV, MG_LINKID_DYNAMIC_MSG}, + {CLI_COPY_MSG}, + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_BUFFER_FAILURE} }; -const struct mevent_server_cmd gServerScript_ClientCanceledCard[] = { - SRV_SEND(0x20, sClientScript_DynamicError), - SRV_WAITSND, - SRV_SENDSTR(0x1b, sText_CanceledReadingCard), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x09) +const struct MysteryGiftServerCmd gServerScript_ClientCanceledCard[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_DynamicError)}, + {SVR_SEND}, + {SVR_LOAD_MSG, PTR_ARG(sText_CanceledReadingCard)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CLIENT_CANCELED} }; From 76c3b014d8c18e1f09176b17fbe08f6db4f037c6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 21 Nov 2022 22:10:41 -0500 Subject: [PATCH 33/42] Sync mystery gift menu, ereader screen --- common_syms/ereader_screen.txt | 1 + common_syms/mystery_gift.txt | 1 - include/ereader_helpers.h | 9 +- include/link.h | 18 +- include/link_rfu.h | 2 - include/mystery_gift.h | 12 - include/mystery_gift_menu.h | 4 +- ld_script.txt | 2 + src/ereader_screen.c | 520 ++++++++++++++++ src/main_menu.c | 2 +- src/mystery_gift.c | 425 ------------- src/mystery_gift_menu.c | 1069 ++++++++++++++++---------------- sym_common.txt | 2 +- 13 files changed, 1068 insertions(+), 999 deletions(-) create mode 100644 common_syms/ereader_screen.txt delete mode 100644 common_syms/mystery_gift.txt create mode 100644 src/ereader_screen.c diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt new file mode 100644 index 000000000..2189eedbc --- /dev/null +++ b/common_syms/ereader_screen.txt @@ -0,0 +1 @@ +gEReaderData diff --git a/common_syms/mystery_gift.txt b/common_syms/mystery_gift.txt deleted file mode 100644 index af4db66e6..000000000 --- a/common_syms/mystery_gift.txt +++ /dev/null @@ -1 +0,0 @@ -sMEventSendToEReaderManager diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h index d6f3d13bb..244d6e2ef 100644 --- a/include/ereader_helpers.h +++ b/include/ereader_helpers.h @@ -14,17 +14,20 @@ enum { #define EREADER_XFER_EXE 1 #define EREADER_XFER_CHK 2 #define EREADER_XFER_SHIFT 0 -#define EREADER_XFER_MASK 3 +#define EREADER_XFER_MASK ((EREADER_XFER_EXE | EREADER_XFER_CHK) << EREADER_XFER_SHIFT) #define EREADER_CANCEL_TIMEOUT 1 #define EREADER_CANCEL_KEY 2 -#define EREADER_CANCEL_MASK 0xC #define EREADER_CANCEL_SHIFT 2 +#define EREADER_CANCEL_TIMEOUT_MASK (EREADER_CANCEL_TIMEOUT << EREADER_CANCEL_SHIFT) +#define EREADER_CANCEL_KEY_MASK (EREADER_CANCEL_KEY << EREADER_CANCEL_SHIFT) +#define EREADER_CANCEL_MASK ((EREADER_CANCEL_TIMEOUT | EREADER_CANCEL_KEY) << EREADER_CANCEL_SHIFT) #define EREADER_CHECKSUM_OK 1 #define EREADER_CHECKSUM_ERR 2 -#define EREADER_CHECKSUM_MASK 0x30 #define EREADER_CHECKSUM_SHIFT 4 +#define EREADER_CHECKSUM_OK_MASK (EREADER_CHECKSUM_OK << EREADER_CHECKSUM_SHIFT) +#define EREADER_CHECKSUM_MASK ((EREADER_CHECKSUM_OK | EREADER_CHECKSUM_ERR) << EREADER_CHECKSUM_SHIFT) void EReaderHelper_SerialCallback(void); void EReaderHelper_Timer3Callback(void); diff --git a/include/link.h b/include/link.h index 6de96da5e..7e5e5ecb0 100644 --- a/include/link.h +++ b/include/link.h @@ -85,12 +85,12 @@ #define LINKCMD_PARTNER_CANCEL_TRADE 0xEECC #define LINKCMD_NONE 0xEFFF -#define LINKTYPE_TRADE 0x1111 // trade -#define LINKTYPE_0x1122 0x1122 // trade +#define LINKTYPE_TRADE 0x1111 +#define LINKTYPE_TRADE_CONNECTING 0x1122 #define LINKTYPE_TRADE_SETUP 0x1133 -#define LINKTYPE_0x1144 0x1144 // trade +#define LINKTYPE_TRADE_DISCONNECTED 0x1144 #define LINKTYPE_BATTLE 0x2211 -#define LINKTYPE_0x2222 0x2222 // unused battle? +#define LINKTYPE_UNUSED_BATTLE 0x2222 // Unused, inferred from gap #define LINKTYPE_SINGLE_BATTLE 0x2233 #define LINKTYPE_DOUBLE_BATTLE 0x2244 #define LINKTYPE_MULTI_BATTLE 0x2255 @@ -100,7 +100,12 @@ #define LINKTYPE_RECORD_MIX_BEFORE 0x3311 #define LINKTYPE_RECORD_MIX_AFTER 0x3322 #define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 +#define LINKTYPE_BERRY_BLENDER 0x4422 +#define LINKTYPE_MYSTERY_EVENT 0x5501 +#define LINKTYPE_EREADER_FRLG 0x5502 +#define LINKTYPE_EREADER_EM 0x5503 #define LINKTYPE_CONTEST_GMODE 0x6601 +#define LINKTYPE_CONTEST_EMODE 0x6602 enum { BLOCK_REQ_SIZE_NONE, // Identical to 200 @@ -110,8 +115,9 @@ enum { BLOCK_REQ_SIZE_40, }; -#define MASTER_HANDSHAKE 0x8FFF -#define SLAVE_HANDSHAKE 0xB9A0 +#define MASTER_HANDSHAKE 0x8FFF +#define SLAVE_HANDSHAKE 0xB9A0 +#define EREADER_HANDSHAKE 0xCCD0 #define IsSendCmdComplete() (gSendCmd[0] == 0) diff --git a/include/link_rfu.h b/include/link_rfu.h index 9610a9682..dbc14ea03 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -233,8 +233,6 @@ extern struct RfuGameData gHostRfuGameData; extern u8 gHostRfuUsername[]; extern struct RfuManager gRfu; -void AddTextPrinterToWindow1(const u8 *str); -bool32 PrintMysteryGiftMenuMessage(u8 * cmdPtr, const u8 * src); void LinkRfu_FatalError(void); void MG_DrawCheckerboardPattern(void); void Rfu_SetCloseLinkCallback(void); diff --git a/include/mystery_gift.h b/include/mystery_gift.h index a59b60ec8..c6f4210e2 100644 --- a/include/mystery_gift.h +++ b/include/mystery_gift.h @@ -37,18 +37,6 @@ struct MysteryGiftLinkGameData u8 version; }; -struct MEvent_Str_1 -{ - u16 status; - size_t size; - const void *data; -}; - -struct MEvent_Str_2 -{ - u8 fill_00[0x40]; -}; - struct WonderGraphics { u8 titleTextPal:4; diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h index 82a47fb5f..84c647c5b 100644 --- a/include/mystery_gift_menu.h +++ b/include/mystery_gift_menu.h @@ -3,9 +3,11 @@ extern bool8 gGiftIsFromEReader; +bool32 PrintMysteryGiftMenuMessage(u8 * cmdPtr, const u8 * src); +void AddTextPrinterToWindow1(const u8 *str); void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32); -void c2_mystery_gift(void); +void CB2_InitMysteryGift(void); void CB2_MysteryGiftEReader(void); s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str); void MG_DrawTextBorder(u8 windowId); diff --git a/ld_script.txt b/ld_script.txt index e19fa1ee6..54c794e52 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -275,6 +275,7 @@ SECTIONS { src/slot_machine.o(.text); src/roamer.o(.text); src/mystery_gift_menu.o(.text); + src/ereader_screen.o(.text); src/mystery_gift.o(.text); src/mystery_gift_link.o(.text); src/mystery_gift_client.o(.text); @@ -568,6 +569,7 @@ SECTIONS { src/slot_machine.o(.rodata); src/roamer.o(.rodata); src/mystery_gift_menu.o(.rodata); + src/ereader_screen.o(.rodata); src/mystery_gift.o(.rodata); src/mystery_gift_link.o(.rodata); src/mystery_gift_client.o(.rodata); diff --git a/src/ereader_screen.c b/src/ereader_screen.c new file mode 100644 index 000000000..060150cbf --- /dev/null +++ b/src/ereader_screen.c @@ -0,0 +1,520 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "ereader_helpers.h" +#include "link.h" +#include "main.h" +#include "mystery_gift_menu.h" +#include "mystery_gift_client.h" +#include "save.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "strings.h" +#include "util.h" +#include "cereader_tool.h" +#include "help_system.h" +#include "constants/songs.h" + +struct EReaderTaskData +{ + u16 timer; + u16 unused1; + u16 unused2; + u16 unused3; + u8 state; + u8 textState; + u8 unused4; + u8 unused5; + u8 unused6; + u8 unused7; + u8 status; + u8 *unusedBuffer; +}; + +struct EReaderData +{ + u16 status; + size_t size; + const void *data; +}; + +static void Task_EReader(u8); + +struct EReaderData gEReaderData; + +extern const u8 gMultiBootProgram_EReader_Start[]; +extern const u8 gMultiBootProgram_EReader_End[]; + +static void EReader_Load(struct EReaderData *eReader, size_t size, const void *data) +{ + vu16 imeBak = REG_IME; + REG_IME = 0; + gIntrTable[1] = EReaderHelper_SerialCallback; + gIntrTable[2] = EReaderHelper_Timer3Callback; + EReaderHelper_SaveRegsState(); + EReaderHelper_ClearsSendRecvMgr(); + REG_IE |= INTR_FLAG_VCOUNT; + REG_IME = imeBak; + eReader->status = 0; + eReader->size = size; + eReader->data = data; +} + +static void EReader_Reset(struct EReaderData *eReader) +{ + vu16 imeBak = REG_IME; + REG_IME = 0; + EReaderHelper_ClearsSendRecvMgr(); + EReaderHelper_RestoreRegsState(); + RestoreSerialTimer3IntrHandlers(); + REG_IME = imeBak; +} + +// Return values for EReader_Transfer +enum { + TRANSFER_ACTIVE, + TRANSFER_SUCCESS, + TRANSFER_CANCELED, + TRANSFER_TIMEOUT, +}; + +static u8 EReader_Transfer(struct EReaderData *eReader) +{ + u8 transferStatus = TRANSFER_ACTIVE; + eReader->status = EReaderHandleTransfer(TRUE, eReader->size, eReader->data, NULL); + + if ((eReader->status & EREADER_XFER_MASK) == 0 && eReader->status & EREADER_CHECKSUM_OK_MASK) + transferStatus = TRANSFER_SUCCESS; + + if (eReader->status & EREADER_CANCEL_KEY_MASK) + transferStatus = TRANSFER_CANCELED; + + if (eReader->status & EREADER_CANCEL_TIMEOUT_MASK) + transferStatus = TRANSFER_TIMEOUT; + + gShouldAdvanceLinkState = 0; + return transferStatus; +} + +static void OpenEReaderLink(void) +{ + memset(gDecompressionBuffer, 0, 0x2000); + gLinkType = LINKTYPE_EREADER_FRLG; + OpenLink(); + SetSuppressLinkErrorMessage(TRUE); +} + +static bool32 ValidateEReaderConnection(void) +{ + vu16 imeBak = REG_IME; + u16 handshakes[MAX_LINK_PLAYERS]; + + REG_IME = 0; + *(u64 *)handshakes = *(u64 *)gLink.tempRecvBuffer; + REG_IME = imeBak; + + // Validate that we are player 1, the EReader is player 2, + // and that players 3 and 4 are empty. + if (handshakes[0] == SLAVE_HANDSHAKE + && handshakes[1] == EREADER_HANDSHAKE + && handshakes[2] == 0xFFFF + && handshakes[3] == 0xFFFF) + return TRUE; + return FALSE; +} + +static bool32 IsEReaderConnectionSane(void) +{ + if (IsLinkMaster() && GetLinkPlayerCount_2() == 2) + return TRUE; + return FALSE; +} + +// States for TryReceiveCard +enum { + RECV_STATE_INIT, + RECV_STATE_WAIT_START, + RECV_STATE_START, + RECV_STATE_EXCHANGE, + RECV_STATE_START_DISCONNECT, + RECV_STATE_WAIT_DISCONNECT, +}; + +// Return values for TryReceiveCard +enum { + RECV_ACTIVE, + RECV_CANCELED, + RECV_SUCCESS, + RECV_ERROR, + RECV_DISCONNECTED, + RECV_TIMEOUT, +}; + +static u32 TryReceiveCard(u8 * state, u16 * timer) +{ + if ((*state == RECV_STATE_EXCHANGE + || *state == RECV_STATE_START_DISCONNECT + || *state == RECV_STATE_WAIT_DISCONNECT) + && HasLinkErrorOccurred()) + { + // Return error status if an error occurs + // during the link exchange. + *state = 0; + return RECV_ERROR; + } + + switch (*state) + { + case RECV_STATE_INIT: + if (IsLinkMaster() && GetLinkPlayerCount_2() > 1) + { + *state = RECV_STATE_WAIT_START; + } + else if (JOY_NEW(B_BUTTON)) + { + *state = 0; + return RECV_CANCELED; + } + break; + case RECV_STATE_WAIT_START: + if (++(*timer) > 5) + { + *timer = 0; + *state = RECV_STATE_START; + } + break; + case RECV_STATE_START: + if (GetLinkPlayerCount_2() == 2) + { + PlaySE(SE_DING_DONG); + CheckShouldAdvanceLinkState(); + *timer = 0; + *state = RECV_STATE_EXCHANGE; + } + else if (JOY_NEW(B_BUTTON)) + { + *state = 0; + return RECV_CANCELED; + } + break; + case RECV_STATE_EXCHANGE: + if (++(*timer) > 30) + { + *state = 0; + return RECV_TIMEOUT; + } + + if (IsLinkConnectionEstablished()) + { + if (gReceivedRemoteLinkPlayers) + { + if (IsLinkPlayerDataExchangeComplete()) + { + *state = 0; + return RECV_SUCCESS; + } + else + *state = RECV_STATE_START_DISCONNECT; + } + else + *state = RECV_STATE_EXCHANGE; + } + break; + case RECV_STATE_START_DISCONNECT: + SetCloseLinkCallbackAndType(0); + *state = RECV_STATE_WAIT_DISCONNECT; + break; + case RECV_STATE_WAIT_DISCONNECT: + if (!gReceivedRemoteLinkPlayers) + { + *state = 0; + return RECV_DISCONNECTED; + } + break; + } + return RECV_ACTIVE; +} + +void CreateEReaderTask(void) +{ + u8 taskId = CreateTask(Task_EReader, 0); + struct EReaderTaskData *data = (struct EReaderTaskData *)gTasks[taskId].data; + data->state = 0; + data->textState = 0; + data->unused4 = 0; + data->unused5 = 0; + data->unused6 = 0; + data->unused7 = 0; + data->timer = 0; + data->unused1 = 0; + data->unused2 = 0; + data->unused3 = 0; + data->status = 0; + data->unusedBuffer = AllocZeroed(CLIENT_MAX_MSG_SIZE); +} + +static void ResetTimer(u16 *timer) +{ + *timer = 0; +} + +static bool32 UpdateTimer(u16 * timer, u16 time) +{ + if (++(*timer) > time) + { + // Timer has finished + *timer = 0; + return TRUE; + } + return FALSE; +} + +// States for Task_EReader +enum { + ER_STATE_START, + ER_STATE_INIT_LINK, + ER_STATE_INIT_LINK_WAIT, + ER_STATE_INIT_LINK_CHECK, + ER_STATE_MSG_SELECT_CONNECT, + ER_STATE_MSG_SELECT_CONNECT_WAIT, + ER_STATE_TRY_LINK, + ER_STATE_INCORRECT_LINK, + ER_STATE_CONNECTING, + ER_STATE_TRANSFER, + ER_STATE_TRANSFER_END, + ER_STATE_TRANSFER_SUCCESS, + ER_STATE_LOAD_CARD_START, + ER_STATE_LOAD_CARD, + ER_STATE_WAIT_RECV_CARD, + ER_STATE_VALIDATE_CARD, + ER_STATE_WAIT_DISCONNECT, + ER_STATE_SAVE, + ER_STATE_SUCCESS_MSG, + ER_STATE_SUCCESS_END, + ER_STATE_LINK_ERROR, + ER_STATE_LINK_ERROR_TRY_AGAIN, + ER_STATE_SAVE_FAILED, + ER_STATE_CANCELED_CARD_READ, + ER_STATE_UNUSED_1, + ER_STATE_UNUSED_2, + ER_STATE_END, +}; + +static void Task_EReader(u8 taskId) +{ + struct EReaderTaskData *data = (struct EReaderTaskData *)gTasks[taskId].data; + switch (data->state) + { + case ER_STATE_START: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ReceiveMysteryGiftWithEReader)) + data->state = ER_STATE_INIT_LINK; + break; + case ER_STATE_INIT_LINK: + OpenEReaderLink(); + ResetTimer(&data->timer); + data->state = ER_STATE_INIT_LINK_WAIT; + break; + case ER_STATE_INIT_LINK_WAIT: + if (UpdateTimer(&data->timer, 10)) + data->state = ER_STATE_INIT_LINK_CHECK; + break; + case ER_STATE_INIT_LINK_CHECK: + if (!IsEReaderConnectionSane()) + { + CloseLink(); + data->state = ER_STATE_MSG_SELECT_CONNECT; + } + else + data->state = ER_STATE_LOAD_CARD; + break; + case ER_STATE_MSG_SELECT_CONNECT: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_SelectConnectFromEReaderMenu)) + { + AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); + ResetTimer(&data->timer); + data->state = ER_STATE_MSG_SELECT_CONNECT_WAIT; + } + break; + case ER_STATE_MSG_SELECT_CONNECT_WAIT: + if (UpdateTimer(&data->timer, 90)) + { + OpenEReaderLink(); + data->state = ER_STATE_TRY_LINK; + } + else if (JOY_NEW(B_BUTTON)) + { + ResetTimer(&data->timer); + PlaySE(SE_SELECT); + data->state = ER_STATE_CANCELED_CARD_READ; + } + break; + case ER_STATE_TRY_LINK: + if (JOY_NEW(B_BUTTON)) + { + // Canceled + PlaySE(SE_SELECT); + CloseLink(); + ResetTimer(&data->timer); + data->state = ER_STATE_CANCELED_CARD_READ; + } + else if (GetLinkPlayerCount_2() > 1) + { + ResetTimer(&data->timer); + CloseLink(); + data->state = ER_STATE_INCORRECT_LINK; + } + else if (ValidateEReaderConnection()) + { + // Successful connection + PlaySE(SE_SELECT); + CloseLink(); + ResetTimer(&data->timer); + data->state = ER_STATE_CONNECTING; + } + else if (UpdateTimer(&data->timer, 10)) + { + // Retry connection + CloseLink(); + OpenEReaderLink(); + ResetTimer(&data->timer); + } + break; + case ER_STATE_INCORRECT_LINK: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_LinkIsIncorrect)) + data->state = ER_STATE_MSG_SELECT_CONNECT; + break; + case ER_STATE_CONNECTING: + AddTextPrinterToWindow1(gJPText_Connecting); + EReader_Load(&gEReaderData, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, gMultiBootProgram_EReader_Start); + data->state = ER_STATE_TRANSFER; + break; + case ER_STATE_TRANSFER: + data->status = EReader_Transfer(&gEReaderData); + if (data->status != TRANSFER_ACTIVE) + data->state = ER_STATE_TRANSFER_END; + break; + case ER_STATE_TRANSFER_END: + EReader_Reset(&gEReaderData); + if (data->status == TRANSFER_TIMEOUT) + { + data->state = ER_STATE_LINK_ERROR; + } + else if (data->status == TRANSFER_SUCCESS) + { + ResetTimer(&data->timer); + AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment); + data->state = ER_STATE_TRANSFER_SUCCESS; + } + else // TRANSFER_CANCELED + { + data->state = ER_STATE_START; + } + break; + case ER_STATE_TRANSFER_SUCCESS: + if (UpdateTimer(&data->timer, 840)) + data->state = ER_STATE_LOAD_CARD_START; + break; + case ER_STATE_LOAD_CARD_START: + OpenEReaderLink(); + AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); + data->state = ER_STATE_LOAD_CARD; + break; + case ER_STATE_LOAD_CARD: + switch (TryReceiveCard(&data->textState, &data->timer)) + { + case RECV_ACTIVE: + // Running + break; + case RECV_SUCCESS: + AddTextPrinterToWindow1(gJPText_Connecting); + data->state = ER_STATE_WAIT_RECV_CARD; + break; + case RECV_CANCELED: + PlaySE(SE_SELECT); + CloseLink(); + data->state = ER_STATE_CANCELED_CARD_READ; + break; + case RECV_TIMEOUT: + CloseLink(); + data->state = ER_STATE_LINK_ERROR_TRY_AGAIN; + break; + case RECV_ERROR: + case RECV_DISCONNECTED: + CloseLink(); + data->state = ER_STATE_LINK_ERROR; + break; + } + break; + case ER_STATE_WAIT_RECV_CARD: + if (HasLinkErrorOccurred()) + { + CloseLink(); + data->state = ER_STATE_LINK_ERROR; + } + else if (GetBlockReceivedStatus()) + { + ResetBlockReceivedFlags(); + data->state = ER_STATE_VALIDATE_CARD; + } + break; + case ER_STATE_VALIDATE_CARD: + data->status = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer); + SetCloseLinkCallbackAndType(data->status); + data->state = ER_STATE_WAIT_DISCONNECT; + break; + case ER_STATE_WAIT_DISCONNECT: + if (!gReceivedRemoteLinkPlayers) + { + if (data->status == TRUE) // Was data valid? + data->state = ER_STATE_SAVE; + else + data->state = ER_STATE_LINK_ERROR; + } + break; + case ER_STATE_SAVE: + if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerTowerSet *)gDecompressionBuffer)) + { + AddTextPrinterToWindow1(gJPText_ConnectionComplete); + ResetTimer(&data->timer); + data->state = ER_STATE_SUCCESS_MSG; + } + else + data->state = ER_STATE_SAVE_FAILED; + break; + case ER_STATE_SUCCESS_MSG: + if (UpdateTimer(&data->timer, 120)) + { + AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToSevii); + PlayFanfare(MUS_OBTAIN_ITEM); + data->state = ER_STATE_SUCCESS_END; + } + break; + case ER_STATE_SUCCESS_END: + if (IsFanfareTaskInactive() && JOY_NEW(A_BUTTON | B_BUTTON)) + data->state = ER_STATE_END; + break; + case ER_STATE_CANCELED_CARD_READ: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_CardReadingHasBeenHalted)) + data->state = ER_STATE_END; + break; + case ER_STATE_LINK_ERROR: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorCheckLink)) + data->state = ER_STATE_START; + break; + case ER_STATE_LINK_ERROR_TRY_AGAIN: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorTryAgain)) + data->state = ER_STATE_START; + break; + case ER_STATE_SAVE_FAILED: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_WriteErrorUnableToSaveData)) + data->state = ER_STATE_START; + break; + case ER_STATE_END: + HelpSystem_Enable(); + Free(data->unusedBuffer); + DestroyTask(taskId); + SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); + break; + } +} diff --git a/src/main_menu.c b/src/main_menu.c index 011bc2308..94fcb7ac6 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -481,7 +481,7 @@ static void Task_ExecuteMainMenuSelection(u8 taskId) TrySetUpQuestLogScenes_ElseContinueFromSave(taskId); break; case MAIN_MENU_MYSTERYGIFT: - SetMainCallback2(c2_mystery_gift); + SetMainCallback2(CB2_InitMysteryGift); HelpSystem_Disable(); FreeAllWindowBuffers(); DestroyTask(taskId); diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 8db1ee5e0..b02d949f2 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -3,17 +3,14 @@ #include "constants/songs.h" #include "easy_chat.h" #include "task.h" -#include "decompress.h" #include "link.h" #include "link_rfu.h" -#include "ereader_helpers.h" #include "util.h" #include "script.h" #include "event_data.h" #include "battle_tower.h" #include "new_game.h" #include "wonder_news.h" -#include "cereader_tool.h" #include "mystery_gift_menu.h" #include "help_system.h" #include "mystery_gift.h" @@ -21,23 +18,6 @@ #define CALC_CRC(data) CalcCRC16WithTable((void *)&(data), sizeof(data)) -struct MEventTaskData1 -{ - u16 stateAdvanceDelay; - u16 t02; - u16 t04; - u16 t06; - u8 state; - u8 textOrReceiveState; - u8 t0A; - u8 t0B; - u8 t0C; - u8 t0D; - u8 initialSendResult; - struct MEvent_Str_2 *t10; -}; - -static void Task_EReaderComm(u8 taskId); static bool32 ValidateWonderNews(const struct WonderNews * src); static void ClearSavedWonderNews(void); static void ClearSavedWonderNewsMetadata(void); @@ -47,9 +27,6 @@ static void ClearSavedWonderCardMetadata(void); static void IncrementCardStatForNewTrainer(u32 eventId, u32 trainerId, u32 *idsList, s32 count); static void ClearSavedTrainerIds(void); -extern const u8 gMultiBootProgram_EReader_Start[]; -extern const u8 gMultiBootProgram_EReader_End[]; - static const u16 sReceivedGiftFlags[] = { FLAG_RECEIVED_AURORA_TICKET, FLAG_RECEIVED_MYSTIC_TICKET, @@ -73,410 +50,8 @@ static const u16 sReceivedGiftFlags[] = { FLAG_WONDER_CARD_UNUSED_17 }; -struct MEvent_Str_1 sMEventSendToEReaderManager; - static EWRAM_DATA bool32 sStatsEnabled = FALSE; -void SendUnknownSerialData_Init(struct MEvent_Str_1 *mgr, size_t size, const void *data) -{ - vu16 imeBak = REG_IME; - REG_IME = 0; - gIntrTable[1] = EReaderHelper_SerialCallback; - gIntrTable[2] = EReaderHelper_Timer3Callback; - EReaderHelper_SaveRegsState(); - EReaderHelper_ClearsSendRecvMgr(); - REG_IE |= INTR_FLAG_VCOUNT; - REG_IME = imeBak; - mgr->status = 0; - mgr->size = size; - mgr->data = data; -} - -void SendUnknownSerialData_Teardown(struct MEvent_Str_1 *unused) -{ - vu16 imeBak = REG_IME; - REG_IME = 0; - EReaderHelper_ClearsSendRecvMgr(); - EReaderHelper_RestoreRegsState(); - RestoreSerialTimer3IntrHandlers(); - REG_IME = imeBak; -} - -u8 SendUnknownSerialData_Run(struct MEvent_Str_1 *mgr) -{ - u8 resp = 0; - mgr->status = EReaderHandleTransfer(1, mgr->size, mgr->data, 0); - if ((mgr->status & 0x13) == 0x10) // checksum OK and xfer off - resp = 1; - if (mgr->status & 8) // cancelled by player - resp = 2; - if (mgr->status & 4) // timed out - resp = 3; - gShouldAdvanceLinkState = 0; - return resp; -} - -static void ResetTTDataBuffer(void) -{ - memset(gDecompressionBuffer, 0, 0x2000); - gLinkType = 0x5502; - OpenLink(); - SetSuppressLinkErrorMessage(TRUE); -} - -bool32 sub_81436EC(void) -{ - vu16 imeBak = REG_IME; - u16 data[4]; - REG_IME = 0; - *(u64 *)data = *(u64 *)gLink.tempRecvBuffer; - REG_IME = imeBak; - if ( data[0] == 0xB9A0 - && data[1] == 0xCCD0 - && data[2] == 0xFFFF - && data[3] == 0xFFFF - ) - return TRUE; - return FALSE; -} - -static bool32 IsEReaderConnectionSane(void) -{ - if (IsLinkMaster() && GetLinkPlayerCount_2() == 2) - return TRUE; - return FALSE; -} - -static u32 EReaderReceive(u8 * state_p, u16 * receiveDelay) -{ - if ((*state_p == 3 || *state_p == 4 || *state_p == 5) && HasLinkErrorOccurred()) - { - *state_p = 0; - return 3; - } - switch (*state_p) - { - case 0: - if (IsLinkMaster() && GetLinkPlayerCount_2() > 1) - { - *state_p = 1; - ; - } - else if (JOY_NEW(B_BUTTON)) - { - *state_p = 0; - return 1; - } - break; - case 1: - if (++(*receiveDelay) > 5) - { - *receiveDelay = 0; - *state_p = 2; - } - break; - case 2: - if (GetLinkPlayerCount_2() == 2) - { - PlaySE(SE_DING_DONG); - CheckShouldAdvanceLinkState(); - *receiveDelay = 0; - *state_p = 3; - } - else if (JOY_NEW(B_BUTTON)) - { - *state_p = 0; - return 1; - } - break; - case 3: - if (++(*receiveDelay) > 30) - { - *state_p = 0; - return 5; - } - else if (IsLinkConnectionEstablished()) - { - if (gReceivedRemoteLinkPlayers) - { - if (IsLinkPlayerDataExchangeComplete()) - { - *state_p = 0; - return 2; - } - else - *state_p = 4; - } - else - *state_p = 3; - } - break; - case 4: - SetCloseLinkCallbackAndType(0); - *state_p = 5; - break; - case 5: - if (!gReceivedRemoteLinkPlayers) - { - *state_p = 0; - return 4; - } - break; - } - return 0; -} - -void task_add_00_ereader(void) -{ - u8 taskId = CreateTask(Task_EReaderComm, 0); - struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; - data->state = 0; - data->textOrReceiveState = 0; - data->t0A = 0; - data->t0B = 0; - data->t0C = 0; - data->t0D = 0; - data->stateAdvanceDelay = 0; - data->t02 = 0; - data->t04 = 0; - data->t06 = 0; - data->initialSendResult = 0; - data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2)); -} - -static void ResetDelayTimer(u16 *a0) -{ - *a0 = 0; -} - -static bool32 AdvanceDelayTimerCheckTimeout(u16 * a0, u16 a1) -{ - if (++(*a0) > a1) - { - *a0 = 0; - return TRUE; - } - return FALSE; -} - -static void Task_EReaderComm(u8 taskId) -{ - struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; - switch (data->state) - { - case 0: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader)) - data->state = 1; - break; - case 1: - ResetTTDataBuffer(); - ResetDelayTimer(&data->stateAdvanceDelay); - data->state = 2; - break; - case 2: - if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10)) - data->state = 3; - break; - case 3: - if (!IsEReaderConnectionSane()) - { - CloseLink(); - data->state = 4; - } - else - data->state = 13; - break; - case 4: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu)) - { - AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); - ResetDelayTimer(&data->stateAdvanceDelay); - data->state = 5; - } - break; - case 5: - if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 90)) - { - ResetTTDataBuffer(); - data->state = 6; - } - else if (JOY_NEW(B_BUTTON)) - { - ResetDelayTimer(&data->stateAdvanceDelay); - PlaySE(SE_SELECT); - data->state = 23; - } - break; - case 6: - if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - CloseLink(); - ResetDelayTimer(&data->stateAdvanceDelay); - data->state = 23; - } - else if (GetLinkPlayerCount_2() > 1) - { - ResetDelayTimer(&data->stateAdvanceDelay); - CloseLink(); - data->state = 7; - } - else if (sub_81436EC()) - { - PlaySE(SE_SELECT); - CloseLink(); - ResetDelayTimer(&data->stateAdvanceDelay); - data->state = 8; - } - else if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10)) - { - CloseLink(); - ResetTTDataBuffer(); - ResetDelayTimer(&data->stateAdvanceDelay); - } - break; - case 7: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_LinkIsIncorrect)) - data->state = 4; - break; - case 8: - AddTextPrinterToWindow1(gJPText_Connecting); - SendUnknownSerialData_Init(&sMEventSendToEReaderManager, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, gMultiBootProgram_EReader_Start); - data->state = 9; - break; - case 9: - data->initialSendResult = SendUnknownSerialData_Run(&sMEventSendToEReaderManager); - if (data->initialSendResult != 0) - data->state = 10; - break; - case 10: - SendUnknownSerialData_Teardown(&sMEventSendToEReaderManager); - if (data->initialSendResult == 3) - // Error - data->state = 20; - else if (data->initialSendResult == 1) - { - // OK - ResetDelayTimer(&data->stateAdvanceDelay); - AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment); - data->state = 11; - } - else - // Try again - data->state = 0; - break; - case 11: - if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 840)) - data->state = 12; - break; - case 12: - ResetTTDataBuffer(); - AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); - data->state = 13; - break; - case 13: - switch (EReaderReceive(&data->textOrReceiveState, &data->stateAdvanceDelay)) - { - case 0: - // Running - break; - case 2: - // Done - AddTextPrinterToWindow1(gJPText_Connecting); - data->state = 14; - break; - case 1: - // Cancelled - PlaySE(SE_SELECT); - CloseLink(); - data->state = 23; - break; - case 5: - // Error Try Again - CloseLink(); - data->state = 21; - break; - case 3: - case 4: - // Error CheckLink - CloseLink(); - data->state = 20; - break; - } - break; - case 14: - if (HasLinkErrorOccurred()) - { - CloseLink(); - data->state = 20; - } - else if (GetBlockReceivedStatus()) - { - ResetBlockReceivedFlags(); - data->state = 15; - } - break; - case 15: - data->initialSendResult = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer); - SetCloseLinkCallbackAndType(data->initialSendResult); - data->state = 16; - break; - case 16: - if (!gReceivedRemoteLinkPlayers) - { - if (data->initialSendResult == 1) - data->state = 17; - else - data->state = 20; - } - break; - case 17: - if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerTowerSet *)gDecompressionBuffer)) - { - AddTextPrinterToWindow1(gJPText_ConnectionComplete); - ResetDelayTimer(&data->stateAdvanceDelay); - data->state = 18; - } - else - data->state = 22; - break; - case 18: - if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 120)) - { - AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToSevii); - PlayFanfare(MUS_OBTAIN_ITEM); - data->state = 19; - } - break; - case 19: - if (IsFanfareTaskInactive() && JOY_NEW(A_BUTTON | B_BUTTON)) - data->state = 26; - break; - case 23: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted)) - data->state = 26; - break; - case 20: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink)) - data->state = 0; - break; - case 21: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain)) - data->state = 0; - break; - case 22: - if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData)) - data->state = 0; - break; - case 26: - HelpSystem_Enable(); - Free(data->t10); - DestroyTask(taskId); - SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); - break; - } -} - void ClearMysteryGift(void) { CpuFill32(0, &gSaveBlock1Ptr->mysteryGift, sizeof(gSaveBlock1Ptr->mysteryGift)); diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index a06b93ba3..09c1b9378 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -18,36 +18,38 @@ #include "wonder_news.h" #include "help_system.h" #include "strings.h" +#include "decompress.h" +#include "constants/cable_club.h" #include "constants/songs.h" #include "constants/union_room.h" EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {}; EWRAM_DATA bool8 gGiftIsFromEReader = FALSE; -void task_add_00_mystery_gift(void); -void task00_mystery_gift(u8 taskId); -void task_add_00_ereader(void); +static void CreateMysteryGiftTask(void); +static void Task_MysteryGift(u8 taskId); +extern void CreateEReaderTask(void); -const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); -const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); +static const u16 sTextboxBorder_Pal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); +static const u32 sTextboxBorder_Gfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); struct MysteryGiftTaskData { - u16 curPromptWindowId; - u16 unk2; - u16 unk4; - u16 unk6; + u16 var; // Multipurpose + u16 unused1; + u16 unused2; + u16 unused3; u8 state; u8 textState; - u8 unkA; - u8 unkB; - u8 IsCardOrNews; - u8 source; - u8 prevPromptWindowId; - u8 * buffer; + u8 unused4; + u8 unused5; + bool8 isWonderNews; + bool8 sourceIsFriend; + u8 msgId; + u8 * clientMsg; }; -const struct BgTemplate sBGTemplates[] = { +static const struct BgTemplate sBGTemplates[] = { { .bg = 0, .charBaseIndex = 2, @@ -83,7 +85,7 @@ const struct BgTemplate sBGTemplates[] = { } }; -const struct WindowTemplate sMainWindows[] = { +static const struct WindowTemplate sMainWindows[] = { { .bg = 0x00, .tilemapLeft = 0x00, @@ -108,12 +110,11 @@ const struct WindowTemplate sMainWindows[] = { .height = 0x05, .paletteNum = 0x0d, .baseBlock = 0x004f - }, { - 0xFF - } + }, + DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width28 = { +static const struct WindowTemplate sWindowTemplate_YesNoMsg_Wide = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x0f, @@ -123,7 +124,7 @@ const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width28 = { .baseBlock = 0x00e5 }; -const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width20 = { +static const struct WindowTemplate sWindowTemplate_YesNoMsg = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x0f, @@ -133,7 +134,7 @@ const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width20 = { .baseBlock = 0x00e5 }; -const struct WindowTemplate sMysteryGiftMenuWindowTemplate = { +static const struct WindowTemplate sWindowTemplate_GiftSelect = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x0f, @@ -143,7 +144,7 @@ const struct WindowTemplate sMysteryGiftMenuWindowTemplate = { .baseBlock = 0x00e5 }; -const struct WindowTemplate sWindowTemplate_ThreeOptions = { +static const struct WindowTemplate sWindowTemplate_ThreeOptions = { .bg = 0x00, .tilemapLeft = 0x08, .tilemapTop = 0x05, @@ -153,7 +154,7 @@ const struct WindowTemplate sWindowTemplate_ThreeOptions = { .baseBlock = 0x0155 }; -const struct WindowTemplate sWindowTemplate_YesNoBox = { +static const struct WindowTemplate sWindowTemplate_YesNoBox = { .bg = 0x00, .tilemapLeft = 0x17, .tilemapTop = 0x0f, @@ -163,7 +164,7 @@ const struct WindowTemplate sWindowTemplate_YesNoBox = { .baseBlock = 0x0155 }; -const struct WindowTemplate sWindowTemplate_7by8 = { +static const struct WindowTemplate sWindowTemplate_GiftSelect_3Options = { .bg = 0x00, .tilemapLeft = 0x16, .tilemapTop = 0x0c, @@ -173,7 +174,7 @@ const struct WindowTemplate sWindowTemplate_7by8 = { .baseBlock = 0x0155 }; -const struct WindowTemplate sWindowTemplate_7by6 = { +static const struct WindowTemplate sWindowTemplate_GiftSelect_2Options = { .bg = 0x00, .tilemapLeft = 0x16, .tilemapTop = 0x0e, @@ -183,7 +184,7 @@ const struct WindowTemplate sWindowTemplate_7by6 = { .baseBlock = 0x0155 }; -const struct WindowTemplate sWindowTemplate_7by4 = { +static const struct WindowTemplate sWindowTemplate_GiftSelect_1Option = { .bg = 0x00, .tilemapLeft = 0x16, .tilemapTop = 0x0f, @@ -193,19 +194,19 @@ const struct WindowTemplate sWindowTemplate_7by4 = { .baseBlock = 0x0155 }; -const struct ListMenuItem sListMenuItems_CardsOrNews[] = { +static const struct ListMenuItem sListMenuItems_CardsOrNews[] = { { gText_WonderCards, 0 }, { gText_WonderNews, 1 }, - { gText_Exit3, -2 } + { gText_Exit3, LIST_CANCEL } }; -const struct ListMenuItem sListMenuItems_WirelessOrFriend[] = { +static const struct ListMenuItem sListMenuItems_WirelessOrFriend[] = { { gText_WirelessCommunication, 0 }, { gText_Friend2, 1 }, - { gFameCheckerText_Cancel, -2 } + { gFameCheckerText_Cancel, LIST_CANCEL } }; -const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { +static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .items = NULL, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -226,31 +227,31 @@ const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .cursorKind = 0 }; -const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = { +static const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = { { gText_Receive, 0 }, { gText_Send, 1 }, { gText_Toss, 2 }, - { gFameCheckerText_Cancel, -2 } + { gFameCheckerText_Cancel, LIST_CANCEL } }; -const struct ListMenuItem sListMenuItems_ReceiveToss[] = { +static const struct ListMenuItem sListMenuItems_ReceiveToss[] = { { gText_Receive, 0 }, { gText_Toss, 2 }, - { gFameCheckerText_Cancel, -2 } + { gFameCheckerText_Cancel, LIST_CANCEL } }; -const struct ListMenuItem sListMenuItems_ReceiveSend[] = { +static const struct ListMenuItem sListMenuItems_ReceiveSend[] = { { gText_Receive, 0 }, { gText_Send, 1 }, - { gFameCheckerText_Cancel, -2 } + { gFameCheckerText_Cancel, LIST_CANCEL } }; -const struct ListMenuItem sListMenuItems_Receive[] = { +static const struct ListMenuItem sListMenuItems_Receive[] = { { gText_Receive, 0 }, - { gFameCheckerText_Cancel, -2 } + { gFameCheckerText_Cancel, LIST_CANCEL } }; -const struct ListMenuTemplate sListMenu_ReceiveSendToss = { +static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { .items = sListMenuItems_ReceiveSendToss, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -271,7 +272,7 @@ const struct ListMenuTemplate sListMenu_ReceiveSendToss = { .cursorKind = 0 }; -const struct ListMenuTemplate sListMenu_ReceiveToss = { +static const struct ListMenuTemplate sListMenu_ReceiveToss = { .items = sListMenuItems_ReceiveToss, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -292,7 +293,7 @@ const struct ListMenuTemplate sListMenu_ReceiveToss = { .cursorKind = 0 }; -const struct ListMenuTemplate sListMenu_ReceiveSend = { +static const struct ListMenuTemplate sListMenu_ReceiveSend = { .items = sListMenuItems_ReceiveSend, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -313,7 +314,7 @@ const struct ListMenuTemplate sListMenu_ReceiveSend = { .cursorKind = 0 }; -const struct ListMenuTemplate sListMenu_Receive = { +static const struct ListMenuTemplate sListMenu_Receive = { .items = sListMenuItems_Receive, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -341,14 +342,14 @@ static const u8 *const sUnusedMenuTexts[] = { gText_ReturnToTitle }; -ALIGNED(4) const u8 sMG_Ereader_TextColor_1[3] = { 0, 1, 2 }; -ALIGNED(4) const u8 sMG_Ereader_TextColor_1_Copy[3] = { 0, 1, 2 }; -ALIGNED(4) const u8 sMG_Ereader_TextColor_2[3] = { 1, 2, 3 }; +ALIGNED(4) static const u8 sTextColors_TopMenu[3] = { 0, 1, 2 }; +ALIGNED(4) static const u8 sTextColors_TopMenu_Copy[3] = { 0, 1, 2 }; +ALIGNED(4) static const u8 sMG_Ereader_TextColor_2[3] = { 1, 2, 3 }; static const u8 sText_Test[] = _("テスト"); static const u8 sText_EonTicket[] = _("むげんのチケット"); -void vblankcb_mystery_gift_e_reader_run(void) +static void VBlankCB_MysteryGiftEReader(void) { ProcessSpriteCopyRequests(); LoadOam(); @@ -363,7 +364,7 @@ void CB2_MysteryGiftEReader(void) BuildOamBuffer(); } -bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) +bool32 HandleMysteryGiftOrEReaderSetup(s32 isEReader) { switch (gMain.state) { @@ -376,24 +377,24 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) ScanlineEffect_Stop(); ResetBgsAndClearDma3BusyFlags(1); - InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + InitBgsFromTemplates(0, sBGTemplates, ARRAY_COUNT(sBGTemplates)); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); - SetBgTilemapBuffer(3, Alloc(0x800)); - SetBgTilemapBuffer(2, Alloc(0x800)); - SetBgTilemapBuffer(1, Alloc(0x800)); - SetBgTilemapBuffer(0, Alloc(0x800)); + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); LoadUserWindowGfx2(0, 10, 0xE0); LoadStdWindowGfxOnBg(0, 1, 0xF0); - DecompressAndLoadBgGfxUsingHeap(3, gUnkTextboxBorderGfx, 0x100, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sTextboxBorder_Gfx, 0x100, 0, 0); InitWindows(sMainWindows); DeactivateAllTextPrinters(); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); @@ -403,13 +404,13 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) gMain.state++; break; case 1: - LoadPalette(gUnkTextboxBorderPal, 0, 0x20); + LoadPalette(sTextboxBorder_Pal, 0, 0x20); LoadPalette(GetTextWindowPalette(2), 0xd0, 0x20); FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0x11); FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); MG_DrawCheckerboardPattern(); - PrintMysteryGiftOrEReaderTopMenu(mg_or_ereader, 0); + PrintMysteryGiftOrEReaderTopMenu(isEReader, FALSE); gMain.state++; break; case 2: @@ -423,7 +424,7 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) ShowBg(0); ShowBg(3); PlayBGM(MUS_MYSTERY_GIFT); - SetVBlankCallback(vblankcb_mystery_gift_e_reader_run); + SetVBlankCallback(VBlankCB_MysteryGiftEReader); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); return TRUE; } @@ -431,23 +432,23 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) return FALSE; } -void c2_mystery_gift(void) +void CB2_InitMysteryGift(void) { - if (HandleMysteryGiftOrEReaderSetup(0)) + if (HandleMysteryGiftOrEReaderSetup(FALSE)) { SetMainCallback2(CB2_MysteryGiftEReader); gGiftIsFromEReader = FALSE; - task_add_00_mystery_gift(); + CreateMysteryGiftTask(); } } -void c2_ereader(void) +void CB2_InitEReader(void) { - if (HandleMysteryGiftOrEReaderSetup(1)) + if (HandleMysteryGiftOrEReaderSetup(TRUE)) { SetMainCallback2(CB2_MysteryGiftEReader); gGiftIsFromEReader = TRUE; - task_add_00_ereader(); + CreateEReaderTask(); } } @@ -462,22 +463,22 @@ void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void) SetMainCallback2(CB2_InitTitleScreen); } -void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCancel) +void PrintMysteryGiftOrEReaderTopMenu(bool8 isEReader, bool32 useCancel) { - const u8 * src; + const u8 * options; s32 width; FillWindowPixelBuffer(0, 0x00); - if (!mg_or_ereader) + if (!isEReader) { - src = usePickOkCancel == TRUE ? gText_PickOKExit : gText_PickOKCancel; - AddTextPrinterParameterized4(0, FONT_2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift2); - width = 222 - GetStringWidth(FONT_0, src, 0); - AddTextPrinterParameterized4(0, FONT_0, width, 2, 0, 0, sMG_Ereader_TextColor_1, 0, src); + options = useCancel == TRUE ? gText_PickOKExit : gText_PickOKCancel; + AddTextPrinterParameterized4(0, FONT_2, 2, 2, 0, 0, sTextColors_TopMenu, 0, gText_MysteryGift2); + width = 222 - GetStringWidth(FONT_0, options, 0); + AddTextPrinterParameterized4(0, FONT_0, width, 2, 0, 0, sTextColors_TopMenu, 0, options); } else { - AddTextPrinterParameterized4(0, FONT_2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gJPText_MysteryGift); - AddTextPrinterParameterized4(0, FONT_0, 0x78, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gJPText_DecideStop); + AddTextPrinterParameterized4(0, FONT_2, 2, 2, 0, 0, sTextColors_TopMenu, 0, gJPText_MysteryGift); + AddTextPrinterParameterized4(0, FONT_0, 120, 2, 0, 0, sTextColors_TopMenu, 0, gJPText_DecideStop); } CopyWindowToVram(0, COPYWIN_GFX); PutWindowTilemap(0); @@ -499,13 +500,9 @@ void MG_DrawCheckerboardPattern(void) for (j = 0; j < 32; j++) { if ((i & 1) != (j & 1)) - { FillBgTilemapBufferRect(3, 1, j, i + 2, 1, 1, 0x11); - } else - { FillBgTilemapBufferRect(3, 2, j, i + 2, 1, 1, 0x11); - } } } } @@ -534,13 +531,16 @@ void AddTextPrinterToWindow1(const u8 *str) CopyWindowToVram(1, COPYWIN_FULL); } -void ClearTextWindow(void) +static void ClearTextWindow(void) { rbox_fill_rectangle(1); ClearWindowTilemap(1); CopyWindowToVram(1, COPYWIN_MAP); } +#define DOWN_ARROW_X 208 +#define DOWN_ARROW_Y 20 + bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) { switch (*textState) @@ -549,7 +549,7 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) AddTextPrinterToWindow1(str); goto inc; case 1: - DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); if (JOY_NEW(A_BUTTON | B_BUTTON)) { inc: @@ -557,7 +557,7 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) } break; case 2: - DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); *textState = 0; ClearTextWindow(); return TRUE; @@ -568,26 +568,25 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) return FALSE; } -void HideDownArrow(void) +static void HideDownArrow(void) { - DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } -void ShowDownArrow(void) +static void ShowDownArrow(void) { - DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } -bool32 unref_HideDownArrowAndWaitButton(u8 * textState) +// Unused +static bool32 HideDownArrowAndWaitButton(u8 * textState) { switch (*textState) { case 0: HideDownArrow(); if (JOY_NEW(A_BUTTON | B_BUTTON)) - { (*textState)++; - } break; case 1: ShowDownArrow(); @@ -597,12 +596,11 @@ bool32 unref_HideDownArrowAndWaitButton(u8 * textState) return FALSE; } -bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str) +static bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str) { if (*counter == 0) - { AddTextPrinterToWindow1(str); - } + if (++(*counter) > 120) { *counter = 0; @@ -615,7 +613,7 @@ bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str) } } -u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) +static u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) { struct ListMenuTemplate listMenuTemplate = sListMenuTemplate_ThreeOptions; struct WindowTemplate windowTemplate = sWindowTemplate_ThreeOptions; @@ -625,13 +623,10 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) u32 i; if (whichMenu == 0) - { listMenuTemplate.items = sListMenuItems_CardsOrNews; - } else - { listMenuTemplate.items = sListMenuItems_WirelessOrFriend; - } + width = 0; for (i = 0; i < listMenuTemplate.totalItems; i++) { @@ -643,7 +638,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) windowTemplate.width = finalWidth; windowTemplate.tilemapLeft = (30 - finalWidth) / 2; response = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, 0x00A, 0xE0); - if (response != -1) + if (response != LIST_NOTHING_CHOSEN) { ClearWindowTilemap(2); CopyWindowToVram(2, COPYWIN_MAP); @@ -659,15 +654,12 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c switch (*textState) { case 0: + // Print question message StringExpandPlaceholders(gStringVar4, str); if (yesNoBoxPlacement == 0) - { - *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width28); - } + *windowId = AddWindow(&sWindowTemplate_YesNoMsg_Wide); else - { - *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width20); - } + *windowId = AddWindow(&sWindowTemplate_YesNoMsg); FillWindowPixelBuffer(*windowId, 0x11); AddTextPrinterParameterized4(*windowId, FONT_2, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); DrawTextBorderOuter(*windowId, 0x001, 0x0F); @@ -676,21 +668,19 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c (*textState)++; break; case 1: + // Create Yes/No windowTemplate = sWindowTemplate_YesNoBox; if (yesNoBoxPlacement == 0) - { windowTemplate.tilemapTop = 9; - } else - { windowTemplate.tilemapTop = 15; - } CreateYesNoMenu(&windowTemplate, FONT_2, 0, 2, 10, 14, 0); (*textState)++; break; case 2: + // Handle Yes/No input input = Menu_ProcessInputNoWrapClearOnChoose(); - if (input == -1 || input == 0 || input == 1) + if (input == MENU_B_PRESSED || input == 0 || input == 1) { *textState = 0; rbox_fill_rectangle(*windowId); @@ -706,13 +696,14 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c ClearWindowTilemap(*windowId); CopyWindowToVram(*windowId, COPYWIN_MAP); RemoveWindow(*windowId); - return -1; + return MENU_B_PRESSED; } - return -2; + return MENU_NOTHING_CHOSEN; } -s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend) +// Handle the "Receive/Send/Toss" menu that appears when selecting Wonder Card/News +static s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend) { struct WindowTemplate windowTemplate; s32 input; @@ -720,15 +711,12 @@ s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, switch (*textState) { case 0: - if (cannotToss == 0) - { + // Print menu message + if (!cannotToss) StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards); - } else - { StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews); - } - *windowId = AddWindow(&sMysteryGiftMenuWindowTemplate); + *windowId = AddWindow(&sWindowTemplate_GiftSelect); FillWindowPixelBuffer(*windowId, 0x11); AddTextPrinterParameterized4(*windowId, FONT_2, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); DrawTextBorderOuter(*windowId, 0x001, 0x0F); @@ -740,27 +728,19 @@ s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, windowTemplate = sWindowTemplate_YesNoBox; if (cannotSend) { - if (cannotToss == 0) - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveToss, 1, 0x00A, 0xE0); - } + if (!cannotToss) + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_2Options, &sListMenu_ReceiveToss, 1, 0x00A, 0xE0); else - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by4, &sListMenu_Receive, 1, 0x00A, 0xE0); - } + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_1Option, &sListMenu_Receive, 1, 0x00A, 0xE0); } else { - if (cannotToss == 0) - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by8, &sListMenu_ReceiveSendToss, 1, 0x00A, 0xE0); - } + if (!cannotToss) + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_3Options, &sListMenu_ReceiveSendToss, 1, 0x00A, 0xE0); else - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveSend, 1, 0x00A, 0xE0); - } + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_2Options, &sListMenu_ReceiveSend, 1, 0x00A, 0xE0); } - if (input != -1) + if (input != LIST_NOTHING_CHOSEN) { *textState = 0; rbox_fill_rectangle(*windowId); @@ -776,54 +756,42 @@ s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, ClearWindowTilemap(*windowId); CopyWindowToVram(*windowId, COPYWIN_MAP); RemoveWindow(*windowId); - return -2; + return LIST_CANCEL; } - return -1; + return LIST_NOTHING_CHOSEN; } -bool32 ValidateCardOrNews(bool32 cardOrNews) +static bool32 ValidateCardOrNews(bool32 isWonderNews) { - if (cardOrNews == 0) + if (!isWonderNews) return ValidateSavedWonderCard(); else return ValidateSavedWonderNews(); } -bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) +static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 isWonderNews) { - s32 v0; - switch (*state) { case 0: - if (cardOrNews == 0) - { + if (!isWonderNews) WonderCard_Init(GetSavedWonderCard(), GetSavedWonderCardMetadata()); - } else - { WonderNews_Init(GetSavedWonderNews()); - } (*state)++; break; case 1: - if (cardOrNews == 0) + if (!isWonderNews) { - v0 = WonderCard_Enter(); - check: - if (v0 != 0) - { - goto done; - } - break; + if (!WonderCard_Enter()) + return FALSE; } else { - v0 = WonderNews_Enter(); - goto check; + if (!WonderNews_Enter()) + return FALSE; } - done: *state = 0; return TRUE; } @@ -831,20 +799,20 @@ bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) return FALSE; } -bool32 DestroyNewsOrCard(bool32 cardOrNews) +static bool32 ClearSavedNewsOrCard(bool32 isWonderNews) { - if (cardOrNews == 0) + if (!isWonderNews) ClearSavedWonderCardAndRelated(); else ClearSavedWonderNewsAndRelated(); return TRUE; } -bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) +static bool32 ExitWonderCardOrNews(bool32 isWonderNews, bool32 useCancel) { - if (cardOrNews == 0) + if (!isWonderNews) { - if (WonderCard_Exit(arg1) != 0) + if (WonderCard_Exit(useCancel)) { WonderCard_Destroy(); return TRUE; @@ -856,7 +824,7 @@ bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) } else { - if (WonderNews_Exit(arg1) != 0) + if (WonderNews_Exit(useCancel)) { WonderNews_Destroy(); return TRUE; @@ -868,23 +836,23 @@ bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) } } -s32 mevent_message_prompt_discard(u8 * textState, u16 * windowId, bool32 cardOrNews) +static s32 AskDiscardGift(u8 * textState, u16 * windowId, bool32 isWonderNews) { - if (cardOrNews == 0) + if (!isWonderNews) return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); else return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_OkayToDiscardNews); } -bool32 mevent_message_was_thrown_away(u8 * textState, bool32 cardOrNews) +static bool32 PrintThrownAway(u8 * textState, bool32 isWonderNews) { - if (cardOrNews == 0) + if (!isWonderNews) return PrintMysteryGiftMenuMessage(textState, gText_WonderCardThrownAway); else return PrintMysteryGiftMenuMessage(textState, gText_WonderNewsThrownAway); } -bool32 mevent_save_game(u8 * state) +static bool32 SaveOnMysteryGiftMenu(u8 * state) { switch (*state) { @@ -902,9 +870,7 @@ bool32 mevent_save_game(u8 * state) break; case 3: if (JOY_NEW(A_BUTTON | B_BUTTON)) - { (*state)++; - } break; case 4: *state = 0; @@ -915,94 +881,92 @@ bool32 mevent_save_game(u8 * state) return FALSE; } -const u8 * mevent_message(u32 * flag_p, u8 cardOrNews, u8 cardOrNewsSource, u32 msgId) +static const u8 * GetClientResultMessage(bool32 * successMsg, bool8 isWonderNews, bool8 sourceIsFriend, u32 msgId) { const u8 * msg = NULL; - *flag_p = 0; + *successMsg = FALSE; switch (msgId) { - case 0: - *flag_p = 0; + case CLI_MSG_NOTHING_SENT: + *successMsg = FALSE; msg = gText_NothingSentOver; break; - case 1: - *flag_p = 0; + case CLI_MSG_RECORD_UPLOADED: + *successMsg = FALSE; msg = gText_RecordUploadedViaWireless; break; - case 2: - *flag_p = 1; - msg = cardOrNewsSource == 0 ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; + case CLI_MSG_CARD_RECEIVED: + *successMsg = TRUE; + msg = !sourceIsFriend ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; break; - case 3: - *flag_p = 1; - msg = cardOrNewsSource == 0 ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; + case CLI_MSG_NEWS_RECEIVED: + *successMsg = TRUE; + msg = !sourceIsFriend ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; break; - case 4: - *flag_p = 1; + case CLI_MSG_STAMP_RECEIVED: + *successMsg = TRUE; msg = gText_NewStampReceived; break; - case 5: - *flag_p = 0; + case CLI_MSG_HAD_CARD: + *successMsg = FALSE; msg = gText_AlreadyHadCard; break; - case 6: - *flag_p = 0; + case CLI_MSG_HAD_STAMP: + *successMsg = FALSE; msg = gText_AlreadyHadStamp; break; - case 7: - *flag_p = 0; + case CLI_MSG_HAD_NEWS: + *successMsg = FALSE; msg = gText_AlreadyHadNews; break; - case 8: - *flag_p = 0; + case CLI_MSG_NO_ROOM_STAMPS: + *successMsg = FALSE; msg = gText_NoMoreRoomForStamps; break; - case 9: - *flag_p = 0; + case CLI_MSG_COMM_CANCELED: + *successMsg = FALSE; msg = gText_CommunicationCanceled; break; - case 10: - *flag_p = 0; - msg = cardOrNews == 0 ? gText_CantAcceptCardFromTrainer : gText_CantAcceptNewsFromTrainer; + case CLI_MSG_CANT_ACCEPT: + *successMsg = FALSE; + msg = !isWonderNews ? gText_CantAcceptCardFromTrainer : gText_CantAcceptNewsFromTrainer; break; - case 11: - *flag_p = 0; + case CLI_MSG_COMM_ERROR: + *successMsg = FALSE; msg = gText_CommunicationError; break; - case 12: - *flag_p = 1; + case CLI_MSG_TRAINER_RECEIVED: + *successMsg = TRUE; msg = gText_NewTrainerReceived; break; - case 13: - *flag_p = 1; + case CLI_MSG_BUFFER_SUCCESS: + *successMsg = TRUE; + // msg is NULL, use buffer break; - case 14: - *flag_p = 0; + case CLI_MSG_BUFFER_FAILURE: + *successMsg = FALSE; + // msg is NULL, use buffer break; } return msg; } -bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2) +static bool32 PrintSuccessMessage(u8 * state, const u8 * msg, u16 * timer) { switch (*state) { case 0: - if (arg1 != NULL) - { - AddTextPrinterToWindow1(arg1); - } + if (msg != NULL) + AddTextPrinterToWindow1(msg); PlayFanfare(MUS_OBTAIN_ITEM); - *arg2 = 0; + *timer = 0; (*state)++; break; case 1: - if (++(*arg2) > 0xF0) - { + if (++(*timer) > 240) (*state)++; - } break; case 2: if (IsFanfareTaskInactive()) @@ -1016,556 +980,566 @@ bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2) return FALSE; } -const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 msgId) +static const u8 * GetServerResultMessage(bool32 * wonderSuccess, u8 unused, u32 msgId) { const u8 * result = gText_CommunicationError; - *a0 = 0; + *wonderSuccess = FALSE; switch (msgId) { - case 0: + case SVR_MSG_NOTHING_SENT: result = gText_NothingSentOver; break; - case 1: + case SVR_MSG_RECORD_UPLOADED: result = gText_RecordUploadedViaWireless; break; - case 2: + case SVR_MSG_CARD_SENT: result = gText_WonderCardSentTo; - *a0 = 1; + *wonderSuccess = TRUE; break; - case 3: + case SVR_MSG_NEWS_SENT: result = gText_WonderNewsSentTo; - *a0 = 1; + *wonderSuccess = TRUE; break; - case 4: + case SVR_MSG_STAMP_SENT: result = gText_StampSentTo; break; - case 5: + case SVR_MSG_HAS_CARD: result = gText_OtherTrainerHasCard; break; - case 6: + case SVR_MSG_HAS_STAMP: result = gText_OtherTrainerHasStamp; break; - case 7: + case SVR_MSG_HAS_NEWS: result = gText_OtherTrainerHasNews; break; - case 8: + case SVR_MSG_NO_ROOM_STAMPS: result = gText_NoMoreRoomForStamps; break; - case 9: + case SVR_MSG_CLIENT_CANCELED: result = gText_OtherTrainerCanceled; break; - case 10: + case SVR_MSG_CANT_SEND_GIFT_1: result = gText_CantSendGiftToTrainer; break; - case 11: + case SVR_MSG_COMM_ERROR: result = gText_CommunicationError; break; - case 12: + case SVR_MSG_GIFT_SENT_1: result = gText_GiftSentTo; break; - case 13: + case SVR_MSG_GIFT_SENT_2: result = gText_GiftSentTo; break; - case 14: + case SVR_MSG_CANT_SEND_GIFT_2: result = gText_CantSendGiftToTrainer; break; } return result; } -static bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId) +static bool32 PrintServerResultMessage(u8 * state, u16 * timer, bool8 sourceIsFriend, u32 msgId) { - u32 flag; - const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, msgId); - if (flag) - { - return PrintMGSuccessMessage(state, str, arg1); - } + bool32 wonderSuccess; + const u8 * str = GetServerResultMessage(&wonderSuccess, sourceIsFriend, msgId); + if (wonderSuccess) + return PrintSuccessMessage(state, str, timer); else - { return PrintMysteryGiftMenuMessage(state, str); - } } -void task_add_00_mystery_gift(void) +// States for Task_MysteryGift. +// CLIENT states are for when the player is receiving a gift, and use mystery_gift_client.c link functions. +// SERVER states are for when the player is sending a gift, and use mystery_gift_server.c link functions. +// Other states handle the general Mystery Gift menu usage. +enum { + MG_STATE_TO_MAIN_MENU, + MG_STATE_MAIN_MENU, + MG_STATE_DONT_HAVE_ANY, + MG_STATE_SOURCE_PROMPT, + MG_STATE_SOURCE_PROMPT_INPUT, + MG_STATE_CLIENT_LINK_START, + MG_STATE_CLIENT_LINK_WAIT, + MG_STATE_CLIENT_COMMUNICATING, + MG_STATE_CLIENT_LINK, + MG_STATE_CLIENT_YES_NO, + MG_STATE_CLIENT_MESSAGE, + MG_STATE_CLIENT_ASK_TOSS, + MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED, + MG_STATE_CLIENT_LINK_END, + MG_STATE_CLIENT_COMM_COMPLETED, + MG_STATE_CLIENT_RESULT_MSG, + MG_STATE_CLIENT_ERROR, + MG_STATE_SAVE_LOAD_GIFT, + MG_STATE_LOAD_GIFT, + MG_STATE_UNUSED, + MG_STATE_HANDLE_GIFT_INPUT, + MG_STATE_HANDLE_GIFT_SELECT, + MG_STATE_ASK_TOSS, + MG_STATE_ASK_TOSS_UNRECEIVED, + MG_STATE_TOSS, + MG_STATE_TOSS_SAVE, + MG_STATE_TOSSED, + MG_STATE_GIFT_INPUT_EXIT, + MG_STATE_RECEIVE, + MG_STATE_SEND, + MG_STATE_SERVER_LINK_WAIT, + MG_STATE_SERVER_LINK_START, + MG_STATE_SERVER_LINK, + MG_STATE_SERVER_LINK_END, + MG_STATE_SERVER_LINK_END_WAIT, + MG_STATE_SERVER_RESULT_MSG, + MG_STATE_SERVER_ERROR, + MG_STATE_EXIT, +}; + +static void CreateMysteryGiftTask(void) { - u8 taskId = CreateTask(task00_mystery_gift, 0); + u8 taskId = CreateTask(Task_MysteryGift, 0); struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; - data->state = 0; + data->state = MG_STATE_TO_MAIN_MENU; data->textState = 0; - data->unkA = 0; - data->unkB = 0; - data->IsCardOrNews = 0; - data->source = 0; - data->curPromptWindowId = 0; - data->unk2 = 0; - data->unk4 = 0; - data->unk6 = 0; - data->prevPromptWindowId = 0; - data->buffer = AllocZeroed(0x40); + data->unused4 = 0; + data->unused5 = 0; + data->isWonderNews = FALSE; + data->sourceIsFriend = FALSE; + data->var = 0; + data->unused1 = 0; + data->unused2 = 0; + data->unused3 = 0; + data->msgId = 0; + data->clientMsg = AllocZeroed(CLIENT_MAX_MSG_SIZE); } -void task00_mystery_gift(u8 taskId) +static void Task_MysteryGift(u8 taskId) { struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; - u32 sp0, flag; - const u8 * r1; + bool32 successMsg, input; + const u8 * msg; switch (data->state) { - case 0: - data->state = 1; + case MG_STATE_TO_MAIN_MENU: + data->state = MG_STATE_MAIN_MENU; break; - case 1: - switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, FALSE)) + case MG_STATE_MAIN_MENU: + // Main Mystery Gift menu, player can select Wonder Cards or News (or exit) + switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->var, FALSE)) { - case 0: - data->IsCardOrNews = 0; + case 0: // "Wonder Cards" + data->isWonderNews = FALSE; if (ValidateSavedWonderCard() == TRUE) - data->state = 18; + data->state = MG_STATE_LOAD_GIFT; else - data->state = 2; + data->state = MG_STATE_DONT_HAVE_ANY; break; - case 1: - data->IsCardOrNews = 1; + case 1: // "Wonder News" + data->isWonderNews = TRUE; if (ValidateSavedWonderNews() == TRUE) - data->state = 18; + data->state = MG_STATE_LOAD_GIFT; else - data->state = 2; + data->state = MG_STATE_DONT_HAVE_ANY; break; - case -2u: - data->state = 37; + case LIST_CANCEL: + data->state = MG_STATE_EXIT; break; } break; - case 2: + case MG_STATE_DONT_HAVE_ANY: { - if (data->IsCardOrNews == 0) + // Player doesn't have any Wonder Card/News + // Start prompt to ask where to read one from + if (!data->isWonderNews) { if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveCardNewOneInput)) { - data->state = 3; - PrintMysteryGiftOrEReaderTopMenu(0, 1); + data->state = MG_STATE_SOURCE_PROMPT; + PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); } } else { if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveNewsNewOneInput)) { - data->state = 3; - PrintMysteryGiftOrEReaderTopMenu(0, 1); + data->state = MG_STATE_SOURCE_PROMPT; + PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); } } break; } - case 3: - if (data->IsCardOrNews == 0) - { + case MG_STATE_SOURCE_PROMPT: + if (!data->isWonderNews) AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed); - } else - { AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed); - } - data->state = 4; + data->state = MG_STATE_SOURCE_PROMPT_INPUT; break; - case 4: - switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, TRUE)) + case MG_STATE_SOURCE_PROMPT_INPUT: + // Choose where to access the Wonder Card/News from + switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->var, TRUE)) { - case 0: + case 0: // "Wireless Communication" ClearTextWindow(); - data->state = 5; - data->source = 0; + data->state = MG_STATE_CLIENT_LINK_START; + data->sourceIsFriend = FALSE; break; - case 1: + case 1: // "Friend" ClearTextWindow(); - data->state = 5; - data->source = 1; + data->state = MG_STATE_CLIENT_LINK_START; + data->sourceIsFriend = TRUE; break; - case -2u: + case LIST_CANCEL: ClearTextWindow(); - if (ValidateCardOrNews(data->IsCardOrNews)) + if (ValidateCardOrNews(data->isWonderNews)) { - data->state = 18; + data->state = MG_STATE_LOAD_GIFT; } else { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); } break; } break; - case 5: + case MG_STATE_CLIENT_LINK_START: *gStringVar1 = EOS; *gStringVar2 = EOS; *gStringVar3 = EOS; - switch (data->IsCardOrNews) + switch (data->isWonderNews) { - case 0: - if (data->source == 1) + case FALSE: + if (data->sourceIsFriend == TRUE) CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_CARD); - else if (data->source == 0) + else if (data->sourceIsFriend == FALSE) CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_CARD); break; - case 1: - if (data->source == 1) + case TRUE: + if (data->sourceIsFriend == TRUE) CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_NEWS); - else if (data->source == 0) + else if (data->sourceIsFriend == FALSE) CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_NEWS); break; } - data->state = 6; + data->state = MG_STATE_CLIENT_LINK_WAIT; break; - case 6: + case MG_STATE_CLIENT_LINK_WAIT: if (gReceivedRemoteLinkPlayers) { ClearScreenInBg0(TRUE); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; MysteryGiftClient_Create(); } - else if (gSpecialVar_Result == 5) + else if (gSpecialVar_Result == LINKUP_FAILED) { + // Link failed, return to link start menu ClearScreenInBg0(TRUE); - data->state = 3; + data->state = MG_STATE_SOURCE_PROMPT; } break; - case 7: + case MG_STATE_CLIENT_COMMUNICATING: AddTextPrinterToWindow1(gText_Communicating); - data->state = 8; + data->state = MG_STATE_CLIENT_LINK; break; - case 8: - switch (MysteryGiftClient_Run(&data->curPromptWindowId)) + case MG_STATE_CLIENT_LINK: + switch (MysteryGiftClient_Run(&data->var)) { - case 6: // done + case CLI_RET_END: Rfu_SetCloseLinkCallback(); - data->prevPromptWindowId = data->curPromptWindowId; - data->state = 13; + data->msgId = data->var; + data->state = MG_STATE_CLIENT_LINK_END; break; - case 5: - memcpy(data->buffer, MysteryGiftClient_GetMsg(), 0x40); + case CLI_RET_COPY_MSG: + memcpy(data->clientMsg, MysteryGiftClient_GetMsg(), CLIENT_MAX_MSG_SIZE); MysteryGiftClient_AdvanceState(); break; - case 3: - data->state = 10; + case CLI_RET_PRINT_MSG: + data->state = MG_STATE_CLIENT_MESSAGE; break; - case 2: - data->state = 9; + case CLI_RET_YES_NO: + data->state = MG_STATE_CLIENT_YES_NO; break; - case 4: - data->state = 11; + case CLI_RET_ASK_TOSS: + data->state = MG_STATE_CLIENT_ASK_TOSS; StringCopy(gStringVar1, gLinkPlayers[0].name); break; } break; - case 9: - flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, MysteryGiftClient_GetMsg()); - switch (flag) + case MG_STATE_CLIENT_YES_NO: + input = DoMysteryGiftYesNo(&data->textState, &data->var, FALSE, MysteryGiftClient_GetMsg()); + switch (input) { - case 0: - MysteryGiftClient_SetParam(0); + case 0: // Yes + MysteryGiftClient_SetParam(FALSE); MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; break; - case 1: - MysteryGiftClient_SetParam(1); + case 1: // No + case MENU_B_PRESSED: + MysteryGiftClient_SetParam(TRUE); MysteryGiftClient_AdvanceState(); - data->state = 7; - break; - case -1u: - MysteryGiftClient_SetParam(1); - MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; break; } break; - case 10: + case MG_STATE_CLIENT_MESSAGE: if (PrintMysteryGiftMenuMessage(&data->textState, MysteryGiftClient_GetMsg())) { MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; } break; - case 11: - flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard); - switch (flag) + case MG_STATE_CLIENT_ASK_TOSS: + // Player is receiving a new Wonder Card/News but needs to toss an existing one to make room. + // Ask for confirmation. + input = DoMysteryGiftYesNo(&data->textState, &data->var, FALSE, gText_ThrowAwayWonderCard); + switch (input) { - case 0: + case 0: // Yes if (IsSavedWonderCardGiftNotReceived() == TRUE) { - data->state = 12; + data->state = MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED; } else { - MysteryGiftClient_SetParam(0); + MysteryGiftClient_SetParam(FALSE); MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; } break; - case 1: - MysteryGiftClient_SetParam(1); + case 1: // No + case MENU_B_PRESSED: + MysteryGiftClient_SetParam(TRUE); MysteryGiftClient_AdvanceState(); - data->state = 7; - break; - case -1u: - MysteryGiftClient_SetParam(1); - MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; break; } break; - case 12: - flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift); - switch (flag) + case MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED: + // Player has selected to toss a Wonder Card that they haven't received the gift for. + // Ask for confirmation again. + input = DoMysteryGiftYesNo(&data->textState, &data->var, FALSE, gText_HaventReceivedCardsGift); + switch (input) { - case 0: - MysteryGiftClient_SetParam(0); + case 0: // Yes + MysteryGiftClient_SetParam(FALSE); MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; break; - case 1: - MysteryGiftClient_SetParam(1); + case 1: // No + case MENU_B_PRESSED: + MysteryGiftClient_SetParam(TRUE); MysteryGiftClient_AdvanceState(); - data->state = 7; - break; - case -1u: - MysteryGiftClient_SetParam(1); - MysteryGiftClient_AdvanceState(); - data->state = 7; + data->state = MG_STATE_CLIENT_COMMUNICATING; break; } break; - case 13: + case MG_STATE_CLIENT_LINK_END: if (IsLinkRfuTaskFinished()) { DestroyWirelessStatusIndicatorSprite(); - data->state = 14; + data->state = MG_STATE_CLIENT_COMM_COMPLETED; } break; - case 14: + case MG_STATE_CLIENT_COMM_COMPLETED: if (PrintStringAndWait2Seconds(&data->textState, gText_CommunicationCompleted)) { - if (data->source == 1) - { + if (data->sourceIsFriend == TRUE) StringCopy(gStringVar1, gLinkPlayers[0].name); - } - data->state = 15; + data->state = MG_STATE_CLIENT_RESULT_MSG; } break; - case 15: - r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId); - if (r1 == NULL) - r1 = data->buffer; - if (sp0) - flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId); + case MG_STATE_CLIENT_RESULT_MSG: + msg = GetClientResultMessage(&successMsg, data->isWonderNews, data->sourceIsFriend, data->msgId); + if (msg == NULL) + msg = data->clientMsg; + if (successMsg) + input = PrintSuccessMessage(&data->textState, msg, &data->var); else - flag = PrintMysteryGiftMenuMessage(&data->textState, r1); + input = PrintMysteryGiftMenuMessage(&data->textState, msg); - if (flag) + // input var re-used, here it is TRUE if the message is finished + if (input) { - if (data->prevPromptWindowId == 3) + if (data->msgId == CLI_MSG_NEWS_RECEIVED) { - if (data->source == 1) - WonderNews_SetReward(1); + if (data->sourceIsFriend == TRUE) + WonderNews_SetReward(WONDER_NEWS_RECV_FRIEND); else - WonderNews_SetReward(2); + WonderNews_SetReward(WONDER_NEWS_RECV_WIRELESS); } - if (sp0 == 0) + if (!successMsg) { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); + // Did not receive card/news, return to main menu + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); } else { - data->state = 17; + data->state = MG_STATE_SAVE_LOAD_GIFT; } } break; - case 16: - if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) + case MG_STATE_SAVE_LOAD_GIFT: + if (SaveOnMysteryGiftMenu(&data->textState)) { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); } break; - case 17: - if (mevent_save_game(&data->textState)) - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } + case MG_STATE_LOAD_GIFT: + if (HandleLoadWonderCardOrNews(&data->textState, data->isWonderNews)) + data->state = MG_STATE_HANDLE_GIFT_INPUT; break; - case 18: - if (HandleLoadWonderCardOrNews(&data->textState, data->IsCardOrNews)) - { - data->state = 20; - } - break; - case 20: - if (data->IsCardOrNews == 0) + case MG_STATE_HANDLE_GIFT_INPUT: + if (!data->isWonderNews) { + // Handle Wonder Card input if (JOY_NEW(A_BUTTON)) - { - data->state = 21; - } + data->state = MG_STATE_HANDLE_GIFT_SELECT; if (JOY_NEW(B_BUTTON)) - { - data->state = 27; - } + data->state = MG_STATE_GIFT_INPUT_EXIT; } else { switch (WonderNews_GetInput(gMain.newKeys)) { - case 0: + case NEWS_INPUT_A: WonderNews_RemoveScrollIndicatorArrowPair(); - data->state = 21; + data->state = MG_STATE_HANDLE_GIFT_SELECT; break; - case 1: - data->state = 27; + case NEWS_INPUT_B: + data->state = MG_STATE_GIFT_INPUT_EXIT; break; } } break; - case 21: + case MG_STATE_HANDLE_GIFT_SELECT: { + // A Wonder Card/News has been selected, handle its menu u32 result; - if (data->IsCardOrNews == 0) + if (!data->isWonderNews) { if (IsSendingSavedWonderCardAllowed()) - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); + result = HandleMysteryGiftListMenu(&data->textState, &data->var, data->isWonderNews, FALSE); else - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); + result = HandleMysteryGiftListMenu(&data->textState, &data->var, data->isWonderNews, TRUE); } else { if (IsSendingSavedWonderNewsAllowed()) - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); + result = HandleMysteryGiftListMenu(&data->textState, &data->var, data->isWonderNews, FALSE); else - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); + result = HandleMysteryGiftListMenu(&data->textState, &data->var, data->isWonderNews, TRUE); } switch (result) { - case 0: - data->state = 28; + case 0: // Receive + data->state = MG_STATE_RECEIVE; break; - case 1: - data->state = 29; + case 1: // Send + data->state = MG_STATE_SEND; break; - case 2: - data->state = 22; + case 2: // Toss + data->state = MG_STATE_ASK_TOSS; break; - case -2u: - if (data->IsCardOrNews == 1) - { + case LIST_CANCEL: + if (data->isWonderNews == TRUE) WonderNews_AddScrollIndicatorArrowPair(); - } - data->state = 20; + data->state = MG_STATE_HANDLE_GIFT_INPUT; break; } break; } - case 22: - switch (mevent_message_prompt_discard(&data->textState, &data->curPromptWindowId, data->IsCardOrNews)) + case MG_STATE_ASK_TOSS: + // Player is attempting to discard a saved Wonder Card/News + switch (AskDiscardGift(&data->textState, &data->var, data->isWonderNews)) { - case 0: - if (data->IsCardOrNews == 0 && IsSavedWonderCardGiftNotReceived() == TRUE) - { - data->state = 23; - } + case 0: // Yes + if (!data->isWonderNews && IsSavedWonderCardGiftNotReceived() == TRUE) + data->state = MG_STATE_ASK_TOSS_UNRECEIVED; else + data->state = MG_STATE_TOSS; + break; + case 1: // No + case MENU_B_PRESSED: + data->state = MG_STATE_HANDLE_GIFT_SELECT; + break; + } + break; + case MG_STATE_ASK_TOSS_UNRECEIVED: + // Player has selected to toss a Wonder Card that they haven't received the gift for. + // Ask for confirmation again. + switch ((u32)DoMysteryGiftYesNo(&data->textState, &data->var, TRUE, gText_HaventReceivedGiftOkayToDiscard)) + { + case 0: // Yes + data->state = MG_STATE_TOSS; + break; + case 1: // No + case MENU_B_PRESSED: + data->state = MG_STATE_HANDLE_GIFT_SELECT; + break; + } + break; + case MG_STATE_TOSS: + if (ExitWonderCardOrNews(data->isWonderNews, TRUE)) + { + ClearSavedNewsOrCard(data->isWonderNews); + data->state = MG_STATE_TOSS_SAVE; + } + break; + case MG_STATE_TOSS_SAVE: + if (SaveOnMysteryGiftMenu(&data->textState)) + data->state = MG_STATE_TOSSED; + break; + case MG_STATE_TOSSED: + if (PrintThrownAway(&data->textState, data->isWonderNews)) + { + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + } + break; + case MG_STATE_GIFT_INPUT_EXIT: + if (ExitWonderCardOrNews(data->isWonderNews, FALSE)) + data->state = MG_STATE_TO_MAIN_MENU; + break; + case MG_STATE_RECEIVE: + if (ExitWonderCardOrNews(data->isWonderNews, TRUE)) + data->state = MG_STATE_SOURCE_PROMPT; + break; + case MG_STATE_SEND: + if (ExitWonderCardOrNews(data->isWonderNews, TRUE)) + { + switch (data->isWonderNews) { - data->state = 24; - } - break; - case 1: - data->state = 21; - break; - case -1: - data->state = 21; - break; - } - break; - case 23: - switch ((u32)DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard)) - { - case 0: - data->state = 24; - break; - case 1: - data->state = 21; - break; - case -1u: - data->state = 21; - break; - } - break; - case 24: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) - { - DestroyNewsOrCard(data->IsCardOrNews); - data->state = 25; - } - break; - case 25: - if (mevent_save_game(&data->textState)) - { - data->state = 26; - } - break; - case 26: - if (mevent_message_was_thrown_away(&data->textState, data->IsCardOrNews)) - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - break; - case 27: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 0)) - { - data->state = 0; - } - break; - case 28: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) - { - data->state = 3; - } - break; - case 29: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) - { - switch (data->IsCardOrNews) - { - case 0: + case FALSE: CreateTask_SendMysteryGift(ACTIVITY_WONDER_CARD); break; - case 1: + case TRUE: CreateTask_SendMysteryGift(ACTIVITY_WONDER_NEWS); break; } - data->source = 1; - data->state = 30; + data->sourceIsFriend = TRUE; + data->state = MG_STATE_SERVER_LINK_WAIT; } break; - case 30: + case MG_STATE_SERVER_LINK_WAIT: if (gReceivedRemoteLinkPlayers) { - ClearScreenInBg0(1); - data->state = 31; + ClearScreenInBg0(TRUE); + data->state = MG_STATE_SERVER_LINK_START; } - else if (gSpecialVar_Result == 5) + else if (gSpecialVar_Result == LINKUP_FAILED) { - ClearScreenInBg0(1); - data->state = 18; + ClearScreenInBg0(TRUE); + data->state = MG_STATE_LOAD_GIFT; } break; - case 31: + case MG_STATE_SERVER_LINK_START: *gStringVar1 = EOS; *gStringVar2 = EOS; *gStringVar3 = EOS; - if (data->IsCardOrNews == 0) + if (!data->isWonderNews) { AddTextPrinterToWindow1(gText_SendingWonderCard); MysterGiftServer_CreateForCard(); @@ -1575,53 +1549,54 @@ void task00_mystery_gift(u8 taskId) AddTextPrinterToWindow1(gText_SendingWonderNews); MysterGiftServer_CreateForNews(); } - data->state = 32; + data->state = MG_STATE_SERVER_LINK; break; - case 32: - if (MysterGiftServer_Run(&data->curPromptWindowId) == 3) + case MG_STATE_SERVER_LINK: + if (MysterGiftServer_Run(&data->var) == SVR_RET_END) { - data->prevPromptWindowId = data->curPromptWindowId; - data->state = 33; + data->msgId = data->var; + data->state = MG_STATE_SERVER_LINK_END; } break; - case 33: + case MG_STATE_SERVER_LINK_END: Rfu_SetCloseLinkCallback(); StringCopy(gStringVar1, gLinkPlayers[1].name); - data->state = 34; + data->state = MG_STATE_SERVER_LINK_END_WAIT; break; - case 34: + case MG_STATE_SERVER_LINK_END_WAIT: if (IsLinkRfuTaskFinished()) { DestroyWirelessStatusIndicatorSprite(); - data->state = 35; + data->state = MG_STATE_SERVER_RESULT_MSG; } break; - case 35: - if (PrintMGSendStatus(&data->textState, &data->curPromptWindowId, data->source, data->prevPromptWindowId)) + case MG_STATE_SERVER_RESULT_MSG: + if (PrintServerResultMessage(&data->textState, &data->var, data->sourceIsFriend, data->msgId)) { - if (data->source == 1 && data->prevPromptWindowId == 3) + if (data->sourceIsFriend == TRUE && data->msgId == SVR_MSG_NEWS_SENT) { - WonderNews_SetReward(3); - data->state = 17; + WonderNews_SetReward(WONDER_NEWS_SENT); + data->state = MG_STATE_SAVE_LOAD_GIFT; } else { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); } } break; - case 36: + case MG_STATE_CLIENT_ERROR: + case MG_STATE_SERVER_ERROR: if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); } break; - case 37: + case MG_STATE_EXIT: CloseLink(); HelpSystem_Enable(); - Free(data->buffer); + Free(data->clientMsg); DestroyTask(taskId); SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); break; diff --git a/sym_common.txt b/sym_common.txt index 51b041064..1e57985da 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -40,7 +40,7 @@ .include "fame_checker.o" .include "help_system_util.o" .align 4 - .include "mystery_gift.o" + .include "ereader_screen.o" .align 4 .include "battle_controller_pokedude.o" .align 4 From a19cb44458e774f4d7f98849dcaf12fd5876e818 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 21 Nov 2022 23:52:11 -0500 Subject: [PATCH 34/42] Clean up mystery gift sync, document wonder news --- data/event_scripts.s | 1 + data/maps/CeruleanCity_House4/scripts.inc | 48 +++--- data/mystery_event_msg.s | 6 +- data/specials.inc | 4 +- ...er.png => mystery_gift_textbox_border.png} | Bin include/constants/mystery_gift.h | 8 + include/global.h | 4 +- include/mystery_gift_link.h | 1 - include/mystery_gift_server.h | 6 +- src/easy_chat.c | 2 +- src/field_specials.c | 22 +-- src/mystery_gift_client.c | 1 - src/mystery_gift_link.c | 6 +- src/mystery_gift_menu.c | 6 +- src/mystery_gift_scripts.c | 8 +- src/mystery_gift_server.c | 135 +++++++++-------- src/wonder_news.c | 143 +++++++++--------- 17 files changed, 212 insertions(+), 189 deletions(-) rename graphics/interface/{unk_textbox_border.png => mystery_gift_textbox_border.png} (100%) diff --git a/data/event_scripts.s b/data/event_scripts.s index 5e349996d..d6aa4d512 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -36,6 +36,7 @@ #include "constants/easy_chat.h" #include "constants/trainer_card.h" #include "constants/help_system.h" +#include "constants/mystery_gift.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .set FALSE, 0 diff --git a/data/maps/CeruleanCity_House4/scripts.inc b/data/maps/CeruleanCity_House4/scripts.inc index e812d3b73..42ddde3f2 100644 --- a/data/maps/CeruleanCity_House4/scripts.inc +++ b/data/maps/CeruleanCity_House4/scripts.inc @@ -1,5 +1,8 @@ .set LOCALID_WONDER_NEWS_BERRY_MAN, 1 +.set REWARD_TYPE, VAR_0x8004 +.set REWARD_ITEM, VAR_0x8008 + CeruleanCity_House4_MapScripts:: .byte 0 @@ -7,62 +10,69 @@ CeruleanCity_House4_EventScript_WonderNewsBerryMan:: goto_if_questlog EventScript_ReleaseEnd special QuestLog_CutRecording lock - specialvar VAR_0x8004, GetMENewsJisanItemAndState - copyvar VAR_0x8008, VAR_RESULT - goto_if_eq VAR_0x8004, 0, CeruleanCity_House4_EventScript_NoNews - goto_if_eq VAR_0x8004, 1, CeruleanCity_House4_EventScript_News1 - goto_if_eq VAR_0x8004, 2, CeruleanCity_House4_EventScript_News2 - goto_if_eq VAR_0x8004, 3, CeruleanCity_House4_EventScript_NewsNotSpread - goto_if_eq VAR_0x8004, 4, CeruleanCity_House4_EventScript_NewsSpread1 - goto_if_eq VAR_0x8004, 5, CeruleanCity_House4_EventScript_NewsSpread2 - goto_if_eq VAR_0x8004, 6, CeruleanCity_House4_EventScript_NewsDone + specialvar REWARD_TYPE, WonderNews_GetRewardInfo + copyvar REWARD_ITEM, VAR_RESULT + goto_if_eq REWARD_TYPE, NEWS_REWARD_NONE, CeruleanCity_House4_EventScript_NoNews + goto_if_eq REWARD_TYPE, NEWS_REWARD_RECV_SMALL, CeruleanCity_House4_EventScript_Reward_RecvSmall + goto_if_eq REWARD_TYPE, NEWS_REWARD_RECV_BIG, CeruleanCity_House4_EventScript_Reward_RecvBig + goto_if_eq REWARD_TYPE, NEWS_REWARD_WAITING, CeruleanCity_House4_EventScript_Waiting + goto_if_eq REWARD_TYPE, NEWS_REWARD_SENT_SMALL, CeruleanCity_House4_EventScript_Reward_SentSmall + goto_if_eq REWARD_TYPE, NEWS_REWARD_SENT_BIG, CeruleanCity_House4_EventScript_Reward_SentBig + goto_if_eq REWARD_TYPE, NEWS_REWARD_AT_MAX, CeruleanCity_House4_EventScript_AtMax end +@ Mystery Gift is not enabled, or the player has no saved Wonder News CeruleanCity_House4_EventScript_NoNews:: msgbox CeruleanCity_House4_Text_NothingEntertaining release end -CeruleanCity_House4_EventScript_News1:: +@ Small reward for receiving Wonder News from friend +CeruleanCity_House4_EventScript_Reward_RecvSmall:: call CeruleanCity_House4_EventScript_MovementReactionToNews msgbox CeruleanCity_House4_Text_NewNewsInformativeHaveThis - giveitem VAR_0x8008 + giveitem REWARD_ITEM goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries release end -CeruleanCity_House4_EventScript_News2:: +@ Big reward for receiving Wonder News from non-friend source +CeruleanCity_House4_EventScript_Reward_RecvBig:: call CeruleanCity_House4_EventScript_MovementReactionToNews msgbox CeruleanCity_House4_Text_IncredibleNewsHaveBerries - giveitem VAR_0x8008, 4 + giveitem REWARD_ITEM, 4 goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries release end -CeruleanCity_House4_EventScript_NewsNotSpread:: +@ Player has not recently sent Wonder News +CeruleanCity_House4_EventScript_Waiting:: applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer waitmovement 0 msgbox CeruleanCity_House4_Text_WishCouldShareNewsWithOthers release end -CeruleanCity_House4_EventScript_NewsSpread1:: +@ Small reward for sending Wonder News every 1-3 times +CeruleanCity_House4_EventScript_Reward_SentSmall:: call CeruleanCity_House4_EventScript_MovementReactionToNews msgbox CeruleanCity_House4_Text_ThanksForSpreadingNewsTakeThis - giveitem VAR_0x8008 + giveitem REWARD_ITEM goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries release end -CeruleanCity_House4_EventScript_NewsSpread2:: +@ Big reward for sending Wonder News every 4th time +CeruleanCity_House4_EventScript_Reward_SentBig:: call CeruleanCity_House4_EventScript_MovementReactionToNews msgbox CeruleanCity_House4_Text_MagnificentNewsSpreadHaveBerries - giveitem VAR_0x8008, 4 + giveitem REWARD_ITEM, 4 goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries release end -CeruleanCity_House4_EventScript_NewsDone:: +@ Player has hit reward limit and must wait to receive new rewards +CeruleanCity_House4_EventScript_AtMax:: applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer waitmovement 0 msgbox CeruleanCity_House4_Text_EnjoyingMyselfWithAllSortsOfNews diff --git a/data/mystery_event_msg.s b/data/mystery_event_msg.s index fed033c39..d4fe7faf2 100644 --- a/data/mystery_event_msg.s +++ b/data/mystery_event_msg.s @@ -17,9 +17,9 @@ MysteryEventScript_StampCard:: setvaddress MysteryEventScript_StampCard setorcopyvar VAR_RESULT, 1 - specialvar VAR_0x8008, BattleCardAction + specialvar VAR_0x8008, GetMysteryGiftCardStat setorcopyvar VAR_RESULT, 0 - specialvar VAR_0x8009, BattleCardAction + specialvar VAR_0x8009, GetMysteryGiftCardStat subvar VAR_0x8008, VAR_0x8009 buffernumberstring STR_VAR_1, VAR_0x8008 lock @@ -162,7 +162,7 @@ MysteryEventScript_BattleCard:: setvaddress MysteryEventScript_BattleCard vgoto_if_set FLAG_MYSTERY_GIFT_DONE, MysteryEventScript_BattleCardInfo setorcopyvar VAR_RESULT, 2 - specialvar VAR_0x8008, BattleCardAction + specialvar VAR_0x8008, GetMysteryGiftCardStat vgoto_if_ne VAR_0x8008, 3, MysteryEventScript_BattleCardInfo lock faceplayer diff --git a/data/specials.inc b/data/specials.inc index 5c6e5eb0c..be6e3d575 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -398,10 +398,10 @@ gSpecials:: def_special BufferUnionRoomPlayerName def_special QuestLog_StartRecordingInputsAfterDeferredEvent def_special GetMartClerkObjectId - def_special BattleCardAction + def_special GetMysteryGiftCardStat def_special GetQuestLogState def_special QuestLog_CutRecording - def_special GetMENewsJisanItemAndState + def_special WonderNews_GetRewardInfo def_special GetPCBoxToSendMon def_special OpenMuseumFossilPic def_special CloseMuseumFossilPic diff --git a/graphics/interface/unk_textbox_border.png b/graphics/interface/mystery_gift_textbox_border.png similarity index 100% rename from graphics/interface/unk_textbox_border.png rename to graphics/interface/mystery_gift_textbox_border.png diff --git a/include/constants/mystery_gift.h b/include/constants/mystery_gift.h index 8ff71c3aa..13eb7f103 100644 --- a/include/constants/mystery_gift.h +++ b/include/constants/mystery_gift.h @@ -44,4 +44,12 @@ #define WONDER_CARD_FLAG_OFFSET 1000 +#define NEWS_REWARD_NONE 0 +#define NEWS_REWARD_RECV_SMALL 1 +#define NEWS_REWARD_RECV_BIG 2 +#define NEWS_REWARD_WAITING 3 +#define NEWS_REWARD_SENT_SMALL 4 +#define NEWS_REWARD_SENT_BIG 5 +#define NEWS_REWARD_AT_MAX 6 + #endif //GUARD_CONSTANTS_MYSTERY_GIFT_H diff --git a/include/global.h b/include/global.h index 417cee4f7..3c643f184 100644 --- a/include/global.h +++ b/include/global.h @@ -628,8 +628,8 @@ struct FameCheckerSaveData struct WonderNewsMetadata { u8 newsType:2; - u8 unk_0_2:3; - u8 unk_0_5:3; + u8 sentRewardCounter:3; + u8 rewardCounter:3; u8 berry; }; diff --git a/include/mystery_gift_link.h b/include/mystery_gift_link.h index 8f36d9108..32100db5f 100644 --- a/include/mystery_gift_link.h +++ b/include/mystery_gift_link.h @@ -2,7 +2,6 @@ #define GUARD_MYSTERY_GIFT_LINK_H #define MG_LINK_BUFFER_SIZE 0x400 -#define ME_SEND_BUF_SIZE MG_LINK_BUFFER_SIZE // Send/receive ids for the Client/Server to make sure // they're sending/receiving the same thing diff --git a/include/mystery_gift_server.h b/include/mystery_gift_server.h index 64bb9e9bf..9832cb05a 100644 --- a/include/mystery_gift_server.h +++ b/include/mystery_gift_server.h @@ -49,7 +49,7 @@ enum { // Create arguments for SVR_LOAD_CLIENT_SCRIPT or SVR_LOAD_MSG // (a script/text size and pointer to send to the client) -#define PTR_ARG(pointer) .flag = sizeof(pointer), .parameter = pointer +#define PTR_ARG(pointer) .param = sizeof(pointer), .ptr = pointer // IDs for server messages when ending a script. // Given as the parameter to SVR_RETURN, and resolved to text in GetServerResultMessage @@ -74,8 +74,8 @@ enum { struct MysteryGiftServerCmd { u32 instr; - bool32 flag; - const void *parameter; + bool32 param; + const void *ptr; }; struct MysteryGiftServer diff --git a/src/easy_chat.c b/src/easy_chat.c index 563a7bd5c..4a08a1afb 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -476,7 +476,7 @@ void InitQuestionnaireWords(void) { s32 i; u16 *ptr = GetQuestionnaireWordsPtr(); - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) ptr[i] = EC_WORD_UNDEFINED; } diff --git a/src/field_specials.c b/src/field_specials.c index 45fc701a9..331a32b15 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1950,20 +1950,20 @@ void QuestLog_TryRecordDepartedLocation(void) } } -u16 BattleCardAction(void) +u16 GetMysteryGiftCardStat(void) { switch (gSpecialVar_Result) { - case 0: - return MysteryGift_GetCardStat(3); - case 1: - return MysteryGift_GetCardStat(4); - case 2: - return MysteryGift_GetCardStat(0); - case 3: - return MysteryGift_GetCardStat(1); - case 4: - return MysteryGift_GetCardStat(2); + case GET_NUM_STAMPS: + return MysteryGift_GetCardStat(CARD_STAT_NUM_STAMPS); + case GET_MAX_STAMPS: + return MysteryGift_GetCardStat(CARD_STAT_MAX_STAMPS); + case GET_CARD_BATTLES_WON: + return MysteryGift_GetCardStat(CARD_STAT_BATTLES_WON); + case GET_CARD_BATTLES_LOST: + return MysteryGift_GetCardStat(CARD_STAT_BATTLES_LOST); + case GET_CARD_NUM_TRADES: + return MysteryGift_GetCardStat(CARD_STAT_NUM_TRADES); default: AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873); return 0; diff --git a/src/mystery_gift_client.c b/src/mystery_gift_client.c index dc1830b60..ab25ceb43 100644 --- a/src/mystery_gift_client.c +++ b/src/mystery_gift_client.c @@ -99,7 +99,6 @@ static void MysteryGiftClient_InitSendWord(struct MysteryGiftClient * client, u3 static u32 Client_Init(struct MysteryGiftClient * client) { - // init memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE); client->cmdidx = 0; client->funcId = FUNC_RUN; diff --git a/src/mystery_gift_link.c b/src/mystery_gift_link.c index 0ef2eb84a..f066574e9 100644 --- a/src/mystery_gift_link.c +++ b/src/mystery_gift_link.c @@ -55,7 +55,7 @@ void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const vo if (size != 0) link->sendSize = size; else - link->sendSize = ME_SEND_BUF_SIZE; + link->sendSize = MG_LINK_BUFFER_SIZE; link->sendBuffer = src; } @@ -99,7 +99,7 @@ static bool32 MGL_Receive(struct MysteryGiftLink * link) MGL_ReceiveBlock(link->recvPlayerId, &header, sizeof(header)); link->recvSize = header.size; link->recvCRC = header.crc; - if (link->recvSize > ME_SEND_BUF_SIZE) + if (link->recvSize > MG_LINK_BUFFER_SIZE) { LinkRfu_FatalError(); return FALSE; @@ -167,7 +167,7 @@ static bool32 MGL_Send(struct MysteryGiftLink * link) link->sendCRC = header.crc; link->sendCounter = 0; SendBlock(0, &header, sizeof(header)); - ++link->state; + link->state++; } break; case 1: diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 09c1b9378..7a711aacf 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -30,8 +30,8 @@ static void CreateMysteryGiftTask(void); static void Task_MysteryGift(u8 taskId); extern void CreateEReaderTask(void); -static const u16 sTextboxBorder_Pal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); -static const u32 sTextboxBorder_Gfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); +static const u16 sTextboxBorder_Pal[] = INCBIN_U16("graphics/interface/mystery_gift_textbox_border.gbapal"); +static const u32 sTextboxBorder_Gfx[] = INCBIN_U32("graphics/interface/mystery_gift_textbox_border.4bpp.lz"); struct MysteryGiftTaskData { @@ -344,7 +344,7 @@ static const u8 *const sUnusedMenuTexts[] = { ALIGNED(4) static const u8 sTextColors_TopMenu[3] = { 0, 1, 2 }; ALIGNED(4) static const u8 sTextColors_TopMenu_Copy[3] = { 0, 1, 2 }; -ALIGNED(4) static const u8 sMG_Ereader_TextColor_2[3] = { 1, 2, 3 }; +ALIGNED(4) static const u8 sMG_Ereader_TextColor_2[3] = { 1, 2, 3 }; static const u8 sText_Test[] = _("テスト"); static const u8 sText_EonTicket[] = _("むげんのチケット"); diff --git a/src/mystery_gift_scripts.c b/src/mystery_gift_scripts.c index 0af0f2346..ef781c5af 100644 --- a/src/mystery_gift_scripts.c +++ b/src/mystery_gift_scripts.c @@ -153,8 +153,8 @@ static const struct MysteryGiftServerCmd sServerScript_TossPrompt[] = { {SVR_SEND}, {SVR_RECV, MG_LINKID_RESPONSE}, {SVR_READ_RESPONSE}, - {SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one - {SVR_GOTO, .parameter = gServerScript_ClientCanceledCard} // Kept old card, cancel new one + {SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one + {SVR_GOTO, .ptr = gServerScript_ClientCanceledCard} // Kept old card, cancel new one }; static const struct MysteryGiftServerCmd sServerScript_HasCard[] = { @@ -179,7 +179,7 @@ const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[] = { {SVR_COPY_GAME_DATA}, {SVR_CHECK_GAME_DATA}, {SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend}, - {SVR_GOTO, .parameter = sServerScript_SendNews}, + {SVR_GOTO, .ptr = sServerScript_SendNews}, }; const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = { @@ -194,5 +194,5 @@ const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = { {SVR_CHECK_EXISTING_CARD}, {SVR_GOTO_IF_EQ, HAS_DIFF_CARD, sServerScript_TossPrompt}, {SVR_GOTO_IF_EQ, HAS_NO_CARD, sServerScript_SendCard}, - {SVR_GOTO, .parameter = sServerScript_HasCard} // HAS_SAME_CARD + {SVR_GOTO, .ptr = sServerScript_HasCard} // HAS_SAME_CARD }; diff --git a/src/mystery_gift_server.c b/src/mystery_gift_server.c index 9c6868b6e..f3b2af2f5 100644 --- a/src/mystery_gift_server.c +++ b/src/mystery_gift_server.c @@ -4,6 +4,24 @@ #include "mystery_gift.h" #include "mystery_gift_server.h" +// Assert statements use the original GF names, which are defined below. +// Note that their name "flag" is especially misleading, +// as it's not a boolean (for example it can contain a size argument). +// 'parameter' is shortened to param explicitly to avoid a collision with +// the original name for a different field. +#define mainseqno funcId +#define func_tbl sFuncTable +#define parameter ptr +#define flag param +#define ME_SEND_BUF_SIZE MG_LINK_BUFFER_SIZE +#define FILE ABSPATH("mevent_server.c") + +#define ASSERT_PTR_EMPTY(lineNum) AGB_ASSERT_EX(cmd->parameter == NULL, FILE, (lineNum)); +#define ASSERT_PARAM_EMPTY(lineNum) AGB_ASSERT_EX(cmd->flag == FALSE, FILE, (lineNum)); +#define ASSERT_PTR_PARAM_EMPTY(lineNum) AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, FILE, (lineNum)); +#define ASSERT_VALID_FUNC(lineNum) AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), FILE, (lineNum)); +#define ASSERT_SIZE_OK(lineNum) AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, FILE, (lineNum)); + enum { FUNC_INIT, FUNC_DONE, @@ -54,7 +72,7 @@ static void MysteryGiftServer_Init(struct MysteryGiftServer * svr, const void *s svr->funcId = FUNC_INIT; svr->card = AllocZeroed(sizeof(*svr->card)); svr->news = AllocZeroed(sizeof(*svr->news)); - svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); svr->linkGameData = AllocZeroed(sizeof(*svr->linkGameData)); svr->script = script; svr->cmdidx = 0; @@ -71,7 +89,7 @@ static void MysteryGiftServer_Free(struct MysteryGiftServer * svr) static void MysteryGiftServer_InitSend(struct MysteryGiftServer * svr, u32 ident, const void *src, u32 size) { - AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257); + ASSERT_SIZE_OK(257); MysteryGiftLink_InitSend(&svr->manager, ident, src, size); } @@ -130,136 +148,136 @@ static u32 Server_Run(struct MysteryGiftServer * svr) switch (cmd->instr) { case SVR_RETURN: - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 354); + ASSERT_PTR_EMPTY(354); svr->funcId = FUNC_DONE; - svr->param = cmd->flag; // Set for endVal in MysteryGiftServer_Run + svr->param = cmd->param; // Set for endVal in MysteryGiftServer_Run break; case SVR_SEND: svr->funcId = FUNC_SEND; break; case SVR_RECV: - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364); - MysteryGiftLink_InitRecv(&svr->manager, cmd->flag, svr->recvBuffer); + ASSERT_PTR_EMPTY(364); + MysteryGiftLink_InitRecv(&svr->manager, cmd->param, svr->recvBuffer); svr->funcId = FUNC_RECV; break; case SVR_GOTO: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 370); + ASSERT_PARAM_EMPTY(370); svr->cmdidx = 0; - svr->script = cmd->parameter; + svr->script = cmd->ptr; break; case SVR_COPY_GAME_DATA: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376); - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377); + ASSERT_PARAM_EMPTY(376); + ASSERT_PTR_EMPTY(377); memcpy(svr->linkGameData, svr->recvBuffer, sizeof(*svr->linkGameData)); break; case SVR_CHECK_GAME_DATA: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382); - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383); + ASSERT_PARAM_EMPTY(382); + ASSERT_PTR_EMPTY(383); svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData); break; case SVR_GOTO_IF_EQ: - if (svr->param == cmd->flag) + if (svr->param == cmd->param) { svr->cmdidx = 0; - svr->script = cmd->parameter; + svr->script = cmd->ptr; } break; case SVR_CHECK_EXISTING_CARD: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396); - ptr = MysteryGiftServer_GetSendData(cmd->parameter, svr->card); + ASSERT_PARAM_EMPTY(396); + ptr = MysteryGiftServer_GetSendData(cmd->ptr, svr->card); svr->param = MysteryGift_CompareCardFlags(ptr, svr->linkGameData, ptr); break; case SVR_READ_RESPONSE: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402); - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 403); + ASSERT_PARAM_EMPTY(402); + ASSERT_PTR_EMPTY(403); svr->param = *(u32 *)svr->recvBuffer; break; case SVR_CHECK_EXISTING_STAMPS: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408); - ptr = MysteryGiftServer_GetSendData(cmd->parameter, &svr->stamp); + ASSERT_PARAM_EMPTY(408); + ptr = MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp); svr->param = MysteryGift_CheckStamps(ptr, svr->linkGameData, ptr); break; case SVR_GET_CARD_STAT: - AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415); - svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->flag); + ASSERT_PTR_EMPTY(415); + svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->param); break; case SVR_CHECK_QUESTIONNAIRE: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420); - svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->parameter); + ASSERT_PARAM_EMPTY(420); + svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->ptr); break; case SVR_COMPARE: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426); - svr->param = MysteryGiftServer_Compare(cmd->parameter, *(void **)svr->recvBuffer); + ASSERT_PARAM_EMPTY(426); + svr->param = MysteryGiftServer_Compare(cmd->ptr, *(void **)svr->recvBuffer); break; case SVR_LOAD_NEWS: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432); - MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->parameter, svr->news), sizeof(struct WonderNews)); + ASSERT_PARAM_EMPTY(432); + MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->ptr, svr->news), sizeof(struct WonderNews)); break; case SVR_LOAD_CARD: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438); - MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->parameter, svr->card), sizeof(struct WonderCard)); + ASSERT_PARAM_EMPTY(438); + MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->ptr, svr->card), sizeof(struct WonderCard)); break; case SVR_LOAD_STAMP: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444); - MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->parameter, &svr->stamp), sizeof(svr->stamp)); + ASSERT_PARAM_EMPTY(444); + MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp), sizeof(svr->stamp)); break; case SVR_LOAD_RAM_SCRIPT: - if (cmd->parameter == NULL) + if (cmd->ptr == NULL) MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, svr->ramScript, svr->ramScriptSize); else - MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->parameter, cmd->flag); + MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->ptr, cmd->param); break; case SVR_LOAD_CLIENT_SCRIPT: - if (cmd->parameter == NULL) + if (cmd->ptr == NULL) MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, svr->clientScript, svr->clientScriptSize); else - MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->parameter, cmd->flag); + MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->ptr, cmd->param); break; case SVR_LOAD_EREADER_TRAINER: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 466); - MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->parameter, 188); + ASSERT_PARAM_EMPTY(466); + MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->ptr, sizeof(struct BattleTowerEReaderTrainer)); break; case SVR_LOAD_MSG: - MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->parameter, cmd->flag); + MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->ptr, cmd->param); break; case SVR_LOAD_UNK_2: - MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->parameter, cmd->flag); + MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->ptr, cmd->param); break; case SVR_COPY_CARD: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 481); - memcpy(svr->card, cmd->parameter, sizeof(*svr->card)); + ASSERT_PARAM_EMPTY(481); + memcpy(svr->card, cmd->ptr, sizeof(*svr->card)); break; case SVR_COPY_NEWS: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 486); - memcpy(svr->news, cmd->parameter, sizeof(*svr->news)); + ASSERT_PARAM_EMPTY(486); + memcpy(svr->news, cmd->ptr, sizeof(*svr->news)); break; case SVR_COPY_STAMP: - AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 491); - svr->stamp = *(u32 *)cmd->parameter; + ASSERT_PARAM_EMPTY(491); + svr->stamp = *(u32 *)cmd->ptr; break; case SVR_SET_RAM_SCRIPT: - svr->ramScript = cmd->parameter; - svr->ramScriptSize = cmd->flag; + svr->ramScript = cmd->ptr; + svr->ramScriptSize = cmd->param; break; case SVR_SET_CLIENT_SCRIPT: - svr->clientScript = cmd->parameter; - svr->clientScriptSize = cmd->flag; + svr->clientScript = cmd->ptr; + svr->clientScriptSize = cmd->param; break; case SVR_COPY_SAVED_CARD: - AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506); + ASSERT_PTR_PARAM_EMPTY(506); memcpy(svr->card, GetSavedWonderCard(), sizeof(*svr->card)); DisableWonderCardSending(svr->card); break; case SVR_COPY_SAVED_NEWS: - AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512); + ASSERT_PTR_PARAM_EMPTY(512); memcpy(svr->news, GetSavedWonderNews(), sizeof(*svr->news)); break; case SVR_COPY_SAVED_RAM_SCRIPT: - AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 517); + ASSERT_PTR_PARAM_EMPTY(517); svr->ramScript = GetSavedRamScriptIfValid(); break; case SVR_LOAD_UNK_1: - MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->parameter, cmd->flag); + MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->ptr, cmd->param); break; } @@ -276,14 +294,9 @@ static u32 (*const sFuncTable[])(struct MysteryGiftServer *) = { static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer * svr) { -// Original GF names -#define mainseqno funcId -#define func_tbl sFuncTable u32 response; - AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 546); + ASSERT_VALID_FUNC(546) response = sFuncTable[svr->funcId](svr); - AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 548); + ASSERT_VALID_FUNC(548) return response; -#undef mainseqno -#undef func_tbl } diff --git a/src/wonder_news.c b/src/wonder_news.c index 4e7c4f472..03dd4c73f 100644 --- a/src/wonder_news.c +++ b/src/wonder_news.c @@ -5,27 +5,18 @@ #include "wonder_news.h" #include "constants/items.h" -/* - Wonder News related functions. - Because this feature is largely unused, the names in here are - mostly nebulous and without a real indication of purpose. -*/ +// Every 4th reward for sending Wonder News to a link partner is a "big" reward. +#define MAX_SENT_REWARD 4 -enum { - NEWS_VAL_INVALID, - NEWS_VAL_RECV_FRIEND, - NEWS_VAL_RECV_WIRELESS, - NEWS_VAL_NONE, - NEWS_VAL_SENT, - NEWS_VAL_SENT_MAX, - NEWS_VAL_GET_MAX, -}; +// Only up to 5 rewards can be received in a short period. After this the player +// must take 500 steps before any more rewards can be received. +#define MAX_REWARD 5 -static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *); -static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *); -static u32 GetMENewsJisanState(struct WonderNewsMetadata *); -static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *); -static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *); +static u32 GetRewardItem(struct WonderNewsMetadata *); +static u32 GetRewardType(struct WonderNewsMetadata *); +static void IncrementRewardCounter(struct WonderNewsMetadata *); +static void IncrementSentRewardCounter(struct WonderNewsMetadata *); +static void ResetSentRewardCounter(struct WonderNewsMetadata *); void WonderNews_SetReward(u32 newsType) { @@ -38,9 +29,11 @@ void WonderNews_SetReward(u32 newsType) break; case WONDER_NEWS_RECV_FRIEND: case WONDER_NEWS_RECV_WIRELESS: + // Random berry between ITEM_RAZZ_BERRY and ITEM_NOMEL_BERRY data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY); break; case WONDER_NEWS_SENT: + // Random berry between ITEM_CHERI_BERRY and ITEM_IAPAPA_BERRY data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY); break; } @@ -48,12 +41,12 @@ void WonderNews_SetReward(u32 newsType) void WonderNews_Reset(void) { - struct WonderNewsMetadata *r5 = GetSavedWonderNewsMetadata(); + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - r5->newsType = 0; - r5->unk_0_2 = 0; - r5->unk_0_5 = 0; - r5->berry = 0; + data->newsType = WONDER_NEWS_NONE; + data->sentRewardCounter = 0; + data->rewardCounter = 0; + data->berry = 0; VarSet(VAR_WONDER_NEWS_STEP_COUNTER, 0); } @@ -62,100 +55,100 @@ void WonderNews_IncrementStepCounter(void) u16 *stepCounter = GetVarPointer(VAR_WONDER_NEWS_STEP_COUNTER); struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - if (data->unk_0_5 > 4 && ++(*stepCounter) >= 500) + // If the player has reached the reward limit, start counting steps. + // When they reach 500 steps reset the reward counter to allow them to + // receive rewards again. + if (data->rewardCounter >= MAX_REWARD && ++(*stepCounter) >= 500) { - data->unk_0_5 = 0; + data->rewardCounter = 0; *stepCounter = 0; } } -u16 GetMENewsJisanItemAndState(void) +u16 WonderNews_GetRewardInfo(void) { u16 *result = &gSpecialVar_Result; struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - u16 r5; + u16 rewardType; if (!IsMysteryGiftEnabled() || !ValidateSavedWonderNews()) - return 0; + return NEWS_REWARD_NONE; - r5 = GetMENewsJisanState(data); + rewardType = GetRewardType(data); - switch (r5) + switch (rewardType) { - case 0: + case NEWS_REWARD_RECV_SMALL: + case NEWS_REWARD_RECV_BIG: + *result = GetRewardItem(data); break; - case 1: - *result = GetMENewsJisanRewardItem(data); + case NEWS_REWARD_SENT_SMALL: + *result = GetRewardItem(data); + IncrementSentRewardCounter(data); break; - case 2: - *result = GetMENewsJisanRewardItem(data); + case NEWS_REWARD_SENT_BIG: + *result = GetRewardItem(data); + ResetSentRewardCounter(data); break; - case 3: - break; - case 4: - *result = GetMENewsJisanRewardItem(data); - MENewsJisanIncrementCounterUnk0_2(data); - break; - case 5: - *result = GetMENewsJisanRewardItem(data); - MENewsJisanResetCounterUnk0_2(data); - break; - case 6: + case NEWS_REWARD_NONE: + case NEWS_REWARD_WAITING: + case NEWS_REWARD_AT_MAX: break; } - return r5; + return rewardType; } -static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *a0) +static u32 GetRewardItem(struct WonderNewsMetadata *data) { - u32 r4; + u32 itemId; - a0->newsType = 0; - r4 = a0->berry + FIRST_BERRY_INDEX - 1; - a0->berry = 0; - MENewsJisanIncrementCounterUnk0_5(a0); - return r4; + data->newsType = WONDER_NEWS_NONE; + itemId = data->berry + FIRST_BERRY_INDEX - 1; + data->berry = 0; + IncrementRewardCounter(data); + return itemId; } -static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *a0) +static void ResetSentRewardCounter(struct WonderNewsMetadata *data) { - a0->unk_0_2 = 0; + data->sentRewardCounter = 0; } -static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *a0) +// Track number of times a reward was received (or attmepted to receive) for sending Wonder News to a link partner. +static void IncrementSentRewardCounter(struct WonderNewsMetadata *data) { - a0->unk_0_2++; - if ((u8)a0->unk_0_2 > 4) - a0->unk_0_2 = 4; + data->sentRewardCounter++; + if (data->sentRewardCounter > MAX_SENT_REWARD) + data->sentRewardCounter = MAX_SENT_REWARD; } -static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *a0) +static void IncrementRewardCounter(struct WonderNewsMetadata *data) { - a0->unk_0_5++; - if ((u8)a0->unk_0_5 > 5) - a0->unk_0_5 = 5; + data->rewardCounter++; + if (data->rewardCounter > MAX_REWARD) + data->rewardCounter = MAX_REWARD; } -static u32 GetMENewsJisanState(struct WonderNewsMetadata *data) +static u32 GetRewardType(struct WonderNewsMetadata *data) { - if (data->unk_0_5 == 5) - return 6; + if (data->rewardCounter == MAX_REWARD) + return NEWS_REWARD_AT_MAX; switch (data->newsType) { case WONDER_NEWS_NONE: - return 3; + return NEWS_REWARD_WAITING; case WONDER_NEWS_RECV_FRIEND: - return 1; + return NEWS_REWARD_RECV_SMALL; case WONDER_NEWS_RECV_WIRELESS: - return 2; + return NEWS_REWARD_RECV_BIG; case WONDER_NEWS_SENT: - if (data->unk_0_2 < 3) - return 4; - return 5; + if (data->sentRewardCounter < MAX_SENT_REWARD - 1) + return NEWS_REWARD_SENT_SMALL; + return NEWS_REWARD_SENT_BIG; default: AGB_ASSERT_EX(0, ABSPATH("menews_jisan.c"), 383); - return 0; + return NEWS_REWARD_NONE; } } From 75b9950ec7620d982b9271f10134d984b17f1c45 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Nov 2022 10:40:26 -0500 Subject: [PATCH 35/42] Allow object type field to be missing --- tools/mapjson/mapjson.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 0060920a8..5de9f7461 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -289,7 +289,9 @@ string generate_firered_map_events_text(Json map_data) { for (unsigned int i = 0; i < map_data["object_events"].array_items().size(); i++) { auto obj_event = map_data["object_events"].array_items()[i]; string type = obj_event["type"].string_value(); - if (type == "object") { + + // If no type field is present, assume it's a regular object event. + if (type == "" || type == "object") { text << "\tobject_event " << i + 1 << ", " << obj_event["graphics_id"].string_value() << ", " << obj_event["x"].int_value() << ", " From 26251e9fbacd51e7dfbaa47c0b977b84a944f4e4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Nov 2022 12:49:30 -0500 Subject: [PATCH 36/42] Sync characters --- include/characters.h | 282 ++++++++++++++++++++++++++++ include/text.h | 179 +++--------------- src/battle_message.c | 2 +- src/dynamic_placeholder_text_util.c | 2 +- src/easy_chat_3.c | 2 +- src/help_system_util.c | 2 +- src/link_rfu_3.c | 2 +- src/mystery_gift_show_card.c | 2 +- src/new_menu_helpers.c | 152 +++++++-------- src/pokedex_screen.c | 8 +- src/text.c | 74 ++++---- src/text_printer.c | 45 ++--- src/union_room_chat.c | 178 ++++++++++++++---- 13 files changed, 595 insertions(+), 335 deletions(-) create mode 100644 include/characters.h diff --git a/include/characters.h b/include/characters.h new file mode 100644 index 000000000..c310a8e51 --- /dev/null +++ b/include/characters.h @@ -0,0 +1,282 @@ +#ifndef GUARD_CHARACTERS_H +#define GUARD_CHARACTERS_H + +#define CHAR_SPACE 0x00 +#define CHAR_A_GRAVE 0x01 +#define CHAR_A_ACUTE 0x02 +#define CHAR_A_CIRCUMFLEX 0x03 +#define CHAR_C_CEDILLA 0x04 +#define CHAR_E_GRAVE 0x05 +#define CHAR_E_ACUTE 0x06 +#define CHAR_E_CIRCUMFLEX 0x07 +#define CHAR_E_DIAERESIS 0x08 +#define CHAR_I_GRAVE 0x09 +//#define CHAR_I_ACUTE 0x0A // Is 0x5A instead +#define CHAR_I_CIRCUMFLEX 0x0B +#define CHAR_I_DIAERESIS 0x0C +#define CHAR_O_GRAVE 0x0D +#define CHAR_O_ACUTE 0x0E +#define CHAR_O_CIRCUMFLEX 0x0F +#define CHAR_OE 0x10 +#define CHAR_U_GRAVE 0x11 +#define CHAR_U_ACUTE 0x12 +#define CHAR_U_CIRCUMFLEX 0x13 +#define CHAR_N_TILDE 0x14 +#define CHAR_ESZETT 0x15 +#define CHAR_a_GRAVE 0x16 +#define CHAR_a_ACUTE 0x17 +//#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead +#define CHAR_c_CEDILLA 0x19 +#define CHAR_e_GRAVE 0x1A +#define CHAR_e_ACUTE 0x1B +#define CHAR_e_CIRCUMFLEX 0x1C +#define CHAR_e_DIAERESIS 0x1D +#define CHAR_i_GRAVE 0x1E +//#define CHAR_i_ACUTE 0x1F // Is 0x6F instead +#define CHAR_i_CIRCUMFLEX 0x20 +#define CHAR_i_DIAERESIS 0x21 +#define CHAR_o_GRAVE 0x22 +#define CHAR_o_ACUTE 0x23 +#define CHAR_o_CIRCUMFLEX 0x24 +#define CHAR_oe 0x25 +#define CHAR_u_GRAVE 0x26 +#define CHAR_u_ACUTE 0x27 +#define CHAR_u_CIRCUMFLEX 0x28 +#define CHAR_n_TILDE 0x29 +#define CHAR_MASCULINE_ORDINAL 0x2A +#define CHAR_FEMININE_ORDINAL 0x2B +#define CHAR_SUPER_ER 0x2C +#define CHAR_AMPERSAND 0x2D +#define CHAR_PLUS 0x2E +// +#define CHAR_LV 0x34 +#define CHAR_EQUALS 0x35 +#define CHAR_SEMICOLON 0x36 +#define CHAR_BARD_WORD_DELIMIT 0x37 // Empty space to separate words in Bard's song +// +#define CHAR_EMPTY_RECT 0x50 +#define CHAR_INV_QUESTION_MARK 0x51 +#define CHAR_INV_EXCL_MARK 0x52 +#define CHAR_PK 0x53 +#define CHAR_MN 0x54 +#define CHAR_PO 0x55 +#define CHAR_KE 0x56 +#define CHAR_BLOCK_1 0x57 // Each of these 3 +#define CHAR_BLOCK_2 0x58 // chars contains 1/3 +#define CHAR_BLOCK_3 0x59 // of the word BLOCK +#define CHAR_I_ACUTE 0x5A +#define CHAR_PERCENT 0x5B +#define CHAR_LEFT_PAREN 0x5C +#define CHAR_RIGHT_PAREN 0x5D +// +#define CHAR_a_CIRCUMFLEX 0x68 +// +#define CHAR_i_ACUTE 0x6F +// +#define CHAR_SPACER 0x77 // Empty space +// +#define CHAR_UP_ARROW 0x79 +#define CHAR_DOWN_ARROW 0x7A +#define CHAR_LEFT_ARROW 0x7B +#define CHAR_RIGHT_ARROW 0x7C +// +#define CHAR_SUPER_E 0x84 +#define CHAR_LESS_THAN 0x85 +#define CHAR_GREATER_THAN 0x86 +// +#define CHAR_SUPER_RE 0xA0 +#define CHAR_0 0xA1 +#define CHAR_1 0xA2 +#define CHAR_2 0xA3 +#define CHAR_3 0xA4 +#define CHAR_4 0xA5 +#define CHAR_5 0xA6 +#define CHAR_6 0xA7 +#define CHAR_7 0xA8 +#define CHAR_8 0xA9 +#define CHAR_9 0xAA +#define CHAR_EXCL_MARK 0xAB +#define CHAR_QUESTION_MARK 0xAC +#define CHAR_PERIOD 0xAD +#define CHAR_HYPHEN 0xAE +#define CHAR_BULLET 0xAF +#define CHAR_ELLIPSIS 0xB0 +#define CHAR_DBL_QUOTE_LEFT 0xB1 +#define CHAR_DBL_QUOTE_RIGHT 0xB2 +#define CHAR_SGL_QUOTE_LEFT 0xB3 +#define CHAR_SGL_QUOTE_RIGHT 0xB4 +#define CHAR_MALE 0xB5 +#define CHAR_FEMALE 0xB6 +#define CHAR_CURRENCY 0xB7 +#define CHAR_COMMA 0xB8 +#define CHAR_MULT_SIGN 0xB9 +#define CHAR_SLASH 0xBA +#define CHAR_A 0xBB +#define CHAR_B 0xBC +#define CHAR_C 0xBD +#define CHAR_D 0xBE +#define CHAR_E 0xBF +#define CHAR_F 0xC0 +#define CHAR_G 0xC1 +#define CHAR_H 0xC2 +#define CHAR_I 0xC3 +#define CHAR_J 0xC4 +#define CHAR_K 0xC5 +#define CHAR_L 0xC6 +#define CHAR_M 0xC7 +#define CHAR_N 0xC8 +#define CHAR_O 0xC9 +#define CHAR_P 0xCA +#define CHAR_Q 0xCB +#define CHAR_R 0xCC +#define CHAR_S 0xCD +#define CHAR_T 0xCE +#define CHAR_U 0xCF +#define CHAR_V 0xD0 +#define CHAR_W 0xD1 +#define CHAR_X 0xD2 +#define CHAR_Y 0xD3 +#define CHAR_Z 0xD4 +#define CHAR_a 0xD5 +#define CHAR_b 0xD6 +#define CHAR_c 0xD7 +#define CHAR_d 0xD8 +#define CHAR_e 0xD9 +#define CHAR_f 0xDA +#define CHAR_g 0xDB +#define CHAR_h 0xDC +#define CHAR_i 0xDD +#define CHAR_j 0xDE +#define CHAR_k 0xDF +#define CHAR_l 0xE0 +#define CHAR_m 0xE1 +#define CHAR_n 0xE2 +#define CHAR_o 0xE3 +#define CHAR_p 0xE4 +#define CHAR_q 0xE5 +#define CHAR_r 0xE6 +#define CHAR_s 0xE7 +#define CHAR_t 0xE8 +#define CHAR_u 0xE9 +#define CHAR_v 0xEA +#define CHAR_w 0xEB +#define CHAR_x 0xEC +#define CHAR_y 0xED +#define CHAR_z 0xEE +#define CHAR_BLACK_TRIANGLE 0xEF +#define CHAR_COLON 0xF0 +#define CHAR_A_DIAERESIS 0xF1 +#define CHAR_O_DIAERESIS 0xF2 +#define CHAR_U_DIAERESIS 0xF3 +#define CHAR_a_DIAERESIS 0xF4 +#define CHAR_o_DIAERESIS 0xF5 +#define CHAR_u_DIAERESIS 0xF6 +#define CHAR_DYNAMIC 0xF7 +#define CHAR_KEYPAD_ICON 0xF8 +#define CHAR_EXTRA_SYMBOL 0xF9 +#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog +#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog +#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code +#define PLACEHOLDER_BEGIN 0xFD // string placeholder +#define CHAR_NEWLINE 0xFE +#define EOS 0xFF // end of string + +// CHAR_KEYPAD_ICON chars +#define CHAR_A_BUTTON 0x00 +#define CHAR_B_BUTTON 0x01 +#define CHAR_L_BUTTON 0x02 +#define CHAR_R_BUTTON 0x03 +#define CHAR_START_BUTTON 0x04 +#define CHAR_SELECT_BUTTON 0x05 +#define CHAR_DPAD_UP 0x06 +#define CHAR_DPAD_DOWN 0x07 +#define CHAR_DPAD_LEFT 0x08 +#define CHAR_DPAD_RIGHT 0x09 +#define CHAR_DPAD_UPDOWN 0x0A +#define CHAR_DPAD_LEFTRIGHT 0x0B +#define CHAR_DPAD_NONE 0x0C + +// CHAR_EXTRA_SYMBOL chars +#define CHAR_UP_ARROW_2 0x00 +#define CHAR_DOWN_ARROW_2 0x01 +#define CHAR_LEFT_ARROW_2 0x02 +#define CHAR_RIGHT_ARROW_2 0x03 +#define CHAR_PLUS_2 0x04 +#define CHAR_LV_2 0x05 +#define CHAR_PP 0x06 +#define CHAR_ID 0x07 +#define CHAR_NO 0x08 +#define CHAR_UNDERSCORE 0x09 +#define CHAR_CIRCLED_1 0x0A +#define CHAR_CIRCLED_2 0x0B +#define CHAR_CIRCLED_3 0x0C +#define CHAR_CIRCLED_4 0x0D +#define CHAR_CIRCLED_5 0x0E +#define CHAR_CIRCLED_6 0x0F +#define CHAR_CIRCLED_7 0x10 +#define CHAR_CIRCLED_8 0x11 +#define CHAR_CIRCLED_9 0x12 +#define CHAR_LEFT_PAREN_SMALL 0x13 +#define CHAR_RIGHT_PAREN_SMALL 0x14 +#define CHAR_BULLSEYE 0x15 +#define CHAR_TRIANGLE 0x16 +#define CHAR_CROSS_X 0x17 + +#define EXT_CTRL_CODE_COLOR 0x01 +#define EXT_CTRL_CODE_HIGHLIGHT 0x02 +#define EXT_CTRL_CODE_SHADOW 0x03 +#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04 +#define EXT_CTRL_CODE_PALETTE 0x05 +#define EXT_CTRL_CODE_FONT 0x06 +#define EXT_CTRL_CODE_RESET_FONT 0x07 +#define EXT_CTRL_CODE_PAUSE 0x08 +#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09 +#define EXT_CTRL_CODE_WAIT_SE 0x0A +#define EXT_CTRL_CODE_PLAY_BGM 0x0B +#define EXT_CTRL_CODE_ESCAPE 0x0C +#define EXT_CTRL_CODE_SHIFT_RIGHT 0x0D +#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E +#define EXT_CTRL_CODE_FILL_WINDOW 0x0F +#define EXT_CTRL_CODE_PLAY_SE 0x10 +#define EXT_CTRL_CODE_CLEAR 0x11 +#define EXT_CTRL_CODE_SKIP 0x12 +#define EXT_CTRL_CODE_CLEAR_TO 0x13 +#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 +#define EXT_CTRL_CODE_JPN 0x15 +#define EXT_CTRL_CODE_ENG 0x16 +#define EXT_CTRL_CODE_PAUSE_MUSIC 0x17 +#define EXT_CTRL_CODE_RESUME_MUSIC 0x18 + +#define TEXT_COLOR_TRANSPARENT 0x0 +#define TEXT_COLOR_WHITE 0x1 +#define TEXT_COLOR_DARK_GRAY 0x2 +#define TEXT_COLOR_LIGHT_GRAY 0x3 +#define TEXT_COLOR_RED 0x4 +#define TEXT_COLOR_LIGHT_RED 0x5 +#define TEXT_COLOR_GREEN 0x6 +#define TEXT_COLOR_LIGHT_GREEN 0x7 +#define TEXT_COLOR_BLUE 0x8 +#define TEXT_COLOR_LIGHT_BLUE 0x9 +#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white +#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green +#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white +#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine +#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green +#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean + +#define PLACEHOLDER_ID_UNKNOWN 0x0 +#define PLACEHOLDER_ID_PLAYER 0x1 +#define PLACEHOLDER_ID_STRING_VAR_1 0x2 +#define PLACEHOLDER_ID_STRING_VAR_2 0x3 +#define PLACEHOLDER_ID_STRING_VAR_3 0x4 +#define PLACEHOLDER_ID_KUN 0x5 +#define PLACEHOLDER_ID_RIVAL 0x6 +#define PLACEHOLDER_ID_VERSION 0x7 +#define PLACEHOLDER_ID_MAGMA 0x8 +#define PLACEHOLDER_ID_AQUA 0x9 +#define PLACEHOLDER_ID_MAXIE 0xA +#define PLACEHOLDER_ID_ARCHIE 0xB +#define PLACEHOLDER_ID_GROUDON 0xC +#define PLACEHOLDER_ID_KYOGRE 0xD + +#endif // GUARD_CHARACTERS_H diff --git a/include/text.h b/include/text.h index a20da3b10..a1d187a13 100644 --- a/include/text.h +++ b/include/text.h @@ -2,157 +2,7 @@ #define GUARD_TEXT_H #include "global.h" - -#define CHAR_SPACE 0x00 -#define CHAR_0 0xA1 -#define CHAR_1 0xA2 -#define CHAR_2 0xA3 -#define CHAR_3 0xA4 -#define CHAR_4 0xA5 -#define CHAR_5 0xA6 -#define CHAR_6 0xA7 -#define CHAR_7 0xA8 -#define CHAR_8 0xA9 -#define CHAR_9 0xAA -#define CHAR_EXCL_MARK 0xAB -#define CHAR_QUESTION_MARK 0xAC -#define CHAR_PERIOD 0xAD -#define CHAR_HYPHEN 0xAE -#define CHAR_ELLIPSIS 0xB0 -#define CHAR_DBL_QUOT_LEFT 0xB1 -#define CHAR_DBL_QUOT_RIGHT 0xB2 -#define CHAR_SGL_QUOT_LEFT 0xB3 -#define CHAR_SGL_QUOT_RIGHT 0xB4 -#define CHAR_MALE 0xB5 -#define CHAR_FEMALE 0xB6 -#define CHAR_CURRENCY 0xB7 -#define CHAR_COMMA 0xB8 -#define CHAR_MULT_SIGN 0xB9 -#define CHAR_SLASH 0xBA -#define CHAR_A 0xBB -#define CHAR_B 0xBC -#define CHAR_C 0xBD -#define CHAR_D 0xBE -#define CHAR_E 0xBF -#define CHAR_F 0xC0 -#define CHAR_G 0xC1 -#define CHAR_H 0xC2 -#define CHAR_I 0xC3 -#define CHAR_J 0xC4 -#define CHAR_K 0xC5 -#define CHAR_L 0xC6 -#define CHAR_M 0xC7 -#define CHAR_N 0xC8 -#define CHAR_O 0xC9 -#define CHAR_P 0xCA -#define CHAR_Q 0xCB -#define CHAR_R 0xCC -#define CHAR_S 0xCD -#define CHAR_T 0xCE -#define CHAR_U 0xCF -#define CHAR_V 0xD0 -#define CHAR_W 0xD1 -#define CHAR_X 0xD2 -#define CHAR_Y 0xD3 -#define CHAR_Z 0xD4 -#define CHAR_a 0xD5 -#define CHAR_b 0xD6 -#define CHAR_c 0xD7 -#define CHAR_d 0xD8 -#define CHAR_e 0xD9 -#define CHAR_f 0xDA -#define CHAR_g 0xDB -#define CHAR_h 0xDC -#define CHAR_i 0xDD -#define CHAR_j 0xDE -#define CHAR_k 0xDF -#define CHAR_l 0xE0 -#define CHAR_m 0xE1 -#define CHAR_n 0xE2 -#define CHAR_o 0xE3 -#define CHAR_p 0xE4 -#define CHAR_q 0xE5 -#define CHAR_r 0xE6 -#define CHAR_s 0xE7 -#define CHAR_t 0xE8 -#define CHAR_u 0xE9 -#define CHAR_v 0xEA -#define CHAR_w 0xEB -#define CHAR_x 0xEC -#define CHAR_y 0xED -#define CHAR_z 0xEE -#define CHAR_COLON 0xF0 - -#define CHAR_DYNAMIC_PLACEHOLDER 0xF7 -#define CHAR_KEYPAD_ICON 0xF8 -#define CHAR_EXTRA_SYMBOL 0xF9 -#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog -#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog -#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code -#define PLACEHOLDER_BEGIN 0xFD // string placeholder -#define CHAR_NEWLINE 0xFE -#define EOS 0xFF // end of string - -// CHAR_EXTRA_SYMBOL chars -#define CHAR_LV_2 0x05 - -#define TEXT_COLOR_TRANSPARENT 0x0 -#define TEXT_COLOR_WHITE 0x1 -#define TEXT_COLOR_DARK_GRAY 0x2 -#define TEXT_COLOR_LIGHT_GRAY 0x3 -#define TEXT_COLOR_RED 0x4 -#define TEXT_COLOR_LIGHT_RED 0x5 -#define TEXT_COLOR_GREEN 0x6 -#define TEXT_COLOR_LIGHT_GREEN 0x7 -#define TEXT_COLOR_BLUE 0x8 -#define TEXT_COLOR_LIGHT_BLUE 0x9 -#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white -#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green -#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white -#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine -#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green -#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean - -#define PLACEHOLDER_ID_UNKNOWN 0x0 -#define PLACEHOLDER_ID_PLAYER 0x1 -#define PLACEHOLDER_ID_STRING_VAR_1 0x2 -#define PLACEHOLDER_ID_STRING_VAR_2 0x3 -#define PLACEHOLDER_ID_STRING_VAR_3 0x4 -#define PLACEHOLDER_ID_KUN 0x5 -#define PLACEHOLDER_ID_RIVAL 0x6 -#define PLACEHOLDER_ID_VERSION 0x7 -#define PLACEHOLDER_ID_MAGMA 0x8 -#define PLACEHOLDER_ID_AQUA 0x9 -#define PLACEHOLDER_ID_MAXIE 0xA -#define PLACEHOLDER_ID_ARCHIE 0xB -#define PLACEHOLDER_ID_GROUDON 0xC -#define PLACEHOLDER_ID_KYOGRE 0xD - -// battle placeholders are located in battle_message.h -#define EXT_CTRL_CODE_COLOR 0x1 -#define EXT_CTRL_CODE_HIGHLIGHT 0x2 -#define EXT_CTRL_CODE_SHADOW 0x3 -#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x4 -#define EXT_CTRL_CODE_PALETTE 0x5 -#define EXT_CTRL_CODE_FONT 0x6 -#define EXT_CTRL_CODE_RESET_FONT 0x7 -#define EXT_CTRL_CODE_PAUSE 0x8 -#define EXT_CTRL_CODE_WAIT_BUTTON 0x9 -#define EXT_CTRL_CODE_WAIT_SE 0xA -#define EXT_CTRL_CODE_PLAY_BGM 0xB -#define EXT_CTRL_CODE_ESCAPE 0xC -#define EXT_CTRL_CODE_SHIFT_RIGHT 0xD -#define EXT_CTRL_CODE_SHIFT_DOWN 0xE -#define EXT_CTRL_CODE_FILL_WINDOW 0xF -#define EXT_CTRL_CODE_PLAY_SE 0x10 -#define EXT_CTRL_CODE_CLEAR 0x11 -#define EXT_CTRL_CODE_SKIP 0x12 -#define EXT_CTRL_CODE_CLEAR_TO 0x13 -#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 -#define EXT_CTRL_CODE_JPN 0x15 -#define EXT_CTRL_CODE_ENG 0x16 -#define EXT_CTRL_CODE_STOP_BGM 0x17 -#define EXT_CTRL_CODE_RESUME_BGM 0x18 +#include "characters.h" #define NUM_TEXT_PRINTERS 32 @@ -170,6 +20,26 @@ enum { FONT_4, FONT_5, FONT_BRAILLE, + FONT_7, +}; + +// Return values for font functions +enum { + RENDER_PRINT, + RENDER_FINISH, + RENDER_REPEAT, // Run render function again, if e.g. a control code is encountered. + RENDER_UPDATE, +}; + +// Text printer states read by RenderText / FontFunc_Braille +enum { + RENDER_STATE_HANDLE_CHAR, + RENDER_STATE_WAIT, + RENDER_STATE_CLEAR, + RENDER_STATE_SCROLL_START, + RENDER_STATE_SCROLL, + RENDER_STATE_WAIT_SE, + RENDER_STATE_PAUSE, }; enum @@ -259,13 +129,6 @@ struct GlyphWidthFunc s32 (*func)(u16 glyphId, bool32 isJapanese); }; -struct KeypadIcon -{ - u16 tileOffset; - u8 width; - u8 height; -}; - typedef struct { u8 canABSpeedUpPrint:1; u8 useAlternateDownArrow:1; diff --git a/src/battle_message.c b/src/battle_message.c index 94d1f190e..ea1f07329 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2195,7 +2195,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) || *src == B_TXT_TRAINER2_LOSE_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT) { dst[dstId++] = EXT_CTRL_CODE_BEGIN; - dst[dstId++] = EXT_CTRL_CODE_WAIT_BUTTON; + dst[dstId++] = EXT_CTRL_CODE_PAUSE_UNTIL_PRESS; } } else diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index 3eaf8db8d..e9089c30a 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -110,7 +110,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src) { while (*src != EOS) { - if (*src != CHAR_DYNAMIC_PLACEHOLDER) + if (*src != CHAR_DYNAMIC) { *dest++ = *src++; } diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 49c639ebc..d722fbdb5 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -1454,7 +1454,7 @@ static void PrintECFields(void) for (k = 0; k < 7; k++) { *str++ = CHAR_EXTRA_SYMBOL; - *str++ = 9; + *str++ = CHAR_UNDERSCORE; } str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GRAY); diff --git a/src/help_system_util.c b/src/help_system_util.c index c95e46003..6cd01f9ed 100644 --- a/src/help_system_util.c +++ b/src/help_system_util.c @@ -479,7 +479,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w case EXT_CTRL_CODE_SHIFT_DOWN: src++; case EXT_CTRL_CODE_RESET_FONT: - case EXT_CTRL_CODE_WAIT_BUTTON: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: break; diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 21efcaf22..6a9d27606 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -220,7 +220,7 @@ static const u8 sWireless_RSEtoASCIITable[] = { [CHAR_y] = 'y', [CHAR_z] = 'z', 0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - [CHAR_DYNAMIC_PLACEHOLDER] = ' ', + [CHAR_DYNAMIC] = ' ', [CHAR_KEYPAD_ICON] = ' ', [CHAR_EXTRA_SYMBOL] = ' ', [CHAR_PROMPT_SCROLL] = ' ', diff --git a/src/mystery_gift_show_card.c b/src/mystery_gift_show_card.c index c462bda76..8d2520c15 100644 --- a/src/mystery_gift_show_card.c +++ b/src/mystery_gift_show_card.c @@ -355,7 +355,7 @@ static void BufferCardText(void) // Copy stat texts for (i = 0, charsUntilStat = 0; i < WONDER_CARD_TEXT_LENGTH; i++) { - if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC_PLACEHOLDER) + if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC) { // Regular text, just copy as is sWonderCardData->statTextData[sWonderCardData->recordIdx].statText[charsUntilStat] = sWonderCardData->card.footerLine2Text[i]; diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 85521d0e9..41d0d27b0 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -58,106 +58,98 @@ static const struct WindowTemplate sYesNo_WindowTemplate = static const struct FontInfo gFontInfos[] = { - { + [FONT_0] = { .fontFunction = Font0Func, - .maxLetterWidth = 0x8, - .maxLetterHeight = 0xD, - .letterSpacing = 0x0, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 8, + .maxLetterHeight = 13, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_1] = { .fontFunction = Font1Func, - .maxLetterWidth = 0x8, - .maxLetterHeight = 0xE, - .letterSpacing = 0x0, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 8, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_2] = { .fontFunction = Font2Func, - .maxLetterWidth = 0xA, - .maxLetterHeight = 0xE, - .letterSpacing = 0x1, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 10, + .maxLetterHeight = 14, + .letterSpacing = 1, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_3] = { .fontFunction = Font3Func, - .maxLetterWidth = 0xA, - .maxLetterHeight = 0xE, - .letterSpacing = 0x1, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 10, + .maxLetterHeight = 14, + .letterSpacing = 1, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_4] = { .fontFunction = Font4Func, - .maxLetterWidth = 0xA, - .maxLetterHeight = 0xE, - .letterSpacing = 0x0, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 10, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_5] = { .fontFunction = Font5Func, - .maxLetterWidth = 0xA, - .maxLetterHeight = 0xE, - .letterSpacing = 0x0, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 10, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_BRAILLE] = { .fontFunction = Font6Func, - .maxLetterWidth = 0x8, - .maxLetterHeight = 0x10, - .letterSpacing = 0x0, - .lineSpacing = 0x2, - .unk = 0x0, - .fgColor = 0x2, - .bgColor = 0x1, - .shadowColor = 0x3, + .maxLetterWidth = 8, + .maxLetterHeight = 16, + .letterSpacing = 0, + .lineSpacing = 2, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, - { + [FONT_7] = { .fontFunction = NULL, - .maxLetterWidth = 0x8, - .maxLetterHeight = 0x8, - .letterSpacing = 0x0, - .lineSpacing = 0x0, - .unk = 0x0, - .fgColor = 0x1, - .bgColor = 0x2, - .shadowColor = 0xF, + .maxLetterWidth = 8, + .maxLetterHeight = 8, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 1, + .bgColor = 2, + .shadowColor = 15, } }; static const u8 gMenuCursorDimensions[][2] = { - { 0x8, 0xD }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0x10 }, - { 0x0, 0x0 } + [FONT_0] = { 8, 13 }, + [FONT_1] = { 8, 14 }, + [FONT_2] = { 8, 14 }, + [FONT_3] = { 8, 14 }, + [FONT_4] = { 8, 14 }, + [FONT_5] = { 8, 14 }, + [FONT_BRAILLE] = { 8, 16 }, + [FONT_7] = {} }; static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode); diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 5da6f5b3d..25b8a9534 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -2735,20 +2735,20 @@ void DexScreen_PrintMonHeight(u8 windowId, u16 species, u8 x, u8 y) buffer[i++] = feet / 10 + CHAR_0; buffer[i++] = feet % 10 + CHAR_0; } - buffer[i++] = CHAR_SGL_QUOT_RIGHT; + buffer[i++] = CHAR_SGL_QUOTE_RIGHT; buffer[i++] = inches / 10 + CHAR_0; buffer[i++] = inches % 10 + CHAR_0; - buffer[i++] = CHAR_DBL_QUOT_RIGHT; + buffer[i++] = CHAR_DBL_QUOTE_RIGHT; buffer[i++] = EOS; } else { buffer[i++] = CHAR_QUESTION_MARK; buffer[i++] = CHAR_QUESTION_MARK; - buffer[i++] = CHAR_SGL_QUOT_RIGHT; + buffer[i++] = CHAR_SGL_QUOTE_RIGHT; buffer[i++] = CHAR_QUESTION_MARK; buffer[i++] = CHAR_QUESTION_MARK; - buffer[i++] = CHAR_DBL_QUOT_RIGHT; + buffer[i++] = CHAR_DBL_QUOTE_RIGHT; } buffer[i++] = EOS; diff --git a/src/text.c b/src/text.c index 78521e4e6..f070c2df5 100644 --- a/src/text.c +++ b/src/text.c @@ -20,17 +20,21 @@ static const u8 sTinyDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow static const u8 sDoubleArrowTiles1[] = INCBIN_U8("graphics/fonts/down_arrow_3.4bpp"); static const u8 sDoubleArrowTiles2[] = INCBIN_U8("graphics/fonts/down_arrow_4.4bpp"); -static const u8 sDownArrowYCoords[] = { 0x0, 0x10, 0x20, 0x10 }; -static const u8 sWindowVerticalScrollSpeeds[] = { 0x1, 0x2 , 0x4 , 0x0 }; +static const u8 sDownArrowYCoords[] = { 0, 16, 32, 16 }; +static const u8 sWindowVerticalScrollSpeeds[] = { + [OPTIONS_TEXT_SPEED_SLOW] = 1, + [OPTIONS_TEXT_SPEED_MID] = 2, + [OPTIONS_TEXT_SPEED_FAST] = 4, +}; static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { - { 0x0, GetGlyphWidthFont0 }, - { 0x1, GetGlyphWidthFont1 }, - { 0x2, GetGlyphWidthFont2 }, - { 0x3, GetGlyphWidthFont3 }, - { 0x4, GetGlyphWidthFont4 }, - { 0x5, GetGlyphWidthFont5 }, - { 0x6, GetGlyphWidthFont6 } + { FONT_0, GetGlyphWidthFont0 }, + { FONT_1, GetGlyphWidthFont1 }, + { FONT_2, GetGlyphWidthFont2 }, + { FONT_3, GetGlyphWidthFont3 }, + { FONT_4, GetGlyphWidthFont4 }, + { FONT_5, GetGlyphWidthFont5 }, + { FONT_BRAILLE, GetGlyphWidthFont6 } }; static const struct SpriteSheet sUnknown_81EA68C[] = @@ -57,20 +61,26 @@ static const struct SpriteTemplate sUnknown_81EA6B4 = .callback = sub_80062B0, }; -static const struct KeypadIcon sKeypadIcons[] = { - { 0x0, 0x8, 0xC }, - { 0x1, 0x8, 0xC }, - { 0x2, 0x10, 0xC }, - { 0x4, 0x10, 0xC }, - { 0x6, 0x18, 0xC }, - { 0x9, 0x18, 0xC }, - { 0xC, 0x8, 0xC }, - { 0xD, 0x8, 0xC }, - { 0xE, 0x8, 0xC }, - { 0xF, 0x8, 0xC }, - { 0x20, 0x8, 0xC }, - { 0x21, 0x8, 0xC }, - { 0x22, 0x8, 0xC }, +struct +{ + u16 tileOffset; + u8 width; + u8 height; +} static const sKeypadIcons[] = +{ + [CHAR_A_BUTTON] = { 0x0, 8, 12 }, + [CHAR_B_BUTTON] = { 0x1, 8, 12 }, + [CHAR_L_BUTTON] = { 0x2, 16, 12 }, + [CHAR_R_BUTTON] = { 0x4, 16, 12 }, + [CHAR_START_BUTTON] = { 0x6, 24, 12 }, + [CHAR_SELECT_BUTTON] = { 0x9, 24, 12 }, + [CHAR_DPAD_UP] = { 0xC, 8, 12 }, + [CHAR_DPAD_DOWN] = { 0xD, 8, 12 }, + [CHAR_DPAD_LEFT] = { 0xE, 8, 12 }, + [CHAR_DPAD_RIGHT] = { 0xF, 8, 12 }, + [CHAR_DPAD_UPDOWN] = { 0x20, 8, 12 }, + [CHAR_DPAD_LEFTRIGHT] = { 0x21, 8, 12 }, + [CHAR_DPAD_NONE] = { 0x22, 8, 12 }, }; const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); @@ -694,7 +704,7 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; textPrinter->state = 6; return 2; - case EXT_CTRL_CODE_WAIT_BUTTON: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: textPrinter->state = 1; if (gTextFlags.autoScroll) subStruct->autoScrollDelay = 0; @@ -732,10 +742,10 @@ u16 RenderText(struct TextPrinter *textPrinter) case EXT_CTRL_CODE_FILL_WINDOW: FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); return 2; - case EXT_CTRL_CODE_STOP_BGM: + case EXT_CTRL_CODE_PAUSE_MUSIC: m4aMPlayStop(&gMPlayInfo_BGM); return 2; - case EXT_CTRL_CODE_RESUME_BGM: + case EXT_CTRL_CODE_RESUME_MUSIC: m4aMPlayContinue(&gMPlayInfo_BGM); return 2; case EXT_CTRL_CODE_CLEAR: @@ -955,7 +965,7 @@ static s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci ++strPos; break; case EXT_CTRL_CODE_RESET_FONT: - case EXT_CTRL_CODE_WAIT_BUTTON: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: case EXT_CTRL_CODE_JPN: @@ -964,7 +974,7 @@ static s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci break; } break; - case CHAR_DYNAMIC_PLACEHOLDER: + case CHAR_DYNAMIC: case PLACEHOLDER_BEGIN: ++strPos; break; @@ -1053,7 +1063,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) default: return 0; } - case CHAR_DYNAMIC_PLACEHOLDER: + case CHAR_DYNAMIC: if (bufferPointer == NULL) bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str); while (*bufferPointer != EOS) @@ -1087,7 +1097,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case EXT_CTRL_CODE_SHIFT_DOWN: ++str; case EXT_CTRL_CODE_RESET_FONT: - case EXT_CTRL_CODE_WAIT_BUTTON: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: break; @@ -1231,7 +1241,7 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a ++strPos; break; case EXT_CTRL_CODE_RESET_FONT: - case EXT_CTRL_CODE_WAIT_BUTTON: + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: case EXT_CTRL_CODE_JPN: @@ -1240,7 +1250,7 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a continue; } break; - case CHAR_DYNAMIC_PLACEHOLDER: + case CHAR_DYNAMIC: case CHAR_KEYPAD_ICON: case CHAR_EXTRA_SYMBOL: case PLACEHOLDER_BEGIN: diff --git a/src/text_printer.c b/src/text_printer.c index fddb00307..6710ebfd0 100644 --- a/src/text_printer.c +++ b/src/text_printer.c @@ -73,16 +73,14 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void if (!gFonts) return FALSE; - sTempTextPrinter.active = 1; - sTempTextPrinter.state = 0; + sTempTextPrinter.active = TRUE; + sTempTextPrinter.state = RENDER_STATE_HANDLE_CHAR; sTempTextPrinter.textSpeed = speed; sTempTextPrinter.delayCounter = 0; sTempTextPrinter.scrollDistance = 0; - for (i = 0; i < 7; ++i) - { + for (i = 0; i < (int)ARRAY_COUNT(sTempTextPrinter.subUnion.fields); ++i) sTempTextPrinter.subUnion.fields[i] = 0; - } sTempTextPrinter.printerTemplate = *textSubPrinter; sTempTextPrinter.callback = callback; @@ -90,7 +88,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void sTempTextPrinter.japanese = 0; GenerateFontHalfRowLookupTable(textSubPrinter->fgColor, textSubPrinter->bgColor, textSubPrinter->shadowColor); - if (speed != TEXT_SKIP_DRAW && speed != 0x0) + if (speed != TEXT_SKIP_DRAW && speed != 0) { --sTempTextPrinter.textSpeed; sTextPrinters[textSubPrinter->windowId] = sTempTextPrinter; @@ -98,15 +96,18 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void else { sTempTextPrinter.textSpeed = 0; + + // Render all text (up to limit) at once for (j = 0; j < 0x400; ++j) { - if ((u32)RenderFont(&sTempTextPrinter) == 1) + if (RenderFont(&sTempTextPrinter) == RENDER_FINISH) break; } + // All the text is rendered to the window but don't draw it yet. if (speed != TEXT_SKIP_DRAW) CopyWindowToVram(sTempTextPrinter.printerTemplate.windowId, COPYWIN_GFX); - sTextPrinters[textSubPrinter->windowId].active = 0; + sTextPrinters[textSubPrinter->windowId].active = FALSE; } return TRUE; } @@ -114,23 +115,23 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void void RunTextPrinters(void) { int i; - u16 temp; - for (i = 0; i < 0x20; ++i) + for (i = 0; i < NUM_TEXT_PRINTERS; ++i) { - if (sTextPrinters[i].active != 0) + if (sTextPrinters[i].active) { - temp = RenderFont(&sTextPrinters[i]); - switch (temp) { - case 0: - CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX); - case 3: - if (sTextPrinters[i].callback != 0) - sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, temp); - break; - case 1: - sTextPrinters[i].active = 0; - break; + u16 renderCmd = RenderFont(&sTextPrinters[i]); + switch (renderCmd) + { + case RENDER_PRINT: + CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX); + case RENDER_UPDATE: + if (sTextPrinters[i].callback != NULL) + sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, renderCmd); + break; + case RENDER_FINISH: + sTextPrinters[i].active = FALSE; + break; } } } diff --git a/src/union_room_chat.c b/src/union_room_chat.c index a2436575b..aedc57fdc 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -128,39 +128,151 @@ static const u8 sKeyboardPageMaxRow[] = 9 }; -static const u8 sCaseToggleTable[] = { - 0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, - 0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24, - 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, - 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, - 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00, - 0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, - 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, - 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, - 0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, - 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, - 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, - 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD, - 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, - 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, - 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF, - 0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +static const u8 sCaseToggleTable[256] = { + [CHAR_A] = CHAR_a, + [CHAR_B] = CHAR_b, + [CHAR_C] = CHAR_c, + [CHAR_D] = CHAR_d, + [CHAR_E] = CHAR_e, + [CHAR_F] = CHAR_f, + [CHAR_G] = CHAR_g, + [CHAR_H] = CHAR_h, + [CHAR_I] = CHAR_i, + [CHAR_J] = CHAR_j, + [CHAR_K] = CHAR_k, + [CHAR_L] = CHAR_l, + [CHAR_M] = CHAR_m, + [CHAR_N] = CHAR_n, + [CHAR_O] = CHAR_o, + [CHAR_P] = CHAR_p, + [CHAR_Q] = CHAR_q, + [CHAR_R] = CHAR_r, + [CHAR_S] = CHAR_s, + [CHAR_T] = CHAR_t, + [CHAR_U] = CHAR_u, + [CHAR_V] = CHAR_v, + [CHAR_W] = CHAR_w, + [CHAR_X] = CHAR_x, + [CHAR_Y] = CHAR_y, + [CHAR_Z] = CHAR_z, + [CHAR_a] = CHAR_A, + [CHAR_b] = CHAR_B, + [CHAR_c] = CHAR_C, + [CHAR_d] = CHAR_D, + [CHAR_e] = CHAR_E, + [CHAR_f] = CHAR_F, + [CHAR_g] = CHAR_G, + [CHAR_h] = CHAR_H, + [CHAR_i] = CHAR_I, + [CHAR_j] = CHAR_J, + [CHAR_k] = CHAR_K, + [CHAR_l] = CHAR_L, + [CHAR_m] = CHAR_M, + [CHAR_n] = CHAR_N, + [CHAR_o] = CHAR_O, + [CHAR_p] = CHAR_P, + [CHAR_q] = CHAR_Q, + [CHAR_r] = CHAR_R, + [CHAR_s] = CHAR_S, + [CHAR_t] = CHAR_T, + [CHAR_u] = CHAR_U, + [CHAR_v] = CHAR_V, + [CHAR_w] = CHAR_W, + [CHAR_x] = CHAR_X, + [CHAR_y] = CHAR_Y, + [CHAR_z] = CHAR_Z, + [CHAR_A_GRAVE] = CHAR_a_GRAVE, + [CHAR_A_ACUTE] = CHAR_a_ACUTE, + [CHAR_A_CIRCUMFLEX] = CHAR_a_CIRCUMFLEX, + [CHAR_A_DIAERESIS] = CHAR_a_DIAERESIS, + [CHAR_C_CEDILLA] = CHAR_c_CEDILLA, + [CHAR_E_GRAVE] = CHAR_e_GRAVE, + [CHAR_E_ACUTE] = CHAR_e_ACUTE, + [CHAR_E_CIRCUMFLEX] = CHAR_e_CIRCUMFLEX, + [CHAR_E_DIAERESIS] = CHAR_e_DIAERESIS, + [CHAR_I_GRAVE] = CHAR_i_GRAVE, + [CHAR_I_ACUTE] = CHAR_i_ACUTE, + [CHAR_I_CIRCUMFLEX] = CHAR_i_CIRCUMFLEX, + [CHAR_I_DIAERESIS] = CHAR_i_DIAERESIS, + [CHAR_O_GRAVE] = CHAR_o_GRAVE, + [CHAR_O_ACUTE] = CHAR_o_ACUTE, + [CHAR_O_CIRCUMFLEX] = CHAR_o_CIRCUMFLEX, + [CHAR_O_DIAERESIS] = CHAR_o_DIAERESIS, + [CHAR_OE] = CHAR_oe, + [CHAR_U_GRAVE] = CHAR_u_GRAVE, + [CHAR_U_ACUTE] = CHAR_u_ACUTE, + [CHAR_U_CIRCUMFLEX] = CHAR_u_CIRCUMFLEX, + [CHAR_U_DIAERESIS] = CHAR_u_DIAERESIS, + [CHAR_N_TILDE] = CHAR_n_TILDE, + [CHAR_ESZETT] = CHAR_ESZETT, + [CHAR_a_GRAVE] = CHAR_A_GRAVE, + [CHAR_a_ACUTE] = CHAR_A_ACUTE, + [CHAR_a_CIRCUMFLEX] = CHAR_A_CIRCUMFLEX, + [CHAR_a_DIAERESIS] = CHAR_A_DIAERESIS, + [CHAR_c_CEDILLA] = CHAR_C_CEDILLA, + [CHAR_e_GRAVE] = CHAR_E_GRAVE, + [CHAR_e_ACUTE] = CHAR_E_ACUTE, + [CHAR_e_CIRCUMFLEX] = CHAR_E_CIRCUMFLEX, + [CHAR_e_DIAERESIS] = CHAR_E_DIAERESIS, + [CHAR_i_GRAVE] = CHAR_I_GRAVE, + [CHAR_i_ACUTE] = CHAR_I_ACUTE, + [CHAR_i_CIRCUMFLEX] = CHAR_I_CIRCUMFLEX, + [CHAR_i_DIAERESIS] = CHAR_I_DIAERESIS, + [CHAR_o_GRAVE] = CHAR_O_GRAVE, + [CHAR_o_ACUTE] = CHAR_O_ACUTE, + [CHAR_o_CIRCUMFLEX] = CHAR_O_CIRCUMFLEX, + [CHAR_o_DIAERESIS] = CHAR_O_DIAERESIS, + [CHAR_oe] = CHAR_OE, + [CHAR_u_GRAVE] = CHAR_U_GRAVE, + [CHAR_u_ACUTE] = CHAR_U_ACUTE, + [CHAR_u_CIRCUMFLEX] = CHAR_U_CIRCUMFLEX, + [CHAR_u_DIAERESIS] = CHAR_U_DIAERESIS, + [CHAR_n_TILDE] = CHAR_N_TILDE, + [CHAR_0] = CHAR_0, + [CHAR_1] = CHAR_1, + [CHAR_2] = CHAR_2, + [CHAR_3] = CHAR_3, + [CHAR_4] = CHAR_4, + [CHAR_5] = CHAR_5, + [CHAR_6] = CHAR_6, + [CHAR_7] = CHAR_7, + [CHAR_8] = CHAR_8, + [CHAR_9] = CHAR_9, + [CHAR_PK] = CHAR_PK, + [CHAR_MN] = CHAR_MN, + [CHAR_PO] = CHAR_PO, + [CHAR_KE] = CHAR_KE, + [CHAR_SUPER_E] = CHAR_SUPER_E, + [CHAR_SUPER_ER] = CHAR_SUPER_ER, + [CHAR_SUPER_RE] = CHAR_SUPER_RE, + [CHAR_PERIOD] = CHAR_PERIOD, + [CHAR_COMMA] = CHAR_COMMA, + [CHAR_COLON] = CHAR_COLON, + [CHAR_SEMICOLON] = CHAR_SEMICOLON, + [CHAR_EXCL_MARK] = CHAR_EXCL_MARK, + [CHAR_QUESTION_MARK] = CHAR_QUESTION_MARK, + [CHAR_HYPHEN] = CHAR_HYPHEN, + [CHAR_SLASH] = CHAR_SLASH, + [CHAR_ELLIPSIS] = CHAR_ELLIPSIS, + [CHAR_LEFT_PAREN] = CHAR_LEFT_PAREN, + [CHAR_RIGHT_PAREN] = CHAR_RIGHT_PAREN, + [CHAR_AMPERSAND] = CHAR_AMPERSAND, + [CHAR_DBL_QUOTE_LEFT] = CHAR_DBL_QUOTE_LEFT, + [CHAR_DBL_QUOTE_RIGHT] = CHAR_DBL_QUOTE_RIGHT, + [CHAR_SGL_QUOTE_LEFT] = CHAR_SGL_QUOTE_LEFT, + [CHAR_SGL_QUOTE_RIGHT] = CHAR_SGL_QUOTE_RIGHT, + [CHAR_MASCULINE_ORDINAL] = CHAR_MASCULINE_ORDINAL, + [CHAR_FEMININE_ORDINAL] = CHAR_FEMININE_ORDINAL, + [CHAR_BULLET] = CHAR_BULLET, + [CHAR_EQUALS] = CHAR_EQUALS, + [CHAR_MULT_SIGN] = CHAR_MULT_SIGN, + [CHAR_PERCENT] = CHAR_PERCENT, + [CHAR_LESS_THAN] = CHAR_LESS_THAN, + [CHAR_GREATER_THAN] = CHAR_GREATER_THAN, + [CHAR_MALE] = CHAR_MALE, + [CHAR_FEMALE] = CHAR_FEMALE, + [CHAR_CURRENCY] = CHAR_CURRENCY, + [CHAR_BLACK_TRIANGLE] = CHAR_BLACK_TRIANGLE, }; const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { From 8f95e41d44bd6bdb09a1050065803bb3484f57b8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Nov 2022 13:02:50 -0500 Subject: [PATCH 37/42] Sync text.c --- graphics/fonts/font1_latin.png | Bin 3470 -> 0 bytes graphics_file_rules.mk | 3 - include/text.h | 16 +-- src/battle_interface.c | 8 +- src/text.c | 223 +++++++++++++++++---------------- 5 files changed, 123 insertions(+), 127 deletions(-) delete mode 100644 graphics/fonts/font1_latin.png diff --git a/graphics/fonts/font1_latin.png b/graphics/fonts/font1_latin.png deleted file mode 100644 index 42e847faf0f281db3da29ac5a33b6c224a416207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3470 zcmb7{_dnH-`^I0db2w!jE6R?L8M0*^`v}=(ugr2###=I8k@Ai>l`<;(SlRRKP)_1F z_CeVzM@Dvb#`*aE3E%7f;kxeUqNiGDOmI(*pp2G(ziH0swdxVE_z%W-L4Q zK4->gZep#EB~evWR7OWfsZ^@VY|xdndkrH!ZR@ZPYad$zcse;cI-c9cJK?I_n()LY zl$KU~>XIgLFpZt3`TPS}<`W`Y=F^0TL`9L*9Rt;4?Gu+E5FaUSEB9c;EL!MB^dM?CAbNjeO1abl*A?28W({WqDZ_N32aWSjNmyFr?{s z6#L6Qd4@b2I*8GUHK;-Gu|v{*{k(Q1$&bVOY4xv_G1$@x-@4z<#F*NTG#}R6{%<48 zR$0KJQ%uK!blx0HcX>H!yXOj|9vsjd7x znZ5w|de<#2?cG!j-t9@I&&GdJgKq=wSfuQ2thc`- z%eRN6aV%JuW%fA=eu^`yqmh;DDb|SQCZ8W_Z%!L(Ovx(N`Cp@)`L zTt;yWUv+Te=HNR(&W7MQxjnf4!gE;dE=mZFS}-7FKLZIEZ+-C)+gnEs&&*?VlaV@! zsO+k12*>)t(=rOISHan(Y0Y z=fh0K%Mi~OhxWdMJDATAcCf??tc=Is4MmH0ZVR8m&k?7(6V5*A0Mgn&CoCxf98k z;3bGazndt)WiZ7Xz$3^7HBrV;KylAyDMA%cA`kpAxROgV^8BXOpyQpvm+_PnJ3xyW zg{(K#FCTf`J(^_`$3EKzkouMyb53p-w@5}M$1lb^0-2WXgnt|(Z0kjJVsG`$>Q1Be zf}io+nCj(n;CCJDF+DD}qj8k`u!){6|v{U?ZRHwr63QfpW5 z{p4JFAdj{{9n)otp{B(zBF<f1)1{_6hEs3J)=l0a;3!P+K#py1UK|+D{~az&g|0 z%s&E~P(rutg+gkKpLPG|P%B!0A;@0f(TUYTnI}ezi-*I~*9rAmH+|VI$Avu*Vk0kw zJF-I~(8%6?tWBICZ(ounJ0knk=lKM@)G4lx=RsL_5x5d8jLhz#I_)2Q9ltCve0u)p z{QS<4mExlOq0Wl1aa~Atgu!83CTv!+p{MLsz(!bUs_)aiV4X9D_^{QtE_S$=WEiDU zhaGls4nKXFMZ20lhJpuGVt{aaKJ6V*Xc&Rs|Sj^g|CP|UX{eajz1PnOr0eq=NN?)HY(UuLWU z66dLUD*-U)apa1$mZ2=nns6xbWU!6^QuX|TJ?x%!IC(k@eR5 zqeYeVLQd5s{Z{M56B?ipFUxe*_=J}Ul_1xGtI4!jP#QB*LoOw&Ratp1DvEC3lG5ej zWtpc)!x5ivty*t=@JgoWO9L2L0iG=R*?SEa)NG7mUfT83W`o9>X7+=z0WEn>pFLhk zLw}`!-^rnzAFjJbOj?{+cxi4oOB{IBN?+g#k4;MA7#qvyhE&t-0B#oONjfP|by;|q zNkz%ESVqVlbx}5-_+HNsKE%8^4h;3%v#FUJlge~fMbrOflz%*@PWXj~;<8|xNLS<$ zBOnK1mut7CMt?sVQxQ-WJQ;UHu#FOw^#N`orCvQVN}c1Ji9NEiKYydSwlrxFQoqcy zpLEjX0ZJeMt>OiM2?Ipnf7-bm%Rw2bDzBujpU5EueoiM!EOjP1v#EFSGe=*Mfs>eW z^I1JltG_ob;LI+G<6BxI(l%cEIXb!9u@OKj*@BIsGa1EMW`Pf$z;g7AbEMgD5+w>C1j zZ#%Nh7~{b!%h-A7;o_)%#SX7S%-YY?DQ|5L7SSiZ*#%uPK%p@ATwstX;gVfaNZ z;Mk=DgriPmNK91HlXE!Ktg0-A{LQm%H8YxKbz)OV@ABGyZA)CFN2;3~KbZpWZ+qFC zDOM4+5F(ty*6rxsiWa6{fD21UT-9M+>-N4B;tQQf4(UL4ebovmXBDr2U1K`1{q$pn z(?=Y5UvW+rj@<%yeZ)Jv+YfH}`T0V%+V$WaSiW32Jyr=N1@VP7%cd9BXyJp!g%{l3Pc{MP|7*wB8UahT?K(|&0q!Q&`2n6G531ZaxY zQ#fwE;le7Q$&^40^tR&uZF{mJ;%_#`URl(k@i0OMOL@hemi;s(e z_cy1eWB{MK*CCv>+IxU(%uL;0!g^OdZ&*>!STQ@Z*pP;ObYh|nF0*+qICQyEhF0uE z1oX4|_e=IkviN`jM~g)6ngBRCH6JOCD*FKJNOv7`Vl3M?GJ1@Z#(*L(FnYQV2u%rp z(N;_K98;(VC$&TfIdj9wJkLX?bwB>2pgTpUB3L>$FY&oxceuE?HS{9tFU&hX@my{6 zw|kX^g^aZm*+xe@zjP^Wtz6;*LF3Ug<1Zs!R<|t!tnl7l%Y`LsM~~FDIw-MK$qAL8 zJC9m!FB}+LT_ZBA7c8wXD>Xj;=EmPD$S=-kUP;|$aQ08(%BFy90b!G-HiU_D6T}sk z1s2be=F?9ztPIitSFD$xCh@&W)i~6*oO`Y6aM4`LZ3K~huf)0#$QSC%GxQ}4@gcH> z`JoVd|IL;gf#{?9-wVP(HouydF+j>sXy_Dh;v0|J)hkwR!QI1N8dg%ZR0PT1HS2Vv zUoOc4#>ng4M=n8>x3?Z0iT{~mevK{fQQ~H|Fg()2Xek?e?$!0|MM`E36%I~a(w7hS z+v4{;FV(PqjqVXqSOW0E?c!3xLH zJ(K>j{WSU8rO+blX`wG>?hXtMJC;9ob|L(l_$BI&swmCUr-~&dgZ(OKJ>;vrbM)2y zIxTFLa)YVM9V0pc;czFjJ9lJUDpT*BeCheed4R~2#fK4eWB5XK7izp|iILWpZ=~pm z(Gd*-JyGO9W|P2y6|b3!=(}<$p#?H;+DL{4ZtXxgzlVGLvCDdWl>c7jVb4J%R-rPb f`j@+QDHW8m&<3y6ULQIuSb&lKExmFb*O>nSO1^zN diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 77b059049..49dad3f64 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -66,9 +66,6 @@ $(FONTGFXDIR)/font0_latin.latfont: $(FONTGFXDIR)/font0_latin.png $(FONTGFXDIR)/font0_jap.fwjpnfont: $(FONTGFXDIR)/font0_jap.png $(GFX) $< $@ -$(FONTGFXDIR)/font1_latin.latfont: $(FONTGFXDIR)/font1_latin.png - $(GFX) $< $@ - $(FONTGFXDIR)/font1_jap.fwjpnfont: $(FONTGFXDIR)/font1_jap.png $(GFX) $< $@ diff --git a/include/text.h b/include/text.h index a1d187a13..f0dbcee60 100644 --- a/include/text.h +++ b/include/text.h @@ -180,7 +180,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c u16 RenderText(struct TextPrinter *textPrinter); s32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7); +u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); u8 GetKeypadIconWidth(u8 keypadIconId); @@ -188,23 +188,11 @@ u8 GetKeypadIconHeight(u8 keypadIconId); u8 GetFontAttribute(u8 fontId, u8 attributeId); u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension); void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese); void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont9(u16 glyphId); -s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese); void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese); +s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese); void sub_80062B0(struct Sprite *sprite); u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority); void DestroyTextCursorSprite(u8 spriteId); -s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese); #endif // GUARD_TEXT_H diff --git a/src/battle_interface.c b/src/battle_interface.c index 5bad50de9..b967638f8 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -847,7 +847,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) } ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); for (i = 0; i < 3; i++) { @@ -886,7 +886,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 if (maxOrCurrent == HP_CURRENT) StringCopy(txtPtr, sText_Slash); - RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); for (i = var; i < var + 3; i++) { @@ -937,7 +937,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) var = 5; nature = GetNature(mon); StringCopy(text + 6, gNatureNamePointers[nature]); - RenderTextFont9(barFontGfx, 0, text, 0, 0, 0, 0, 0); + RenderTextHandleBold(barFontGfx, 0, text, 0, 0, 0, 0, 0); for (j = 6, i = 0; i < var; i++, j++) { @@ -969,7 +969,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); text[5] = CHAR_SPACE; text[8] = CHAR_SLASH; - RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); j = healthBarSpriteId; // Needed to match for some reason. for (j = 0; j < 5; j++) diff --git a/src/text.c b/src/text.c index f070c2df5..6b3eb65d1 100644 --- a/src/text.c +++ b/src/text.c @@ -8,8 +8,16 @@ extern const struct OamData gOamData_AffineOff_ObjNormal_16x16; +static void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese); static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese); static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese); +static void DecompressGlyph_Bold(u16 glyphId); +static s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese); TextFlags gTextFlags; @@ -29,9 +37,9 @@ static const u8 sWindowVerticalScrollSpeeds[] = { static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { { FONT_0, GetGlyphWidthFont0 }, - { FONT_1, GetGlyphWidthFont1 }, + { FONT_1, GetGlyphWidthFont1 }, // copy of 2 { FONT_2, GetGlyphWidthFont2 }, - { FONT_3, GetGlyphWidthFont3 }, + { FONT_3, GetGlyphWidthFont3 }, // copy of 2 { FONT_4, GetGlyphWidthFont4 }, { FONT_5, GetGlyphWidthFont5 }, { FONT_BRAILLE, GetGlyphWidthFont6 } @@ -130,7 +138,7 @@ static const u8 sFont0LatinGlyphWidths[] = static const u16 sFont0JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font0_jap.fwjpnfont"); // Font 1 -static const u16 sFont1LatinGlyphs[] = INCBIN_U16("graphics/fonts/font1_latin.latfont"); +static const u16 sFont1LatinGlyphs[] = INCBIN_U16("graphics/fonts/font2_latin.latfont"); static const u8 sFont1LatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -629,7 +637,7 @@ u16 RenderText(struct TextPrinter *textPrinter) switch (textPrinter->state) { - case 0: + case RENDER_STATE_HANDLE_CHAR: if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) textPrinter->delayCounter = 0; @@ -641,7 +649,7 @@ u16 RenderText(struct TextPrinter *textPrinter) subStruct->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; } - return 3; + return RENDER_UPDATE; } if (gTextFlags.autoScroll) @@ -657,10 +665,10 @@ u16 RenderText(struct TextPrinter *textPrinter) case CHAR_NEWLINE: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; - return 2; + return RENDER_REPEAT; case PLACEHOLDER_BEGIN: textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_BEGIN: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -670,17 +678,17 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_HIGHLIGHT: textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SHADOW: textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -689,29 +697,29 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PALETTE: textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_FONT: subStruct->glyphId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_RESET_FONT: - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - textPrinter->state = 6; - return 2; + textPrinter->state = RENDER_STATE_PAUSE; + return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: - textPrinter->state = 1; + textPrinter->state = RENDER_STATE_WAIT; if (gTextFlags.autoScroll) subStruct->autoScrollDelay = 0; - return 3; + return RENDER_UPDATE; case EXT_CTRL_CODE_WAIT_SE: - textPrinter->state = 5; - return 3; + textPrinter->state = RENDER_STATE_WAIT_SE; + return RENDER_UPDATE; case EXT_CTRL_CODE_PLAY_BGM: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -719,14 +727,14 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; if (!QL_IS_PLAYBACK_STATE) PlayBGM(currChar); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PLAY_SE: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; currChar |= (*textPrinter->printerTemplate.currentChar << 8); textPrinter->printerTemplate.currentChar++; PlaySE(currChar); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_ESCAPE: textPrinter->printerTemplate.currentChar++; currChar = *textPrinter->printerTemplate.currentChar; @@ -734,20 +742,20 @@ u16 RenderText(struct TextPrinter *textPrinter) case EXT_CTRL_CODE_SHIFT_RIGHT: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SHIFT_DOWN: textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_FILL_WINDOW: FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE_MUSIC: m4aMPlayStop(&gMPlayInfo_BGM); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_RESUME_MUSIC: m4aMPlayContinue(&gMPlayInfo_BGM); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_CLEAR: width = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -755,13 +763,13 @@ u16 RenderText(struct TextPrinter *textPrinter) { ClearTextSpan(textPrinter, width); textPrinter->printerTemplate.currentX += width; - return 0; + return RENDER_PRINT; } - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SKIP: textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_CLEAR_TO: { widthHelper = *textPrinter->printerTemplate.currentChar; @@ -772,29 +780,29 @@ u16 RenderText(struct TextPrinter *textPrinter) { ClearTextSpan(textPrinter, width); textPrinter->printerTemplate.currentX += width; - return 0; + return RENDER_PRINT; } } - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_MIN_LETTER_SPACING: textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_JPN: - textPrinter->japanese = 1; - return 2; + textPrinter->japanese = TRUE; + return RENDER_REPEAT; case EXT_CTRL_CODE_ENG: - textPrinter->japanese = 0; - return 2; + textPrinter->japanese = FALSE; + return RENDER_REPEAT; } break; case CHAR_PROMPT_CLEAR: - textPrinter->state = 2; + textPrinter->state = RENDER_STATE_CLEAR; TextPrinterInitDownArrowCounters(textPrinter); - return 3; + return RENDER_UPDATE; case CHAR_PROMPT_SCROLL: - textPrinter->state = 3; + textPrinter->state = RENDER_STATE_SCROLL_START; TextPrinterInitDownArrowCounters(textPrinter); - return 3; + return RENDER_UPDATE; case CHAR_EXTRA_SYMBOL: currChar = *textPrinter->printerTemplate.currentChar | 0x100; textPrinter->printerTemplate.currentChar++; @@ -803,30 +811,31 @@ u16 RenderText(struct TextPrinter *textPrinter) currChar = *textPrinter->printerTemplate.currentChar++; gGlyphInfo.width = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing; - return 0; + return RENDER_PRINT; case EOS: - return 1; + return RENDER_FINISH; } switch (subStruct->glyphId) { - case 0: + case FONT_0: DecompressGlyphFont0(currChar, textPrinter->japanese); break; - case 1: + case FONT_1: DecompressGlyphFont1(currChar, textPrinter->japanese); break; - case 2: + case FONT_2: DecompressGlyphFont2(currChar, textPrinter->japanese); break; - case 3: + case FONT_3: DecompressGlyphFont3(currChar, textPrinter->japanese); break; - case 4: + case FONT_4: DecompressGlyphFont4(currChar, textPrinter->japanese); break; - case 5: + case FONT_5: DecompressGlyphFont5(currChar, textPrinter->japanese); + break; } CopyGlyphToWindow(textPrinter); @@ -848,30 +857,30 @@ u16 RenderText(struct TextPrinter *textPrinter) else textPrinter->printerTemplate.currentX += gGlyphInfo.width; } - return 0; - case 1: + return RENDER_PRINT; + case RENDER_STATE_WAIT: if (TextPrinterWait(textPrinter)) - textPrinter->state = 0; - return 3; - case 2: + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_CLEAR: if (TextPrinterWaitWithDownArrow(textPrinter)) { FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - textPrinter->state = 0; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; } - return 3; - case 3: + return RENDER_UPDATE; + case RENDER_STATE_SCROLL_START: if (TextPrinterWaitWithDownArrow(textPrinter)) { TextPrinterClearDownArrow(textPrinter); textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->state = 4; + textPrinter->state = RENDER_STATE_SCROLL; } - return 3; - case 4: + return RENDER_UPDATE; + case RENDER_STATE_SCROLL: if (textPrinter->scrollDistance) { @@ -889,22 +898,22 @@ u16 RenderText(struct TextPrinter *textPrinter) } else { - textPrinter->state = 0; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; } - return 3; - case 5: + return RENDER_UPDATE; + case RENDER_STATE_WAIT_SE: if (!IsSEPlaying()) - textPrinter->state = 0; - return 3; - case 6: + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_PAUSE: if (textPrinter->delayCounter != 0) textPrinter->delayCounter--; else - textPrinter->state = 0; - return 3; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; } - return 1; + return RENDER_FINISH; } // Unused @@ -919,10 +928,8 @@ static s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci u8 lineWidths[8]; const u8 *strLocal; - for (i = 0; i < 8; i++) - { + for (i = 0; i < (int)ARRAY_COUNT(lineWidths); i++) lineWidths[i] = 0; - } width = 0; line = 0; @@ -990,7 +997,7 @@ static s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci } } while (temp != EOS); - for (width = 0, strPos = 0; strPos < 8; ++strPos) + for (width = 0, strPos = 0; strPos < (int)ARRAY_COUNT(lineWidths); ++strPos) { if (width < lineWidths[strPos]) width = lineWidths[strPos]; @@ -1003,7 +1010,7 @@ s32 (*GetFontWidthFunc(u8 glyphId))(u16 _glyphId, bool32 _isJapanese) { u32 i; - for (i = 0; i < 7; ++i) + for (i = 0; i < ARRAY_COUNT(sGlyphWidthFuncs); ++i) { if (glyphId == sGlyphWidthFuncs[i].fontId) return *sGlyphWidthFuncs[i].func; @@ -1159,10 +1166,8 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) } else { - if (fontId != 6 && isJapanese) - { + if (fontId != FONT_BRAILLE && isJapanese) glyphWidth += localLetterSpacing; - } lineWidth += glyphWidth; } break; @@ -1175,7 +1180,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7) +u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7) { u8 shadowColor; u8 *strLocal; @@ -1262,7 +1267,7 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a case EOS: break; default: - DecompressGlyphFont9(temp); + DecompressGlyph_Bold(temp); CpuCopy32(gGlyphInfo.pixels, pixels, 0x20); CpuCopy32(gGlyphInfo.pixels + 0x40, pixels + 0x20, 0x20); pixels += 0x40; @@ -1275,35 +1280,41 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a return 1; } +#define sDelay data[0] +#define sState data[1] + void sub_80062B0(struct Sprite *sprite) { - if(sprite->data[0]) + if (sprite->sDelay) { - sprite->data[0]--; + sprite->sDelay--; } else { - sprite->data[0] = 8; - switch(sprite->data[1]) + sprite->sDelay = 8; + switch(sprite->sState) { - case 0: - sprite->y2 = 0; - break; - case 1: - sprite->y2 = 1; - break; - case 2: - sprite->y2 = 2; - break; - case 3: - sprite->y2 = 1; - sprite->data[1] = 0; - return; + case 0: + sprite->y2 = 0; + break; + case 1: + sprite->y2 = 1; + break; + case 2: + sprite->y2 = 2; + break; + case 3: + sprite->y2 = 1; + sprite->sState = 0; + return; } - sprite->data[1]++; + sprite->sState++; } } +#undef sDelay +#undef sState + u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority) { u8 spriteId; @@ -1358,7 +1369,7 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; - if (isJapanese == 1) + if (isJapanese == TRUE) { glyphs = sFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); @@ -1376,7 +1387,7 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) } } -s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; @@ -1384,7 +1395,7 @@ s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) return sFont0LatinGlyphWidths[glyphId]; } -void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) +static void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; @@ -1409,7 +1420,7 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) } } -s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; @@ -1475,7 +1486,7 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) } } -s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) { @@ -1525,7 +1536,7 @@ static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese) DecompressGlyphFont2(glyphId, isJapanese); } -s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese) { if(isJapanese == TRUE) return 10; @@ -1591,7 +1602,7 @@ static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) } } -s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese) { if(isJapanese == TRUE) { @@ -1662,7 +1673,7 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) } } -s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese) { if(isJapanese == TRUE) { @@ -1675,7 +1686,7 @@ s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese) return sFont5LatinGlyphWidths[glyphId]; } -void DecompressGlyphFont9(u16 glyphId) +static void DecompressGlyph_Bold(u16 glyphId) { const u16 *glyphs = sFont9JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); From e78094de85d03fbfb742ff5961d2e76693984060 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Nov 2022 13:44:40 -0500 Subject: [PATCH 38/42] Document fonts --- charmap.txt | 12 +- .../CeladonCity_DepartmentStore_Roof/text.inc | 2 +- .../text.inc | 2 +- data/maps/PalletTown_RivalsHouse/text.inc | 4 +- data/maps/PewterCity_Gym/text.inc | 4 +- data/maps/VermilionCity/text.inc | 8 +- data/text/fame_checker.inc | 172 +++++++------- data/text/pokedex_rating.inc | 2 +- .../fonts/{font6_braille.png => braille.png} | Bin .../{font9_jap.png => japanese_bold.png} | Bin .../{font5_jap.png => japanese_female.png} | Bin .../{font4_jap.png => japanese_male.png} | Bin .../{font2_jap.png => japanese_normal.png} | Bin .../{font0_jap.png => japanese_small.png} | Bin .../{font1_jap.png => japanese_tall.png} | Bin .../{font2_latin.png => latin_female.png} | Bin .../fonts/{font4_latin.png => latin_male.png} | Bin .../{font5_latin.png => latin_normal.png} | Bin .../{font0_latin.png => latin_small.png} | Bin graphics_file_rules.mk | 22 +- include/strings.h | 4 +- include/text.h | 38 ++-- src/bag.c | 12 +- src/battle_interface.c | 4 +- src/battle_message.c | 60 ++--- src/battle_records.c | 14 +- src/battle_script_commands.c | 2 +- src/berry_crush.c | 78 +++---- src/berry_pouch.c | 48 ++-- src/berry_powder.c | 4 +- src/braille_text.c | 20 +- src/buy_menu_helpers.c | 2 +- src/cable_club.c | 2 +- src/clear_save_data_screen.c | 6 +- src/coins.c | 10 +- src/credits.c | 6 +- src/data/union_room.h | 14 +- src/daycare.c | 10 +- src/diploma.c | 10 +- src/dodrio_berry_picking.c | 70 +++--- src/easy_chat_3.c | 28 +-- src/evolution_scene.c | 2 +- src/fame_checker.c | 30 +-- src/field_player_avatar.c | 8 +- src/field_screen_effect.c | 2 +- src/field_specials.c | 12 +- src/hall_of_fame.c | 34 +-- src/help_message.c | 2 +- src/help_system_util.c | 26 +-- src/item_menu.c | 52 ++--- src/item_pc.c | 42 ++-- src/item_use.c | 42 ++-- src/itemfinder.c | 6 +- src/learn_move.c | 12 +- src/link.c | 10 +- src/mail.c | 8 +- src/mailbox_pc.c | 6 +- src/main_menu.c | 30 +-- src/map_name_popup.c | 4 +- src/map_preview_screen.c | 4 +- src/menu.c | 10 +- src/menu2.c | 4 +- src/menu_helpers.c | 4 +- src/money.c | 6 +- src/mystery_gift_menu.c | 30 +-- src/mystery_gift_show_card.c | 24 +- src/mystery_gift_show_news.c | 6 +- src/naming_screen.c | 16 +- src/new_menu_helpers.c | 58 ++--- src/oak_speech.c | 26 +-- src/option_menu.c | 26 +-- src/party_menu.c | 36 +-- src/player_pc.c | 40 ++-- src/pokedex_screen.c | 80 +++---- src/pokemon_jump.c | 32 +-- src/pokemon_special_anim_scene.c | 16 +- src/pokemon_storage_system_data.c | 4 +- src/pokemon_storage_system_graphics.c | 2 +- src/pokemon_storage_system_menu.c | 22 +- src/pokemon_storage_system_misc.c | 2 +- src/pokemon_storage_system_tasks.c | 12 +- src/pokemon_summary_screen.c | 76 +++---- src/quest_log.c | 4 +- src/region_map.c | 12 +- src/script_menu.c | 54 ++--- src/shop.c | 34 +-- src/slot_machine.c | 8 +- src/start_menu.c | 28 +-- src/strings.c | 86 +++---- src/teachy_tv.c | 4 +- src/text.c | 215 +++++++++--------- src/tm_case.c | 52 ++--- src/trade.c | 28 +-- src/trade_scene.c | 2 +- src/trainer_card.c | 12 +- src/trainer_tower.c | 14 +- src/union_room.c | 36 +-- src/union_room_battle.c | 2 +- src/union_room_chat_display.c | 30 +-- src/vs_seeker.c | 6 +- src/wireless_communication_status_screen.c | 14 +- 101 files changed, 1084 insertions(+), 1091 deletions(-) rename graphics/fonts/{font6_braille.png => braille.png} (100%) rename graphics/fonts/{font9_jap.png => japanese_bold.png} (100%) rename graphics/fonts/{font5_jap.png => japanese_female.png} (100%) rename graphics/fonts/{font4_jap.png => japanese_male.png} (100%) rename graphics/fonts/{font2_jap.png => japanese_normal.png} (100%) rename graphics/fonts/{font0_jap.png => japanese_small.png} (100%) rename graphics/fonts/{font1_jap.png => japanese_tall.png} (100%) rename graphics/fonts/{font2_latin.png => latin_female.png} (100%) rename graphics/fonts/{font4_latin.png => latin_male.png} (100%) rename graphics/fonts/{font5_latin.png => latin_normal.png} (100%) rename graphics/fonts/{font0_latin.png => latin_small.png} (100%) diff --git a/charmap.txt b/charmap.txt index 8aba3a327..78305c303 100644 --- a/charmap.txt +++ b/charmap.txt @@ -445,12 +445,12 @@ RESUME_MUSIC = FC 18 @ fonts -FONT_0 = FC 06 00 -FONT_1 = FC 06 01 -FONT_2 = FC 06 02 -FONT_3 = FC 06 03 -FONT_4 = FC 06 04 -FONT_5 = FC 06 05 +FONT_SMALL = FC 06 00 +FONT_NORMAL_COPY_1 = FC 06 01 +FONT_NORMAL = FC 06 02 +FONT_NORMAL_COPY_2 = FC 06 03 +FONT_MALE = FC 06 04 +FONT_FEMALE = FC 06 05 @ colors diff --git a/data/maps/CeladonCity_DepartmentStore_Roof/text.inc b/data/maps/CeladonCity_DepartmentStore_Roof/text.inc index 95e95feff..9cde20d36 100644 --- a/data/maps/CeladonCity_DepartmentStore_Roof/text.inc +++ b/data/maps/CeladonCity_DepartmentStore_Roof/text.inc @@ -1,7 +1,7 @@ CeladonCity_DepartmentStore_Roof_Text_ImThirstyGiveHerDrink:: .string "I'm thirsty!\n" .string "I want something to drink!\p" - .string "{FONT_2}Give her a drink?$" + .string "{FONT_NORMAL}Give her a drink?$" CeladonCity_DepartmentStore_Roof_Text_GiveWhichDrink:: .string "Give her which drink?$" diff --git a/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/text.inc b/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/text.inc index e9dca709d..ae0524e68 100644 --- a/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/text.inc +++ b/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/text.inc @@ -64,7 +64,7 @@ CinnabarIsland_PokemonLab_ExperimentRoom_Text_ThatFossilIsOfMonMakeItLiveAgain:: CinnabarIsland_PokemonLab_ExperimentRoom_Text_HandedFossilToWeirdDoctor:: .string "So!\n" .string "You hurry and give me that!\p" - .string "{FONT_2}{PLAYER} handed over the\n" + .string "{FONT_NORMAL}{PLAYER} handed over the\n" .string "{STR_VAR_2} to the weird doctor.$" CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalk:: diff --git a/data/maps/PalletTown_RivalsHouse/text.inc b/data/maps/PalletTown_RivalsHouse/text.inc index 253f61236..38172688c 100644 --- a/data/maps/PalletTown_RivalsHouse/text.inc +++ b/data/maps/PalletTown_RivalsHouse/text.inc @@ -62,8 +62,8 @@ PalletTown_RivalsHouse_Text_LookingNiceInNoTime:: .string "nice in no time.$" PalletTown_RivalsHouse_Text_ThereYouGoAllDone:: - .string "{FONT_2}{STR_VAR_1} looks dreamily content…\p" - .string "{FONT_5}DAISY: There you go! All done.\n" + .string "{FONT_NORMAL}{STR_VAR_1} looks dreamily content…\p" + .string "{FONT_FEMALE}DAISY: There you go! All done.\n" .string "See? Doesn't it look nice?\p" .string "Giggle…\n" .string "It's such a cute POKéMON.$" diff --git a/data/maps/PewterCity_Gym/text.inc b/data/maps/PewterCity_Gym/text.inc index a92ebe095..706842927 100644 --- a/data/maps/PewterCity_Gym/text.inc +++ b/data/maps/PewterCity_Gym/text.inc @@ -23,9 +23,9 @@ PewterCity_Gym_Text_BrockDefeat:: .string "As proof of your victory, I confer\n" .string "on you this…the official POKéMON\l" .string "LEAGUE BOULDERBADGE.\p" - .string "{FONT_2}{PLAYER} received the BOULDERBADGE\n" + .string "{FONT_NORMAL}{PLAYER} received the BOULDERBADGE\n" .string "from BROCK!{PAUSE_MUSIC}{PLAY_BGM}{MUS_OBTAIN_BADGE}{PAUSE 0xFE}{PAUSE 0x56}{RESUME_MUSIC}\p" - .string "{FONT_4}Just having the BOULDERBADGE makes\n" + .string "{FONT_MALE}Just having the BOULDERBADGE makes\n" .string "your POKéMON more powerful.\p" .string "It also enables the use of the\n" .string "move FLASH outside of battle.\p" diff --git a/data/maps/VermilionCity/text.inc b/data/maps/VermilionCity/text.inc index a7d41c462..befc4a356 100644 --- a/data/maps/VermilionCity/text.inc +++ b/data/maps/VermilionCity/text.inc @@ -61,14 +61,14 @@ VermilionCity_Text_DoYouHaveATicket:: .string "Excuse me, do you have a ticket?$" VermilionCity_Text_FlashedSSTicket:: - .string "{FONT_2}{PLAYER} flashed the S.S. TICKET!\p" - .string "{FONT_4}Great!\n" + .string "{FONT_NORMAL}{PLAYER} flashed the S.S. TICKET!\p" + .string "{FONT_MALE}Great!\n" .string "Welcome to the S.S. ANNE!$" VermilionCity_Text_DontHaveNeededSSTicket:: - .string "{FONT_2}{PLAYER} doesn't have the needed\n" + .string "{FONT_NORMAL}{PLAYER} doesn't have the needed\n" .string "S.S. TICKET.\p" - .string "{FONT_4}Sorry!\p" + .string "{FONT_MALE}Sorry!\p" .string "You need a ticket to get aboard.$" VermilionCity_Text_TheShipSetSail:: diff --git a/data/text/fame_checker.inc b/data/text/fame_checker.inc index a95d2abc8..b4d52b208 100644 --- a/data/text/fame_checker.inc +++ b/data/text/fame_checker.inc @@ -4,13 +4,13 @@ gFameCheckerFlavorText_ProfOak0:: @ 0x81AD106 gFameCheckerFlavorText_ProfOak1:: @ 0x81AD145 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}To make a complete guide on all\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}To make a complete guide on all\n" .string "the POKéMON in the world…\p" .string "That was my dream!$" gFameCheckerFlavorText_ProfOak2:: @ 0x81AD1BB .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK may not look like much,\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK may not look like much,\n" .string "but he's the authority on POKéMON.\p" .string "Many POKéMON TRAINERS hold him in\n" .string "high regard.$" @@ -22,7 +22,7 @@ gFameCheckerFlavorText_ProfOak3:: @ 0x81AD258 gFameCheckerFlavorText_ProfOak4:: @ 0x81AD2B9 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear OAK's taken a lot of\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear OAK's taken a lot of\n" .string "interest in you, child.\p" .string "That old duff was once tough and\n" .string "handsome.\p" @@ -31,26 +31,26 @@ gFameCheckerFlavorText_ProfOak4:: @ 0x81AD2B9 gFameCheckerFlavorText_ProfOak5:: @ 0x81AD377 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK is going to have his own\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK is going to have his own\n" .string "radio show soon.\p" .string "The program will be called PROF.\n" .string "OAK'S POKéMON SEMINAR.$" gFameCheckerFlavorText_Daisy0:: @ 0x81AD40C .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}If you show DAISY your POKéMON,\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}If you show DAISY your POKéMON,\n" .string "she can tell how much it likes you.\p" .string "Occasionally, she will even groom\n" .string "a POKéMON for you.$" gFameCheckerFlavorText_Daisy1:: @ 0x81AD4AE .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}But the person who is most liked by\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}But the person who is most liked by\n" .string "POKéMON is DAISY, I think.$" gFameCheckerFlavorText_Daisy2:: @ 0x81AD516 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}She was gently grooming POKéMON…\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}She was gently grooming POKéMON…\n" .string "She was a little angel.\p" .string "That little girl's name…\n" .string "I think it was DAISY.$" @@ -62,7 +62,7 @@ gFameCheckerFlavorText_Daisy3:: @ 0x81AD5A7 gFameCheckerFlavorText_Daisy4:: @ 0x81AD608 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}A girl from PALLET TOWN, DAISY,\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}A girl from PALLET TOWN, DAISY,\n" .string "she enjoys TEA every day.\p" .string "She visits the CELADON DEPT. STORE\n" .string "to buy some TEA.$" @@ -81,7 +81,7 @@ gFameCheckerFlavorText_Brock0:: @ 0x81AD705 gFameCheckerFlavorText_Brock1:: @ 0x81AD771 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My rock-hard willpower is evident\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My rock-hard willpower is evident\n" .string "in even my POKéMON.\p" .string "My POKéMON are all rock hard and\n" .string "have true-grit determination.\p" @@ -90,7 +90,7 @@ gFameCheckerFlavorText_Brock1:: @ 0x81AD771 gFameCheckerFlavorText_Brock2:: @ 0x81AD840 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}There aren't many serious POKéMON\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}There aren't many serious POKéMON\n" .string "TRAINERS here.\p" .string "They're all like BUG CATCHERS,\n" .string "you know, just hobbyists.\p" @@ -99,14 +99,14 @@ gFameCheckerFlavorText_Brock2:: @ 0x81AD840 gFameCheckerFlavorText_Brock3:: @ 0x81AD908 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BROCK is cool. He's not just tough.\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BROCK is cool. He's not just tough.\n" .string "People like and respect him.\p" .string "I want to become a GYM LEADER\n" .string "like him.$" gFameCheckerFlavorText_Brock4:: @ 0x81AD99A .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hi, I'm excavating for fossils here\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hi, I'm excavating for fossils here\n" .string "under MT. MOON.\p" .string "Sometimes, BROCK of PEWTER GYM\n" .string "lends me a hand.$" @@ -124,25 +124,25 @@ gFameCheckerFlavorText_Misty0:: @ 0x81ADA91 gFameCheckerFlavorText_Misty1:: @ 0x81ADAF6 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My policy is an all-out offensive\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My policy is an all-out offensive\n" .string "with WATER-type POKéMON!$" gFameCheckerFlavorText_Misty2:: @ 0x81ADB5A .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}MISTY is a TRAINER who's going to\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}MISTY is a TRAINER who's going to\n" .string "keep improving.\p" .string "She won't lose to someone like you!$" gFameCheckerFlavorText_Misty3:: @ 0x81ADBD9 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Strong TRAINERS and WATER POKéMON\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Strong TRAINERS and WATER POKéMON\n" .string "are common sights in these parts.\p" .string "They say that MISTY of the\n" .string "CERULEAN GYM trains here.$" gFameCheckerFlavorText_Misty4:: @ 0x81ADC72 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}This cape is a famous date spot.\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}This cape is a famous date spot.\p" .string "MISTY, the GYM LEADER, has high\n" .string "hopes about this place.$" @@ -159,23 +159,23 @@ gFameCheckerFlavorText_LtSurge0:: @ 0x81ADD3C gFameCheckerFlavorText_LtSurge1:: @ 0x81ADDA7 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I tell you, kid, electric POKéMON\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I tell you, kid, electric POKéMON\n" .string "saved me during the war!$" gFameCheckerFlavorText_LtSurge2:: @ 0x81ADE0B .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}When I was in the Army, LT. SURGE\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}When I was in the Army, LT. SURGE\n" .string "was my strict CO.\p" .string "He was a hard taskmaster.$" gFameCheckerFlavorText_LtSurge3:: @ 0x81ADE82 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE was always famous for\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE was always famous for\n" .string "his cautious nature in the Army.$" gFameCheckerFlavorText_LtSurge4:: @ 0x81ADEEC .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE installed the traps in\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE installed the traps in\n" .string "the GYM himself.\p" .string "He set up double locks everywhere.$" @@ -194,26 +194,26 @@ gFameCheckerFlavorText_Erika0:: @ 0x81AE009 gFameCheckerFlavorText_Erika1:: @ 0x81AE072 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am a student of the art of\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am a student of the art of\n" .string "flower arranging.\p" .string "My POKéMON are solely of the\n" .string "GRASS type.$" gFameCheckerFlavorText_Erika2:: @ 0x81AE0F3 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Our LEADER ERIKA might be quiet,\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Our LEADER ERIKA might be quiet,\n" .string "but she's famous around here.$" gFameCheckerFlavorText_Erika3:: @ 0x81AE15B .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We only use GRASS-type POKéMON at\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We only use GRASS-type POKéMON at\n" .string "our GYM.\p" .string "Why? We also use them for making\n" .string "flower arrangements!$" gFameCheckerFlavorText_Erika4:: @ 0x81AE1E5 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I would never collect POKéMON if\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I would never collect POKéMON if\n" .string "they were unattractive.$" gFameCheckerFlavorText_Erika5:: @ 0x81AE247 @@ -230,18 +230,18 @@ gFameCheckerFlavorText_Koga0:: @ 0x81AE2B6 gFameCheckerFlavorText_Koga1:: @ 0x81AE31D .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Despair to the creeping horror of\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Despair to the creeping horror of\n" .string "POISON-type POKéMON!$" gFameCheckerFlavorText_Koga2:: @ 0x81AE37D .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Even though I've lost, I will keep\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Even though I've lost, I will keep\n" .string "training according to the teachings\l" .string "of KOGA, my ninja master.$" gFameCheckerFlavorText_Koga3:: @ 0x81AE407 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My father is the GYM LEADER of\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My father is the GYM LEADER of\n" .string "this town.\p" .string "I'm training to use POISON POKéMON\n" .string "as well as my father.$" @@ -255,7 +255,7 @@ gFameCheckerFlavorText_Koga4:: @ 0x81AE48D gFameCheckerFlavorText_Koga5:: @ 0x81AE51B .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The SAFARI ZONE's huge, wouldn't\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The SAFARI ZONE's huge, wouldn't\n" .string "you say?\p" .string "FUCHSIA's GYM LEADER, KOGA, \n" .string "patrols the grounds every so often.\p" @@ -270,21 +270,21 @@ gFameCheckerFlavorText_Sabrina0:: @ 0x81AE5E8 gFameCheckerFlavorText_Sabrina1:: @ 0x81AE656 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You know about a girl GYM LEADER\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You know about a girl GYM LEADER\n" .string "in SAFFRON CITY?\p" .string "She uses PSYCHIC-type POKéMON,\n" .string "right?$" gFameCheckerFlavorText_Sabrina2:: @ 0x81AE6D7 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I have had psychic powers since\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I have had psychic powers since\n" .string "I was a child.\p" .string "It started when a spoon I\n" .string "carelessly tossed, bent.$" gFameCheckerFlavorText_Sabrina3:: @ 0x81AE762 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I dislike battling, but if you wish,\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I dislike battling, but if you wish,\n" .string "I will show you my powers!$" gFameCheckerFlavorText_Sabrina4:: @ 0x81AE7CB @@ -295,7 +295,7 @@ gFameCheckerFlavorText_Sabrina4:: @ 0x81AE7CB gFameCheckerFlavorText_Sabrina5:: @ 0x81AE841 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}SABRINA just wiped out the KARATE\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}SABRINA just wiped out the KARATE\n" .string "MASTER next door.$" gFameCheckerFlavorText_Blaine0:: @ 0x81AE89E @@ -306,13 +306,13 @@ gFameCheckerFlavorText_Blaine0:: @ 0x81AE89E gFameCheckerFlavorText_Blaine1:: @ 0x81AE90A .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My fiery POKéMON are all rough\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My fiery POKéMON are all rough\n" .string "and ready with intense heat!\p" .string "They incinerate all challengers!$" gFameCheckerFlavorText_Blaine2:: @ 0x81AE990 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Our LEADER, BLAINE, became lost\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Our LEADER, BLAINE, became lost\n" .string "in the mountains but good.\p" .string "Night fell when a fiery bird\n" .string "POKéMON appeared.\p" @@ -321,7 +321,7 @@ gFameCheckerFlavorText_Blaine2:: @ 0x81AE990 gFameCheckerFlavorText_Blaine3:: @ 0x81AEA59 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}CINNABAR GYM's BLAINE is quite the\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}CINNABAR GYM's BLAINE is quite the\n" .string "odd fellow.\p" .string "He's lived on the island since way\n" .string "before the LAB was built.$" @@ -341,16 +341,16 @@ gFameCheckerFlavorText_Blaine5:: @ 0x81AEB69 gFameCheckerFlavorText_Lorelei0:: @ 0x81AEBDF .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am LORELEI of the ELITE FOUR.$" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am LORELEI of the ELITE FOUR.$" gFameCheckerFlavorText_Lorelei1:: @ 0x81AEC28 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}No one can best me when it comes\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}No one can best me when it comes\n" .string "to icy POKéMON.$" gFameCheckerFlavorText_Lorelei2:: @ 0x81AEC82 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Where was this person born?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We've had a great and powerful\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We've had a great and powerful\n" .string "TRAINER grow up on this island.\p" .string "I bet even you'd know her.\n" .string "It's LORELEI of the ELITE FOUR!$" @@ -363,14 +363,14 @@ gFameCheckerFlavorText_Lorelei3:: @ 0x81AED27 gFameCheckerFlavorText_Lorelei4:: @ 0x81AEDAA .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Did you know that LORELEI has lots\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Did you know that LORELEI has lots\n" .string "and lots of stuffed dolls?\p" .string "Every time she comes back to\n" .string "FOUR ISLAND, her collection grows!$" gFameCheckerFlavorText_Lorelei5:: @ 0x81AEE51 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The LAPRAS she has, I imagine it\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The LAPRAS she has, I imagine it\n" .string "to be the one she met as a child.\p" .string "I believe it was in ICEFALL CAVE\n" .string "that she caught it.\p" @@ -379,11 +379,11 @@ gFameCheckerFlavorText_Lorelei5:: @ 0x81AEE51 gFameCheckerFlavorText_Bruno0:: @ 0x81AEF25 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am BRUNO of the ELITE FOUR!$" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am BRUNO of the ELITE FOUR!$" gFameCheckerFlavorText_Bruno1:: @ 0x81AEF6C .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I've lived and trained with my\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I've lived and trained with my\n" .string "fighting POKéMON!$" gFameCheckerFlavorText_Bruno2:: @ 0x81AEFC6 @@ -394,14 +394,14 @@ gFameCheckerFlavorText_Bruno2:: @ 0x81AEFC6 gFameCheckerFlavorText_Bruno3:: @ 0x81AF04C .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BRUNO, who's a senior ahead of me,\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BRUNO, who's a senior ahead of me,\n" .string "visits the SPA on occasion.\p" .string "He comes to rehab injuries, both\n" .string "his own and his POKéMON's.$" gFameCheckerFlavorText_Bruno4:: @ 0x81AF0F0 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's one of the ELITE FOUR.\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's one of the ELITE FOUR.\n" .string "His name is BRUNO.\p" .string "He went away disappointed when he\n" .string "found out that they were all sold\l" @@ -409,22 +409,22 @@ gFameCheckerFlavorText_Bruno4:: @ 0x81AF0F0 gFameCheckerFlavorText_Bruno5:: @ 0x81AF19A .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Even BRUNO…\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Even BRUNO…\n" .string "He trained with a fellow by the\l" .string "name of BRAWLY before.$" gFameCheckerFlavorText_Agatha0:: @ 0x81AF200 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am AGATHA of the ELITE FOUR.$" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am AGATHA of the ELITE FOUR.$" gFameCheckerFlavorText_Agatha1:: @ 0x81AF248 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}AGATHA's GHOST-type POKéMON are\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}AGATHA's GHOST-type POKéMON are\n" .string "horrifically terrifying in toughness.$" gFameCheckerFlavorText_Agatha2:: @ 0x81AF2B7 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}That old lady's also got a really\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}That old lady's also got a really\n" .string "short fuse, too.\p" .string "It doesn't take anything to get\n" .string "that scary lady hollering.$" @@ -437,7 +437,7 @@ gFameCheckerFlavorText_Agatha3:: @ 0x81AF34E gFameCheckerFlavorText_Agatha4:: @ 0x81AF3BE .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear OAK's taken a lot of\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear OAK's taken a lot of\n" .string "interest in you, child.\p" .string "That old duff was once tough and\n" .string "handsome.\p" @@ -446,19 +446,19 @@ gFameCheckerFlavorText_Agatha4:: @ 0x81AF3BE gFameCheckerFlavorText_Agatha5:: @ 0x81AF47C .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Take AGATHA, for example.\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Take AGATHA, for example.\p" .string "She set a record for being the\n" .string "oldest-ever ELITE FOUR member.$" gFameCheckerFlavorText_Lance0:: @ 0x81AF4FD .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I lead the ELITE FOUR.\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I lead the ELITE FOUR.\p" .string "You can call me LANCE the dragon\n" .string "TRAINER.$" gFameCheckerFlavorText_Lance1:: @ 0x81AF567 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You know that dragons are\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You know that dragons are\n" .string "mythical POKéMON.\p" .string "They're hard to catch and raise,\n" .string "but their powers are superior.\p" @@ -467,13 +467,13 @@ gFameCheckerFlavorText_Lance1:: @ 0x81AF567 gFameCheckerFlavorText_Lance2:: @ 0x81AF641 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He stands for justice!\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He stands for justice!\n" .string "He's cool, and yet passionate!\l" .string "He's the greatest, LANCE!$" gFameCheckerFlavorText_Lance3:: @ 0x81AF6BA .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We have a customer, LANCE, who\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We have a customer, LANCE, who\n" .string "occasionally comes.\p" .string "He always buys capes.\p" .string "I wonder… Does he have many\n" @@ -487,56 +487,56 @@ gFameCheckerFlavorText_Lance4:: @ 0x81AF758 gFameCheckerFlavorText_Lance5:: @ 0x81AF7CB .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}From what I've heard, LANCE has\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}From what I've heard, LANCE has\n" .string "a cousin who's a GYM LEADER\l" .string "somewhere far away.$" gFameCheckerFlavorText_Bill0:: @ 0x81AF83E .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}After all, BILL's world-famous as a\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}After all, BILL's world-famous as a\n" .string "POKéMANIAC.\p" .string "He invented the POKéMON Storage\n" .string "System on PC, too.$" gFameCheckerFlavorText_Bill1:: @ 0x81AF8CA .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL has lots of POKéMON!\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL has lots of POKéMON!\n" .string "He collects rare ones, too!$" gFameCheckerFlavorText_Bill2:: @ 0x81AF929 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's my grandson!\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's my grandson!\p" .string "He always liked collecting things,\n" .string "even as a child!$" gFameCheckerFlavorText_Bill3:: @ 0x81AF998 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL is a POKéMANIAC, so he loves\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL is a POKéMANIAC, so he loves\n" .string "every kind.\p" .string "Apparently, the first one he caught\n" .string "was an ABRA.$" gFameCheckerFlavorText_Bill4:: @ 0x81AFA20 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL's hometown is GOLDENROD CITY,\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL's hometown is GOLDENROD CITY,\n" .string "where his folks still live.\p" .string "I've heard that it's quite the\n" .string "festive, bustling city.$" gFameCheckerFlavorText_Bill5:: @ 0x81AFAB9 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Apparently, BILL simply can't\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Apparently, BILL simply can't\n" .string "stomach milk at all.$" gFameCheckerFlavorText_MrFuji0:: @ 0x81AFB0C .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's really kind.\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's really kind.\p" .string "He looks after abandoned and\n" .string "orphaned POKéMON.$" gFameCheckerFlavorText_MrFuji1:: @ 0x81AFB76 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}This old guy marched right up to\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}This old guy marched right up to\n" .string "our HIDEOUT.\p" .string "Then, he starts ranting about how\n" .string "TEAM ROCKET's abusing POKéMON.\p" @@ -553,7 +553,7 @@ gFameCheckerFlavorText_MrFuji2:: @ 0x81AFC38 gFameCheckerFlavorText_MrFuji3:: @ 0x81AFCE9 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear that MR. FUJI's not from\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear that MR. FUJI's not from\n" .string "these parts originally, either.$" gFameCheckerFlavorText_MrFuji4:: @ 0x81AFD49 @@ -572,7 +572,7 @@ gFameCheckerFlavorText_MrFuji5:: @ 0x81AFDC4 gFameCheckerFlavorText_Giovanni0:: @ 0x81AFE68 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}TEAM ROCKET captures POKéMON from\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}TEAM ROCKET captures POKéMON from\n" .string "around the world.\p" .string "They're important tools for keeping\n" .string "our criminal enterprise going.\p" @@ -580,32 +580,32 @@ gFameCheckerFlavorText_Giovanni0:: @ 0x81AFE68 gFameCheckerFlavorText_Giovanni1:: @ 0x81AFF23 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Those thugs that took over our\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Those thugs that took over our\n" .string "building…\p" .string "Their BOSS said he was looking for\n" .string "strong POKéMON.$" gFameCheckerFlavorText_Giovanni2:: @ 0x81AFFA8 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}TEAM ROCKET's BOSS is terribly\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}TEAM ROCKET's BOSS is terribly\n" .string "cruel!\p" .string "To him, POKéMON are just tools to\n" .string "be used.$" gFameCheckerFlavorText_Giovanni3:: @ 0x81B0022 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Welcome to my hideout!\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Welcome to my hideout!\p" .string "It shall be so until I can restore\n" .string "TEAM ROCKET to its former glory.$" gFameCheckerFlavorText_Giovanni4:: @ 0x81B00A6 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Blow me away! GIOVANNI was the\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Blow me away! GIOVANNI was the\n" .string "GYM LEADER of VIRIDIAN?$" gFameCheckerFlavorText_Giovanni5:: @ 0x81B0106 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You… You're not GIOVANNI's kid,\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You… You're not GIOVANNI's kid,\n" .string "are you?\p" .string "No, that can't be right.\n" .string "GIOVANNI's kid has red hair.$" @@ -617,7 +617,7 @@ gFameCheckerPersonName_ProfOak:: @ 0x81B0188 gFameCheckerPersonQuote_ProfOak:: @ 0x81B0198 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: PROF. OAK\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Why do POKéMON compete and battle\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Why do POKéMON compete and battle\n" .string "so hard for you?\p" .string "They do so because they can see\n" .string "the love and trust you have\l" @@ -630,7 +630,7 @@ gFameCheckerPersonName_Daisy:: @ 0x81B0251 gFameCheckerPersonQuote_Daisy:: @ 0x81B025D .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: DAISY\n" .string "To: {PLAYER}\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}While I was comfortably enjoying\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}While I was comfortably enjoying\n" .string "my tea breaks, you've grown very\l" .string "skilled and powerful.\p" .string "I hope you'll remain a good rival\n" @@ -642,7 +642,7 @@ gFameCheckerPersonName_Brock:: @ 0x81B030F gFameCheckerPersonQuote_Brock:: @ 0x81B031B .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BROCK\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}In this big world of ours, there\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}In this big world of ours, there\n" .string "must be many tough TRAINERS.\p" .string "Let's both keep training and\n" .string "making ourselves stronger!$" @@ -653,7 +653,7 @@ gFameCheckerPersonName_Misty:: @ 0x81B03B3 gFameCheckerPersonQuote_Misty:: @ 0x81B03BF .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: MISTY\n" .string "To: {PLAYER}\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I'm going to keep training here at\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I'm going to keep training here at\n" .string "this GYM.\p" .string "When I get better, I'd love to hit\n" .string "the road and travel.$" @@ -664,7 +664,7 @@ gFameCheckerPersonName_LtSurge:: @ 0x81B0446 gFameCheckerPersonQuote_LtSurge:: @ 0x81B0456 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: LT. SURGE\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hey, kid!\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hey, kid!\n" .string "You electrified me in our battle!\p" .string "I didn't know that there were\n" .string "gutsy TRAINERS like you.\p" @@ -677,7 +677,7 @@ gFameCheckerPersonName_Erika:: @ 0x81B0504 gFameCheckerPersonQuote_Erika:: @ 0x81B0510 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: ERIKA\n" .string "To: {PLAYER}\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am so glad that there are strong\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am so glad that there are strong\n" .string "TRAINERS like you.\p" .string "That awareness alone inspires and\n" .string "motivates me to try harder.\p" @@ -690,7 +690,7 @@ gFameCheckerPersonName_Koga:: @ 0x81B05C2 gFameCheckerPersonQuote_Koga:: @ 0x81B05CD .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: KOGA\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You and I, we must both set our\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You and I, we must both set our\n" .string "sights higher and work towards\l" .string "meeting our challenges.\p" .string "Now, I must go train my daughter.$" @@ -701,7 +701,7 @@ gFameCheckerPersonName_Sabrina:: @ 0x81B0667 gFameCheckerPersonQuote_Sabrina:: @ 0x81B0675 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: SABRINA\n" .string "To: {PLAYER}\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The love you have towards your\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The love you have towards your\n" .string "POKéMON…\p" .string "It was a power that was never\n" .string "bested by my psychic power.$" @@ -712,7 +712,7 @@ gFameCheckerPersonName_Blaine:: @ 0x81B06FB gFameCheckerPersonQuote_Blaine:: @ 0x81B0708 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BLAINE\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My fire POKéMON!\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My fire POKéMON!\n" .string "They'll become even more powerful!\p" .string "And now, a quiz. How many kinds of\n" .string "FIRE-type POKéMON are there?$" @@ -723,7 +723,7 @@ gFameCheckerPersonName_Lorelei:: @ 0x81B079F gFameCheckerPersonQuote_Lorelei:: @ 0x81B07AD .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: LORELEI\n" .string "To: {PLAYER}\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I needed to thank you for your\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I needed to thank you for your\n" .string "help.\p" .string "But that has nothing to do with our\n" .string "battles.\p" @@ -735,7 +735,7 @@ gFameCheckerPersonName_Bruno:: @ 0x81B0845 gFameCheckerPersonQuote_Bruno:: @ 0x81B0851 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BRUNO\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The super power of your POKéMON\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The super power of your POKéMON\n" .string "and you I've experienced myself.\p" .string "Next time, maybe I should show you\n" .string "how to train yourself.$" @@ -746,7 +746,7 @@ gFameCheckerPersonName_Agatha:: @ 0x81B08EE gFameCheckerPersonQuote_Agatha:: @ 0x81B08FB .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: AGATHA\n" .string "To: {PLAYER}\p" - .string "{FONT_5}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}When you grow older, don't you\n" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}When you grow older, don't you\n" .string "dare go soft like that coot OAK!\p" .string "Be like me and keep battling on!$" @@ -756,7 +756,7 @@ gFameCheckerPersonName_Lance:: @ 0x81B097F gFameCheckerPersonQuote_Lance:: @ 0x81B098B .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: LANCE\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I'm considering going back to my\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I'm considering going back to my\n" .string "hometown.\p" .string "I want to retrain my DRAGON-type\n" .string "POKéMON and strengthen them.\p" @@ -769,7 +769,7 @@ gFameCheckerPersonName_Bill:: @ 0x81B0A45 gFameCheckerPersonQuote_Bill:: @ 0x81B0A50 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BILL\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hey, there! CELIO had nothing but\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hey, there! CELIO had nothing but\n" .string "praise for you.\p" .string "Hearing that makes me happy.\p" .string "When you catch some rare POKéMON,\n" @@ -781,7 +781,7 @@ gFameCheckerPersonName_MrFuji:: @ 0x81B0AFF gFameCheckerPersonQuote_MrFuji:: @ 0x81B0B0E .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: MR. FUJI\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Instead of hoping for the happiness\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Instead of hoping for the happiness\n" .string "of just your POKéMON…\p" .string "…Can I get you to wish for the\n" .string "happiness of all POKéMON?$" @@ -792,7 +792,7 @@ gFameCheckerPersonName_Giovanni:: @ 0x81B0BA6 gFameCheckerPersonQuote_Giovanni:: @ 0x81B0BB5 .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: GIOVANNI\n" .string "To: {PLAYER}\p" - .string "{FONT_4}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}There is nothing that I wish to say\n" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}There is nothing that I wish to say\n" .string "to you.\p" .string "I will concentrate solely on\n" .string "bettering myself, and none other.$" diff --git a/data/text/pokedex_rating.inc b/data/text/pokedex_rating.inc index dd93f2f9e..3aa1080aa 100644 --- a/data/text/pokedex_rating.inc +++ b/data/text/pokedex_rating.inc @@ -8,7 +8,7 @@ PokedexRating_Text_SeenXOwnedY:: .string "on your POKéDEX is:\p" .string "{STR_VAR_1} POKéMON seen and\n" .string "{STR_VAR_2} POKéMON owned.\p" - .string "{FONT_2}PROF. OAK's rating:$" + .string "{FONT_NORMAL}PROF. OAK's rating:$" PokedexRating_Text_LessThan10:: .string "You still have lots to do.\p" diff --git a/graphics/fonts/font6_braille.png b/graphics/fonts/braille.png similarity index 100% rename from graphics/fonts/font6_braille.png rename to graphics/fonts/braille.png diff --git a/graphics/fonts/font9_jap.png b/graphics/fonts/japanese_bold.png similarity index 100% rename from graphics/fonts/font9_jap.png rename to graphics/fonts/japanese_bold.png diff --git a/graphics/fonts/font5_jap.png b/graphics/fonts/japanese_female.png similarity index 100% rename from graphics/fonts/font5_jap.png rename to graphics/fonts/japanese_female.png diff --git a/graphics/fonts/font4_jap.png b/graphics/fonts/japanese_male.png similarity index 100% rename from graphics/fonts/font4_jap.png rename to graphics/fonts/japanese_male.png diff --git a/graphics/fonts/font2_jap.png b/graphics/fonts/japanese_normal.png similarity index 100% rename from graphics/fonts/font2_jap.png rename to graphics/fonts/japanese_normal.png diff --git a/graphics/fonts/font0_jap.png b/graphics/fonts/japanese_small.png similarity index 100% rename from graphics/fonts/font0_jap.png rename to graphics/fonts/japanese_small.png diff --git a/graphics/fonts/font1_jap.png b/graphics/fonts/japanese_tall.png similarity index 100% rename from graphics/fonts/font1_jap.png rename to graphics/fonts/japanese_tall.png diff --git a/graphics/fonts/font2_latin.png b/graphics/fonts/latin_female.png similarity index 100% rename from graphics/fonts/font2_latin.png rename to graphics/fonts/latin_female.png diff --git a/graphics/fonts/font4_latin.png b/graphics/fonts/latin_male.png similarity index 100% rename from graphics/fonts/font4_latin.png rename to graphics/fonts/latin_male.png diff --git a/graphics/fonts/font5_latin.png b/graphics/fonts/latin_normal.png similarity index 100% rename from graphics/fonts/font5_latin.png rename to graphics/fonts/latin_normal.png diff --git a/graphics/fonts/font0_latin.png b/graphics/fonts/latin_small.png similarity index 100% rename from graphics/fonts/font0_latin.png rename to graphics/fonts/latin_small.png diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 49dad3f64..591847f43 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -60,37 +60,37 @@ $(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/normal/shiny.gbapal \ $(CASTFORMGFXDIR)/snowy/shiny.gbapal @cat $^ >$@ -$(FONTGFXDIR)/font0_latin.latfont: $(FONTGFXDIR)/font0_latin.png +$(FONTGFXDIR)/latin_small.latfont: $(FONTGFXDIR)/latin_small.png $(GFX) $< $@ -$(FONTGFXDIR)/font0_jap.fwjpnfont: $(FONTGFXDIR)/font0_jap.png +$(FONTGFXDIR)/japanese_small.fwjpnfont: $(FONTGFXDIR)/japanese_small.png $(GFX) $< $@ -$(FONTGFXDIR)/font1_jap.fwjpnfont: $(FONTGFXDIR)/font1_jap.png +$(FONTGFXDIR)/japanese_tall.fwjpnfont: $(FONTGFXDIR)/japanese_tall.png $(GFX) $< $@ -$(FONTGFXDIR)/font2_latin.latfont: $(FONTGFXDIR)/font2_latin.png +$(FONTGFXDIR)/latin_normal.latfont: $(FONTGFXDIR)/latin_normal.png $(GFX) $< $@ -$(FONTGFXDIR)/font2_jap.fwjpnfont: $(FONTGFXDIR)/font2_jap.png +$(FONTGFXDIR)/japanese_normal.fwjpnfont: $(FONTGFXDIR)/japanese_normal.png $(GFX) $< $@ -$(FONTGFXDIR)/font4_latin.latfont: $(FONTGFXDIR)/font4_latin.png +$(FONTGFXDIR)/latin_male.latfont: $(FONTGFXDIR)/latin_male.png $(GFX) $< $@ -$(FONTGFXDIR)/font4_jap.fwjpnfont: $(FONTGFXDIR)/font4_jap.png +$(FONTGFXDIR)/japanese_male.fwjpnfont: $(FONTGFXDIR)/japanese_male.png $(GFX) $< $@ -$(FONTGFXDIR)/font5_latin.latfont: $(FONTGFXDIR)/font5_latin.png +$(FONTGFXDIR)/latin_female.latfont: $(FONTGFXDIR)/latin_female.png $(GFX) $< $@ -$(FONTGFXDIR)/font5_jap.fwjpnfont: $(FONTGFXDIR)/font5_jap.png +$(FONTGFXDIR)/japanese_female.fwjpnfont: $(FONTGFXDIR)/japanese_female.png $(GFX) $< $@ -$(FONTGFXDIR)/font6.fwjpnfont: $(FONTGFXDIR)/font6_braille.png +$(FONTGFXDIR)/braille.fwjpnfont: $(FONTGFXDIR)/braille.png $(GFX) $< $@ -$(FONTGFXDIR)/font9_jap.fwjpnfont: $(FONTGFXDIR)/font9_jap.png +$(FONTGFXDIR)/japanese_bold.fwjpnfont: $(FONTGFXDIR)/japanese_bold.png $(GFX) $< $@ graphics/title_screen/pokemon_logo.gbapal: %.gbapal: %.pal diff --git a/include/strings.h b/include/strings.h index 0d1fe4afa..375fb3ab0 100644 --- a/include/strings.h +++ b/include/strings.h @@ -103,8 +103,8 @@ extern const u8 gText_ItemCantBeHeld[]; extern const u8 gText_TMCase[]; extern const u8 gText_Close[]; extern const u8 gText_TMCaseWillBePutAway[]; -extern const u8 gText_Font0[]; -extern const u8 gText_Font2[]; +extern const u8 gText_FontSmall[]; +extern const u8 gText_FontNormal[]; extern const u8 gText_OhNoICantBuyThat[]; extern const u8 gText_HowManyWouldYouLikeToSell[]; extern const u8 gText_ICanPayThisMuch_WouldThatBeOkay[]; diff --git a/include/text.h b/include/text.h index f0dbcee60..800ebef28 100644 --- a/include/text.h +++ b/include/text.h @@ -13,14 +13,14 @@ #define TEXT_SKIP_DRAW 0xFF enum { - FONT_0, - FONT_1, - FONT_2, - FONT_3, - FONT_4, - FONT_5, + FONT_SMALL, + FONT_NORMAL_COPY_1, + FONT_NORMAL, + FONT_NORMAL_COPY_2, + FONT_MALE, + FONT_FEMALE, FONT_BRAILLE, - FONT_7, + FONT_BOLD, }; // Return values for font functions @@ -160,15 +160,13 @@ u8 GetLastTextColor(u8 colorType); void CopyGlyphToWindow(struct TextPrinter *x); void ClearTextSpan(struct TextPrinter *textPrinter, u32 width); -u16 Font0Func(struct TextPrinter *textPrinter); -u16 Font1Func(struct TextPrinter *textPrinter); -u16 Font2Func(struct TextPrinter *textPrinter); -u16 Font3Func(struct TextPrinter *textPrinter); -u16 Font4Func(struct TextPrinter *textPrinter); -u16 Font5Func(struct TextPrinter *textPrinter); -u16 Font7Func(struct TextPrinter *textPrinter); -u16 Font8Func(struct TextPrinter *textPrinter); -u16 Font6Func(struct TextPrinter *textPrinter); +u16 FontFunc_Small(struct TextPrinter *textPrinter); +u16 FontFunc_NormalCopy1(struct TextPrinter *textPrinter); +u16 FontFunc_Normal(struct TextPrinter *textPrinter); +u16 FontFunc_NormalCopy2(struct TextPrinter *textPrinter); +u16 FontFunc_Male(struct TextPrinter *textPrinter); +u16 FontFunc_Female(struct TextPrinter *textPrinter); +u16 FontFunc_Braille(struct TextPrinter *textPrinter); void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter); void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter); @@ -187,10 +185,10 @@ u8 GetKeypadIconWidth(u8 keypadIconId); u8 GetKeypadIconHeight(u8 keypadIconId); u8 GetFontAttribute(u8 fontId, u8 attributeId); u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension); -void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese); -s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese); +void DecompressGlyph_Small(u16 glyphId, bool32 isJapanese); +void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese); +void DecompressGlyph_Female(u16 glyphId, bool32 isJapanese); +s32 GetGlyphWidth_Braille(u16 font_type, bool32 isJapanese); void sub_80062B0(struct Sprite *sprite); u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority); void DestroyTextCursorSprite(u8 spriteId); diff --git a/src/bag.c b/src/bag.c index c2e8f869a..8f1cbce36 100644 --- a/src/bag.c +++ b/src/bag.c @@ -225,16 +225,16 @@ void BagPrintTextOnWindow(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 void BagPrintTextOnWin1CenteredColor0(const u8 * str, u8 unused) { - u32 x = 0x48 - GetStringWidth(FONT_1, str, 0); - AddTextPrinterParameterized3(2, FONT_1, x / 2, 1, sTextColors[0], 0, str); + u32 x = 0x48 - GetStringWidth(FONT_NORMAL_COPY_1, str, 0); + AddTextPrinterParameterized3(2, FONT_NORMAL_COPY_1, x / 2, 1, sTextColors[0], 0, str); } void BagDrawDepositItemTextBox(void) { u32 x; DrawStdFrameWithCustomTileAndPalette(2, FALSE, 0x081, 0x0C); - x = 0x40 - GetStringWidth(FONT_0, gText_DepositItem, 0); - AddTextPrinterParameterized(2, FONT_0, gText_DepositItem, x / 2, 1, 0, NULL); + x = 0x40 - GetStringWidth(FONT_SMALL, gText_DepositItem, 0); + AddTextPrinterParameterized(2, FONT_SMALL, gText_DepositItem, x / 2, 1, 0, NULL); } u8 ShowBagWindow(u8 whichWindow, u8 nItems) @@ -293,12 +293,12 @@ u8 GetBagWindow(u8 whichWindow) void BagCreateYesNoMenuBottomRight(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[3], FONT_2, 0, 2, 0x064, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[3], FONT_NORMAL, 0, 2, 0x064, 0x0E, ptrs); } void BagCreateYesNoMenuTopRight(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[4], FONT_2, 0, 2, 0x064, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[4], FONT_NORMAL, 0, 2, 0x064, 0x0E, ptrs); } void BagPrintMoneyAmount(void) diff --git a/src/battle_interface.c b/src/battle_interface.c index b967638f8..22dc43acb 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1766,7 +1766,7 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) txtPtr = StringCopy(text, gText_HighlightRed_Left); ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2); - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 47 - GetStringWidth(FONT_0, text, 0), 3, &windowId); + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 47 - GetStringWidth(FONT_SMALL, text, 0), 3, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2); SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4); @@ -2211,7 +2211,7 @@ static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, color[1] = 1; color[2] = 3; - AddTextPrinterParameterized4(winId, FONT_0, x, y, 0, 0, color, -1, str); + AddTextPrinterParameterized4(winId, FONT_SMALL, x, y, 0, 0, color, -1, str); *windowId = winId; return (u8 *)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); diff --git a/src/battle_message.c b/src/battle_message.c index ea1f07329..185792324 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1292,7 +1292,7 @@ static const u8 sText_RightArrow2[] = _("{RIGHT_ARROW_2}"); static const u8 sText_Plus[] = _("{PLUS}"); static const u8 sText_Dash[] = _("-"); -static const u8 sText_MaxHP[] = _("{FONT_0}Max{FONT_2} HP"); +static const u8 sText_MaxHP[] = _("{FONT_SMALL}Max{FONT_NORMAL} HP"); static const u8 sText_Attack[] = _("ATTACK "); static const u8 sText_Defense[] = _("DEFENSE"); static const u8 sText_SpAtk[] = _("SP. ATK"); @@ -2407,7 +2407,7 @@ static void ChooseTypeOfMoveUsedString(u8 *dst) static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { [B_WIN_MSG] = { .fillValue = PIXEL_FILL(0xf), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 2, .y = 2, .letterSpacing = 0, @@ -2419,7 +2419,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xf), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 2, .y = 2, .letterSpacing = 0, @@ -2431,7 +2431,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_1, + .fontId = FONT_NORMAL_COPY_1, .x = 0, .y = 2, .letterSpacing = 0, @@ -2443,7 +2443,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0, .y = 1, .letterSpacing = 0, @@ -2455,7 +2455,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0, .y = 1, .letterSpacing = 0, @@ -2467,7 +2467,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0, .y = 1, .letterSpacing = 0, @@ -2479,7 +2479,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0, .y = 1, .letterSpacing = 0, @@ -2491,7 +2491,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2503,7 +2503,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2515,7 +2515,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_1, + .fontId = FONT_NORMAL_COPY_1, .x = 10, .y = 2, .letterSpacing = 0, @@ -2527,7 +2527,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_1, + .fontId = FONT_NORMAL_COPY_1, .x = 0, .y = 2, .letterSpacing = 0, @@ -2539,7 +2539,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_1, + .fontId = FONT_NORMAL_COPY_1, .x = 0, .y = 2, .letterSpacing = 0, @@ -2551,7 +2551,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 0, .letterSpacing = 0, @@ -2563,7 +2563,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0x0), - .fontId = FONT_0, + .fontId = FONT_SMALL, .x = 0x20, .y = 0, .letterSpacing = 0, @@ -2575,7 +2575,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 1, @@ -2587,7 +2587,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_PLAYER] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2599,7 +2599,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_OPPONENT] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2611,7 +2611,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_MULTI_PLAYER_1] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2623,7 +2623,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_MULTI_PLAYER_2] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2635,7 +2635,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_MULTI_PLAYER_3] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2647,7 +2647,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_MULTI_PLAYER_4] = { .fillValue = PIXEL_FILL(0xe), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2659,7 +2659,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_OUTCOME_DRAW] = { .fillValue = PIXEL_FILL(0x0), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2671,7 +2671,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_OUTCOME_LEFT] = { .fillValue = PIXEL_FILL(0x0), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2683,7 +2683,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_VS_OUTCOME_RIGHT] = { .fillValue = PIXEL_FILL(0x0), - .fontId = FONT_2, + .fontId = FONT_NORMAL, .x = 0, .y = 2, .letterSpacing = 0, @@ -2695,7 +2695,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { }, [B_WIN_OAK_OLD_MAN] = { .fillValue = PIXEL_FILL(0x1), - .fontId = FONT_4, + .fontId = FONT_MALE, .x = 0, .y = 1, .letterSpacing = 0, @@ -2709,10 +2709,10 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { static const u8 sNpcTextColorToFont[] = { - [NPC_TEXT_COLOR_MALE] = FONT_4, - [NPC_TEXT_COLOR_FEMALE] = FONT_5, - [NPC_TEXT_COLOR_MON] = FONT_2, - [NPC_TEXT_COLOR_NEUTRAL] = FONT_2, + [NPC_TEXT_COLOR_MALE] = FONT_MALE, + [NPC_TEXT_COLOR_FEMALE] = FONT_FEMALE, + [NPC_TEXT_COLOR_MON] = FONT_NORMAL, + [NPC_TEXT_COLOR_NEUTRAL] = FONT_NORMAL, }; // windowId: Upper 2 bits are text flags diff --git a/src/battle_records.c b/src/battle_records.c index cc3acd38f..604ebcb81 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -486,7 +486,7 @@ static void PrintTotalRecord(struct LinkBattleRecords * records) } StringExpandPlaceholders(gStringVar4, gString_BattleRecords_TotalRecord); - AddTextPrinterParameterized4(0, FONT_2, 12, 24, 0, 2, sTextColor, 0, gStringVar4); + AddTextPrinterParameterized4(0, FONT_NORMAL, 12, 24, 0, 2, sTextColor, 0, gStringVar4); } static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y) @@ -496,7 +496,7 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y) if (record->wins == 0 && record->losses == 0 && record->draws == 0) { - AddTextPrinterParameterized4(0, FONT_2, 0, y, 0, 2, sTextColor, 0, gString_BattleRecords_7Dashes); + AddTextPrinterParameterized4(0, FONT_NORMAL, 0, y, 0, 2, sTextColor, 0, gString_BattleRecords_7Dashes); for (i = 0; i < 3; i++) { if (i == 0) @@ -505,7 +505,7 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y) x = 0x84; else x = 0xB4; - AddTextPrinterParameterized4(0, FONT_2, x, y, 0, 2, sTextColor, 0, gString_BattleRecords_4Dashes); + AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 0, 2, sTextColor, 0, gString_BattleRecords_4Dashes); } } else @@ -533,7 +533,7 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y) x = 0xB4; ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); } - AddTextPrinterParameterized4(0, FONT_2, x, y, 0, 2, sTextColor, 0, gStringVar1); + AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 0, 2, sTextColor, 0, gStringVar1); } } } @@ -545,10 +545,10 @@ static void PrintBattleRecords(void) FillWindowPixelRect(0, PIXEL_FILL(0), 0, 0, 0xD8, 0x90); StringExpandPlaceholders(gStringVar4, gString_BattleRecords_PlayersBattleResults); - left = 0xD0 - GetStringWidth(FONT_2, gStringVar4, -1); - AddTextPrinterParameterized4(0, FONT_2, left / 2, 4, 0, 2, sTextColor, 0, gStringVar4); + left = 0xD0 - GetStringWidth(FONT_NORMAL, gStringVar4, -1); + AddTextPrinterParameterized4(0, FONT_NORMAL, left / 2, 4, 0, 2, sTextColor, 0, gStringVar4); PrintTotalRecord(&gSaveBlock2Ptr->linkBattleRecords); - AddTextPrinterParameterized4(0, FONT_2, 0x54, 0x30, 0, 2, sTextColor, 0, gString_BattleRecords_ColumnHeaders); + AddTextPrinterParameterized4(0, FONT_NORMAL, 0x54, 0x30, 0, 2, sTextColor, 0, gString_BattleRecords_ColumnHeaders); for (i = 0; i < LINK_B_RECORDS_COUNT; i++) PrintOpponentBattleRecord(&gSaveBlock2Ptr->linkBattleRecords.entries[i], 0x3D + 14 * i); CommitWindow(0); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9afeb1e58..d9a2ee160 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5824,7 +5824,7 @@ static void DrawLevelUpBannerText(void) printerTemplate.currentChar = gStringVar4; printerTemplate.windowId = B_WIN_LEVEL_UP_BANNER; - printerTemplate.fontId = FONT_0; + printerTemplate.fontId = FONT_SMALL; printerTemplate.x = 32; printerTemplate.y = 0; printerTemplate.currentX = 32; diff --git a/src/berry_crush.c b/src/berry_crush.c index ec58ece26..78a9e6fba 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1268,11 +1268,11 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame * game, u8 *args) if (bFlags & F_MSG_EXPAND) { StringExpandPlaceholders(gStringVar4, sMessages[bMsgId]); - AddTextPrinterParameterized2(0, FONT_2, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } else { - AddTextPrinterParameterized2(0, FONT_2, sMessages[bMsgId], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[bMsgId], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } CopyWindowToVram(0, COPYWIN_FULL); break; @@ -2222,7 +2222,7 @@ static u32 Cmd_SaveGame(struct BerryCrushGame * game, u8 *args) if (!IsLinkTaskFinished()) return 0; DrawDialogueFrame(0, FALSE); - AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); CreateTask(Task_LinkFullSave, 0); break; @@ -2367,9 +2367,9 @@ static u32 Cmd_StopGame(struct BerryCrushGame * game, u8 *args) case 0: DrawDialogueFrame(0, FALSE); if (game->playAgainState == PLAY_AGAIN_NO_BERRIES) - AddTextPrinterParameterized2(0, FONT_2, sMessages[MSG_NO_BERRIES], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); else - AddTextPrinterParameterized2(0, FONT_2, sMessages[MSG_DROPPED], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_DROPPED], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); break; case 1: @@ -2896,8 +2896,8 @@ static void FramesToMinSec(struct BerryCrushGame_Gfx * gfx, u16 frames) static void PrintTextCentered(u8 windowId, u8 left, u8 colorId, const u8 *string) { - left = (left * 4) - (GetStringWidth(FONT_2, string, -1) / 2u); - AddTextPrinterParameterized3(windowId, FONT_2, left, 0, sBerryCrushTextColorTable[colorId], 0, string); + left = (left * 4) - (GetStringWidth(FONT_NORMAL, string, -1) / 2u); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, left, 0, sBerryCrushTextColorTable[colorId], 0, string); } static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8 y) @@ -2922,9 +2922,9 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8 if (i != 0 && bcPlayers->stats[command][i] != bcPlayers->stats[command][i - 1]) linkIdToPrint = i; ConvertIntToDecimalStringN(gStringVar1, bcPlayers->stats[command][i], STR_CONV_MODE_RIGHT_ALIGN, 4); - realX = x - GetStringWidth(FONT_2, sBCRankingHeaders[command], -1) - 4; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, realX, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, sBCRankingHeaders[command]); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, realX - 24, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar1); + realX = x - GetStringWidth(FONT_NORMAL, sBCRankingHeaders[command], -1) - 4; + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, realX, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, sBCRankingHeaders[command]); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, realX - 24, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar1); break; case RESULTS_PAGE_RANDOM: // Neatness @@ -2943,7 +2943,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8 ConvertIntToDecimalStringN(gStringVar2, realX, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, sBCRankingHeaders[command]); realX2 = x - 4; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, realX2 - GetStringWidth(FONT_2, gStringVar4, 0), y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, realX2 - GetStringWidth(FONT_NORMAL, gStringVar4, 0), y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); break; case RESULTS_PAGE_CRUSHING: // Berry names @@ -2954,7 +2954,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8 j = 0; StringCopy(gStringVar1, gBerries[j].name); StringExpandPlaceholders(gStringVar4, sBCRankingHeaders[command]); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x - GetStringWidth(FONT_2, gStringVar4, -1) - 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x - GetStringWidth(FONT_NORMAL, gStringVar4, -1) - 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); break; } if (linkPlayerId == game->localId) @@ -2964,7 +2964,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8 gStringVar3[0] = linkIdToPrint + CHAR_1; DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, game->players[linkPlayerId].name); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); } } @@ -2977,30 +2977,30 @@ static void printCrushingResults(struct BerryCrushGame * game) u8 y = GetWindowAttribute(game->gfx.resultsWindowId, WINDOW_HEIGHT) * 8 - 42; FramesToMinSec(&game->gfx, players->time); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimeColon); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimeColon); - x = 190 - (u8)GetStringWidth(FONT_2, gText_SpaceSec, 0); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceSec); + x = 190 - (u8)GetStringWidth(FONT_NORMAL, gText_SpaceSec, 0); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceSec); x -= 32; ConvertIntToDecimalStringN(gStringVar1, game->gfx.secondsInt, STR_CONV_MODE_LEADING_ZEROS, 2); ConvertIntToDecimalStringN(gStringVar2, game->gfx.secondsFrac, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY2); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); - x -= (u8)GetStringWidth(FONT_2, gText_SpaceMin, 0) + 3; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceMin); + x -= (u8)GetStringWidth(FONT_NORMAL, gText_SpaceMin, 0) + 3; + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceMin); x -= 9; ConvertIntToDecimalStringN(gStringVar1, game->gfx.minutes, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, gText_StrVar1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); y += 14; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_PressingSpeed); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_PressingSpeed); - x = 190 - (u8)GetStringWidth(FONT_2, gText_TimesPerSec, 0); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_3, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec); + x = 190 - (u8)GetStringWidth(FONT_NORMAL, gText_TimesPerSec, 0); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL_COPY_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec); for (i = 0; i < 8; ++i) if (((u8)game->pressingSpeed >> (7 - i)) & 1) @@ -3010,17 +3010,17 @@ static void printCrushingResults(struct BerryCrushGame * game) StringExpandPlaceholders(gStringVar4, gText_XDotY3); x -= 38; if (game->newRecord) - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_RED], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_RED], 0, gStringVar4); else - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); y += 14; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_Silkiness); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_Silkiness); ConvertIntToDecimalStringN(gStringVar1, players->silkiness, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_Var1Percent); - x = 190 - (u8)GetStringWidth(FONT_2, gStringVar4, 0); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); + x = 190 - (u8)GetStringWidth(FONT_NORMAL, gStringVar4, 0); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4); } static bool32 OpenResultsWindow(struct BerryCrushGame * game, struct BerryCrushGame_Gfx * spriteManager) @@ -3109,20 +3109,20 @@ static void Task_ShowBerryCrushRankings(u8 taskId) DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 0x21D, 0xD); break; case 1: - xPos = 96 - GetStringWidth(FONT_2, gText_BerryCrush2, -1) / 2u; + xPos = 96 - GetStringWidth(FONT_NORMAL, gText_BerryCrush2, -1) / 2u; AddTextPrinterParameterized3( tWindowId, - FONT_2, + FONT_NORMAL, xPos, 2, sBerryCrushTextColorTable[COLORID_BLUE], 0, gText_BerryCrush2 ); - xPos = 96 - GetStringWidth(FONT_2, gText_PressingSpeedRankings, -1) / 2u; + xPos = 96 - GetStringWidth(FONT_NORMAL, gText_PressingSpeedRankings, -1) / 2u; AddTextPrinterParameterized3( tWindowId, - FONT_2, + FONT_NORMAL, xPos, 18, sBerryCrushTextColorTable[COLORID_BLUE], @@ -3136,7 +3136,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_Var1Players); AddTextPrinterParameterized3( tWindowId, - FONT_2, + FONT_NORMAL, 4, yPos, sBerryCrushTextColorTable[COLORID_GRAY], @@ -3153,10 +3153,10 @@ static void Task_ShowBerryCrushRankings(u8 taskId) str = StringExpandPlaceholders(gStringVar4, gText_XDotY3); *str++ = CHAR_SPACE; StringCopy(str, gText_TimesPerSec); - xPos = 192 - (u8)GetStringWidth(FONT_3, gStringVar4, 0); + xPos = 192 - (u8)GetStringWidth(FONT_NORMAL_COPY_2, gStringVar4, 0); AddTextPrinterParameterized3( tWindowId, - FONT_3, + FONT_NORMAL_COPY_2, xPos, yPos, sBerryCrushTextColorTable[COLORID_GRAY], @@ -3239,8 +3239,8 @@ static void DrawPlayerNameWindows(struct BerryCrushGame * game) { AddTextPrinterParameterized4( game->gfx.nameWindowIds[i], - FONT_2, - 36 - GetStringWidth(FONT_2, game->players[i].name, 0) / 2u, + FONT_NORMAL, + 36 - GetStringWidth(FONT_NORMAL, game->players[i].name, 0) / 2u, 1, 0, 0, @@ -3253,8 +3253,8 @@ static void DrawPlayerNameWindows(struct BerryCrushGame * game) { AddTextPrinterParameterized4( game->gfx.nameWindowIds[i], - FONT_2, - 36 - GetStringWidth(FONT_2, game->players[i].name, 0) / 2u, + FONT_NORMAL, + 36 - GetStringWidth(FONT_NORMAL, game->players[i].name, 0) / 2u, 1, 0, 0, diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 7eff9ed3b..2ceaa2adf 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -672,7 +672,7 @@ static void SetUpListMenuTemplate(void) gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; gMultiuseListMenuTemplate.maxShowed = sResources->listMenuMaxShowed; - gMultiuseListMenuTemplate.fontId = FONT_2; + gMultiuseListMenuTemplate.fontId = FONT_NORMAL; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; @@ -684,13 +684,13 @@ static void SetUpListMenuTemplate(void) static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId) { - StringCopy(gStringVar4, gText_Font0); + StringCopy(gStringVar4, gText_FontSmall); StringAppend(gStringVar4, gText_NumberClear01); ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, gStringVar1); CopyItemName(itemId, gStringVar1); StringAppend(gStringVar4, sText_Space); - StringAppend(gStringVar4, gText_Font2); + StringAppend(gStringVar4, gText_FontNormal); StringAppend(gStringVar4, gStringVar1); StringCopy(dest, gStringVar4); } @@ -726,7 +726,7 @@ static void BerryPouchItemPrintFunc(u8 windowId, u32 itemId, u8 y) itemQuantity = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, itemId); ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BerryPouchPrint(windowId, FONT_0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + BerryPouchPrint(windowId, FONT_SMALL, gStringVar4, 110, y, 0, 0, 0xFF, 1); } } @@ -741,14 +741,14 @@ static void BerryPouchSetArrowCursorAt(u8 y, u8 colorIdx) u8 height; if (colorIdx == 0xFF) { - width = GetMenuCursorDimensionByFont(FONT_2, 0); - height = GetMenuCursorDimensionByFont(FONT_2, 1); + width = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); + height = GetMenuCursorDimensionByFont(FONT_NORMAL, 1); FillWindowPixelRect(0, 0, 1, y, width, height); CopyWindowToVram(0, COPYWIN_GFX); } else { - BerryPouchPrint(0, FONT_2, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx); + BerryPouchPrint(0, FONT_NORMAL, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx); } } @@ -760,7 +760,7 @@ static void PrintSelectedBerryDescription(s32 itemIdx) else str = gText_TheBerryPouchWillBePutAway; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - BerryPouchPrint(1, FONT_2, str, 0, 2, 2, 0, 0, 0); + BerryPouchPrint(1, FONT_NORMAL, str, 0, 2, 2, 0, 0, 0); } static void SetDescriptionWindowBorderPalette(s32 pal) @@ -800,8 +800,8 @@ static void DestroyScrollIndicatorArrows(void) static void PrintBerryPouchHeaderCentered(void) { - u32 slack = 72 - GetStringWidth(FONT_1, gText_BerryPouch, 0); - BerryPouchPrint(2, FONT_1, gText_BerryPouch, slack / 2, 1, 0, 0, 0, 0); + u32 slack = 72 - GetStringWidth(FONT_NORMAL_COPY_1, gText_BerryPouch, 0); + BerryPouchPrint(2, FONT_NORMAL_COPY_1, gText_BerryPouch, slack / 2, 1, 0, 0, 0, 0); } void BerryPouch_CursorResetToTop(void) @@ -914,11 +914,11 @@ void InitTossQuantitySelectUI(u8 taskId, const u8 * str) u8 windowId2; CopySelectedListMenuItemName(data[1], gStringVar1); StringExpandPlaceholders(gStringVar4, str); - BerryPouchPrint(windowId, FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1); + BerryPouchPrint(windowId, FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1); windowId2 = GetOrCreateVariableWindow(0); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BerryPouchPrint(windowId2, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1); + BerryPouchPrint(windowId2, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1); } static void PrintxQuantityOnWindow(u8 whichWindow, s16 quantity, u8 ndigits) @@ -927,7 +927,7 @@ static void PrintxQuantityOnWindow(u8 whichWindow, s16 quantity, u8 ndigits) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, ndigits); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BerryPouchPrint(windowId, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1); + BerryPouchPrint(windowId, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1); } static void Task_BerryPouchMain(u8 taskId) @@ -1023,12 +1023,12 @@ static void CreateNormalContextMenu(u8 taskId) sContextMenuNumOptions = 4; } windowId = GetOrCreateVariableWindow(sContextMenuNumOptions + 9); - AddItemMenuActionTextPrinters(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING), GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, sContextMenuActions, sContextMenuOptions); - Menu_InitCursor(windowId, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, 0); + AddItemMenuActionTextPrinters(windowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING), GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, sContextMenuActions, sContextMenuOptions); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, 0); windowId2 = GetOrCreateVariableWindow(6); CopySelectedListMenuItemName(data[1], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); - BerryPouchPrint(windowId2, FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1); + BerryPouchPrint(windowId2, FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1); } static void Task_NormalContextMenu(u8 taskId) @@ -1104,7 +1104,7 @@ static void Task_AskTossMultiple(u8 taskId) s16 * data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); - BerryPouchPrint(GetOrCreateVariableWindow(7), FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1); + BerryPouchPrint(GetOrCreateVariableWindow(7), FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1); CreateYesNoMenuWin3(taskId, &sYesNoFuncs_Toss); } @@ -1158,7 +1158,7 @@ static void Task_TossYes(u8 taskId) CopySelectedListMenuItemName(data[1], gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); - BerryPouchPrint(GetOrCreateVariableWindow(9), FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1); + BerryPouchPrint(GetOrCreateVariableWindow(9), FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1); gTasks[taskId].func = Task_WaitButtonThenTossBerries; } @@ -1201,7 +1201,7 @@ static void Task_BerryPouch_Give(u8 taskId) static void Task_Give_PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessageInBerryPouch(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitButtonBeforeDialogueWindowDestruction); + DisplayItemMessageInBerryPouch(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitButtonBeforeDialogueWindowDestruction); } static void Task_WaitButtonBeforeDialogueWindowDestruction(u8 taskId) @@ -1247,7 +1247,7 @@ static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId) { CopyItemName(itemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_TheStrVar1CantBeHeldHere); - DisplayItemMessageInBerryPouch(taskId, FONT_2, gStringVar4, Task_WaitButtonBeforeDialogueWindowDestruction); + DisplayItemMessageInBerryPouch(taskId, FONT_NORMAL, gStringVar4, Task_WaitButtonBeforeDialogueWindowDestruction); } else { @@ -1322,7 +1322,7 @@ static void Task_Sell_PrintSelectMultipleUI(u8 taskId) u8 windowId = GetOrCreateVariableWindow(1); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BerryPouchPrint(windowId, FONT_0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + BerryPouchPrint(windowId, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0xFF, 1); SellMultiple_UpdateSellPriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); PrintMoneyInWin2(); CreateScrollIndicatorArrows_SellQuantity(); @@ -1375,7 +1375,7 @@ static void Task_SellYes(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - DisplayItemMessageInBerryPouch(taskId, FONT_2, gStringVar4, Task_SellBerries_PlaySfxAndRemoveBerries); + DisplayItemMessageInBerryPouch(taskId, FONT_NORMAL, gStringVar4, Task_SellBerries_PlaySfxAndRemoveBerries); } static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId) @@ -1490,12 +1490,12 @@ void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFu static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable *ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[3], FONT_2, 0, 2, 0x001, 0xE, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[3], FONT_NORMAL, 0, 2, 0x001, 0xE, ptrs); } static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable *ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[4], FONT_2, 0, 2, 0x001, 0xE, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[4], FONT_NORMAL, 0, 2, 0x001, 0xE, ptrs); } static void PrintMoneyInWin2(void) diff --git a/src/berry_powder.c b/src/berry_powder.c index 9482d1a57..849e32f32 100644 --- a/src/berry_powder.c +++ b/src/berry_powder.c @@ -94,13 +94,13 @@ u32 GetBerryPowder(void) static void PrintBerryPowderAmount(u8 windowId, u32 amount, u8 x, u8 y, u8 speed) { ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_RIGHT_ALIGN, 5); - AddTextPrinterParameterized(windowId, FONT_0, gStringVar1, x, y, speed, NULL); + AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar1, x, y, speed, NULL); } static void DrawPlayerPowderAmount(u8 windowId, u16 baseBlock, u8 palette, u32 amount) { DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, baseBlock, palette); - AddTextPrinterParameterized(windowId, FONT_0, gOtherText_Powder, 0, 0, -1, NULL); + AddTextPrinterParameterized(windowId, FONT_SMALL, gOtherText_Powder, 0, 0, -1, NULL); PrintBerryPowderAmount(windowId, amount, 39, 12, 0); } diff --git a/src/braille_text.c b/src/braille_text.c index ae61842bd..823a62ad5 100644 --- a/src/braille_text.c +++ b/src/braille_text.c @@ -9,11 +9,11 @@ static const u8 sScrollDistances[] = { [OPTIONS_TEXT_SPEED_MID] = 2, [OPTIONS_TEXT_SPEED_FAST] = 4, }; -static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("graphics/fonts/font6.fwjpnfont"); +static const u16 sBrailleGlyphs[] = INCBIN_U16("graphics/fonts/braille.fwjpnfont"); -static void DecompressGlyphFont6(u16); +static void DecompressGlyph_Braille(u16); -u16 Font6Func(struct TextPrinter *textPrinter) +u16 FontFunc_Braille(struct TextPrinter *textPrinter) { u16 char_; struct TextPrinterSubStruct *sub; @@ -129,14 +129,14 @@ u16 Font6Func(struct TextPrinter *textPrinter) textPrinter->state = 3; TextPrinterInitDownArrowCounters(textPrinter); return 3; - case 0xF9: + case CHAR_EXTRA_SYMBOL: char_ = *textPrinter->printerTemplate.currentChar++| 0x100; break; - case 0xF8: + case CHAR_KEYPAD_ICON: textPrinter->printerTemplate.currentChar++; return 0; } - DecompressGlyphFont6(char_); + DecompressGlyph_Braille(char_); CopyGlyphToWindow(textPrinter); textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing; return 0; @@ -204,11 +204,11 @@ u16 Font6Func(struct TextPrinter *textPrinter) return 1; } -static void DecompressGlyphFont6(u16 glyph) +static void DecompressGlyph_Braille(u16 glyph) { const u16 *glyphs; - glyphs = sFont6BrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8); + glyphs = sBrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); @@ -217,7 +217,7 @@ static void DecompressGlyphFont6(u16 glyph) gGlyphInfo.height = 0x10; } -s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese) +s32 GetGlyphWidth_Braille(u16 font_type, bool32 isJapanese) { - return 0x10; + return 16; } diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c index ccf13ad45..3a83da3d6 100644 --- a/src/buy_menu_helpers.c +++ b/src/buy_menu_helpers.c @@ -200,5 +200,5 @@ void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram) void BuyMenuConfirmPurchase(u8 taskId, const struct YesNoFuncTable *yesNo) { - CreateYesNoMenuWithCallbacks(taskId, &sShopBuyMenuYesNoWindowTemplate, FONT_2, 0, 2, 1, 0xD, yesNo); + CreateYesNoMenuWithCallbacks(taskId, &sShopBuyMenuYesNoWindowTemplate, FONT_NORMAL, 0, 2, 1, 0xD, yesNo); } diff --git a/src/cable_club.c b/src/cable_club.c index b3fbc1f78..d6794262b 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -89,7 +89,7 @@ static void PrintNumPlayersInLink(u16 windowId, s32 numPlayers) ConvertIntToDecimalStringN(gStringVar1, numPlayers, STR_CONV_MODE_LEFT_ALIGN, 1); SetStdWindowBorderStyle(windowId, FALSE); StringExpandPlaceholders(gStringVar4, gText_NumPlayerLink); - AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 0, 0, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 0, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(windowId, COPYWIN_FULL); } diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index 4cddf5f03..83af4a123 100644 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -106,11 +106,11 @@ static void Task_DrawClearSaveDataScreen(u8 taskId) break; case 4: DrawStdFrameWithCustomTileAndPalette(1, TRUE, 0x001, 0xF); - AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gText_ClearAllSaveData); + AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 3, 1, 1, sTextColor, 0, gText_ClearAllSaveData); CopyWindowToVram(1, COPYWIN_GFX); break; case 5: - CreateYesNoMenu(&sWindowTemplates[0], FONT_2, 0, 2, 0x001, 0xF, 1); + CreateYesNoMenu(&sWindowTemplates[0], FONT_NORMAL, 0, 2, 0x001, 0xF, 1); CopyBgTilemapBufferToVram(0); break; default: @@ -138,7 +138,7 @@ static void Task_HandleYesNoMenu(u8 taskId) case 0: PlaySE(SE_SELECT); FillWindowPixelBuffer(1, PIXEL_FILL(1)); - AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gText_ClearingData); + AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 3, 1, 1, sTextColor, 0, gText_ClearingData); CopyWindowToVram(1, COPYWIN_FULL); ClearSaveData(); break; diff --git a/src/coins.c b/src/coins.c index 2de263bb1..cd68a9a87 100644 --- a/src/coins.c +++ b/src/coins.c @@ -53,14 +53,14 @@ static void PrintCoinsString_Parameterized(u8 windowId, u32 coinAmount, u8 x, u8 { ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_Coins); - AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, x, y, speed, NULL); } // Unused static void ShowCoinsWindow_Parameterized(u8 windowId, u16 tileStart, u8 palette, u32 coinAmount) { DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, palette); - AddTextPrinterParameterized(windowId, FONT_2, gText_Coins_2, 0, 0, 0xFF, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Coins_2, 0, 0, 0xFF, 0); PrintCoinsString_Parameterized(windowId, coinAmount, 0x10, 0xC, 0); } @@ -71,9 +71,9 @@ void PrintCoinsString(u32 coinAmount) ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_Coins); - width = GetStringWidth(FONT_0, gStringVar4, 0); + width = GetStringWidth(FONT_SMALL, gStringVar4, 0); windowId = sCoinsWindowId; - AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, 64 - width, 0xC, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, 64 - width, 0xC, 0, NULL); } void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y) @@ -86,7 +86,7 @@ void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y) PutWindowTilemap(sCoinsWindowId); LoadStdWindowGfx(sCoinsWindowId, 0x21D, 0xD0); DrawStdFrameWithCustomTileAndPalette(sCoinsWindowId, FALSE, 0x21D, 0xD); - AddTextPrinterParameterized(sCoinsWindowId, FONT_2, gText_Coins_2, 0, 0, 0xFF, 0); + AddTextPrinterParameterized(sCoinsWindowId, FONT_NORMAL, gText_Coins_2, 0, 0, 0xFF, 0); PrintCoinsString(coinAmount); } diff --git a/src/credits.c b/src/credits.c index daa03fb69..6b76be688 100644 --- a/src/credits.c +++ b/src/credits.c @@ -856,7 +856,7 @@ static s32 RollCredits(void) } sCreditsMgr->timer = 360; - AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT); + AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_NORMAL_COPY_1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT); sCreditsMgr->mainseqno = CREDITSSCENE_WAIT_TITLE_STAFF; return 0; case CREDITSSCENE_WAIT_TITLE_STAFF: @@ -913,12 +913,12 @@ static s32 RollCredits(void) if (gPaletteFade.active) return sCreditsMgr->canSpeedThrough; win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8; // unused - AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_0); + AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_NORMAL_COPY_1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_0); sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER2; return sCreditsMgr->canSpeedThrough; case CREDITSSCENE_PRINT_ADDPRINTER2: win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8; - AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_2, 8, 6, 0, 0, sTextColor_Regular, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_4); + AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_NORMAL, 8, 6, 0, 0, sTextColor_Regular, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_4); sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_DELAY; return sCreditsMgr->canSpeedThrough; case CREDITSSCENE_PRINT_DELAY: diff --git a/src/data/union_room.h b/src/data/union_room.h index 557a93297..0e73b832e 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -98,7 +98,7 @@ static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { .lettersSpacing = 0, .itemVerticalPadding = 2, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 1 }; @@ -158,7 +158,7 @@ static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { .lettersSpacing = 0, .itemVerticalPadding = 2, .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -196,7 +196,7 @@ static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -233,7 +233,7 @@ static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -285,7 +285,7 @@ static const struct ListMenuTemplate sListMenuTemplate_TypeNames = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -339,7 +339,7 @@ static const struct ListMenuTemplate sListMenuTemplate_TradeBoard = { .lettersSpacing = 1, .itemVerticalPadding = 1, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -389,7 +389,7 @@ static const struct ListMenuTemplate sListMenuTemplate_Unused = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; diff --git a/src/daycare.c b/src/daycare.c index 7284ea22f..6780bcde4 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -119,7 +119,7 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_3, + .fontId = FONT_NORMAL_COPY_2, .cursorKind = 0 }; @@ -1439,7 +1439,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) printer.currentChar = text; printer.windowId = windowId; - printer.fontId = FONT_3; + printer.fontId = FONT_NORMAL_COPY_2; printer.x = x; printer.y = y; printer.currentX = x; @@ -1479,7 +1479,7 @@ static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycare level = GetLevelAfterDaycareSteps(&daycare->mons[daycareSlotId].mon, daycare->mons[daycareSlotId].steps); ConvertIntToDecimalStringN(intText, level, STR_CONV_MODE_LEFT_ALIGN, 3); StringAppend(lvlText, intText); - x = 132 - GetStringWidth(FONT_3, lvlText, 0); + x = 132 - GetStringWidth(FONT_NORMAL_COPY_2, lvlText, 0); DaycareAddTextPrinter(windowId, lvlText, x, y); } @@ -1957,7 +1957,7 @@ static void CB2_EggHatch_1(void) if (!IsTextPrinterActive(sEggHatchData->windowId)) { LoadUserWindowGfx2(sEggHatchData->windowId, 0x140, 0xE0); - CreateYesNoMenu(&sYesNoWinTemplate, FONT_3, 0, 2, 0x140, 0xE, 0); + CreateYesNoMenu(&sYesNoWinTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x140, 0xE, 0); sEggHatchData->CB2_state++; } break; @@ -2159,5 +2159,5 @@ static void EggHatchPrintMessage(u8 windowId, u8 *string, u8 x, u8 y, u8 speed) sEggHatchData->textColor[0] = 0; sEggHatchData->textColor[1] = 5; sEggHatchData->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, FONT_3, x, y, 1, 1, sEggHatchData->textColor, speed, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_2, x, y, 1, 1, sEggHatchData->textColor, speed, string); } diff --git a/src/diploma.c b/src/diploma.c index 3edd1836a..e24c693eb 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -265,11 +265,11 @@ static void DiplomaPrintText(void) DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_Diploma_Kanto); FillWindowPixelBuffer(WIN_TEXT, PIXEL_FILL(0)); DynamicPlaceholderTextUtil_ExpandPlaceholders(str, gText_Diploma_Player); - width = GetStringWidth(FONT_2, str, -1); - AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120 - (width / 2), 4, sTextColors, TEXT_SKIP_DRAW, str); + width = GetStringWidth(FONT_NORMAL, str, -1); + AddTextPrinterParameterized3(WIN_TEXT, FONT_NORMAL, 120 - (width / 2), 4, sTextColors, TEXT_SKIP_DRAW, str); DynamicPlaceholderTextUtil_ExpandPlaceholders(str, gText_Diploma_ThisDocument); - width = GetStringWidth(FONT_2, str, -1); - AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120 - (width / 2), 30, sTextColors, TEXT_SKIP_DRAW, str); - AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120, 105, sTextColors, 0, gText_Diploma_GameFreak); + width = GetStringWidth(FONT_NORMAL, str, -1); + AddTextPrinterParameterized3(WIN_TEXT, FONT_NORMAL, 120 - (width / 2), 30, sTextColors, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_TEXT, FONT_NORMAL, 120, 105, sTextColors, 0, gText_Diploma_GameFreak); PutWindowTilemap(WIN_TEXT); } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index d339a2277..41d5d6b92 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -3005,14 +3005,14 @@ static void PrintRecordsText(u8 windowId) LoadStdWindowGfx(windowId, 0x21D, 0xD0); DrawTextBorderOuter(windowId, 0x21D, 0xD); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(windowId, FONT_2, sRecordsTexts[0], 1, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, sRecordsTexts[0], 1, 1, TEXT_SKIP_DRAW, NULL); for (i = 0; i < NUM_RECORD_TYPES; i++) { ConvertIntToDecimalStringN(strbuf, recordNums[i], STR_CONV_MODE_LEFT_ALIGN, sRecordNumMaxDigits[i]); - numWidth = GetStringWidth(FONT_2, strbuf, -1); - AddTextPrinterParameterized(windowId, FONT_2, sRecordsTexts[i + 1], 1, sRecordTextYCoords[i][0], TEXT_SKIP_DRAW, NULL); + numWidth = GetStringWidth(FONT_NORMAL, strbuf, -1); + AddTextPrinterParameterized(windowId, FONT_NORMAL, sRecordsTexts[i + 1], 1, sRecordTextYCoords[i][0], TEXT_SKIP_DRAW, NULL); x = DISPLAY_WIDTH - 16 - numWidth; - AddTextPrinterParameterized(windowId, FONT_2, strbuf, x, sRecordNumYCoords[i][0], TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, strbuf, x, sRecordNumYCoords[i][0], TEXT_SKIP_DRAW, NULL); } PutWindowTilemap(windowId); } @@ -4371,7 +4371,7 @@ static void ShowNames(void) { colorsId = 0; playerId = GetPlayerIdByPos(i); - left = (56 - GetStringWidth(FONT_0, GetPlayerName(playerId), -1)) / 2u; + left = (56 - GetStringWidth(FONT_SMALL, GetPlayerName(playerId), -1)) / 2u; window.tilemapLeft = coords->left; window.tilemapTop = coords->top; sGfx->windowIds[i] = AddWindow(&window); @@ -4380,7 +4380,7 @@ static void ShowNames(void) if (playerId == GetMultiplayerId()) colorsId = COLORID_BLUE; name = GetPlayerName(playerId); - AddTextPrinterParameterized3(sGfx->windowIds[i], FONT_0, left, 1, sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); + AddTextPrinterParameterized3(sGfx->windowIds[i], FONT_SMALL, left, 1, sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); CopyWindowToVram(sGfx->windowIds[i], COPYWIN_GFX); window.baseBlock += 0xE; DrawMessageWindow(&window); @@ -4457,22 +4457,22 @@ static void PrintRankedScores(u8 numPlayers_) } // Print text - x = 216 - GetStringWidth(FONT_0, gText_SpacePoints, 0); + x = 216 - GetStringWidth(FONT_SMALL, gText_SpacePoints, 0); for (i = 0; i < numPlayers; i++) { u8 colorsId = COLORID_GRAY; u8 playerId = playersByRanking[i]; u32 points = scoreResults[playerId].score; - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, sRankingTexts[scoreResults[playerId].ranking], 8, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, sRankingTexts[scoreResults[playerId].ranking], 8, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); if (playerId == GetMultiplayerId()) colorsId =COLORID_BLUE; name = GetPlayerName(playerId); - AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_0, 28, sRankingYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); + AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_SMALL, 28, sRankingYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_RIGHT_ALIGN, 7); - numWidth = GetStringWidth(FONT_0, numString, -1); - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, numString, x - 35, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, gText_SpacePoints, x, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); + numWidth = GetStringWidth(FONT_SMALL, numString, -1); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, numString, x - 35, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, gText_SpacePoints, x, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); } } @@ -4503,10 +4503,10 @@ static void ShowResults(void) case 2: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1)); - strWidth = GetStringWidth(FONT_0, gText_BerryPickingResults, -1); + strWidth = GetStringWidth(FONT_SMALL, gText_BerryPickingResults, -1); x = (DISPLAY_WIDTH - 16 - strWidth) / 2; - AddTextPrinterParameterized(sGfx->windowIds[0], FONT_0, gText_BerryPickingResults, x, 2, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, gText_10P30P50P50P, 68, 16, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_SMALL, gText_BerryPickingResults, x, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, gText_10P30P50P50P, 68, 16, TEXT_SKIP_DRAW, NULL); for (i = 0; i < numPlayers; i++) { u8 colorsId = COLORID_GRAY; @@ -4514,7 +4514,7 @@ static void ShowResults(void) colorsId = COLORID_BLUE; name = GetPlayerName(i); - AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_0, 2, sResultsYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); + AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_SMALL, 2, sResultsYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); for (j = 0; j < 4; j++) { u32 width; @@ -4522,13 +4522,13 @@ static void ShowResults(void) u16 maxBerriesPicked = Min(GetHighestBerryResult(j), MAX_BERRIES); ConvertIntToDecimalStringN(strBuff_Large, berriesPicked, STR_CONV_MODE_LEFT_ALIGN, 4); - width = GetStringWidth(FONT_0, strBuff_Large, -1); + width = GetStringWidth(FONT_SMALL, strBuff_Large, -1); // If player got the most of a berry type, highlight their number in red if (maxBerriesPicked == berriesPicked && maxBerriesPicked != 0) - AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_0, sResultsXCoords[j] - width, sResultsYCoords[i], sTextColorTable[1], TEXT_SKIP_DRAW, strBuff_Large); + AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_SMALL, sResultsXCoords[j] - width, sResultsYCoords[i], sTextColorTable[1], TEXT_SKIP_DRAW, strBuff_Large); else - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, strBuff_Large, sResultsXCoords[j] - width, sResultsYCoords[i], TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, strBuff_Large, sResultsXCoords[j] - width, sResultsYCoords[i], TEXT_SKIP_DRAW, NULL); } } CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); @@ -4557,9 +4557,9 @@ static void ShowResults(void) case 5: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1)); - strWidth = GetStringWidth(FONT_0, gText_AnnouncingRankings, -1); + strWidth = GetStringWidth(FONT_SMALL, gText_AnnouncingRankings, -1); x = (DISPLAY_WIDTH - 16 - strWidth) / 2; - AddTextPrinterParameterized(sGfx->windowIds[0], FONT_0, gText_AnnouncingRankings, x, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_SMALL, gText_AnnouncingRankings, x, 2, TEXT_SKIP_DRAW, NULL); sGfx->state++; break; case 6: @@ -4603,14 +4603,14 @@ static void ShowResults(void) PlayNewMapMusic(MUS_LEVEL_UP); FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1)); - strWidth = GetStringWidth(FONT_0, gText_AnnouncingPrizes, -1); + strWidth = GetStringWidth(FONT_SMALL, gText_AnnouncingPrizes, -1); x = (DISPLAY_WIDTH - 16 - strWidth) / 2; - AddTextPrinterParameterized(sGfx->windowIds[0], FONT_0, gText_AnnouncingPrizes, x, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_SMALL, gText_AnnouncingPrizes, x, 2, TEXT_SKIP_DRAW, NULL); DynamicPlaceholderTextUtil_Reset(); CopyItemName(GetPrizeItemId(), strBuff_Small); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, strBuff_Small); DynamicPlaceholderTextUtil_ExpandPlaceholders(strBuff_Large, gText_FirstPlacePrize); - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, strBuff_Large, 8, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, strBuff_Large, 8, 2, TEXT_SKIP_DRAW, NULL); prizeState = TryGivePrize(); if (prizeState != PRIZE_RECEIVED && prizeState != NO_PRIZE) { @@ -4621,7 +4621,7 @@ static void ShowResults(void) DynamicPlaceholderTextUtil_ExpandPlaceholders(strBuff_Large, gText_CantHoldAnyMore); else if (prizeState == PRIZE_FILLED_BAG) DynamicPlaceholderTextUtil_ExpandPlaceholders(strBuff_Large, gText_FilledStorageSpace); - AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, strBuff_Large, 8, 40, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, strBuff_Large, 8, 40, TEXT_SKIP_DRAW, NULL); } CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); CopyWindowToVram(sGfx->windowIds[1], COPYWIN_GFX); @@ -4679,10 +4679,10 @@ static void Msg_WantToPlayAgain(void) // Print text FillWindowPixelBuffer(sGfx->windowIds[WIN_PLAY_AGAIN], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[WIN_YES_NO], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[WIN_PLAY_AGAIN], FONT_2, gText_WantToPlayAgain, 0, 6, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_SelectorArrow2, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_PLAY_AGAIN], FONT_NORMAL, gText_WantToPlayAgain, 0, 6, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_SelectorArrow2, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sGfx->windowIds[WIN_PLAY_AGAIN], COPYWIN_GFX); CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], COPYWIN_GFX); sGfx->state++; @@ -4703,9 +4703,9 @@ static void Msg_WantToPlayAgain(void) if (y == PLAY_AGAIN_NONE) y = PLAY_AGAIN_YES; FillWindowPixelBuffer(sGfx->windowIds[WIN_YES_NO], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_SelectorArrow2, 0, y == 1 ? 2 : 16, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_SelectorArrow2, 0, y == 1 ? 2 : 16, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], COPYWIN_FULL); // Increment state only if A or B button have been pressed. @@ -4758,7 +4758,7 @@ static void Msg_SavingDontTurnOff(void) { case 0: DrawDialogueFrame(0, FALSE); - AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); sGfx->state++; break; case 1: @@ -4796,7 +4796,7 @@ static void Msg_CommunicationStandby(void) break; case 1: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[0], FONT_2, gText_CommunicationStandby3, 0, 6, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_CommunicationStandby3, 0, 6, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); sGfx->state++; break; @@ -4836,7 +4836,7 @@ static void Msg_SomeoneDroppedOut(void) break; case 1: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[0], FONT_2, gText_SomeoneDroppedOut, 0, 6, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_SomeoneDroppedOut, 0, 6, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); sGfx->state++; break; diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index d722fbdb5..a72c82b79 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -711,12 +711,12 @@ static bool8 ECInterfaceCmd_02(void) { if (*ecWord == 0xFFFF) { - stringWidth = GetStringWidth(FONT_1, sText_Underscore, 0) * 7; + stringWidth = GetStringWidth(FONT_NORMAL_COPY_1, sText_Underscore, 0) * 7; } else { CopyEasyChatWord(str, *ecWord); - stringWidth = GetStringWidth(FONT_1, str, 0); + stringWidth = GetStringWidth(FONT_NORMAL_COPY_1, str, 0); } trueStringWidth = stringWidth + 17; @@ -1335,16 +1335,16 @@ static void PrintTitleText(void) if (titleText == NULL) return; - xOffset = (128 - GetStringWidth(FONT_1, titleText, 0)) / 2u; + xOffset = (128 - GetStringWidth(FONT_NORMAL_COPY_1, titleText, 0)) / 2u; FillWindowPixelBuffer(0, PIXEL_FILL(0)); - EC_AddTextPrinterParameterized2(0, FONT_1, titleText, xOffset, 0, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); + EC_AddTextPrinterParameterized2(0, FONT_NORMAL_COPY_1, titleText, xOffset, 0, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); } static void EC_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) { - if (fontId == FONT_1) + if (fontId == FONT_NORMAL_COPY_1) y += 2; AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback); } @@ -1352,7 +1352,7 @@ static void EC_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow) { u8 color[3]; - if (fontId == FONT_1) + if (fontId == FONT_NORMAL_COPY_1) y += 2; color[0] = bg; color[1] = fg; @@ -1392,17 +1392,17 @@ static void PrintECInterfaceTextById(u8 direction) FillWindowPixelBuffer(1, PIXEL_FILL(1)); if (text1) - EC_AddTextPrinterParameterized(1, FONT_1, text1, 0, 0, TEXT_SKIP_DRAW, NULL); + EC_AddTextPrinterParameterized(1, FONT_NORMAL_COPY_1, text1, 0, 0, TEXT_SKIP_DRAW, NULL); if (text2) - EC_AddTextPrinterParameterized(1, FONT_1, text2, 0, 16, TEXT_SKIP_DRAW, NULL); + EC_AddTextPrinterParameterized(1, FONT_NORMAL_COPY_1, text2, 0, 16, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(1, COPYWIN_FULL); } static void EC_CreateYesNoMenuWithInitialCursorPos(u8 initialCursorPos) { - CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, FONT_1, 0, 2, 0x001, 14, initialCursorPos); + CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, FONT_NORMAL_COPY_1, 0, 2, 0x001, 14, initialCursorPos); } static void CreatePhraseFrameWindow(void) @@ -1469,7 +1469,7 @@ static void PrintECFields(void) } *str = EOS; - EC_AddTextPrinterParameterized(sEasyChatGraphicsResources->windowId, FONT_1, sEasyChatGraphicsResources->ecPrintBuffer, 0, i * 16, TEXT_SKIP_DRAW, NULL); + EC_AddTextPrinterParameterized(sEasyChatGraphicsResources->windowId, FONT_NORMAL_COPY_1, sEasyChatGraphicsResources->ecPrintBuffer, 0, i * 16, TEXT_SKIP_DRAW, NULL); } CopyWindowToVram(sEasyChatGraphicsResources->windowId, COPYWIN_FULL); @@ -1584,7 +1584,7 @@ static void PrintECGroupsMenu(void) return; } - EC_AddTextPrinterParameterized(2, FONT_1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); + EC_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); } y += 16; @@ -1596,7 +1596,7 @@ static void PrintEasyChatKeyboardText(void) u32 i; for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++) - EC_AddTextPrinterParameterized(2, FONT_1, sEasyChatKeyboardAlphabet[i], 10, 96 + i * 16, TEXT_SKIP_DRAW, NULL); + EC_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_1, sEasyChatKeyboardAlphabet[i], 10, 96 + i * 16, TEXT_SKIP_DRAW, NULL); } static void PrintECWordsMenu(void) @@ -1670,7 +1670,7 @@ static void PrintECRowsWin2(u8 row, u8 remrow) CopyEasyChatWordPadded(sEasyChatGraphicsResources->ecPaddedWordBuffer, easyChatWord, 0); - EC_AddTextPrinterParameterized(2, FONT_1, sEasyChatGraphicsResources->ecPaddedWordBuffer, (j * 13 + 3) * 8, y_, TEXT_SKIP_DRAW, NULL); + EC_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_1, sEasyChatGraphicsResources->ecPaddedWordBuffer, (j * 13 + 3) * 8, y_, TEXT_SKIP_DRAW, NULL); } } y += 16; @@ -2311,6 +2311,6 @@ static void CreateFooterWindow(void) template.baseBlock = 0x030; windowId = AddWindow(&template); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - EC_AddTextPrinterParameterized(windowId, FONT_1, gText_DelAllCancelOk, 0, 0, 0, NULL); + EC_AddTextPrinterParameterized(windowId, FONT_NORMAL_COPY_1, gText_DelAllCancelOk, 0, 0, 0, NULL); PutWindowTilemap(windowId); } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index c26869606..b35e4569c 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1332,7 +1332,7 @@ static void Task_TradeEvolutionScene(u8 taskId) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { LoadUserWindowGfx2(0, 0xA8, 0xE0); - CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, FONT_3, 0, 2, 0xA8, 0xE, 0); + CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, FONT_NORMAL_COPY_2, 0, 2, 0xA8, 0xE, 0); sEvoCursorPos = 0; gTasks[taskId].tLearnMoveState++; sEvoCursorPos = 0; diff --git a/src/fame_checker.c b/src/fame_checker.c index ac19ef373..b00700839 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -822,7 +822,7 @@ static bool8 TryExitPickMode(u8 taskId) static void MessageBoxPrintEmptyText(void) { - AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gFameCheckerText_ClearTextbox, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gFameCheckerText_ClearTextbox, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void Task_EnterPickMode(u8 taskId) @@ -962,7 +962,7 @@ static void GetPickModeText(void) if (HasUnlockedAllFlavorTextsForCurrentPerson() == TRUE) whichText = NUM_FAMECHECKER_PERSONS; StringExpandPlaceholders(gStringVar4, sFameCheckerNameAndQuotesPointers[sFameCheckerData->unlockedPersons[who] + whichText]); - AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX); } } @@ -973,7 +973,7 @@ static void PrintSelectedNameInBrightGreen(u8 taskId) u16 cursorPos = FameCheckerGetCursorY(); FillWindowPixelRect(FCWINDOWID_MSGBOX, PIXEL_FILL(1), 0, 0, 0xd0, 0x20); StringExpandPlaceholders(gStringVar4, sFameCheckerFlavorTextPointers[sFameCheckerData->unlockedPersons[cursorPos] * 6 + data[1]]); - AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX); } @@ -1081,9 +1081,9 @@ static void PrintUIHelp(u8 state) if (state == 1) src = gFameCheckerText_PickScreenUI; } - width = GetStringWidth(FONT_0, src, 0); + width = GetStringWidth(FONT_SMALL, src, 0); FillWindowPixelRect(FCWINDOWID_UIHELP, PIXEL_FILL(0), 0, 0, 0xc0, 0x10); - AddTextPrinterParameterized4(FCWINDOWID_UIHELP, FONT_0, 188 - width, 0, 0, 2, sTextColor_White, -1, src); + AddTextPrinterParameterized4(FCWINDOWID_UIHELP, FONT_SMALL, 188 - width, 0, 0, 2, sTextColor_White, -1, src); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_UIHELP); } @@ -1395,11 +1395,11 @@ static void UpdateIconDescriptionBox(u8 whichText) HandleFlavorTextModeSwitch(TRUE); gIconDescriptionBoxIsOpen = 1; FillWindowPixelRect(FCWINDOWID_ICONDESC, PIXEL_FILL(0), 0, 0, 0x58, 0x20); - width = (0x54 - GetStringWidth(FONT_0, sFlavorTextOriginLocationTexts[idx], 0)) / 2; - AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_0, width, 0, 0, 2, sTextColor_DkGrey, -1, sFlavorTextOriginLocationTexts[idx]); + width = (0x54 - GetStringWidth(FONT_SMALL, sFlavorTextOriginLocationTexts[idx], 0)) / 2; + AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_SMALL, width, 0, 0, 2, sTextColor_DkGrey, -1, sFlavorTextOriginLocationTexts[idx]); StringExpandPlaceholders(gStringVar1, sFlavorTextOriginObjectNameTexts[idx]); - width = (0x54 - GetStringWidth(FONT_0, gStringVar1, 0)) / 2; - AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_0, width, 10, 0, 2, sTextColor_DkGrey, -1, gStringVar1); + width = (0x54 - GetStringWidth(FONT_SMALL, gStringVar1, 0)) / 2; + AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_SMALL, width, 10, 0, 2, sTextColor_DkGrey, -1, gStringVar1); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_ICONDESC); } @@ -1435,7 +1435,7 @@ static void InitListMenuTemplate(void) gFameChecker_ListMenuTemplate.lettersSpacing = 0; gFameChecker_ListMenuTemplate.itemVerticalPadding = 0; gFameChecker_ListMenuTemplate.scrollMultiple = 0; - gFameChecker_ListMenuTemplate.fontId = FONT_2; + gFameChecker_ListMenuTemplate.fontId = FONT_NORMAL; gFameChecker_ListMenuTemplate.cursorKind = 0; } @@ -1513,7 +1513,7 @@ static void Task_SwitchToPickMode(u8 taskId) static void PrintCancelDescription(void) { FillWindowPixelRect(FCWINDOWID_MSGBOX, PIXEL_FILL(1), 0, 0, 0xd0, 0x20); - AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gFameCheckerText_FameCheckerWillBeClosed, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gFameCheckerText_FameCheckerWillBeClosed, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX); } @@ -1524,14 +1524,14 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 who; ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; - AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 8, 14 * cursorY + 4, 0, 0, sTextColor_Green, 0, sListMenuItems[itemIndex].label); + AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 8, 14 * cursorY + 4, 0, 0, sTextColor_Green, 0, sListMenuItems[itemIndex].label); if (!onInit) { if (listY < sFameCheckerData->listMenuTopIdx2) sFameCheckerData->listMenuDrawnSelIdx++; else if (listY > sFameCheckerData->listMenuTopIdx2 && who != sFameCheckerData->numUnlockedPersons - 1) sFameCheckerData->listMenuDrawnSelIdx--; - AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].label); + AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].label); } sFameCheckerData->listMenuCurIdx = itemIndex; @@ -1729,7 +1729,7 @@ static void PlaceListMenuCursor(bool8 isActive) { u16 cursorY = ListMenuGetYCoordForPrintingArrowCursor(sFameCheckerData->listMenuTaskId); if (isActive == TRUE) - AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 0, cursorY, 0, 0, sTextColor_DkGrey, 0, gText_SelectorArrow2); + AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 0, cursorY, 0, 0, sTextColor_DkGrey, 0, gText_SelectorArrow2); else - AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 0, cursorY, 0, 0, sTextColor_White, 0, gText_SelectorArrow2); + AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 0, cursorY, 0, 0, sTextColor_White, 0, gText_SelectorArrow2); } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index a198999b6..f4f83252f 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1766,7 +1766,7 @@ static bool8 Fishing5(struct Task *task) } else { - AddTextPrinterParameterized(0, FONT_2, dot, task->tNumDots * 12, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, dot, task->tNumDots * 12, 1, 0, NULL); task->tNumDots++; } } @@ -1845,7 +1845,7 @@ static bool8 Fishing10(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tStep++; task->tFrameCounter = 0; return FALSE; @@ -1892,7 +1892,7 @@ static bool8 Fishing12(struct Task *task) AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, gText_NotEvenANibble, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tStep = FISHING_SHOW_RESULT; return TRUE; } @@ -1902,7 +1902,7 @@ static bool8 Fishing13(struct Task *task) { AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); - AddTextPrinterParameterized2(0, FONT_2, gText_ItGotAway, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tStep++; return TRUE; } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index a451ffd1b..ba143e61b 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -368,7 +368,7 @@ static bool8 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u8 x, u8 y) case 0: FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); StringExpandPlaceholders(gStringVar4, text); - AddTextPrinterParameterized4(windowId, FONT_2, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4); gTextFlags.canABSpeedUpPrint = FALSE; gTasks[taskId].tPrintState = 1; break; diff --git a/src/field_specials.c b/src/field_specials.c index 84ffd75e3..3bf282cda 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -545,7 +545,7 @@ void NullFieldSpecial(void) void DoPicboxCancel(void) { u8 t = EOS; - AddTextPrinterParameterized(0, FONT_2, &t, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL); PicboxCancel(); } @@ -1100,10 +1100,10 @@ void DrawElevatorCurrentFloorWindow(void) sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate); LoadStdWindowGfx(sElevatorCurrentFloorWindowId, 0x21D, 0xD0); DrawStdFrameWithCustomTileAndPalette(sElevatorCurrentFloorWindowId, FALSE, 0x21D, 0xD); - AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_2, gText_NowOn, 0, 2, 0xFF, NULL); + AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, gText_NowOn, 0, 2, 0xFF, NULL); floorname = sFloorNamePointers[gSpecialVar_0x8005]; - strwidth = GetStringWidth(FONT_2, floorname, 0); - AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_2, floorname, 56 - strwidth, 16, 0xFF, NULL); + strwidth = GetStringWidth(FONT_NORMAL, floorname, 0); + AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, floorname, 56 - strwidth, 16, 0xFF, NULL); PutWindowTilemap(sElevatorCurrentFloorWindowId); CopyWindowToVram(sElevatorCurrentFloorWindowId, COPYWIN_FULL); } @@ -1346,7 +1346,7 @@ static void Task_CreateScriptListMenu(u8 taskId) { sListMenuItems[i].label = sListMenuLabels[gSpecialVar_0x8004][i]; sListMenuItems[i].index = i; - width = GetStringWidth(FONT_2, sListMenuItems[i].label, 0); + width = GetStringWidth(FONT_NORMAL, sListMenuItems[i].label, 0); if (width > mwidth) mwidth = width; } @@ -1384,7 +1384,7 @@ static void CreateScriptListMenu(void) sFieldSpecialsListMenuTemplate.lettersSpacing = 1; sFieldSpecialsListMenuTemplate.itemVerticalPadding = 0; sFieldSpecialsListMenuTemplate.scrollMultiple = 0; - sFieldSpecialsListMenuTemplate.fontId = FONT_2; + sFieldSpecialsListMenuTemplate.fontId = FONT_NORMAL; sFieldSpecialsListMenuTemplate.cursorKind = 0; } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 424649d54..72ba97b47 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -454,7 +454,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) *lastSavedTeam = *sHofMonPtr; DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_Hof_TrySaveData; } @@ -640,7 +640,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); HallOfFame_PrintPlayerInfo(1, 2); DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, FONT_2, gText_LeagueChamp, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; } @@ -970,7 +970,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) { TopBarWindowPrintString(gText_ABUTTONExit, 8, TRUE); DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, FONT_2, gText_HOFCorrupted, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; } @@ -983,10 +983,10 @@ static void Task_HofPC_ExitOnButtonPress(u8 taskId) static void HallOfFame_PrintWelcomeText(u8 not, u8 used) { - u8 x = (0xD0 - GetStringWidth(FONT_2, gText_WelcomeToHOF, 0)) / 2; + u8 x = (0xD0 - GetStringWidth(FONT_NORMAL, gText_WelcomeToHOF, 0)) / 2; FillWindowPixelBuffer(0, PIXEL_FILL(0)); PutWindowTilemap(0); - AddTextPrinterParameterized3(0, FONT_2, x, 1, sTextColors[0], 0, gText_WelcomeToHOF); + AddTextPrinterParameterized3(0, FONT_NORMAL, x, 1, sTextColors[0], 0, gText_WelcomeToHOF); CopyWindowToVram(0, COPYWIN_FULL); } @@ -1021,7 +1021,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u } text[3] = EOS; StringAppend(text2, text); - AddTextPrinterParameterized3(0, FONT_2, 16, 1, sTextColors[0], 0, text2); + AddTextPrinterParameterized3(0, FONT_NORMAL, 16, 1, sTextColors[0], 0, text2); } // nick, species names, gender and lvl @@ -1034,12 +1034,12 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u } } text[i] = EOS; - width = GetStringWidth(FONT_2, text, GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING)); + width = GetStringWidth(FONT_NORMAL, text, GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING)); if (currMon->species == SPECIES_EGG) x = 0x80 - width / 2; else x = 0x80 - width; - AddTextPrinterParameterized3(0, FONT_2, x, 1, sTextColors[0], 0, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, x, 1, sTextColors[0], 0, text); if (currMon->species != SPECIES_EGG) { text[0] = CHAR_SLASH; @@ -1063,15 +1063,15 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u } *stringPtr = EOS; - AddTextPrinterParameterized3(0, FONT_2, 0x80, 1, sTextColors[0], 0, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x80, 1, sTextColors[0], 0, text); stringPtr = StringCopy(text, gText_Level); ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3); - AddTextPrinterParameterized3(0, FONT_2, 0x20, 0x11, sTextColors[0], 0, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x20, 0x11, sTextColors[0], 0, text); stringPtr = StringCopy(text, gText_IDNumber); ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5); - AddTextPrinterParameterized3(0, FONT_2, 0x60, 0x11, sTextColors[0], 0, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x60, 0x11, sTextColors[0], 0, text); } CopyWindowToVram(0, COPYWIN_FULL); @@ -1086,21 +1086,21 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) FillWindowPixelBuffer(1, PIXEL_FILL(1)); PutWindowTilemap(1); DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x21D, 0xD); - AddTextPrinterParameterized4(1, FONT_2, 4, 3, 0, 0, sTextColors[1], 0, gText_Name); + AddTextPrinterParameterized4(1, FONT_NORMAL, 4, 3, 0, 0, sTextColors[1], 0, gText_Name); - AddTextPrinterParameterized3(1, FONT_2, textWidth - GetStringWidth(FONT_2, gSaveBlock2Ptr->playerName, 0), 3, sTextColors[1], 0, gSaveBlock2Ptr->playerName); + AddTextPrinterParameterized3(1, FONT_NORMAL, textWidth - GetStringWidth(FONT_NORMAL, gSaveBlock2Ptr->playerName, 0), 3, sTextColors[1], 0, gSaveBlock2Ptr->playerName); trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8); - AddTextPrinterParameterized3(1, FONT_2, 4, 18, sTextColors[1], 0, gText_IDNumber); + AddTextPrinterParameterized3(1, FONT_NORMAL, 4, 18, sTextColors[1], 0, gText_IDNumber); text[0] = (trainerId % 100000) / 10000 + CHAR_0; text[1] = (trainerId % 10000) / 1000 + CHAR_0; text[2] = (trainerId % 1000) / 100 + CHAR_0; text[3] = (trainerId % 100) / 10 + CHAR_0; text[4] = (trainerId % 10) / 1 + CHAR_0; text[5] = EOS; - AddTextPrinterParameterized3(1, FONT_2, textWidth - 30, 18, sTextColors[1], 0, text); + AddTextPrinterParameterized3(1, FONT_NORMAL, textWidth - 30, 18, sTextColors[1], 0, text); - AddTextPrinterParameterized3(1, FONT_2, 4, 32, sTextColors[1], 0, gText_MainMenuTime); + AddTextPrinterParameterized3(1, FONT_NORMAL, 4, 32, sTextColors[1], 0, gText_MainMenuTime); text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0; text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0; text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0; @@ -1115,7 +1115,7 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) text[5] = (gSaveBlock2Ptr->playTimeMinutes % 10) + CHAR_0; text[6] = EOS; - AddTextPrinterParameterized3(1, FONT_2, textWidth - 36, 32, sTextColors[1], 0, text); + AddTextPrinterParameterized3(1, FONT_NORMAL, textWidth - 36, 32, sTextColors[1], 0, text); CopyWindowToVram(1, COPYWIN_FULL); } diff --git a/src/help_message.c b/src/help_message.c index 425ce88ac..7cd44dbb2 100644 --- a/src/help_message.c +++ b/src/help_message.c @@ -94,7 +94,7 @@ static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMI static void PrintHelpMessageText(const u8 *text) { - AddTextPrinterParameterized4(sHelpMessageWindowId, FONT_2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text); + AddTextPrinterParameterized4(sHelpMessageWindowId, FONT_NORMAL, 2, 5, 1, 1, sHelpMessageTextColors, -1, text); } void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode) diff --git a/src/help_system_util.c b/src/help_system_util.c index 6cd01f9ed..546fda934 100644 --- a/src/help_system_util.c +++ b/src/help_system_util.c @@ -410,7 +410,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w } DecompressAndRenderGlyph(fontId, gSaveBlock2Ptr->playerName[i], &srcBlit, &destBlit, dest, x, y, width, height); // This is required to match a dummy [sp+#0x24] read here - if (fontId == FONT_0) + if (fontId == FONT_SMALL) { x += gGlyphInfo.width; } @@ -440,7 +440,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w } DecompressAndRenderGlyph(fontId, gString_Someone[i], &srcBlit, &destBlit, dest, x, y, width, height); } - if (fontId == FONT_0) + if (fontId == FONT_SMALL) { x += gGlyphInfo.width; } @@ -529,7 +529,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w default: if (curChar == CHAR_SPACE) { - if (fontId == FONT_0) + if (fontId == FONT_SMALL) { x += 5; } @@ -541,7 +541,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w else { DecompressAndRenderGlyph(fontId, curChar, &srcBlit, &destBlit, dest, x, y, width, height); - if (fontId == FONT_0) + if (fontId == FONT_SMALL) { x += gGlyphInfo.width; } @@ -557,12 +557,12 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w void DecompressAndRenderGlyph(u8 fontId, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height) { - if (fontId == FONT_0) - DecompressGlyphFont0(glyph, FALSE); - else if (fontId == FONT_5) - DecompressGlyphFont5(glyph, FALSE); + if (fontId == FONT_SMALL) + DecompressGlyph_Small(glyph, FALSE); + else if (fontId == FONT_FEMALE) + DecompressGlyph_Female(glyph, FALSE); else - DecompressGlyphFont2(glyph, FALSE); + DecompressGlyph_Normal(glyph, FALSE); srcBlit->pixels = gGlyphInfo.pixels; srcBlit->width = 16; srcBlit->height = 16; @@ -580,7 +580,7 @@ void HelpSystem_PrintTextInTopLeftCorner(const u8 * str) void HelpSystem_PrintTextRightAlign_Row52(const u8 * str) { - s32 left = 0x7C - GetStringWidth(FONT_0, str, 0); + s32 left = 0x7C - GetStringWidth(FONT_SMALL, str, 0); GenerateFontHalfRowLookupTable(TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_DARK_GRAY); HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2); } @@ -713,7 +713,7 @@ void HS_UpdateMenuScrollArrows(void) void PrintListMenuItems(void) { - u8 glyphHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 1; + u8 glyphHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 1; s32 i; s32 r5 = gHelpSystemListMenu.itemsAbove; @@ -728,7 +728,7 @@ void PrintListMenuItems(void) void PlaceListMenuCursor(void) { - u8 glyphHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 1; + u8 glyphHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 1; u8 x = gHelpSystemListMenu.sub.left; u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos; HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y); @@ -736,7 +736,7 @@ void PlaceListMenuCursor(void) void HS_RemoveSelectionCursorAt(u8 i) { - u8 glyphHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 1; + u8 glyphHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 1; u8 x = gHelpSystemListMenu.sub.left; u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight; HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y); diff --git a/src/item_menu.c b/src/item_menu.c index 066128718..f9b2a9f1a 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -660,7 +660,7 @@ static void Bag_BuildListMenuTemplate(u8 pocket) gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; gMultiuseListMenuTemplate.maxShowed = sBagMenuDisplay->maxShowed[pocket]; - gMultiuseListMenuTemplate.fontId = FONT_2; + gMultiuseListMenuTemplate.fontId = FONT_NORMAL; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; @@ -718,7 +718,7 @@ static void BagListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) { ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BagPrintTextOnWindow(windowId, FONT_0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); + BagPrintTextOnWindow(windowId, FONT_SMALL, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); } else if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == bagItemId) { @@ -736,11 +736,11 @@ static void bag_menu_print_cursor(u8 y, u8 colorIdx) { if (colorIdx == 0xFF) { - FillWindowPixelRect(0, PIXEL_FILL(0), 1, y, GetMenuCursorDimensionByFont(FONT_2, 0), GetMenuCursorDimensionByFont(FONT_2, 1)); + FillWindowPixelRect(0, PIXEL_FILL(0), 1, y, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), GetMenuCursorDimensionByFont(FONT_NORMAL, 1)); } else { - BagPrintTextOnWindow(0, FONT_2, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx); + BagPrintTextOnWindow(0, FONT_NORMAL, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx); } } @@ -758,7 +758,7 @@ static void PrintItemDescriptionOnMessageWindow(s32 itemIndex) else description = gText_CloseBag; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - BagPrintTextOnWindow(1, FONT_2, description, 0, 3, 2, 0, 0, 0); + BagPrintTextOnWindow(1, FONT_NORMAL, description, 0, 3, 2, 0, 0, 0); } static void CreatePocketScrollArrowPair(void) @@ -1230,7 +1230,7 @@ static void BeginMovingItemInPocket(u8 taskId, s16 itemIndex) StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]))); StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - BagPrintTextOnWindow(1, FONT_2, gStringVar4, 0, 3, 2, 0, 0, 0); + BagPrintTextOnWindow(1, FONT_NORMAL, gStringVar4, 0, 3, 2, 0, 0, 0); UpdateSwapLinePos(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); SetSwapLineInvisibility(FALSE); BagDestroyPocketSwitchArrowPair(); @@ -1315,11 +1315,11 @@ static void InitQuantityToTossOrDeposit(u16 cursorPos, const u8 *str) u8 r5 = ShowBagWindow(6, 2); CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, cursorPos), gStringVar1); StringExpandPlaceholders(gStringVar4, str); - BagPrintTextOnWindow(r5, FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(r5, FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1); r4 = ShowBagWindow(0, 0); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BagPrintTextOnWindow(r4, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1); + BagPrintTextOnWindow(r4, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1); CreateArrowPair_QuantitySelect(); } @@ -1329,7 +1329,7 @@ static void UpdateQuantityToTossOrDeposit(s16 value, u8 ndigits) FillWindowPixelBuffer(r6, PIXEL_FILL(1)); ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, ndigits); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BagPrintTextOnWindow(r6, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1); + BagPrintTextOnWindow(r6, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1); } static void CopyBagListBgTileRowToTilemapBuffer(u8 frame) @@ -1422,20 +1422,20 @@ static void OpenContextMenu(u8 taskId) r6 = ShowBagWindow(10, sContextMenuNumItems - 1); AddItemMenuActionTextPrinters( r6, - FONT_2, - GetMenuCursorDimensionByFont(FONT_2, 0), + FONT_NORMAL, + GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, - GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING), - GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, + GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING), + GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, sItemMenuContextActions, sContextMenuItemsPtr ); - Menu_InitCursor(r6, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, 0); + Menu_InitCursor(r6, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, 0); r4 = ShowBagWindow(6, 0); CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); - BagPrintTextOnWindow(r4, FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(r4, FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1); } static void Task_ItemContext_FieldOrBattle(u8 taskId) @@ -1507,7 +1507,7 @@ static void Task_ConfirmTossItems(u8 taskId) s16 *data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); - BagPrintTextOnWindow(ShowBagWindow(6, 1), FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(ShowBagWindow(6, 1), FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1); BagCreateYesNoMenuBottomRight(taskId, &sYesNoMenu_Toss); } @@ -1559,7 +1559,7 @@ static void Task_TossItem_Yes(u8 taskId) CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]), gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); - BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1); gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag; } @@ -1610,7 +1610,7 @@ static void Task_ItemMenuAction_Give(u8 taskId) PutWindowTilemap(1); CopyWindowToVram(0, COPYWIN_MAP); if (!IsWritingMailAllowed(itemId)) - DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); else if (ItemId_GetImportance(itemId) == 0) { if (CalculatePlayerPartyCount() == 0) @@ -1629,14 +1629,14 @@ static void Task_ItemMenuAction_Give(u8 taskId) static void Task_PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessageInBag(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu); } static void Task_PrintItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_WaitAButtonAndCloseContextMenu); } static void Task_WaitAButtonAndCloseContextMenu(u8 taskId) @@ -1705,7 +1705,7 @@ static void Task_ItemContext_FieldGive(u8 taskId) u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (!IsWritingMailAllowed(itemId)) { - DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { @@ -1749,7 +1749,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId) u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (ItemIsMail(itemId) == TRUE) { - DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { @@ -1872,7 +1872,7 @@ static void Task_InitSaleQuantitySelectInterface(u8 taskId) u8 r4 = ShowBagWindow(0, 1); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BagPrintTextOnWindow(r4, FONT_0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + BagPrintTextOnWindow(r4, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0xFF, 1); UpdateSalePriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); BagPrintMoneyAmount(); CreatePocketScrollArrowPair_SellQuantity(); @@ -1925,7 +1925,7 @@ static void Task_SellItem_Yes(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_FinalizeSaleToShop); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_FinalizeSaleToShop); } static void Task_FinalizeSaleToShop(u8 taskId) @@ -2013,12 +2013,12 @@ static void Task_TryDoItemDeposit(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s); - BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1); gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag; } else { - DisplayItemMessageInBag(taskId, FONT_2, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu); } } diff --git a/src/item_pc.c b/src/item_pc.c index 5e778e574..df2ad56cc 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -498,7 +498,7 @@ static void ItemPc_BuildListMenuTemplate(void) gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; gMultiuseListMenuTemplate.maxShowed = sStateDataPtr->maxShowed; - gMultiuseListMenuTemplate.fontId = FONT_2; + gMultiuseListMenuTemplate.fontId = FONT_NORMAL; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; @@ -534,7 +534,7 @@ static void ItemPc_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * } sStateDataPtr->itemMenuIconSlot ^= 1; FillWindowPixelBuffer(1, 0); - ItemPc_AddTextPrinterParameterized(1, FONT_2, desc, 0, 3, 2, 0, 0, 3); + ItemPc_AddTextPrinterParameterized(1, FONT_NORMAL, desc, 0, 3, 2, 0, 0, 3); } } @@ -552,7 +552,7 @@ static void ItemPc_ItemPrintFunc(u8 windowId, u32 itemId, u8 y) u16 quantity = ItemPc_GetItemQuantityBySlotId(itemId); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - ItemPc_AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + ItemPc_AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, 110, y, 0, 0, 0xFF, 1); } } @@ -565,19 +565,19 @@ static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 colorIdx) { if (colorIdx == 0xFF) { - u8 maxWidth = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_WIDTH); - u8 maxHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT); + u8 maxWidth = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_WIDTH); + u8 maxHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); FillWindowPixelRect(0, 0, 0, y, maxWidth, maxHeight); } else { - ItemPc_AddTextPrinterParameterized(0, FONT_2, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx); + ItemPc_AddTextPrinterParameterized(0, FONT_NORMAL, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx); } } static void ItemPc_PrintWithdrawItem(void) { - ItemPc_AddTextPrinterParameterized(2, FONT_0, gText_WithdrawItem, 0, 1, 0, 1, 0, 0); + ItemPc_AddTextPrinterParameterized(2, FONT_SMALL, gText_WithdrawItem, 0, 1, 0, 1, 0, 0); } static void ItemPc_PlaceTopMenuScrollIndicatorArrows(void) @@ -773,7 +773,7 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) StringCopy(gStringVar1, ItemId_GetName(ItemPc_GetItemIdBySlotId(data[1]))); StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, 0x00); - ItemPc_AddTextPrinterParameterized(1, FONT_2, gStringVar4, 0, 3, 2, 3, 0, 0); + ItemPc_AddTextPrinterParameterized(1, FONT_NORMAL, gStringVar4, 0, 3, 2, 3, 0, 0); UpdateSwapLinePos(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); SetSwapLineInvisibility(FALSE); ItemPc_PrintOrRemoveCursor(data[0], 2); @@ -839,11 +839,11 @@ static void Task_ItemPcSubmenuInit(u8 taskId) ItemPc_SetBorderStyleOnWindow(4); windowId = ItemPc_GetOrCreateSubwindow(0); - PrintTextArray(4, FONT_2, 8, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, sItemPcSubmenuOptions); - Menu_InitCursor(4, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0); + PrintTextArray(4, FONT_NORMAL, 8, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, sItemPcSubmenuOptions); + Menu_InitCursor(4, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0); CopyItemName(ItemPc_GetItemIdBySlotId(data[1]), gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); - ItemPc_AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1); + ItemPc_AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = Task_ItemPcSubmenuRun; } @@ -901,13 +901,13 @@ static void ItemPc_DoWithdraw(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_WithdrewQuantItem); windowId = ItemPc_GetOrCreateSubwindow(2); - AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 0, 2, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 2, 0, NULL); gTasks[taskId].func = Task_ItemPcWaitButtonAndFinishWithdrawMultiple; } else { windowId = ItemPc_GetOrCreateSubwindow(2); - AddTextPrinterParameterized(windowId, FONT_2, gText_NoMoreRoomInBag, 0, 2, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_NoMoreRoomInBag, 0, 2, 0, NULL); gTasks[taskId].func = Task_ItemPcWaitButtonWithdrawMultipleFailed; } } @@ -957,11 +957,11 @@ static void ItemPc_WithdrawMultipleInitWindow(u16 slotId) CopyItemName(itemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_WithdrawHowMany); - AddTextPrinterParameterized(ItemPc_GetOrCreateSubwindow(1), FONT_2, gStringVar4, 0, 2, 0, NULL); + AddTextPrinterParameterized(ItemPc_GetOrCreateSubwindow(1), FONT_NORMAL, gStringVar4, 0, 2, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); ItemPc_SetBorderStyleOnWindow(3); - ItemPc_AddTextPrinterParameterized(3, FONT_0, gStringVar4, 8, 10, 1, 0, 0, 1); + ItemPc_AddTextPrinterParameterized(3, FONT_SMALL, gStringVar4, 8, 10, 1, 0, 0, 1); ScheduleBgCopyTilemapToVram(0); } @@ -970,7 +970,7 @@ static void UpdateWithdrawQuantityDisplay(s16 quantity) FillWindowPixelRect(3, PIXEL_FILL(1), 10, 10, 28, 12); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - ItemPc_AddTextPrinterParameterized(3, FONT_0, gStringVar4, 8, 10, 1, 0, 0, 1); + ItemPc_AddTextPrinterParameterized(3, FONT_SMALL, gStringVar4, 8, 10, 1, 0, 0, 1); } static void Task_ItemPcHandleWithdrawMultiple(u8 taskId) @@ -1090,7 +1090,7 @@ static void unused_ItemPc_AddTextPrinterParameterized(u8 windowId, const u8 * st template.currentChar = string; template.windowId = windowId; - template.fontId = FONT_3; + template.fontId = FONT_NORMAL_COPY_2; template.x = x; template.y = y; template.currentX = x; @@ -1098,9 +1098,9 @@ static void unused_ItemPc_AddTextPrinterParameterized(u8 windowId, const u8 * st template.fgColor = 2; template.bgColor = 0; template.shadowColor = 3; - template.unk = GetFontAttribute(FONT_3, FONTATTR_UNKNOWN); - template.letterSpacing = letterSpacing + GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING); - template.lineSpacing = lineSpacing + GetFontAttribute(FONT_3, FONTATTR_LINE_SPACING); + template.unk = GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_UNKNOWN); + template.letterSpacing = letterSpacing + GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING); + template.lineSpacing = lineSpacing + GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LINE_SPACING); AddTextPrinter(&template, speed, NULL); } @@ -1140,6 +1140,6 @@ static u8 ItemPc_GetSubwindow(u8 idx) static void ItemPc_PrintOnWindow5WithContinueTask(u8 taskId, const u8 * str, TaskFunc taskFunc) { - DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, FONT_2, GetTextSpeedSetting(), str, taskFunc); + DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, FONT_NORMAL, GetTextSpeedSetting(), str, taskFunc); ScheduleBgCopyTilemapToVram(0); } diff --git a/src/item_use.c b/src/item_use.c index 71bfc8c2f..0070c5631 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -190,7 +190,7 @@ static void DisplayItemMessageInCurrentContext(u8 taskId, bool8 inField, u8 font static void PrintNotTheTimeToUseThat(u8 taskId, bool8 inField) { - DisplayItemMessageInCurrentContext(taskId, inField, FONT_4, gText_OakForbidsUseOfItemHere); + DisplayItemMessageInCurrentContext(taskId, inField, FONT_MALE, gText_OakForbidsUseOfItemHere); } static void Task_ItemUse_CloseMessageBoxAndReturnToField(u8 taskId) @@ -263,7 +263,7 @@ void FieldUseFunc_Bike(u8 taskId) || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) - DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], FONT_2, gText_CantDismountBike); + DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], FONT_NORMAL, gText_CantDismountBike); else if (Overworld_IsBikingAllowed() == TRUE && !IsBikingDisallowedByPlayer()) { sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle; @@ -340,9 +340,9 @@ void FieldUseFunc_CoinCase(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_CoinCase); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); else - DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); } void FieldUseFunc_PowderJar(u8 taskId) @@ -351,9 +351,9 @@ void FieldUseFunc_PowderJar(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_PowderQty); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); else - DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField); } void FieldUseFunc_PokeFlute(u8 taskId) @@ -371,16 +371,16 @@ void FieldUseFunc_PokeFlute(u8 taskId) { ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, FONT_2, gText_PlayedPokeFlute, Task_PlayPokeFlute); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); else - DisplayItemMessageOnField(taskId, FONT_2, gText_PlayedPokeFlute, Task_PlayPokeFlute); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); } else { if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, FONT_2, gText_PlayedPokeFluteCatchy, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ReturnToBagFromContextMenu); else - DisplayItemMessageOnField(taskId, FONT_2, gText_PlayedPokeFluteCatchy, Task_ItemUse_CloseMessageBoxAndReturnToField); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ItemUse_CloseMessageBoxAndReturnToField); } } @@ -395,9 +395,9 @@ static void Task_DisplayPokeFluteMessage(u8 taskId) if (WaitFanfare(FALSE)) { if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, FONT_2, gText_PokeFluteAwakenedMon, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ReturnToBagFromContextMenu); else - DisplayItemMessageOnField(taskId, FONT_2, gText_PokeFluteAwakenedMon, Task_ItemUse_CloseMessageBoxAndReturnToField); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ItemUse_CloseMessageBoxAndReturnToField); } } @@ -556,7 +556,7 @@ void FieldUseFunc_Repel(u8 taskId) } else // An earlier repel is still in effect - DisplayItemMessageInBag(taskId, FONT_2, gText_RepelEffectsLingered, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_RepelEffectsLingered, Task_ReturnToBagFromContextMenu); } static void Task_UseRepel(u8 taskId) @@ -566,7 +566,7 @@ static void Task_UseRepel(u8 taskId) ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); RemoveUsedItem(); - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -607,7 +607,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId) if (++gTasks[taskId].data[8] > 7) { PlaySE(SE_GLASS_FLUTE); - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -636,7 +636,7 @@ static void ItemUseOnFieldCB_EscapeRope(u8 taskId) Overworld_ResetStateAfterDigEscRope(); RemoveUsedItem(); gTasks[taskId].data[0] = 0; - DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_UseDigEscapeRopeOnField); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_UseDigEscapeRopeOnField); } void Task_UseDigEscapeRopeOnField(u8 taskId) @@ -743,7 +743,7 @@ void BattleUseFunc_PokeBallEtc(u8 taskId) ItemMenu_StartFadeToExitCallback(taskId); } else - DisplayItemMessageInBag(taskId, FONT_2, gText_BoxFull, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_BoxFull, Task_ReturnToBagFromContextMenu); } void BattleUseFunc_PokeFlute(u8 taskId) @@ -755,7 +755,7 @@ void BattleUseFunc_PokeFlute(u8 taskId) void BattleUseFunc_StatBooster(u8 taskId) { if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0)) - DisplayItemMessageInBag(taskId, FONT_2, gText_WontHaveEffect, Task_ReturnToBagFromContextMenu); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_WontHaveEffect, Task_ReturnToBagFromContextMenu); else { gTasks[taskId].data[8] = 0; @@ -772,7 +772,7 @@ static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId) u16 itemId = gSpecialVar_ItemId; PlaySE(SE_USE_ITEM); RemoveBagItem(itemId, 1); - DisplayItemMessageInBag(taskId, FONT_2, Battle_PrintStatBoosterEffectMessage(itemId), Task_BattleUse_StatBooster_WaitButton_ReturnToBattle); + DisplayItemMessageInBag(taskId, FONT_NORMAL, Battle_PrintStatBoosterEffectMessage(itemId), Task_BattleUse_StatBooster_WaitButton_ReturnToBattle); } } @@ -824,7 +824,7 @@ void BattleUseFunc_PokeDoll(u8 taskId) { RemoveUsedItem(); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xFFFF); - DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, ItemMenu_StartFadeToExitCallback); + DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, ItemMenu_StartFadeToExitCallback); } else PrintNotTheTimeToUseThat(taskId, 0); @@ -904,7 +904,7 @@ void FieldUseFunc_OakStopsYou(u8 taskId) if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { StringExpandPlaceholders(gStringVar4, gText_OakForbidsUseOfItemHere); - DisplayItemMessageInBerryPouch(taskId, FONT_4, gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); + DisplayItemMessageInBerryPouch(taskId, FONT_MALE, gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); } else PrintNotTheTimeToUseThat(taskId, gTasks[taskId].data[3]); diff --git a/src/itemfinder.c b/src/itemfinder.c index ba96e6698..551d0d53b 100644 --- a/src/itemfinder.c +++ b/src/itemfinder.c @@ -143,7 +143,7 @@ void ItemUseOnFieldCB_Itemfinder(u8 taskId) } else { - DisplayItemMessageOnField(taskId, FONT_2, gText_NopeTheresNoResponse, Task_NoResponse_CleanUp); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_NopeTheresNoResponse, Task_NoResponse_CleanUp); } } @@ -479,7 +479,7 @@ static u8 GetPlayerDirectionTowardsHiddenItem(s16 itemX, s16 itemY) static void Task_ItemfinderResponsePrintMessage(u8 taskId) { - DisplayItemMessageOnField(taskId, FONT_2, gText_ItemfinderResponding, Task_ItemfinderResponseCleanUp); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ItemfinderResponding, Task_ItemfinderResponseCleanUp); } static void Task_ItemfinderResponseCleanUp(u8 taskId) @@ -493,7 +493,7 @@ static void Task_ItemfinderResponseCleanUp(u8 taskId) static void Task_ItemfinderUnderfootPrintMessage(u8 taskId) { - DisplayItemMessageOnField(taskId, FONT_2, gText_ItemfinderShakingWildly, Task_ItemfinderUnderfootDigUpItem); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ItemfinderShakingWildly, Task_ItemfinderUnderfootDigUpItem); } static void Task_ItemfinderUnderfootDigUpItem(u8 taskId) diff --git a/src/learn_move.c b/src/learn_move.c index 283cc4f41..098f90ea0 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -353,7 +353,7 @@ static const struct ListMenuTemplate sMoveRelearnerListMenuTemplate = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0, }; @@ -506,7 +506,7 @@ static void MoveRelearnerStateMachine(void) MoveRelearnerMenuHandleInput(); break; case MENU_STATE_PRINT_TEACH_MOVE_PROMPT: - CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0); + CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0); sMoveRelearner->state++; break; case MENU_STATE_TEACH_MOVE_CONFIRM : @@ -531,7 +531,7 @@ static void MoveRelearnerStateMachine(void) } break; case MENU_STATE_PRINT_GIVE_UP_PROMPT: - CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0); + CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0); sMoveRelearner->state++; break; case MENU_STATE_GIVE_UP_CONFIRM: @@ -552,7 +552,7 @@ static void MoveRelearnerStateMachine(void) sMoveRelearner->state++; break; case MENU_STATE_WAIT_FOR_TRYING_TO_LEARN: - CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0); + CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0); sMoveRelearner->state = 18; break; case MENU_STATE_CONFIRM_DELETE_OLD_MOVE: @@ -573,7 +573,7 @@ static void MoveRelearnerStateMachine(void) sMoveRelearner->state++; break; case MENU_STATE_WAIT_FOR_STOP_TEACHING: - CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0); + CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0); sMoveRelearner->state = 26; break; case MENU_STATE_CONFIRM_STOP_TEACHING: @@ -928,5 +928,5 @@ static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, } if (colorIdx != 1) FillWindowPixelBuffer(windowId, PIXEL_FILL(sMoveRelearner->textColor[0])); - AddTextPrinterParameterized4(windowId, FONT_3, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str); + AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_2, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str); } diff --git a/src/link.c b/src/link.c index eca028c1d..3125f13fa 100644 --- a/src/link.c +++ b/src/link.c @@ -1428,8 +1428,8 @@ static void ErrorMsg_MoveCloserToPartner(void) LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(0, FONT_3, 2, 5, sLinkErrorTextColor, 0, gText_CommErrorEllipsis); - AddTextPrinterParameterized3(2, FONT_3, 2, 2, sLinkErrorTextColor, 0, gText_MoveCloserToLinkPartner); + AddTextPrinterParameterized3(0, FONT_NORMAL_COPY_2, 2, 5, sLinkErrorTextColor, 0, gText_CommErrorEllipsis); + AddTextPrinterParameterized3(2, FONT_NORMAL_COPY_2, 2, 2, sLinkErrorTextColor, 0, gText_MoveCloserToLinkPartner); PutWindowTilemap(0); PutWindowTilemap(2); CopyWindowToVram(0, COPYWIN_NONE); // Does nothing @@ -1442,7 +1442,7 @@ static void ErrorMsg_CheckConnections(void) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(1, FONT_3, 2, 0, sLinkErrorTextColor, 0, gText_CommErrorCheckConnections); + AddTextPrinterParameterized3(1, FONT_NORMAL_COPY_2, 2, 0, sLinkErrorTextColor, 0, gText_CommErrorCheckConnections); PutWindowTilemap(1); PutWindowTilemap(2); CopyWindowToVram(1, COPYWIN_NONE); // Does nothing @@ -1473,9 +1473,9 @@ static void CB2_PrintErrorMessage(void) break; case 130: if (gWirelessCommType == 2) - AddTextPrinterParameterized3(0, FONT_3, 2, 20, sLinkErrorTextColor, 0, gText_ABtnTitleScreen); + AddTextPrinterParameterized3(0, FONT_NORMAL_COPY_2, 2, 20, sLinkErrorTextColor, 0, gText_ABtnTitleScreen); else if (gWirelessCommType == 1) - AddTextPrinterParameterized3(0, FONT_3, 2, 20, sLinkErrorTextColor, 0, gText_ABtnRegistrationCounter); + AddTextPrinterParameterized3(0, FONT_NORMAL_COPY_2, 2, 20, sLinkErrorTextColor, 0, gText_ABtnRegistrationCounter); break; } if (gMain.state == 160) diff --git a/src/mail.c b/src/mail.c index a4e1ef0a1..8fd5b50b0 100644 --- a/src/mail.c +++ b/src/mail.c @@ -669,13 +669,13 @@ static void AddMailMessagePrinters(void) { if (sMailViewResources->messageLinesBuffer[i][0] != EOS && sMailViewResources->messageLinesBuffer[i][0] != CHAR_SPACE) { - AddTextPrinterParameterized3(0, FONT_1, sMailViewResources->messageLayout->linesLayout[i].lineXoffset + sMailViewResources->messageLayout->messageLeft, y + sMailViewResources->messageLayout->messageTop, sTextColor, 0, sMailViewResources->messageLinesBuffer[i]); + AddTextPrinterParameterized3(0, FONT_NORMAL_COPY_1, sMailViewResources->messageLayout->linesLayout[i].lineXoffset + sMailViewResources->messageLayout->messageLeft, y + sMailViewResources->messageLayout->messageTop, sTextColor, 0, sMailViewResources->messageLinesBuffer[i]); y += sMailViewResources->messageLayout->linesLayout[i].lineHeight; } } - width = GetStringWidth(FONT_1, gText_From, 0); - AddTextPrinterParameterized3(1, FONT_1, sMailViewResources->nameX, sMailViewResources->messageLayout->nameY, sTextColor, 0, gText_From); - AddTextPrinterParameterized3(1, FONT_1, sMailViewResources->nameX + width, sMailViewResources->messageLayout->nameY, sTextColor, 0, sMailViewResources->authorNameBuffer); + width = GetStringWidth(FONT_NORMAL_COPY_1, gText_From, 0); + AddTextPrinterParameterized3(1, FONT_NORMAL_COPY_1, sMailViewResources->nameX, sMailViewResources->messageLayout->nameY, sTextColor, 0, gText_From); + AddTextPrinterParameterized3(1, FONT_NORMAL_COPY_1, sMailViewResources->nameX + width, sMailViewResources->messageLayout->nameY, sTextColor, 0, sMailViewResources->authorNameBuffer); CopyWindowToVram(0, COPYWIN_FULL); CopyWindowToVram(1, COPYWIN_FULL); } diff --git a/src/mailbox_pc.c b/src/mailbox_pc.c index 8ceafeb26..a947caef7 100644 --- a/src/mailbox_pc.c +++ b/src/mailbox_pc.c @@ -87,7 +87,7 @@ static void ItemPrintFunc(u8 windowId, u32 itemId, u8 y) StringCopy(strbuf, gSaveBlock1Ptr->mail[itemId + PARTY_SIZE].playerName); if (StringLength(strbuf) <= 5) ConvertInternationalString(strbuf, LANGUAGE_JAPANESE); - AddTextPrinterParameterized4(windowId, FONT_2, 8, y, 0, 0, sTextColor, -1, strbuf); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 8, y, 0, 0, sTextColor, -1, strbuf); } } @@ -106,12 +106,12 @@ u8 MailboxPC_InitListMenu(struct PlayerPCItemPageStruct * playerPcStruct) gMultiuseListMenuTemplate.totalItems = playerPcStruct->count + 1; gMultiuseListMenuTemplate.windowId = sWindowIds[1]; gMultiuseListMenuTemplate.header_X = 0; - gMultiuseListMenuTemplate.item_X = GetMenuCursorDimensionByFont(FONT_2, 0); + gMultiuseListMenuTemplate.item_X = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); gMultiuseListMenuTemplate.cursor_X = 0; gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.maxShowed = 8; - gMultiuseListMenuTemplate.fontId = FONT_2; + gMultiuseListMenuTemplate.fontId = FONT_NORMAL; gMultiuseListMenuTemplate.upText_Y = 10; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 1; diff --git a/src/main_menu.c b/src/main_menu.c index 011bc2308..cb8d04c33 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -349,7 +349,7 @@ static void Task_PrintMainMenuText(u8 taskId) case MAIN_MENU_NEWGAME: default: FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME_ONLY, PIXEL_FILL(10)); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME_ONLY, FONT_2, 2, 2, sTextColor1, -1, gText_NewGame); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME_ONLY, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_NewGame); MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME_ONLY]); PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME_ONLY); CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME_ONLY, COPYWIN_FULL); @@ -357,8 +357,8 @@ static void Task_PrintMainMenuText(u8 taskId) case MAIN_MENU_CONTINUE: FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10)); FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10)); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 2, sTextColor1, -1, gText_Continue); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_2, 2, 2, sTextColor1, -1, gText_NewGame); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_Continue); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_NewGame); PrintContinueStats(); MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]); MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]); @@ -371,10 +371,10 @@ static void Task_PrintMainMenuText(u8 taskId) FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10)); FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10)); FillWindowPixelBuffer(MAIN_MENU_WINDOW_MYSTERYGIFT, PIXEL_FILL(10)); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 2, sTextColor1, -1, gText_Continue); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_2, 2, 2, sTextColor1, -1, gText_NewGame); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_Continue); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_NewGame); gTasks[taskId].tMGErrorType = 1; - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_MYSTERYGIFT, FONT_2, 2, 2, sTextColor1, -1, gText_MysteryGift); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_MYSTERYGIFT, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_MysteryGift); PrintContinueStats(); MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]); MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]); @@ -600,7 +600,7 @@ static void PrintMessageOnWindow4(const u8 *str) { FillWindowPixelBuffer(MAIN_MENU_WINDOW_ERROR, PIXEL_FILL(10)); MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_ERROR, FONT_2, 0, 2, sTextColor1, 2, str); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_ERROR, FONT_NORMAL, 0, 2, sTextColor1, 2, str); PutWindowTilemap(MAIN_MENU_WINDOW_ERROR); CopyWindowToVram(MAIN_MENU_WINDOW_ERROR, COPYWIN_GFX); SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 19, 221)); @@ -620,12 +620,12 @@ static void PrintPlayerName(void) s32 i; u8 name[PLAYER_NAME_LENGTH + 1]; u8 *ptr; - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 18, sTextColor2, -1, gText_Player); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 18, sTextColor2, -1, gText_Player); ptr = name; for (i = 0; i < PLAYER_NAME_LENGTH; i++) *ptr++ = gSaveBlock2Ptr->playerName[i]; *ptr = EOS; - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 18, sTextColor2, -1, name); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 18, sTextColor2, -1, name); } static void PrintPlayTime(void) @@ -633,11 +633,11 @@ static void PrintPlayTime(void) u8 strbuf[30]; u8 *ptr; - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 34, sTextColor2, -1, gText_Time); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 34, sTextColor2, -1, gText_Time); ptr = ConvertIntToDecimalStringN(strbuf, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); *ptr++ = CHAR_COLON; ConvertIntToDecimalStringN(ptr, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 34, sTextColor2, -1, strbuf); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 34, sTextColor2, -1, strbuf); } static void PrintDexCount(void) @@ -651,10 +651,10 @@ static void PrintDexCount(void) dexcount = GetNationalPokedexCount(FLAG_GET_CAUGHT); else dexcount = GetKantoPokedexCount(FLAG_GET_CAUGHT); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 50, sTextColor2, -1, gText_Pokedex); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 50, sTextColor2, -1, gText_Pokedex); ptr = ConvertIntToDecimalStringN(strbuf, dexcount, STR_CONV_MODE_LEFT_ALIGN, 3); StringAppend(ptr, gTextJPDummy_Hiki); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 50, sTextColor2, -1, strbuf); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 50, sTextColor2, -1, strbuf); } } @@ -669,10 +669,10 @@ static void PrintBadgeCount(void) if (FlagGet(flagId)) nbadges++; } - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 66, sTextColor2, -1, gText_Badges); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 66, sTextColor2, -1, gText_Badges); ptr = ConvertIntToDecimalStringN(strbuf, nbadges, STR_CONV_MODE_LEADING_ZEROS, 1); StringAppend(ptr, gTextJPDummy_Ko); - AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 66, sTextColor2, -1, strbuf); + AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 66, sTextColor2, -1, strbuf); } static void LoadUserFrameToBg(u8 bgId) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 97a98678b..a7d0ce003 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -197,9 +197,9 @@ static void MapNamePopupPrintMapNameOnWindow(u16 windowId) ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.floorNum); maxWidth = gMapHeader.floorNum != 0x7F ? 152 : 176; } - xpos = (maxWidth - GetStringWidth(FONT_2, mapName, -1)) / 2; + xpos = (maxWidth - GetStringWidth(FONT_NORMAL, mapName, -1)) / 2; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(windowId, FONT_2, mapName, xpos, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, mapName, xpos, 2, TEXT_SKIP_DRAW, NULL); } static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 floorNum) diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index de42a0a4f..cf74f1950 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -457,8 +457,8 @@ u16 MapPreview_CreateMapNameWindow(u8 mapsec) color[1] = TEXT_COLOR_RED; // Access violation color[2] = TEXT_COLOR_LIGHT_GRAY; // Access violation GetMapName(gStringVar4, mapsec, 0); - xctr = 104 - GetStringWidth(FONT_2, gStringVar4, 0); - AddTextPrinterParameterized4(windowId, FONT_2, xctr / 2, 2, 0, 0, color/* Access violation */, -1, gStringVar4); + xctr = 104 - GetStringWidth(FONT_NORMAL, gStringVar4, 0); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, xctr / 2, 2, 0, 0, color/* Access violation */, -1, gStringVar4); return windowId; } diff --git a/src/menu.c b/src/menu.c index d0d071392..8ef713fac 100644 --- a/src/menu.c +++ b/src/menu.c @@ -192,8 +192,8 @@ void TopBarWindowPrintString(const u8 *string, u8 unused, bool8 copyToVram) { PutWindowTilemap(sTopBarWindowId); FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15)); - width = GetStringWidth(FONT_0, string, 0); - AddTextPrinterParameterized3(sTopBarWindowId, FONT_0, -20 - width, 1, sTopBarWindowTextColors, 0, string); + width = GetStringWidth(FONT_SMALL, string, 0); + AddTextPrinterParameterized3(sTopBarWindowId, FONT_SMALL, -20 - width, 1, sTopBarWindowTextColors, 0, string); if (copyToVram) CopyWindowToVram(sTopBarWindowId, COPYWIN_FULL); } @@ -223,10 +223,10 @@ void TopBarWindowPrintTwoStrings(const u8 *string, const u8 *string2, bool8 fgCo FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15)); if (string2) { - width = GetStringWidth(FONT_0, string2, 0); - AddTextPrinterParameterized3(sTopBarWindowId, FONT_0, -20 - width, 1, color, 0, string2); + width = GetStringWidth(FONT_SMALL, string2, 0); + AddTextPrinterParameterized3(sTopBarWindowId, FONT_SMALL, -20 - width, 1, color, 0, string2); } - AddTextPrinterParameterized4(sTopBarWindowId, FONT_1, 4, 1, 0, 0, color, 0, string); + AddTextPrinterParameterized4(sTopBarWindowId, FONT_NORMAL_COPY_1, 4, 1, 0, 0, color, 0, string); if (copyToVram) CopyWindowToVram(sTopBarWindowId, COPYWIN_FULL); } diff --git a/src/menu2.c b/src/menu2.c index 0f372140e..7ca12e5f0 100644 --- a/src/menu2.c +++ b/src/menu2.c @@ -500,11 +500,11 @@ void Menu_PrintFormatIntlPlayerName(u8 windowId, const u8 * src, u16 x, u16 y) StringExpandPlaceholders(gStringVar4, src); if (i != 5) { - AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, x, y, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, 0xFF, NULL); } else { - AddTextPrinterParameterized5(windowId, FONT_2, gStringVar4, x, y, 0xFF, NULL, 0, 0); + AddTextPrinterParameterized5(windowId, FONT_NORMAL, gStringVar4, x, y, 0xFF, NULL, 0, 0); } } diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 7bdd9f83b..afa850af6 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -237,7 +237,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity_p, u16 qmax) u8 GetDialogBoxFontId(void) { if (ContextNpcGetTextColor() == NPC_TEXT_COLOR_MALE) - return FONT_4; + return FONT_MALE; else - return FONT_5; + return FONT_FEMALE; } diff --git a/src/money.c b/src/money.c index 7ba5b6375..fbabc889b 100644 --- a/src/money.c +++ b/src/money.c @@ -84,7 +84,7 @@ void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed) *(txtPtr++) = 0; StringExpandPlaceholders(txtPtr, gText_PokedollarVar1); - AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, 64 - GetStringWidth(FONT_0, gStringVar4, 0), 0xC, speed, NULL); + AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, 64 - GetStringWidth(FONT_SMALL, gStringVar4, 0), 0xC, speed, NULL); } void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed) @@ -101,13 +101,13 @@ void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed) *(txtPtr++) = 0; StringExpandPlaceholders(txtPtr, gText_PokedollarVar1); - AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, x, y, speed, NULL); } void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount) { DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, pallete); - AddTextPrinterParameterized(windowId, FONT_2, gText_TrainerCardMoney, 0, 0, 0xFF, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_TrainerCardMoney, 0, 0, 0xFF, 0); PrintMoneyAmountInMoneyBox(windowId, amount, 0); } diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index b07a57ee0..9f8529fcf 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -221,7 +221,7 @@ const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -266,7 +266,7 @@ const struct ListMenuTemplate sListMenu_ReceiveSendToss = { .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -287,7 +287,7 @@ const struct ListMenuTemplate sListMenu_ReceiveToss = { .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -308,7 +308,7 @@ const struct ListMenuTemplate sListMenu_ReceiveSend = { .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -329,7 +329,7 @@ const struct ListMenuTemplate sListMenu_Receive = { .lettersSpacing = 0, .itemVerticalPadding = 2, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -469,14 +469,14 @@ void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCance if (!mg_or_ereader) { src = usePickOkCancel == TRUE ? gText_PickOKExit : gText_PickOKCancel; - AddTextPrinterParameterized4(0, FONT_2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift2); - width = 222 - GetStringWidth(FONT_0, src, 0); - AddTextPrinterParameterized4(0, FONT_0, width, 2, 0, 0, sMG_Ereader_TextColor_1, 0, src); + AddTextPrinterParameterized4(0, FONT_NORMAL, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift2); + width = 222 - GetStringWidth(FONT_SMALL, src, 0); + AddTextPrinterParameterized4(0, FONT_SMALL, width, 2, 0, 0, sMG_Ereader_TextColor_1, 0, src); } else { - AddTextPrinterParameterized4(0, FONT_2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gJPText_MysteryGift); - AddTextPrinterParameterized4(0, FONT_0, 0x78, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gJPText_DecideStop); + AddTextPrinterParameterized4(0, FONT_NORMAL, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gJPText_MysteryGift); + AddTextPrinterParameterized4(0, FONT_SMALL, 0x78, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gJPText_DecideStop); } CopyWindowToVram(0, COPYWIN_GFX); PutWindowTilemap(0); @@ -527,7 +527,7 @@ void AddTextPrinterToWindow1(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); FillWindowPixelBuffer(1, 0x11); - AddTextPrinterParameterized4(1, FONT_2, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); + AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); DrawTextBorderOuter(1, 0x001, 0xF); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_FULL); @@ -634,7 +634,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) width = 0; for (i = 0; i < listMenuTemplate.totalItems; i++) { - u32 curWidth = GetStringWidth(FONT_2, listMenuTemplate.items[i].label, listMenuTemplate.lettersSpacing); + u32 curWidth = GetStringWidth(FONT_NORMAL, listMenuTemplate.items[i].label, listMenuTemplate.lettersSpacing); if (curWidth > width) width = curWidth; } @@ -668,7 +668,7 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width20); } FillWindowPixelBuffer(*windowId, 0x11); - AddTextPrinterParameterized4(*windowId, FONT_2, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); + AddTextPrinterParameterized4(*windowId, FONT_NORMAL, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); DrawTextBorderOuter(*windowId, 0x001, 0x0F); CopyWindowToVram(*windowId, COPYWIN_GFX); PutWindowTilemap(*windowId); @@ -684,7 +684,7 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c { windowTemplate.tilemapTop = 15; } - CreateYesNoMenu(&windowTemplate, FONT_2, 0, 2, 10, 14, 0); + CreateYesNoMenu(&windowTemplate, FONT_NORMAL, 0, 2, 10, 14, 0); (*textState)++; break; case 2: @@ -729,7 +729,7 @@ s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, } *windowId = AddWindow(&sMysteryGiftMenuWindowTemplate); FillWindowPixelBuffer(*windowId, 0x11); - AddTextPrinterParameterized4(*windowId, FONT_2, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); + AddTextPrinterParameterized4(*windowId, FONT_NORMAL, 0, 2, 0, 2, sMG_Ereader_TextColor_2, 0, gStringVar4); DrawTextBorderOuter(*windowId, 0x001, 0x0F); CopyWindowToVram(*windowId, COPYWIN_GFX); PutWindowTilemap(*windowId); diff --git a/src/mystery_gift_show_card.c b/src/mystery_gift_show_card.c index 8d2520c15..548f59080 100644 --- a/src/mystery_gift_show_card.c +++ b/src/mystery_gift_show_card.c @@ -399,25 +399,25 @@ static void DrawCardWindow(u8 whichWindow) { // Print card title/subtitle s32 x; - AddTextPrinterParameterized3(windowId, FONT_3, 0, 1, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->titleText); - x = 160 - GetStringWidth(FONT_3, sWonderCardData->subtitleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING)); + AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0, 1, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->titleText); + x = 160 - GetStringWidth(FONT_NORMAL_COPY_2, sWonderCardData->subtitleText, GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING)); if (x < 0) x = 0; - AddTextPrinterParameterized3(windowId, FONT_3, x, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->subtitleText); + AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, x, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->subtitleText); // Print id number if (sWonderCardData->card.idNumber != 0) - AddTextPrinterParameterized3(windowId, FONT_2, 166, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->idNumberText); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 166, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->idNumberText); break; } case WIN_BODY: // Print body text for (; i < WONDER_CARD_BODY_TEXT_LINES; i++) - AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->bodyTextPal], 0, sWonderCardData->bodyText[i]); + AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->bodyTextPal], 0, sWonderCardData->bodyText[i]); break; case WIN_FOOTER: // Print footer line 1 - AddTextPrinterParameterized3(windowId, FONT_3, 0, + AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0, sFooterTextOffsets[sWonderCardData->card.type], sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->footerLine1Text); @@ -427,7 +427,7 @@ static void DrawCardWindow(u8 whichWindow) { // Print gift text // Odd that CARD_TYPE_STAMP is not ignored, it has empty text for this - AddTextPrinterParameterized3(windowId, FONT_3, 0, + AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0, 16 + sFooterTextOffsets[sWonderCardData->card.type], sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->footerLine2Text); @@ -436,19 +436,19 @@ static void DrawCardWindow(u8 whichWindow) { s32 x = 0; s32 y = sFooterTextOffsets[sWonderCardData->card.type] + 16; - s32 spacing = GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING); + s32 spacing = GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING); for (; i < sWonderCardData->recordIdx; i++) { // Print stat text - AddTextPrinterParameterized3(windowId, FONT_3, x, y, sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statText); + AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, x, y, sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statText); if (sWonderCardData->statTextData[i].statNumberText[0] != EOS) { // Print stat number - x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statText, spacing); - AddTextPrinterParameterized3(windowId, FONT_2, x, y, + x += GetStringWidth(FONT_NORMAL_COPY_2, sWonderCardData->statTextData[i].statText, spacing); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, x, y, sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statNumberText); - x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width; + x += GetStringWidth(FONT_NORMAL_COPY_2, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width; } } } diff --git a/src/mystery_gift_show_news.c b/src/mystery_gift_show_news.c index b97e74c8c..1a9e6cde3 100644 --- a/src/mystery_gift_show_news.c +++ b/src/mystery_gift_show_news.c @@ -360,15 +360,15 @@ static void DrawNewsWindows(void) FillWindowPixelBuffer(sWonderNewsData->windowIds[WIN_BODY], 0); // Print title text - x = (224 - GetStringWidth(FONT_3, sWonderNewsData->titleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING))) / 2; + x = (224 - GetStringWidth(FONT_NORMAL_COPY_2, sWonderNewsData->titleText, GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING))) / 2; if (x < 0) x = 0; - AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_3, x, 6, sTextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText); + AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_NORMAL_COPY_2, x, 6, sTextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText); // Print body text for (; i < WONDER_NEWS_BODY_TEXT_LINES; ++i) { - AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_BODY], FONT_3, 0, + AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_BODY], FONT_NORMAL_COPY_2, 0, 16 * i + 2, sTextColorTable[sWonderNewsData->gfx->bodyTextPal], 0, sWonderNewsData->bodyText[i]); diff --git a/src/naming_screen.c b/src/naming_screen.c index 32d1bd087..02b71a094 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -743,7 +743,7 @@ static void DisplaySentToPCMessage(void) StringExpandPlaceholders(gStringVar4, sTransferredToPCMessages[stringToDisplay]); DrawDialogueFrame(0, FALSE); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(0, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); } @@ -1698,7 +1698,7 @@ static void HandleDpadMovement(struct Task *task) static void DrawNormalTextEntryBox(void) { FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1)); - AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_1, sNamingScreen->template->title, 1, 1, 0, NULL); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL_COPY_1, sNamingScreen->template->title, 1, 1, 0, NULL); PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]); } @@ -1709,7 +1709,7 @@ static void DrawMonTextEntryBox(void) StringCopy(buffer, gSpeciesNames[sNamingScreen->monSpecies]); StringAppendN(buffer, sNamingScreen->template->title, 15); FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1)); - AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_1, buffer, 1, 1, 0, NULL); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL_COPY_1, buffer, 1, 1, 0, NULL); PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]); } @@ -1762,7 +1762,7 @@ static void DrawGenderIcon(void) StringCopy(genderSymbol, gText_FemaleSymbol); gender = FEMALE; } - AddTextPrinterParameterized3(sNamingScreen->windows[2], FONT_2, 0x68, 1, sGenderColors[gender], TEXT_SKIP_DRAW, genderSymbol); + AddTextPrinterParameterized3(sNamingScreen->windows[2], FONT_NORMAL, 0x68, 1, sGenderColors[gender], TEXT_SKIP_DRAW, genderSymbol); } } @@ -1898,7 +1898,7 @@ static void DrawTextEntry(void) temp[1] = gExpandedPlaceholder_Empty[0]; extraWidth = (IsWideLetter(temp[0]) == TRUE) ? 2 : 0; - AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], FONT_2, temp, i * 8 + xpos + extraWidth, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], FONT_NORMAL, temp, i * 8 + xpos + extraWidth, 1, TEXT_SKIP_DRAW, NULL); } TryDrawGenderIcon(); @@ -1940,7 +1940,7 @@ static void PrintKeyboardKeys(u8 window, u8 page) FillWindowPixelBuffer(window, sFillValues[page]); for (i = 0; i < KBROW_COUNT; i++) - AddTextPrinterParameterized3(window, FONT_1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]); + AddTextPrinterParameterized3(window, FONT_NORMAL_COPY_1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]); PutWindowTilemap(window); } @@ -1980,10 +1980,10 @@ static void DrawKeyboardPageOnDeck(void) static void PrintControls(void) { const u8 color[3] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; - int strwidth = GetStringWidth(FONT_0, gText_MoveOkBack, 0); + int strwidth = GetStringWidth(FONT_SMALL, gText_MoveOkBack, 0); FillWindowPixelBuffer(sNamingScreen->windows[WIN_BANNER], PIXEL_FILL(15)); - AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], FONT_0, DISPLAY_WIDTH - 4 - strwidth, 0, color, 0, gText_MoveOkBack); + AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], FONT_SMALL, DISPLAY_WIDTH - 4 - strwidth, 0, color, 0, gText_MoveOkBack); PutWindowTilemap(sNamingScreen->windows[WIN_BANNER]); CopyWindowToVram(sNamingScreen->windows[WIN_BANNER], COPYWIN_FULL); } diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 41d0d27b0..13e33e119 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -58,8 +58,8 @@ static const struct WindowTemplate sYesNo_WindowTemplate = static const struct FontInfo gFontInfos[] = { - [FONT_0] = { - .fontFunction = Font0Func, + [FONT_SMALL] = { + .fontFunction = FontFunc_Small, .maxLetterWidth = 8, .maxLetterHeight = 13, .letterSpacing = 0, @@ -68,8 +68,8 @@ static const struct FontInfo gFontInfos[] = .bgColor = 1, .shadowColor = 3, }, - [FONT_1] = { - .fontFunction = Font1Func, + [FONT_NORMAL_COPY_1] = { + .fontFunction = FontFunc_NormalCopy1, .maxLetterWidth = 8, .maxLetterHeight = 14, .letterSpacing = 0, @@ -78,8 +78,8 @@ static const struct FontInfo gFontInfos[] = .bgColor = 1, .shadowColor = 3, }, - [FONT_2] = { - .fontFunction = Font2Func, + [FONT_NORMAL] = { + .fontFunction = FontFunc_Normal, .maxLetterWidth = 10, .maxLetterHeight = 14, .letterSpacing = 1, @@ -88,8 +88,8 @@ static const struct FontInfo gFontInfos[] = .bgColor = 1, .shadowColor = 3, }, - [FONT_3] = { - .fontFunction = Font3Func, + [FONT_NORMAL_COPY_2] = { + .fontFunction = FontFunc_NormalCopy2, .maxLetterWidth = 10, .maxLetterHeight = 14, .letterSpacing = 1, @@ -98,8 +98,8 @@ static const struct FontInfo gFontInfos[] = .bgColor = 1, .shadowColor = 3, }, - [FONT_4] = { - .fontFunction = Font4Func, + [FONT_MALE] = { + .fontFunction = FontFunc_Male, .maxLetterWidth = 10, .maxLetterHeight = 14, .letterSpacing = 0, @@ -108,8 +108,8 @@ static const struct FontInfo gFontInfos[] = .bgColor = 1, .shadowColor = 3, }, - [FONT_5] = { - .fontFunction = Font5Func, + [FONT_FEMALE] = { + .fontFunction = FontFunc_Female, .maxLetterWidth = 10, .maxLetterHeight = 14, .letterSpacing = 0, @@ -119,7 +119,7 @@ static const struct FontInfo gFontInfos[] = .shadowColor = 3, }, [FONT_BRAILLE] = { - .fontFunction = Font6Func, + .fontFunction = FontFunc_Braille, .maxLetterWidth = 8, .maxLetterHeight = 16, .letterSpacing = 0, @@ -128,7 +128,7 @@ static const struct FontInfo gFontInfos[] = .bgColor = 1, .shadowColor = 3, }, - [FONT_7] = { + [FONT_BOLD] = { .fontFunction = NULL, .maxLetterWidth = 8, .maxLetterHeight = 8, @@ -142,14 +142,14 @@ static const struct FontInfo gFontInfos[] = static const u8 gMenuCursorDimensions[][2] = { - [FONT_0] = { 8, 13 }, - [FONT_1] = { 8, 14 }, - [FONT_2] = { 8, 14 }, - [FONT_3] = { 8, 14 }, - [FONT_4] = { 8, 14 }, - [FONT_5] = { 8, 14 }, - [FONT_BRAILLE] = { 8, 16 }, - [FONT_7] = {} + [FONT_SMALL] = { 8, 13 }, + [FONT_NORMAL_COPY_1] = { 8, 14 }, + [FONT_NORMAL] = { 8, 14 }, + [FONT_NORMAL_COPY_2] = { 8, 14 }, + [FONT_MALE] = { 8, 14 }, + [FONT_FEMALE] = { 8, 14 }, + [FONT_BRAILLE] = { 8, 16 }, + [FONT_BOLD] = {} }; static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode); @@ -428,23 +428,23 @@ void AddTextPrinterDiffStyle(bool8 allowSkippingDelayWithButtonPress) gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress; color = ContextNpcGetTextColor(); if (color == NPC_TEXT_COLOR_MALE) - AddTextPrinterParameterized2(0, FONT_4, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_BLUE, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_MALE, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_BLUE, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); else if (color == NPC_TEXT_COLOR_FEMALE) - AddTextPrinterParameterized2(0, FONT_5, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_FEMALE, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); else // NPC_TEXT_COLOR_MON / NPC_TEXT_COLOR_NEUTRAL - AddTextPrinterParameterized2(0, FONT_2, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress) { gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized2(0, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed) { gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized2(0, FONT_2, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } void LoadStdWindowFrameGfx(void) @@ -647,12 +647,12 @@ void DisplayItemMessageOnField(u8 taskId, u8 fontId, const u8 *string, TaskFunc void DisplayYesNoMenuDefaultYes(void) { - CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_2, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 0); + CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_NORMAL, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 0); } void DisplayYesNoMenuDefaultNo(void) { - CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_2, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 1); + CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_NORMAL, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 1); } u8 GetTextSpeedSetting(void) diff --git a/src/oak_speech.c b/src/oak_speech.c index 7fb20aa4e..f16fd35a6 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -593,7 +593,7 @@ static void CreateHelpDocsPage1(void) sOakSpeechResources->unk_0014[0] = AddWindow(sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012]); PutWindowTilemap(sOakSpeechResources->unk_0014[0]); FillWindowPixelBuffer(sOakSpeechResources->unk_0014[0], 0x00); - AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[0], FONT_2, 2, 0, 1, 1, sTextColor_HelpSystem, 0, gNewGame_HelpDocs1); + AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[0], FONT_NORMAL, 2, 0, 1, 1, sTextColor_HelpSystem, 0, gNewGame_HelpDocs1); CopyWindowToVram(sOakSpeechResources->unk_0014[0], COPYWIN_FULL); FillBgTilemapBufferRect_Palette0(1, 0x3000, 1, 3, 5, 16); CopyBgTilemapBufferToVram(1); @@ -615,7 +615,7 @@ static void Task_OakSpeech4(u8 taskId) sOakSpeechResources->unk_0014[i] = AddWindow(&sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012][i]); PutWindowTilemap(sOakSpeechResources->unk_0014[i]); FillWindowPixelBuffer(sOakSpeechResources->unk_0014[i], 0x00); - AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[i], FONT_2, 6, 0, 1, 1, sTextColor_HelpSystem, 0, sHelpDocsPtrs[i + r7 * 3]); + AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[i], FONT_NORMAL, 6, 0, 1, 1, sTextColor_HelpSystem, 0, sHelpDocsPtrs[i + r7 * 3]); CopyWindowToVram(sOakSpeechResources->unk_0014[i], COPYWIN_FULL); } @@ -747,7 +747,7 @@ static void Task_OakSpeech6(u8 taskId) sOakSpeechResources->unk_0012 = 0; gMain.state = 0; data[15] = 16; - AddTextPrinterParameterized4(data[14], FONT_2, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[0]); + AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[0]); data[5] = CreateTextCursorSpriteForOakSpeech(0, 0xe2, 0x91, 0, 0); gSprites[data[5]].oam.objMode = ST_OAM_OBJ_BLEND; gSprites[data[5]].oam.priority = 0; @@ -807,7 +807,7 @@ static void Task_OakSpeech7(u8 taskId) if (data[15] <= 0) { FillWindowPixelBuffer(data[14], 0x00); - AddTextPrinterParameterized4(data[14], FONT_2, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[sOakSpeechResources->unk_0012]); + AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[sOakSpeechResources->unk_0012]); if (sOakSpeechResources->unk_0012 == 0) { ClearTopBarWindow(); @@ -906,11 +906,11 @@ static void Task_OakSpeech9(u8 taskId) if (str != gStringVar4) \ { \ StringExpandPlaceholders(gStringVar4, str); \ - AddTextPrinterParameterized2(0, FONT_4, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ + AddTextPrinterParameterized2(0, FONT_MALE, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ } \ else \ { \ - AddTextPrinterParameterized2(0, FONT_4, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ + AddTextPrinterParameterized2(0, FONT_MALE, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ } \ CopyWindowToVram(0, COPYWIN_FULL); \ }) @@ -1076,12 +1076,12 @@ static void Task_OakSpeech19(u8 taskId) sOakSpeechResources->textColor[0] = 1; sOakSpeechResources->textColor[1] = 2; sOakSpeechResources->textColor[2] = 3; - AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_2, 8, 1, sOakSpeechResources->textColor, 0, gText_Boy); + AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_NORMAL, 8, 1, sOakSpeechResources->textColor, 0, gText_Boy); sOakSpeechResources->textColor[0] = 1; sOakSpeechResources->textColor[1] = 2; sOakSpeechResources->textColor[2] = 3; - AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_2, 8, 17, sOakSpeechResources->textColor, 0, gText_Girl); - Menu_InitCursor(gTasks[taskId].data[13], FONT_2, 0, 1, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 2, 0); + AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_NORMAL, 8, 17, sOakSpeechResources->textColor, 0, gText_Girl); + Menu_InitCursor(gTasks[taskId].data[13], FONT_NORMAL, 0, 1, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 2, 0); CopyWindowToVram(gTasks[taskId].data[13], COPYWIN_FULL); gTasks[taskId].func = Task_OakSpeech20; } @@ -1263,7 +1263,7 @@ static void Task_OakSpeech26(u8 taskId) data[3]--; else { - CreateYesNoMenu(&sNewGameAdventureIntroWindowTemplates[2], FONT_2, 0, 2, GetStdWindowBaseTileNum(), 14, 0); + CreateYesNoMenu(&sNewGameAdventureIntroWindowTemplates[2], FONT_NORMAL, 0, 2, GetStdWindowBaseTileNum(), 14, 0); gTasks[taskId].func = Task_OakSpeech27; } } @@ -1871,16 +1871,16 @@ static void PrintNameChoiceOptions(u8 taskId, u8 hasPlayerBeenNamed) PutWindowTilemap(data[13]); DrawStdFrameWithCustomTileAndPalette(data[13], 1, GetStdWindowBaseTileNum(), 14); FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11); - AddTextPrinterParameterized(data[13], FONT_2, gOtherText_NewName, 8, 1, 0, NULL); + AddTextPrinterParameterized(data[13], FONT_NORMAL, gOtherText_NewName, 8, 1, 0, NULL); if (hasPlayerBeenNamed == FALSE) textPtrs = gSaveBlock2Ptr->playerGender == MALE ? sMaleNameChoices : sFemaleNameChoices; else textPtrs = sRivalNameChoices; for (i = 0; i < 4; i++) { - AddTextPrinterParameterized(data[13], FONT_2, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL); + AddTextPrinterParameterized(data[13], FONT_NORMAL, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL); } - Menu_InitCursor(data[13], FONT_2, 0, 1, 16, 5, 0); + Menu_InitCursor(data[13], FONT_NORMAL, 0, 1, 16, 5, 0); CopyWindowToVram(data[13], COPYWIN_FULL); } diff --git a/src/option_menu.c b/src/option_menu.c index f16ae5dde..7921a1212 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -316,9 +316,9 @@ static void InitOptionMenuBg(void) static void OptionMenu_PickSwitchCancel(void) { s32 x; - x = 0xE4 - GetStringWidth(FONT_0, gText_PickSwitchCancel, 0); + x = 0xE4 - GetStringWidth(FONT_SMALL, gText_PickSwitchCancel, 0); FillWindowPixelBuffer(2, PIXEL_FILL(15)); - AddTextPrinterParameterized3(2, FONT_0, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel); + AddTextPrinterParameterized3(2, FONT_SMALL, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel); PutWindowTilemap(2); CopyWindowToVram(2, COPYWIN_FULL); } @@ -472,31 +472,31 @@ static void BufferOptionMenuString(u8 selection) memcpy(dst, sOptionMenuTextColor, 3); x = 0x82; - y = ((GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; - FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT)); + y = ((GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; + FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT)); switch (selection) { case MENUITEM_TEXTSPEED: - AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sTextSpeedOptions[sOptionMenuPtr->option[selection]]); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sTextSpeedOptions[sOptionMenuPtr->option[selection]]); break; case MENUITEM_BATTLESCENE: - AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sBattleSceneOptions[sOptionMenuPtr->option[selection]]); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sBattleSceneOptions[sOptionMenuPtr->option[selection]]); break; case MENUITEM_BATTLESTYLE: - AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sBattleStyleOptions[sOptionMenuPtr->option[selection]]); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sBattleStyleOptions[sOptionMenuPtr->option[selection]]); break; case MENUITEM_SOUND: - AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sSoundOptions[sOptionMenuPtr->option[selection]]); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sSoundOptions[sOptionMenuPtr->option[selection]]); break; case MENUITEM_BUTTONMODE: - AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sButtonTypeOptions[sOptionMenuPtr->option[selection]]); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sButtonTypeOptions[sOptionMenuPtr->option[selection]]); break; case MENUITEM_FRAMETYPE: StringCopy(str, gText_FrameType); ConvertIntToDecimalStringN(buf, sOptionMenuPtr->option[selection] + 1, 1, 2); StringAppendN(str, buf, 3); - AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, str); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, str); break; default: break; @@ -524,7 +524,7 @@ static void CloseAndSaveOptionMenu(u8 taskId) static void PrintOptionMenuHeader(void) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_2, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); } @@ -560,7 +560,7 @@ static void LoadOptionMenuItemNames(void) FillWindowPixelBuffer(1, PIXEL_FILL(1)); for (i = 0; i < MENUITEM_COUNT; i++) { - AddTextPrinterParameterized(WIN_OPTIONS, FONT_2, sOptionMenuItemsNames[i], 8, (u8)((i * (GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_OPTIONS, FONT_NORMAL, sOptionMenuItemsNames[i], 8, (u8)((i * (GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SKIP_DRAW, NULL); } } @@ -568,7 +568,7 @@ static void UpdateSettingSelectionDisplay(u16 selection) { u16 maxLetterHeight, y; - maxLetterHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT); + maxLetterHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); y = selection * (maxLetterHeight - 1) + 0x3A; SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(y, y + maxLetterHeight)); SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0x10, 0xE0)); diff --git a/src/party_menu.c b/src/party_menu.c index 6e1dc009e..d19354c5b 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -2135,7 +2135,7 @@ static void CreateCancelConfirmWindows(bool8 chooseMultiple) { confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate); FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0)); - AddTextPrinterParameterized4(confirmWindowId, FONT_0, (48 - GetStringWidth(FONT_0, gText_PartyMenu_OK, 0)) / 2u, 1, 0, 0, sFontColorTable[0], -1, gText_PartyMenu_OK); + AddTextPrinterParameterized4(confirmWindowId, FONT_SMALL, (48 - GetStringWidth(FONT_SMALL, gText_PartyMenu_OK, 0)) / 2u, 1, 0, 0, sFontColorTable[0], -1, gText_PartyMenu_OK); PutWindowTilemap(confirmWindowId); CopyWindowToVram(confirmWindowId, COPYWIN_GFX); cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate); @@ -2150,13 +2150,13 @@ static void CreateCancelConfirmWindows(bool8 chooseMultiple) // Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE) { - offset += (48 - GetStringWidth(FONT_0, gFameCheckerText_Cancel, 0)) / 2; - AddTextPrinterParameterized3(cancelWindowId, FONT_0, offset, 1, sFontColorTable[0], -1, gFameCheckerText_Cancel); + offset += (48 - GetStringWidth(FONT_SMALL, gFameCheckerText_Cancel, 0)) / 2; + AddTextPrinterParameterized3(cancelWindowId, FONT_SMALL, offset, 1, sFontColorTable[0], -1, gFameCheckerText_Cancel); } else { - offset += (48 - GetStringWidth(FONT_0, gOtherText_Exit, 0)) / 2; - AddTextPrinterParameterized3(cancelWindowId, FONT_0, offset, 1, sFontColorTable[0], -1, gOtherText_Exit); + offset += (48 - GetStringWidth(FONT_SMALL, gOtherText_Exit, 0)) / 2; + AddTextPrinterParameterized3(cancelWindowId, FONT_SMALL, offset, 1, sFontColorTable[0], -1, gOtherText_Exit); } PutWindowTilemap(cancelWindowId); CopyWindowToVram(cancelWindowId, COPYWIN_GFX); @@ -2297,7 +2297,7 @@ static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *dimensions) { - AddTextPrinterParameterized3(windowId, FONT_0, dimensions[0], dimensions[1], sFontColorTable[color], 0, str); + AddTextPrinterParameterized3(windowId, FONT_SMALL, dimensions[0], dimensions[1], sFontColorTable[color], 0, str); } static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 drawMenuBoxOrText) @@ -2453,7 +2453,7 @@ static void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox if (drawMenuBoxOrText != DRAW_TEXT_ONLY) menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft / 8, menuBox->infoRects->descTextTop / 8, menuBox->infoRects->descTextWidth / 8, menuBox->infoRects->descTextHeight / 8, TRUE); if (drawMenuBoxOrText != DRAW_MENU_BOX_ONLY) - AddTextPrinterParameterized3(menuBox->windowId, FONT_1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringId]); + AddTextPrinterParameterized3(menuBox->windowId, FONT_NORMAL_COPY_1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringId]); } static void PartyMenuRemoveWindow(u8 *windowId) @@ -2505,7 +2505,7 @@ void DisplayPartyMenuStdMessage(u32 stringId) } DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x58, 0xF); StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]); - AddTextPrinterParameterized(*windowPtr, FONT_2, gStringVar4, 0, 2, 0, 0); + AddTextPrinterParameterized(*windowPtr, FONT_NORMAL, gStringVar4, 0, 2, 0, 0); ScheduleBgCopyTilemapToVram(2); } } @@ -2554,15 +2554,15 @@ static u8 DisplaySelectionWindow(u8 windowType) DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13); if (windowType == SELECTWINDOW_MOVES) return sPartyMenuInternal->windowId[0]; - cursorDimension = GetMenuCursorDimensionByFont(FONT_2, 0); - fontAttribute = GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING); + cursorDimension = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); + fontAttribute = GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING); for (i = 0; i < sPartyMenuInternal->numActions; ++i) { u8 fontColorsId = (sPartyMenuInternal->actions[i] >= CURSOR_OPTION_FIELD_MOVES) ? 4 : 3; - AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], FONT_2, cursorDimension, (i * 16) + 2, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text); + AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], FONT_NORMAL, cursorDimension, (i * 16) + 2, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text); } - Menu_InitCursorInternal(sPartyMenuInternal->windowId[0], FONT_2, 0, 2, 16, sPartyMenuInternal->numActions, 0, 1); + Menu_InitCursorInternal(sPartyMenuInternal->windowId[0], FONT_NORMAL, 0, 2, 16, sPartyMenuInternal->numActions, 0, 1); ScheduleBgCopyTilemapToVram(2); return sPartyMenuInternal->windowId[0]; } @@ -2571,12 +2571,12 @@ static void PartyMenuPrintText(const u8 *text) { DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(6, FONT_2, text, GetTextSpeedSetting(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetTextSpeedSetting(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void PartyMenuDisplayYesNoMenu(void) { - CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, FONT_2, 0, 2, 0x4F, 13, 0); + CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, FONT_NORMAL, 0, 2, 0x4F, 13, 0); } static u8 CreateLevelUpStatsWindow(void) @@ -2596,7 +2596,7 @@ static void PartyMenu_Oak_PrintText(u8 windowId, const u8 *str) { StringExpandPlaceholders(gStringVar4, str); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(windowId, FONT_4, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(windowId, FONT_MALE, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static bool8 FirstBattleEnterParty_CreateWindowAndMsg1Printer(void) @@ -2637,8 +2637,8 @@ static void ToggleFieldMoveDescriptionWindow(u8 action) if (ptr->windowId[2] == WINDOW_NONE) ptr->windowId[2] = AddWindow(&sFieldMoveDescriptionWindowTemplate); DrawHelpMessageWindowTilesById(ptr->windowId[2]); - letterSpacing = GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING); - AddTextPrinterParameterized4(ptr->windowId[2], FONT_2, 3, 6, letterSpacing, 0, sFontColorTable[5], 0, sFieldMoveDescriptionTable[action - CURSOR_OPTION_FIELD_MOVES]); + letterSpacing = GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING); + AddTextPrinterParameterized4(ptr->windowId[2], FONT_NORMAL, 3, 6, letterSpacing, 0, sFontColorTable[5], 0, sFieldMoveDescriptionTable[action - CURSOR_OPTION_FIELD_MOVES]); PutWindowTilemap(ptr->windowId[2]); ScheduleBgCopyTilemapToVram(2); } @@ -4555,7 +4555,7 @@ static void ShowMoveSelectWindow(u8 slot) { u8 i; u8 moveCount = 0; - u8 fontId = FONT_2; + u8 fontId = FONT_NORMAL; u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES); u16 move; diff --git a/src/player_pc.c b/src/player_pc.c index 9428fb026..d48282032 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -157,7 +157,7 @@ void BedroomPC(void) sItemOrder = sItemOrder_BedroomPC; sTopMenuItemCount = 3; taskId = CreateTask(TaskDummy, 0); - DisplayItemMessageOnField(taskId, FONT_2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); } void PlayerPC(void) @@ -169,7 +169,7 @@ void PlayerPC(void) sItemOrder = sItemOrder_PlayerPC; sTopMenuItemCount = 3; taskId = CreateTask(TaskDummy, 0); - DisplayItemMessageOnField(taskId, FONT_2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); } static void Task_DrawPlayerPcTopMenu(u8 taskId) @@ -180,8 +180,8 @@ static void Task_DrawPlayerPcTopMenu(u8 taskId) else tWindowId = AddWindow(&sWindowTemplate_TopMenu_4Items); SetStdWindowBorderStyle(tWindowId, 0); - AddItemMenuActionTextPrinters(tWindowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING), 16, sTopMenuItemCount, sMenuActions_TopMenu, sItemOrder); - Menu_InitCursor(tWindowId, FONT_2, 0, 2, 16, sTopMenuItemCount, 0); + AddItemMenuActionTextPrinters(tWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING), 16, sTopMenuItemCount, sMenuActions_TopMenu, sItemOrder); + Menu_InitCursor(tWindowId, FONT_NORMAL, 0, 2, 16, sTopMenuItemCount, 0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = Task_TopMenuHandleInput; } @@ -215,7 +215,7 @@ static void Task_TopMenuHandleInput(u8 taskId) static void Task_ReturnToTopMenu(u8 taskId) { RestoreHelpContext(); - DisplayItemMessageOnField(taskId, FONT_2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); } static void Task_PlayerPcItemStorage(u8 taskId) @@ -229,7 +229,7 @@ static void Task_PlayerPcMailbox(u8 taskId) gPlayerPcMenuManager.count = CountPCMail(); if (gPlayerPcMenuManager.count == 0) { - DisplayItemMessageOnField(taskId, FONT_2, gText_TheresNoMailHere, Task_ReturnToTopMenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_TheresNoMailHere, Task_ReturnToTopMenu); } else { @@ -249,7 +249,7 @@ static void Task_PlayerPcMailbox(u8 taskId) } else { - DisplayItemMessageOnField(taskId, FONT_2, gText_TheresNoMailHere, Task_ReturnToTopMenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_TheresNoMailHere, Task_ReturnToTopMenu); } } } @@ -272,8 +272,8 @@ static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos) SetHelpContext(HELPCONTEXT_PLAYERS_PC_ITEMS); tWindowId = AddWindow(&sWindowTemplate_ItemStorageSubmenu); SetStdWindowBorderStyle(tWindowId, FALSE); - PrintTextArray(tWindowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, 3, sMenuActions_ItemPc); - Menu_InitCursor(tWindowId, FONT_2, 0, 2, 16, 3, cursorPos); + PrintTextArray(tWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 3, sMenuActions_ItemPc); + Menu_InitCursor(tWindowId, FONT_NORMAL, 0, 2, 16, 3, cursorPos); ScheduleBgCopyTilemapToVram(0); PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[cursorPos]); } @@ -281,7 +281,7 @@ static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos) static void PrintStringOnWindow0WithDialogueFrame(const u8 *str) { DrawDialogueFrame(0, FALSE); - AddTextPrinterParameterized(0, FONT_2, str, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, str, 0, 1, 0, NULL); } static void Task_TopMenu_ItemStorageSubmenu_HandleInput(u8 taskId) @@ -364,7 +364,7 @@ static void Task_PlayerPcWithdrawItem(u8 taskId) ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); ClearWindowTilemap(tWindowId); RemoveWindow(tWindowId); - DisplayItemMessageOnField(taskId, FONT_2, gText_ThereAreNoItems, Task_PlayerPcItemStorage); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ThereAreNoItems, Task_PlayerPcItemStorage); } } @@ -453,9 +453,9 @@ static void PCMailCompaction(void) static void Task_DrawMailboxPcMenu(u8 taskId) { u8 windowId = MailboxPC_GetAddWindow(0); - s32 width = GetStringWidth(FONT_2, gText_Mailbox, 0); + s32 width = GetStringWidth(FONT_NORMAL, gText_Mailbox, 0); MailboxPC_GetAddWindow(1); - AddTextPrinterParameterized(windowId, FONT_2, gText_Mailbox, (80 - width) / 2, 2, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Mailbox, (80 - width) / 2, 2, 0, NULL); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].tListMenuTaskId = MailboxPC_InitListMenu(&gPlayerPcMenuManager); MailboxPC_AddScrollIndicatorArrows(&gPlayerPcMenuManager); @@ -512,7 +512,7 @@ static void Task_PrintWhatToDoWithSelectedMail(u8 taskId) ConvertInternationalString(gStringVar1, LANGUAGE_JAPANESE); } StringExpandPlaceholders(gStringVar4, gText_WhatWouldYouLikeToDoWithPlayersMail); - DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_DrawMailSubmenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_DrawMailSubmenu); } static void Task_DestroyMailboxPcViewAndCancel(u8 taskId) @@ -529,8 +529,8 @@ static void Task_DestroyMailboxPcViewAndCancel(u8 taskId) static void Task_DrawMailSubmenu(u8 taskId) { u8 windowId = MailboxPC_GetAddWindow(2); - PrintTextArray(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, 4, sMenuActions_MailSubmenu); - Menu_InitCursor(windowId, FONT_2, 0, 2, 16, 4, 0); + PrintTextArray(windowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 4, sMenuActions_MailSubmenu); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, 4, 0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = Task_MailSubmenuHandleInput; } @@ -600,7 +600,7 @@ static void CB2_SetCbToReturnToMailbox(void) static void Task_PlayerPcMoveMailToBag(u8 taskId) { - DisplayItemMessageOnField(taskId, FONT_2, gText_MessageWillBeLost, Task_DrawYesNoMenuToConfirmMoveToBag); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_MessageWillBeLost, Task_DrawYesNoMenuToConfirmMoveToBag); } static void Task_DrawYesNoMenuToConfirmMoveToBag(u8 taskId) @@ -632,11 +632,11 @@ static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId) struct Mail * mail = &SELECTED_MAIL; if (!AddBagItem(mail->itemId, 1)) { - DisplayItemMessageOnField(taskId, FONT_2, gText_BagIsFull, Task_PlayerPcExitMailSubmenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_BagIsFull, Task_PlayerPcExitMailSubmenu); } else { - DisplayItemMessageOnField(taskId, FONT_2, gText_MailReturnedToBagMessageErased, Task_PlayerPcExitMailSubmenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_MailReturnedToBagMessageErased, Task_PlayerPcExitMailSubmenu); ClearMailStruct(mail); PCMailCompaction(); gPlayerPcMenuManager.count--; @@ -715,7 +715,7 @@ void Mailbox_ReturnToMailListAfterDeposit(void) static void Task_Error_NoPokemon(u8 taskId) { - DisplayItemMessageOnField(taskId, FONT_2, gText_ThereIsNoPokemon, Task_PlayerPcExitMailSubmenu); + DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_PlayerPcExitMailSubmenu); } static void Task_RedrawPlayerPcMailboxAndSetUpInputHandler(u8 taskId) diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 25b8a9534..0a6e70da8 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -353,7 +353,7 @@ static const struct ListMenuTemplate sListMenuTemplate_KantoDexModeSelect = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0, }; @@ -397,7 +397,7 @@ static const struct ListMenuTemplate sListMenuTemplate_NatDexModeSelect = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0, }; @@ -520,7 +520,7 @@ static const struct ListMenuTemplate sListMenuTemplate_OrderedListMenu = { .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = 1, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0, }; @@ -1133,15 +1133,15 @@ static void DexScreen_InitGfxForTopMenu(void) listMenuTemplate.windowId = sPokedexScreenData->modeSelectWindowId; sPokedexScreenData->modeSelectListMenuId = ListMenuInit(&listMenuTemplate, sPokedexScreenData->modeSelectCursorPos, sPokedexScreenData->modeSelectItemsAbove); FillWindowPixelBuffer(sPokedexScreenData->dexCountsWindowId, PIXEL_FILL(0)); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Seen, 0, 2, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Kanto, 8, 13, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Seen, 0, 2, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Kanto, 8, 13, 0); DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numSeenKanto, 52, 13, 2); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_National, 8, 24, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_National, 8, 24, 0); DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numSeenNational, 52, 24, 2); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Owned, 0, 37, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Kanto, 8, 48, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Owned, 0, 37, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Kanto, 8, 48, 0); DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numOwnedKanto, 52, 48, 2); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_National, 8, 59, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_National, 8, 59, 0); DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numOwnedNational, 52, 59, 2); } else @@ -1150,9 +1150,9 @@ static void DexScreen_InitGfxForTopMenu(void) listMenuTemplate.windowId = sPokedexScreenData->modeSelectWindowId; sPokedexScreenData->modeSelectListMenuId = ListMenuInit(&listMenuTemplate, sPokedexScreenData->modeSelectCursorPos, sPokedexScreenData->modeSelectItemsAbove); FillWindowPixelBuffer(sPokedexScreenData->dexCountsWindowId, PIXEL_FILL(0)); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_1, gText_Seen, 0, 9, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_NORMAL_COPY_1, gText_Seen, 0, 9, 0); DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 1, sPokedexScreenData->numSeenKanto, 32, 21, 2); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_1, gText_Owned, 0, 37, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_NORMAL_COPY_1, gText_Owned, 0, 37, 0); DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 1, sPokedexScreenData->numOwnedKanto, 32, 49, 2); } FillWindowPixelBuffer(0, PIXEL_FILL(15)); @@ -1548,7 +1548,7 @@ static void ItemPrintFunc_OrderedListMenu(u8 windowId, u32 itemId, u8 y) bool8 seen = (itemId >> 16) & 1; // not used but required to match bool8 caught = (itemId >> 17) & 1; u8 type1; - DexScreen_PrintMonDexNo(sPokedexScreenData->numericalOrderWindowId, FONT_0, species, 12, y); + DexScreen_PrintMonDexNo(sPokedexScreenData->numericalOrderWindowId, FONT_SMALL, species, 12, y); if (caught) { BlitMoveInfoIcon(sPokedexScreenData->numericalOrderWindowId, 0, 0x28, y); @@ -2161,7 +2161,7 @@ static void DexScreen_AddTextPrinterParameterized(u8 windowId, u8 fontId, const textColor[2] = 2; break; } - AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, -1, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_SMALL ? 0 : 1, 0, textColor, -1, str); } static void DexScreen_PrintNum3LeadingZeroes(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx) @@ -2293,7 +2293,7 @@ static u16 DexScreen_GetDexCount(u8 caseId, bool8 whichDex) static void DexScreen_PrintControlInfo(const u8 *src) { - DexScreen_AddTextPrinterParameterized(1, FONT_0, src, 236 - GetStringWidth(FONT_0, src, 0), 2, 4); + DexScreen_AddTextPrinterParameterized(1, FONT_SMALL, src, 236 - GetStringWidth(FONT_SMALL, src, 0), 2, 4); } bool8 DexScreen_DrawMonPicInCategoryPage(u16 species, u8 slot, u8 numSlots) @@ -2327,8 +2327,8 @@ bool8 DexScreen_DrawMonPicInCategoryPage(u16 species, u8 slot, u8 numSlots) template.baseBlock = slot * 40 + 0x108; sPokedexScreenData->categoryMonInfoWindowIds[slot] = AddWindow(&template); CopyToWindowPixelBuffer(sPokedexScreenData->categoryMonInfoWindowIds[slot], sCategoryMonInfoBgTiles, 0, 0); - DexScreen_PrintMonDexNo(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_0, species, 12, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_2, gSpeciesNames[species], 2, 13, 0); + DexScreen_PrintMonDexNo(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_SMALL, species, 12, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_NORMAL, gSpeciesNames[species], 2, 13, 0); if (DexScreen_GetSetPokedexFlag(species, FLAG_GET_CAUGHT, TRUE)) BlitBitmapRectToWindow(sPokedexScreenData->categoryMonInfoWindowIds[slot], sDexScreen_CaughtIcon, 0, 0, 8, 8, 2, 3, 8, 8); PutWindowTilemap(sPokedexScreenData->categoryMonInfoWindowIds[slot]); @@ -2695,9 +2695,9 @@ void DexScreen_PrintMonCategory(u8 windowId, u16 species, u8 x, u8 y) categoryStr[index] = EOS; - DexScreen_AddTextPrinterParameterized(windowId, FONT_0, categoryStr, x, y, 0); - x += GetStringWidth(FONT_0, categoryStr, 0); - DexScreen_AddTextPrinterParameterized(windowId, FONT_0, gText_PokedexPokemon, x, y, 0); + DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, categoryStr, x, y, 0); + x += GetStringWidth(FONT_SMALL, categoryStr, 0); + DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, gText_PokedexPokemon, x, y, 0); } void DexScreen_PrintMonHeight(u8 windowId, u16 species, u8 x, u8 y) @@ -2752,9 +2752,9 @@ void DexScreen_PrintMonHeight(u8 windowId, u16 species, u8 x, u8 y) } buffer[i++] = EOS; - DexScreen_AddTextPrinterParameterized(windowId, FONT_0, labelText, x, y, 0); + DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, labelText, x, y, 0); x += 30; - DexScreen_AddTextPrinterParameterized(windowId, FONT_0, buffer, x, y, 0); + DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, buffer, x, y, 0); } void DexScreen_PrintMonWeight(u8 windowId, u16 species, u8 x, u8 y) @@ -2844,9 +2844,9 @@ void DexScreen_PrintMonWeight(u8 windowId, u16 species, u8 x, u8 y) buffer[i + j] = lbsText[j]; buffer[i + j] = EOS; - DexScreen_AddTextPrinterParameterized(windowId, FONT_0, labelText, x, y, 0); + DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, labelText, x, y, 0); x += 30; - DexScreen_AddTextPrinterParameterized(windowId, FONT_0, buffer, x, y, 0); + DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, buffer, x, y, 0); } void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y) @@ -2861,7 +2861,7 @@ void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y) { printerTemplate.currentChar = gPokedexEntries[species].description; printerTemplate.windowId = windowId; - printerTemplate.fontId = FONT_2; + printerTemplate.fontId = FONT_NORMAL; printerTemplate.letterSpacing = 1; printerTemplate.lineSpacing = 0; printerTemplate.unk = 0; @@ -2869,7 +2869,7 @@ void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y) printerTemplate.bgColor = 0; printerTemplate.shadowColor = 2; - length = GetStringWidth(FONT_2, gPokedexEntries[species].description, 0); + length = GetStringWidth(FONT_NORMAL, gPokedexEntries[species].description, 0); xCenter = x + (240 - length) / 2; if (xCenter > 0) @@ -2937,8 +2937,8 @@ static u8 DexScreen_DrawMonDexPage(bool8 justRegistered) // Species stats FillWindowPixelBuffer(sPokedexScreenData->windowIds[1], PIXEL_FILL(0)); - DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[1], FONT_0, sPokedexScreenData->dexSpecies, 0, 8); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[1], FONT_2, gSpeciesNames[sPokedexScreenData->dexSpecies], 28, 8, 0); + DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[1], FONT_SMALL, sPokedexScreenData->dexSpecies, 0, 8); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[1], FONT_NORMAL, gSpeciesNames[sPokedexScreenData->dexSpecies], 28, 8, 0); DexScreen_PrintMonCategory(sPokedexScreenData->windowIds[1], sPokedexScreenData->dexSpecies, 0, 24); DexScreen_PrintMonHeight(sPokedexScreenData->windowIds[1], sPokedexScreenData->dexSpecies, 0, 36); DexScreen_PrintMonWeight(sPokedexScreenData->windowIds[1], sPokedexScreenData->dexSpecies, 0, 48); @@ -2956,7 +2956,7 @@ static u8 DexScreen_DrawMonDexPage(bool8 justRegistered) FillWindowPixelBuffer(1, PIXEL_FILL(15)); if (justRegistered == FALSE) { - DexScreen_AddTextPrinterParameterized(1, FONT_0, gText_Cry, 8, 2, 4); + DexScreen_AddTextPrinterParameterized(1, FONT_SMALL, gText_Cry, 8, 2, 4); DexScreen_PrintControlInfo(gText_NextDataCancel); } else @@ -3059,8 +3059,8 @@ u8 DexScreen_DrawMonAreaPage(void) // Print "Size" FillWindowPixelBuffer(sPokedexScreenData->windowIds[9], PIXEL_FILL(0)); { - s32 strWidth = GetStringWidth(FONT_0, gText_Size, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[9], FONT_0, gText_Size, (sWindowTemplate_AreaMap_Size.width * 8 - strWidth) / 2, 4, 0); + s32 strWidth = GetStringWidth(FONT_SMALL, gText_Size, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[9], FONT_SMALL, gText_Size, (sWindowTemplate_AreaMap_Size.width * 8 - strWidth) / 2, 4, 0); } PutWindowTilemap(sPokedexScreenData->windowIds[9]); CopyWindowToVram(sPokedexScreenData->windowIds[9], COPYWIN_GFX); @@ -3068,8 +3068,8 @@ u8 DexScreen_DrawMonAreaPage(void) // Print "Area" FillWindowPixelBuffer(sPokedexScreenData->windowIds[10], PIXEL_FILL(0)); { - s32 strWidth = GetStringWidth(FONT_0, gText_Area, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[10], FONT_0, gText_Area, (sWindowTemplate_AreaMap_Area.width * 8 - strWidth) / 2, 4, 0); + s32 strWidth = GetStringWidth(FONT_SMALL, gText_Area, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[10], FONT_SMALL, gText_Area, (sWindowTemplate_AreaMap_Area.width * 8 - strWidth) / 2, 4, 0); } SetWindowAttribute(sPokedexScreenData->windowIds[10], WINDOW_TILEMAP_TOP, GetWindowAttribute(sPokedexScreenData->windowIds[10], WINDOW_TILEMAP_TOP) + kantoMapVoff); PutWindowTilemap(sPokedexScreenData->windowIds[10]); @@ -3077,8 +3077,8 @@ u8 DexScreen_DrawMonAreaPage(void) // Print species name FillWindowPixelBuffer(sPokedexScreenData->windowIds[8], PIXEL_FILL(0)); - DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[8], FONT_0, species, 0, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[8], FONT_2, gSpeciesNames[species], 3, 12, 0); + DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[8], FONT_SMALL, species, 0, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[8], FONT_NORMAL, gSpeciesNames[species], 3, 12, 0); PutWindowTilemap(sPokedexScreenData->windowIds[8]); CopyWindowToVram(sPokedexScreenData->windowIds[8], COPYWIN_GFX); @@ -3128,15 +3128,15 @@ u8 DexScreen_DrawMonAreaPage(void) { BlitBitmapRectToWindow(sPokedexScreenData->windowIds[0], (void *)sBlitTiles_WideEllipse, 0, 0, 88, 16, 4, 28, 88, 16); { - s32 strWidth = GetStringWidth(FONT_0, gText_AreaUnknown, 0); - DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[0], FONT_0, gText_AreaUnknown, (96 - strWidth) / 2, 29, 0); + s32 strWidth = GetStringWidth(FONT_SMALL, gText_AreaUnknown, 0); + DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[0], FONT_SMALL, gText_AreaUnknown, (96 - strWidth) / 2, 29, 0); } } CopyWindowToVram(sPokedexScreenData->windowIds[0], COPYWIN_GFX); // Draw the control info FillWindowPixelBuffer(1, PIXEL_FILL(15)); - DexScreen_AddTextPrinterParameterized(1, FONT_0, gText_Cry, 8, 2, 4); + DexScreen_AddTextPrinterParameterized(1, FONT_SMALL, gText_Cry, 8, 2, 4); DexScreen_PrintControlInfo(gText_CancelPreviousData); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_GFX); @@ -3436,13 +3436,13 @@ void DexScreen_PrintStringWithAlignment(const u8 * str, s32 mode) x = 8; break; case TEXT_CENTER: - x = (u32)(240 - GetStringWidth(FONT_2, str, 0)) / 2; + x = (u32)(240 - GetStringWidth(FONT_NORMAL, str, 0)) / 2; break; case TEXT_RIGHT: default: - x = 232 - GetStringWidth(FONT_2, str, 0); + x = 232 - GetStringWidth(FONT_NORMAL, str, 0); break; } - DexScreen_AddTextPrinterParameterized(0, FONT_2, str, x, 2, 4); + DexScreen_AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 2, 4); } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index c2e89b8be..e0ba89e1d 100644 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -3169,7 +3169,7 @@ static void Msg_WantToPlayAgain(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(1, 8, 20, 2); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_WantToPlayAgain2, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_WantToPlayAgain2, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; @@ -3196,7 +3196,7 @@ static void Msg_SavingDontTurnOff(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(2, 7, 26, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_SavingDontTurnOffPower, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; @@ -3239,7 +3239,7 @@ static void Msg_SomeoneDroppedOut(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(2, 8, 22, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_SomeoneDroppedOut2, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_SomeoneDroppedOut2, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; @@ -3265,7 +3265,7 @@ static void Msg_CommunicationStandby(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(7, 10, 16, 2); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_CommunicationStandby4, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_CommunicationStandby4, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; @@ -3358,7 +3358,7 @@ static void PrintPrizeMessage(u16 itemId, u16 quantity) DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sPokemonJumpGfx->itemQuantityStr); DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_AwesomeWonF701F700); sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 8, 22, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->fanfare = MUS_LEVEL_UP; sPokemonJumpGfx->msgWindowState = 0; @@ -3371,7 +3371,7 @@ static void PrintPrizeFilledBagMessage(u16 itemId) DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPokemonJumpGfx->itemName); DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_FilledStorageSpace2); sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 8, 22, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->fanfare = MUS_DUMMY; sPokemonJumpGfx->msgWindowState = 0; @@ -3384,7 +3384,7 @@ static void PrintNoRoomForPrizeMessage(u16 itemId) DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPokemonJumpGfx->itemName); DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_CantHoldMore); sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 9, 22, 2); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->fanfare = MUS_DUMMY; sPokemonJumpGfx->msgWindowState = 0; @@ -3493,7 +3493,7 @@ static void CreatePokeJumpYesNoMenu(u16 left, u16 top, u8 cursorPos) window.paletteNum = 2; window.baseBlock = 0x2B; - CreateYesNoMenu(&window, FONT_2, 0, 2, 0x00a, 0xD, a); + CreateYesNoMenu(&window, FONT_NORMAL, 0, 2, 0x00a, 0xD, a); } // "Points" for jump score and "times" for number of jumps in a row @@ -3505,8 +3505,8 @@ static void PrintScoreSuffixes(void) PutWindowTilemap(WIN_TIMES); FillWindowPixelBuffer(WIN_POINTS, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_TIMES, PIXEL_FILL(0)); - AddTextPrinterParameterized3(WIN_POINTS, FONT_0, 0, 2, color, 0, gText_SpacePoints2); - AddTextPrinterParameterized3(WIN_TIMES, FONT_0, 0, 2, color, 0, gText_SpaceTimes3); + AddTextPrinterParameterized3(WIN_POINTS, FONT_SMALL, 0, 2, color, 0, gText_SpacePoints2); + AddTextPrinterParameterized3(WIN_TIMES, FONT_SMALL, 0, 2, color, 0, gText_SpaceTimes3); } // The venusaurs in the background are actually an empty 256x512 bg with 3 pairs of venusaurs on it. @@ -3726,9 +3726,9 @@ static void PrintPokeJumpPlayerName(int multiplayerId, u8 bgColor, u8 fgColor, u u8 colors[3] = {bgColor, fgColor, shadow}; FillWindowPixelBuffer(sPokemonJumpGfx->nameWindowIds[multiplayerId], PIXEL_FILL(0)); - x = 64 - GetStringWidth(FONT_0, GetPokeJumpPlayerName(multiplayerId), -1); + x = 64 - GetStringWidth(FONT_SMALL, GetPokeJumpPlayerName(multiplayerId), -1); x /= 2; - AddTextPrinterParameterized3(sPokemonJumpGfx->nameWindowIds[multiplayerId], FONT_0, x, 2, colors, TEXT_SKIP_DRAW, GetPokeJumpPlayerName(multiplayerId)); + AddTextPrinterParameterized3(sPokemonJumpGfx->nameWindowIds[multiplayerId], FONT_SMALL, x, 2, colors, TEXT_SKIP_DRAW, GetPokeJumpPlayerName(multiplayerId)); CopyWindowToVram(sPokemonJumpGfx->nameWindowIds[multiplayerId], COPYWIN_GFX); } @@ -4557,14 +4557,14 @@ static void PrintRecordsText(u16 windowId) LoadStdWindowGfx(windowId, 0x21D, 0xD0); DrawTextBorderOuter(windowId, 0x21D, 0xD); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - AddTextPrinterParameterized5(windowId, FONT_2, gText_PkmnJumpRecords, 0, 0, TEXT_SKIP_DRAW, NULL, 1, 0); + AddTextPrinterParameterized5(windowId, FONT_NORMAL, gText_PkmnJumpRecords, 0, 0, TEXT_SKIP_DRAW, NULL, 1, 0); for (i = 0; i < ARRAY_COUNT(sRecordsTexts); i++) { - AddTextPrinterParameterized5(windowId, FONT_2, sRecordsTexts[i], 0, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 1, 0); + AddTextPrinterParameterized5(windowId, FONT_NORMAL, sRecordsTexts[i], 0, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 1, 0); ConvertIntToDecimalStringN(strbuf, recordNums[i], STR_CONV_MODE_LEFT_ALIGN, 5); TruncateToFirstWordOnly(strbuf); - x = 0xDE - GetStringWidth(FONT_2, strbuf, 0); - AddTextPrinterParameterized5(windowId, FONT_2, strbuf, x, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 0, 0); + x = 0xDE - GetStringWidth(FONT_NORMAL, strbuf, 0); + AddTextPrinterParameterized5(windowId, FONT_NORMAL, strbuf, x, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 0, 0); } PutWindowTilemap(windowId); } diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index 2643dd01a..39dbcf797 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -415,10 +415,10 @@ void PSA_PrintMessage(u8 messageId) DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->textBuf, gText_MonLearnedTMHM); break; case 4: - strWidth += GetStringWidth(FONT_2, gText_Counting_2And, -1); + strWidth += GetStringWidth(FONT_NORMAL, gText_Counting_2And, -1); // fallthrough case 3: - strWidth += GetStringWidth(FONT_2, gText_Counting_1, -1); + strWidth += GetStringWidth(FONT_NORMAL, gText_Counting_1, -1); // fallthrough case 2: // 1 StringCopy(scene->textBuf, s1_2_and_Poof_textPtrs[messageId - 2]); @@ -443,7 +443,7 @@ void PSA_PrintMessage(u8 messageId) return; } - AddTextPrinterParameterized5(0, FONT_2, scene->textBuf, strWidth, 0, textSpeed, NULL, 0, 4); + AddTextPrinterParameterized5(0, FONT_NORMAL, scene->textBuf, strWidth, 0, textSpeed, NULL, 0, 4); } void PSA_AfterPoof_ClearMessageWindow(void) @@ -1513,13 +1513,13 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *beforeStats, u16 *afterStats, u8 bg for (i = 0; i < 6; i++) { - AddTextPrinterParameterized3(windowId, FONT_2, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]); StringCopy(textbuf, diffStats[i] >= 0 ? gText_LevelUp_Plus : gText_LevelUp_Minus); - AddTextPrinterParameterized3(windowId, FONT_2, 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf); textbuf[0] = CHAR_SPACE; x = abs(diffStats[i]) < 10 ? 12 : 6; ConvertIntToDecimalStringN(textbuf + 1, abs(diffStats[i]), STR_CONV_MODE_LEFT_ALIGN, 2); - AddTextPrinterParameterized3(windowId, FONT_2, x + 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, x + 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf); } } @@ -1555,7 +1555,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgColor, u8 fgColor, ndigits = 1; ConvertIntToDecimalStringN(textbuf, statsRearrange[i], STR_CONV_MODE_LEFT_ALIGN, ndigits); x = 6 * (4 - ndigits); - AddTextPrinterParameterized3(windowId, FONT_2, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]); - AddTextPrinterParameterized3(windowId, FONT_2, 56 + x, i * 15, textColor, TEXT_SKIP_DRAW, textbuf); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 56 + x, i * 15, textColor, TEXT_SKIP_DRAW, textbuf); } } diff --git a/src/pokemon_storage_system_data.c b/src/pokemon_storage_system_data.c index dfe34330a..dd1502977 100644 --- a/src/pokemon_storage_system_data.c +++ b/src/pokemon_storage_system_data.c @@ -2108,8 +2108,8 @@ void AddMenu(void) gStorage->menuWindowId = AddWindow(&gStorage->menuWindow); ClearWindowTilemap(gStorage->menuWindowId); DrawStdFrameWithCustomTileAndPalette(gStorage->menuWindowId, FALSE, 11, 14); - PrintTextArray(gStorage->menuWindowId, FONT_1, 8, 2, 16, gStorage->menuItemsCount, (void *)gStorage->menuItems); - Menu_InitCursor(gStorage->menuWindowId, FONT_1, 0, 2, 16, gStorage->menuItemsCount, 0); + PrintTextArray(gStorage->menuWindowId, FONT_NORMAL_COPY_1, 8, 2, 16, gStorage->menuItemsCount, (void *)gStorage->menuItems); + Menu_InitCursor(gStorage->menuWindowId, FONT_NORMAL_COPY_1, 0, 2, 16, gStorage->menuItemsCount, 0); ScheduleBgCopyTilemapToVram(0); gStorage->menuUnusedField = 0; } diff --git a/src/pokemon_storage_system_graphics.c b/src/pokemon_storage_system_graphics.c index c6b45194a..c2423240e 100644 --- a/src/pokemon_storage_system_graphics.c +++ b/src/pokemon_storage_system_graphics.c @@ -1442,7 +1442,7 @@ static void CycleBoxTitleColor(void) static s16 GetBoxTitleBaseX(const u8 *string) { - return DISPLAY_WIDTH - 64 - GetStringWidth(FONT_1, string, 0) / 2; + return DISPLAY_WIDTH - 64 - GetStringWidth(FONT_NORMAL_COPY_1, string, 0) / 2; } // Sprite data for box scroll arrows diff --git a/src/pokemon_storage_system_menu.c b/src/pokemon_storage_system_menu.c index 298659efc..93678028e 100644 --- a/src/pokemon_storage_system_menu.c +++ b/src/pokemon_storage_system_menu.c @@ -63,7 +63,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero txtColor[0] = zero2; txtColor[1] = TEXT_DYNAMIC_COLOR_6; txtColor[2] = TEXT_DYNAMIC_COLOR_5; - AddTextPrinterParameterized4(windowId, FONT_1, 0, 2, 0, 0, txtColor, -1, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_1, 0, 2, 0, 0, txtColor, -1, string); tileBytesToBuffer = bytesToBuffer; if (tileBytesToBuffer > 6) @@ -106,7 +106,7 @@ static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 offset, txtColor[0] = bgColor; txtColor[1] = fgColor; txtColor[2] = shadowColor; - AddTextPrinterParameterized4(windowId, FONT_1, 0, 2, 0, 0, txtColor, -1, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_1, 0, 2, 0, 0, txtColor, -1, string); CpuCopy16(tileData1, dst, var); CpuCopy16(tileData2, dst + offset, var); RemoveWindow(windowId); @@ -250,7 +250,7 @@ static void Task_PCMainMenu(u8 taskId) LoadStdWindowFrameGfx(); DrawDialogueFrame(0, FALSE); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(0, COPYWIN_FULL); CopyWindowToVram(task->tWindowId, COPYWIN_FULL); task->tState++; @@ -275,7 +275,7 @@ static void Task_PCMainMenu(u8 taskId) { task->tSelectedOption = task->tNextOption; FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } break; case MENU_B_PRESSED: @@ -291,14 +291,14 @@ static void Task_PCMainMenu(u8 taskId) { // Can't withdraw FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_ERROR_MSG; } else if (task->tInput == OPTION_DEPOSIT && CountPartyMons() == 1) { // Can't deposit FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_ERROR_MSG; } else @@ -316,7 +316,7 @@ static void Task_PCMainMenu(u8 taskId) if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_HANDLE_INPUT; } else if (JOY_NEW(DPAD_UP)) @@ -326,7 +326,7 @@ static void Task_PCMainMenu(u8 taskId) Menu_MoveCursor(-1); task->tSelectedOption = Menu_GetCursorPos(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_HANDLE_INPUT; } else if (JOY_NEW(DPAD_DOWN)) @@ -336,7 +336,7 @@ static void Task_PCMainMenu(u8 taskId) Menu_MoveCursor(1); task->tSelectedOption = Menu_GetCursorPos(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_HANDLE_INPUT; } break; @@ -388,8 +388,8 @@ static void CreatePCMainMenu(u8 whichMenu, s16 *windowIdPtr) s16 windowId = AddWindow(&sWindowTemplate_MainMenu); DrawStdWindowFrame(windowId, FALSE); - PrintTextArray(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, ARRAY_COUNT(sMainMenuTexts), (void *)sMainMenuTexts); - Menu_InitCursor(windowId, FONT_2, 0, 2, 16, ARRAY_COUNT(sMainMenuTexts), whichMenu); + PrintTextArray(windowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, ARRAY_COUNT(sMainMenuTexts), (void *)sMainMenuTexts); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, ARRAY_COUNT(sMainMenuTexts), whichMenu); *windowIdPtr = windowId; } diff --git a/src/pokemon_storage_system_misc.c b/src/pokemon_storage_system_misc.c index 4bc94532f..90bb93e43 100644 --- a/src/pokemon_storage_system_misc.c +++ b/src/pokemon_storage_system_misc.c @@ -1147,7 +1147,7 @@ void PrintItemDescription(void) description = ItemId_GetDescription(gStorage->displayMonItemId); FillWindowPixelBuffer(2, PIXEL_FILL(1)); - AddTextPrinterParameterized5(2, FONT_2, description, 2, 0, 0, NULL, 0, 0); + AddTextPrinterParameterized5(2, FONT_NORMAL, description, 2, 0, 0, NULL, 0, 0); } void InitItemInfoWindow(void) diff --git a/src/pokemon_storage_system_tasks.c b/src/pokemon_storage_system_tasks.c index 3911cf2c1..173bb14b1 100644 --- a/src/pokemon_storage_system_tasks.c +++ b/src/pokemon_storage_system_tasks.c @@ -2292,15 +2292,15 @@ static void PrintDisplayMonInfo(void) if (gStorage->boxOption != OPTION_MOVE_ITEMS) { for (i = 0, y = 0; i < 3; i++, y += 14) - AddTextPrinterParameterized(0, FONT_2, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(0, FONT_0, gStorage->displayMonTexts[3], 6, y + 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(0, FONT_SMALL, gStorage->displayMonTexts[3], 6, y + 2, TEXT_SKIP_DRAW, NULL); } else { - AddTextPrinterParameterized(0, FONT_0, gStorage->displayMonTexts[3], 6, 0, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(0, FONT_SMALL, gStorage->displayMonTexts[3], 6, 0, TEXT_SKIP_DRAW, NULL); for (i = 0, y = 15; i < 3; i++, y += 14) - AddTextPrinterParameterized(0, FONT_2, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL); } CopyWindowToVram(0, COPYWIN_GFX); @@ -2585,7 +2585,7 @@ static void PrintStorageMessage(u8 id) DynamicPlaceholderTextUtil_ExpandPlaceholders(gStorage->actionText, sMessages[id].text); FillWindowPixelBuffer(1, PIXEL_FILL(1)); - AddTextPrinterParameterized(1, FONT_1, gStorage->actionText, 0, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL_COPY_1, gStorage->actionText, 0, 2, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(1, 2, 13); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_GFX); @@ -2594,7 +2594,7 @@ static void PrintStorageMessage(u8 id) static void ShowYesNoWindow(s8 cursorPos) { - CreateYesNoMenu(&sYesNoWindowTemplate, FONT_1, 0, 2, 11, 14, 1); + CreateYesNoMenu(&sYesNoWindowTemplate, FONT_NORMAL_COPY_1, 0, 2, 11, 14, 1); Menu_MoveCursorNoWrapAround(cursorPos); } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e4dba1e53..9f80a54e8 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2405,7 +2405,7 @@ static void PokeSum_FinishSetup(void) static void PokeSum_PrintPageName(const u8 * str) { FillWindowPixelBuffer(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME], 0); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME], FONT_2, 4, 1, sLevelNickTextColors[1], 0, str); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME], FONT_NORMAL, 4, 1, sLevelNickTextColors[1], 0, str); PutWindowTilemap(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME]); } @@ -2416,9 +2416,9 @@ static void PokeSum_PrintControlsString(const u8 * str) u8 r1; FillWindowPixelBuffer(sMonSummaryScreen->windowIds[POKESUM_WIN_CONTROLS], 0); - width = GetStringWidth(FONT_0, str, 0); + width = GetStringWidth(FONT_SMALL, str, 0); r1 = sMonSummaryScreen->windowIds[POKESUM_WIN_CONTROLS]; - AddTextPrinterParameterized3(r1, FONT_0, 0x54 - width, 0, sLevelNickTextColors[1], 0, str); + AddTextPrinterParameterized3(r1, FONT_SMALL, 0x54 - width, 0, sLevelNickTextColors[1], 0, str); PutWindowTilemap(sMonSummaryScreen->windowIds[POKESUM_WIN_CONTROLS]); } @@ -2431,12 +2431,12 @@ static void PrintMonLevelNickOnWindow2(const u8 * str) if (sMonSummaryScreen->curPageIndex != PSS_PAGE_MOVES_INFO) AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], 2, 4, 2, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.levelStrBuf); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_2, 40, 2, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.nicknameStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_NORMAL, 40, 2, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.nicknameStrBuf); if (GetMonGender(&sMonSummaryScreen->currentMon) == MON_FEMALE) - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_2, 105, 2, sLevelNickTextColors[3], 0, sMonSummaryScreen->summary.genderSymbolStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_NORMAL, 105, 2, sLevelNickTextColors[3], 0, sMonSummaryScreen->summary.genderSymbolStrBuf); else - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_2, 105, 2, sLevelNickTextColors[2], 0, sMonSummaryScreen->summary.genderSymbolStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_NORMAL, 105, 2, sLevelNickTextColors[2], 0, sMonSummaryScreen->summary.genderSymbolStrBuf); } PutWindowTilemap(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK]); @@ -2465,14 +2465,14 @@ static void PokeSum_PrintRightPaneText(void) static void PrintInfoPage(void) { - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 19, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.speciesNameStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 19, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.speciesNameStrBuf); if (!sMonSummaryScreen->isEgg) { - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47 + sMonSkillsPrinterXpos->unk00, 5, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.dexNumStrBuf); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 49, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.otNameStrBuf); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 64, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.unk306C); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 79, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.itemNameStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47 + sMonSkillsPrinterXpos->unk00, 5, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.dexNumStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 49, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.otNameStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 64, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.unk306C); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 79, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.itemNameStrBuf); } else { @@ -2493,20 +2493,20 @@ static void PrintInfoPage(void) if (sMonSummaryScreen->isBadEgg) hatchMsgIndex = 0; - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 7, 45, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggHatchTimeTexts[hatchMsgIndex]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 7, 45, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggHatchTimeTexts[hatchMsgIndex]); } } static void PrintSkillsPage(void) { - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 14 + sMonSkillsPrinterXpos->curHpStr, 4, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.curHpStrBuf); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->atkStr, 22, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->defStr, 35, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->spAStr, 48, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->spDStr, 61, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->speStr, 74, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 15 + sMonSkillsPrinterXpos->expStr, 87, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expPointsStrBuf); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 15 + sMonSkillsPrinterXpos->toNextLevel, 100, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expToNextLevelStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 14 + sMonSkillsPrinterXpos->curHpStr, 4, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.curHpStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->atkStr, 22, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->defStr, 35, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spAStr, 48, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spDStr, 61, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->speStr, 74, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 15 + sMonSkillsPrinterXpos->expStr, 87, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expPointsStrBuf); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 15 + sMonSkillsPrinterXpos->toNextLevel, 100, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expToNextLevelStrBuf); } #define GetMoveNamePrinterYpos(x) ((x) * 28 + 5) @@ -2524,7 +2524,7 @@ static void PrintMovesPage(void) if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE) PokeSum_PrintMoveName(4); else - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 3, GetMoveNamePrinterYpos(4), sPrintMoveTextColors[0], TEXT_SKIP_DRAW, gFameCheckerText_Cancel); } @@ -2541,7 +2541,7 @@ static void PokeSum_PrintMoveName(u8 i) if (i == 4) curPP = maxPP; - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 3, GetMoveNamePrinterYpos(i), sPrintMoveTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveNameStrBufs[i]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 3, GetMoveNamePrinterYpos(i), sPrintMoveTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveNameStrBufs[i]); if (sMonSummaryScreen->moveIds[i] == 0 || (curPP == maxPP)) colorIdx = 0; @@ -2567,14 +2567,14 @@ static void PokeSum_PrintMoveName(u8 i) colorIdx = 1; } - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 36, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 36, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_PokeSum_PP); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 46 + sMonSkillsPrinterXpos->curPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveCurPpStrBufs[i]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 46 + sMonSkillsPrinterXpos->curPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveCurPpStrBufs[i]); if (sMonSummaryScreen->moveIds[i] != MOVE_NONE) { - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 58, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_Slash); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 64 + sMonSkillsPrinterXpos->maxPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveMaxPpStrBufs[i]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 58, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_Slash); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 64 + sMonSkillsPrinterXpos->maxPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveMaxPpStrBufs[i]); } } @@ -2679,7 +2679,7 @@ static void PokeSum_PrintTrainerMemo_Mon_HeldByOT(void) } } - AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr); + AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr); } static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void) @@ -2728,7 +2728,7 @@ static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void) DynamicPlaceholderTextUtil_ExpandPlaceholders(natureMetOrHatchedAtLevelStr, gText_PokeSum_MetInATrade); } - AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr); + AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr); return; } @@ -2776,7 +2776,7 @@ static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void) } } - AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr); + AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr); } static void PokeSum_PrintTrainerMemo_Mon(void) @@ -2837,17 +2837,17 @@ static void PokeSum_PrintTrainerMemo_Egg(void) if (sMonSummaryScreen->isBadEgg) chosenStrIndex = 0; - AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggOriginTexts[chosenStrIndex]); + AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggOriginTexts[chosenStrIndex]); } static void PokeSum_PrintExpPoints_NextLv(void) { - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 26, 7, sLevelNickTextColors[0], TEXT_SKIP_DRAW, gText_PokeSum_ExpPoints); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 26, 20, sLevelNickTextColors[0], TEXT_SKIP_DRAW, gText_PokeSum_NextLv); @@ -2860,17 +2860,17 @@ static void PokeSum_PrintSelectedMoveStats(void) if (sMonSummaryScreen->mode != PSS_MODE_SELECT_MOVE && sMoveSelectionCursorPos == 4) return; - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 57, 1, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.movePowerStrBufs[sMoveSelectionCursorPos]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 57, 15, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveAccuracyStrBufs[sMoveSelectionCursorPos]); - AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, + AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 7, 42, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, @@ -2900,10 +2900,10 @@ static void PokeSum_PrintAbilityNameAndDesc(void) { FillWindowPixelBuffer(sMonSummaryScreen->windowIds[5], 0); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_NORMAL, 66, 1, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.abilityNameStrBuf); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_2, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_NORMAL, 2, 15, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.abilityDescStrBuf); @@ -3893,7 +3893,7 @@ static void Task_InputHandler_SelectOrForgetMove(u8 taskId) break; case 5: FillWindowPixelBuffer(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], 0); - AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, + AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 7, 42, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, diff --git a/src/quest_log.c b/src/quest_log.c index 4149e267b..8995212e5 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -496,7 +496,7 @@ void DrawPreviouslyOnQuestHeader(u8 sceneNum) StringAppend(gStringVar4, gStringVar1); } - AddTextPrinterParameterized4(sQuestLogHeaderWindowIds[0], FONT_2, 2, 2, 1, 2, sTextColors, 0, gStringVar4); + AddTextPrinterParameterized4(sQuestLogHeaderWindowIds[0], FONT_NORMAL, 2, 2, 1, 2, sTextColors, 0, gStringVar4); PutWindowTilemap(sQuestLogHeaderWindowIds[0]); PutWindowTilemap(sQuestLogHeaderWindowIds[1]); CopyWindowToVram(sQuestLogHeaderWindowIds[0], COPYWIN_GFX); @@ -991,7 +991,7 @@ static void DrawQuestLogSceneDescription(void) PutWindowTilemap(sQuestLogHeaderWindowIds[2]); sub_8111D90(sQuestLogHeaderWindowIds[2]); - AddTextPrinterParameterized4(sQuestLogHeaderWindowIds[2], FONT_2, 2, sQuestLogTextLineYCoords[numLines], 1, 0, sTextColors, 0, gStringVar4); + AddTextPrinterParameterized4(sQuestLogHeaderWindowIds[2], FONT_NORMAL, 2, sQuestLogTextLineYCoords[numLines], 1, 0, sTextColors, 0, gStringVar4); ScheduleBgCopyTilemapToVram(0); } diff --git a/src/region_map.c b/src/region_map.c index 23f354c71..c451453b6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1446,7 +1446,7 @@ static void DisplayCurrentMapName(void) else { GetMapName(sRegionMap->mapName, GetMapsecUnderCursor(), 0); - AddTextPrinterParameterized3(WIN_MAP_NAME, FONT_2, 2, 2, sTextColor_White, 0, sRegionMap->mapName); + AddTextPrinterParameterized3(WIN_MAP_NAME, FONT_NORMAL, 2, 2, sTextColor_White, 0, sRegionMap->mapName); PutWindowTilemap(WIN_MAP_NAME); CopyWindowToVram(WIN_MAP_NAME, COPYWIN_GFX); SetGpuWindowDims(0, &sMapsecNameWindowDims[WIN_MAP_NAME]); @@ -1478,7 +1478,7 @@ static void DisplayCurrentDungeonName(void) sRegionMap->dungeonWinBottom = 48; FillWindowPixelBuffer(WIN_DUNGEON_NAME, PIXEL_FILL(0)); StringCopy(sRegionMap->dungeonName, sMapNames[descOffset]); - AddTextPrinterParameterized3(WIN_DUNGEON_NAME, FONT_2, 12, 2, sTextColorTable[GetSelectedMapsecType(LAYER_DUNGEON) - 2], 0, sRegionMap->dungeonName); + AddTextPrinterParameterized3(WIN_DUNGEON_NAME, FONT_NORMAL, 12, 2, sTextColorTable[GetSelectedMapsecType(LAYER_DUNGEON) - 2], 0, sRegionMap->dungeonName); PutWindowTilemap(WIN_DUNGEON_NAME); CopyWindowToVram(WIN_DUNGEON_NAME, COPYWIN_FULL); } @@ -2060,8 +2060,8 @@ static void Task_DrawDungeonMapPreviewFlavorText(u8 taskId) // Draw text if (sDungeonMapPreview->timer > 25) { - AddTextPrinterParameterized3(WIN_MAP_PREVIEW, FONT_2, 4, 0, sTextColor_Green, -1, GetDungeonName(GetDungeonMapsecUnderCursor())); - AddTextPrinterParameterized3(WIN_MAP_PREVIEW, FONT_2, 2, 14, sTextColor_White, -1, GetDungeonFlavorText(GetDungeonMapsecUnderCursor())); + AddTextPrinterParameterized3(WIN_MAP_PREVIEW, FONT_NORMAL, 4, 0, sTextColor_Green, -1, GetDungeonName(GetDungeonMapsecUnderCursor())); + AddTextPrinterParameterized3(WIN_MAP_PREVIEW, FONT_NORMAL, 2, 14, sTextColor_White, -1, GetDungeonFlavorText(GetDungeonMapsecUnderCursor())); CopyWindowToVram(WIN_MAP_PREVIEW, COPYWIN_FULL); sDungeonMapPreview->drawState++; } @@ -3842,7 +3842,7 @@ static void PrintTopBarTextLeft(const u8 *str) FillWindowPixelBuffer(WIN_TOPBAR_LEFT, PIXEL_FILL(0)); else FillWindowPixelBuffer(WIN_TOPBAR_LEFT, PIXEL_FILL(15)); - AddTextPrinterParameterized3(WIN_TOPBAR_LEFT, FONT_0, 0, 0, sTextColors, 0, str); + AddTextPrinterParameterized3(WIN_TOPBAR_LEFT, FONT_SMALL, 0, 0, sTextColors, 0, str); CopyWindowToVram(WIN_TOPBAR_LEFT, COPYWIN_GFX); } @@ -3852,7 +3852,7 @@ static void PrintTopBarTextRight(const u8 *str) FillWindowPixelBuffer(WIN_TOPBAR_RIGHT, PIXEL_FILL(0)); else FillWindowPixelBuffer(WIN_TOPBAR_RIGHT, PIXEL_FILL(15)); - AddTextPrinterParameterized3(WIN_TOPBAR_RIGHT, FONT_0, 0, 0, sTextColors, 0, str); + AddTextPrinterParameterized3(WIN_TOPBAR_RIGHT, FONT_SMALL, 0, 0, sTextColors, 0, str); CopyWindowToVram(WIN_TOPBAR_RIGHT, COPYWIN_FULL); } diff --git a/src/script_menu.c b/src/script_menu.c index 921a12682..49f5402b5 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -664,7 +664,7 @@ static const u8 *const sSeagallopDestStrings[] = { static u16 GetStringTilesWide(const u8 *str) { - return (GetStringWidth(FONT_1, str, 0) + 7) / 8; + return (GetStringWidth(FONT_NORMAL_COPY_1, str, 0) + 7) / 8; } static u8 GetMenuWidthFromList(const struct MenuAction * items, u8 count) @@ -719,7 +719,7 @@ static void DrawVerticalMultichoiceMenu(u8 left, u8 top, u8 mcId, u8 ignoreBpres strWidth = 0; for (i = 0; i < count; i++) { - tmp = GetStringWidth(FONT_2, list[i].text, 0); + tmp = GetStringWidth(FONT_NORMAL, list[i].text, 0); if (tmp > strWidth) strWidth = tmp; } @@ -730,10 +730,10 @@ static void DrawVerticalMultichoiceMenu(u8 left, u8 top, u8 mcId, u8 ignoreBpres windowId = CreateWindowFromRect(left, top, width, height); SetStdWindowBorderStyle(windowId, FALSE); if (mcId == 30 || mcId == 13 || mcId == 41) - MultichoiceList_PrintItems(windowId, FONT_2, 8, 2, 14, count, list, 0, 2); + MultichoiceList_PrintItems(windowId, FONT_NORMAL, 8, 2, 14, count, list, 0, 2); else - MultichoiceList_PrintItems(windowId, FONT_2, 8, 2, 14, count, list, 0, 2); - Menu_InitCursor(windowId, FONT_2, 0, 2, 14, count, initPos); + MultichoiceList_PrintItems(windowId, FONT_NORMAL, 8, 2, 14, count, list, 0, 2); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 14, count, initPos); CreateMCMenuInputHandlerTask(ignoreBpress, count, windowId, mcId); ScheduleBgCopyTilemapToVram(0); } @@ -827,15 +827,15 @@ static void MultiChoicePrintHelpDescription(u8 mcId) { case 39: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sDescriptionPtrs_CableClub_TradeBattleCancel[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sDescriptionPtrs_CableClub_TradeBattleCancel[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case 47: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sDescriptionPtrs_WirelessCenter_TradeBattleCrushCancel[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sDescriptionPtrs_WirelessCenter_TradeBattleCrushCancel[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case 50: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, sDescriptionPtrs_WirelessCenter_TradeBattleCancel[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, sDescriptionPtrs_WirelessCenter_TradeBattleCancel[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; } } @@ -910,8 +910,8 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 co gTasks[taskId].data[4] = a4; gTasks[taskId].data[6] = CreateWindowFromRect(left, top, width * columnCount, rowCount * 2); SetStdWindowBorderStyle(gTasks[taskId].data[6], FALSE); - MultichoiceGrid_PrintItems(gTasks[taskId].data[6], FONT_1, width * 8, 16, columnCount, rowCount, list); - MultichoiceGrid_InitCursor(gTasks[taskId].data[6], FONT_1, 0, 1, width * 8, columnCount, rowCount, 0); + MultichoiceGrid_PrintItems(gTasks[taskId].data[6], FONT_NORMAL_COPY_1, width * 8, 16, columnCount, rowCount, list); + MultichoiceGrid_InitCursor(gTasks[taskId].data[6], FONT_NORMAL_COPY_1, 0, 1, width * 8, columnCount, rowCount, 0); ScheduleBgCopyTilemapToVram(0); } return TRUE; @@ -951,8 +951,8 @@ bool8 CreatePCMenu(void) static void CreatePCMenuWindow(void) { - u8 cursorWidth = GetMenuCursorDimensionByFont(FONT_2, 0); - u8 height = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT); + u8 cursorWidth = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); + u8 height = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); u8 windowWidth; u8 nitems; u8 windowId; @@ -974,9 +974,9 @@ static void CreatePCMenuWindow(void) nitems = 5; windowId = CreateWindowFromRect(0, 0, windowWidth, 10); SetStdWindowBorderStyle(windowId, FALSE); - AddTextPrinterParameterized(windowId, FONT_2, gText_ProfOakSPc, cursorWidth, 34, 0xFF, NULL); - AddTextPrinterParameterized(windowId, FONT_2, gText_HallOfFame_2, cursorWidth, 50, 0xFF, NULL); - AddTextPrinterParameterized(windowId, FONT_2, gText_LogOff, cursorWidth, 66, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_ProfOakSPc, cursorWidth, 34, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_HallOfFame_2, cursorWidth, 50, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LogOff, cursorWidth, 66, 0xFF, NULL); } else { @@ -987,16 +987,16 @@ static void CreatePCMenuWindow(void) windowId = CreateWindowFromRect(0, 0, windowWidth, nitems * 2); SetStdWindowBorderStyle(windowId, FALSE); if (FlagGet(FLAG_SYS_POKEDEX_GET)) - AddTextPrinterParameterized(windowId, FONT_2, gText_ProfOakSPc, cursorWidth, 34, 0xFF, NULL); - AddTextPrinterParameterized(windowId, FONT_2, gText_LogOff, cursorWidth, 2 + 16 * (nitems - 1), 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_ProfOakSPc, cursorWidth, 34, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LogOff, cursorWidth, 2 + 16 * (nitems - 1), 0xFF, NULL); } if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC)) - AddTextPrinterParameterized(windowId, FONT_2, gText_BillSPc, cursorWidth, 2 , 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_BillSPc, cursorWidth, 2 , 0xFF, NULL); else - AddTextPrinterParameterized(windowId, FONT_2, gText_SomeoneSPc, cursorWidth, 2 , 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_SomeoneSPc, cursorWidth, 2 , 0xFF, NULL); StringExpandPlaceholders(gStringVar4, gText_SPc); Menu_PrintFormatIntlPlayerName(windowId, gStringVar4, cursorWidth, 18); - Menu_InitCursor(windowId, FONT_2, 0, 2, 16, nitems, 0); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, nitems, 0); CreateMCMenuInputHandlerTask(FALSE, nitems, windowId, 0xFF); ScheduleBgCopyTilemapToVram(0); } @@ -1004,7 +1004,7 @@ static void CreatePCMenuWindow(void) void ScriptMenu_DisplayPCStartupPrompt(void) { LoadMessageBoxAndFrameGfx(0, TRUE); - AddTextPrinterParameterized2(0, FONT_2, Text_AccessWhichPC, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, Text_AccessWhichPC, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void Task_ScriptShowMonPic(u8 taskId) @@ -1222,24 +1222,24 @@ void DrawSeagallopDestinationMenu(void) nitems = 6; top = 0; } - cursorWidth = GetMenuCursorDimensionByFont(FONT_2, 0); - fontHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT); + cursorWidth = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); + fontHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); windowId = CreateWindowFromRect(17, top, 11, nitems * 2); SetStdWindowBorderStyle(windowId, FALSE); for (i = 0; i < nitems - 2; i++) { if (r4 != gSpecialVar_0x8004) - AddTextPrinterParameterized(windowId, FONT_2, sSeagallopDestStrings[r4], cursorWidth, i * 16 + 2, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, sSeagallopDestStrings[r4], cursorWidth, i * 16 + 2, 0xFF, NULL); else i--; r4++; if (r4 == SEAGALLOP_CINNABAR_ISLAND) r4 = SEAGALLOP_VERMILION_CITY; } - AddTextPrinterParameterized(windowId, FONT_2, gText_Other, cursorWidth, i * 16 + 2, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Other, cursorWidth, i * 16 + 2, 0xFF, NULL); i++; - AddTextPrinterParameterized(windowId, FONT_2, gOtherText_Exit, cursorWidth, i * 16 + 2, 0xFF, NULL); - Menu_InitCursor(windowId, FONT_2, 0, 2, 16, nitems, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gOtherText_Exit, cursorWidth, i * 16 + 2, 0xFF, NULL); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, nitems, 0); CreateMCMenuInputHandlerTask(FALSE, nitems, windowId, 0xFF); ScheduleBgCopyTilemapToVram(0); } diff --git a/src/shop.c b/src/shop.c index 5e70bfcf7..227476bb1 100644 --- a/src/shop.c +++ b/src/shop.c @@ -218,14 +218,14 @@ static u8 CreateShopMenu(u8 a0) gShopData.martType = GetMartTypeFromItemList(a0); gShopData.selectedRow = 0; if (ContextNpcGetTextColor() == NPC_TEXT_COLOR_MALE) - gShopData.fontId = FONT_4; + gShopData.fontId = FONT_MALE; else - gShopData.fontId = FONT_5; + gShopData.fontId = FONT_FEMALE; sShopMenuWindowId = AddWindow(&sShopMenuWindowTemplate); SetStdWindowBorderStyle(sShopMenuWindowId, 0); - PrintTextArray(sShopMenuWindowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, 3, sShopMenuActions_BuySellQuit); - Menu_InitCursor(sShopMenuWindowId, FONT_2, 0, 2, 16, 3, 0); + PrintTextArray(sShopMenuWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 3, sShopMenuActions_BuySellQuit); + Menu_InitCursor(sShopMenuWindowId, FONT_NORMAL, 0, 2, 16, 3, 0); PutWindowTilemap(sShopMenuWindowId); CopyWindowToVram(sShopMenuWindowId, COPYWIN_MAP); return CreateTask(Task_ShopMenu, 8); @@ -547,8 +547,8 @@ bool8 BuyMenuBuildListMenuTemplate(void) gMultiuseListMenuTemplate.upText_Y = 2; gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.fillValue = 0; - gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(FONT_2, FONTATTR_COLOR_FOREGROUND); - gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(FONT_2, FONTATTR_COLOR_SHADOW); + gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_FOREGROUND); + gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_SHADOW); gMultiuseListMenuTemplate.moveCursorFunc = BuyMenuPrintItemDescriptionAndShowItemIcon; gMultiuseListMenuTemplate.itemPrintFunc = BuyMenuPrintPriceInList; gMultiuseListMenuTemplate.scrollMultiple = 0; @@ -597,13 +597,13 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s CreateItemMenuIcon(ITEMS_COUNT, gShopData.itemSlot); gShopData.itemSlot ^= 1; - BuyMenuPrint(5, FONT_2, description, 0, 3, 2, 1, 0, 0); + BuyMenuPrint(5, FONT_NORMAL, description, 0, 3, 2, 1, 0, 0); } else //TM Mart { FillWindowPixelBuffer(6, PIXEL_FILL(0)); LoadTmHmNameInMart(item); - BuyMenuPrint(5, FONT_2, description, 2, 3, 1, 0, 0, 0); + BuyMenuPrint(5, FONT_NORMAL, description, 2, 3, 1, 0, 0, 0); } } @@ -620,7 +620,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 item, u8 y) while (x-- != 0) *loc++ = 0; StringExpandPlaceholders(loc, gText_PokedollarVar1); - BuyMenuPrint(windowId, FONT_0, gStringVar4, 0x69, y, 0, 0, TEXT_SKIP_DRAW, 1); + BuyMenuPrint(windowId, FONT_SMALL, gStringVar4, 0x69, y, 0, 0, TEXT_SKIP_DRAW, 1); } } @@ -631,14 +631,14 @@ static void LoadTmHmNameInMart(s32 item) ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); StringCopy(gStringVar4, gText_NumberClear01); StringAppend(gStringVar4, gStringVar1); - BuyMenuPrint(6, FONT_0, gStringVar4, 0, 0, 0, 0, TEXT_SKIP_DRAW, 1); + BuyMenuPrint(6, FONT_SMALL, gStringVar4, 0, 0, 0, 0, TEXT_SKIP_DRAW, 1); StringCopy(gStringVar4, gMoveNames[ItemIdToBattleMoveId(item)]); - BuyMenuPrint(6, FONT_2, gStringVar4, 0, 0x10, 0, 0, 0, 1); + BuyMenuPrint(6, FONT_NORMAL, gStringVar4, 0, 0x10, 0, 0, 0, 1); } else { - BuyMenuPrint(6, FONT_0, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SKIP_DRAW, 1); - BuyMenuPrint(6, FONT_2, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1); + BuyMenuPrint(6, FONT_SMALL, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SKIP_DRAW, 1); + BuyMenuPrint(6, FONT_NORMAL, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1); } } @@ -656,12 +656,12 @@ static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1) { if (a1 == 0xFF) { - FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT)); + FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT)); CopyWindowToVram(4, COPYWIN_GFX); } else { - BuyMenuPrint(4, FONT_2, gText_SelectorArrow2, 1, y, 0, 0, 0, a1); + BuyMenuPrint(4, FONT_NORMAL, gText_SelectorArrow2, 1, y, 0, 0, 0, a1); } } @@ -876,7 +876,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SKIP_DRAW); ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BuyMenuPrint(3, FONT_0, gStringVar4, 2, 0xA, 0, 0, 0, 1); + BuyMenuPrint(3, FONT_SMALL, gStringVar4, 2, 0xA, 0, 0, 0, 1); } static void Task_BuyMenu(u8 taskId) @@ -926,7 +926,7 @@ static void Task_BuyHowManyDialogueInit(u8 taskId) BuyMenuQuantityBoxThinBorder(1, 0); ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_InBagVar1); - BuyMenuPrint(1, FONT_2, gStringVar4, 0, 2, 0, 0, 0, 1); + BuyMenuPrint(1, FONT_NORMAL, gStringVar4, 0, 2, 0, 0, 0, 1); tItemCount = 1; BuyMenuQuantityBoxNormalBorder(3, 0); BuyMenuPrintItemQuantityAndPrice(taskId); diff --git a/src/slot_machine.c b/src/slot_machine.c index 1e59680fc..b89412a7e 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1988,11 +1988,11 @@ static bool8 SlotsTask_GraphicsInit(u8 * state, struct SlotMachineSetupTaskData FillWindowPixelBuffer(1, 0xFF); PutWindowTilemap(1); - x = 236 - GetStringWidth(FONT_0, gString_SlotMachineControls, 0); + x = 236 - GetStringWidth(FONT_SMALL, gString_SlotMachineControls, 0); textColor[0] = TEXT_DYNAMIC_COLOR_6; textColor[1] = TEXT_COLOR_WHITE; textColor[2] = TEXT_COLOR_DARK_GRAY; - AddTextPrinterParameterized3(1, FONT_0, x, 0, textColor, 0, gString_SlotMachineControls); + AddTextPrinterParameterized3(1, FONT_SMALL, x, 0, textColor, 0, gString_SlotMachineControls); CopyBgTilemapBufferToVram(0); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | 0x20 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); @@ -2265,7 +2265,7 @@ static void Slot_PrintOnWindow0(const u8 * str) FillWindowPixelBuffer(0, PIXEL_FILL(1)); PutWindowTilemap(0); DrawTextBorderOuter(0, 0x001, 15); - AddTextPrinterParameterized5(0, FONT_2, str, 1, 2, TEXT_SKIP_DRAW, NULL, 1, 2); + AddTextPrinterParameterized5(0, FONT_NORMAL, str, 1, 2, TEXT_SKIP_DRAW, NULL, 1, 2); } static void Slot_ClearWindow0(void) @@ -2387,7 +2387,7 @@ static void SignalStopWinningLineFlashTask(void) static void Slot_CreateYesNoMenu(u8 cursorPos) { - CreateYesNoMenu(&sYesNoWindowTemplate, FONT_2, 0, 2, 10, 13, cursorPos); + CreateYesNoMenu(&sYesNoWindowTemplate, FONT_NORMAL, 0, 2, 10, 13, cursorPos); Menu_MoveCursorNoWrapAround(cursorPos); GetSlotMachineSetupTaskDataPtr()->yesNoMenuActive = TRUE; } diff --git a/src/start_menu.c b/src/start_menu.c index e66703bc7..8085fdb56 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -253,7 +253,7 @@ static void DrawSafariZoneStatsWindow(void) ConvertIntToDecimalStringN(gStringVar2, 600, STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar3, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_MenuSafariStats); - AddTextPrinterParameterized(sSafariZoneStatsWindowId, FONT_2, gStringVar4, 4, 3, 0xFF, NULL); + AddTextPrinterParameterized(sSafariZoneStatsWindowId, FONT_NORMAL, gStringVar4, 4, 3, 0xFF, NULL); CopyWindowToVram(sSafariZoneStatsWindowId, COPYWIN_GFX); } @@ -279,7 +279,7 @@ static s8 PrintStartMenuItems(s8 *cursor_p, u8 nitems) else { StringExpandPlaceholders(gStringVar4, sStartMenuActionTable[sStartMenuOrder[i]].text); - AddTextPrinterParameterized(GetStartMenuWindowId(), FONT_2, gStringVar4, 8, i * 15, 0xFF, NULL); + AddTextPrinterParameterized(GetStartMenuWindowId(), FONT_NORMAL, gStringVar4, 8, i * 15, 0xFF, NULL); } i++; if (i >= sNumStartMenuItems) @@ -318,7 +318,7 @@ static s8 DoDrawStartMenu(void) sDrawStartMenuState[0]++; break; case 5: - sStartMenuCursorPos = Menu_InitCursor(GetStartMenuWindowId(), FONT_2, 0, 0, 15, sNumStartMenuItems, sStartMenuCursorPos); + sStartMenuCursorPos = Menu_InitCursor(GetStartMenuWindowId(), FONT_NORMAL, 0, 0, 15, sNumStartMenuItems, sStartMenuCursorPos); if (!MenuHelpers_IsLinkActive() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) { DrawHelpMessageWindowWithText(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]]); @@ -909,7 +909,7 @@ static void task50_after_link_battle_save(u8 taskId) { case 0: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0xFF, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0xFF, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); DrawTextBorderOuter(0, 0x008, 0x0F); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); @@ -960,26 +960,26 @@ static void PrintSaveStats(void) LoadStdWindowGfx(sSaveStatsWindowId, 0x21D, 0xD0); DrawStdFrameWithCustomTileAndPalette(sSaveStatsWindowId, FALSE, 0x21D, 0x0D); SaveStatToString(SAVE_STAT_LOCATION, gStringVar4, 8); - x = (u32)(112 - GetStringWidth(FONT_2, gStringVar4, -1)) / 2; - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_2, x, 0, sTextColor_LocationHeader, -1, gStringVar4); - x = (u32)(112 - GetStringWidth(FONT_2, gStringVar4, -1)) / 2; - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 2, 14, sTextColor_StatName, -1, gSaveStatName_Player); + x = (u32)(112 - GetStringWidth(FONT_NORMAL, gStringVar4, -1)) / 2; + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_NORMAL, x, 0, sTextColor_LocationHeader, -1, gStringVar4); + x = (u32)(112 - GetStringWidth(FONT_NORMAL, gStringVar4, -1)) / 2; + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 2, 14, sTextColor_StatName, -1, gSaveStatName_Player); SaveStatToString(SAVE_STAT_NAME, gStringVar4, 2); Menu_PrintFormatIntlPlayerName(sSaveStatsWindowId, gStringVar4, 60, 14); - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 2, 28, sTextColor_StatName, -1, gSaveStatName_Badges); + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 2, 28, sTextColor_StatName, -1, gSaveStatName_Badges); SaveStatToString(SAVE_STAT_BADGES, gStringVar4, 2); - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 60, 28, sTextColor_StatValue, -1, gStringVar4); + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 60, 28, sTextColor_StatValue, -1, gStringVar4); y = 42; if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) { - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 2, 42, sTextColor_StatName, -1, gSaveStatName_Pokedex); + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 2, 42, sTextColor_StatName, -1, gSaveStatName_Pokedex); SaveStatToString(SAVE_STAT_POKEDEX, gStringVar4, 2); - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 60, 42, sTextColor_StatValue, -1, gStringVar4); + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 60, 42, sTextColor_StatValue, -1, gStringVar4); y = 56; } - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 2, y, sTextColor_StatName, -1, gSaveStatName_Time); + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 2, y, sTextColor_StatName, -1, gSaveStatName_Time); SaveStatToString(SAVE_STAT_TIME, gStringVar4, 2); - AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_0, 60, y, sTextColor_StatValue, -1, gStringVar4); + AddTextPrinterParameterized3(sSaveStatsWindowId, FONT_SMALL, 60, y, sTextColor_StatValue, -1, gStringVar4); CopyWindowToVram(sSaveStatsWindowId, COPYWIN_GFX); } diff --git a/src/strings.c b/src/strings.c index f77229689..c23f8d334 100644 --- a/src/strings.c +++ b/src/strings.c @@ -207,15 +207,15 @@ const u8 gText_PokeFluteAwakenedMon[] = _("The POKé FLUTE awakened sleeping\nPO const u8 gText_TMCase[] = _("TM CASE"); const u8 gText_Close[] = _("CLOSE"); const u8 gText_TMCaseWillBePutAway[] = _("The TM CASE will be\nput away."); -const u8 gText_Font0[] = _("{FONT_0}"); -const u8 gText_Font2[] = _("{FONT_2}"); +const u8 gText_FontSmall[] = _("{FONT_SMALL}"); +const u8 gText_FontNormal[] = _("{FONT_NORMAL}"); const u8 gText_EmptySpace[] = _(" "); const u8 gText_BerryPouch[] = _("BERRY POUCH"); const u8 gText_TheBerryPouchWillBePutAway[] = _("The BERRY POUCH will be\nput away."); const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("SEE YA!"); -const u8 gText_InBagVar1[] = _("IN BAG:{FONT_0} {STR_VAR_1}"); +const u8 gText_InBagVar1[] = _("IN BAG:{FONT_SMALL} {STR_VAR_1}"); const u8 gText_QuitShopping[] = _("Quit shopping."); const u8 gText_Var1CertainlyHowMany[] = _("{STR_VAR_1}? Certainly.\nHow many would you like?"); const u8 gText_Var1AndYouWantedVar2[] = _("{STR_VAR_1}, and you want {STR_VAR_2}.\nThat will be ¥{STR_VAR_3}. Okay?"); @@ -419,11 +419,11 @@ const u8 gText_DoubleBattle[] = _("DOUBLE BATTLE"); const u8 gText_MultiBattle[] = _("MULTI BATTLE"); const u8 gText_MakeAChallenge[] = _("Make a challenge."); const u8 gText_Info_2[] = _("INFO"); -const u8 gText_FreshWater_200[] = _("FRESH WATER{CLEAR_TO 0x57}{FONT_0}¥200"); -const u8 gText_SodaPop_300[] = _("SODA POP{CLEAR_TO 0x57}{FONT_0}¥300"); -const u8 gText_Lemonade_350[] = _("LEMONADE{CLEAR_TO 0x57}{FONT_0}¥350"); -const u8 gText_50Coins_1000[] = _("{FONT_0} 50 COINS{CLEAR_TO 0x45}¥1,000"); -const u8 gText_500Coins_10000[] = _("{FONT_0}500 COINS{CLEAR_TO 0x40}¥10,000"); +const u8 gText_FreshWater_200[] = _("FRESH WATER{CLEAR_TO 0x57}{FONT_SMALL}¥200"); +const u8 gText_SodaPop_300[] = _("SODA POP{CLEAR_TO 0x57}{FONT_SMALL}¥300"); +const u8 gText_Lemonade_350[] = _("LEMONADE{CLEAR_TO 0x57}{FONT_SMALL}¥350"); +const u8 gText_50Coins_1000[] = _("{FONT_SMALL} 50 COINS{CLEAR_TO 0x45}¥1,000"); +const u8 gText_500Coins_10000[] = _("{FONT_SMALL}500 COINS{CLEAR_TO 0x40}¥10,000"); const u8 gText_Excellent[] = _("Excellent"); const u8 gText_NotSoBad[] = _("Not so bad"); const u8 gText_RedShard[] = _("RED SHARD"); @@ -433,11 +433,11 @@ const u8 gText_GreenShard[] = _("GREEN SHARD"); const u8 gText_BattleTower[] = _("バトルタワ-"); const u8 gText_Right[] = _("Right"); const u8 gText_Left[] = _("Left"); -const u8 gText_Tm13_4000Coins[] = _("TM13{CLEAR_TO 0x48}{FONT_0}4,000 COINS"); -const u8 gText_Tm23_3500Coins[] = _("TM23{CLEAR_TO 0x48}{FONT_0}3,500 COINS"); -const u8 gText_Tm24_4000Coins[] = _("TM24{CLEAR_TO 0x48}{FONT_0}4,000 COINS"); -const u8 gText_Tm30_4500Coins[] = _("TM30{CLEAR_TO 0x48}{FONT_0}4,500 COINS"); -const u8 gText_Tm35_4000Coins[] = _("TM35{CLEAR_TO 0x48}{FONT_0}4,000 COINS"); +const u8 gText_Tm13_4000Coins[] = _("TM13{CLEAR_TO 0x48}{FONT_SMALL}4,000 COINS"); +const u8 gText_Tm23_3500Coins[] = _("TM23{CLEAR_TO 0x48}{FONT_SMALL}3,500 COINS"); +const u8 gText_Tm24_4000Coins[] = _("TM24{CLEAR_TO 0x48}{FONT_SMALL}4,000 COINS"); +const u8 gText_Tm30_4500Coins[] = _("TM30{CLEAR_TO 0x48}{FONT_SMALL}4,500 COINS"); +const u8 gText_Tm35_4000Coins[] = _("TM35{CLEAR_TO 0x48}{FONT_SMALL}4,000 COINS"); const u8 gText_1F_2[] = _("1F"); const u8 gText_2F_2[] = _("2F"); const u8 gText_3F_2[] = _("3F"); @@ -485,18 +485,18 @@ const u8 gText_FreshWater[] = _("FRESH WATER"); const u8 gText_SodaPop[] = _("SODA POP"); const u8 gText_Lemonade[] = _("LEMONADE"); const u8 gText_Coins_2[] = _("COINS"); -const u8 gText_Bicycle_Price[] = _("BICYCLE{CLEAR_TO 0x49}{FONT_0}¥1,000,000"); +const u8 gText_Bicycle_Price[] = _("BICYCLE{CLEAR_TO 0x49}{FONT_SMALL}¥1,000,000"); const u8 gText_NoThanks[] = _("NO THANKS"); -const u8 gText_Abra_180Coins[] = _("ABRA{CLEAR_TO 0x55}{FONT_0} 180 COINS"); -const u8 gText_Clefairy_500Coins[] = _("CLEFAIRY{CLEAR_TO 0x55}{FONT_0} 500 COINS"); -const u8 gText_Dratini_2800Coins[] = _("DRATINI{CLEAR_TO 0x4B}{FONT_0} 2,800 COINS"); -const u8 gText_Scyther_5500Coins[] = _("SCYTHER{CLEAR_TO 0x4B}{FONT_0} 5,500 COINS"); -const u8 gText_Porygon_9999Coins[] = _("PORYGON{CLEAR_TO 0x4B}{FONT_0} 9,999 COINS"); -const u8 gText_Abra_120Coins[] = _("ABRA{CLEAR_TO 0x55}{FONT_0} 120 COINS"); -const u8 gText_Clefairy_750Coins[] = _("CLEFAIRY{CLEAR_TO 0x55}{FONT_0} 750 COINS"); -const u8 gText_Pinsir_2500Coins[] = _("PINSIR{CLEAR_TO 0x4B}{FONT_0} 2,500 COINS"); -const u8 gText_Dratini_4600Coins[] = _("DRATINI{CLEAR_TO 0x4B}{FONT_0} 4,600 COINS"); -const u8 gText_Porygon_6500Coins[] = _("PORYGON{CLEAR_TO 0x4B}{FONT_0} 6,500 COINS"); +const u8 gText_Abra_180Coins[] = _("ABRA{CLEAR_TO 0x55}{FONT_SMALL} 180 COINS"); +const u8 gText_Clefairy_500Coins[] = _("CLEFAIRY{CLEAR_TO 0x55}{FONT_SMALL} 500 COINS"); +const u8 gText_Dratini_2800Coins[] = _("DRATINI{CLEAR_TO 0x4B}{FONT_SMALL} 2,800 COINS"); +const u8 gText_Scyther_5500Coins[] = _("SCYTHER{CLEAR_TO 0x4B}{FONT_SMALL} 5,500 COINS"); +const u8 gText_Porygon_9999Coins[] = _("PORYGON{CLEAR_TO 0x4B}{FONT_SMALL} 9,999 COINS"); +const u8 gText_Abra_120Coins[] = _("ABRA{CLEAR_TO 0x55}{FONT_SMALL} 120 COINS"); +const u8 gText_Clefairy_750Coins[] = _("CLEFAIRY{CLEAR_TO 0x55}{FONT_SMALL} 750 COINS"); +const u8 gText_Pinsir_2500Coins[] = _("PINSIR{CLEAR_TO 0x4B}{FONT_SMALL} 2,500 COINS"); +const u8 gText_Dratini_4600Coins[] = _("DRATINI{CLEAR_TO 0x4B}{FONT_SMALL} 4,600 COINS"); +const u8 gText_Porygon_6500Coins[] = _("PORYGON{CLEAR_TO 0x4B}{FONT_SMALL} 6,500 COINS"); const u8 gText_NoThanks_2[] = _("NO THANKS"); const u8 gText_HelixFossil[] = _("HELIX FOSSIL"); const u8 gText_DomeFossil[] = _("DOME FOSSIL"); @@ -532,11 +532,11 @@ const u8 gText_1BigMushroom[] = _("1 BIG MUSHROOM"); const u8 gText_SeviiIslands[] = _("SEVII ISLANDS"); const u8 gText_NavelRock[] = _("NAVEL ROCK"); const u8 gText_BirthIsland[] = _("BIRTH ISLAND"); -const u8 gText_MiracleSeed_1000Coins[] = _("MIRACLE SEED{CLEAR_TO 0x50}{FONT_0}1,000 COINS"); -const u8 gText_Charcoal_1000Coins[] = _("CHARCOAL{CLEAR_TO 0x50}{FONT_0}1,000 COINS"); -const u8 gText_MysticWater_1000Coins[] = _("MYSTIC WATER{CLEAR_TO 0x50}{FONT_0}1,000 COINS"); -const u8 gText_YellowFlute_1600Coins[] = _("YELLOW FLUTE{CLEAR_TO 0x50}{FONT_0}1,600 COINS"); -const u8 gText_SmokeBall_800Coins[] = _("SMOKE BALL{CLEAR_TO 0x5A}{FONT_0}800 COINS"); +const u8 gText_MiracleSeed_1000Coins[] = _("MIRACLE SEED{CLEAR_TO 0x50}{FONT_SMALL}1,000 COINS"); +const u8 gText_Charcoal_1000Coins[] = _("CHARCOAL{CLEAR_TO 0x50}{FONT_SMALL}1,000 COINS"); +const u8 gText_MysticWater_1000Coins[] = _("MYSTIC WATER{CLEAR_TO 0x50}{FONT_SMALL}1,000 COINS"); +const u8 gText_YellowFlute_1600Coins[] = _("YELLOW FLUTE{CLEAR_TO 0x50}{FONT_SMALL}1,600 COINS"); +const u8 gText_SmokeBall_800Coins[] = _("SMOKE BALL{CLEAR_TO 0x5A}{FONT_SMALL}800 COINS"); const u8 gText_Multichoice_Empty2[] = _(""); const u8 gText_Multichoice_Empty1[] = _(""); const u8 gText_BecomeLeader[] = _("BECOME LEADER"); @@ -582,17 +582,17 @@ const u8 gText_NowOn[] = _("Now on:"); const u8 gText_LinkedGamePlay[] = _("LINKED GAME PLAY"); const u8 gText_DirectCorner[] = _("DIRECT CORNER"); const u8 gText_UnionRoom[] = _("UNION ROOM"); -const u8 gText_Energypowder_50[] = _("ENERGYPOWDER{CLEAR_TO 0x74}{FONT_0}50"); -const u8 gText_EnergyRoot_80[] = _("ENERGY ROOT{CLEAR_TO 0x74}{FONT_0}80"); -const u8 gText_HealPowder_50[] = _("HEAL POWDER{CLEAR_TO 0x74}{FONT_0}50"); -const u8 gText_RevivalHerb_300[] = _("REVIVAL HERB{CLEAR_TO 0x6F}{FONT_0}300"); -const u8 gText_Protein_1000[] = _("PROTEIN{CLEAR_TO 0x65}{FONT_0}1,000"); -const u8 gText_Iron_1000[] = _("IRON{CLEAR_TO 0x65}{FONT_0}1,000"); -const u8 gText_Carbos_1000[] = _("CARBOS{CLEAR_TO 0x65}{FONT_0}1,000"); -const u8 gText_Calcium_1000[] = _("CALCIUM{CLEAR_TO 0x65}{FONT_0}1,000"); -const u8 gText_Zinc_1000[] = _("ZINC{CLEAR_TO 0x65}{FONT_0}1,000"); -const u8 gText_HpUp_1000[] = _("HP UP{CLEAR_TO 0x65}{FONT_0}1,000"); -const u8 gText_PpUp_3000[] = _("PP UP{CLEAR_TO 0x65}{FONT_0}3,000"); +const u8 gText_Energypowder_50[] = _("ENERGYPOWDER{CLEAR_TO 0x74}{FONT_SMALL}50"); +const u8 gText_EnergyRoot_80[] = _("ENERGY ROOT{CLEAR_TO 0x74}{FONT_SMALL}80"); +const u8 gText_HealPowder_50[] = _("HEAL POWDER{CLEAR_TO 0x74}{FONT_SMALL}50"); +const u8 gText_RevivalHerb_300[] = _("REVIVAL HERB{CLEAR_TO 0x6F}{FONT_SMALL}300"); +const u8 gText_Protein_1000[] = _("PROTEIN{CLEAR_TO 0x65}{FONT_SMALL}1,000"); +const u8 gText_Iron_1000[] = _("IRON{CLEAR_TO 0x65}{FONT_SMALL}1,000"); +const u8 gText_Carbos_1000[] = _("CARBOS{CLEAR_TO 0x65}{FONT_SMALL}1,000"); +const u8 gText_Calcium_1000[] = _("CALCIUM{CLEAR_TO 0x65}{FONT_SMALL}1,000"); +const u8 gText_Zinc_1000[] = _("ZINC{CLEAR_TO 0x65}{FONT_SMALL}1,000"); +const u8 gText_HpUp_1000[] = _("HP UP{CLEAR_TO 0x65}{FONT_SMALL}1,000"); +const u8 gText_PpUp_3000[] = _("PP UP{CLEAR_TO 0x65}{FONT_SMALL}3,000"); const u8 gString_BattleRecords_PlayersBattleResults[] = _("{PLAYER}'s BATTLE RESULTS"); const u8 gString_BattleRecords_TotalRecord[] = _("TOTAL RECORD W:{STR_VAR_1} L:{STR_VAR_2} D:{STR_VAR_3}"); const u8 gString_BattleRecords_ColumnHeaders[] = _("WIN{CLEAR_TO 0x30}LOSE{CLEAR_TO 0x60}DRAW"); @@ -911,14 +911,14 @@ const u8 gText_WasUsedOn[] = _(" was used on\n"); const u8 gText_Period[] = _("."); const u8 gText_LevelRoseTo[] = _("'s level rose to\n"); const u8 gText_Period2[] = _("."); -const u8 gText_LevelUp_MaxHP[] = _("{FONT_0}MAX.{FONT_2} HP"); +const u8 gText_LevelUp_MaxHP[] = _("{FONT_SMALL}MAX.{FONT_NORMAL} HP"); const u8 gText_LevelUp_Attack[] = _("ATTACK"); const u8 gText_LevelUp_Defense[] = _("DEFENSE"); const u8 gText_LevelUp_Speed[] = _("SPEED"); const u8 gText_LevelUp_SpAtk[] = _("SP. ATK"); const u8 gText_LevelUp_SpDef[] = _("SP. DEF"); -const u8 gText_LevelUp_Plus[] = _("{FONT_0}{PLUS}{FONT_2}"); -const u8 gText_LevelUp_Minus[] = _("{FONT_0}-{FONT_2}"); +const u8 gText_LevelUp_Plus[] = _("{FONT_SMALL}{PLUS}{FONT_NORMAL}"); +const u8 gText_LevelUp_Minus[] = _("{FONT_SMALL}-{FONT_NORMAL}"); const u8 gText_Counting_1[] = _("1, "); const u8 gText_Counting_2And[] = _("2, and ‥ ‥ ‥ "); const u8 gText_Poof[] = _("Poof!\p"); diff --git a/src/teachy_tv.c b/src/teachy_tv.c index eb4c51887..86634db83 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -240,7 +240,7 @@ static const struct ListMenuTemplate sListMenuTemplate = .lettersSpacing = 0x0, .itemVerticalPadding = 0x0, .scrollMultiple = 0x1, - .fontId = FONT_2, + .fontId = FONT_NORMAL, .cursorKind = 0x0, }; @@ -676,7 +676,7 @@ static void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) static void TeachyTvInitTextPrinter(const u8 *text) { gTextFlags.autoScroll = 0; - AddTextPrinterParameterized2(0, FONT_4, text, GetTextSpeedSetting(), 0, 1, 0xC, 3); + AddTextPrinterParameterized2(0, FONT_MALE, text, GetTextSpeedSetting(), 0, 1, 0xC, 3); } static void TeachyTvFree(void) diff --git a/src/text.c b/src/text.c index 6b3eb65d1..d1f5429a4 100644 --- a/src/text.c +++ b/src/text.c @@ -8,16 +8,16 @@ extern const struct OamData gOamData_AffineOff_ObjNormal_16x16; -static void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese); -static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese); -static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese); +static void DecompressGlyph_NormalCopy1(u16 glyphId, bool32 isJapanese); +static void DecompressGlyph_NormalCopy2(u16 glyphId, bool32 isJapanese); +static void DecompressGlyph_Male(u16 glyphId, bool32 isJapanese); static void DecompressGlyph_Bold(u16 glyphId); -static s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese); -static s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese); -static s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese); -static s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese); -static s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese); -static s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidth_Small(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidth_NormalCopy1(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidth_NormalCopy2(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidth_Male(u16 glyphId, bool32 isJapanese); +static s32 GetGlyphWidth_Female(u16 glyphId, bool32 isJapanese); TextFlags gTextFlags; @@ -36,13 +36,13 @@ static const u8 sWindowVerticalScrollSpeeds[] = { }; static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { - { FONT_0, GetGlyphWidthFont0 }, - { FONT_1, GetGlyphWidthFont1 }, // copy of 2 - { FONT_2, GetGlyphWidthFont2 }, - { FONT_3, GetGlyphWidthFont3 }, // copy of 2 - { FONT_4, GetGlyphWidthFont4 }, - { FONT_5, GetGlyphWidthFont5 }, - { FONT_BRAILLE, GetGlyphWidthFont6 } + { FONT_SMALL, GetGlyphWidth_Small }, + { FONT_NORMAL_COPY_1, GetGlyphWidth_NormalCopy1 }, + { FONT_NORMAL, GetGlyphWidth_Normal }, + { FONT_NORMAL_COPY_2, GetGlyphWidth_NormalCopy2 }, + { FONT_MALE, GetGlyphWidth_Male }, + { FONT_FEMALE, GetGlyphWidth_Female }, + { FONT_BRAILLE, GetGlyphWidth_Braille } }; static const struct SpriteSheet sUnknown_81EA68C[] = @@ -93,9 +93,8 @@ struct const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); -// Font 0 -static const u16 sFont0LatinGlyphs[] = INCBIN_U16("graphics/fonts/font0_latin.latfont"); -static const u8 sFont0LatinGlyphWidths[] = +static const u16 sFontSmallLatinGlyphs[] = INCBIN_U16("graphics/fonts/latin_small.latfont"); +static const u8 sFontSmallLatinGlyphWidths[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -135,11 +134,10 @@ static const u8 sFont0LatinGlyphWidths[] = 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 5 }; -static const u16 sFont0JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font0_jap.fwjpnfont"); +static const u16 sFontSmallJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/japanese_small.fwjpnfont"); -// Font 1 -static const u16 sFont1LatinGlyphs[] = INCBIN_U16("graphics/fonts/font2_latin.latfont"); -static const u8 sFont1LatinGlyphWidths[] = +static const u16 sFontNormalCopy1LatinGlyphs[] = INCBIN_U16("graphics/fonts/latin_normal.latfont"); +static const u8 sFontNormalCopy1LatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -179,11 +177,10 @@ static const u8 sFont1LatinGlyphWidths[] = 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6 }; -static const u16 sFont1JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font1_jap.fwjpnfont"); +static const u16 sFontTallJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/japanese_tall.fwjpnfont"); -// Font 2 -static const u16 sFont2LatinGlyphs[] = INCBIN_U16("graphics/fonts/font2_latin.latfont"); -static const u8 sFont2LatinGlyphWidths[] = +static const u16 sFontNormalLatinGlyphs[] = INCBIN_U16("graphics/fonts/latin_normal.latfont"); +static const u8 sFontNormalLatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -223,8 +220,8 @@ static const u8 sFont2LatinGlyphWidths[] = 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6 }; -static const u16 sFont2JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font2_jap.fwjpnfont"); -static const u8 sFont2JapaneseGlyphWidths[] = +static const u16 sFontNormalJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/japanese_normal.fwjpnfont"); +static const u8 sFontNormalJapaneseGlyphWidths[] = { 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -248,9 +245,8 @@ static const u8 sFont2JapaneseGlyphWidths[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0 }; -// Font 4 -static const u16 sFont4LatinGlyphs[] = INCBIN_U16("graphics/fonts/font4_latin.latfont"); -static const u8 sFont4LatinGlyphWidths[] = +static const u16 sFontMaleLatinGlyphs[] = INCBIN_U16("graphics/fonts/latin_male.latfont"); +static const u8 sFontMaleLatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -290,8 +286,8 @@ static const u8 sFont4LatinGlyphWidths[] = 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6 }; -static const u16 sFont4JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font4_jap.fwjpnfont"); -static const u8 sFont4JapaneseGlyphWidths[] = +static const u16 sFontMaleJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/japanese_male.fwjpnfont"); +static const u8 sFontMaleJapaneseGlyphWidths[] = { 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -315,9 +311,8 @@ static const u8 sFont4JapaneseGlyphWidths[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0 }; -// Font 5 -static const u16 sFont5LatinGlyphs[] = INCBIN_U16("graphics/fonts/font5_latin.latfont"); -static const u8 sFont5LatinGlyphWidths[] = +static const u16 sFontFemaleLatinGlyphs[] = INCBIN_U16("graphics/fonts/latin_female.latfont"); +static const u8 sFontFemaleLatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -357,8 +352,8 @@ static const u8 sFont5LatinGlyphWidths[] = 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6 }; -static const u16 sFont5JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font5_jap.fwjpnfont"); -static const u8 sFont5JapaneseGlyphWidths[] = +static const u16 sFontFemaleJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/japanese_female.fwjpnfont"); +static const u8 sFontFemaleJapaneseGlyphWidths[] = { 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -382,76 +377,75 @@ static const u8 sFont5JapaneseGlyphWidths[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0 }; -// Font 9 -static const u16 sFont9JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font9_jap.fwjpnfont"); +static const u16 sFontBoldJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/japanese_bold.fwjpnfont"); -u16 Font0Func(struct TextPrinter *textPrinter) +u16 FontFunc_Small(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; if (subStruct->hasGlyphIdBeenSet == 0) { - textPrinter->subUnion.sub.glyphId = 0; + textPrinter->subUnion.sub.glyphId = FONT_SMALL; subStruct->hasGlyphIdBeenSet = 1; } return RenderText(textPrinter); } -u16 Font1Func(struct TextPrinter *textPrinter) +u16 FontFunc_NormalCopy1(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; if (subStruct->hasGlyphIdBeenSet == 0) { - textPrinter->subUnion.sub.glyphId = 1; + textPrinter->subUnion.sub.glyphId = FONT_NORMAL_COPY_1; subStruct->hasGlyphIdBeenSet = 1; } return RenderText(textPrinter); } -u16 Font2Func(struct TextPrinter *textPrinter) +u16 FontFunc_Normal(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; if (subStruct->hasGlyphIdBeenSet == 0) { - textPrinter->subUnion.sub.glyphId = 2; + textPrinter->subUnion.sub.glyphId = FONT_NORMAL; subStruct->hasGlyphIdBeenSet = 1; } return RenderText(textPrinter); } -u16 Font3Func(struct TextPrinter *textPrinter) +u16 FontFunc_NormalCopy2(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; if (subStruct->hasGlyphIdBeenSet == 0) { - textPrinter->subUnion.sub.glyphId = 3; + textPrinter->subUnion.sub.glyphId = FONT_NORMAL_COPY_2; subStruct->hasGlyphIdBeenSet = 1; } return RenderText(textPrinter); } -u16 Font4Func(struct TextPrinter *textPrinter) +u16 FontFunc_Male(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; if (subStruct->hasGlyphIdBeenSet == 0) { - textPrinter->subUnion.sub.glyphId = 4; + textPrinter->subUnion.sub.glyphId = FONT_MALE; subStruct->hasGlyphIdBeenSet = 1; } return RenderText(textPrinter); } -u16 Font5Func(struct TextPrinter *textPrinter) +u16 FontFunc_Female(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; if (subStruct->hasGlyphIdBeenSet == 0) { - textPrinter->subUnion.sub.glyphId = 5; + textPrinter->subUnion.sub.glyphId = FONT_FEMALE; subStruct->hasGlyphIdBeenSet = 1; } return RenderText(textPrinter); @@ -818,23 +812,23 @@ u16 RenderText(struct TextPrinter *textPrinter) switch (subStruct->glyphId) { - case FONT_0: - DecompressGlyphFont0(currChar, textPrinter->japanese); + case FONT_SMALL: + DecompressGlyph_Small(currChar, textPrinter->japanese); break; - case FONT_1: - DecompressGlyphFont1(currChar, textPrinter->japanese); + case FONT_NORMAL_COPY_1: + DecompressGlyph_NormalCopy1(currChar, textPrinter->japanese); break; - case FONT_2: - DecompressGlyphFont2(currChar, textPrinter->japanese); + case FONT_NORMAL: + DecompressGlyph_Normal(currChar, textPrinter->japanese); break; - case FONT_3: - DecompressGlyphFont3(currChar, textPrinter->japanese); + case FONT_NORMAL_COPY_2: + DecompressGlyph_NormalCopy2(currChar, textPrinter->japanese); break; - case FONT_4: - DecompressGlyphFont4(currChar, textPrinter->japanese); + case FONT_MALE: + DecompressGlyph_Male(currChar, textPrinter->japanese); break; - case FONT_5: - DecompressGlyphFont5(currChar, textPrinter->japanese); + case FONT_FEMALE: + DecompressGlyph_Female(currChar, textPrinter->japanese); break; } @@ -1365,13 +1359,13 @@ u8 GetKeypadIconHeight(u8 keypadIconId) return sKeypadIcons[keypadIconId].height; } -void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) +void DecompressGlyph_Small(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; if (isJapanese == TRUE) { - glyphs = sFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); + glyphs = sFontSmallJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); gGlyphInfo.width = 8; @@ -1379,30 +1373,31 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) } else { - glyphs = sFont0LatinGlyphs + (0x10 * glyphId); + glyphs = sFontSmallLatinGlyphs + (0x10 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x40)); - gGlyphInfo.width = sFont0LatinGlyphWidths[glyphId]; + gGlyphInfo.width = sFontSmallLatinGlyphWidths[glyphId]; gGlyphInfo.height = 13; } } -static s32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidth_Small(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; else - return sFont0LatinGlyphWidths[glyphId]; + return sFontSmallLatinGlyphWidths[glyphId]; } -static void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_NormalCopy1(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; if (isJapanese == TRUE) { + // This font only differs from the Normal font in Japanese int eff; - glyphs = sFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now + glyphs = sFontTallJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); gGlyphInfo.width = 8; @@ -1410,25 +1405,25 @@ static void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) } else { - glyphs = sFont1LatinGlyphs + (0x20 * glyphId); + glyphs = sFontNormalCopy1LatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont1LatinGlyphWidths[glyphId]; + gGlyphInfo.width = sFontNormalCopy1LatinGlyphWidths[glyphId]; gGlyphInfo.height = 14; } } -static s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidth_NormalCopy1(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; else - return sFont1LatinGlyphWidths[glyphId]; + return sFontNormalCopy1LatinGlyphWidths[glyphId]; } -void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) +void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; int i; @@ -1450,12 +1445,12 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) } else { - glyphs = sFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + glyphs = sFontNormalJapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont2JapaneseGlyphWidths[glyphId]; + gGlyphInfo.width = sFontNormalJapaneseGlyphWidths[glyphId]; gGlyphInfo.height = 12; } } @@ -1469,39 +1464,39 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) { gGlyphInfo.pixels[i] = lastColor | lastColor << 4; // but why - gGlyphInfo.width = sFont2LatinGlyphWidths[0]; + gGlyphInfo.width = sFontNormalLatinGlyphWidths[0]; gGlyphInfo.height = 14; } } else { - glyphs = sFont2LatinGlyphs + (0x20 * glyphId); + glyphs = sFontNormalLatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont2LatinGlyphWidths[glyphId]; + gGlyphInfo.width = sFontNormalLatinGlyphWidths[glyphId]; gGlyphInfo.height = 14; } } } -static s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) { if(glyphId == 0) return 10; - return sFont2JapaneseGlyphWidths[glyphId]; + return sFontNormalJapaneseGlyphWidths[glyphId]; } else { - return sFont2LatinGlyphWidths[glyphId]; + return sFontNormalLatinGlyphWidths[glyphId]; } } -static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_NormalCopy2(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; int i; @@ -1523,7 +1518,7 @@ static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese) } else { - glyphs = sFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + glyphs = sFontNormalJapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); @@ -1533,18 +1528,18 @@ static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese) } } else - DecompressGlyphFont2(glyphId, isJapanese); + DecompressGlyph_Normal(glyphId, isJapanese); } -static s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidth_NormalCopy2(u16 glyphId, bool32 isJapanese) { if(isJapanese == TRUE) return 10; else - return sFont2LatinGlyphWidths[glyphId]; + return sFontNormalLatinGlyphWidths[glyphId]; } -static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_Male(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; int i; @@ -1566,12 +1561,12 @@ static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) } else { - glyphs = sFont4JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + glyphs = sFontMaleJapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont4JapaneseGlyphWidths[glyphId]; + gGlyphInfo.width = sFontMaleJapaneseGlyphWidths[glyphId]; gGlyphInfo.height = 12; } } @@ -1585,37 +1580,37 @@ static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) { gGlyphInfo.pixels[i] = lastColor | lastColor << 4; // but why - gGlyphInfo.width = sFont4LatinGlyphWidths[0]; + gGlyphInfo.width = sFontMaleLatinGlyphWidths[0]; gGlyphInfo.height = 14; } } else { - glyphs = sFont4LatinGlyphs + (0x20 * glyphId); + glyphs = sFontMaleLatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont4LatinGlyphWidths[glyphId]; + gGlyphInfo.width = sFontMaleLatinGlyphWidths[glyphId]; gGlyphInfo.height = 14; } } } -static s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidth_Male(u16 glyphId, bool32 isJapanese) { if(isJapanese == TRUE) { if(glyphId == 0) return 10; - return sFont4JapaneseGlyphWidths[glyphId]; + return sFontMaleJapaneseGlyphWidths[glyphId]; } else - return sFont4LatinGlyphWidths[glyphId]; + return sFontMaleLatinGlyphWidths[glyphId]; } -void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) +void DecompressGlyph_Female(u16 glyphId, bool32 isJapanese) { const u16 *glyphs; int i; @@ -1637,12 +1632,12 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) } else { - glyphs = sFont5JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + glyphs = sFontFemaleJapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont5JapaneseGlyphWidths[glyphId]; + gGlyphInfo.width = sFontFemaleJapaneseGlyphWidths[glyphId]; gGlyphInfo.height = 12; } } @@ -1656,39 +1651,39 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) { gGlyphInfo.pixels[i] = lastColor | lastColor << 4; // but why - gGlyphInfo.width = sFont5LatinGlyphWidths[0]; + gGlyphInfo.width = sFontFemaleLatinGlyphWidths[0]; gGlyphInfo.height = 14; } } else { - glyphs = sFont5LatinGlyphs + (0x20 * glyphId); + glyphs = sFontFemaleLatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = sFont5LatinGlyphWidths[glyphId]; + gGlyphInfo.width = sFontFemaleLatinGlyphWidths[glyphId]; gGlyphInfo.height = 14; } } } -static s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese) +static s32 GetGlyphWidth_Female(u16 glyphId, bool32 isJapanese) { if(isJapanese == TRUE) { if(glyphId == 0) return 10; - return sFont5JapaneseGlyphWidths[glyphId]; + return sFontFemaleJapaneseGlyphWidths[glyphId]; } else - return sFont5LatinGlyphWidths[glyphId]; + return sFontFemaleLatinGlyphWidths[glyphId]; } static void DecompressGlyph_Bold(u16 glyphId) { - const u16 *glyphs = sFont9JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); + const u16 *glyphs = sFontBoldJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); gGlyphInfo.width = 8; diff --git a/src/tm_case.c b/src/tm_case.c index a8d05ce1d..833225aec 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -664,7 +664,7 @@ static void InitTMCaseListMenuItems(void) gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; gMultiuseListMenuTemplate.maxShowed = sTMCaseDynamicResources->maxTMsShown; - gMultiuseListMenuTemplate.fontId = FONT_2; + gMultiuseListMenuTemplate.fontId = FONT_NORMAL; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; @@ -676,7 +676,7 @@ static void InitTMCaseListMenuItems(void) static void GetTMNumberAndMoveString(u8 * dest, u16 itemId) { - StringCopy(gStringVar4, gText_Font0); + StringCopy(gStringVar4, gText_FontSmall); if (itemId >= ITEM_HM01) { StringAppend(gStringVar4, sText_ClearTo18); @@ -691,7 +691,7 @@ static void GetTMNumberAndMoveString(u8 * dest, u16 itemId) StringAppend(gStringVar4, gStringVar1); } StringAppend(gStringVar4, sText_SingleSpace); - StringAppend(gStringVar4, gText_Font2); + StringAppend(gStringVar4, gText_FontNormal); StringAppend(gStringVar4, gMoveNames[ItemIdToBattleMoveId(itemId)]); StringCopy(dest, gStringVar4); } @@ -722,7 +722,7 @@ static void List_ItemPrintFunc(u8 windowId, u32 itemIndex, u8 y) { ConvertIntToDecimalStringN(gStringVar1, BagGetQuantityByPocketPosition(POCKET_TM_CASE, itemIndex), STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - TMCase_Print(windowId, FONT_0, gStringVar4, 126, y, 0, 0, TEXT_SKIP_DRAW, COLOR_DARK); + TMCase_Print(windowId, FONT_SMALL, gStringVar4, 126, y, 0, 0, TEXT_SKIP_DRAW, COLOR_DARK); } else { @@ -739,7 +739,7 @@ static void PrintDescription(s32 itemIndex) else str = gText_TMCaseWillBePutAway; FillWindowPixelBuffer(WIN_DESCRIPTION, 0); - TMCase_Print(WIN_DESCRIPTION, FONT_2, str, 2, 3, 1, 0, 0, COLOR_LIGHT); + TMCase_Print(WIN_DESCRIPTION, FONT_NORMAL, str, 2, 3, 1, 0, 0, COLOR_LIGHT); } // Darkens (or subsequently lightens) the blue bg tiles around the description window when a TM/HM is selected. @@ -760,12 +760,12 @@ static void PrintListCursorAtRow(u8 y, u8 colorIdx) if (colorIdx == COLOR_CURSOR_ERASE) { // Never used. Would erase cursor (but also a portion of the list text) - FillWindowPixelRect(WIN_LIST, 0, 0, y, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT)); + FillWindowPixelRect(WIN_LIST, 0, 0, y, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT)); CopyWindowToVram(WIN_LIST, COPYWIN_GFX); } else { - TMCase_Print(WIN_LIST, FONT_2, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx); + TMCase_Print(WIN_LIST, FONT_NORMAL, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx); } } @@ -963,22 +963,22 @@ static void Task_SelectedTMHM_Field(u8 taskId) // Print context window actions AddItemMenuActionTextPrinters(sTMCaseDynamicResources->contextMenuWindowId, - FONT_2, - GetMenuCursorDimensionByFont(FONT_2, 0), + FONT_NORMAL, + GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 0, - GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, + GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sTMCaseDynamicResources->numMenuActions, sMenuActions, sTMCaseDynamicResources->menuActionIndices); - Menu_InitCursor(sTMCaseDynamicResources->contextMenuWindowId, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sTMCaseDynamicResources->numMenuActions, 0); + Menu_InitCursor(sTMCaseDynamicResources->contextMenuWindowId, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sTMCaseDynamicResources->numMenuActions, 0); // Print label text next to the context window strbuf = Alloc(256); GetTMNumberAndMoveString(strbuf, gSpecialVar_ItemId); StringAppend(strbuf, gText_Var1IsSelected + 2); // +2 skips over the stringvar - TMCase_Print(WIN_SELECTED_MSG, FONT_2, strbuf, 0, 2, 1, 0, 0, COLOR_DARK); + TMCase_Print(WIN_SELECTED_MSG, FONT_NORMAL, strbuf, 0, 2, 1, 0, 0, COLOR_DARK); Free(strbuf); if (IS_HM(gSpecialVar_ItemId)) { @@ -1068,14 +1068,14 @@ static void Action_Give(u8 taskId) static void PrintError_ThereIsNoPokemon(u8 taskId) { - PrintMessageWithFollowupTask(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitButtonAfterErrorPrint); + PrintMessageWithFollowupTask(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitButtonAfterErrorPrint); } static void PrintError_ItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); - PrintMessageWithFollowupTask(taskId, FONT_2, gStringVar4, Task_WaitButtonAfterErrorPrint); + PrintMessageWithFollowupTask(taskId, FONT_NORMAL, gStringVar4, Task_WaitButtonAfterErrorPrint); } static void Task_WaitButtonAfterErrorPrint(u8 taskId) @@ -1221,7 +1221,7 @@ static void Task_InitQuantitySelectUI(u8 taskId) TMCase_SetWindowBorder1(WIN_SELL_QUANTITY); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - TMCase_Print(WIN_SELL_QUANTITY, FONT_0, gStringVar4, 4, 10, 1, 0, 0, COLOR_DARK); + TMCase_Print(WIN_SELL_QUANTITY, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, COLOR_DARK); SellTM_PrintQuantityAndSalePrice(1, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)) / 2 * tQuantitySelected); PrintPlayersMoney(); CreateQuantityScrollArrows(); @@ -1235,7 +1235,7 @@ static void SellTM_PrintQuantityAndSalePrice(s16 quantity, s32 amount) FillWindowPixelBuffer(WIN_SELL_QUANTITY, 0x11); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - TMCase_Print(WIN_SELL_QUANTITY, FONT_0, gStringVar4, 4, 10, 1, 0, 0, COLOR_DARK); + TMCase_Print(WIN_SELL_QUANTITY, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, COLOR_DARK); PrintMoneyAmount(WIN_SELL_QUANTITY, 0x38, 0x0A, amount, 0); } @@ -1282,7 +1282,7 @@ static void Task_PrintSaleConfirmedText(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)) / 2 * tQuantitySelected, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - PrintMessageWithFollowupTask(taskId, FONT_2, gStringVar4, Task_DoSaleOfTMs); + PrintMessageWithFollowupTask(taskId, FONT_NORMAL, gStringVar4, Task_DoSaleOfTMs); } static void Task_DoSaleOfTMs(u8 taskId) @@ -1418,7 +1418,7 @@ static void Task_Pokedude_Run(u8 taskId) break; case 8: SetDescriptionWindowShade(1); - PrintMessageWithFollowupTask(taskId, FONT_4, gPokedudeText_TMTypes, NULL); + PrintMessageWithFollowupTask(taskId, FONT_MALE, gPokedudeText_TMTypes, NULL); gTasks[taskId].func = Task_Pokedude_Run; tPokedudeState++; break; @@ -1440,7 +1440,7 @@ static void Task_Pokedude_Run(u8 taskId) break; case 18: SetDescriptionWindowShade(1); - PrintMessageWithFollowupTask(taskId, FONT_4, gPokedudeText_ReadTMDescription, NULL); + PrintMessageWithFollowupTask(taskId, FONT_MALE, gPokedudeText_ReadTMDescription, NULL); gTasks[taskId].func = Task_Pokedude_Run; // this function tPokedudeState++; break; @@ -1523,8 +1523,8 @@ static void PrintMessageWithFollowupTask(u8 taskId, u8 fontId, const u8 * str, T static void PrintTitle(void) { - u32 distance = 72 - GetStringWidth(FONT_1, gText_TMCase, 0); - AddTextPrinterParameterized3(WIN_TITLE, FONT_1, distance / 2, 1, sTextColors[COLOR_LIGHT], 0, gText_TMCase); + u32 distance = 72 - GetStringWidth(FONT_NORMAL_COPY_1, gText_TMCase, 0); + AddTextPrinterParameterized3(WIN_TITLE, FONT_NORMAL_COPY_1, distance / 2, 1, sTextColors[COLOR_LIGHT], 0, gText_TMCase); } static void DrawMoveInfoLabels(void) @@ -1546,7 +1546,7 @@ static void PrintMoveInfo(u16 itemId) if (itemId == ITEM_NONE) { for (i = 0; i < 4; i++) - TMCase_Print(WIN_MOVE_INFO, FONT_3, gText_ThreeHyphens, 7, 12 * i, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + TMCase_Print(WIN_MOVE_INFO, FONT_NORMAL_COPY_2, gText_ThreeHyphens, 7, 12 * i, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); CopyWindowToVram(WIN_MOVE_INFO, COPYWIN_GFX); } else @@ -1563,7 +1563,7 @@ static void PrintMoveInfo(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); str = gStringVar1; } - TMCase_Print(WIN_MOVE_INFO, FONT_3, str, 7, 12, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + TMCase_Print(WIN_MOVE_INFO, FONT_NORMAL_COPY_2, str, 7, 12, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); // Print accuracy if (gBattleMoves[move].accuracy == 0) @@ -1573,11 +1573,11 @@ static void PrintMoveInfo(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); str = gStringVar1; } - TMCase_Print(WIN_MOVE_INFO, FONT_3, str, 7, 24, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + TMCase_Print(WIN_MOVE_INFO, FONT_NORMAL_COPY_2, str, 7, 24, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); // Print PP ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, STR_CONV_MODE_RIGHT_ALIGN, 3); - TMCase_Print(WIN_MOVE_INFO, FONT_3, gStringVar1, 7, 36, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); + TMCase_Print(WIN_MOVE_INFO, FONT_NORMAL_COPY_2, gStringVar1, 7, 36, 0, 0, TEXT_SKIP_DRAW, COLOR_MOVE_INFO); CopyWindowToVram(WIN_MOVE_INFO, COPYWIN_GFX); } @@ -1595,7 +1595,7 @@ static void PrintPlayersMoney(void) static void HandleCreateYesNoMenu(u8 taskId, const struct YesNoFuncTable *ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &sYesNoWindowTemplate, FONT_2, 0, 2, 91, 14, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sYesNoWindowTemplate, FONT_NORMAL, 0, 2, 91, 14, ptrs); } static u8 AddContextMenu(u8 * windowId, u8 windowIndex) diff --git a/src/trade.c b/src/trade.c index 729adb77f..a9b0a0fa8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -891,7 +891,7 @@ static void CB2_ReturnFromLinkTrade2(void) break; case 12: name = gSaveBlock2Ptr->playerName; - width = GetStringWidth(FONT_1, name, 0); + width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { @@ -901,7 +901,7 @@ static void CB2_ReturnFromLinkTrade2(void) } id = GetMultiplayerId(); name = gLinkPlayers[id ^ 1].name; - width = GetStringWidth(FONT_1, name, 0); + width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { @@ -1086,7 +1086,7 @@ void CB2_ReturnToTradeMenuFromSummary(void) break; case 12: name = gSaveBlock2Ptr->playerName; - width = GetStringWidth(FONT_1, name, 0); + width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { @@ -1096,7 +1096,7 @@ void CB2_ReturnToTradeMenuFromSummary(void) } id = GetMultiplayerId(); name = gLinkPlayers[id ^ 1].name; - width = GetStringWidth(FONT_1, name, 0); + width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { @@ -1719,8 +1719,8 @@ static void TradeMenuCB_0(void) { DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); - UnionRoomAndTradeMenuPrintOptions(1, FONT_3, 16, 2, sMenuAction_SummaryTrade); - Menu_InitCursor(1, FONT_3, 0, 0, 16, 2, 0); + UnionRoomAndTradeMenuPrintOptions(1, FONT_NORMAL_COPY_2, 16, 2, sMenuAction_SummaryTrade); + Menu_InitCursor(1, FONT_NORMAL_COPY_2, 0, 0, 16, 2, 0); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_FULL); sTradeMenuResourcesPtr->tradeMenuCBnum = 1; @@ -1732,7 +1732,7 @@ static void TradeMenuCB_0(void) } else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition == 12) { - CreateYesNoMenu(&sWindowTemplate_YesNo, FONT_3, 0, 2, 0x001, 14, 0); + CreateYesNoMenu(&sWindowTemplate_YesNo, FONT_NORMAL_COPY_2, 0, 2, 0x001, 14, 0); sTradeMenuResourcesPtr->tradeMenuCBnum = 4; RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_ASKCANCEL], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->cursorStartTile * 32, 24); } @@ -1946,7 +1946,7 @@ static void TradeMenuCB_14(void) if (sTradeMenuResourcesPtr->loadUISpritesState > 120) { - CreateYesNoMenu(&sWindowTemplate_YesNo, FONT_3, 0, 2, 1, 14, 0); + CreateYesNoMenu(&sWindowTemplate_YesNo, FONT_NORMAL_COPY_2, 0, 2, 1, 14, 0); sTradeMenuResourcesPtr->loadUISpritesState = 0; sTradeMenuResourcesPtr->tradeMenuCBnum = 3; } @@ -2150,9 +2150,9 @@ static void HandleRedrawTradeMenuOnSide(u8 side) gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].x2 = 0; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].y2 = 0; nameStringWidth = GetNicknameStringWidthByPartyAndMonIdx(nickname, whichParty, partyIdx); - AddTextPrinterParameterized3((side * 2) + 14, FONT_0, (80 - nameStringWidth) / 2, 4, sTextColor_PartyMonNickname, 0, nickname); + AddTextPrinterParameterized3((side * 2) + 14, FONT_SMALL, (80 - nameStringWidth) / 2, 4, sTextColor_PartyMonNickname, 0, nickname); BuildMovesString(movesString, whichParty, partyIdx); - AddTextPrinterParameterized4((side * 2) + 15, FONT_1, 0, 0, 0, 0, sTextColor_PartyMonNickname, 0, movesString); + AddTextPrinterParameterized4((side * 2) + 15, FONT_NORMAL_COPY_1, 0, 0, 0, 0, sTextColor_PartyMonNickname, 0, movesString); PutWindowTilemap((side * 2) + 14); CopyWindowToVram((side * 2) + 14, COPYWIN_FULL); PutWindowTilemap((side * 2) + 15); @@ -2174,7 +2174,7 @@ static u8 GetNicknameStringWidthByPartyAndMonIdx(u8 *dest, u8 whichParty, u8 par else GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(dest, nickname); - return GetStringWidth(FONT_0, dest, GetFontAttribute(FONT_0, FONTATTR_LETTER_SPACING)); + return GetStringWidth(FONT_SMALL, dest, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING)); } static void BuildMovesString(u8 *movesString, u8 whichParty, u8 whichMon) @@ -2221,8 +2221,8 @@ static void PrintPartyMonNickname(u8 whichParty, u8 windowId, const u8 *str) s8 speed; windowId += (whichParty * PARTY_SIZE) + 2; speed = 0; - xPos = (64u - GetStringWidth(FONT_0, str, GetFontAttribute(FONT_0, FONTATTR_LETTER_SPACING))) / 2; - AddTextPrinterParameterized3(windowId, FONT_0, xPos, 4, sTextColor_PartyMonNickname, speed, str); + xPos = (64u - GetStringWidth(FONT_SMALL, str, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING))) / 2; + AddTextPrinterParameterized3(windowId, FONT_SMALL, xPos, 4, sTextColor_PartyMonNickname, speed, str); PutWindowTilemap(windowId); CopyWindowToVram(windowId, COPYWIN_FULL); } @@ -2432,7 +2432,7 @@ static void RunScheduledLinkTasks(void) static void PrintTradeErrorOrStatusMessage(u8 idx) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, FONT_3, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL_COPY_2, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); DrawTextBorderOuter(0, 0x014, 12); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); diff --git a/src/trade_scene.c b/src/trade_scene.c index 50f8e4780..2adacdea6 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -2765,7 +2765,7 @@ void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) sTradeData->textColor[0] = 15; sTradeData->textColor[1] = 1; sTradeData->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, FONT_2, 0, 2, 0, 2, sTradeData->textColor, speed, str); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 2, sTradeData->textColor, speed, str); CopyWindowToVram(windowId, COPYWIN_FULL); } diff --git a/src/trainer_card.c b/src/trainer_card.c index ec7192400..765c48cd3 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -274,7 +274,7 @@ static const u16 *const sKantoTrainerCardStarPals[] = static const u8 sTrainerCardTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; 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[] = {FONT_0, FONT_2, FONT_0}; +static const u8 sTrainerCardFontIds[] = {FONT_SMALL, FONT_NORMAL, FONT_SMALL}; static const u8 sTrainerPicOffsets[2][GENDER_COUNT][2] = { @@ -620,7 +620,7 @@ static void Task_TrainerCard(u8 taskId) case STATE_WAIT_LINK_PARTNER: SetCloseLinkCallback(); DrawDialogueFrame(0, 1); - AddTextPrinterParameterized(0, FONT_2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SKIP_DRAW, 0); CopyWindowToVram(0, COPYWIN_FULL); sTrainerCardDataPtr->mainState = STATE_CLOSE_CARD_LINK; break; @@ -1237,16 +1237,16 @@ static void PrintProfilePhraseOnCard(void) { if (sTrainerCardDataPtr->isLink) { - AddTextPrinterParameterized3(1, FONT_2, 10, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], + AddTextPrinterParameterized3(1, FONT_NORMAL, 10, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SKIP_DRAW, sTrainerCardDataPtr->easyChatProfile[0]); - AddTextPrinterParameterized3(1, FONT_2, GetStringWidth(FONT_2, sTrainerCardDataPtr->easyChatProfile[0], 0) + 16, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], + AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sTrainerCardDataPtr->easyChatProfile[0], 0) + 16, sTrainerCardProfilePhraseXPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SKIP_DRAW, sTrainerCardDataPtr->easyChatProfile[1]); - AddTextPrinterParameterized3(1, FONT_2, 10, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], + AddTextPrinterParameterized3(1, FONT_NORMAL, 10, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SKIP_DRAW, sTrainerCardDataPtr->easyChatProfile[2]); - AddTextPrinterParameterized3(1, FONT_2, GetStringWidth(FONT_2, sTrainerCardDataPtr->easyChatProfile[2], 0) + 16, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], + AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sTrainerCardDataPtr->easyChatProfile[2], 0) + 16, sTrainerCardProfilePhraseYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SKIP_DRAW, sTrainerCardDataPtr->easyChatProfile[3]); } } diff --git a/src/trainer_tower.c b/src/trainer_tower.c index b0f6dcb23..fd0bc4a0a 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -632,7 +632,7 @@ static void TT_ConvertEasyChatMessageToString(u16 *ecWords, u8 *dest) { s32 i; ConvertEasyChatWordsToString(dest, ecWords, 3, 2); - if ((unsigned)GetStringWidth(FONT_2, dest, -1) > 196) + if ((unsigned)GetStringWidth(FONT_NORMAL, dest, -1) > 196) { // Has to be printed 2x3 ConvertEasyChatWordsToString(dest, ecWords, 2, 3); @@ -905,15 +905,15 @@ static void ShowResultsBoard(void) windowId = AddWindow(sTimeBoardWindowTemplate); LoadStdWindowFrameGfx(); DrawStdWindowFrame(windowId, FALSE); - AddTextPrinterParameterized(windowId, FONT_2, gText_TimeBoard, 74, 0, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_TimeBoard, 74, 0, TEXT_SKIP_DRAW, NULL); for (i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++) { PRINT_TOWER_TIME(GetTrainerTowerRecordTime(&TRAINER_TOWER.bestTime)); StringExpandPlaceholders(gStringVar4, gText_XMinYZSec); - AddTextPrinterParameterized(windowId, FONT_2, gTrainerTowerChallengeTypeTexts[i - 1], 24, 36 + 20 * i, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 96, 46 + 20 * i, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gTrainerTowerChallengeTypeTexts[i - 1], 24, 36 + 20 * i, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 96, 46 + 20 * i, TEXT_SKIP_DRAW, NULL); } PutWindowTilemap(windowId); @@ -1059,14 +1059,14 @@ void PrintTrainerTowerRecords(void) SetUpTrainerTowerDataStruct(); FillWindowPixelRect(0, PIXEL_FILL(0), 0, 0, 216, 144); ValidateOrResetCurTrainerTowerRecord(); - AddTextPrinterParameterized3(0, FONT_2, 0x4a, 0, sTextColors, 0, gText_TimeBoard); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x4a, 0, sTextColors, 0, gText_TimeBoard); for (i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++) { PRINT_TOWER_TIME(GetTrainerTowerRecordTime(&gSaveBlock1Ptr->trainerTower[i].bestTime)); StringExpandPlaceholders(gStringVar4, gText_XMinYZSec); - AddTextPrinterParameterized3(windowId, FONT_2, 0x18, 0x24 + 0x14 * i, sTextColors, 0, gTrainerTowerChallengeTypeTexts[i]); - AddTextPrinterParameterized3(windowId, FONT_2, 0x60, 0x24 + 0x14 * i, sTextColors, 0, gStringVar4); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 0x18, 0x24 + 0x14 * i, sTextColors, 0, gTrainerTowerChallengeTypeTexts[i]); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 0x60, 0x24 + 0x14 * i, sTextColors, 0, gStringVar4); } PutWindowTilemap(windowId); diff --git a/src/union_room.c b/src/union_room.c index 8b8410e3d..613f9a130 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -307,16 +307,16 @@ static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 string switch (capacityCode << 8) { case LINK_GROUP_CAPACITY(0, 2): - PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[0][stringId - 1], 0, 2, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_NORMAL, gTexts_UR_PlayersNeededOrMode[0][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(0, 4): - PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[1][stringId - 1], 0, 2, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_NORMAL, gTexts_UR_PlayersNeededOrMode[1][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(2, 5): - PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[2][stringId - 1], 0, 2, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_NORMAL, gTexts_UR_PlayersNeededOrMode[2][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(3, 5): - PrintUnionRoomText(windowId, FONT_2, gTexts_UR_PlayersNeededOrMode[3][stringId - 1], 0, 2, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_NORMAL, gTexts_UR_PlayersNeededOrMode[3][stringId - 1], 0, 2, UR_COLOR_DEFAULT); break; } @@ -328,11 +328,11 @@ static void PrintPlayerNameAndIdOnWindow(u8 windowId) u8 text[12]; u8 text2[12]; - PrintUnionRoomText(windowId, FONT_2, gSaveBlock2Ptr->playerName, 0, 2, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_NORMAL, gSaveBlock2Ptr->playerName, 0, 2, UR_COLOR_DEFAULT); StringCopy(text2, gText_UR_ID); ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); StringAppend(text2, text); - PrintUnionRoomText(windowId, FONT_0, text2, 0, 16, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_SMALL, text2, 0, 16, UR_COLOR_DEFAULT); } static void GetAwaitingCommunicationText(u8 *dst, u8 caseId) @@ -406,7 +406,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode); FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); - PrintUnionRoomText(data->bButtonCancelWindowId, FONT_0, gText_UR_BButtonCancel, 8, 2, UR_COLOR_CANCEL); + PrintUnionRoomText(data->bButtonCancelWindowId, FONT_SMALL, gText_UR_BButtonCancel, 8, 2, UR_COLOR_CANCEL); PutWindowTilemap(data->bButtonCancelWindowId); CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX); @@ -941,7 +941,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_PlayerNameAndId); FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); - PrintUnionRoomText(data->bButtonCancelWindowId, FONT_0, gText_UR_ChooseJoinCancel, 8, 2, UR_COLOR_CANCEL); + PrintUnionRoomText(data->bButtonCancelWindowId, FONT_SMALL, gText_UR_ChooseJoinCancel, 8, 2, UR_COLOR_CANCEL); PutWindowTilemap(data->bButtonCancelWindowId); CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX); @@ -3485,7 +3485,7 @@ static u8 CreateTradeBoardWindow(const struct WindowTemplate * template) u8 windowId = AddWindow(template); DrawStdWindowFrame(windowId, FALSE); FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - PrintUnionRoomText(windowId, FONT_0, gText_UR_NameWantedOfferLv, 8, 1, UR_COLOR_TRADE_BOARD_OTHER); + PrintUnionRoomText(windowId, FONT_SMALL, gText_UR_NameWantedOfferLv, 8, 1, UR_COLOR_TRADE_BOARD_OTHER); PutWindowTilemap(windowId); CopyWindowToVram(windowId, COPYWIN_GFX); return windowId; @@ -3795,18 +3795,18 @@ static void PrintGroupMemberOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlayer * ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, gText_UR_Colon); - PrintUnionRoomText(windowId, FONT_0, gStringVar4, x, y, UR_COLOR_DEFAULT); + PrintUnionRoomText(windowId, FONT_SMALL, gStringVar4, x, y, UR_COLOR_DEFAULT); x += 18; activity = player->rfu.data.activity; if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM)) { CopyAndTranslatePlayerName2(uname, *player); - PrintUnionRoomText(windowId, FONT_2, uname, x, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, uname, x, y, colorIdx); ConvertIntToDecimalStringN(trainerId, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gText_UR_ID); StringAppend(gStringVar4, trainerId); x += 77; - PrintUnionRoomText(windowId, FONT_0, gStringVar4, x, y, colorIdx); + PrintUnionRoomText(windowId, FONT_SMALL, gStringVar4, x, y, colorIdx); } } @@ -3818,12 +3818,12 @@ static void PrintGroupCandidateOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlaye if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { CopyAndTranslatePlayerName2(uname, *player); - PrintUnionRoomText(windowId, FONT_2, uname, x, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, uname, x, y, colorIdx); ConvertIntToDecimalStringN(id_str, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gText_UR_ID); StringAppend(gStringVar4, id_str); x += 71; - PrintUnionRoomText(windowId, FONT_0, gStringVar4, x, y, colorIdx); + PrintUnionRoomText(windowId, FONT_SMALL, gStringVar4, x, y, colorIdx); } } @@ -3927,17 +3927,17 @@ static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * data u8 type = data->tradeType; u8 level = data->tradeLevel; - PrintUnionRoomText(windowId, FONT_2, playerName, 8, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, playerName, 8, y, colorIdx); if (species == SPECIES_EGG) { - PrintUnionRoomText(windowId, FONT_2, gText_UR_EggTrade, 68, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, gText_UR_EggTrade, 68, y, colorIdx); } else { BlitMoveInfoIcon(windowId, type + 1, 68, y); - PrintUnionRoomText(windowId, FONT_2, gSpeciesNames[species], 118, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, gSpeciesNames[species], 118, y, colorIdx); ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_LEFT_ALIGN, 3); - PrintUnionRoomText(windowId, FONT_2, levelStr, GetStringRightAlignXOffset(2, levelStr, 218), y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, levelStr, GetStringRightAlignXOffset(2, levelStr, 218), y, colorIdx); } } diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 9d2b8a756..453e31097 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -67,7 +67,7 @@ static void UnionRoomBattle_CreateTextPrinter(u8 windowId, const u8 * str, u8 x, s32 letterSpacing = 1; s32 lineSpacing = 1; FillWindowPixelBuffer(windowId, PIXEL_FILL(sTextColors[0])); - AddTextPrinterParameterized4(windowId, FONT_3, x, y, letterSpacing, lineSpacing, sTextColors, speed, str); + AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_2, x, y, letterSpacing, lineSpacing, sTextColors, speed, str); } static bool32 UnionRoomBattle_PrintTextOnWindow0(s16 * state, const u8 * str, s32 speed) diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index bda658f30..b129c6c87 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -952,10 +952,10 @@ static void PlaceYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos) { FillWindowPixelBuffer(sWork->yesNoMenuWinId, PIXEL_FILL(1)); PutWindowTilemap(sWork->yesNoMenuWinId); - AddTextPrinterParameterized(sWork->yesNoMenuWinId, FONT_2, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL); - AddTextPrinterParameterized(sWork->yesNoMenuWinId, FONT_2, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, FONT_NORMAL, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, FONT_NORMAL, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(sWork->yesNoMenuWinId, 1, 13); - Menu_InitCursor(sWork->yesNoMenuWinId, FONT_2, 0, 2, 14, 2, initialCursorPos); + Menu_InitCursor(sWork->yesNoMenuWinId, FONT_NORMAL, 0, 2, 14, 2, initialCursorPos); } } @@ -1023,7 +1023,7 @@ static void PlaceStdMessageWindow(int id, u16 bg0vofs) DrawTextBorderInner(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, - FONT_2, + FONT_NORMAL, str, sMessageWindowInfo[id].x + 8, sMessageWindowInfo[id].y + 8, @@ -1037,7 +1037,7 @@ static void PlaceStdMessageWindow(int id, u16 bg0vofs) DrawTextBorderOuter(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, - FONT_2, + FONT_NORMAL, str, sMessageWindowInfo[id].x, sMessageWindowInfo[id].y, @@ -1090,7 +1090,7 @@ static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 strbuf[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; strbuf[2] = 8; StringCopy(&strbuf[3], str); - AddTextPrinterParameterized3(1, FONT_2, x * 8, 1, color, TEXT_SKIP_DRAW, strbuf); + AddTextPrinterParameterized3(1, FONT_NORMAL, x * 8, 1, color, TEXT_SKIP_DRAW, strbuf); } static void PrintCurrentKeyboardPage(void) @@ -1124,7 +1124,7 @@ static void PrintCurrentKeyboardPage(void) return; StringCopy(&str[3], gUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, FONT_0, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); } } else @@ -1133,9 +1133,9 @@ static void PrintCurrentKeyboardPage(void) for (i = 0, top = 0; i < 10; i++, top += 12) { str2 = UnionRoomChat_GetWorkRegisteredText(i); - if (GetStringWidth(FONT_0, str2, 0) <= 40) + if (GetStringWidth(FONT_SMALL, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, FONT_0, left, top, color, TEXT_SKIP_DRAW, str2); + AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); } else { @@ -1144,10 +1144,10 @@ static void PrintCurrentKeyboardPage(void) { length--; StringCopyN_Multibyte(str, str2, length); - } while (GetStringWidth(FONT_0, str, 0) > 35); + } while (GetStringWidth(FONT_SMALL, str, 0) > 35); - AddTextPrinterParameterized3(2, FONT_0, left, top, color, TEXT_SKIP_DRAW, str); - AddTextPrinterParameterized3(2, FONT_0, left + 35, top, color, TEXT_SKIP_DRAW, gText_Ellipsis); + AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(2, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, gText_Ellipsis); } } } @@ -1195,8 +1195,8 @@ static void PrintKeyboardSwapTextsOnWin3(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); - UnionRoomAndTradeMenuPrintOptions(3, FONT_2, 14, 5, sKeyboardSwapTexts); - Menu_InitCursor(3, FONT_2, 0, 0, 14, 5, GetCurrentKeyboardPage()); + UnionRoomAndTradeMenuPrintOptions(3, FONT_NORMAL, 14, 5, sKeyboardSwapTexts); + Menu_InitCursor(3, FONT_NORMAL, 0, 0, 14, 5, GetCurrentKeyboardPage()); PutWindowTilemap(3); } @@ -1214,7 +1214,7 @@ static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx) color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); - AddTextPrinterParameterized3(0, FONT_2, 0, row * 15, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0, row * 15, color, TEXT_SKIP_DRAW, str); } static void ResetGpuBgState(void) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index b1d928fff..be6b11baa 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -751,12 +751,12 @@ void Task_VsSeeker_0(u8 taskId) if (respval == VSSEEKER_NOT_CHARGED) { Free(sVsSeeker); - DisplayItemMessageOnField(taskId, FONT_2, VSSeeker_Text_BatteryNotChargedNeedXSteps, Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker); + DisplayItemMessageOnField(taskId, FONT_NORMAL, VSSeeker_Text_BatteryNotChargedNeedXSteps, Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker); } else if (respval == VSSEEKER_NO_ONE_IN_RANGE) { Free(sVsSeeker); - DisplayItemMessageOnField(taskId, FONT_2, VSSeeker_Text_NoTrainersWithinRange, Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker); + DisplayItemMessageOnField(taskId, FONT_NORMAL, VSSeeker_Text_NoTrainersWithinRange, Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker); } else if (respval == VSSEEKER_CAN_USE) { @@ -829,7 +829,7 @@ static void Task_VsSeeker_3(u8 taskId) { if (sVsSeeker->responseCode == VSSEEKER_RESPONSE_NO_RESPONSE) { - DisplayItemMessageOnField(taskId, FONT_2, VSSeeker_Text_TrainersNotReady, Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker); + DisplayItemMessageOnField(taskId, FONT_NORMAL, VSSeeker_Text_TrainersNotReady, Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker); } else { diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 971db680f..eb4ef03f9 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -260,15 +260,15 @@ static void PrintHeaderTexts(void) FillWindowPixelBuffer(2, PIXEL_FILL(0)); // Print title - width = 192 - GetStringWidth(FONT_3, sHeaderTexts[0], 0); - WCSS_AddTextPrinterParameterized(0, FONT_3, sHeaderTexts[0], width / 2, 6, COLOR_TITLE); + width = 192 - GetStringWidth(FONT_NORMAL_COPY_2, sHeaderTexts[0], 0); + WCSS_AddTextPrinterParameterized(0, FONT_NORMAL_COPY_2, sHeaderTexts[0], width / 2, 6, COLOR_TITLE); // Print label for each group (excluding total) for (i = 0; i < NUM_GROUPTYPES - 1; i++) - WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_NORMAL); + WCSS_AddTextPrinterParameterized(1, FONT_NORMAL_COPY_2, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_NORMAL); // Print label for total - WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_TOTAL); + WCSS_AddTextPrinterParameterized(1, FONT_NORMAL_COPY_2, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_TOTAL); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_GFX); @@ -306,9 +306,9 @@ static void Task_WirelessCommunicationScreen(u8 taskId) { ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); if (i != GROUPTYPE_TOTAL) - WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 30 * i + 10, COLOR_NORMAL); + WCSS_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_2, gStringVar4, 4, 30 * i + 10, COLOR_NORMAL); else - WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 100, COLOR_TOTAL); + WCSS_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_2, gStringVar4, 4, 100, COLOR_TOTAL); } PutWindowTilemap(2); CopyWindowToVram(2, COPYWIN_FULL); @@ -367,7 +367,7 @@ static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * break; // default: UB } - AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_SMALL ? 0 : 1, 0, textColor, TEXT_SKIP_DRAW, str); } static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * groupCounts) From 94560af99c9b3fe51343aece199f7c363ff368c2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Nov 2022 14:32:58 -0500 Subject: [PATCH 39/42] Remaining text sync/doc --- graphics/fonts/test.png | Bin 0 -> 160 bytes include/text.h | 3 +- src/braille_text.c | 329 +++++++++++++++++++--------------------- src/field_specials.c | 2 +- src/oak_speech.c | 4 +- src/text.c | 85 ++++++----- 6 files changed, 208 insertions(+), 215 deletions(-) create mode 100644 graphics/fonts/test.png diff --git a/graphics/fonts/test.png b/graphics/fonts/test.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cba25f36a8191712007f802834740aebf7b375 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU{SO97Nl90)o_)r_@qcfz z!W@n%-=-J_on3PD8&DM*IQC=j51^2?r;B3<$IRq}1H4lj9E6X|U`aW{VrbFGBrKue nWUSa_v5<*}$M~a!s|f>x=0Dbtlk`Q>Kqh&*`njxgN@xNASoSdL literal 0 HcmV?d00001 diff --git a/include/text.h b/include/text.h index 800ebef28..7090a029b 100644 --- a/include/text.h +++ b/include/text.h @@ -189,8 +189,7 @@ void DecompressGlyph_Small(u16 glyphId, bool32 isJapanese); void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese); void DecompressGlyph_Female(u16 glyphId, bool32 isJapanese); s32 GetGlyphWidth_Braille(u16 font_type, bool32 isJapanese); -void sub_80062B0(struct Sprite *sprite); -u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority); +u8 CreateTextCursorSprite(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority); void DestroyTextCursorSprite(u8 spriteId); #endif // GUARD_TEXT_H diff --git a/src/braille_text.c b/src/braille_text.c index 823a62ad5..d4afdf87f 100644 --- a/src/braille_text.c +++ b/src/braille_text.c @@ -4,6 +4,9 @@ #include "text.h" #include "sound.h" +// This file handles the braille font. +// For printing braille messages, see ScrCmd_braillemessage + static const u8 sScrollDistances[] = { [OPTIONS_TEXT_SPEED_SLOW] = 1, [OPTIONS_TEXT_SPEED_MID] = 2, @@ -16,192 +19,178 @@ static void DecompressGlyph_Braille(u16); u16 FontFunc_Braille(struct TextPrinter *textPrinter) { u16 char_; - struct TextPrinterSubStruct *sub; + struct TextPrinterSubStruct *sub = &textPrinter->subUnion.sub; - sub = &textPrinter->subUnion.sub; switch (textPrinter->state) { - case 0: - if (gMain.heldKeys & (A_BUTTON | B_BUTTON) && sub->hasPrintBeenSpedUp) + case RENDER_STATE_HANDLE_CHAR: + if (JOY_HELD(A_BUTTON | B_BUTTON) && sub->hasPrintBeenSpedUp) + { + textPrinter->delayCounter = 0; + } + if (textPrinter->delayCounter && textPrinter->textSpeed) + { + textPrinter->delayCounter--; + if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON)) { + sub->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; } - if (textPrinter->delayCounter && textPrinter->textSpeed) - { - textPrinter->delayCounter --; - if (gTextFlags.canABSpeedUpPrint && gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sub->hasPrintBeenSpedUp = TRUE; - textPrinter->delayCounter = 0; - } - return 3; - } - if (gTextFlags.autoScroll) - { - textPrinter->delayCounter = 1; - } - else - { - textPrinter->delayCounter = textPrinter->textSpeed; - } + return RENDER_UPDATE; + } + if (gTextFlags.autoScroll) + textPrinter->delayCounter = 1; + else + textPrinter->delayCounter = textPrinter->textSpeed; + + char_ = *textPrinter->printerTemplate.currentChar++; + switch (char_) + { + case EOS: + return RENDER_FINISH; + case CHAR_NEWLINE: + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; + textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; + return RENDER_REPEAT; + case PLACEHOLDER_BEGIN: + textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_BEGIN: char_ = *textPrinter->printerTemplate.currentChar++; switch (char_) { - case EOS: - return 1; - case CHAR_NEWLINE: - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; - return 2; - case PLACEHOLDER_BEGIN: - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_BEGIN: - char_ = *textPrinter->printerTemplate.currentChar++; - switch (char_) - { - case 1: - textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 2: - textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 3: - textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 4: - textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; + case EXT_CTRL_CODE_COLOR: + textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++; + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_HIGHLIGHT: + textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++; + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_SHADOW: + textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++; + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: + textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 5: - textPrinter->printerTemplate.currentChar++; - return 2; - case 6: - sub->glyphId = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - return 2; - case 7: - return 2; - case 8: - textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++; - textPrinter->state = 6; - return 2; - case 9: - textPrinter->state = 1; - if (gTextFlags.autoScroll) - { - sub->autoScrollDelay = 0; - } - return 3; - case 10: - textPrinter->state = 5; - return 3; - case 11: - case 16: - textPrinter->printerTemplate.currentChar += 2; - return 2; - case 12: - char_ = *++textPrinter->printerTemplate.currentChar; - break; - case 13: - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++; - return 2; - case 14: - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++; - return 2; - case 15: - FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - return 2; - } - break; - case CHAR_PROMPT_CLEAR: - textPrinter->state = 2; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case CHAR_PROMPT_SCROLL: - textPrinter->state = 3; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case CHAR_EXTRA_SYMBOL: - char_ = *textPrinter->printerTemplate.currentChar++| 0x100; - break; - case CHAR_KEYPAD_ICON: - textPrinter->printerTemplate.currentChar++; - return 0; - } - DecompressGlyph_Braille(char_); - CopyGlyphToWindow(textPrinter); - textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing; - return 0; - case 1: - if (TextPrinterWait(textPrinter)) - { - textPrinter->state = 0; - } - return 3; - case 2: - if (TextPrinterWaitWithDownArrow(textPrinter)) - { + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_PALETTE: + textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_FONT: + sub->glyphId = *textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_RESET_FONT: + return RENDER_REPEAT; + case EXT_CTRL_CODE_PAUSE: + textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++; + textPrinter->state = RENDER_STATE_PAUSE; + return RENDER_REPEAT; + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: + textPrinter->state = RENDER_STATE_WAIT; + if (gTextFlags.autoScroll) + sub->autoScrollDelay = 0; + return RENDER_UPDATE; + case EXT_CTRL_CODE_WAIT_SE: + textPrinter->state = RENDER_STATE_WAIT_SE; + return RENDER_UPDATE; + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: + textPrinter->printerTemplate.currentChar += 2; + return RENDER_REPEAT; + case EXT_CTRL_CODE_ESCAPE: + char_ = *++textPrinter->printerTemplate.currentChar; + break; + case EXT_CTRL_CODE_SHIFT_RIGHT: + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_SHIFT_DOWN: + textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_FILL_WINDOW: FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - textPrinter->state = 0; + return RENDER_REPEAT; } - return 3; - case 3: - if (TextPrinterWaitWithDownArrow(textPrinter)) + break; + case CHAR_PROMPT_CLEAR: + textPrinter->state = RENDER_STATE_CLEAR; + TextPrinterInitDownArrowCounters(textPrinter); + return RENDER_UPDATE; + case CHAR_PROMPT_SCROLL: + textPrinter->state = RENDER_STATE_SCROLL_START; + TextPrinterInitDownArrowCounters(textPrinter); + return RENDER_UPDATE; + case CHAR_EXTRA_SYMBOL: + char_ = *textPrinter->printerTemplate.currentChar++| 0x100; + break; + case CHAR_KEYPAD_ICON: + textPrinter->printerTemplate.currentChar++; + return RENDER_PRINT; + } + DecompressGlyph_Braille(char_); + CopyGlyphToWindow(textPrinter); + textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing; + return RENDER_PRINT; + case RENDER_STATE_WAIT: + if (TextPrinterWait(textPrinter)) + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_CLEAR: + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; + textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + } + return RENDER_UPDATE; + case RENDER_STATE_SCROLL_START: + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + TextPrinterClearDownArrow(textPrinter); + textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; + textPrinter->state = RENDER_STATE_SCROLL; + } + return RENDER_UPDATE; + case RENDER_STATE_SCROLL: + if (textPrinter->scrollDistance) + { + if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]) { - TextPrinterClearDownArrow(textPrinter); - textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->state = 4; - } - return 3; - case 4: - if (textPrinter->scrollDistance) - { - if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]) - { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance = 0; - } - else - { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]; - } - CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); + ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->scrollDistance = 0; } else { - textPrinter->state = 0; + ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]; } - return 3; - case 5: - if (!IsSEPlaying()) - { - textPrinter->state = 0; - } - return 3; - case 6: - if (textPrinter->delayCounter) - { - textPrinter->delayCounter --; - } - else - { - textPrinter->state = 0; - } - return 3; + CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); + } + else + { + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + } + return RENDER_UPDATE; + case RENDER_STATE_WAIT_SE: + if (!IsSEPlaying()) + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_PAUSE: + if (textPrinter->delayCounter) + textPrinter->delayCounter--; + else + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; } - return 1; + return RENDER_FINISH; } static void DecompressGlyph_Braille(u16 glyph) @@ -213,8 +202,8 @@ static void DecompressGlyph_Braille(u16 glyph) DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40)); DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60)); - gGlyphInfo.width = 0x10; - gGlyphInfo.height = 0x10; + gGlyphInfo.width = 16; + gGlyphInfo.height = 16; } s32 GetGlyphWidth_Braille(u16 font_type, bool32 isJapanese) diff --git a/src/field_specials.c b/src/field_specials.c index 3bf282cda..5af58cab2 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2487,7 +2487,7 @@ void BrailleCursorToggle(void) { x = gSpecialVar_0x8004 + 27; if (gSpecialVar_0x8006 == 0) - sBrailleTextCursorSpriteID = CreateTextCursorSpriteForOakSpeech(0, x, gSpecialVar_0x8005, 0, 0); + sBrailleTextCursorSpriteID = CreateTextCursorSprite(0, x, gSpecialVar_0x8005, 0, 0); else DestroyTextCursorSprite(sBrailleTextCursorSpriteID); } diff --git a/src/oak_speech.c b/src/oak_speech.c index f16fd35a6..7f10528f6 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -569,7 +569,7 @@ static void Task_OaksSpeech1(u8 taskId) FillBgTilemapBufferRect_Palette0(1, 0xD00E, 0, 19, 30, 1); CreateHelpDocsPage1(); gPaletteFade.bufferTransferDisabled = FALSE; - gTasks[taskId].data[5] = CreateTextCursorSpriteForOakSpeech(0, 0xE6, 0x95, 0, 0); + gTasks[taskId].data[5] = CreateTextCursorSprite(0, 0xE6, 0x95, 0, 0); BlendPalettes(PALETTES_ALL, 0x10, 0x00); break; case 10: @@ -748,7 +748,7 @@ static void Task_OakSpeech6(u8 taskId) gMain.state = 0; data[15] = 16; AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[0]); - data[5] = CreateTextCursorSpriteForOakSpeech(0, 0xe2, 0x91, 0, 0); + data[5] = CreateTextCursorSprite(0, 0xe2, 0x91, 0, 0); gSprites[data[5]].oam.objMode = ST_OAM_OBJ_BLEND; gSprites[data[5]].oam.priority = 0; CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(taskId, 0); diff --git a/src/text.c b/src/text.c index d1f5429a4..76739f8c6 100644 --- a/src/text.c +++ b/src/text.c @@ -6,6 +6,10 @@ #include "dynamic_placeholder_text_util.h" #include "constants/songs.h" +#define TAG_CURSOR 0x8000 + +#define CURSOR_DELAY 8 + extern const struct OamData gOamData_AffineOff_ObjNormal_16x16; static void DecompressGlyph_NormalCopy1(u16 glyphId, bool32 isJapanese); @@ -18,6 +22,7 @@ static s32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese); static s32 GetGlyphWidth_NormalCopy2(u16 glyphId, bool32 isJapanese); static s32 GetGlyphWidth_Male(u16 glyphId, bool32 isJapanese); static s32 GetGlyphWidth_Female(u16 glyphId, bool32 isJapanese); +static void SpriteCB_TextCursor(struct Sprite *sprite); TextFlags gTextFlags; @@ -45,28 +50,28 @@ static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { { FONT_BRAILLE, GetGlyphWidth_Braille } }; -static const struct SpriteSheet sUnknown_81EA68C[] = +static const struct SpriteSheet sSpriteSheets_TextCursor[] = { - {sDoubleArrowTiles1, sizeof(sDoubleArrowTiles1), 0x8000}, - {sDoubleArrowTiles2, sizeof(sDoubleArrowTiles2), 0x8000}, + {sDoubleArrowTiles1, sizeof(sDoubleArrowTiles1), TAG_CURSOR}, + {sDoubleArrowTiles2, sizeof(sDoubleArrowTiles2), TAG_CURSOR}, {NULL} }; -static const struct SpritePalette sUnknown_81EA6A4[] = +static const struct SpritePalette sSpritePalettes_TextCursor[] = { - {gStandardMenuPalette, 0x8000}, + {gStandardMenuPalette, TAG_CURSOR}, {NULL} }; -static const struct SpriteTemplate sUnknown_81EA6B4 = +static const struct SpriteTemplate sSpriteTemplate_TextCursor = { - .tileTag = 0x8000, - .paletteTag = 0x8000, + .tileTag = TAG_CURSOR, + .paletteTag = TAG_CURSOR, .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80062B0, + .callback = SpriteCB_TextCursor, }; struct @@ -509,7 +514,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) 12); CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2); - subStruct->downArrowDelay = 0x8; + subStruct->downArrowDelay = CURSOR_DELAY; subStruct->downArrowYPosIdx = (*(u32 *)subStruct << 17 >> 30) + 1; } } @@ -616,7 +621,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c 10, 12); CopyWindowToVram(windowId, 0x2); - *counter = 8; + *counter = CURSOR_DELAY; ++*yCoordIndex; } } @@ -1277,7 +1282,7 @@ u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, #define sDelay data[0] #define sState data[1] -void sub_80062B0(struct Sprite *sprite) +static void SpriteCB_TextCursor(struct Sprite *sprite) { if (sprite->sDelay) { @@ -1285,7 +1290,7 @@ void sub_80062B0(struct Sprite *sprite) } else { - sprite->sDelay = 8; + sprite->sDelay = CURSOR_DELAY; switch(sprite->sState) { case 0: @@ -1306,28 +1311,28 @@ void sub_80062B0(struct Sprite *sprite) } } -#undef sDelay -#undef sState - -u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority) +u8 CreateTextCursorSprite(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority) { u8 spriteId; - LoadSpriteSheet(&sUnknown_81EA68C[sheetId & 1]); - LoadSpritePalette(sUnknown_81EA6A4); - spriteId = CreateSprite(&sUnknown_81EA6B4, x + 3, y + 4, subpriority); + LoadSpriteSheet(&sSpriteSheets_TextCursor[sheetId & 1]); + LoadSpritePalette(&sSpritePalettes_TextCursor[0]); + spriteId = CreateSprite(&sSpriteTemplate_TextCursor, x + 3, y + 4, subpriority); gSprites[spriteId].oam.priority = (priority & 3); gSprites[spriteId].oam.matrixNum = 0; - gSprites[spriteId].data[0] = 8; + gSprites[spriteId].sDelay = CURSOR_DELAY; return spriteId; } void DestroyTextCursorSprite(u8 spriteId) { DestroySprite(&gSprites[spriteId]); - FreeSpriteTilesByTag(0x8000); - FreeSpritePaletteByTag(0x8000); + FreeSpriteTilesByTag(TAG_CURSOR); + FreeSpritePaletteByTag(TAG_CURSOR); } +#undef sDelay +#undef sState + u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y) { BlitBitmapRectToWindow( @@ -1429,9 +1434,9 @@ void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese) int i; u8 lastColor; - if(isJapanese == TRUE) + if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1456,7 +1461,7 @@ void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese) } else { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1485,7 +1490,7 @@ static s32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) return 10; return sFontNormalJapaneseGlyphWidths[glyphId]; @@ -1502,9 +1507,9 @@ static void DecompressGlyph_NormalCopy2(u16 glyphId, bool32 isJapanese) int i; u8 lastColor; - if(isJapanese == TRUE) + if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1533,7 +1538,7 @@ static void DecompressGlyph_NormalCopy2(u16 glyphId, bool32 isJapanese) static s32 GetGlyphWidth_NormalCopy2(u16 glyphId, bool32 isJapanese) { - if(isJapanese == TRUE) + if (isJapanese == TRUE) return 10; else return sFontNormalLatinGlyphWidths[glyphId]; @@ -1545,9 +1550,9 @@ static void DecompressGlyph_Male(u16 glyphId, bool32 isJapanese) int i; u8 lastColor; - if(isJapanese == TRUE) + if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1572,7 +1577,7 @@ static void DecompressGlyph_Male(u16 glyphId, bool32 isJapanese) } else { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1599,9 +1604,9 @@ static void DecompressGlyph_Male(u16 glyphId, bool32 isJapanese) static s32 GetGlyphWidth_Male(u16 glyphId, bool32 isJapanese) { - if(isJapanese == TRUE) + if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) return 10; return sFontMaleJapaneseGlyphWidths[glyphId]; @@ -1616,9 +1621,9 @@ void DecompressGlyph_Female(u16 glyphId, bool32 isJapanese) int i; u8 lastColor; - if(isJapanese == TRUE) + if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1643,7 +1648,7 @@ void DecompressGlyph_Female(u16 glyphId, bool32 isJapanese) } else { - if(glyphId == 0) + if (glyphId == 0) { lastColor = GetLastTextColor(2); @@ -1670,9 +1675,9 @@ void DecompressGlyph_Female(u16 glyphId, bool32 isJapanese) static s32 GetGlyphWidth_Female(u16 glyphId, bool32 isJapanese) { - if(isJapanese == TRUE) + if (isJapanese == TRUE) { - if(glyphId == 0) + if (glyphId == 0) return 10; return sFontFemaleJapaneseGlyphWidths[glyphId]; From f0974b6fe64c00dba6aa51ff129e2ff7e3a7f219 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Nov 2022 14:44:28 -0500 Subject: [PATCH 40/42] Remove test.png --- graphics/fonts/test.png | Bin 160 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 graphics/fonts/test.png diff --git a/graphics/fonts/test.png b/graphics/fonts/test.png deleted file mode 100644 index b6cba25f36a8191712007f802834740aebf7b375..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU{SO97Nl90)o_)r_@qcfz z!W@n%-=-J_on3PD8&DM*IQC=j51^2?r;B3<$IRq}1H4lj9E6X|U`aW{VrbFGBrKue nWUSa_v5<*}$M~a!s|f>x=0Dbtlk`Q>Kqh&*`njxgN@xNASoSdL From cf66ec69cdf015d29fecb495321141a9022c8b52 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 27 Nov 2022 13:54:28 -0500 Subject: [PATCH 41/42] Fix/sync calcrom --- .github/calcrom/calcrom.pl | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/.github/calcrom/calcrom.pl b/.github/calcrom/calcrom.pl index 8438ed491..ef0bf4149 100755 --- a/.github/calcrom/calcrom.pl +++ b/.github/calcrom/calcrom.pl @@ -68,6 +68,7 @@ while (my $line = <$file>) } my @sorted = sort { $a->[1] <=> $b->[1] } @pairs; +(my $elffname = $ARGV[0]) =~ s/\.map/.elf/; # Note that the grep filters out all branch labels. It also requires a minimum # line length of 5, to filter out a ton of generated symbols (like AcCn). No @@ -78,16 +79,17 @@ my @sorted = sort { $a->[1] <=> $b->[1] } @pairs; # # You'd expect this to take a while, because of uniq. It runs in under a second, # though. Uniq is pretty fast! -my $base_cmd = "nm pokefirered.elf | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; +my $base_cmd = "nm $elffname | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; -# This looks for Unknown_, Unknown_, or sub_, followed by just numbers. Note that +# This looks for Unknown_, Unknown_, or sub_, followed by an address. Note that # it matches even if stuff precedes the unknown, like sUnknown/gUnknown. -my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]*\\|sub_[0-9a-fA-F]*'"; +my $undoc_regex = "'[Uu]nknown_[0-9a-fA-F]\\{5,7\\}\\|sub_[0-9a-fA-F]\\{5,7\\}'"; # This looks for every symbol with an address at the end of it. Some things are # given a name based on their type / location, but still have an unknown purpose. # For example, FooMap_EventScript_FFFFFFF. -my $partial_doc_cmd = "grep '_[0-38][0-9a-fA-F]\\{5,6\\}'"; +# The above may be double counted here, and will need to be filtered out. +my $partial_doc_regex = "'_[0-28][0-9a-fA-F]\\{5,7\\}'"; my $count_cmd = "wc -l"; @@ -104,7 +106,7 @@ my $total_syms_as_string; my $undocumented_as_string; (run ( - command => "$base_cmd | $undoc_cmd | $count_cmd", + command => "$base_cmd | grep $undoc_regex | $count_cmd", buffer => \$undocumented_as_string, timeout => 60 )) @@ -112,7 +114,7 @@ my $undocumented_as_string; my $partial_documented_as_string; (run ( - command => "$base_cmd | $partial_doc_cmd | $count_cmd", + command => "$base_cmd | grep $partial_doc_regex | grep -v $undoc_regex | $count_cmd", buffer => \$partial_documented_as_string, timeout => 60 )) @@ -121,16 +123,19 @@ my $partial_documented_as_string; # Performing addition on a string converts it to a number. Any string that fails # to convert to a number becomes 0. So if our converted number is 0, but our string # is nonzero, then the conversion was an error. +$undocumented_as_string =~ s/^\s+|\s+$//g; my $undocumented = $undocumented_as_string + 0; -(($undocumented != 0) and ($undocumented_as_string ne "0")) +(($undocumented != 0) or (($undocumented == 0) and ($undocumented_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$undocumented_as_string'"; +$partial_documented_as_string =~ s/^\s+|\s+$//g; my $partial_documented = $partial_documented_as_string + 0; -(($partial_documented != 0) and ($partial_documented_as_string ne "0")) - or die "ERROR: Cannot convert string to num: '$partial_documented_as_string'"; +(($partial_documented != 0) or (($partial_documented == 0) and ($partial_documented_as_string eq "0"))) + or die "ERROR: Cannot convert string to num: '$partial_documented_as_string'"; +$total_syms_as_string =~ s/^\s+|\s+$//g; my $total_syms = $total_syms_as_string + 0; -(($total_syms != 0) and ($total_syms_as_string ne "0")) +(($total_syms != 0) or (($total_syms == 0) and ($total_syms_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$total_syms_as_string'"; ($total_syms != 0) @@ -140,9 +145,6 @@ my $total = $src + $asm; my $srcPct = sprintf("%.4f", 100 * $src / $total); my $asmPct = sprintf("%.4f", 100 * $asm / $total); -# partial_documented is double-counting the unknown_* and sub_* symbols. -$partial_documented = $partial_documented - $undocumented; - my $documented = $total_syms - ($undocumented + $partial_documented); my $docPct = sprintf("%.4f", 100 * $documented / $total_syms); my $partialPct = sprintf("%.4f", 100 * $partial_documented / $total_syms); From 54c781a0e91ca9263c626027e5518764c034b25f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 28 Nov 2022 16:17:25 -0500 Subject: [PATCH 42/42] Sync wildcards in ld scripts --- ld_script.txt | 15 +++++++++++++-- ld_script_modern.txt | 12 ++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ld_script.txt b/ld_script.txt index 54c794e52..a2cc3e6e7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -12,6 +12,7 @@ SECTIONS { . = 0x1C000; + src/*.o(.ewram_data); *libc.a:impure.o(.data); *libc.a:locale.o(.data); @@ -26,6 +27,8 @@ SECTIONS { { /* .bss starts at 0x3000000 */ + src/*.o(.bss); + data/*.o(.bss); /* .bss.code starts at 0x30028E0 */ src/m4a.o(.bss.code); @@ -45,8 +48,8 @@ SECTIONS { ALIGN(4) { src/rom_header.o(.text); - src/rom_header_gf.o(.text*); - src/crt0.o(.text); + src/rom_header_gf.o(.text*); + src/crt0.o(.text); src/main.o(.text); src/gpu_regs.o(.text); src/dma3_manager.o(.text); @@ -1027,6 +1030,14 @@ SECTIONS { src/graphics.o(.rodata); } =0 + extra : + ALIGN(4) + { + src/*.o(.text); + src/*.o(.rodata); + data/*.o(.rodata); + } = 0 + /* DWARF 2 sections */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } diff --git a/ld_script_modern.txt b/ld_script_modern.txt index fc6c0d0b7..6a874f84a 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -14,7 +14,7 @@ SECTIONS { *(ewram_data); . = 0x40000; -} + } . = 0x3000000; @@ -38,17 +38,13 @@ SECTIONS { .text : ALIGN(4) { + src/rom_header.o(.text*); + src/rom_header_gf.o(.text.*); src/crt0.o(.text); + src/main.o(.text); *(.text*); } =0 - .text.unlikely : - ALIGN(4) - { - src/crt0.o(.text.unlikely); - *(.text.unlikely*); - } =0 - script_data : ALIGN(4) {