pokediamond/arm9/src/player_data.c
2021-06-06 20:52:18 +01:00

233 lines
5.1 KiB
C

#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, GenderEnum gender)
{
data->gender = gender;
}
GenderEnum 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 PlayerProfile_GetAvatar(struct PlayerData * data)
{
return data->avatar;
}
void PlayerProfile_SetAvatar(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 PlayerProfile_GetVersion(struct PlayerData * data)
{
return data->version;
}
void PlayerProfile_SetVersion(struct PlayerData * data, u8 a1)
{
data->version = a1;
}
u8 PlayerProfile_GetLanguage(struct PlayerData * data)
{
return data->language;
}
void PlayerProfile_SetLanguage(struct PlayerData * data, u8 language)
{
data->language = language;
}
void PlayerProfile_SetGameClearFlag(struct PlayerData * data)
{
data->gameCleared = 1;
}
BOOL PlayerProfile_GetGameClearFlag(struct PlayerData * data)
{
return data->gameCleared;
}
void PlayerProfile_SetNatDexFlag(struct PlayerData * data)
{
data->nationalDex = 1;
}
BOOL PlayerProfile_GetNatDexFlag(struct PlayerData * data)
{
return data->nationalDex;
}
BOOL PlayerProfile_NameAndOTIDMatchPlayer(struct PlayerData * a, struct PlayerData * b)
{
return !StringNotEqualN(a->playerName, b->playerName, OT_NAME_LENGTH) && a->playerId == b->playerId;
}