#include "global.h" #include "coins.h" #include "text.h" #include "window.h" #include "strings.h" #include "string_util.h" #include "menu.h" #include "international_string_util.h" #define MAX_COINS 9999 EWRAM_DATA u8 sCoinsWindowId = 0; void PrintCoinsString(u32 coinAmount) { u32 xAlign; ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_Coins); xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40); AddTextPrinterParameterized(sCoinsWindowId, 1, gStringVar4, xAlign, 1, 0, NULL); } void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y) { struct WindowTemplate template; SetWindowTemplateFields(&template, 0, x, y, 8, 2, 0xF, 0x141); sCoinsWindowId = AddWindow(&template); FillWindowPixelBuffer(sCoinsWindowId, 0); PutWindowTilemap(sCoinsWindowId); SetWindowBorderStyle(sCoinsWindowId, FALSE, 0x214, 0xE); PrintCoinsString(coinAmount); } void HideCoinsWindow(void) { sub_819746C(sCoinsWindowId, TRUE); RemoveWindow(sCoinsWindowId); } u16 GetCoins(void) { return gSaveBlock1Ptr->coins ^ gSaveBlock2Ptr->encryptionKey; } void SetCoins(u16 coinAmount) { gSaveBlock1Ptr->coins = coinAmount ^ gSaveBlock2Ptr->encryptionKey; } bool8 GiveCoins(u16 toAdd) { u16 newAmount; u16 ownedCoins = GetCoins(); if (ownedCoins >= MAX_COINS) return FALSE; // check overflow, can't have less coins than previously if (ownedCoins > ownedCoins + toAdd) { newAmount = MAX_COINS; } else { ownedCoins += toAdd; if (ownedCoins > MAX_COINS) ownedCoins = MAX_COINS; newAmount = ownedCoins; } SetCoins(newAmount); return TRUE; } bool8 TakeCoins(u16 toSub) { u16 ownedCoins = GetCoins(); if (ownedCoins >= toSub) { SetCoins(ownedCoins - toSub); return TRUE; } return FALSE; }