diff options
Diffstat (limited to 'src/rescue_team_info.c')
-rw-r--r-- | src/rescue_team_info.c | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c new file mode 100644 index 0000000..205ce18 --- /dev/null +++ b/src/rescue_team_info.c @@ -0,0 +1,175 @@ +#include "global.h" +#include "rescue_team_info.h" + +extern struct RescueTeamData *gRescueTeamInfoRef; +extern struct RescueTeamData gRescueTeamInfo; + +extern void sub_809485C(u32 *r0, u8 *r1, u32 r2); +extern void sub_809486C(u32 *r0, u8 *r1, u32 r2); +extern void sub_809488C(u32 *r0, u8 *r1, u32 r2); +extern void sub_8094924(u32 *r0, u8 *r1, u32); +extern void nullsub_102(u32 *r0); +extern u8 sub_80023E4(u32); +extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); +extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); + +extern const char *gRescueTeamRanks[]; +extern s32 gRescueRankMaxPoints[7]; +extern u8 gTeamNamePlaceholder[0x8]; // Pokemon +extern u8 gUnknown_810A35B[0x10]; + +bool32 sub_8092040(u8 param_1) +{ + s32 index; + + if (param_1 >= 0xF0) + return TRUE; + else { + index = 0; + while (gUnknown_810A35B[index] != 0xF0){ + if (gUnknown_810A35B[index] == param_1) + return TRUE; + index++; + }; + return FALSE; + } +} + +void LoadRescueTeamInfo(void) +{ + gRescueTeamInfoRef = &gRescueTeamInfo; +} + +struct RescueTeamData *GetRescueTeamInfo(void) +{ + return &gRescueTeamInfo; +} + +void InitializeResuceTeamInfo(void) +{ + BoundedCopyStringtoBuffer(gRescueTeamInfoRef->teamName, gTeamNamePlaceholder, TEAM_NAME_LENGTH); + gRescueTeamInfoRef->teamRankPts = 0; + gRescueTeamInfoRef->unk10 = 0; +} + +void sub_80920B8(u8 *buffer) +{ + s32 counter; + for(counter = 0; counter < TEAM_NAME_LENGTH; counter++) + { + *buffer++ = gRescueTeamInfoRef->teamName[counter]; + } +} + +void sub_80920D8(u8 *buffer) +{ + sub_80922B4(buffer, gRescueTeamInfoRef->teamName, TEAM_NAME_LENGTH); +} + +void SetRescueTeamName(u8 *buffer) +{ + s32 counter; + for(counter = 0; counter < TEAM_NAME_LENGTH; counter++) + { + gRescueTeamInfoRef->teamName[counter] = *buffer++; + } +} + +s32 GetTeamRankPts(void) +{ + return gRescueTeamInfoRef->teamRankPts; +} + +s32 GetPtsToNextRank(void) +{ + u8 teamRank; + + teamRank = GetRescueTeamRank(); + if (teamRank == LUCARIO_RANK) { + return 0; + } + else + { + return (gRescueRankMaxPoints[teamRank] - gRescueTeamInfoRef->teamRankPts); + } +} + +// Unused +void SetTeamRankPoints(s32 newPts) +{ + gRescueTeamInfoRef->teamRankPts = newPts; +} + +void AddToTeamRankPts(s32 newPts) +{ + gRescueTeamInfoRef->teamRankPts += newPts; + if (gRescueTeamInfoRef->teamRankPts > 99999999) { + gRescueTeamInfoRef->teamRankPts = 99999999; + } +} + +u8 GetRescueTeamRank(void) +{ + s32 rank; + + for(rank = NORMAL_RANK; rank < MAX_TEAM_RANKS; rank++){ + if (gRescueTeamInfoRef->teamRankPts < gRescueRankMaxPoints[rank]) { + return rank; + } + } + return LUCARIO_RANK; +} + +const char *GetTeamRankString(u8 index) +{ + return gRescueTeamRanks[index]; +} + +// Unused +u8 sub_80921B8(void) +{ + return gRescueTeamInfoRef->unk10; +} + +u32 sub_80921C4(u8 *param_1, u32 param_2) + +{ + u32 auStack36[4]; + u8 neg1; + u8 zero; + u8 *puVar2; + + neg1 = -1; + zero = 0; + + sub_809486C(auStack36, param_1, param_2); + sub_809488C(auStack36, gRescueTeamInfoRef->teamName, 0x58); + sub_809488C(auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20); + gRescueTeamInfoRef->unk10 = sub_80023E4(0); + + if (gRescueTeamInfoRef->unk10 != 0) + { + puVar2 = &neg1; + } + else + { + puVar2 = &zero; + } + sub_809488C(auStack36,puVar2,1); + nullsub_102(auStack36); + return auStack36[2]; +} + +u32 sub_809222C(u8 *param_1, u32 param_2) +{ + u32 auStack32 [4]; + u8 byteArray[4]; + + sub_809485C(auStack32, param_1, param_2); + sub_8094924(auStack32, gRescueTeamInfoRef->teamName, 0x58); + sub_8094924(auStack32, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20); + sub_8094924(auStack32, byteArray, 1); + gRescueTeamInfoRef->unk10 = byteArray[0] & 1; + nullsub_102(auStack32); + return auStack32[2]; +} |