mirror of
https://github.com/pret/pokeheartgold.git
synced 2025-01-08 05:40:32 +00:00
225 lines
6.4 KiB
C
225 lines
6.4 KiB
C
#ifndef POKEHEARTGOLD_SEAL_CASE_H
|
|
#define POKEHEARTGOLD_SEAL_CASE_H
|
|
|
|
#include "constants/seals.h"
|
|
#include "save.h"
|
|
|
|
/*
|
|
* Structure for seal in-use
|
|
*/
|
|
typedef struct SEAL {
|
|
u8 kind; // ID of the seal
|
|
u8 x; // X coordinate on the capsule
|
|
u8 y; // Y coordinate on the capsule
|
|
} SEAL;
|
|
|
|
/*
|
|
* Capsule that you put on your ball
|
|
*/
|
|
typedef struct CAPSULE {
|
|
SEAL seals[MAX_SEALS_ON_CAPSULE]; // The seals on the capsule
|
|
} CAPSULE;
|
|
|
|
/*
|
|
* Seals available to put on capsule. Typedeffed for safety
|
|
*/
|
|
typedef struct SEALBAG {
|
|
u8 seals[SEAL_MAX];
|
|
} SEALBAG;
|
|
|
|
/*
|
|
* Seal case and capsules from the save file
|
|
*/
|
|
typedef struct SEALCASE {
|
|
CAPSULE capsules[MAX_CAPSULES]; // Available capsules
|
|
SEALBAG inventory; // Available seals to put on capsules
|
|
} SEALCASE;
|
|
|
|
/*
|
|
* u32 Sav2_SealCase_sizeof(void)
|
|
*
|
|
* Gives the size of the Seal Case on the save file
|
|
*
|
|
* @returns: Size of SEALCASE
|
|
*/
|
|
u32 Sav2_SealCase_sizeof(void);
|
|
|
|
/*
|
|
* void Sav2_SealCase_init(SEALCASE *sealCase)
|
|
*
|
|
* Initializes the Seal Case
|
|
*
|
|
* @param sealCase: Pointer to SEALCASE
|
|
*/
|
|
void Sav2_SealCase_init(SEALCASE *sealCase);
|
|
|
|
/*
|
|
* void CopyCapsule(const CAPSULE *src, CAPSULE *dest)
|
|
*
|
|
* Copies capsule from src to dest
|
|
*
|
|
* @param src: Origin CAPSULE
|
|
* @param dest: Destination CAPSULE
|
|
*/
|
|
void CopyCapsule(const CAPSULE *src, CAPSULE *dest);
|
|
|
|
/*
|
|
* SEALCASE *Sav2_SealCase_get(SAVEDATA *saveData)
|
|
*
|
|
* Gets the player's seal case from the save file
|
|
*
|
|
* @param saveData: Pointer to SAVEDATA
|
|
*
|
|
* @returns: Pointer to SEALCASE from the save file
|
|
*/
|
|
SEALCASE *Sav2_SealCase_get(SAVEDATA *saveData);
|
|
|
|
/*
|
|
* CAPSULE *SealCase_GetCapsuleI(SEALCASE *sealCase, int i)
|
|
*
|
|
* Returns a pointer to the i-th capsule in storage.
|
|
* Maximum value of i is MAX_CAPSULES - 1
|
|
*
|
|
* @param sealCase: Pointer to SEALCASE
|
|
* @param i: Index of capsule
|
|
*
|
|
* @returns: Pointer to requested CAPSULE.
|
|
*/
|
|
CAPSULE *SealCase_GetCapsuleI(SEALCASE *sealCase, int i);
|
|
|
|
/*
|
|
* void SealCase_SetCapsuleI(SEALCASE *sealCase, const CAPSULE *src, int i)
|
|
*
|
|
* Copies the capsule to slot i in the seal case storage.
|
|
* Maximum value of i is MAX_CAPSULES - 1
|
|
*
|
|
* @param sealCase: Pointer to SEALCASE
|
|
* @param src: Value to set
|
|
* @param i: Index of capsule
|
|
*/
|
|
void SealCase_SetCapsuleI(SEALCASE *sealCase, const CAPSULE *src, int i);
|
|
|
|
/*
|
|
* SEAL *CapsuleGetSealI(CAPSULE *capsule, int i)
|
|
*
|
|
* Returns pointer to the i-th seal on the capsule.
|
|
*
|
|
* @param capsule: Pointer to CAPSULE
|
|
* @param i: Index of seal
|
|
*
|
|
* @returns: Pointer to the requested SEAL
|
|
*/
|
|
SEAL *CapsuleGetSealI(CAPSULE *capsule, int i);
|
|
|
|
/*
|
|
* u8 SealOnCapsuleGetID(const SEAL *seal)
|
|
* u8 SealOnCapsuleGetX(const SEAL *seal)
|
|
* u8 SealOnCapsuleGetY(const SEAL *seal)
|
|
*
|
|
* Gets the seal type, x or y coordinate of the given SEAL.
|
|
*
|
|
* @param seal: Pointer to SEAL
|
|
*
|
|
* @returns: The requested attribute
|
|
*/
|
|
u8 SealOnCapsuleGetID(const SEAL *seal);
|
|
u8 SealOnCapsuleGetX(const SEAL *seal);
|
|
u8 SealOnCapsuleGetY(const SEAL *seal);
|
|
|
|
/*
|
|
* SEALBAG *SealCase_inventory_get(SEALCASE *sealCase)
|
|
*
|
|
* Returns a pointer to the player's loose seals inventory.
|
|
*
|
|
* @param sealCase: Pointer to SEALCASE
|
|
*
|
|
* @returns: Pointer to SEALBAG
|
|
*/
|
|
SEALBAG *SealCase_inventory_get(SEALCASE *sealCase);
|
|
|
|
/*
|
|
* u8 SealCaseInventory_GetSealQuantity(const SEALBAG *inventory, int sealId)
|
|
*
|
|
* Gets the quantity of the given seal ID in the player's loose seals inventory.
|
|
*
|
|
* @param inventory: Pointer to SEALBAG
|
|
* @param sealId: ID of the seal to look up
|
|
*
|
|
* @returns: Owned quantity of that seal.
|
|
*/
|
|
u8 SealCaseInventory_GetSealQuantity(const SEALBAG *inventory, int sealId);
|
|
|
|
/*
|
|
* BOOL SealIsOnCapsule(const CAPSULE *capsule, int sealId)
|
|
*
|
|
* Checks whether any seal on the capsule has the given ID.
|
|
*
|
|
* @param capsule: Pointer to CAPSULE
|
|
* @param sealId: ID of the seal to look up
|
|
*
|
|
* @returns: TRUE if that seal is on the capsule, otherwise FALSE
|
|
*/
|
|
BOOL SealIsOnCapsule(const CAPSULE *capsule, int sealId);
|
|
|
|
/*
|
|
* void SealCaseInventory_SetSealQuantity(SEALBAG *inventory, int sealId, s16 quantity)
|
|
*
|
|
* Sets the owned number of seals of that type to the exact quantity.
|
|
*
|
|
* @param inventory: Pointer to SEALBAG
|
|
* @param sealId: ID of the seal to set quantity
|
|
* @param quantity: Quantity to set it to
|
|
*/
|
|
void SealCaseInventory_SetSealQuantity(SEALBAG *inventory, int sealId, s16 quantity);
|
|
|
|
/*
|
|
* BOOL GiveOrTakeSeal(SEALCASE *sealCase, int sealId, s16 quantity)
|
|
* BOOL GiveOrTakeSeal2(SEALCASE *sealCase, int sealId, s16 quantity)
|
|
* BOOL SealCase_CheckSealQuantity(const SEALCASE *sealCase, int sealId, s16 quantity)
|
|
*
|
|
* Adds or subtracts the quantity from the owned number of seals of that type.
|
|
* The sign of quantity determines whether it is add (+) or subtract (-).
|
|
*
|
|
* GiveOrTakeSeal will fail if you are adding seals, and the combined number on
|
|
* and off capsules would exceed the cap.
|
|
* GiveOrTakeSeal2 will fail if you are adding seals, and the number on capsules
|
|
* would exceed the cap. If it succeeds to add, and the number of loose copies
|
|
* in the bag would exceed the cap, it is set to the cap.
|
|
* SealCase_CheckSealQuantity follows the logic of GiveOrTakeSeal, but does not
|
|
* actually perform the action, instead only reports success or failure.
|
|
*
|
|
* @param inventory: Pointer to SEALBAG
|
|
* @param sealId: ID of the seal to adjust quantity
|
|
* @param quantity: Quantity to adjust by
|
|
*
|
|
* @returns: TRUE if success, otherwise FALSE
|
|
*/
|
|
BOOL GiveOrTakeSeal(SEALCASE *sealCase, int sealId, s16 quantity);
|
|
BOOL GiveOrTakeSeal2(SEALCASE *sealCase, int sealId, s16 quantity);
|
|
BOOL SealCase_CheckSealQuantity(const SEALCASE *sealCase, int sealId, s16 quantity);
|
|
|
|
/*
|
|
* int SealCase_CountUniqueSeals(const SEALCASE *sealCase)
|
|
*
|
|
* Counts the number of types of seals the player owns.
|
|
*
|
|
* @param sealCase: Pointer to SEALCASE
|
|
*
|
|
* @returns: The number of seal variants owned by the player.
|
|
*/
|
|
int SealCase_CountUniqueSeals(const SEALCASE *sealCase);
|
|
|
|
/*
|
|
* int SealCase_CountSealOccurrenceAnywhere(const SEALCASE *sealCase, int sealId)
|
|
*
|
|
* Counts the number of lose and capsule-bound seals of the given type.
|
|
*
|
|
* @param capsule: Pointer to CAPSULE
|
|
* @param sealId: ID of the seal to look up
|
|
*
|
|
* @returns: Total count of that seal anywhere on capsules or loose in the bag.
|
|
*/
|
|
int SealCase_CountSealOccurrenceAnywhere(const SEALCASE *sealCase, int sealId);
|
|
|
|
#endif //POKEHEARTGOLD_SEAL_CASE_H
|