about summary refs log tree commit diff stats
path: root/gba/source/libpayload.h
blob: 4be6fb391fac58eadfb35ab4f4e3b8ca42634bd8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 * Example Gen3-multiboot payload by slipstream/RoL 2017.
 *
 * This software may be modified and distributed under the terms
 * of the MIT license.  See the LICENSE file for details.
 *
 * libpayload.h: header for payload helper functions
 */

/**
 * Decrypts the substructures of a Pok�mon structure, so they can be viewed or modified easily.
 * Remember to call EncryptPokemon() afterwards.
 * @param struct Pokemon* pkm The Pok�mon to decrypt the substructures of.
*/
void DecryptPokemon(struct Pokemon* pkm);

/**
 * Decrypts the substructures of a core Pok�mon structure, so they can be viewed or modified easily.
 * Used by DecryptPokemon().
 * Remember to call EncryptPokemon() afterwards.
 * @param struct BoxPokemon* pkm The BoxPokemon to decrypt the substructures of.
*/
void DecryptBoxPokemon(struct BoxPokemon* pkm);

/**
 * Encrypts the substructures of a Pok�mon structure, and fixes the checksum.
 * Must be used after DecryptPokemon() has been called, otherwise the Pok�mon you decrypted and forgot to re-encrypt will become a Bad Egg.
 * @param struct Pokemon* pkm The Pok�mon to encrypt the substructures and fix the checksum of.
*/
void EncryptPokemon(struct Pokemon* pkm);

/**
 * Encrypts the substructures of a core Pok�mon structure, and fixes the checksum.
 * Must be used after DecryptBoxPokemon() has been called, otherwise the Pok�mon you decrypted and forgot to re-encrypt will become a Bad Egg.
 * @param struct BoxPokemon* pkm The BoxPokemon to encrypt the substructures and fix the checksum of.
*/
void EncryptBoxPokemon(struct BoxPokemon* pkm);

/**
 * Gets a substructure of a Pok�mon structure.
 * Call DecryptPokemon() first or the substructure data will be encrypted.
 * @param struct Pokemon* pkm The Pokemon to get a substructure of.
 * @param u8 substructId The substructure to get.
 * @return union PokemonSubstruct* The substructure.
*/
union PokemonSubstruct* GetPokemonSubstruct(struct Pokemon* pkm,u8 substructId);

/**
 * Gets a substructure of a core Pok�mon structure.
 * Call DecryptBoxPokemon() first or the substructure data will be encrypted.
 * @param struct Pokemon* pkm The Pokemon to get a substructure of.
 * @param u8 substructId The substructure to get.
 * @return union PokemonSubstruct* The substructure.
*/
union PokemonSubstruct* GetBoxPokemonSubstruct(struct BoxPokemon* pkm,u8 substructId);

/**
 * Gets the checksum of a core Pok�mon structure.
 * @param struct BoxPokemon* pkm The BoxPokemon to calculate the checksum of.
 * @return u16 The checksum.
*/
u16 CalculateBoxPokemonChecksum(struct BoxPokemon* pkm);

/**
 * Fixes the checksum of a core Pok�mon structure.
 * @param struct BoxPokemon* pkm The BoxPokemon to fix the checksum of.
*/
void FixBoxPokemonChecksum(struct BoxPokemon* pkm);

/**
 * Gets the zeroth substructure ("Growth") of a Pok�mon structure.
 * Call DecryptPokemon() first or the substructure data will be encrypted.
 * @param struct Pokemon* pkm The Pok�mon to get a substructure of.
 * @return struct PokemonSubstruct0* The substructure.
*/
struct PokemonSubstruct0* GetPokemonSubstruct0(struct Pokemon* pkm);

/**
 * Gets the zeroth substructure ("Growth") of a core Pok�mon structure.
 * Call DecryptBoxPokemon() first or the substructure data will be encrypted.
 * @param struct BoxPokemon* pkm The BoxPokemon to get the substructure of.
 * @return struct PokemonSubstruct0* The substructure.
*/
struct PokemonSubstruct0* GetBoxPokemonSubstruct0(struct BoxPokemon* pkm);

