mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-20 11:58:04 -05:00
138 lines
3.3 KiB
C
138 lines
3.3 KiB
C
#include "global.h"
|
|
#include "event_data.h"
|
|
#include "text.h"
|
|
#include "string_util.h"
|
|
#include "menu.h"
|
|
#include "text_window.h"
|
|
#include "strings.h"
|
|
|
|
#define MAX_MONEY 999999
|
|
|
|
EWRAM_DATA static u8 sMoneyBoxWindowId = 0;
|
|
|
|
u32 GetMoney(u32* moneyPtr)
|
|
{
|
|
return *moneyPtr ^ gSaveBlock2Ptr->encryptionKey;
|
|
}
|
|
|
|
void SetMoney(u32* moneyPtr, u32 newValue)
|
|
{
|
|
*moneyPtr = gSaveBlock2Ptr->encryptionKey ^ newValue;
|
|
}
|
|
|
|
bool8 IsEnoughMoney(u32* moneyPtr, u32 cost)
|
|
{
|
|
if (GetMoney(moneyPtr) >= cost)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
void AddMoney(u32* moneyPtr, u32 toAdd)
|
|
{
|
|
u32 toSet = GetMoney(moneyPtr);
|
|
|
|
// can't have more money than MAX
|
|
if (toSet + toAdd > MAX_MONEY)
|
|
{
|
|
toSet = MAX_MONEY;
|
|
}
|
|
else
|
|
{
|
|
toSet += toAdd;
|
|
// check overflow, can't have less money after you receive more
|
|
if (toSet < GetMoney(moneyPtr))
|
|
toSet = MAX_MONEY;
|
|
}
|
|
|
|
SetMoney(moneyPtr, toSet);
|
|
}
|
|
|
|
void RemoveMoney(u32* moneyPtr, u32 toSub)
|
|
{
|
|
u32 toSet = GetMoney(moneyPtr);
|
|
|
|
// can't subtract more than you already have
|
|
if (toSet < toSub)
|
|
toSet = 0;
|
|
else
|
|
toSet -= toSub;
|
|
|
|
SetMoney(moneyPtr, toSet);
|
|
}
|
|
|
|
bool8 IsEnoughForCostInVar0x8005(void)
|
|
{
|
|
return IsEnoughMoney(&gSaveBlock1Ptr->money, gSpecialVar_0x8005);
|
|
}
|
|
|
|
void SubtractMoneyFromVar0x8005(void)
|
|
{
|
|
RemoveMoney(&gSaveBlock1Ptr->money, gSpecialVar_0x8005);
|
|
}
|
|
|
|
void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed)
|
|
{
|
|
u8 *txtPtr;
|
|
s32 strLength;
|
|
|
|
ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_LEFT_ALIGN, 6);
|
|
|
|
strLength = 6 - StringLength(gStringVar1);
|
|
txtPtr = gStringVar4;
|
|
|
|
while (strLength-- != 0)
|
|
*(txtPtr++) = 0;
|
|
|
|
StringExpandPlaceholders(txtPtr, gText_PokedollarVar1);
|
|
AddTextPrinterParameterized(windowId, 0, gStringVar4, 64 - GetStringWidth(0, gStringVar4, 0), 0xC, speed, NULL);
|
|
}
|
|
|
|
void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed)
|
|
{
|
|
u8 *txtPtr;
|
|
s32 strLength;
|
|
|
|
ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_LEFT_ALIGN, 6);
|
|
|
|
strLength = 6 - StringLength(gStringVar1);
|
|
txtPtr = gStringVar4;
|
|
|
|
while (strLength-- != 0)
|
|
*(txtPtr++) = 0;
|
|
|
|
StringExpandPlaceholders(txtPtr, gText_PokedollarVar1);
|
|
AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, speed, NULL);
|
|
}
|
|
|
|
void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount)
|
|
{
|
|
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, pallete);
|
|
AddTextPrinterParameterized(windowId, 2, gText_TrainerCardMoney, 0, 0, 0xFF, 0);
|
|
PrintMoneyAmountInMoneyBox(windowId, amount, 0);
|
|
}
|
|
|
|
void ChangeAmountInMoneyBox(int amount)
|
|
{
|
|
PrintMoneyAmountInMoneyBox(sMoneyBoxWindowId, amount, 0);
|
|
}
|
|
|
|
void DrawMoneyBox(int amount, u8 x, u8 y)
|
|
{
|
|
struct WindowTemplate template;
|
|
|
|
template = SetWindowTemplateFields(0, x + 1, y + 1, 8, 3, 15, 8);
|
|
sMoneyBoxWindowId = AddWindow(&template);
|
|
FillWindowPixelBuffer(sMoneyBoxWindowId, 0);
|
|
PutWindowTilemap(sMoneyBoxWindowId);
|
|
TextWindow_SetStdFrame0_WithPal(sMoneyBoxWindowId, 0x21D, 0xD0);
|
|
PrintMoneyAmountInMoneyBoxWithBorder(sMoneyBoxWindowId, 0x21D, 13, amount);
|
|
}
|
|
|
|
void HideMoneyBox(void)
|
|
{
|
|
ClearStdWindowAndFrameToTransparent(sMoneyBoxWindowId, FALSE);
|
|
CopyWindowToVram(sMoneyBoxWindowId, 2);
|
|
RemoveWindow(sMoneyBoxWindowId);
|
|
}
|