summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/player_data.c232
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;
+}