/**
 * Gets the first substructure ("Attacks") of a Pok�mon structure.
 * Call DecryptPokemon() first or the substructure data will be encrypted.
 * @param struct Pokemon* pkm The Pok�mon to get a substructure of.
 * @return struct PokemonSubstruct0* The substructure.
*/
struct PokemonSubstruct1* GetPokemonSubstruct1(struct Pokemon* pkm);

/**
 * Gets the first substructure ("Attacks") of a core Pok�mon structure.
 * Call DecryptBoxPokemon()  first or the substructure data will be encrypted.
 * @param struct BoxPokemon* pkm The BoxPokemon to get the substructure of.
 * @return struct PokemonSubstruct1* The substructure.
*/
struct PokemonSubstruct1* GetBoxPokemonSubstruct1(struct BoxPokemon* pkm);

/**
 * Gets the second substructure ("EVs & Condition") of a Pok�mon structure.
 * Call DecryptPokemon() first or the substructure data will be encrypted.
 * @param struct Pokemon* pkm The Pok�mon to get a substructure of.
 * @return struct PokemonSubstruct0* The substructure.
*/
struct PokemonSubstruct2* GetPokemonSubstruct2(struct Pokemon* pkm);

/**
 * Gets the second substructure ("EVs & Condition") of a core Pok�mon structure.
 * Call DecryptBoxPokemon()  first or the substructure data will be encrypted.
 * @param struct BoxPokemon* pkm The BoxPokemon to get the substructure of.
 * @return struct PokemonSubstruct2* The substructure.
*/
struct PokemonSubstruct2* GetBoxPokemonSubstruct2(struct BoxPokemon* pkm);

/**
 * Gets the third substructure ("Miscellaneous")  of a Pok�mon structure.
 * Call DecryptPokemon() first or the substructure data will be encrypted.
 * @param struct Pokemon* pkm The Pok�mon to get a substructure of.
 * @return struct PokemonSubstruct0* The substructure.
*/
struct PokemonSubstruct3* GetPokemonSubstruct3(struct Pokemon* pkm);

/**
 * Gets the third substructure ("Miscellaneous") of a core Pok�mon structure.
 * Call DecryptBoxPokemon()  first or the substructure data will be encrypted.
 * @param struct BoxPokemon* pkm The BoxPokemon to get the substructure of.
 * @return struct PokemonSubstruct3* The substructure.
*/
struct PokemonSubstruct3* GetBoxPokemonSubstruct3(struct BoxPokemon* pkm);

/**
 * Calculates the checksum for an R/S-specific Enigma Berry structure in SaveBlock1.
 * @param struct EnigmaBerry* enigmaBerry The R/S-specific Enigma Berry to calculate the checksum for.
 * @return u32 The checksum.
*/
u32 CalculateEnigmaBerryChecksumRS(struct EnigmaBerry* enigmaBerry);

/**
 * Calculates the checksum for an FR/LG/Emerald-specific Enigma Berry structure in SaveBlock1.
 * @param struct EnigmaBerryFRLGE* enigmaBerry The FR/LG/Emerald-specific Enigma Berry to calculate the checksum for.
 * @return u32 The checksum.
*/
u32 CalculateEnigmaBerryChecksumFRLGE(struct EnigmaBerryFRLGE* enigmaBerry);

/**
 * Calculates the checksum for an unspecified Enigma Berry structure in SaveBlock1. (detected by current game)
 * @param void* enigmaBerry The Enigma Berry structure to calculate the checksum for.
 * @return u32 The checksum.
 */
u32 CalculateEnigmaBerryChecksum(void* enigmaBerry);

/**
 * Calculates the checksum for a RAM script structure in SaveBlock1.
 * @param struct RamScript* ramScript The RAM script structure to calculate the checksum for.
 * @return u32 The checksum.
 */
u32 CalculateRamScriptChecksum(struct RamScript* ramScript);