mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-09 12:08:12 -05:00
233 lines
5.1 KiB
C
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;
|
|
}
|