diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/player_data.c | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/arm9/src/player_data.c b/arm9/src/player_data.c new file mode 100644 index 00000000..35daf328 --- /dev/null +++ b/arm9/src/player_data.c @@ -0,0 +1,232 @@ +#include "global.h" +#include "save_block_2.h" +#include "player_data.h" +#include "MI_memory.h" +#include "heap.h" +#include "string16.h" +#include "options.h" +#include "coins.h" + +#pragma thumb on + +void PlayerProfile_init(struct PlayerData * data); + +u32 Sav2_PlayerData_sizeof(void) +{ + return sizeof(struct PlayerDataSav); +} + +void Sav2_PlayerData_init(struct PlayerDataSav * pds) +{ + MI_CpuClearFast(pds, sizeof(struct PlayerDataSav)); + Options_init(&pds->options); + PlayerProfile_init(&pds->data); + InitCoins(&pds->coins); + InitIGT(&pds->igt); +} + +struct PlayerData * Sav2_PlayerData_GetProfileAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->data; +} + +struct Options * Sav2_PlayerData_GetOptionsAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->options; +} + +u16 * Sav2_PlayerData_GetCoinsAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->coins; +} + +struct IGT * Sav2_PlayerData_GetIGTAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->igt; +} + +u32 PlayerProfile_sizeof(void) +{ + return sizeof(struct PlayerData); +} + +struct PlayerData * PlayerProfile_new(u32 heap_id) +{ + struct PlayerData * ret = (struct PlayerData *)AllocFromHeap(heap_id, sizeof(struct PlayerData)); + PlayerProfile_init(ret); + return ret; +} + +void PlayerProfile_Copy(const struct PlayerData * src, struct PlayerData * dest) +{ + MI_CpuCopy8(src, dest, sizeof(struct PlayerData)); +} + +void PlayerProfile_init(struct PlayerData * data) +{ + memset(data, 0, sizeof(struct PlayerData)); + data->language = LANGUAGE_ENGLISH; +} + +void CopyPlayerName(u16 * dest, struct PlayerData * data) +{ + GF_ASSERT((s32)StringLength(data->playerName) < OT_NAME_LENGTH + 1); + CopyU16StringArray(dest, data->playerName); +} + +void PlayerName_StringToFlat(struct PlayerData * data, struct String * str) +{ + CopyStringToU16Array(str, data->playerName, OT_NAME_LENGTH + 1); +} + +u16 * PlayerProfile_GetNamePtr(struct PlayerData * data) +{ + return data->playerName; +} + +void PlayerName_FlatToString(struct PlayerData * data, struct String * str) +{ + CopyU16ArrayToString(str, data->playerName); +} + +struct String * PlayerProfile_GetPlayerName_NewString(struct PlayerData * data, u32 heap_id) +{ + struct String * str = String_ctor(OT_NAME_LENGTH + 1, heap_id); + PlayerName_FlatToString(data, str); + return str; +} + +void PlayerProfile_SetTrainerID(struct PlayerData * data, u32 otid) +{ + data->playerId = otid; +} + +u32 PlayerProfile_GetTrainerID(struct PlayerData * data) +{ + return data->playerId; +} + +u16 PlayerProfile_GetTrainerID_VisibleHalf(struct PlayerData * data) +{ + return (u16)data->playerId; +} + +void PlayerProfile_SetTrainerGender(struct PlayerData * data, u8 gender) +{ + data->gender = gender; +} + +u32 PlayerProfile_GetTrainerGender(struct PlayerData * data) +{ + return data->gender; +} + +BOOL PlayerProfile_TestBadgeFlag(struct PlayerData * data, u32 badgeno) +{ + return (data->badges & (1 << badgeno)) != 0; +} + +void PlayerProfile_SetBadgeFlag(struct PlayerData * data, u32 badgeno) +{ + data->badges |= (1 << badgeno); +} + +u32 PlayerProfile_CountBadges(struct PlayerData * data) +{ + u32 count; + u32 badges; + for (count = 0, badges = data->badges; badges != 0; badges >>= 1) + { + if (badges & 1) + count++; + } + return count; +} + +u32 PlayerProfile_GetMoney(struct PlayerData * data) +{ + return data->money; +} + +u32 PlayerProfile_SetMoney(struct PlayerData * data, u32 amount) +{ + if (amount > 999999) + amount = 999999; + data->money = amount; + return amount; +} + +u8 FUN_02023A28(struct PlayerData * data) +{ + return data->avatar; +} + +void FUN_02023A2C(struct PlayerData * data, u8 avatar) +{ + data->avatar = avatar; +} + +u32 PlayerProfile_AddMoney(struct PlayerData * data, u32 amount) +{ + if (amount > 999999) + data->money = 999999; + else + data->money += amount; + if (data->money > 999999) + data->money = 999999; + return data->money; +} + +u32 PlayerProfile_SubMoney(struct PlayerData * data, u32 amount) +{ + if (data->money < amount) + data->money = 0; + else + data->money -= amount; + return data->money; +} + +u8 FUN_02023A68(struct PlayerData * data) +{ + return data->field_1C; +} + +void FUN_02023A6C(struct PlayerData * data, u8 a1) +{ + data->field_1C = a1; +} + +u8 FUN_02023A70(struct PlayerData * data) +{ + return data->language; +} + +void FUN_02023A74(struct PlayerData * data, u8 language) +{ + data->language = language; +} + +void FUN_02023A78(struct PlayerData * data) +{ + data->field_1D_0 = 1; +} + +BOOL FUN_02023A88(struct PlayerData * data) +{ + return data->field_1D_0; +} + +void FUN_02023A90(struct PlayerData * data) +{ + data->field_1D_1 = 1; +} + +BOOL FUN_02023A9C(struct PlayerData * data) +{ + return data->field_1D_1; +} + +BOOL PlayerProfile_NameAndOTIDMatchPlayer(struct PlayerData * a, struct PlayerData * b) +{ + return !StringNotEqualN(a->playerName, b->playerName, OT_NAME_LENGTH) && a->playerId == b->playerId; +} |