conflicts
|
Before Width: | Height: | Size: 638 B After Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 877 B After Width: | Height: | Size: 780 B |
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
153 210 164
|
||||
153 211 165
|
||||
52 41 48
|
||||
74 57 66
|
||||
15 15 15
|
||||
38 210 161
|
||||
102 91 96
|
||||
185 170 175
|
||||
239 227 225
|
||||
147 125 133
|
||||
80 29 37
|
||||
77 74 75
|
||||
230 76 98
|
||||
255 251 255
|
||||
74 57 66
|
||||
102 91 96
|
||||
117 105 110
|
||||
153 62 73
|
||||
167 171 167
|
||||
123 130 123
|
||||
230 76 98
|
||||
147 125 133
|
||||
180 165 170
|
||||
16 16 16
|
||||
225 215 218
|
||||
249 247 248
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
153 210 164
|
||||
153 211 165
|
||||
52 41 48
|
||||
84 81 81
|
||||
74 57 66
|
||||
15 15 15
|
||||
38 210 161
|
||||
102 91 96
|
||||
185 170 175
|
||||
239 227 225
|
||||
186 80 100
|
||||
121 120 119
|
||||
189 184 186
|
||||
147 125 133
|
||||
80 29 37
|
||||
160 74 85
|
||||
171 167 168
|
||||
255 251 255
|
||||
136 134 133
|
||||
167 171 167
|
||||
123 130 123
|
||||
180 165 170
|
||||
16 16 16
|
||||
225 215 218
|
||||
230 220 223
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
||||
|
Before Width: | Height: | Size: 538 B After Width: | Height: | Size: 531 B |
|
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 520 B |
@ -1,17 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
14
|
||||
16
|
||||
0 183 239
|
||||
101 16 12
|
||||
36 77 28
|
||||
43 97 14
|
||||
143 19 11
|
||||
189 28 16
|
||||
230 74 53
|
||||
95 171 29
|
||||
75 133 61
|
||||
197 168 80
|
||||
250 136 107
|
||||
164 216 74
|
||||
16 16 16
|
||||
95 171 29
|
||||
241 201 80
|
||||
198 169 83
|
||||
254 254 254
|
||||
101 16 12
|
||||
157 24 17
|
||||
222 81 69
|
||||
249 164 162
|
||||
36 77 28
|
||||
75 133 61
|
||||
229 238 129
|
||||
253 253 253
|
||||
0 0 0
|
||||
|
||||
@ -1,17 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
14
|
||||
16
|
||||
0 183 239
|
||||
128 65 0
|
||||
160 53 43
|
||||
43 97 14
|
||||
184 93 0
|
||||
214 143 1
|
||||
255 211 22
|
||||
95 171 29
|
||||
255 118 66
|
||||
197 168 80
|
||||
255 250 137
|
||||
164 216 74
|
||||
16 16 16
|
||||
95 171 29
|
||||
241 201 80
|
||||
198 169 83
|
||||
254 254 254
|
||||
194 80 3
|
||||
221 143 0
|
||||
255 212 22
|
||||
249 164 162
|
||||
185 77 49
|
||||
255 118 66
|
||||
229 238 129
|
||||
253 253 253
|
||||
0 0 0
|
||||
|
||||
|
Before Width: | Height: | Size: 829 B After Width: | Height: | Size: 786 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 980 B |
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
152 208 160
|
||||
88 56 32
|
||||
0 183 239
|
||||
16 16 16
|
||||
152 24 16
|
||||
96 16 8
|
||||
32 72 24
|
||||
136 88 56
|
||||
216 80 64
|
||||
72 128 56
|
||||
248 160 160
|
||||
192 168 80
|
||||
40 96 8
|
||||
88 168 24
|
||||
160 216 72
|
||||
240 200 80
|
||||
32 88 8
|
||||
101 16 12
|
||||
36 77 28
|
||||
43 97 14
|
||||
143 19 11
|
||||
189 28 16
|
||||
194 44 58
|
||||
230 74 53
|
||||
211 34 61
|
||||
95 171 29
|
||||
250 136 107
|
||||
204 170 118
|
||||
164 216 74
|
||||
240 221 157
|
||||
125 0 0
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
152 208 160
|
||||
88 56 32
|
||||
0 183 239
|
||||
16 16 16
|
||||
216 136 0
|
||||
192 80 0
|
||||
32 72 24
|
||||
136 88 56
|
||||
248 208 16
|
||||
72 128 56
|
||||
248 232 144
|
||||
192 168 80
|
||||
40 96 8
|
||||
88 168 24
|
||||
160 216 72
|
||||
240 200 80
|
||||
32 88 8
|
||||
128 65 0
|
||||
160 53 43
|
||||
43 97 14
|
||||
184 93 0
|
||||
214 143 1
|
||||
194 44 58
|
||||
255 211 22
|
||||
29 171 38
|
||||
95 171 29
|
||||
255 250 137
|
||||
204 170 118
|
||||
164 216 74
|
||||
240 221 157
|
||||
0 83 0
|
||||
|
||||
|
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 489 B |
|
Before Width: | Height: | Size: 613 B After Width: | Height: | Size: 490 B |
|
Before Width: | Height: | Size: 771 B After Width: | Height: | Size: 719 B |
@ -1,18 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
15
|
||||
152 208 160
|
||||
216 80 128
|
||||
248 160 200
|
||||
144 40 64
|
||||
248 120 144
|
||||
24 24 24
|
||||
96 64 72
|
||||
64 40 40
|
||||
248 160 8
|
||||
200 104 88
|
||||
0 0 0
|
||||
144 88 80
|
||||
248 200 8
|
||||
16
|
||||
153 211 165
|
||||
40 24 24
|
||||
88 40 40
|
||||
64 48 48
|
||||
88 64 64
|
||||
120 72 64
|
||||
128 48 48
|
||||
176 104 88
|
||||
184 80 96
|
||||
200 144 80
|
||||
184 184 184
|
||||
240 128 136
|
||||
16 16 16
|
||||
248 232 136
|
||||
248 248 248
|
||||
168 160 160
|
||||
0 0 0
|
||||
|
||||
@ -1,18 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
15
|
||||
152 208 160
|
||||
216 80 128
|
||||
248 160 200
|
||||
144 40 64
|
||||
248 120 144
|
||||
24 24 24
|
||||
232 192 206
|
||||
217 158 179
|
||||
248 160 8
|
||||
248 240 240
|
||||
0 0 0
|
||||
241 223 226
|
||||
248 200 8
|
||||
16
|
||||
153 211 165
|
||||
174 80 82
|
||||
120 104 112
|
||||
193 122 128
|
||||
217 164 169
|
||||
200 186 180
|
||||
128 48 48
|
||||
248 224 232
|
||||
184 80 96
|
||||
200 144 80
|
||||
184 184 184
|
||||
240 128 136
|
||||
16 16 16
|
||||
248 232 136
|
||||
248 248 248
|
||||
168 160 160
|
||||
0 0 0
|
||||
|
||||
|
Before Width: | Height: | Size: 602 B After Width: | Height: | Size: 649 B |
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
156 210 164
|
||||
131 97 49
|
||||
197 80 131
|
||||
153 211 165
|
||||
32 16 40
|
||||
40 32 48
|
||||
48 40 56
|
||||
71 62 76
|
||||
64 56 80
|
||||
112 32 64
|
||||
94 86 101
|
||||
152 56 104
|
||||
200 144 80
|
||||
240 80 160
|
||||
184 184 184
|
||||
16 16 16
|
||||
96 92 107
|
||||
246 214 65
|
||||
230 113 164
|
||||
59 50 72
|
||||
83 81 104
|
||||
31 33 45
|
||||
255 255 255
|
||||
43 43 43
|
||||
87 83 97
|
||||
68 61 84
|
||||
70 69 95
|
||||
131 60 90
|
||||
248 232 136
|
||||
248 248 248
|
||||
0 0 0
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
156 210 164
|
||||
131 97 49
|
||||
197 80 131
|
||||
153 211 165
|
||||
120 104 112
|
||||
174 80 82
|
||||
200 186 180
|
||||
193 122 128
|
||||
248 224 232
|
||||
112 32 64
|
||||
217 164 169
|
||||
152 56 104
|
||||
200 144 80
|
||||
240 80 160
|
||||
184 184 184
|
||||
16 16 16
|
||||
255 206 222
|
||||
246 214 65
|
||||
230 113 164
|
||||
249 241 242
|
||||
205 153 172
|
||||
139 89 115
|
||||
255 255 255
|
||||
57 60 65
|
||||
246 186 205
|
||||
247 233 235
|
||||
255 226 238
|
||||
131 60 90
|
||||
248 232 136
|
||||
248 248 248
|
||||
0 0 0
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 611 B After Width: | Height: | Size: 533 B |
BIN
graphics/pokemon/terapagos/front.png
Normal file
|
After Width: | Height: | Size: 995 B |
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
152 208 160
|
||||
38 26 108
|
||||
49 34 133
|
||||
103 230 225
|
||||
60 76 160
|
||||
160 64 109
|
||||
228 103 181
|
||||
0 0 0
|
||||
115 162 235
|
||||
52 201 163
|
||||
76 244 204
|
||||
153 228 201
|
||||
230 244 173
|
||||
205 251 128
|
||||
63 50 194
|
||||
153 211 165
|
||||
33 33 105
|
||||
53 53 168
|
||||
62 85 198
|
||||
85 85 202
|
||||
242 56 141
|
||||
147 78 192
|
||||
43 189 156
|
||||
40 138 191
|
||||
44 211 177
|
||||
65 132 243
|
||||
165 230 153
|
||||
16 16 16
|
||||
143 143 220
|
||||
212 245 255
|
||||
255 255 255
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
152 208 160
|
||||
37 114 136
|
||||
66 151 189
|
||||
151 58 210
|
||||
63 209 230
|
||||
160 64 109
|
||||
234 243 49
|
||||
0 0 0
|
||||
218 32 48
|
||||
52 201 163
|
||||
76 244 204
|
||||
153 228 201
|
||||
230 244 173
|
||||
205 251 128
|
||||
63 50 194
|
||||
153 211 165
|
||||
39 80 120
|
||||
71 161 196
|
||||
62 85 198
|
||||
70 209 236
|
||||
237 183 87
|
||||
147 78 192
|
||||
138 48 220
|
||||
191 40 81
|
||||
44 211 177
|
||||
65 132 243
|
||||
165 230 153
|
||||
16 16 16
|
||||
148 226 243
|
||||
212 245 255
|
||||
255 255 255
|
||||
|
||||
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
graphics/pokemon/terapagos/terastal/front.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
152 208 160
|
||||
90 53 7
|
||||
42 121 78
|
||||
70 70 70
|
||||
215 38 89
|
||||
41 45 164
|
||||
77 151 158
|
||||
78 190 242
|
||||
170 172 227
|
||||
122 228 243
|
||||
147 245 227
|
||||
252 252 182
|
||||
153 211 165
|
||||
26 26 26
|
||||
247 69 26
|
||||
255 213 45
|
||||
45 45 140
|
||||
62 85 198
|
||||
85 85 202
|
||||
242 70 153
|
||||
147 78 192
|
||||
40 138 191
|
||||
44 211 177
|
||||
65 132 243
|
||||
165 230 153
|
||||
16 16 16
|
||||
245 160 222
|
||||
255 255 255
|
||||
52 66 152
|
||||
0 200 255
|
||||
197 34 91
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
152 208 160
|
||||
90 53 7
|
||||
42 121 78
|
||||
70 70 70
|
||||
215 38 89
|
||||
41 45 164
|
||||
77 151 158
|
||||
78 190 242
|
||||
170 172 227
|
||||
122 228 243
|
||||
147 245 227
|
||||
252 252 182
|
||||
153 211 165
|
||||
26 26 26
|
||||
247 69 26
|
||||
255 213 45
|
||||
61 126 192
|
||||
62 85 198
|
||||
70 209 236
|
||||
237 183 87
|
||||
147 78 192
|
||||
191 40 81
|
||||
44 211 177
|
||||
65 132 243
|
||||
165 230 153
|
||||
16 16 16
|
||||
245 160 222
|
||||
255 255 255
|
||||
84 215 251
|
||||
255 0 0
|
||||
244 255 0
|
||||
|
||||
@ -818,42 +818,42 @@ static inline bool32 IsBattleMoveStatus(u32 move)
|
||||
return GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS;
|
||||
}
|
||||
|
||||
/* Checks if 'battlerId' is any of the types.
|
||||
/* Checks if 'battler' is any of the types.
|
||||
* Passing multiple types is more efficient than calling this multiple
|
||||
* times with one type because it shares the 'GetBattlerTypes' result. */
|
||||
#define _IS_BATTLER_ANY_TYPE(battlerId, ignoreTera, ...) \
|
||||
({ \
|
||||
u32 types[3]; \
|
||||
GetBattlerTypes(battlerId, ignoreTera, types); \
|
||||
#define _IS_BATTLER_ANY_TYPE(battler, ignoreTera, ...) \
|
||||
({ \
|
||||
u32 types[3]; \
|
||||
GetBattlerTypes(battler, ignoreTera, types); \
|
||||
RECURSIVELY(R_FOR_EACH(_IS_BATTLER_ANY_TYPE_HELPER, __VA_ARGS__)) FALSE; \
|
||||
})
|
||||
|
||||
#define _IS_BATTLER_ANY_TYPE_HELPER(type) (types[0] == type) || (types[1] == type) || (types[2] == type) ||
|
||||
|
||||
#define IS_BATTLER_ANY_TYPE(battlerId, ...) _IS_BATTLER_ANY_TYPE(battlerId, FALSE, __VA_ARGS__)
|
||||
#define IS_BATTLER_ANY_TYPE(battler, ...) _IS_BATTLER_ANY_TYPE(battler, FALSE, __VA_ARGS__)
|
||||
#define IS_BATTLER_OF_TYPE IS_BATTLER_ANY_TYPE
|
||||
#define IS_BATTLER_ANY_BASE_TYPE(battlerId, ...) _IS_BATTLER_ANY_TYPE(battlerId, TRUE, __VA_ARGS__)
|
||||
#define IS_BATTLER_ANY_BASE_TYPE(battler, ...) _IS_BATTLER_ANY_TYPE(battler, TRUE, __VA_ARGS__)
|
||||
#define IS_BATTLER_OF_BASE_TYPE IS_BATTLER_ANY_BASE_TYPE
|
||||
|
||||
#define IS_BATTLER_TYPELESS(battlerId) \
|
||||
({ \
|
||||
u32 types[3]; \
|
||||
GetBattlerTypes(battlerId, FALSE, types); \
|
||||
#define IS_BATTLER_TYPELESS(battlerId) \
|
||||
({ \
|
||||
u32 types[3]; \
|
||||
GetBattlerTypes(battlerId, FALSE, types); \
|
||||
types[0] == TYPE_MYSTERY && types[1] == TYPE_MYSTERY && types[2] == TYPE_MYSTERY; \
|
||||
})
|
||||
|
||||
#define SET_BATTLER_TYPE(battlerId, type) \
|
||||
{ \
|
||||
gBattleMons[battlerId].types[0] = type; \
|
||||
gBattleMons[battlerId].types[1] = type; \
|
||||
gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \
|
||||
#define SET_BATTLER_TYPE(battler, type) \
|
||||
{ \
|
||||
gBattleMons[battler].types[0] = type; \
|
||||
gBattleMons[battler].types[1] = type; \
|
||||
gBattleMons[battler].types[2] = TYPE_MYSTERY; \
|
||||
}
|
||||
|
||||
#define RESTORE_BATTLER_TYPE(battlerId) \
|
||||
{ \
|
||||
gBattleMons[battlerId].types[0] = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \
|
||||
gBattleMons[battlerId].types[1] = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \
|
||||
gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \
|
||||
#define RESTORE_BATTLER_TYPE(battler) \
|
||||
{ \
|
||||
gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; \
|
||||
gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; \
|
||||
gBattleMons[battler].types[2] = TYPE_MYSTERY; \
|
||||
}
|
||||
|
||||
#define GET_STAT_BUFF_ID(n) ((n & 7)) // first three bits 0x1, 0x2, 0x4
|
||||
|
||||
0
include/battle_ai_script_commands.h
Normal file
@ -68,8 +68,8 @@ void DestroyAnimSprite(struct Sprite *sprite);
|
||||
void DestroyAnimVisualTask(u8 taskId);
|
||||
void DestroyAnimSoundTask(u8 taskId);
|
||||
u8 GetAnimBattlerId(u8 wantedBattler);
|
||||
bool8 IsBattlerSpriteVisible(u8 battlerId);
|
||||
void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
|
||||
bool8 IsBattlerSpriteVisible(u8 battler);
|
||||
void MoveBattlerSpriteToBG(u8 battler, bool8 toBG_2, bool8 setSpriteInvisible);
|
||||
bool8 IsContest(void);
|
||||
s8 BattleAnimAdjustPanning(s8 pan);
|
||||
s8 BattleAnimAdjustPanning2(s8 pan);
|
||||
@ -92,7 +92,7 @@ void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite);
|
||||
void AnimWeatherBallUp(struct Sprite *sprite);
|
||||
void AnimWeatherBallDown(struct Sprite *sprite);
|
||||
void AnimSpinningSparkle(struct Sprite *sprite);
|
||||
void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y);
|
||||
void SetAverageBattlerPositions(u8 battler, bool8 respectMonPicOffsets, s16 *x, s16 *y);
|
||||
void DestroySpriteAndMatrix(struct Sprite *sprite);
|
||||
void TranslateSpriteLinearFixedPoint(struct Sprite *sprite);
|
||||
void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets);
|
||||
@ -102,7 +102,7 @@ void StartAnimLinearTranslation(struct Sprite *sprite);
|
||||
void InitAnimArcTranslation(struct Sprite *sprite);
|
||||
bool8 AnimTranslateLinear(struct Sprite *sprite);
|
||||
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
|
||||
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId);
|
||||
u8 GetBattlerSpriteCoord2(u8 battler, u8 attributeId);
|
||||
void InitAnimLinearTranslationWithSpeed(struct Sprite *sprite);
|
||||
u16 ArcTan2Neg(s16 x, s16 y);
|
||||
void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation);
|
||||
@ -111,19 +111,19 @@ void TranslateSpriteLinearAndFlicker(struct Sprite *sprite);
|
||||
void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite);
|
||||
void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite);
|
||||
void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset);
|
||||
s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr);
|
||||
u8 GetBattlerYCoordWithElevation(u8 battlerId);
|
||||
s16 GetBattlerSpriteCoordAttr(u8 battler, u8 attr);
|
||||
u8 GetBattlerYCoordWithElevation(u8 battler);
|
||||
void WaitAnimForDuration(struct Sprite *sprite);
|
||||
void AnimTravelDiagonally(struct Sprite *sprite);
|
||||
void InitAnimLinearTranslation(struct Sprite *sprite);
|
||||
void AnimTranslateLinear_WithFollowup(struct Sprite *sprite);
|
||||
u8 GetBattlerSpriteBGPriority(u8 battlerId);
|
||||
u8 GetBattlerSpriteBGPriority(u8 battler);
|
||||
void *LoadPointerFromVars(s16 bottom, s16 top);
|
||||
void StorePointerInVars(s16 *bottom, s16 *top, const void *ptr);
|
||||
void InitPrioritiesForVisibleBattlers(void);
|
||||
void GetBattleAnimBg1Data(struct BattleAnimBgData *);
|
||||
void GetBattleAnimBgData(struct BattleAnimBgData *, u32 bgId);
|
||||
u8 GetBattlerSpriteSubpriority(u8 battlerId);
|
||||
u8 GetBattlerSpriteSubpriority(u8 battler);
|
||||
bool8 TranslateAnimHorizontalArc(struct Sprite *sprite);
|
||||
void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite);
|
||||
void ResetSpriteRotScale(u8 spriteId);
|
||||
@ -158,8 +158,8 @@ void SetGrayscaleOrOriginalPalette(u16 palNum, bool8 restoreOriginal);
|
||||
void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds);
|
||||
bool8 RunAffineAnimFromTaskData(struct Task *task);
|
||||
void AnimThrowProjectile(struct Sprite *sprite);
|
||||
void GetBgDataForTransform(struct BattleAnimBgData *dest, u8 battlerId);
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, u32 battlerId);
|
||||
void GetBgDataForTransform(struct BattleAnimBgData *dest, u8 battler);
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, u32 battler);
|
||||
void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite);
|
||||
void Trade_MoveSelectedMonToTarget(struct Sprite *sprite);
|
||||
void DestroyAnimVisualTaskAndDisableBlend(u8 taskId);
|
||||
@ -188,17 +188,17 @@ enum
|
||||
BATTLER_COORD_ATTR_RAW_BOTTOM,
|
||||
};
|
||||
|
||||
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
|
||||
u8 GetBattlerSpriteCoord(u8 battler, u8 attributeId);
|
||||
|
||||
bool8 IsBattlerSpritePresent(u8 battlerId);
|
||||
bool8 IsBattlerSpritePresent(u8 battler);
|
||||
void ClearBattleAnimBg(u32 bgId);
|
||||
u8 GetAnimBattlerSpriteId(u8 wantedBattler);
|
||||
u8 GetBattleBgPaletteNum(void);
|
||||
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
|
||||
u8 GetBattlerSpriteBGPriorityRank(u8 battler);
|
||||
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *));
|
||||
void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
|
||||
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
|
||||
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
|
||||
u8 GetBattlerSpriteDefault_Y(u8 battler);
|
||||
u8 GetSubstituteSpriteDefault_Y(u8 battler);
|
||||
|
||||
// battle_anim_status_effects.c
|
||||
#define STAT_ANIM_PLUS1 (MOVE_EFFECT_ATK_PLUS_1 - 1)
|
||||
@ -221,7 +221,7 @@ enum {
|
||||
STAT_ANIM_PAL_MULTIPLE = 0xFF
|
||||
};
|
||||
|
||||
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
|
||||
void LaunchStatusAnimation(u8 battler, u8 statusAnimId);
|
||||
extern const union AnimCmd *const gAnims_SpinningSparkle[];
|
||||
|
||||
// battle_anim_ground.c
|
||||
|
||||
@ -64,11 +64,65 @@ enum {
|
||||
REQUEST_TOUGH_RIBBON_BATTLE,
|
||||
};
|
||||
|
||||
// Accessors for gBattleControllerExecFlags.
|
||||
//
|
||||
// These are provided for documentation purposes, to make the battle
|
||||
// controller internals and the link communication internals more
|
||||
// legible. Several of these have functions that you should call
|
||||
// (e.g. MarkBattlerForControllerExec) instead of using these macros
|
||||
// directly.
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler) \
|
||||
gBattleControllerExecFlags |= (1u << battler)
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_IDLE_ON_LOCAL(battler) \
|
||||
gBattleControllerExecFlags &= ~(1u << battler)
|
||||
|
||||
#define IS_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler) \
|
||||
(gBattleControllerExecFlags & (1u << battler))
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_MESSAGE_OUTBOUND_OVER_LINK(battler) \
|
||||
gBattleControllerExecFlags |= (1u << battler) << (32 - MAX_BATTLERS_COUNT)
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_MESSAGE_SYNCHRONIZED_OVER_LINK(battler) \
|
||||
gBattleControllerExecFlags &= ~((1 << 28) << (battler))
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
|
||||
gBattleControllerExecFlags |= (1u << battler) << ((playerId) << 2)
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId) \
|
||||
gBattleControllerExecFlags &= ~(1u << battler) << ((playerId) * 4)
|
||||
|
||||
#define IS_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
|
||||
(gBattleControllerExecFlags & (1u << battler) << ((playerId) * 4))
|
||||
|
||||
// This actually checks if a specific controller is active on any player or if
|
||||
// *any* controller is pending sync over link communications, but the macro name
|
||||
// can only be so specific before it just gets ridiculous.
|
||||
#define IS_BATTLE_CONTROLLER_ACTIVE_OR_PENDING_SYNC_ANYWHERE(battler) \
|
||||
(gBattleControllerExecFlags & ( \
|
||||
(1u << battler) \
|
||||
| (0xF << 28) \
|
||||
| (1u << battler << 4) \
|
||||
| (1u << battler << 8) \
|
||||
| (1u << battler << 12) \
|
||||
))
|
||||
|
||||
// Special arguments for Battle Controller functions.
|
||||
|
||||
enum { // Values given to the emit functions to choose gBattleBufferA or gBattleBufferB
|
||||
BUFFER_A,
|
||||
BUFFER_B
|
||||
enum {
|
||||
// For commands sent from the core battle engine to a controller.
|
||||
B_COMM_TO_CONTROLLER, // gBattleBufferA
|
||||
|
||||
// For replies sent from a controller to the core battle engine.
|
||||
B_COMM_TO_ENGINE, // gBattleBufferB
|
||||
|
||||
// During local play, a controller must directly mark itself as
|
||||
// inactive when it's done processing, whether or not it sends
|
||||
// a reply. During multiplayer, it must NOT directly mark itself
|
||||
// as inactive, but instead send one of these, with the player's
|
||||
// multiplayer ID as data.
|
||||
B_COMM_CONTROLLER_IS_DONE
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@ -93,7 +93,7 @@ const u8* FaintClearSetData(u32 battler);
|
||||
void BattleTurnPassed(void);
|
||||
u8 IsRunningFromBattleImpossible(u32 battler);
|
||||
void SwitchTwoBattlersInParty(u32 battler, u32 battler2);
|
||||
void SwitchPartyOrder(u32 battlerId);
|
||||
void SwitchPartyOrder(u32 battler);
|
||||
void SwapTurnOrder(u8 id1, u8 id2);
|
||||
u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect holdEffect);
|
||||
u32 GetBattlerTotalSpeedStat(u32 battler);
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
extern u8 gRecordsWindowId;
|
||||
|
||||
void ClearPlayerLinkBattleRecords(void);
|
||||
void UpdatePlayerLinkBattleRecords(s32 battlerId);
|
||||
void UpdatePlayerLinkBattleRecords(s32 battler);
|
||||
void ShowLinkBattleRecords(void);
|
||||
void RemoveRecordsWindow(void);
|
||||
void ShowTrainerHillRecords(void);
|
||||
|
||||
@ -26,7 +26,7 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA
|
||||
s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk);
|
||||
s32 GetCritHitOdds(s32 critChanceIndex);
|
||||
u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect);
|
||||
u8 GetBattlerTurnOrderNum(u8 battlerId);
|
||||
u8 GetBattlerTurnOrderNum(u8 battler);
|
||||
bool32 NoAliveMonsForBattlerSide(u32 battler);
|
||||
bool32 NoAliveMonsForPlayer(void);
|
||||
bool32 NoAliveMonsForEitherParty(void);
|
||||
@ -36,7 +36,7 @@ void BattleDestroyYesNoCursorAt(u8 cursorPosition);
|
||||
void BattleCreateYesNoCursorAt(u8 cursorPosition);
|
||||
void BufferMoveToLearnIntoBattleTextBuff2(void);
|
||||
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
|
||||
bool8 UproarWakeUpCheck(u8 battlerId);
|
||||
bool8 UproarWakeUpCheck(u8 battler);
|
||||
bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 DoesDisguiseBlockMove(u32 battler, u32 move);
|
||||
bool32 CanUseLastResort(u8 battlerId);
|
||||
|
||||
@ -6,6 +6,6 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc
|
||||
void BattleTv_SetDataBasedOnAnimation(u8 animationId);
|
||||
void TryPutLinkBattleTvShowOnAir(void);
|
||||
void BattleTv_ClearExplosionFaintCause(void);
|
||||
u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId);
|
||||
u8 GetBattlerMoveSlotId(u8 battler, u16 move);
|
||||
|
||||
#endif // GUARD_BATTLE_TV_H
|
||||
|
||||
@ -23,12 +23,23 @@
|
||||
* +---------------------------+
|
||||
*/
|
||||
|
||||
#define MAX_BATTLERS_COUNT 4
|
||||
enum BattlerPosition
|
||||
{
|
||||
B_POSITION_PLAYER_LEFT,
|
||||
B_POSITION_OPPONENT_LEFT,
|
||||
B_POSITION_PLAYER_RIGHT,
|
||||
B_POSITION_OPPONENT_RIGHT,
|
||||
MAX_POSITION_COUNT,
|
||||
};
|
||||
|
||||
#define B_POSITION_PLAYER_LEFT 0
|
||||
#define B_POSITION_OPPONENT_LEFT 1
|
||||
#define B_POSITION_PLAYER_RIGHT 2
|
||||
#define B_POSITION_OPPONENT_RIGHT 3
|
||||
enum BattlerId
|
||||
{
|
||||
B_BATTLER_0,
|
||||
B_BATTLER_1,
|
||||
B_BATTLER_2,
|
||||
B_BATTLER_3,
|
||||
MAX_BATTLERS_COUNT,
|
||||
};
|
||||
|
||||
// These macros can be used with either battler ID or positions to get the partner or the opposite mon
|
||||
#define BATTLE_OPPOSITE(id) ((id) ^ BIT_SIDE)
|
||||
|
||||
@ -518,7 +518,7 @@ struct ApprenticeQuestion
|
||||
u8 moveSlot:2;
|
||||
u8 suggestedChange:2; // TRUE if told to use held item or second move, FALSE if told to use no item or first move
|
||||
//u8 padding;
|
||||
u16 data; // used both as an itemId and a moveId
|
||||
u16 data; // used both as an itemId and a move
|
||||
};
|
||||
|
||||
struct PlayersApprentice
|
||||
|
||||
@ -16,7 +16,7 @@ struct PartyMenu
|
||||
s8 slotId2;
|
||||
u8 action;
|
||||
u16 bagItem;
|
||||
s16 data1; // used variously as a moveId, counter, moveSlotId, or cursorPos
|
||||
s16 data1; // used variously as a move, counter, moveSlotId, or cursorPos
|
||||
s16 learnMoveState; // data2, used only as a learn move state
|
||||
};
|
||||
|
||||
@ -87,8 +87,8 @@ void ChooseMonForWirelessMinigame(void);
|
||||
void OpenPartyMenuInBattle(u8 partyAction);
|
||||
void ChooseMonForInBattleItem(void);
|
||||
void BufferBattlePartyCurrentOrder(void);
|
||||
void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId);
|
||||
void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 arrayIndex);
|
||||
void BufferBattlePartyCurrentOrderBySide(u8 battler, u8 flankId);
|
||||
void SwitchPartyOrderLinkMulti(u8 battler, u8 slot, u8 arrayIndex);
|
||||
void SwitchPartyMonSlots(u8 slot, u8 slot2);
|
||||
u8 GetPartyIdFromBattlePartyId(u8 slot);
|
||||
void ShowPartyMenuToShowcaseMultiBattleParty(void);
|
||||
|
||||
@ -656,7 +656,7 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok
|
||||
void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId);
|
||||
void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId);
|
||||
void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest);
|
||||
bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId);
|
||||
bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battler);
|
||||
u16 GetUnionRoomTrainerPic(void);
|
||||
u16 GetUnionRoomTrainerClass(void);
|
||||
void CreateEnemyEventMon(void);
|
||||
@ -676,7 +676,7 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove);
|
||||
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move);
|
||||
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
|
||||
u8 CountAliveMonsInBattle(u8 caseId, u32 battler);
|
||||
u8 GetDefaultMoveTarget(u8 battlerId);
|
||||
u8 GetDefaultMoveTarget(u8 battler);
|
||||
u8 GetMonGender(struct Pokemon *mon);
|
||||
u8 GetBoxMonGender(struct BoxPokemon *boxMon);
|
||||
u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
|
||||
@ -730,10 +730,10 @@ u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex);
|
||||
void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
|
||||
void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
|
||||
void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst);
|
||||
void CopyPartyMonToBattleData(u32 battlerId, u32 partyIndex);
|
||||
void CopyPartyMonToBattleData(u32 battler, u32 partyIndex);
|
||||
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
|
||||
bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
|
||||
bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battlerId);
|
||||
bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battler);
|
||||
u8 GetItemEffectParamOffset(u32 battler, u16 itemId, u8 effectByte, u8 effectBit);
|
||||
u8 *UseStatIncreaseItem(u16 itemId);
|
||||
u8 GetNature(struct Pokemon *mon);
|
||||
|
||||
@ -59,7 +59,7 @@ bool8 CheckFreePokemonStorageSpace(void);
|
||||
bool32 CheckBoxMonSanityAt(u32 boxId, u32 boxPosition);
|
||||
u32 CountStorageNonEggMons(void);
|
||||
u32 CountAllStorageMons(void);
|
||||
bool32 AnyStorageMonWithMove(u16 moveId);
|
||||
bool32 AnyStorageMonWithMove(u16 move);
|
||||
|
||||
void ResetWaldaWallpaper(void);
|
||||
void SetWaldaWallpaperLockedOrUnlocked(bool32 unlocked);
|
||||
|
||||
@ -60,9 +60,9 @@ extern u8 gRecordedBattleMultiplayerId;
|
||||
|
||||
void RecordedBattle_Init(u8 mode);
|
||||
void RecordedBattle_SetTrainerInfo(void);
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action);
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear);
|
||||
u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battlerId);
|
||||
void RecordedBattle_SetBattlerAction(u8 battler, u8 action);
|
||||
void RecordedBattle_ClearBattlerAction(u8 battler, u8 bytesToClear);
|
||||
u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battler);
|
||||
u8 RecordedBattle_BufferNewBattlerData(u8 *dst);
|
||||
void RecordedBattle_RecordAllBattlerData(u8 *data);
|
||||
bool32 CanCopyRecordedBattleSaveData(void);
|
||||
|
||||
@ -5,7 +5,7 @@ extern u8 *const gTVStringVarPtrs[3];
|
||||
|
||||
void ClearTVShowData(void);
|
||||
void TryPutBreakingNewsOnAir(void);
|
||||
void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
|
||||
void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIndex, const u16 *movePtr, u16 betterMove);
|
||||
void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facility);
|
||||
void DoTVShow(void);
|
||||
void DoTVShowInSearchOfTrainers(void);
|
||||
|
||||
@ -70,8 +70,8 @@ struct ApprenticeQuestionData
|
||||
{
|
||||
u16 speciesId;
|
||||
u16 altSpeciesId;
|
||||
u16 moveId1;
|
||||
u16 moveId2;
|
||||
u16 move1;
|
||||
u16 move2;
|
||||
};
|
||||
|
||||
// IWRAM common
|
||||
@ -81,7 +81,7 @@ COMMON_DATA void (*gApprenticeFunc)(void) = NULL;
|
||||
|
||||
// This file's functions.
|
||||
static u16 GetRandomAlternateMove(u8 monId);
|
||||
static bool8 TrySetMove(u8 monId, u16 moveId);
|
||||
static bool8 TrySetMove(u8 monId, u16 move);
|
||||
static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId);
|
||||
static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height);
|
||||
static void RemoveAndHideWindow(u8 windowId);
|
||||
@ -316,7 +316,7 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
u16 species;
|
||||
const struct LevelUpMove *learnset;
|
||||
bool32 needTMs = FALSE;
|
||||
u16 moveId = MOVE_NONE;
|
||||
u16 move = MOVE_NONE;
|
||||
bool32 shouldUseMove;
|
||||
u8 level;
|
||||
|
||||
@ -358,7 +358,7 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
}
|
||||
while (!shouldUseMove);
|
||||
|
||||
moveId = ItemIdToBattleMoveId(ITEM_TM01 + id);
|
||||
move = ItemIdToBattleMoveId(ITEM_TM01 + id);
|
||||
shouldUseMove = TRUE;
|
||||
|
||||
if (numLearnsetMoves <= MAX_MON_MOVES)
|
||||
@ -369,7 +369,7 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
for (; j < numLearnsetMoves; j++)
|
||||
{
|
||||
// Keep looking for TMs until one not in the level up learnset is found
|
||||
if ((learnset[j].move) == moveId)
|
||||
if ((learnset[j].move) == move)
|
||||
{
|
||||
shouldUseMove = FALSE;
|
||||
break;
|
||||
@ -393,13 +393,13 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
{
|
||||
// Get a random move excluding the 4 it would know at max level
|
||||
u8 learnsetId = Random() % (numLearnsetMoves - MAX_MON_MOVES);
|
||||
moveId = learnset[learnsetId].move;
|
||||
move = learnset[learnsetId].move;
|
||||
shouldUseMove = TRUE;
|
||||
|
||||
for (j = numLearnsetMoves - MAX_MON_MOVES; j < numLearnsetMoves; j++)
|
||||
{
|
||||
// Keep looking for moves until one not in the last 4 is found
|
||||
if ((learnset[j].move) == moveId)
|
||||
if ((learnset[j].move) == move)
|
||||
{
|
||||
shouldUseMove = FALSE;
|
||||
break;
|
||||
@ -409,29 +409,29 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
}
|
||||
}
|
||||
|
||||
if (TrySetMove(monId, moveId))
|
||||
if (TrySetMove(monId, move))
|
||||
{
|
||||
if (IsValidApprenticeMove(moveId))
|
||||
if (IsValidApprenticeMove(move))
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
gApprenticePartyMovesData->moveCounter++;
|
||||
return moveId;
|
||||
return move;
|
||||
}
|
||||
|
||||
static bool8 TrySetMove(u8 monId, u16 moveId)
|
||||
static bool8 TrySetMove(u8 monId, u16 move)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < NUM_WHICH_MOVE_QUESTIONS; i++)
|
||||
{
|
||||
if (gApprenticePartyMovesData->moves[monId][i] == moveId)
|
||||
if (gApprenticePartyMovesData->moves[monId][i] == move)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gApprenticePartyMovesData->moves[monId][gApprenticePartyMovesData->moveCounter] = moveId;
|
||||
gApprenticePartyMovesData->moves[monId][gApprenticePartyMovesData->moveCounter] = move;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -584,8 +584,8 @@ static void CreateApprenticeMenu(u8 menu)
|
||||
case APPRENTICE_ASK_MOVES:
|
||||
left = 17;
|
||||
top = 8;
|
||||
strings[0] = GetMoveName(gApprenticeQuestionData->moveId1);
|
||||
strings[1] = GetMoveName(gApprenticeQuestionData->moveId2);
|
||||
strings[0] = GetMoveName(gApprenticeQuestionData->move1);
|
||||
strings[1] = GetMoveName(gApprenticeQuestionData->move2);
|
||||
break;
|
||||
case APPRENTICE_ASK_GIVE:
|
||||
left = 18;
|
||||
@ -985,8 +985,8 @@ static void InitQuestionData(void)
|
||||
count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
|
||||
APPRENTICE_SPECIES_ID_NO_COND(id1, count);
|
||||
gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id1];
|
||||
gApprenticeQuestionData->moveId1 = GetDefaultMove(count, id1, PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].moveSlot);
|
||||
gApprenticeQuestionData->moveId2 = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data;
|
||||
gApprenticeQuestionData->move1 = GetDefaultMove(count, id1, PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].moveSlot);
|
||||
gApprenticeQuestionData->move2 = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data;
|
||||
}
|
||||
}
|
||||
else if (gSpecialVar_0x8005 == APPRENTICE_QUESTION_WHAT_ITEM)
|
||||
@ -1041,10 +1041,10 @@ static void ApprenticeBufferString(void)
|
||||
StringCopy(stringDst, GetSpeciesName(gApprenticeQuestionData->speciesId));
|
||||
break;
|
||||
case APPRENTICE_BUFF_MOVE1:
|
||||
StringCopy(stringDst, GetMoveName(gApprenticeQuestionData->moveId1));
|
||||
StringCopy(stringDst, GetMoveName(gApprenticeQuestionData->move1));
|
||||
break;
|
||||
case APPRENTICE_BUFF_MOVE2:
|
||||
StringCopy(stringDst, GetMoveName(gApprenticeQuestionData->moveId2));
|
||||
StringCopy(stringDst, GetMoveName(gApprenticeQuestionData->move2));
|
||||
break;
|
||||
case APPRENTICE_BUFF_ITEM:
|
||||
StringCopy(stringDst, ItemId_GetName(PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data));
|
||||
|
||||
0
src/battle_ai_script_commands.c
Normal file
@ -1370,7 +1370,7 @@ void AI_TrySwitchOrUseItem(u32 battler)
|
||||
}
|
||||
}
|
||||
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_MOVE, BATTLE_OPPOSITE(battler) << 8);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, BATTLE_OPPOSITE(battler) << 8);
|
||||
}
|
||||
|
||||
// If there are two(or more) mons to choose from, always choose one that has baton pass
|
||||
@ -2436,7 +2436,7 @@ static bool32 ShouldUseItem(u32 battler)
|
||||
// Set selected party ID to current battler if none chosen.
|
||||
if (gBattleStruct->itemPartyIndex[battler] == PARTY_SIZE)
|
||||
gBattleStruct->itemPartyIndex[battler] = gBattlerPartyIndexes[battler];
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_ITEM, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_ITEM, 0);
|
||||
gBattleStruct->chosenItem[battler] = item;
|
||||
gBattleHistory->trainerItems[i] = 0;
|
||||
return shouldUse;
|
||||
|
||||
@ -956,30 +956,30 @@ static void Cmd_monbg(void)
|
||||
{
|
||||
bool8 toBG_2;
|
||||
u8 taskId;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
u8 animBattler;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
|
||||
animBattler = sBattleAnimScriptPtr[0];
|
||||
if (animBattler & ANIM_TARGET)
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
else
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
|
||||
// Move designated battler to background
|
||||
if (IsBattlerSpriteVisible(battlerId))
|
||||
if (IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
|
||||
toBG_2 = FALSE;
|
||||
else
|
||||
toBG_2 = TRUE;
|
||||
|
||||
MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE);
|
||||
MoveBattlerSpriteToBG(battler, toBG_2, FALSE);
|
||||
taskId = CreateTask(Task_InitUpdateMonBg, 10);
|
||||
gAnimVisualTaskCount++;
|
||||
gTasks[taskId].tBattlerId = battlerId;
|
||||
gTasks[taskId].tBattlerId = battler;
|
||||
gTasks[taskId].tInBg2 = toBG_2;
|
||||
gTasks[taskId].tActive = TRUE;
|
||||
gTasks[taskId].tIsPartner = FALSE;
|
||||
@ -987,19 +987,19 @@ static void Cmd_monbg(void)
|
||||
}
|
||||
|
||||
// Move battler's partner to background
|
||||
battlerId ^= BIT_FLANK;
|
||||
if (IsBattlerSpriteVisible(battlerId))
|
||||
battler ^= BIT_FLANK;
|
||||
if (IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
|
||||
toBG_2 = FALSE;
|
||||
else
|
||||
toBG_2 = TRUE;
|
||||
|
||||
MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE);
|
||||
MoveBattlerSpriteToBG(battler, toBG_2, FALSE);
|
||||
taskId = CreateTask(Task_InitUpdateMonBg, 10);
|
||||
gAnimVisualTaskCount++;
|
||||
gTasks[taskId].tBattlerId = battlerId;
|
||||
gTasks[taskId].tBattlerId = battler;
|
||||
gTasks[taskId].tInBg2 = toBG_2;
|
||||
gTasks[taskId].tActive = TRUE;
|
||||
gTasks[taskId].tIsPartner = TRUE;
|
||||
@ -1028,26 +1028,26 @@ u8 GetAnimBattlerId(u8 wantedBattler)
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsBattlerSpriteVisible(u8 battlerId)
|
||||
bool8 IsBattlerSpriteVisible(u8 battler)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
if (battlerId == gBattleAnimAttacker)
|
||||
if (battler == gBattleAnimAttacker)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
if (!IsBattlerSpritePresent(battlerId))
|
||||
if (!IsBattlerSpritePresent(battler))
|
||||
return FALSE;
|
||||
if (IsContest())
|
||||
return TRUE; // This line won't ever be reached.
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battler].invisible || !gSprites[gBattlerSpriteIds[battler]].invisible)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
void MoveBattlerSpriteToBG(u8 battler, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
u8 battlerSpriteId;
|
||||
@ -1075,7 +1075,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
|
||||
SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0);
|
||||
|
||||
battlerSpriteId = gBattlerSpriteIds[battlerId];
|
||||
battlerSpriteId = gBattlerSpriteIds[battler];
|
||||
|
||||
gBattle_BG1_X = -(gSprites[battlerSpriteId].x + gSprites[battlerSpriteId].x2) + 0x20;
|
||||
if (IsContest() && IsSpeciesNotUnown(gContestResources->moveAnim->species))
|
||||
@ -1083,18 +1083,18 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
|
||||
gBattle_BG1_Y = -(gSprites[battlerSpriteId].y + gSprites[battlerSpriteId].y2) + 0x20;
|
||||
if (setSpriteInvisible)
|
||||
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = TRUE;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
|
||||
|
||||
LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], (void *)(BG_PLTT + PLTT_OFFSET_4BPP(animBg.paletteId)), PLTT_SIZE_4BPP);
|
||||
LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(battler)], BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferUnfaded[OBJ_PLTT_ID(battler)], (void *)(BG_PLTT + PLTT_OFFSET_4BPP(animBg.paletteId)), PLTT_SIZE_4BPP);
|
||||
|
||||
if (IsContest())
|
||||
battlerPosition = 0;
|
||||
else
|
||||
battlerPosition = GetBattlerPosition(battlerId);
|
||||
battlerPosition = GetBattlerPosition(battler);
|
||||
|
||||
DrawBattlerOnBg(1, 0, 0, battlerPosition, animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset);
|
||||
|
||||
@ -1112,21 +1112,21 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1);
|
||||
SetAnimBgAttribute(2, BG_ANIM_AREA_OVERFLOW_MODE, 0);
|
||||
|
||||
battlerSpriteId = gBattlerSpriteIds[battlerId];
|
||||
battlerSpriteId = gBattlerSpriteIds[battler];
|
||||
|
||||
gBattle_BG2_X = -(gSprites[battlerSpriteId].x + gSprites[battlerSpriteId].x2) + 0x20;
|
||||
gBattle_BG2_Y = -(gSprites[battlerSpriteId].y + gSprites[battlerSpriteId].y2) + 0x20;
|
||||
|
||||
if (setSpriteInvisible)
|
||||
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = TRUE;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
|
||||
|
||||
LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], BG_PLTT_ID(9), PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], (void *)(BG_PLTT + PLTT_OFFSET_4BPP(9)), PLTT_SIZE_4BPP);
|
||||
LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(battler)], BG_PLTT_ID(9), PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferUnfaded[OBJ_PLTT_ID(battler)], (void *)(BG_PLTT + PLTT_OFFSET_4BPP(9)), PLTT_SIZE_4BPP);
|
||||
|
||||
DrawBattlerOnBg(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset);
|
||||
DrawBattlerOnBg(2, 0, 0, GetBattlerPosition(battler), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1194,12 +1194,12 @@ void ResetBattleAnimBg(bool8 toBG2)
|
||||
|
||||
static void Task_UpdateMonBg(u8 taskId)
|
||||
{
|
||||
u8 spriteId, battlerId;
|
||||
u8 spriteId, battler;
|
||||
s16 x, y;
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
spriteId = gTasks[taskId].t2_SpriteId;
|
||||
battlerId = gTasks[taskId].t2_BattlerId;
|
||||
battler = gTasks[taskId].t2_BattlerId;
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
x = gTasks[taskId].t2_SpriteX - (gSprites[spriteId].x + gSprites[spriteId].x2);
|
||||
y = gTasks[taskId].t2_SpriteY - (gSprites[spriteId].y + gSprites[spriteId].y2);
|
||||
@ -1208,13 +1208,13 @@ static void Task_UpdateMonBg(u8 taskId)
|
||||
{
|
||||
gBattle_BG1_X = x + gTasks[taskId].t2_BgX;
|
||||
gBattle_BG1_Y = y + gTasks[taskId].t2_BgY;
|
||||
CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId)], PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battler)], &gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId)], PLTT_SIZE_4BPP);
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattle_BG2_X = x + gTasks[taskId].t2_BgX;
|
||||
gBattle_BG2_Y = y + gTasks[taskId].t2_BgY;
|
||||
CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(9)], PLTT_SIZE_4BPP);
|
||||
CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battler)], &gPlttBufferFaded[BG_PLTT_ID(9)], PLTT_SIZE_4BPP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1234,7 +1234,7 @@ static void Task_UpdateMonBg(u8 taskId)
|
||||
static void Cmd_clearmonbg(void)
|
||||
{
|
||||
u8 animBattlerId;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
u8 taskId;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
@ -1246,20 +1246,20 @@ static void Cmd_clearmonbg(void)
|
||||
animBattlerId = ANIM_DEF_PARTNER;
|
||||
|
||||
if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
|
||||
if (sMonAnimTaskIdArray[0] != TASK_NONE)
|
||||
gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE;
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
|
||||
if (animBattlerId > 1 && sMonAnimTaskIdArray[1] != TASK_NONE)
|
||||
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battlerId)]].invisible = FALSE;
|
||||
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].invisible = FALSE;
|
||||
else
|
||||
animBattlerId = 0;
|
||||
|
||||
taskId = CreateTask(Task_ClearMonBg, 5);
|
||||
gTasks[taskId].data[0] = animBattlerId;
|
||||
gTasks[taskId].data[2] = battlerId;
|
||||
gTasks[taskId].data[2] = battler;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
}
|
||||
@ -1296,7 +1296,7 @@ static void Task_ClearMonBg(u8 taskId)
|
||||
static void Cmd_monbg_static(void)
|
||||
{
|
||||
bool8 toBG_2;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
u8 animBattlerId;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
@ -1309,31 +1309,31 @@ static void Cmd_monbg_static(void)
|
||||
animBattlerId = ANIM_DEF_PARTNER;
|
||||
|
||||
if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
|
||||
if (IsBattlerSpriteVisible(battlerId))
|
||||
if (IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
|
||||
toBG_2 = FALSE;
|
||||
else
|
||||
toBG_2 = TRUE;
|
||||
|
||||
MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE);
|
||||
MoveBattlerSpriteToBG(battler, toBG_2, FALSE);
|
||||
}
|
||||
|
||||
battlerId ^= BIT_FLANK;
|
||||
if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId))
|
||||
battler ^= BIT_FLANK;
|
||||
if (animBattlerId > 1 && IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
|
||||
toBG_2 = FALSE;
|
||||
else
|
||||
toBG_2 = TRUE;
|
||||
|
||||
MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE);
|
||||
MoveBattlerSpriteToBG(battler, toBG_2, FALSE);
|
||||
}
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
@ -1342,7 +1342,7 @@ static void Cmd_monbg_static(void)
|
||||
static void Cmd_clearmonbg_static(void)
|
||||
{
|
||||
u8 animBattlerId;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
u8 taskId;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
@ -1354,20 +1354,20 @@ static void Cmd_clearmonbg_static(void)
|
||||
animBattlerId = ANIM_DEF_PARTNER;
|
||||
|
||||
if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
|
||||
if (IsBattlerSpriteVisible(battlerId))
|
||||
gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE;
|
||||
if (animBattlerId > 1 && IsBattlerSpriteVisible(BATTLE_PARTNER(battlerId)))
|
||||
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battlerId)]].invisible = FALSE;
|
||||
if (IsBattlerSpriteVisible(battler))
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
|
||||
if (animBattlerId > 1 && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
|
||||
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].invisible = FALSE;
|
||||
else
|
||||
animBattlerId = 0;
|
||||
|
||||
taskId = CreateTask(Task_ClearMonBgStatic, 5);
|
||||
gTasks[taskId].data[0] = animBattlerId;
|
||||
gTasks[taskId].data[2] = battlerId;
|
||||
gTasks[taskId].data[2] = battler;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
}
|
||||
@ -1378,16 +1378,16 @@ static void Task_ClearMonBgStatic(u8 taskId)
|
||||
if (gTasks[taskId].data[1] != 1)
|
||||
{
|
||||
bool8 toBG_2;
|
||||
u8 battlerId = gTasks[taskId].data[2];
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 battler = gTasks[taskId].data[2];
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
|
||||
toBG_2 = FALSE;
|
||||
else
|
||||
toBG_2 = TRUE;
|
||||
|
||||
if (IsBattlerSpriteVisible(battlerId))
|
||||
if (IsBattlerSpriteVisible(battler))
|
||||
ResetBattleAnimBg(toBG_2);
|
||||
if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(BATTLE_PARTNER(battlerId)))
|
||||
if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
|
||||
ResetBattleAnimBg(toBG_2 ^ 1);
|
||||
|
||||
DestroyTask(taskId);
|
||||
@ -2069,19 +2069,19 @@ static void Cmd_jumpifcontest(void)
|
||||
static void Cmd_splitbgprio(void)
|
||||
{
|
||||
u8 wantedBattler;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
u8 battlerPosition;
|
||||
|
||||
wantedBattler = sBattleAnimScriptPtr[1];
|
||||
sBattleAnimScriptPtr += 2;
|
||||
|
||||
if (wantedBattler != ANIM_ATTACKER)
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
else
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
|
||||
// Apply only if the given battler is the lead (on left from team's perspective)
|
||||
battlerPosition = GetBattlerPosition(battlerId);
|
||||
battlerPosition = GetBattlerPosition(battler);
|
||||
if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT))
|
||||
{
|
||||
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||||
@ -2103,7 +2103,7 @@ static void Cmd_splitbgprio_foes(void)
|
||||
{
|
||||
u8 wantedBattler;
|
||||
u8 battlerPosition;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
|
||||
wantedBattler = sBattleAnimScriptPtr[1];
|
||||
sBattleAnimScriptPtr += 2;
|
||||
@ -2112,12 +2112,12 @@ static void Cmd_splitbgprio_foes(void)
|
||||
if (!IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
if (wantedBattler != ANIM_ATTACKER)
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
else
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
|
||||
// Apply only if the given battler is the lead (on left from team's perspective)
|
||||
battlerPosition = GetBattlerPosition(battlerId);
|
||||
battlerPosition = GetBattlerPosition(battler);
|
||||
if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT))
|
||||
{
|
||||
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||||
|
||||
@ -13,11 +13,16 @@
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
enum {
|
||||
HAILSTRUCTTYPE_NEGATIVE_POS_MOD = 0,
|
||||
HAILSTRUCTTYPE_POSITIVE_POS_MOD = 1,
|
||||
HAILSTRUCTTYPE_FIXED_POSITION = 2,
|
||||
};
|
||||
struct HailStruct {
|
||||
s32 x:10;
|
||||
s32 y:10;
|
||||
s32 bPosition:8;
|
||||
s32 unk3:4;
|
||||
s32 type:4;
|
||||
};
|
||||
|
||||
static void AnimUnusedIceCrystalThrow(struct Sprite *);
|
||||
@ -382,16 +387,16 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
|
||||
|
||||
static const struct HailStruct sHailCoordData[] =
|
||||
{
|
||||
{.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
|
||||
{.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0},
|
||||
{.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1},
|
||||
{.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1},
|
||||
{.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0},
|
||||
{.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
|
||||
{.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0},
|
||||
{.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1},
|
||||
{.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1},
|
||||
{.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0},
|
||||
{.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .type = HAILSTRUCTTYPE_FIXED_POSITION},
|
||||
{.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .type = HAILSTRUCTTYPE_NEGATIVE_POS_MOD},
|
||||
{.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .type = HAILSTRUCTTYPE_POSITIVE_POS_MOD},
|
||||
{.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .type = HAILSTRUCTTYPE_POSITIVE_POS_MOD},
|
||||
{.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .type = HAILSTRUCTTYPE_NEGATIVE_POS_MOD},
|
||||
{.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .type = HAILSTRUCTTYPE_FIXED_POSITION},
|
||||
{.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .type = HAILSTRUCTTYPE_NEGATIVE_POS_MOD},
|
||||
{.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .type = HAILSTRUCTTYPE_POSITIVE_POS_MOD},
|
||||
{.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .type = HAILSTRUCTTYPE_POSITIVE_POS_MOD},
|
||||
{.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .type = HAILSTRUCTTYPE_NEGATIVE_POS_MOD},
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_HailParticle_0[] =
|
||||
@ -1445,6 +1450,13 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
#define tSpriteCount data[1]
|
||||
#define tHailAffineAnimNum data[2]
|
||||
#define tHailStructId data[3]
|
||||
#define tInitialDelayTimer data[4]
|
||||
#define tHailSpawnTimer data[5]
|
||||
|
||||
void AnimTask_Hail(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@ -1455,71 +1467,86 @@ void AnimTask_Hail(u8 taskId)
|
||||
static void AnimTask_Hail2(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
if (++task->data[4] > 2)
|
||||
if (++task->tInitialDelayTimer > 2)
|
||||
{
|
||||
task->data[4] = 0;
|
||||
task->data[5] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[0]++;
|
||||
task->tInitialDelayTimer = 0;
|
||||
task->tHailSpawnTimer = 0;
|
||||
task->tHailAffineAnimNum = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (task->data[5] == 0)
|
||||
if (task->tHailSpawnTimer == 0)
|
||||
{
|
||||
if (GenerateHailParticle(task->data[3], task->data[2], taskId, 1))
|
||||
task->data[1]++;
|
||||
if (GenerateHailParticle(task->tHailStructId, task->tHailAffineAnimNum, taskId, 1))
|
||||
task->tSpriteCount++;
|
||||
|
||||
if (++task->data[2] == 3)
|
||||
if (++task->tHailAffineAnimNum == (int)ARRAY_COUNT(sAffineAnims_HailParticle))
|
||||
{
|
||||
if (++task->data[3] == 10)
|
||||
task->data[0]++;
|
||||
if (++task->tHailStructId == (int)ARRAY_COUNT(sHailCoordData))
|
||||
task->tState++;
|
||||
else
|
||||
task->data[0]--;
|
||||
task->tState--;
|
||||
}
|
||||
else
|
||||
{
|
||||
task->data[5] = 1;
|
||||
task->tHailSpawnTimer = 1;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
task->data[5]--;
|
||||
task->tHailSpawnTimer--;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (task->data[1] == 0)
|
||||
if (task->tSpriteCount == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tSpriteCount
|
||||
#undef tHailAffineAnimNum
|
||||
#undef tHailStructId
|
||||
#undef tInitialDelayTimer
|
||||
#undef tHailSpawnTimer
|
||||
|
||||
// Hail falling particle sprite vars
|
||||
#define sSpawnImpactEffect data[0]
|
||||
#define sTargetX data[3]
|
||||
#define sTargetY data[4]
|
||||
#define sAffineAnimNum data[5]
|
||||
#define sOwnerTaskId data[6]
|
||||
#define sOwnerTaskSpriteCountField data[7]
|
||||
|
||||
static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c)
|
||||
{
|
||||
u8 id;
|
||||
s16 battlerX, battlerY;
|
||||
s16 spriteX;
|
||||
bool8 possibleBool = FALSE;
|
||||
s8 unk = sHailCoordData[hailStructId].unk3;
|
||||
bool8 shouldSpawnImpactEffect = FALSE;
|
||||
s8 type = sHailCoordData[hailStructId].type;
|
||||
|
||||
if (unk != 2)
|
||||
if (type != HAILSTRUCTTYPE_FIXED_POSITION)
|
||||
{
|
||||
id = GetBattlerAtPosition(sHailCoordData[hailStructId].bPosition);
|
||||
if (IsBattlerSpriteVisible(id))
|
||||
{
|
||||
possibleBool = TRUE;
|
||||
shouldSpawnImpactEffect = TRUE;
|
||||
battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2);
|
||||
battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
switch (unk)
|
||||
switch (type)
|
||||
{
|
||||
case 0:
|
||||
case HAILSTRUCTTYPE_NEGATIVE_POS_MOD:
|
||||
battlerX -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
|
||||
battlerY -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
|
||||
break;
|
||||
case 1:
|
||||
case HAILSTRUCTTYPE_POSITIVE_POS_MOD:
|
||||
battlerX += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
|
||||
battlerY += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
|
||||
break;
|
||||
@ -1545,12 +1572,12 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId,
|
||||
else
|
||||
{
|
||||
StartSpriteAffineAnim(&gSprites[id], affineAnimNum);
|
||||
gSprites[id].data[0] = possibleBool;
|
||||
gSprites[id].data[3] = battlerX;
|
||||
gSprites[id].data[4] = battlerY;
|
||||
gSprites[id].data[5] = affineAnimNum;
|
||||
gSprites[id].data[6] = taskId;
|
||||
gSprites[id].data[7] = c;
|
||||
gSprites[id].sSpawnImpactEffect = shouldSpawnImpactEffect;
|
||||
gSprites[id].sTargetX = battlerX;
|
||||
gSprites[id].sTargetY = battlerY;
|
||||
gSprites[id].sAffineAnimNum = affineAnimNum;
|
||||
gSprites[id].sOwnerTaskId = taskId;
|
||||
gSprites[id].sOwnerTaskSpriteCountField = c;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -1562,20 +1589,23 @@ static void AnimHailBegin(struct Sprite *sprite)
|
||||
sprite->x += 4;
|
||||
sprite->y += 8;
|
||||
|
||||
if (sprite->x < sprite->data[3] && sprite->y < sprite->data[4])
|
||||
if (sprite->x < sprite->sTargetX && sprite->y < sprite->sTargetY)
|
||||
return;
|
||||
|
||||
if (sprite->data[0] == 1 && sprite->data[5] == 0)
|
||||
if (sprite->sSpawnImpactEffect == 1 && sprite->sAffineAnimNum == 0)
|
||||
{
|
||||
spriteId = CreateSprite(&gIceCrystalHitLargeSpriteTemplate,
|
||||
sprite->data[3], sprite->data[4], sprite->subpriority);
|
||||
sprite->sTargetX, sprite->sTargetY, sprite->subpriority);
|
||||
|
||||
sprite->data[0] = spriteId;
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
// The sprite template we're using is shared amongst a few other
|
||||
// places, which make the sprite flicker. That's not what we want
|
||||
// here, though. Override the callback.
|
||||
gSprites[sprite->data[0]].callback = AnimHailContinue;
|
||||
gSprites[sprite->data[0]].data[6] = sprite->data[6];
|
||||
gSprites[sprite->data[0]].data[7] = sprite->data[7];
|
||||
gSprites[sprite->data[0]].sOwnerTaskId = sprite->sOwnerTaskId;
|
||||
gSprites[sprite->data[0]].sOwnerTaskSpriteCountField = sprite->sOwnerTaskSpriteCountField;
|
||||
}
|
||||
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
@ -1583,22 +1613,34 @@ static void AnimHailBegin(struct Sprite *sprite)
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[sprite->data[6]].data[sprite->data[7]]--;
|
||||
gTasks[sprite->sOwnerTaskId].data[sprite->sOwnerTaskSpriteCountField]--;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
#undef sSpawnImpactEffect
|
||||
#undef sTargetX
|
||||
#undef sTargetY
|
||||
#undef sAffineAnimNum
|
||||
|
||||
// Hail impact VFX sprite vars
|
||||
#define sTimer data[0]
|
||||
|
||||
static void AnimHailContinue(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] == 20)
|
||||
if (++sprite->sTimer == 20)
|
||||
{
|
||||
gTasks[sprite->data[6]].data[sprite->data[7]]--;
|
||||
gTasks[sprite->sOwnerTaskId].data[sprite->sOwnerTaskSpriteCountField]--;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
#undef sTimer
|
||||
#undef sOwnerTaskId
|
||||
#undef sOwnerTaskSpriteCountField
|
||||
|
||||
// Initializes the animation for Ice Ball.
|
||||
// arg 0: initial x pixel offset
|
||||
// arg 1: initial y pixel offset
|
||||
|
||||
@ -183,7 +183,7 @@ void AnimTask_ShakeMon2(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
bool8 abort = FALSE;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
|
||||
if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT)
|
||||
{
|
||||
@ -196,24 +196,24 @@ void AnimTask_ShakeMon2(u8 taskId)
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case ANIM_PLAYER_LEFT:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
break;
|
||||
case ANIM_PLAYER_RIGHT:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
battler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
break;
|
||||
case ANIM_OPPONENT_LEFT:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
break;
|
||||
case ANIM_OPPONENT_RIGHT:
|
||||
default:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsBattlerSpriteVisible(battlerId) == FALSE)
|
||||
if (IsBattlerSpriteVisible(battler) == FALSE)
|
||||
abort = TRUE;
|
||||
|
||||
spriteId = gBattlerSpriteIds[battlerId];
|
||||
spriteId = gBattlerSpriteIds[battler];
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -675,16 +675,16 @@ static void SlideMonToOffsetPartner(struct Sprite *sprite)
|
||||
static void SlideMonToOffsetAndBack(struct Sprite *sprite)
|
||||
{
|
||||
u8 spriteId;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
sprite->invisible = TRUE;
|
||||
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
|
||||
spriteId = gBattlerSpriteIds[battlerId];
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
spriteId = gBattlerSpriteIds[battler];
|
||||
if (!IsOnPlayerSide(battler))
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
if (gBattleAnimArgs[3] == 1)
|
||||
|
||||
@ -84,7 +84,7 @@ static const struct SpriteSheet sSpriteSheets_MoveEffectMons[] =
|
||||
{ gMiscBlank_Gfx, MON_PIC_SIZE, TAG_MOVE_EFFECT_MON_2, },
|
||||
};
|
||||
|
||||
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
||||
u8 GetBattlerSpriteCoord(u8 battler, u8 coordType)
|
||||
{
|
||||
u8 retVal;
|
||||
u16 species;
|
||||
@ -93,7 +93,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battlerId == 3)
|
||||
if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battler == 3)
|
||||
coordType = BATTLER_COORD_Y;
|
||||
}
|
||||
|
||||
@ -101,10 +101,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
||||
{
|
||||
case BATTLER_COORD_X:
|
||||
case BATTLER_COORD_X_2:
|
||||
retVal = sBattlerCoords[GetBattlerCoordsIndex(battlerId)][GetBattlerPosition(battlerId)].x;
|
||||
retVal = sBattlerCoords[GetBattlerCoordsIndex(battler)][GetBattlerPosition(battler)].x;
|
||||
break;
|
||||
case BATTLER_COORD_Y:
|
||||
retVal = sBattlerCoords[GetBattlerCoordsIndex(battlerId)][GetBattlerPosition(battlerId)].y;
|
||||
retVal = sBattlerCoords[GetBattlerCoordsIndex(battler)][GetBattlerPosition(battler)].y;
|
||||
break;
|
||||
case BATTLER_COORD_Y_PIC_OFFSET:
|
||||
case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT:
|
||||
@ -118,27 +118,27 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
||||
}
|
||||
else
|
||||
{
|
||||
mon = GetBattlerMon(battlerId);
|
||||
illusionMon = GetIllusionMonPtr(battlerId);
|
||||
mon = GetBattlerMon(battler);
|
||||
illusionMon = GetIllusionMonPtr(battler);
|
||||
if (illusionMon != NULL)
|
||||
mon = illusionMon;
|
||||
spriteInfo = gBattleSpritesDataPtr->battlerData;
|
||||
if (!spriteInfo[battlerId].transformSpecies)
|
||||
if (!spriteInfo[battler].transformSpecies)
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
else
|
||||
species = spriteInfo[battlerId].transformSpecies;
|
||||
species = spriteInfo[battler].transformSpecies;
|
||||
}
|
||||
if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
|
||||
retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
|
||||
retVal = GetBattlerSpriteFinal_Y(battler, species, TRUE);
|
||||
else
|
||||
retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE);
|
||||
retVal = GetBattlerSpriteFinal_Y(battler, species, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
u8 GetBattlerYDelta(u8 battlerId, u16 species)
|
||||
u8 GetBattlerYDelta(u8 battler, u16 species)
|
||||
{
|
||||
u32 personality;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
@ -161,25 +161,25 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
|
||||
if (species == SPECIES_UNOWN)
|
||||
{
|
||||
spriteInfo = gBattleSpritesDataPtr->battlerData;
|
||||
if (!spriteInfo[battlerId].transformSpecies)
|
||||
personality = GetMonData(GetBattlerMon(battlerId), MON_DATA_PERSONALITY);
|
||||
if (!spriteInfo[battler].transformSpecies)
|
||||
personality = GetMonData(GetBattlerMon(battler), MON_DATA_PERSONALITY);
|
||||
else
|
||||
personality = gTransformedPersonalities[battlerId];
|
||||
personality = gTransformedPersonalities[battler];
|
||||
species = GetUnownSpeciesId(personality);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsOnPlayerSide(battlerId) || IsContest())
|
||||
if (IsOnPlayerSide(battler) || IsContest())
|
||||
ret = gSpeciesInfo[species].backPicYOffset;
|
||||
else
|
||||
ret = gSpeciesInfo[species].frontPicYOffset;
|
||||
return ret;
|
||||
}
|
||||
|
||||
u8 GetBattlerElevation(u8 battlerId, u16 species)
|
||||
u8 GetBattlerElevation(u8 battler, u16 species)
|
||||
{
|
||||
u8 ret = 0;
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
if (!IsOnPlayerSide(battler))
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
@ -190,24 +190,24 @@ u8 GetBattlerElevation(u8 battlerId, u16 species)
|
||||
return ret;
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3)
|
||||
u8 GetBattlerSpriteFinal_Y(u8 battler, u16 species, bool8 a3)
|
||||
{
|
||||
u16 offset;
|
||||
u8 y;
|
||||
|
||||
if (IsOnPlayerSide(battlerId) || IsContest())
|
||||
if (IsOnPlayerSide(battler) || IsContest())
|
||||
{
|
||||
offset = GetBattlerYDelta(battlerId, species);
|
||||
offset = GetBattlerYDelta(battler, species);
|
||||
}
|
||||
else
|
||||
{
|
||||
offset = GetBattlerYDelta(battlerId, species);
|
||||
offset -= GetBattlerElevation(battlerId, species);
|
||||
offset = GetBattlerYDelta(battler, species);
|
||||
offset -= GetBattlerElevation(battler, species);
|
||||
}
|
||||
y = offset + sBattlerCoords[GetBattlerCoordsIndex(battlerId)][GetBattlerPosition(battlerId)].y;
|
||||
y = offset + sBattlerCoords[GetBattlerCoordsIndex(battler)][GetBattlerPosition(battler)].y;
|
||||
if (a3)
|
||||
{
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
y += 8;
|
||||
if (y > DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8)
|
||||
y = DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8;
|
||||
@ -215,7 +215,7 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3)
|
||||
return y;
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
|
||||
u8 GetBattlerSpriteCoord2(u8 battler, u8 coordType)
|
||||
{
|
||||
u16 species;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
@ -232,55 +232,55 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
|
||||
else
|
||||
{
|
||||
spriteInfo = gBattleSpritesDataPtr->battlerData;
|
||||
if (!spriteInfo[battlerId].transformSpecies)
|
||||
species = gAnimBattlerSpecies[battlerId];
|
||||
if (!spriteInfo[battler].transformSpecies)
|
||||
species = gAnimBattlerSpecies[battler];
|
||||
else
|
||||
species = spriteInfo[battlerId].transformSpecies;
|
||||
species = spriteInfo[battler].transformSpecies;
|
||||
}
|
||||
if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
|
||||
return GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
|
||||
return GetBattlerSpriteFinal_Y(battler, species, TRUE);
|
||||
else
|
||||
return GetBattlerSpriteFinal_Y(battlerId, species, FALSE);
|
||||
return GetBattlerSpriteFinal_Y(battler, species, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetBattlerSpriteCoord(battlerId, coordType);
|
||||
return GetBattlerSpriteCoord(battler, coordType);
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteDefault_Y(u8 battlerId)
|
||||
u8 GetBattlerSpriteDefault_Y(u8 battler)
|
||||
{
|
||||
return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT);
|
||||
return GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT);
|
||||
}
|
||||
|
||||
u8 GetSubstituteSpriteDefault_Y(u8 battlerId)
|
||||
u8 GetSubstituteSpriteDefault_Y(u8 battler)
|
||||
{
|
||||
u16 y;
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 16;
|
||||
if (!IsOnPlayerSide(battler))
|
||||
y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 16;
|
||||
else
|
||||
y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 17;
|
||||
y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 17;
|
||||
return y;
|
||||
}
|
||||
|
||||
u8 GetBattlerYCoordWithElevation(u8 battlerId)
|
||||
u8 GetBattlerYCoordWithElevation(u8 battler)
|
||||
{
|
||||
u16 species;
|
||||
u8 y;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
|
||||
y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y);
|
||||
y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
|
||||
if (!IsContest())
|
||||
{
|
||||
spriteInfo = gBattleSpritesDataPtr->battlerData;
|
||||
|
||||
if (!spriteInfo[battlerId].transformSpecies)
|
||||
species = GetMonData(GetBattlerMon(battlerId), MON_DATA_SPECIES);
|
||||
if (!spriteInfo[battler].transformSpecies)
|
||||
species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
|
||||
else
|
||||
species = spriteInfo[battlerId].transformSpecies;
|
||||
species = spriteInfo[battler].transformSpecies;
|
||||
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
y -= GetBattlerElevation(battlerId, species);
|
||||
if (!IsOnPlayerSide(battler))
|
||||
y -= GetBattlerElevation(battler, species);
|
||||
}
|
||||
return y;
|
||||
}
|
||||
@ -779,8 +779,8 @@ void InitSpritePosToAnimAttackerPartner(struct Sprite *sprite, bool8 respectMonP
|
||||
|
||||
bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool8 respectMonPicOffsets)
|
||||
{
|
||||
u32 battlerId = GetAnimBattlerId(animBattlerId);
|
||||
if (GetAnimBattlerSpriteId(animBattlerId) == 0xFF || !IsBattlerSpriteVisible(battlerId))
|
||||
u32 battler = GetAnimBattlerId(animBattlerId);
|
||||
if (GetAnimBattlerSpriteId(animBattlerId) == 0xFF || !IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
DestroyAnimSprite(sprite);
|
||||
return FALSE;
|
||||
@ -788,36 +788,36 @@ bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool
|
||||
|
||||
if (!respectMonPicOffsets)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_Y);
|
||||
sprite->x = GetBattlerSpriteCoord2(battler, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord2(battler, BATTLER_COORD_Y);
|
||||
}
|
||||
else if (animBattlerId != ANIM_TARGET)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->x = GetBattlerSpriteCoord2(battler, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord2(battler, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsBattlerSpritePresent(u8 battlerId)
|
||||
bool8 IsBattlerSpritePresent(u8 battler)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimAttacker == battlerId)
|
||||
if (gBattleAnimAttacker == battler)
|
||||
return TRUE;
|
||||
else if (gBattleAnimTarget == battlerId)
|
||||
else if (gBattleAnimTarget == battler)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetBattlerPosition(battlerId) == 0xff)
|
||||
if (GetBattlerPosition(battler) == 0xff)
|
||||
return FALSE;
|
||||
|
||||
if (!gBattleStruct->spriteIgnore0Hp && GetMonData(GetBattlerMon(battlerId), MON_DATA_HP) == 0)
|
||||
if (!gBattleStruct->spriteIgnore0Hp && GetMonData(GetBattlerMon(battler), MON_DATA_HP) == 0)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
@ -875,7 +875,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
|
||||
}
|
||||
}
|
||||
|
||||
void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battlerId)
|
||||
void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battler)
|
||||
{
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
@ -1213,14 +1213,14 @@ static bool8 ShouldRotScaleSpeciesBeFlipped(void)
|
||||
|
||||
void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode)
|
||||
{
|
||||
u8 battlerId = gSprites[spriteId].data[0];
|
||||
u8 battler = gSprites[spriteId].data[0];
|
||||
|
||||
if (IsContest() || IsBattlerSpriteVisible(battlerId))
|
||||
if (IsContest() || IsBattlerSpriteVisible(battler))
|
||||
gSprites[spriteId].invisible = FALSE;
|
||||
gSprites[spriteId].oam.objMode = objMode;
|
||||
gSprites[spriteId].affineAnimPaused = TRUE;
|
||||
if (!IsContest() && !gSprites[spriteId].oam.affineMode)
|
||||
gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum;
|
||||
gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battler].matrixNum;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
|
||||
}
|
||||
@ -1523,7 +1523,7 @@ static void AnimThrowProjectile_Step(struct Sprite *sprite)
|
||||
void AnimTravelDiagonally(struct Sprite *sprite)
|
||||
{
|
||||
bool8 respectOffsets;
|
||||
u8 battlerId, coordType;
|
||||
u8 battler, coordType;
|
||||
|
||||
if (!gBattleAnimArgs[6])
|
||||
{
|
||||
@ -1538,19 +1538,19 @@ void AnimTravelDiagonally(struct Sprite *sprite)
|
||||
if (gBattleAnimArgs[5] == ANIM_ATTACKER)
|
||||
{
|
||||
InitSpritePosToAnimAttacker(sprite, respectOffsets);
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
}
|
||||
else
|
||||
{
|
||||
InitSpritePosToAnimTarget(sprite, respectOffsets);
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
}
|
||||
if (!IsOnPlayerSide(gBattleAnimAttacker))
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
InitSpritePosToAnimTarget(sprite, respectOffsets);
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(battlerId, coordType) + gBattleAnimArgs[3];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(battler, coordType) + gBattleAnimArgs[3];
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
@ -1834,7 +1834,7 @@ void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId)
|
||||
static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
|
||||
{
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
u8 battlerId = gSprites[spriteId].data[0];
|
||||
u8 battler = gSprites[spriteId].data[0];
|
||||
u16 species;
|
||||
u16 i;
|
||||
|
||||
@ -1850,10 +1850,10 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
|
||||
else
|
||||
{
|
||||
spriteInfo = gBattleSpritesDataPtr->battlerData;
|
||||
if (!spriteInfo[battlerId].transformSpecies)
|
||||
if (!spriteInfo[battler].transformSpecies)
|
||||
species = GetMonData(GetBattlerMon(i), MON_DATA_SPECIES);
|
||||
else
|
||||
species = spriteInfo[battlerId].transformSpecies;
|
||||
species = spriteInfo[battler].transformSpecies;
|
||||
|
||||
if (IsOnPlayerSide(i))
|
||||
return gSpeciesInfo[species].backPicYOffset;
|
||||
@ -1953,21 +1953,21 @@ void InitPrioritiesForVisibleBattlers(void)
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteSubpriority(u8 battlerId)
|
||||
u8 GetBattlerSpriteSubpriority(u8 battler)
|
||||
{
|
||||
u8 position;
|
||||
u8 subpriority;
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
if (battlerId == 2)
|
||||
if (battler == 2)
|
||||
return 30;
|
||||
else
|
||||
return 40;
|
||||
}
|
||||
else
|
||||
{
|
||||
position = GetBattlerPosition(battlerId);
|
||||
position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_PLAYER_LEFT)
|
||||
subpriority = 30;
|
||||
else if (position == B_POSITION_PLAYER_RIGHT)
|
||||
@ -1981,9 +1981,9 @@ u8 GetBattlerSpriteSubpriority(u8 battlerId)
|
||||
return subpriority;
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteBGPriority(u8 battlerId)
|
||||
u8 GetBattlerSpriteBGPriority(u8 battler)
|
||||
{
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
|
||||
if (IsContest())
|
||||
return 2;
|
||||
@ -1993,11 +1993,11 @@ u8 GetBattlerSpriteBGPriority(u8 battlerId)
|
||||
return GetAnimBgAttribute(1, BG_ANIM_PRIORITY);
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId)
|
||||
u8 GetBattlerSpriteBGPriorityRank(u8 battler)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
u8 position = GetBattlerPosition(battler);
|
||||
if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT)
|
||||
return 2;
|
||||
else
|
||||
@ -2007,7 +2007,7 @@ u8 GetBattlerSpriteBGPriorityRank(u8 battlerId)
|
||||
}
|
||||
|
||||
// Create Pokémon sprite to be used for a move animation effect (e.g. Role Play / Snatch)
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, u32 battlerId)
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, u32 battler)
|
||||
{
|
||||
u8 spriteId;
|
||||
u16 sheet = LoadSpriteSheet(&sSpriteSheets_MoveEffectMons[id]);
|
||||
@ -2053,7 +2053,7 @@ void DestroySpriteAndFreeResources_(struct Sprite *sprite)
|
||||
DestroySpriteAndFreeResources(sprite);
|
||||
}
|
||||
|
||||
s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
|
||||
s16 GetBattlerSpriteCoordAttr(u8 battler, u8 attr)
|
||||
{
|
||||
u16 species;
|
||||
u32 personality;
|
||||
@ -2082,25 +2082,25 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
|
||||
}
|
||||
else
|
||||
{
|
||||
struct Pokemon *mon = GetBattlerMon(battlerId);
|
||||
struct Pokemon *mon = GetBattlerMon(battler);
|
||||
|
||||
spriteInfo = gBattleSpritesDataPtr->battlerData;
|
||||
if (!spriteInfo[battlerId].transformSpecies)
|
||||
if (!spriteInfo[battler].transformSpecies)
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
personality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
}
|
||||
else
|
||||
{
|
||||
species = spriteInfo[battlerId].transformSpecies;
|
||||
personality = gTransformedPersonalities[battlerId];
|
||||
species = spriteInfo[battler].transformSpecies;
|
||||
personality = gTransformedPersonalities[battler];
|
||||
}
|
||||
|
||||
species = SanitizeSpeciesId(species);
|
||||
if (species == SPECIES_UNOWN)
|
||||
species = GetUnownSpeciesId(personality);
|
||||
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
#if P_GENDER_DIFFERENCES
|
||||
if (gSpeciesInfo[species].backPicFemale != NULL && IsPersonalityFemale(species, personality))
|
||||
@ -2131,22 +2131,22 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
|
||||
case BATTLER_COORD_ATTR_WIDTH:
|
||||
return GET_MON_COORDS_WIDTH(size);
|
||||
case BATTLER_COORD_ATTR_LEFT:
|
||||
return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - (GET_MON_COORDS_WIDTH(size) / 2);
|
||||
return GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) - (GET_MON_COORDS_WIDTH(size) / 2);
|
||||
case BATTLER_COORD_ATTR_RIGHT:
|
||||
return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + (GET_MON_COORDS_WIDTH(size) / 2);
|
||||
return GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + (GET_MON_COORDS_WIDTH(size) / 2);
|
||||
case BATTLER_COORD_ATTR_TOP:
|
||||
return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - (GET_MON_COORDS_HEIGHT(size) / 2);
|
||||
return GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) - (GET_MON_COORDS_HEIGHT(size) / 2);
|
||||
case BATTLER_COORD_ATTR_BOTTOM:
|
||||
return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + (GET_MON_COORDS_HEIGHT(size) / 2);
|
||||
return GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + (GET_MON_COORDS_HEIGHT(size) / 2);
|
||||
case BATTLER_COORD_ATTR_RAW_BOTTOM:
|
||||
ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31;
|
||||
ret = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 31;
|
||||
return ret - y_offset;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y)
|
||||
void SetAverageBattlerPositions(u8 battler, bool8 respectMonPicOffsets, s16 *x, s16 *y)
|
||||
{
|
||||
u8 xCoordType, yCoordType;
|
||||
s16 battlerX, battlerY;
|
||||
@ -2163,12 +2163,12 @@ void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x
|
||||
yCoordType = BATTLER_COORD_Y_PIC_OFFSET;
|
||||
}
|
||||
|
||||
battlerX = GetBattlerSpriteCoord(battlerId, xCoordType);
|
||||
battlerY = GetBattlerSpriteCoord(battlerId, yCoordType);
|
||||
battlerX = GetBattlerSpriteCoord(battler, xCoordType);
|
||||
battlerY = GetBattlerSpriteCoord(battler, yCoordType);
|
||||
if (IsDoubleBattle() && !IsContest())
|
||||
{
|
||||
partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), xCoordType);
|
||||
partnerY = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), yCoordType);
|
||||
partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(battler), xCoordType);
|
||||
partnerY = GetBattlerSpriteCoord(BATTLE_PARTNER(battler), yCoordType);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2180,7 +2180,7 @@ void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x
|
||||
*y = (battlerY + partnerY) / 2;
|
||||
}
|
||||
|
||||
u8 CreateInvisibleSpriteCopy(int battlerId, u8 spriteId, int species)
|
||||
u8 CreateInvisibleSpriteCopy(int battler, u8 spriteId, int species)
|
||||
{
|
||||
u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
|
||||
gSprites[newSpriteId] = gSprites[spriteId];
|
||||
|
||||
@ -511,6 +511,11 @@ static void AnimParticleInVortex_Step(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBlendTimer data[10]
|
||||
#define tBlend data[11]
|
||||
#define tFullAlphaTimer data[11] // not a typo; this data field is used for multiple purposes
|
||||
#define tState data[12]
|
||||
|
||||
void AnimTask_LoadSandstormBackground(u8 taskId)
|
||||
{
|
||||
int var0;
|
||||
@ -553,45 +558,45 @@ static void AnimTask_LoadSandstormBackground_Step(u8 taskId)
|
||||
|
||||
gBattle_BG1_Y += -1;
|
||||
|
||||
switch (gTasks[taskId].data[12])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (++gTasks[taskId].data[10] == 4)
|
||||
if (++gTasks[taskId].tBlendTimer == 4)
|
||||
{
|
||||
gTasks[taskId].data[10] = 0;
|
||||
gTasks[taskId].data[11]++;
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
|
||||
if (gTasks[taskId].data[11] == 7)
|
||||
gTasks[taskId].tBlendTimer = 0;
|
||||
gTasks[taskId].tBlend++;
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend));
|
||||
if (gTasks[taskId].tBlend == 7)
|
||||
{
|
||||
gTasks[taskId].data[12]++;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].tState++;
|
||||
gTasks[taskId].tFullAlphaTimer = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (++gTasks[taskId].data[11] == 101)
|
||||
if (++gTasks[taskId].tFullAlphaTimer == 101)
|
||||
{
|
||||
gTasks[taskId].data[11] = 7;
|
||||
gTasks[taskId].data[12]++;
|
||||
gTasks[taskId].tBlend = 7;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (++gTasks[taskId].data[10] == 4)
|
||||
if (++gTasks[taskId].tBlendTimer == 4)
|
||||
{
|
||||
gTasks[taskId].data[10] = 0;
|
||||
gTasks[taskId].data[11]--;
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
|
||||
if (gTasks[taskId].data[11] == 0)
|
||||
gTasks[taskId].tBlendTimer = 0;
|
||||
gTasks[taskId].tBlend--;
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend));
|
||||
if (gTasks[taskId].tBlend == 0)
|
||||
{
|
||||
gTasks[taskId].data[12]++;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].tState++;
|
||||
gTasks[taskId].tFullAlphaTimer = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
ClearBattleAnimBg(animBg.bgId);
|
||||
gTasks[taskId].data[12]++;
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 4:
|
||||
if (!IsContest())
|
||||
@ -607,21 +612,36 @@ static void AnimTask_LoadSandstormBackground_Step(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#undef tBlendTimer
|
||||
#undef tBlend
|
||||
#undef tFullAlphaTimer
|
||||
#undef tState
|
||||
|
||||
// Animates the sprites that fly diagonally across the screen
|
||||
// in Sandstorm and Heat Wave.
|
||||
// arg 0: initial y pixel offset
|
||||
// arg 1: projectile speed
|
||||
// arg 2: y pixel drop
|
||||
// arg 3: ??? unknown (possibly a color bit)
|
||||
|
||||
#define sState data[0]
|
||||
#define sVelocityX data[1] // 256ths of a pixel // init'd from gBattleAnimArgs[1]
|
||||
#define sVelocityY data[2] // 256ths of a pixel // init'd from gBattleAnimArgs[2]
|
||||
#define sFractionalX data[3] // 256ths of a pixel
|
||||
#define sFractionalY data[4] // 256ths of a pixel
|
||||
#define sMirroredX data[5] // init'd from gBattleAnimArgs[3]
|
||||
|
||||
// The fields named "velocity" are arguably more like "acceleration,"
|
||||
// and the fields named "fractional" are arguably more like "velocity."
|
||||
//
|
||||
// ...is what I WOULD say if the "fractional" fields weren't AND'd with
|
||||
// 0xFF after every frame.
|
||||
|
||||
void AnimFlyingSandCrescent(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
if (sprite->sState == 0)
|
||||
{
|
||||
if (gBattleAnimArgs[3] != 0 && !IsOnPlayerSide(gBattleAnimAttacker))
|
||||
{
|
||||
sprite->x = DISPLAY_WIDTH + 64;
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
sprite->data[5] = 1;
|
||||
sprite->sMirroredX = 1;
|
||||
sprite->oam.matrixNum = ST_OAM_HFLIP;
|
||||
}
|
||||
else
|
||||
@ -631,18 +651,18 @@ void AnimFlyingSandCrescent(struct Sprite *sprite)
|
||||
|
||||
sprite->y = gBattleAnimArgs[0];
|
||||
SetSubspriteTables(sprite, sFlyingSandSubspriteTable);
|
||||
sprite->data[1] = gBattleAnimArgs[1];
|
||||
sprite->data[2] = gBattleAnimArgs[2];
|
||||
sprite->data[0]++;
|
||||
sprite->sVelocityX = gBattleAnimArgs[1];
|
||||
sprite->sVelocityY = gBattleAnimArgs[2];
|
||||
sprite->sState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[3] += sprite->data[1];
|
||||
sprite->data[4] += sprite->data[2];
|
||||
sprite->x2 += (sprite->data[3] >> 8);
|
||||
sprite->y2 += (sprite->data[4] >> 8);
|
||||
sprite->data[3] &= 0xFF;
|
||||
sprite->data[4] &= 0xFF;
|
||||
sprite->sFractionalX += sprite->sVelocityX;
|
||||
sprite->sFractionalY += sprite->sVelocityY;
|
||||
sprite->x2 += (sprite->sFractionalX >> 8);
|
||||
sprite->y2 += (sprite->sFractionalY >> 8);
|
||||
sprite->sFractionalX &= 0xFF;
|
||||
sprite->sFractionalY &= 0xFF;
|
||||
|
||||
if (sprite->data[5] == 0)
|
||||
{
|
||||
@ -658,6 +678,13 @@ void AnimFlyingSandCrescent(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
#undef sState
|
||||
#undef sVelocityX
|
||||
#undef sVelocityY
|
||||
#undef sFractionalX
|
||||
#undef sFractionalY
|
||||
#undef sMirroredX
|
||||
|
||||
// Animates the rising rocks in Ancient Power.
|
||||
// arg 0: initial x pixel offset
|
||||
// arg 1: initial y pixel offset
|
||||
|
||||
@ -148,26 +148,26 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
|
||||
// Get wanted battler.
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
else if (gBattleAnimArgs[0] == ANIM_TARGET)
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER)
|
||||
battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
|
||||
battler = BATTLE_PARTNER(gBattleAnimAttacker);
|
||||
else
|
||||
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
|
||||
battler = BATTLE_PARTNER(gBattleAnimTarget);
|
||||
|
||||
// Check if battler is visible.
|
||||
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
|
||||
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
|
||||
species = (GetIllusionMonSpecies(battlerId) != SPECIES_NONE) ? GetIllusionMonSpecies(battlerId) : gAnimBattlerSpecies[battlerId];
|
||||
species = (GetIllusionMonSpecies(battler) != SPECIES_NONE) ? GetIllusionMonSpecies(battler) : gAnimBattlerSpecies[battler];
|
||||
}
|
||||
|
||||
if (species != SPECIES_NONE)
|
||||
@ -193,26 +193,26 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
|
||||
// Get wanted battler.
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
battler = gBattleAnimAttacker;
|
||||
else if (gBattleAnimArgs[0] == ANIM_TARGET)
|
||||
battlerId = gBattleAnimTarget;
|
||||
battler = gBattleAnimTarget;
|
||||
else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER)
|
||||
battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
|
||||
battler = BATTLE_PARTNER(gBattleAnimAttacker);
|
||||
else
|
||||
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
|
||||
battler = BATTLE_PARTNER(gBattleAnimTarget);
|
||||
|
||||
// Check if battler is visible.
|
||||
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
|
||||
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battler))
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
|
||||
species = (GetIllusionMonSpecies(battlerId) != SPECIES_NONE) ? GetIllusionMonSpecies(battlerId) : gAnimBattlerSpecies[battlerId];
|
||||
species = (GetIllusionMonSpecies(battler) != SPECIES_NONE) ? GetIllusionMonSpecies(battler) : gAnimBattlerSpecies[battler];
|
||||
}
|
||||
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[1];
|
||||
|
||||
@ -269,16 +269,16 @@ static const struct SpriteTemplate sFlashingCircleImpactSpriteTemplate =
|
||||
.callback = AnimFlashingCircleImpact,
|
||||
};
|
||||
|
||||
static u8 UNUSED Task_FlashingCircleImpacts(u8 battlerId, bool8 red)
|
||||
static u8 UNUSED Task_FlashingCircleImpacts(u8 battler, bool8 red)
|
||||
{
|
||||
u8 battlerSpriteId = gBattlerSpriteIds[battlerId];
|
||||
u8 battlerSpriteId = gBattlerSpriteIds[battler];
|
||||
u8 taskId = CreateTask(Task_UpdateFlashingCircleImpacts, 10);
|
||||
u8 spriteId;
|
||||
u8 i;
|
||||
|
||||
LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(ANIM_TAG_CIRCLE_IMPACT)]);
|
||||
LoadSpritePalette(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(ANIM_TAG_CIRCLE_IMPACT)]);
|
||||
gTasks[taskId].data[0] = battlerId;
|
||||
gTasks[taskId].data[0] = battler;
|
||||
if (red)
|
||||
{
|
||||
gTasks[taskId].data[1] = RGB_RED;
|
||||
@ -588,15 +588,15 @@ void AnimTask_StatsChange(u8 taskId)
|
||||
|
||||
#undef CASE
|
||||
|
||||
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId)
|
||||
void LaunchStatusAnimation(u8 battler, u8 statusAnimId)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
gBattleAnimAttacker = battlerId;
|
||||
gBattleAnimTarget = battlerId;
|
||||
gBattleAnimAttacker = battler;
|
||||
gBattleAnimTarget = battler;
|
||||
LaunchBattleAnimation(ANIM_TYPE_STATUS, statusAnimId);
|
||||
taskId = CreateTask(Task_DoStatusAnimation, 10);
|
||||
gTasks[taskId].data[0] = battlerId;
|
||||
gTasks[taskId].data[0] = battler;
|
||||
}
|
||||
|
||||
static void Task_DoStatusAnimation(u8 taskId)
|
||||
|
||||
@ -657,27 +657,37 @@ static void AnimKnockOffAquaTailStep(struct Sprite *sprite)
|
||||
sprite->data[2]++;
|
||||
}
|
||||
|
||||
#define tRaindropSpawnTimer data[0]
|
||||
#define tRaindropUnused data[1]
|
||||
#define tRaindropSpawnInterval data[2]
|
||||
#define tRaindropSpawnDuration data[3] // number of frames over which we spawn raindrops
|
||||
|
||||
void AnimTask_CreateRaindrops(u8 taskId)
|
||||
{
|
||||
u8 x, y;
|
||||
|
||||
if (gTasks[taskId].data[0] == 0)
|
||||
if (gTasks[taskId].tRaindropSpawnTimer == 0)
|
||||
{
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].tRaindropUnused = gBattleAnimArgs[0];
|
||||
gTasks[taskId].tRaindropSpawnInterval = gBattleAnimArgs[1];
|
||||
gTasks[taskId].tRaindropSpawnDuration = gBattleAnimArgs[2];
|
||||
}
|
||||
gTasks[taskId].data[0]++;
|
||||
if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
|
||||
gTasks[taskId].tRaindropSpawnTimer++;
|
||||
if (gTasks[taskId].tRaindropSpawnTimer % gTasks[taskId].tRaindropSpawnInterval == 1)
|
||||
{
|
||||
x = Random2() % DISPLAY_WIDTH;
|
||||
y = Random2() % (DISPLAY_HEIGHT / 2);
|
||||
CreateSprite(&gRainDropSpriteTemplate, x, y, 4);
|
||||
}
|
||||
if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
|
||||
if (gTasks[taskId].tRaindropSpawnTimer == gTasks[taskId].tRaindropSpawnDuration)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
#undef tRaindropSpawnTimer
|
||||
#undef tRaindropUnused
|
||||
#undef tRaindropSpawnInterval
|
||||
#undef tRaindropSpawnDuration
|
||||
|
||||
static void AnimRainDrop(struct Sprite *sprite)
|
||||
{
|
||||
sprite->callback = AnimRainDrop_Step;
|
||||
@ -687,6 +697,10 @@ static void AnimRainDrop_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] <= 13)
|
||||
{
|
||||
//
|
||||
// Make the raindrop fall, but only until it reaches the
|
||||
// impact/splash frames of its animation.
|
||||
//
|
||||
sprite->x2++;
|
||||
sprite->y2 += 4;
|
||||
}
|
||||
|
||||
@ -315,7 +315,7 @@ static void LinkOpponentBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
|
||||
@ -159,7 +159,7 @@ static void LinkPartnerBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
|
||||
@ -359,7 +359,7 @@ static void OpponentBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
@ -495,17 +495,17 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
}
|
||||
else if (gAiBattleData->actionFlee)
|
||||
{
|
||||
gAiBattleData->actionFlee = FALSE;
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_RUN, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_RUN, 0);
|
||||
}
|
||||
else if (gAiBattleData->choiceWatch)
|
||||
{
|
||||
gAiBattleData->choiceWatch = FALSE;
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SAFARI_WATCH_CAREFULLY, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SAFARI_WATCH_CAREFULLY, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -526,11 +526,11 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
&& !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE
|
||||
&& !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveIndex])))
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (gBattlerTarget << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (gBattlerTarget << 8));
|
||||
}
|
||||
}
|
||||
OpponentBufferExecCompleted(battler);
|
||||
@ -547,7 +547,7 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
|
||||
if (GetBattlerMoveTargetType(battler, move) & MOVE_TARGET_USER)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (battler << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (battler << 8));
|
||||
}
|
||||
else if (IsDoubleBattle())
|
||||
{
|
||||
@ -581,17 +581,17 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
}
|
||||
}
|
||||
if (isPartnerEnemy && CanTargetBattler(battler, target, move))
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (GetBattlerAtPosition(BATTLE_PARTNER(battler)) << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (GetBattlerAtPosition(BATTLE_PARTNER(battler)) << 8));
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (target << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (target << 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (target << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (target << 8));
|
||||
}
|
||||
}
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8));
|
||||
|
||||
OpponentBufferExecCompleted(battler);
|
||||
}
|
||||
@ -599,7 +599,7 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
|
||||
static void OpponentHandleChooseItem(u32 battler)
|
||||
{
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, gBattleStruct->chosenItem[battler]);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->chosenItem[battler]);
|
||||
OpponentBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
@ -672,7 +672,7 @@ static void OpponentHandleChoosePokemon(u32 battler)
|
||||
#if TESTING
|
||||
TestRunner_Battle_CheckSwitch(battler, chosenMonId);
|
||||
#endif // TESTING
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, chosenMonId, NULL);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, chosenMonId, NULL);
|
||||
OpponentBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
|
||||
@ -177,7 +177,7 @@ static void PlayerBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
@ -310,7 +310,7 @@ static void HandleInputChooseAction(u32 battler)
|
||||
PlaySE(SE_SELECT);
|
||||
ArrowsChangeColorLastBallCycle(FALSE);
|
||||
TryHideLastUsedBall();
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_THROW_BALL, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
return;
|
||||
@ -325,16 +325,16 @@ static void HandleInputChooseAction(u32 battler)
|
||||
switch (gActionSelectionCursor[battler])
|
||||
{
|
||||
case 0: // Top left
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_MOVE, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, 0);
|
||||
break;
|
||||
case 1: // Top right
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_ITEM, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_ITEM, 0);
|
||||
break;
|
||||
case 2: // Bottom left
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SWITCH, 0);
|
||||
break;
|
||||
case 3: // Bottom right
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_RUN, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_RUN, 0);
|
||||
break;
|
||||
}
|
||||
PlayerBufferExecCompleted(battler);
|
||||
@ -392,7 +392,7 @@ static void HandleInputChooseAction(u32 battler)
|
||||
AddBagItem(itemId, 1);
|
||||
}
|
||||
PlaySE(SE_SELECT);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_CANCEL_PARTNER, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_CANCEL_PARTNER, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
else if (B_QUICK_MOVE_CURSOR_TO_RUN)
|
||||
@ -412,7 +412,7 @@ static void HandleInputChooseAction(u32 battler)
|
||||
}
|
||||
else if (DEBUG_BATTLE_MENU == TRUE && JOY_NEW(SELECT_BUTTON))
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_DEBUG, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_DEBUG, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
else if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE
|
||||
@ -420,7 +420,7 @@ static void HandleInputChooseAction(u32 battler)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
TryHideLastUsedBall();
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_THROW_BALL, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -449,9 +449,9 @@ void HandleInputChooseTarget(u32 battler)
|
||||
PlaySE(SE_SELECT);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
|
||||
if (gBattleStruct->gimmick.playerSelect)
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
|
||||
TryHideLastUsedBall();
|
||||
HideGimmickTriggerSprite();
|
||||
@ -609,9 +609,9 @@ void HandleInputShowEntireFieldTargets(u32 battler)
|
||||
PlaySE(SE_SELECT);
|
||||
HideAllTargets();
|
||||
if (gBattleStruct->gimmick.playerSelect)
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
HideGimmickTriggerSprite();
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
@ -637,9 +637,9 @@ void HandleInputShowTargets(u32 battler)
|
||||
PlaySE(SE_SELECT);
|
||||
HideShownTargets(battler);
|
||||
if (gBattleStruct->gimmick.playerSelect)
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
HideGimmickTriggerSprite();
|
||||
TryHideLastUsedBall();
|
||||
PlayerBufferExecCompleted(battler);
|
||||
@ -741,9 +741,9 @@ void HandleInputChooseMove(u32 battler)
|
||||
case 0:
|
||||
default:
|
||||
if (gBattleStruct->gimmick.playerSelect)
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
|
||||
HideGimmickTriggerSprite();
|
||||
TryHideLastUsedBall();
|
||||
PlayerBufferExecCompleted(battler);
|
||||
@ -781,7 +781,7 @@ void HandleInputChooseMove(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, 0xFFFF);
|
||||
HideGimmickTriggerSprite();
|
||||
PlayerBufferExecCompleted(battler);
|
||||
TryToHideMoveInfoWindow();
|
||||
@ -1457,7 +1457,7 @@ static void Task_GiveExpToMon(u8 taskId)
|
||||
DynamaxModifyHPLevelUp(mon, battler, oldMaxHP);
|
||||
|
||||
gainedExp -= nextLvlExp - currExp;
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, RET_VALUE_LEVELED_UP, (B_LEVEL_UP_NOTIFICATION >= GEN_9) ? 0 : gainedExp);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RET_VALUE_LEVELED_UP, (B_LEVEL_UP_NOTIFICATION >= GEN_9) ? 0 : gainedExp);
|
||||
|
||||
if (IsDoubleBattle() == TRUE
|
||||
&& (monId == gBattlerPartyIndexes[battler] || monId == gBattlerPartyIndexes[BATTLE_PARTNER(battler)]))
|
||||
@ -1543,7 +1543,7 @@ static void Task_GiveExpWithExpBar(u8 taskId)
|
||||
DynamaxModifyHPLevelUp(mon, battler, oldMaxHP);
|
||||
|
||||
gainedExp -= expOnNextLvl - currExp;
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, RET_VALUE_LEVELED_UP, (B_LEVEL_UP_NOTIFICATION >= GEN_9) ? 0 : gainedExp);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RET_VALUE_LEVELED_UP, (B_LEVEL_UP_NOTIFICATION >= GEN_9) ? 0 : gainedExp);
|
||||
gTasks[taskId].func = Task_LaunchLvlUpAnim;
|
||||
}
|
||||
else
|
||||
@ -1612,9 +1612,9 @@ static void WaitForMonSelection(u32 battler)
|
||||
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
|
||||
{
|
||||
if (gPartyMenuUseExitCallback == TRUE)
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, gSelectedMonPartyId, gBattlePartyCurrentOrder);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gSelectedMonPartyId, gBattlePartyCurrentOrder);
|
||||
else
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, PARTY_SIZE, NULL);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, PARTY_SIZE, NULL);
|
||||
|
||||
if ((gBattleResources->bufferA[battler][1] & 0xF) == 1)
|
||||
PrintLinkStandbyMsg();
|
||||
@ -1638,7 +1638,7 @@ static void CompleteWhenChoseItem(u32 battler)
|
||||
{
|
||||
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
|
||||
{
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, gSpecialVar_ItemId);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gSpecialVar_ItemId);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -1665,9 +1665,9 @@ static void PlayerHandleYesNoInput(u32 battler)
|
||||
PlaySE(SE_SELECT);
|
||||
|
||||
if (gMultiUsePlayerCursor != 0)
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 0xE, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 0xE, 0);
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 0xD, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 0xD, 0);
|
||||
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
@ -2139,7 +2139,7 @@ static void PlayerChooseMoveInBattlePalace(u32 battler)
|
||||
if (--gBattleStruct->arenaMindPoints[battler] == 0)
|
||||
{
|
||||
gBattlePalaceMoveSelectionRngValue = gRngValue;
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -2208,7 +2208,7 @@ static void PlayerHandleChoosePokemon(u32 battler)
|
||||
&& (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON
|
||||
&& (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_SEND_MON_TO_BOX)
|
||||
{
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, gBattlerPartyIndexes[battler] + 1, gBattlePartyCurrentOrder);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattlerPartyIndexes[battler] + 1, gBattlePartyCurrentOrder);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
else
|
||||
@ -2307,25 +2307,25 @@ static void PlayerHandlePlayBGM(u32 battler)
|
||||
|
||||
static void PlayerHandleTwoReturnValues(u32 battler)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 0, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 0, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
static void PlayerHandleChosenMonReturnValue(u32 battler)
|
||||
{
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, 0, NULL);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, 0, NULL);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
static void PlayerHandleOneReturnValue(u32 battler)
|
||||
{
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, 0);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
static void PlayerHandleOneReturnValue_Duplicate(u32 battler)
|
||||
{
|
||||
BtlController_EmitOneReturnValue_Duplicate(battler, BUFFER_B, 0);
|
||||
BtlController_EmitOneReturnValue_Duplicate(battler, B_COMM_TO_ENGINE, 0);
|
||||
PlayerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
@ -2460,7 +2460,7 @@ static u32 CheckTargetTypeEffectiveness(u32 battler)
|
||||
{
|
||||
u32 battlerFoe = BATTLE_OPPOSITE(GetBattlerPosition(battler));
|
||||
u32 foeEffectiveness = CheckTypeEffectiveness(battlerFoe, battler);
|
||||
|
||||
|
||||
if (IsDoubleBattle())
|
||||
{
|
||||
u32 partnerFoe = BATTLE_PARTNER(battlerFoe);
|
||||
|
||||
@ -231,7 +231,7 @@ static void PlayerPartnerBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
@ -332,11 +332,11 @@ static void PlayerPartnerHandleChooseMove(u32 battler)
|
||||
&& !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE
|
||||
&& !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveIndex])))
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveIndex) | (gBattlerTarget << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (gBattlerTarget << 8));
|
||||
}
|
||||
|
||||
PlayerPartnerBufferExecCompleted(battler);
|
||||
@ -379,7 +379,7 @@ static void PlayerPartnerHandleChoosePokemon(u32 battler)
|
||||
gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE;
|
||||
gBattleStruct->monToSwitchIntoId[battler] = chosenMonId;
|
||||
}
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, chosenMonId, NULL);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, chosenMonId, NULL);
|
||||
PlayerPartnerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
|
||||
@ -383,7 +383,7 @@ static void RecordedOpponentHandlePrintString(u32 battler)
|
||||
|
||||
static void RecordedOpponentHandleChooseAction(u32 battler)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0);
|
||||
RecordedOpponentBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
@ -391,13 +391,13 @@ static void RecordedOpponentHandleChooseMove(u32 battler)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler);
|
||||
u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, moveId | (target << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, moveId | (target << 8));
|
||||
}
|
||||
|
||||
RecordedOpponentBufferExecCompleted(battler);
|
||||
@ -410,7 +410,7 @@ static void RecordedOpponentHandleChooseItem(u32 battler)
|
||||
gBattleStruct->chosenItem[battler] = (byte1 << 8) | byte2;
|
||||
gBattleStruct->itemPartyIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, battler);
|
||||
gBattleStruct->itemMoveIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, battler);
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, gBattleStruct->chosenItem[battler]);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->chosenItem[battler]);
|
||||
RecordedOpponentBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
@ -418,7 +418,7 @@ static void RecordedOpponentHandleChoosePokemon(u32 battler)
|
||||
{
|
||||
gBattleStruct->monToSwitchIntoId[battler] = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler);
|
||||
gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, gBattleStruct->monToSwitchIntoId[battler], NULL);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->monToSwitchIntoId[battler], NULL);
|
||||
RecordedOpponentBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
|
||||
@ -308,7 +308,7 @@ static void RecordedPlayerBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
@ -396,7 +396,7 @@ static void ChooseActionInBattlePalace(u32 battler)
|
||||
{
|
||||
if (gBattleCommunication[4] >= gBattlersCount / 2)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_BATTLE_PALACE_ACTION, battler), 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_BATTLE_PALACE_ACTION, battler), 0);
|
||||
RecordedPlayerBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -409,7 +409,7 @@ static void RecordedPlayerHandleChooseAction(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0);
|
||||
RecordedPlayerBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -418,13 +418,13 @@ static void RecordedPlayerHandleChooseMove(u32 battler)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler));
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler);
|
||||
u8 moveIndex = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler);
|
||||
u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, moveId | (target << 8));
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, moveIndex | (target << 8));
|
||||
}
|
||||
|
||||
RecordedPlayerBufferExecCompleted(battler);
|
||||
@ -437,7 +437,7 @@ static void RecordedPlayerHandleChooseItem(u32 battler)
|
||||
gBattleStruct->chosenItem[battler] = (byte1 << 8) | byte2;
|
||||
gBattleStruct->itemPartyIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, battler);
|
||||
gBattleStruct->itemMoveIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, battler);
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, gBattleStruct->chosenItem[battler]);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->chosenItem[battler]);
|
||||
RecordedPlayerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
@ -445,7 +445,7 @@ static void RecordedPlayerHandleChoosePokemon(u32 battler)
|
||||
{
|
||||
gBattleStruct->monToSwitchIntoId[battler] = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler);
|
||||
gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing
|
||||
BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, gBattleStruct->monToSwitchIntoId[battler], NULL);
|
||||
BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->monToSwitchIntoId[battler], NULL);
|
||||
RecordedPlayerBufferExecCompleted(battler);
|
||||
}
|
||||
|
||||
|
||||
@ -127,16 +127,16 @@ static void HandleInputChooseAction(u32 battler)
|
||||
switch (gActionSelectionCursor[battler])
|
||||
{
|
||||
case 0:
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SAFARI_BALL, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SAFARI_BALL, 0);
|
||||
break;
|
||||
case 1:
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SAFARI_POKEBLOCK, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SAFARI_POKEBLOCK, 0);
|
||||
break;
|
||||
case 2:
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SAFARI_GO_NEAR, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SAFARI_GO_NEAR, 0);
|
||||
break;
|
||||
case 3:
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SAFARI_RUN, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SAFARI_RUN, 0);
|
||||
break;
|
||||
}
|
||||
SafariBufferExecCompleted(battler);
|
||||
@ -220,7 +220,7 @@ static void CompleteWhenChosePokeblock(u32 battler)
|
||||
{
|
||||
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
|
||||
{
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, gSpecialVar_ItemId);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gSpecialVar_ItemId);
|
||||
SafariBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -232,7 +232,7 @@ static void SafariBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
|
||||
@ -145,7 +145,7 @@ static void WallyHandleActions(u32 battler)
|
||||
if (--gBattleStruct->wallyWaitFrames == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_MOVE, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, 0);
|
||||
WallyBufferExecCompleted(battler);
|
||||
gBattleStruct->wallyBattleState++;
|
||||
gBattleStruct->wallyMovesState = 0;
|
||||
@ -156,7 +156,7 @@ static void WallyHandleActions(u32 battler)
|
||||
if (--gBattleStruct->wallyWaitFrames == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_MOVE, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, 0);
|
||||
WallyBufferExecCompleted(battler);
|
||||
gBattleStruct->wallyBattleState++;
|
||||
gBattleStruct->wallyMovesState = 0;
|
||||
@ -166,7 +166,7 @@ static void WallyHandleActions(u32 battler)
|
||||
case 3:
|
||||
if (--gBattleStruct->wallyWaitFrames == 0)
|
||||
{
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_WALLY_THROW, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_WALLY_THROW, 0);
|
||||
WallyBufferExecCompleted(battler);
|
||||
gBattleStruct->wallyBattleState++;
|
||||
gBattleStruct->wallyMovesState = 0;
|
||||
@ -187,7 +187,7 @@ static void WallyHandleActions(u32 battler)
|
||||
if (--gBattleStruct->wallyWaitFrames == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_USE_ITEM, 0);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_ITEM, 0);
|
||||
WallyBufferExecCompleted(battler);
|
||||
}
|
||||
break;
|
||||
@ -209,7 +209,7 @@ static void CompleteOnChosenItem(u32 battler)
|
||||
{
|
||||
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
|
||||
{
|
||||
BtlController_EmitOneReturnValue(battler, BUFFER_B, gSpecialVar_ItemId);
|
||||
BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gSpecialVar_ItemId);
|
||||
WallyBufferExecCompleted(battler);
|
||||
}
|
||||
}
|
||||
@ -279,7 +279,7 @@ static void WallyBufferExecCompleted(u32 battler)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(battler, 2, 4, &playerId);
|
||||
PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId);
|
||||
gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
@ -378,7 +378,7 @@ static void WallyHandleChooseMove(u32 battler)
|
||||
if (--gBattleStruct->wallyMoveFrames == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0x100);
|
||||
BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, 0x100);
|
||||
WallyBufferExecCompleted(battler);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -132,31 +132,31 @@ static void InitSinglePlayerBtlControllers(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToPlayerPartner;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToPlayerPartner;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
@ -184,18 +184,18 @@ static void InitSinglePlayerBtlControllers(void)
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
|
||||
gBattlerControllerFuncs[0] = SetControllerToSafari;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToSafari;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
gBattlerControllerFuncs[0] = SetControllerToWally;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToWally;
|
||||
else if (IsAiVsAiBattle())
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayerPartner;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayer;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
|
||||
@ -207,32 +207,32 @@ static void InitSinglePlayerBtlControllers(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
else // see how the banks are switched
|
||||
{
|
||||
gBattlerControllerFuncs[1] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -241,22 +241,22 @@ static void InitSinglePlayerBtlControllers(void)
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
if (IsAiVsAiBattle())
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayerPartner;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
if (IsAiVsAiBattle())
|
||||
gBattlerControllerFuncs[2] = SetControllerToPlayerPartner;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[2] = SetControllerToPlayer;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
|
||||
@ -266,17 +266,17 @@ static void InitSinglePlayerBtlControllers(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
|
||||
@ -364,52 +364,52 @@ static void InitSinglePlayerBtlControllers(void)
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
|
||||
{
|
||||
gBattlerControllerFuncs[1] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[1] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToOpponent;
|
||||
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToOpponent;
|
||||
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -427,21 +427,21 @@ static void InitLinkBtlControllers(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[1] = SetControllerToPlayer;
|
||||
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
@ -452,33 +452,33 @@ static void InitLinkBtlControllers(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToPlayer;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[1] = SetControllerToPlayer;
|
||||
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToPlayer;
|
||||
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
@ -489,33 +489,33 @@ static void InitLinkBtlControllers(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[0] = SetControllerToPlayer;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToLinkPartner;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToLinkPartner;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[0] = SetControllerToLinkPartner;
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkPartner;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[2] = SetControllerToPlayer;
|
||||
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[3] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
@ -694,11 +694,11 @@ static void PrepareBufferDataTransfer(u32 battler, u32 bufferId, u8 *data, u16 s
|
||||
{
|
||||
switch (bufferId)
|
||||
{
|
||||
case BUFFER_A:
|
||||
case B_COMM_TO_CONTROLLER:
|
||||
for (i = 0; i < size; data++, i++)
|
||||
gBattleResources->bufferA[battler][i] = *data;
|
||||
break;
|
||||
case BUFFER_B:
|
||||
case B_COMM_TO_ENGINE:
|
||||
for (i = 0; i < size; data++, i++)
|
||||
gBattleResources->bufferB[battler][i] = *data;
|
||||
break;
|
||||
@ -706,20 +706,41 @@ static void PrepareBufferDataTransfer(u32 battler, u32 bufferId, u8 *data, u16 s
|
||||
}
|
||||
}
|
||||
|
||||
#define tInitialDelayTimer data[10]
|
||||
#define tState data[11]
|
||||
#define tCurrentBlock_WrapFrom data[12]
|
||||
#define tBlockSendDelayTimer data[13]
|
||||
#define tCurrentBlock_End data[14]
|
||||
#define tCurrentBlock_Start data[15]
|
||||
//
|
||||
// Inbound communications are stored in one buffer; outbound communications
|
||||
// in another. Both buffers work pretty similarly: the next message will be
|
||||
// written into the buffer after the previous message (with 4-byte alignment),
|
||||
// unless we're too close to the end of the buffer, in which case we jump back
|
||||
// to the start.
|
||||
//
|
||||
// Regarding the task variable names above: these variables are altered in-
|
||||
// place, so the precise operational definition of "current" depends on when
|
||||
// the variables are being accessed. When data is present in the send and
|
||||
// receive buffers, "current" refers to the most recently received message;
|
||||
// but when a message is actually being placed in the buffers, "current"
|
||||
// refers to the previous message, until such time that we finish updating it
|
||||
// to refer to the new message.
|
||||
|
||||
static void CreateTasksForSendRecvLinkBuffers(void)
|
||||
{
|
||||
sLinkSendTaskId = CreateTask(Task_HandleSendLinkBuffersData, 0);
|
||||
gTasks[sLinkSendTaskId].data[11] = 0;
|
||||
gTasks[sLinkSendTaskId].data[12] = 0;
|
||||
gTasks[sLinkSendTaskId].data[13] = 0;
|
||||
gTasks[sLinkSendTaskId].data[14] = 0;
|
||||
gTasks[sLinkSendTaskId].data[15] = 0;
|
||||
gTasks[sLinkSendTaskId].tState = 0;
|
||||
gTasks[sLinkSendTaskId].tCurrentBlock_WrapFrom = 0;
|
||||
gTasks[sLinkSendTaskId].tBlockSendDelayTimer = 0;
|
||||
gTasks[sLinkSendTaskId].tCurrentBlock_End = 0;
|
||||
gTasks[sLinkSendTaskId].tCurrentBlock_Start = 0;
|
||||
|
||||
sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0);
|
||||
gTasks[sLinkReceiveTaskId].data[12] = 0;
|
||||
gTasks[sLinkReceiveTaskId].data[13] = 0;
|
||||
gTasks[sLinkReceiveTaskId].data[14] = 0;
|
||||
gTasks[sLinkReceiveTaskId].data[15] = 0;
|
||||
gTasks[sLinkReceiveTaskId].tCurrentBlock_WrapFrom = 0;
|
||||
gTasks[sLinkReceiveTaskId].tBlockSendDelayTimer = 0; // not used by "receive" task
|
||||
gTasks[sLinkReceiveTaskId].tCurrentBlock_End = 0;
|
||||
gTasks[sLinkReceiveTaskId].tCurrentBlock_Start = 0;
|
||||
}
|
||||
|
||||
enum
|
||||
@ -735,52 +756,72 @@ enum
|
||||
LINK_BUFF_DATA,
|
||||
};
|
||||
|
||||
// We want to send a message. Place it into the "send" buffer.
|
||||
// First argument is a BATTLELINKCOMMTYPE_
|
||||
void PrepareBufferDataTransferLink(u32 battler, u32 bufferId, u16 size, u8 *data)
|
||||
{
|
||||
s32 alignedSize;
|
||||
s32 i;
|
||||
|
||||
alignedSize = size - size % 4 + 4;
|
||||
if (gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE)
|
||||
if (gTasks[sLinkSendTaskId].tCurrentBlock_End + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE)
|
||||
{
|
||||
gTasks[sLinkSendTaskId].data[12] = gTasks[sLinkSendTaskId].data[14];
|
||||
gTasks[sLinkSendTaskId].data[14] = 0;
|
||||
gTasks[sLinkSendTaskId].tCurrentBlock_WrapFrom = gTasks[sLinkSendTaskId].tCurrentBlock_End;
|
||||
gTasks[sLinkSendTaskId].tCurrentBlock_End = 0;
|
||||
}
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_BUFFER_ID] = bufferId;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ACTIVE_BATTLER] = battler;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ATTACKER] = gBattlerAttacker;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_TARGET] = gBattlerTarget;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_LO] = alignedSize;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ABSENT_BATTLER_FLAGS] = gAbsentBattlerFlags;
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_EFFECT_BATTLER] = gEffectBattler;
|
||||
|
||||
#define BYTE_TO_SEND(offset) \
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].tCurrentBlock_End + offset]
|
||||
|
||||
BYTE_TO_SEND(LINK_BUFF_BUFFER_ID) = bufferId;
|
||||
BYTE_TO_SEND(LINK_BUFF_ACTIVE_BATTLER) = battler;
|
||||
BYTE_TO_SEND(LINK_BUFF_ATTACKER) = gBattlerAttacker;
|
||||
BYTE_TO_SEND(LINK_BUFF_TARGET) = gBattlerTarget;
|
||||
BYTE_TO_SEND(LINK_BUFF_SIZE_LO) = alignedSize;
|
||||
BYTE_TO_SEND(LINK_BUFF_SIZE_HI) = (alignedSize & 0x0000FF00) >> 8;
|
||||
BYTE_TO_SEND(LINK_BUFF_ABSENT_BATTLER_FLAGS) = gAbsentBattlerFlags;
|
||||
BYTE_TO_SEND(LINK_BUFF_EFFECT_BATTLER) = gEffectBattler;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_DATA + i] = data[i];
|
||||
BYTE_TO_SEND(LINK_BUFF_DATA + i) = data[i];
|
||||
|
||||
gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA;
|
||||
#undef BYTE_TO_SEND
|
||||
|
||||
gTasks[sLinkSendTaskId].tCurrentBlock_End = gTasks[sLinkSendTaskId].tCurrentBlock_End + alignedSize + LINK_BUFF_DATA;
|
||||
}
|
||||
|
||||
enum {
|
||||
SENDTASK_STATE_INITIALIZE = 0,
|
||||
SENDTASK_STATE_INITIAL_DELAY = 1,
|
||||
SENDTASK_STATE_COUNT_PLAYERS = 2,
|
||||
SENDTASK_STATE_BEGIN_SEND_BLOCK = 3,
|
||||
SENDTASK_STATE_FINISH_SEND_BLOCK = 4,
|
||||
SENDTASK_STATE_UNUSED_STATE = 5,
|
||||
};
|
||||
|
||||
static void Task_HandleSendLinkBuffersData(u8 taskId)
|
||||
{
|
||||
u16 numPlayers;
|
||||
u16 blockSize;
|
||||
|
||||
switch (gTasks[taskId].data[11])
|
||||
#define BYTE_TO_SEND(offset) \
|
||||
gLinkBattleSendBuffer[gTasks[taskId].tCurrentBlock_Start + offset]
|
||||
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
gTasks[taskId].data[10] = 100;
|
||||
gTasks[taskId].data[11]++;
|
||||
case SENDTASK_STATE_INITIALIZE:
|
||||
gTasks[taskId].tInitialDelayTimer = 100;
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 1:
|
||||
gTasks[taskId].data[10]--;
|
||||
if (gTasks[taskId].data[10] == 0)
|
||||
gTasks[taskId].data[11]++;
|
||||
case SENDTASK_STATE_INITIAL_DELAY:
|
||||
gTasks[taskId].tInitialDelayTimer--;
|
||||
if (gTasks[taskId].tInitialDelayTimer == 0)
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 2:
|
||||
case SENDTASK_STATE_COUNT_PLAYERS:
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
gTasks[taskId].data[11]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -794,56 +835,66 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
|
||||
if (IsLinkMaster())
|
||||
{
|
||||
CheckShouldAdvanceLinkState();
|
||||
gTasks[taskId].data[11]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[11]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
|
||||
case SENDTASK_STATE_BEGIN_SEND_BLOCK:
|
||||
if (gTasks[taskId].tCurrentBlock_Start != gTasks[taskId].tCurrentBlock_End)
|
||||
{
|
||||
if (gTasks[taskId].data[13] == 0)
|
||||
if (gTasks[taskId].tBlockSendDelayTimer == 0)
|
||||
{
|
||||
if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
|
||||
&& gTasks[taskId].data[15] == gTasks[taskId].data[12])
|
||||
if (gTasks[taskId].tCurrentBlock_Start > gTasks[taskId].tCurrentBlock_End
|
||||
&& gTasks[taskId].tCurrentBlock_Start == gTasks[taskId].tCurrentBlock_WrapFrom)
|
||||
{
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].data[15] = 0;
|
||||
gTasks[taskId].tCurrentBlock_WrapFrom = 0;
|
||||
gTasks[taskId].tCurrentBlock_Start = 0;
|
||||
}
|
||||
blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA;
|
||||
SendBlock(BitmaskAllOtherLinkPlayers(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize);
|
||||
gTasks[taskId].data[11]++;
|
||||
blockSize = (BYTE_TO_SEND(LINK_BUFF_SIZE_LO) | (BYTE_TO_SEND(LINK_BUFF_SIZE_HI) << 8)) + LINK_BUFF_DATA;
|
||||
SendBlock(BitmaskAllOtherLinkPlayers(), &BYTE_TO_SEND(0), blockSize);
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[13]--;
|
||||
gTasks[taskId].tBlockSendDelayTimer--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case SENDTASK_STATE_FINISH_SEND_BLOCK:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
blockSize = gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
|
||||
gTasks[taskId].data[13] = 1;
|
||||
gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA;
|
||||
gTasks[taskId].data[11] = 3;
|
||||
blockSize = BYTE_TO_SEND(LINK_BUFF_SIZE_LO) | (BYTE_TO_SEND(LINK_BUFF_SIZE_HI) << 8);
|
||||
gTasks[taskId].tBlockSendDelayTimer = 1;
|
||||
gTasks[taskId].tCurrentBlock_Start = gTasks[taskId].tCurrentBlock_Start + blockSize + LINK_BUFF_DATA;
|
||||
gTasks[taskId].tState = SENDTASK_STATE_BEGIN_SEND_BLOCK;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (--gTasks[taskId].data[13] == 0)
|
||||
case SENDTASK_STATE_UNUSED_STATE:
|
||||
if (--gTasks[taskId].tBlockSendDelayTimer == 0)
|
||||
{
|
||||
gTasks[taskId].data[13] = 1;
|
||||
gTasks[taskId].data[11] = 3;
|
||||
gTasks[taskId].tBlockSendDelayTimer = 1;
|
||||
gTasks[taskId].tState = SENDTASK_STATE_BEGIN_SEND_BLOCK;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#undef BYTE_TO_SEND
|
||||
}
|
||||
|
||||
// We have received a message. Place it into the "receive" buffer.
|
||||
//
|
||||
// Counterintuitively, we also "receive" the outbound messages that
|
||||
// we send to other players. The GBA basically stores communicated
|
||||
// data for all four players, so inbound and outbound data can be
|
||||
// handled uniformly unless a game specifically decides to do
|
||||
// otherwise. Pokemon, evidently, did not specifically decide to do
|
||||
// otherwise.
|
||||
void TryReceiveLinkBattleData(void)
|
||||
{
|
||||
u8 i;
|
||||
@ -863,19 +914,19 @@ void TryReceiveLinkBattleData(void)
|
||||
u8 *dest, *src;
|
||||
u16 dataSize = gBlockRecvBuffer[i][2];
|
||||
|
||||
if (gTasks[sLinkReceiveTaskId].data[14] + 9 + dataSize > 0x1000)
|
||||
if (gTasks[sLinkReceiveTaskId].tCurrentBlock_End + 9 + dataSize > 0x1000)
|
||||
{
|
||||
gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14];
|
||||
gTasks[sLinkReceiveTaskId].data[14] = 0;
|
||||
gTasks[sLinkReceiveTaskId].tCurrentBlock_WrapFrom = gTasks[sLinkReceiveTaskId].tCurrentBlock_End;
|
||||
gTasks[sLinkReceiveTaskId].tCurrentBlock_End = 0;
|
||||
}
|
||||
|
||||
dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]];
|
||||
dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].tCurrentBlock_End];
|
||||
src = recvBuffer;
|
||||
|
||||
for (j = 0; j < dataSize + 8; j++)
|
||||
dest[j] = src[j];
|
||||
|
||||
gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + dataSize + 8;
|
||||
gTasks[sLinkReceiveTaskId].tCurrentBlock_End = gTasks[sLinkReceiveTaskId].tCurrentBlock_End + dataSize + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -886,49 +937,61 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
{
|
||||
u16 blockSize;
|
||||
u8 battler;
|
||||
u8 var;
|
||||
u8 playerId;
|
||||
|
||||
if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
|
||||
#define BYTE_TO_RECEIVE(offset) \
|
||||
gLinkBattleRecvBuffer[gTasks[taskId].tCurrentBlock_Start + offset]
|
||||
|
||||
if (gTasks[taskId].tCurrentBlock_Start != gTasks[taskId].tCurrentBlock_End)
|
||||
{
|
||||
if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
|
||||
&& gTasks[taskId].data[15] == gTasks[taskId].data[12])
|
||||
if (gTasks[taskId].tCurrentBlock_Start > gTasks[taskId].tCurrentBlock_End
|
||||
&& gTasks[taskId].tCurrentBlock_Start == gTasks[taskId].tCurrentBlock_WrapFrom)
|
||||
{
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].data[15] = 0;
|
||||
gTasks[taskId].tCurrentBlock_WrapFrom = 0;
|
||||
gTasks[taskId].tCurrentBlock_Start = 0;
|
||||
}
|
||||
battler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER];
|
||||
blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
|
||||
battler = BYTE_TO_RECEIVE(LINK_BUFF_ACTIVE_BATTLER);
|
||||
blockSize = BYTE_TO_RECEIVE(LINK_BUFF_SIZE_LO) | (BYTE_TO_RECEIVE(LINK_BUFF_SIZE_HI) << 8);
|
||||
|
||||
switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0])
|
||||
switch (BYTE_TO_RECEIVE(0))
|
||||
{
|
||||
case 0:
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
case B_COMM_TO_CONTROLLER:
|
||||
if (IS_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler))
|
||||
return;
|
||||
|
||||
memcpy(gBattleResources->bufferA[battler], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
|
||||
memcpy(gBattleResources->bufferA[battler], &BYTE_TO_RECEIVE(LINK_BUFF_DATA), blockSize);
|
||||
MarkBattlerReceivedLinkData(battler);
|
||||
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
|
||||
{
|
||||
gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ATTACKER];
|
||||
gBattlerTarget = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_TARGET];
|
||||
gAbsentBattlerFlags = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ABSENT_BATTLER_FLAGS];
|
||||
gEffectBattler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_EFFECT_BATTLER];
|
||||
gBattlerAttacker = BYTE_TO_RECEIVE(LINK_BUFF_ATTACKER);
|
||||
gBattlerTarget = BYTE_TO_RECEIVE(LINK_BUFF_TARGET);
|
||||
gAbsentBattlerFlags = BYTE_TO_RECEIVE(LINK_BUFF_ABSENT_BATTLER_FLAGS);
|
||||
gEffectBattler = BYTE_TO_RECEIVE(LINK_BUFF_EFFECT_BATTLER);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
memcpy(gBattleResources->bufferB[battler], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
|
||||
case B_COMM_TO_ENGINE:
|
||||
memcpy(gBattleResources->bufferB[battler], &gLinkBattleRecvBuffer[gTasks[taskId].tCurrentBlock_Start + LINK_BUFF_DATA], blockSize);
|
||||
break;
|
||||
case 2:
|
||||
var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA];
|
||||
gBattleControllerExecFlags &= ~(1u << (battler + var * 4));
|
||||
case B_COMM_CONTROLLER_IS_DONE:
|
||||
playerId = BYTE_TO_RECEIVE(LINK_BUFF_DATA);
|
||||
MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId);
|
||||
break;
|
||||
}
|
||||
|
||||
gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA;
|
||||
gTasks[taskId].tCurrentBlock_Start = gTasks[taskId].tCurrentBlock_Start + blockSize + LINK_BUFF_DATA;
|
||||
}
|
||||
|
||||
#undef BYTE_TO_RECEIVE
|
||||
}
|
||||
|
||||
#undef tInitialDelayTimer
|
||||
#undef tState
|
||||
#undef tCurrentBlock_WrapFrom
|
||||
#undef tBlockSendDelayTimer
|
||||
#undef tCurrentBlock_End
|
||||
#undef tCurrentBlock_Start
|
||||
|
||||
void BtlController_EmitGetMonData(u32 battler, u32 bufferId, u8 requestId, u8 monToCheck)
|
||||
{
|
||||
gBattleResources->transferBuffer[0] = CONTROLLER_GETMONDATA;
|
||||
@ -2368,7 +2431,7 @@ void BtlController_HandleGetMonData(u32 battler)
|
||||
monToCheck >>= 1;
|
||||
}
|
||||
}
|
||||
BtlController_EmitDataTransfer(battler, BUFFER_B, size, monData);
|
||||
BtlController_EmitDataTransfer(battler, B_COMM_TO_ENGINE, size, monData);
|
||||
BattleControllerComplete(battler);
|
||||
}
|
||||
|
||||
@ -2384,7 +2447,7 @@ void BtlController_HandleGetRawMonData(u32 battler)
|
||||
for (i = 0; i < gBattleResources->bufferA[battler][2]; i++)
|
||||
dst[i] = src[i];
|
||||
|
||||
BtlController_EmitDataTransfer(battler, BUFFER_B, gBattleResources->bufferA[battler][2], dst);
|
||||
BtlController_EmitDataTransfer(battler, B_COMM_TO_ENGINE, gBattleResources->bufferA[battler][2], dst);
|
||||
BattleControllerComplete(battler);
|
||||
}
|
||||
|
||||
|
||||
@ -2270,24 +2270,24 @@ int GetDomeTrainerSelectedMons(u16 tournamentTrainerId)
|
||||
|
||||
static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
{
|
||||
int i, moveId, playerMonId;
|
||||
int i, moveIndex, playerMonId;
|
||||
int partyMovePoints[FRONTIER_PARTY_SIZE];
|
||||
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
partyMovePoints[i] = 0;
|
||||
for (moveId = 0; moveId < MAX_MON_MOVES; moveId++)
|
||||
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
|
||||
{
|
||||
for (playerMonId = 0; playerMonId < FRONTIER_PARTY_SIZE; playerMonId++)
|
||||
{
|
||||
if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveIndex),
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD);
|
||||
}
|
||||
else
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId],
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveIndex],
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD);
|
||||
}
|
||||
}
|
||||
@ -2299,24 +2299,24 @@ static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
// Identical to function above, but uses EFFECTIVENESS_MODE_BAD
|
||||
static int SelectOpponentMons_Bad(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
{
|
||||
int i, moveId, playerMonId;
|
||||
int i, moveIndex, playerMonId;
|
||||
int partyMovePoints[FRONTIER_PARTY_SIZE];
|
||||
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
partyMovePoints[i] = 0;
|
||||
for (moveId = 0; moveId < MAX_MON_MOVES; moveId++)
|
||||
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
|
||||
{
|
||||
for (playerMonId = 0; playerMonId < FRONTIER_PARTY_SIZE; playerMonId++)
|
||||
{
|
||||
if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveIndex),
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD);
|
||||
}
|
||||
else
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId],
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveIndex],
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD);
|
||||
}
|
||||
}
|
||||
@ -5097,7 +5097,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
{
|
||||
int i, j, k;
|
||||
int moveScores[MAX_MON_MOVES * FRONTIER_PARTY_SIZE];
|
||||
u16 moveIds[MAX_MON_MOVES * FRONTIER_PARTY_SIZE];
|
||||
u16 moves[MAX_MON_MOVES * FRONTIER_PARTY_SIZE];
|
||||
u16 bestScore = 0;
|
||||
u16 bestId = 0;
|
||||
int movePower = 0;
|
||||
@ -5111,16 +5111,16 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
// TODO: Clean this up, looks like a different data structure (2D array)
|
||||
moveScores[i * MAX_MON_MOVES + j] = 0;
|
||||
if (DOME_TRAINERS[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
moveIds[i * MAX_MON_MOVES + j] = GetFrontierBrainMonMove(i, j);
|
||||
moves[i * MAX_MON_MOVES + j] = GetFrontierBrainMonMove(i, j);
|
||||
else
|
||||
moveIds[i * MAX_MON_MOVES + j] = gFacilityTrainerMons[DOME_MONS[winnerTournamentId][i]].moves[j];
|
||||
moves[i * MAX_MON_MOVES + j] = gFacilityTrainerMons[DOME_MONS[winnerTournamentId][i]].moves[j];
|
||||
|
||||
movePower = GetMovePower(moveIds[i * MAX_MON_MOVES + j]);
|
||||
if (IsBattleMoveStatus(moveIds[i * MAX_MON_MOVES + j]))
|
||||
movePower = GetMovePower(moves[i * MAX_MON_MOVES + j]);
|
||||
if (IsBattleMoveStatus(moves[i * MAX_MON_MOVES + j]))
|
||||
movePower = 40;
|
||||
else if (movePower == 1)
|
||||
movePower = 60;
|
||||
else if (GetMoveEffect(moveIds[i * MAX_MON_MOVES + j]) == EFFECT_EXPLOSION)
|
||||
else if (GetMoveEffect(moves[i * MAX_MON_MOVES + j]) == EFFECT_EXPLOSION)
|
||||
movePower /= 2;
|
||||
|
||||
for (k = 0; k < FRONTIER_PARTY_SIZE; k++)
|
||||
@ -5141,7 +5141,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
else
|
||||
targetAbility = gSpeciesInfo[targetSpecies].abilities[0];
|
||||
|
||||
typeMultiplier = CalcPartyMonTypeEffectivenessMultiplier(moveIds[i * 4 + j], targetSpecies, targetAbility);
|
||||
typeMultiplier = CalcPartyMonTypeEffectivenessMultiplier(moves[i * 4 + j], targetSpecies, targetAbility);
|
||||
if (typeMultiplier == UQ_4_12(0))
|
||||
moveScores[i * MAX_MON_MOVES + j] += 0;
|
||||
else if (typeMultiplier >= UQ_4_12(2))
|
||||
@ -5159,7 +5159,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
}
|
||||
else if (bestScore == moveScores[i * MAX_MON_MOVES + j])
|
||||
{
|
||||
if (moveIds[bestId] < moveIds[i * MAX_MON_MOVES + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id?
|
||||
if (moves[bestId] < moves[i * MAX_MON_MOVES + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id?
|
||||
bestId = i * MAX_MON_MOVES + j;
|
||||
}
|
||||
}
|
||||
@ -5170,7 +5170,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
{
|
||||
for (i = 0; i < roundId - 1; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.domeWinningMoves[GetOpposingNPCTournamentIdByRound(winnerTournamentId, i)] == moveIds[j])
|
||||
if (gSaveBlock2Ptr->frontier.domeWinningMoves[GetOpposingNPCTournamentIdByRound(winnerTournamentId, i)] == moves[j])
|
||||
break;
|
||||
}
|
||||
if (i != roundId - 1)
|
||||
@ -5190,7 +5190,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
j = k;
|
||||
bestScore = moveScores[k];
|
||||
}
|
||||
else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) // Yes, these conditions are redundant
|
||||
else if (bestScore == moveScores[k] && moves[j] < moves[k]) // Yes, these conditions are redundant
|
||||
{
|
||||
j = k;
|
||||
bestScore = moveScores[k];
|
||||
@ -5202,7 +5202,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
if (moveScores[j] == 0)
|
||||
j = bestId;
|
||||
|
||||
return moveIds[j];
|
||||
return moves[j];
|
||||
}
|
||||
|
||||
static void Task_ShowTourneyTree(u8 taskId)
|
||||
|
||||
@ -442,7 +442,7 @@ static bool32 HandleEndTurnFirstEventBlock(u32 battler)
|
||||
{
|
||||
gBattlerAttacker = battler;
|
||||
gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8;
|
||||
BtlController_EmitStatusAnimation(battler, BUFFER_A, FALSE, STATUS1_BURN);
|
||||
BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, FALSE, STATUS1_BURN);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
BattleScriptExecute(BattleScript_HurtByTheSeaOfFire);
|
||||
effect = TRUE;
|
||||
@ -1027,7 +1027,7 @@ static bool32 HandleEndTurnYawn(u32 battler)
|
||||
gBattleMons[battler].status1 |= ((Random() % 4) + 3);
|
||||
|
||||
TryActivateSleepClause(battler, gBattlerPartyIndexes[battler]);
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
BattleScriptExecute(BattleScript_YawnMakesAsleep);
|
||||
}
|
||||
@ -1349,7 +1349,7 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler)
|
||||
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
BattleScriptExecute(BattleScript_MonWokeUpInUproar);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -762,11 +762,11 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
|
||||
}
|
||||
else if (state == 4)
|
||||
{
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(0)]);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(B_BATTLER_0)]);
|
||||
}
|
||||
else if (state == 5)
|
||||
{
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(1)]);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(B_BATTLER_1)]);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -794,13 +794,13 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
|
||||
else if (state == 5)
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_DoublesOpponentHealthbox[1]);
|
||||
else if (state == 6)
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(0)]);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(B_BATTLER_0)]);
|
||||
else if (state == 7)
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(1)]);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(B_BATTLER_1)]);
|
||||
else if (state == 8)
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(2)]);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(B_BATTLER_2)]);
|
||||
else if (state == 9)
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(3)]);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(B_BATTLER_3)]);
|
||||
else
|
||||
retVal = TRUE;
|
||||
}
|
||||
|
||||
@ -646,19 +646,19 @@ enum BattleCoordTypes GetBattlerCoordsIndex(u32 battler)
|
||||
return BATTLE_COORDS_SINGLES;
|
||||
}
|
||||
|
||||
u8 CreateBattlerHealthboxSprites(u8 battlerId)
|
||||
u8 CreateBattlerHealthboxSprites(u8 battler)
|
||||
{
|
||||
s16 data6 = 0;
|
||||
u8 healthboxLeftSpriteId, healthboxRightSpriteId;
|
||||
u8 healthbarSpriteId;
|
||||
struct Sprite *healthBarSpritePtr;
|
||||
|
||||
switch (GetBattlerCoordsIndex(battlerId))
|
||||
switch (GetBattlerCoordsIndex(battler))
|
||||
{
|
||||
default:
|
||||
case BATTLE_COORDS_SINGLES:
|
||||
{
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
@ -685,16 +685,16 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
|
||||
}
|
||||
case BATTLE_COORDS_DOUBLES:
|
||||
{
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battlerId) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battlerId) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battler) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battler) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
data6 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battlerId) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battlerId) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battler) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battler) / 2], DISPLAY_WIDTH, DISPLAY_HEIGHT, 1);
|
||||
data6 = 2;
|
||||
}
|
||||
gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
|
||||
@ -706,16 +706,16 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
|
||||
}
|
||||
}
|
||||
|
||||
healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0);
|
||||
healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battler]], 140, 60, 0);
|
||||
healthBarSpritePtr = &gSprites[healthbarSpriteId];
|
||||
SetSubspriteTables(healthBarSpritePtr, &sHealthBar_SubspriteTables[GetBattlerSide(battlerId)]);
|
||||
SetSubspriteTables(healthBarSpritePtr, &sHealthBar_SubspriteTables[GetBattlerSide(battler)]);
|
||||
healthBarSpritePtr->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
|
||||
healthBarSpritePtr->oam.priority = 1;
|
||||
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64);
|
||||
|
||||
gSprites[healthboxLeftSpriteId].hMain_HealthBarSpriteId = healthbarSpriteId;
|
||||
gSprites[healthboxLeftSpriteId].hMain_Battler = battlerId;
|
||||
gSprites[healthboxLeftSpriteId].hMain_Battler = battler;
|
||||
gSprites[healthboxLeftSpriteId].invisible = TRUE;
|
||||
|
||||
gSprites[healthboxRightSpriteId].invisible = TRUE;
|
||||
@ -724,7 +724,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
|
||||
healthBarSpritePtr->hBar_Data6 = data6;
|
||||
healthBarSpritePtr->invisible = TRUE;
|
||||
|
||||
CreateIndicatorSprite(battlerId);
|
||||
CreateIndicatorSprite(battler);
|
||||
|
||||
gBattleStruct->ballSpriteIds[0] = MAX_SPRITES;
|
||||
gBattleStruct->ballSpriteIds[1] = MAX_SPRITES;
|
||||
@ -795,13 +795,13 @@ static void SpriteCB_HealthBoxOther(struct Sprite *sprite)
|
||||
sprite->y2 = gSprites[healthboxMainSpriteId].y2;
|
||||
}
|
||||
|
||||
void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue)
|
||||
void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue)
|
||||
{
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId;
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal;
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].oldValue = oldVal;
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue;
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].currValue = -32768;
|
||||
gBattleSpritesDataPtr->battleBars[battler].healthboxSpriteId = healthboxSpriteId;
|
||||
gBattleSpritesDataPtr->battleBars[battler].maxValue = maxVal;
|
||||
gBattleSpritesDataPtr->battleBars[battler].oldValue = oldVal;
|
||||
gBattleSpritesDataPtr->battleBars[battler].receivedValue = receivedValue;
|
||||
gBattleSpritesDataPtr->battleBars[battler].currValue = -32768;
|
||||
}
|
||||
|
||||
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
|
||||
@ -986,9 +986,9 @@ static void UpdateOpponentHpTextDoubles(u32 healthboxSpriteId, u32 barSpriteId,
|
||||
{
|
||||
u8 text[32], *txtPtr;
|
||||
u32 i, var;
|
||||
u32 battlerId = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
u32 battler = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible
|
||||
if (gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars) // don't print text if only bars are visible
|
||||
{
|
||||
memcpy(text, sEmptyWhiteText_TransparentHighlight, sizeof(sEmptyWhiteText_TransparentHighlight));
|
||||
if (maxOrCurrent == HP_CURRENT)
|
||||
@ -1247,7 +1247,7 @@ void SwapHpBarsWithHpText(void)
|
||||
#define tIsBattleStart data[10]
|
||||
#define tBlend data[15]
|
||||
|
||||
u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart)
|
||||
u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart)
|
||||
{
|
||||
bool8 isOpponent;
|
||||
s16 bar_X, bar_Y, bar_pos2_X, bar_data0;
|
||||
@ -1256,9 +1256,9 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
|
||||
u8 ballIconSpritesIds[PARTY_SIZE];
|
||||
u8 taskId;
|
||||
|
||||
if (!skipPlayer || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT)
|
||||
if (!skipPlayer || GetBattlerPosition(battler) != B_POSITION_OPPONENT_RIGHT)
|
||||
{
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
isOpponent = FALSE;
|
||||
bar_X = 136, bar_Y = 96;
|
||||
@ -1269,7 +1269,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
|
||||
{
|
||||
isOpponent = TRUE;
|
||||
|
||||
if (!skipPlayer || GetBattlerCoordsIndex(battlerId) == BATTLE_COORDS_SINGLES)
|
||||
if (!skipPlayer || GetBattlerCoordsIndex(battler) == BATTLE_COORDS_SINGLES)
|
||||
bar_X = 104, bar_Y = 40;
|
||||
else
|
||||
bar_X = 104, bar_Y = 16;
|
||||
@ -1337,7 +1337,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
|
||||
gSprites[ballIconSpritesIds[i]].data[2] = isOpponent;
|
||||
}
|
||||
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
@ -1450,7 +1450,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
|
||||
}
|
||||
|
||||
taskId = CreateTask(TaskDummy, 5);
|
||||
gTasks[taskId].tBattler = battlerId;
|
||||
gTasks[taskId].tBattler = battler;
|
||||
gTasks[taskId].tSummaryBarSpriteId = summaryBarSpriteId;
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@ -1473,12 +1473,12 @@ void Task_HidePartyStatusSummary(u8 taskId)
|
||||
u8 ballIconSpriteIds[PARTY_SIZE];
|
||||
bool8 isBattleStart;
|
||||
u8 summaryBarSpriteId;
|
||||
u8 battlerId;
|
||||
u8 battler;
|
||||
s32 i;
|
||||
|
||||
isBattleStart = gTasks[taskId].tIsBattleStart;
|
||||
summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
|
||||
battlerId = gTasks[taskId].tBattler;
|
||||
battler = gTasks[taskId].tBattler;
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
|
||||
@ -1497,7 +1497,7 @@ void Task_HidePartyStatusSummary(u8 taskId)
|
||||
{
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
if (!IsOnPlayerSide(battler))
|
||||
{
|
||||
gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[1] = 7 * i;
|
||||
gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[3] = 0;
|
||||
@ -1542,7 +1542,7 @@ static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId)
|
||||
u8 ballIconSpriteIds[PARTY_SIZE];
|
||||
s32 i;
|
||||
|
||||
u8 battlerId = gTasks[taskId].tBattler;
|
||||
u8 battler = gTasks[taskId].tBattler;
|
||||
if (--gTasks[taskId].tBlend == -1)
|
||||
{
|
||||
u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
|
||||
@ -1569,7 +1569,7 @@ static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId)
|
||||
}
|
||||
else if (gTasks[taskId].tBlend == -3)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown = 0;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
DestroyTask(taskId);
|
||||
@ -1580,7 +1580,7 @@ static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId)
|
||||
{
|
||||
u8 ballIconSpriteIds[PARTY_SIZE];
|
||||
s32 i;
|
||||
u8 battlerId = gTasks[taskId].tBattler;
|
||||
u8 battler = gTasks[taskId].tBattler;
|
||||
|
||||
if (--gTasks[taskId].tBlend >= 0)
|
||||
{
|
||||
@ -1601,7 +1601,7 @@ static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId)
|
||||
}
|
||||
else if (gTasks[taskId].tBlend == -3)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown = 0;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
DestroyTask(taskId);
|
||||
@ -1773,17 +1773,17 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
|
||||
|
||||
static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
|
||||
{
|
||||
u8 battlerId, healthBarSpriteId;
|
||||
u8 battler, healthBarSpriteId;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
return;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
return;
|
||||
|
||||
battlerId = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
battler = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
if (IsOnPlayerSide(battler))
|
||||
return;
|
||||
if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(GetBattlerMon(battlerId), MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
|
||||
if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
|
||||
return;
|
||||
|
||||
healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
|
||||
@ -1797,18 +1797,18 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
|
||||
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
|
||||
{
|
||||
s32 i;
|
||||
u8 battlerId, healthBarSpriteId;
|
||||
u8 battler, healthBarSpriteId;
|
||||
u32 status, pltAdder;
|
||||
const u8 *statusGfxPtr;
|
||||
s16 tileNumAdder;
|
||||
u8 statusPalId;
|
||||
|
||||
battlerId = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
battler = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
status = GetMonData(GetBattlerMon(battlerId), MON_DATA_STATUS);
|
||||
switch (GetBattlerCoordsIndex(battlerId))
|
||||
status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS);
|
||||
switch (GetBattlerCoordsIndex(battler))
|
||||
{
|
||||
case BATTLE_COORDS_SINGLES:
|
||||
tileNumAdder = 0x1A;
|
||||
@ -1820,38 +1820,38 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
|
||||
}
|
||||
else
|
||||
{
|
||||
status = GetMonData(GetBattlerMon(battlerId), MON_DATA_STATUS);
|
||||
status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS);
|
||||
tileNumAdder = 0x11;
|
||||
}
|
||||
|
||||
if (status & STATUS1_SLEEP)
|
||||
{
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_SLP_BATTLER0, battlerId));
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_SLP_BATTLER0, battler));
|
||||
statusPalId = PAL_STATUS_SLP;
|
||||
}
|
||||
else if (status & STATUS1_PSN_ANY)
|
||||
{
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PSN_BATTLER0, battlerId));
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PSN_BATTLER0, battler));
|
||||
statusPalId = PAL_STATUS_PSN;
|
||||
}
|
||||
else if (status & STATUS1_BURN)
|
||||
{
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_BRN_BATTLER0, battlerId));
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_BRN_BATTLER0, battler));
|
||||
statusPalId = PAL_STATUS_BRN;
|
||||
}
|
||||
else if (status & STATUS1_FREEZE)
|
||||
{
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battlerId));
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battler));
|
||||
statusPalId = PAL_STATUS_FRZ;
|
||||
}
|
||||
else if (status & STATUS1_FROSTBITE)
|
||||
{
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRB_BATTLER0, battlerId));
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRB_BATTLER0, battler));
|
||||
statusPalId = PAL_STATUS_FRZ;
|
||||
}
|
||||
else if (status & STATUS1_PARALYSIS)
|
||||
{
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battlerId));
|
||||
statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battler));
|
||||
statusPalId = PAL_STATUS_PAR;
|
||||
}
|
||||
else
|
||||
@ -1861,7 +1861,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
|
||||
for (i = 0; i < 3; i++)
|
||||
CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32);
|
||||
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars)
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64);
|
||||
|
||||
TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE);
|
||||
@ -1869,14 +1869,14 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
|
||||
}
|
||||
|
||||
pltAdder = PLTT_ID(gSprites[healthboxSpriteId].oam.paletteNum);
|
||||
pltAdder += battlerId + 12;
|
||||
pltAdder += battler + 12;
|
||||
|
||||
FillPalette(sStatusIconColors[statusPalId], OBJ_PLTT_OFFSET + pltAdder, PLTT_SIZEOF(1));
|
||||
CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_OFFSET + pltAdder], (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1));
|
||||
CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96);
|
||||
if (GetBattlerCoordsIndex(battlerId) == BATTLE_COORDS_DOUBLES || !IsOnPlayerSide(battlerId))
|
||||
if (GetBattlerCoordsIndex(battler) == BATTLE_COORDS_DOUBLES || !IsOnPlayerSide(battler))
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars)
|
||||
{
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32);
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32);
|
||||
@ -1885,68 +1885,68 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
|
||||
TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
|
||||
}
|
||||
|
||||
static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId)
|
||||
static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battler)
|
||||
{
|
||||
u8 ret = statusElementId;
|
||||
|
||||
switch (statusElementId)
|
||||
{
|
||||
case HEALTHBOX_GFX_STATUS_PSN_BATTLER0:
|
||||
if (battlerId == 0)
|
||||
if (battler == 0)
|
||||
ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER0;
|
||||
else if (battlerId == 1)
|
||||
else if (battler == 1)
|
||||
ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER1;
|
||||
else if (battlerId == 2)
|
||||
else if (battler == 2)
|
||||
ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER2;
|
||||
else
|
||||
ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER3;
|
||||
break;
|
||||
case HEALTHBOX_GFX_STATUS_PRZ_BATTLER0:
|
||||
if (battlerId == 0)
|
||||
if (battler == 0)
|
||||
ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER0;
|
||||
else if (battlerId == 1)
|
||||
else if (battler == 1)
|
||||
ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER1;
|
||||
else if (battlerId == 2)
|
||||
else if (battler == 2)
|
||||
ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER2;
|
||||
else
|
||||
ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER3;
|
||||
break;
|
||||
case HEALTHBOX_GFX_STATUS_SLP_BATTLER0:
|
||||
if (battlerId == 0)
|
||||
if (battler == 0)
|
||||
ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER0;
|
||||
else if (battlerId == 1)
|
||||
else if (battler == 1)
|
||||
ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER1;
|
||||
else if (battlerId == 2)
|
||||
else if (battler == 2)
|
||||
ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER2;
|
||||
else
|
||||
ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER3;
|
||||
break;
|
||||
case HEALTHBOX_GFX_STATUS_FRZ_BATTLER0:
|
||||
if (battlerId == 0)
|
||||
if (battler == 0)
|
||||
ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER0;
|
||||
else if (battlerId == 1)
|
||||
else if (battler == 1)
|
||||
ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER1;
|
||||
else if (battlerId == 2)
|
||||
else if (battler == 2)
|
||||
ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER2;
|
||||
else
|
||||
ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER3;
|
||||
break;
|
||||
case HEALTHBOX_GFX_STATUS_FRB_BATTLER0:
|
||||
if (battlerId == 0)
|
||||
if (battler == 0)
|
||||
ret = HEALTHBOX_GFX_STATUS_FRB_BATTLER0;
|
||||
else if (battlerId == 1)
|
||||
else if (battler == 1)
|
||||
ret = HEALTHBOX_GFX_STATUS_FRB_BATTLER1;
|
||||
else if (battlerId == 2)
|
||||
else if (battler == 2)
|
||||
ret = HEALTHBOX_GFX_STATUS_FRB_BATTLER2;
|
||||
else
|
||||
ret = HEALTHBOX_GFX_STATUS_FRB_BATTLER3;
|
||||
break;
|
||||
case HEALTHBOX_GFX_STATUS_BRN_BATTLER0:
|
||||
if (battlerId == 0)
|
||||
if (battler == 0)
|
||||
ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER0;
|
||||
else if (battlerId == 1)
|
||||
else if (battler == 1)
|
||||
ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER1;
|
||||
else if (battlerId == 2)
|
||||
else if (battler == 2)
|
||||
ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER2;
|
||||
else
|
||||
ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER3;
|
||||
@ -1986,13 +1986,13 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId)
|
||||
|
||||
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId)
|
||||
{
|
||||
u32 battlerId = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
u32 battler = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
s32 maxHp = GetMonData(mon, MON_DATA_MAX_HP);
|
||||
s32 currHp = GetMonData(mon, MON_DATA_HP);
|
||||
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
u8 isDoubles = GetBattlerCoordsIndex(battlerId) == BATTLE_COORDS_DOUBLES;
|
||||
u8 isDoubles = GetBattlerCoordsIndex(battler) == BATTLE_COORDS_DOUBLES;
|
||||
|
||||
if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL)
|
||||
UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL));
|
||||
@ -2007,8 +2007,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
||||
if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL)
|
||||
{
|
||||
LoadBattleBarGfx(0);
|
||||
SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
|
||||
MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
|
||||
SetBattleBarStruct(battler, healthboxSpriteId, maxHp, currHp, 0);
|
||||
MoveBattleBar(battler, healthboxSpriteId, HEALTH_BAR, 0);
|
||||
}
|
||||
|
||||
if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL))
|
||||
@ -2025,8 +2025,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
||||
currLevelExp = gExperienceTables[gSpeciesInfo[species].growthRate][level];
|
||||
currExpBarValue = exp - currLevelExp;
|
||||
maxExpBarValue = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLevelExp;
|
||||
SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
|
||||
MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0);
|
||||
SetBattleBarStruct(battler, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
|
||||
MoveBattleBar(battler, healthboxSpriteId, EXP_BAR, 0);
|
||||
}
|
||||
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
|
||||
UpdateNickInHealthbox(healthboxSpriteId, mon);
|
||||
@ -2041,7 +2041,7 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
||||
{
|
||||
if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL)
|
||||
UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL));
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
|
||||
if (gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars)
|
||||
{
|
||||
if (elementId == HEALTHBOX_ALL)
|
||||
UpdateHpTextInHealthbox(healthboxSpriteId, HP_BOTH, currHp, maxHp);
|
||||
@ -2053,8 +2053,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
||||
if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL)
|
||||
{
|
||||
LoadBattleBarGfx(0);
|
||||
SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
|
||||
MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
|
||||
SetBattleBarStruct(battler, healthboxSpriteId, maxHp, currHp, 0);
|
||||
MoveBattleBar(battler, healthboxSpriteId, HEALTH_BAR, 0);
|
||||
}
|
||||
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
|
||||
UpdateNickInHealthbox(healthboxSpriteId, mon);
|
||||
@ -2066,45 +2066,45 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
||||
#define B_EXPBAR_PIXELS 64
|
||||
#define B_HEALTHBAR_PIXELS 48
|
||||
|
||||
s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused)
|
||||
s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 unused)
|
||||
{
|
||||
s32 currentBarValue;
|
||||
|
||||
if (whichBar == HEALTH_BAR) // health bar
|
||||
{
|
||||
u16 hpFraction = B_FAST_HP_DRAIN == FALSE ? 1 : max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / (B_HEALTHBAR_PIXELS / 2), 1);
|
||||
currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battlerId].currValue,
|
||||
u16 hpFraction = B_FAST_HP_DRAIN == FALSE ? 1 : max(gBattleSpritesDataPtr->battleBars[battler].maxValue / (B_HEALTHBAR_PIXELS / 2), 1);
|
||||
currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battler].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battler].currValue,
|
||||
B_HEALTHBAR_PIXELS / 8, hpFraction);
|
||||
}
|
||||
else // exp bar
|
||||
{
|
||||
u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8);
|
||||
u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battler].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].receivedValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].maxValue, 8);
|
||||
if (expFraction == 0)
|
||||
expFraction = 1;
|
||||
expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction);
|
||||
expFraction = abs(gBattleSpritesDataPtr->battleBars[battler].receivedValue / expFraction);
|
||||
|
||||
currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battlerId].currValue,
|
||||
currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battler].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battler].currValue,
|
||||
B_EXPBAR_PIXELS / 8, expFraction);
|
||||
}
|
||||
|
||||
if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars))
|
||||
MoveBattleBarGraphically(battlerId, whichBar);
|
||||
if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars))
|
||||
MoveBattleBarGraphically(battler, whichBar);
|
||||
|
||||
if (currentBarValue == -1)
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].currValue = 0;
|
||||
gBattleSpritesDataPtr->battleBars[battler].currValue = 0;
|
||||
|
||||
return currentBarValue;
|
||||
}
|
||||
|
||||
static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
|
||||
static void MoveBattleBarGraphically(u8 battler, u8 whichBar)
|
||||
{
|
||||
u8 array[8];
|
||||
u8 filledPixelsCount, level;
|
||||
@ -2114,10 +2114,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
|
||||
switch (whichBar)
|
||||
{
|
||||
case HEALTH_BAR:
|
||||
filledPixelsCount = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battlerId].currValue,
|
||||
filledPixelsCount = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battler].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battler].currValue,
|
||||
array, B_HEALTHBAR_PIXELS / 8);
|
||||
|
||||
if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp
|
||||
@ -2129,7 +2129,7 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId;
|
||||
u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battler].healthboxSpriteId].hMain_HealthBarSpriteId;
|
||||
if (i < 2)
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
|
||||
(void *)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32);
|
||||
@ -2139,12 +2139,12 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
|
||||
}
|
||||
break;
|
||||
case EXP_BAR:
|
||||
CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battlerId].currValue,
|
||||
CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battler].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].oldValue,
|
||||
gBattleSpritesDataPtr->battleBars[battler].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[battler].currValue,
|
||||
array, B_EXPBAR_PIXELS / 8);
|
||||
level = GetMonData(GetBattlerMon(battlerId), MON_DATA_LEVEL);
|
||||
level = GetMonData(GetBattlerMon(battler), MON_DATA_LEVEL);
|
||||
if (level >= MAX_LEVEL)
|
||||
{
|
||||
for (i = 0; i < 8; i++)
|
||||
@ -2154,10 +2154,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
|
||||
{
|
||||
if (i < 4)
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
|
||||
(void *)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32);
|
||||
(void *)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battler].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32);
|
||||
else
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
|
||||
(void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
|
||||
(void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battler].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -2540,19 +2540,19 @@ static void ClearAbilityName(u8 spriteId1, u8 spriteId2)
|
||||
7, 9, 1);
|
||||
}
|
||||
|
||||
static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2)
|
||||
static void PrintBattlerOnAbilityPopUp(u8 battler, u8 spriteId1, u8 spriteId2)
|
||||
{
|
||||
int i;
|
||||
u8 lastChar;
|
||||
u8* textPtr;
|
||||
u8 monName[POKEMON_NAME_LENGTH + 3] = {0};
|
||||
struct Pokemon *illusionMon = GetIllusionMonPtr(battlerId);
|
||||
struct Pokemon *illusionMon = GetIllusionMonPtr(battler);
|
||||
u8 nick[POKEMON_NAME_LENGTH + 1] = {0};
|
||||
|
||||
if (illusionMon != NULL)
|
||||
GetMonData(illusionMon, MON_DATA_NICKNAME, nick);
|
||||
else
|
||||
GetMonData(GetBattlerMon(battlerId), MON_DATA_NICKNAME, nick);
|
||||
GetMonData(GetBattlerMon(battler), MON_DATA_NICKNAME, nick);
|
||||
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; ++i)
|
||||
{
|
||||
@ -2720,7 +2720,7 @@ static inline bool32 IsAnyAbilityPopUpActive(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
|
||||
void CreateAbilityPopUp(u8 battler, u32 ability, bool32 isDoubleBattle)
|
||||
{
|
||||
const s16 (*coords)[2];
|
||||
u8 spriteId1, spriteId2, battlerPosition, taskId;
|
||||
@ -2733,7 +2733,7 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
|
||||
|
||||
if (gTestRunnerEnabled)
|
||||
{
|
||||
TestRunner_Battle_RecordAbilityPopUp(battlerId, ability);
|
||||
TestRunner_Battle_RecordAbilityPopUp(battler, ability);
|
||||
if (gTestRunnerHeadless)
|
||||
return;
|
||||
}
|
||||
@ -2744,8 +2744,8 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
|
||||
LoadSpritePalette(&sSpritePalette_AbilityPopUp);
|
||||
}
|
||||
|
||||
gBattleStruct->battlerState[battlerId].activeAbilityPopUps = TRUE;
|
||||
battlerPosition = GetBattlerPosition(battlerId);
|
||||
gBattleStruct->battlerState[battler].activeAbilityPopUps = TRUE;
|
||||
battlerPosition = GetBattlerPosition(battler);
|
||||
|
||||
if (isDoubleBattle)
|
||||
coords = sAbilityPopUpCoordsDoubles;
|
||||
@ -2781,30 +2781,30 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
|
||||
gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF;
|
||||
gSprites[spriteId2].oam.tileNum += (8 * 4); //Second half of pop up
|
||||
|
||||
gBattleStruct->abilityPopUpSpriteIds[battlerId][0] = spriteId1;
|
||||
gBattleStruct->abilityPopUpSpriteIds[battlerId][1] = spriteId2;
|
||||
gBattleStruct->abilityPopUpSpriteIds[battler][0] = spriteId1;
|
||||
gBattleStruct->abilityPopUpSpriteIds[battler][1] = spriteId2;
|
||||
|
||||
taskId = CreateTask(Task_FreeAbilityPopUpGfx, 5);
|
||||
gTasks[taskId].tSpriteId1 = spriteId1;
|
||||
gTasks[taskId].tSpriteId2 = spriteId2;
|
||||
|
||||
gSprites[spriteId1].tIsMain = TRUE;
|
||||
gSprites[spriteId1].tBattlerId = battlerId;
|
||||
gSprites[spriteId2].tBattlerId = battlerId;
|
||||
gSprites[spriteId1].tBattlerId = battler;
|
||||
gSprites[spriteId2].tBattlerId = battler;
|
||||
|
||||
StartSpriteAnim(&gSprites[spriteId1], 0);
|
||||
StartSpriteAnim(&gSprites[spriteId2], 0);
|
||||
|
||||
PrintBattlerOnAbilityPopUp(battlerId, spriteId1, spriteId2);
|
||||
PrintBattlerOnAbilityPopUp(battler, spriteId1, spriteId2);
|
||||
PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2);
|
||||
RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32));
|
||||
}
|
||||
|
||||
void UpdateAbilityPopup(u8 battlerId)
|
||||
void UpdateAbilityPopup(u8 battler)
|
||||
{
|
||||
u8 spriteId1 = gBattleStruct->abilityPopUpSpriteIds[battlerId][0];
|
||||
u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battlerId][1];
|
||||
u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battlerId].ability;
|
||||
u8 spriteId1 = gBattleStruct->abilityPopUpSpriteIds[battler][0];
|
||||
u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battler][1];
|
||||
u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battler].ability;
|
||||
|
||||
PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2);
|
||||
RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32));
|
||||
@ -2847,12 +2847,12 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
void DestroyAbilityPopUp(u8 battlerId)
|
||||
void DestroyAbilityPopUp(u8 battler)
|
||||
{
|
||||
if (gBattleStruct->battlerState[battlerId].activeAbilityPopUps)
|
||||
if (gBattleStruct->battlerState[battler].activeAbilityPopUps)
|
||||
{
|
||||
gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0;
|
||||
gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0;
|
||||
gSprites[gBattleStruct->abilityPopUpSpriteIds[battler][0]].tFrames = 0;
|
||||
gSprites[gBattleStruct->abilityPopUpSpriteIds[battler][1]].tFrames = 0;
|
||||
}
|
||||
gBattleScripting.fixedPopup = FALSE;
|
||||
}
|
||||
|
||||
@ -3334,7 +3334,7 @@ const u8* FaintClearSetData(u32 battler)
|
||||
u32 partner = BATTLE_PARTNER(battler);
|
||||
if (IsBattlerAlive(partner))
|
||||
{
|
||||
BtlController_EmitSpriteInvisibility(partner, BUFFER_A, FALSE);
|
||||
BtlController_EmitSpriteInvisibility(partner, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(partner);
|
||||
}
|
||||
}
|
||||
@ -3412,7 +3412,7 @@ static void DoBattleIntro(void)
|
||||
{
|
||||
case BATTLE_INTRO_STATE_GET_MON_DATA:
|
||||
battler = gBattleCommunication[1];
|
||||
BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 0);
|
||||
BtlController_EmitGetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_ALL_BATTLE, 0);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleStruct->introState++;
|
||||
break;
|
||||
@ -3429,7 +3429,7 @@ static void DoBattleIntro(void)
|
||||
if (!gBattleControllerExecFlags)
|
||||
{
|
||||
battler = GetBattlerAtPosition(0);
|
||||
BtlController_EmitIntroSlide(battler, BUFFER_A, gBattleEnvironment);
|
||||
BtlController_EmitIntroSlide(battler, B_COMM_TO_CONTROLLER, gBattleEnvironment);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleCommunication[0] = 0;
|
||||
gBattleCommunication[1] = 0;
|
||||
@ -3473,18 +3473,18 @@ static void DoBattleIntro(void)
|
||||
switch (GetBattlerPosition(battler))
|
||||
{
|
||||
case B_POSITION_PLAYER_LEFT: // player sprite
|
||||
BtlController_EmitDrawTrainerPic(battler, BUFFER_A);
|
||||
BtlController_EmitDrawTrainerPic(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
case B_POSITION_OPPONENT_LEFT:
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) // opponent 1 sprite
|
||||
{
|
||||
BtlController_EmitDrawTrainerPic(battler, BUFFER_A);
|
||||
BtlController_EmitDrawTrainerPic(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
else // wild mon 1
|
||||
{
|
||||
BtlController_EmitLoadMonSprite(battler, BUFFER_A);
|
||||
BtlController_EmitLoadMonSprite(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleResults.lastOpponentSpecies = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES, NULL);
|
||||
}
|
||||
@ -3492,7 +3492,7 @@ static void DoBattleIntro(void)
|
||||
case B_POSITION_PLAYER_RIGHT:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) // partner sprite
|
||||
{
|
||||
BtlController_EmitDrawTrainerPic(battler, BUFFER_A);
|
||||
BtlController_EmitDrawTrainerPic(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
break;
|
||||
@ -3501,13 +3501,13 @@ static void DoBattleIntro(void)
|
||||
{
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) // opponent 2 if exists
|
||||
{
|
||||
BtlController_EmitDrawTrainerPic(battler, BUFFER_A);
|
||||
BtlController_EmitDrawTrainerPic(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
else if (IsBattlerAlive(battler)) // wild mon 2 if alive
|
||||
{
|
||||
BtlController_EmitLoadMonSprite(battler, BUFFER_A);
|
||||
BtlController_EmitLoadMonSprite(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleResults.lastOpponentSpecies = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES, NULL);
|
||||
}
|
||||
@ -3544,7 +3544,7 @@ static void DoBattleIntro(void)
|
||||
}
|
||||
|
||||
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
BtlController_EmitDrawPartyStatusSummary(battler, BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
|
||||
BtlController_EmitDrawPartyStatusSummary(battler, B_COMM_TO_CONTROLLER, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@ -3563,7 +3563,7 @@ static void DoBattleIntro(void)
|
||||
}
|
||||
|
||||
battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
BtlController_EmitDrawPartyStatusSummary(battler, BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
|
||||
BtlController_EmitDrawPartyStatusSummary(battler, B_COMM_TO_CONTROLLER, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattleStruct->introState++;
|
||||
@ -3613,7 +3613,7 @@ static void DoBattleIntro(void)
|
||||
else
|
||||
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A);
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleStruct->introState++;
|
||||
break;
|
||||
@ -3625,7 +3625,7 @@ static void DoBattleIntro(void)
|
||||
else
|
||||
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A);
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
if (B_FAST_INTRO_PKMN_TEXT == TRUE
|
||||
@ -3681,7 +3681,7 @@ static void DoBattleIntro(void)
|
||||
else
|
||||
battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A);
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleStruct->introState++;
|
||||
break;
|
||||
@ -3693,7 +3693,7 @@ static void DoBattleIntro(void)
|
||||
else
|
||||
battler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A);
|
||||
BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
gBattleStruct->introState++;
|
||||
@ -4195,7 +4195,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
else
|
||||
{
|
||||
gBattleStruct->itemPartyIndex[battler] = PARTY_SIZE;
|
||||
BtlController_EmitChooseAction(battler, BUFFER_A, gChosenActionByBattler[0], gBattleResources->bufferB[0][1] | (gBattleResources->bufferB[0][2] << 8));
|
||||
BtlController_EmitChooseAction(battler, B_COMM_TO_CONTROLLER, gChosenActionByBattler[0], gBattleResources->bufferB[0][1] | (gBattleResources->bufferB[0][2] << 8));
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleCommunication[battler]++;
|
||||
}
|
||||
@ -4246,7 +4246,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
i);
|
||||
}
|
||||
|
||||
BtlController_EmitChooseMove(battler, BUFFER_A, IsDoubleBattle() != 0, FALSE, &moveInfo);
|
||||
BtlController_EmitChooseMove(battler, B_COMM_TO_CONTROLLER, IsDoubleBattle() != 0, FALSE, &moveInfo);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
break;
|
||||
@ -4278,7 +4278,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitChooseItem(battler, BUFFER_A, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChooseItem(battler, B_COMM_TO_CONTROLLER, gBattleStruct->battlerPartyOrders[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
break;
|
||||
@ -4287,21 +4287,21 @@ static void HandleTurnActionSelectionState(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA
|
||||
|| !CanBattlerEscape(battler))
|
||||
{
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
}
|
||||
else if (ItemId_GetHoldEffect(gBattleMons[battler].item) != HOLD_EFFECT_SHED_SHELL
|
||||
&& (i = IsAbilityPreventingEscape(battler))) // must be last to keep i value integrity
|
||||
{
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gBattleMons[i - 1].ability, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gBattleMons[i - 1].ability, gBattleStruct->battlerPartyOrders[battler]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (battler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH)
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[0], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[0], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
else if (battler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH)
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[1], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[1], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
else
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
}
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
@ -4316,7 +4316,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case B_ACTION_SAFARI_POKEBLOCK:
|
||||
BtlController_EmitChooseItem(battler, BUFFER_A, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChooseItem(battler, B_COMM_TO_CONTROLLER, gBattleStruct->battlerPartyOrders[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
case B_ACTION_CANCEL_PARTNER:
|
||||
@ -4326,7 +4326,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
if (gBattleMons[GetPartnerBattler(battler)].status2 & STATUS2_MULTIPLETURNS
|
||||
|| gBattleMons[GetPartnerBattler(battler)].status2 & STATUS2_RECHARGE)
|
||||
{
|
||||
BtlController_EmitEndBounceEffect(battler, BUFFER_A);
|
||||
BtlController_EmitEndBounceEffect(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
return;
|
||||
}
|
||||
@ -4356,11 +4356,11 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
|
||||
gBattleStruct->gimmick.toActivate &= ~((1u << BATTLE_PARTNER(GetBattlerPosition(battler))));
|
||||
BtlController_EmitEndBounceEffect(battler, BUFFER_A);
|
||||
BtlController_EmitEndBounceEffect(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
return;
|
||||
case B_ACTION_DEBUG:
|
||||
BtlController_EmitDebugMenu(battler, BUFFER_A);
|
||||
BtlController_EmitDebugMenu(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -4552,11 +4552,11 @@ static void HandleTurnActionSelectionState(void)
|
||||
|| (position & BIT_FLANK) != B_FLANK_LEFT
|
||||
|| gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent)
|
||||
{
|
||||
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_STOP_BOUNCE, i);
|
||||
BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_STOP_BOUNCE, i);
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_STOP_BOUNCE_ONLY, i);
|
||||
BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_STOP_BOUNCE_ONLY, i);
|
||||
}
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleCommunication[battler]++;
|
||||
|
||||
@ -202,7 +202,7 @@ static void UpdateLinkBattleGameStats(s32 battleOutcome)
|
||||
IncrementGameStat(stat);
|
||||
}
|
||||
|
||||
static void UpdateLinkBattleRecords(struct LinkBattleRecords *records, const u8 *name, u16 trainerId, s32 battleOutcome, u8 battlerId)
|
||||
static void UpdateLinkBattleRecords(struct LinkBattleRecords *records, const u8 *name, u16 trainerId, s32 battleOutcome, u8 battler)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
@ -215,7 +215,7 @@ static void UpdateLinkBattleRecords(struct LinkBattleRecords *records, const u8
|
||||
ClearLinkBattleRecord(&records->entries[index]);
|
||||
StringCopyN(records->entries[index].name, name, PLAYER_NAME_LENGTH);
|
||||
records->entries[index].trainerId = trainerId;
|
||||
records->languages[index] = gLinkPlayers[battlerId].language;
|
||||
records->languages[index] = gLinkPlayers[battler].language;
|
||||
}
|
||||
UpdateLinkBattleRecord(&records->entries[index], battleOutcome);
|
||||
SortLinkBattleRecords(records);
|
||||
@ -230,50 +230,50 @@ void ClearPlayerLinkBattleRecords(void)
|
||||
}
|
||||
|
||||
#if FREE_LINK_BATTLE_RECORDS == FALSE
|
||||
static void IncTrainerCardWins(s32 battlerId)
|
||||
static void IncTrainerCardWins(s32 battler)
|
||||
{
|
||||
u16 *wins = &gTrainerCards[battlerId].linkBattleWins;
|
||||
u16 *wins = &gTrainerCards[battler].linkBattleWins;
|
||||
(*wins)++;
|
||||
if (*wins > 9999)
|
||||
*wins = 9999;
|
||||
}
|
||||
|
||||
static void IncTrainerCardLosses(s32 battlerId)
|
||||
static void IncTrainerCardLosses(s32 battler)
|
||||
{
|
||||
u16 *losses = &gTrainerCards[battlerId].linkBattleLosses;
|
||||
u16 *losses = &gTrainerCards[battler].linkBattleLosses;
|
||||
(*losses)++;
|
||||
if (*losses > 9999)
|
||||
*losses = 9999;
|
||||
}
|
||||
|
||||
static void UpdateTrainerCardWinsLosses(s32 battlerId)
|
||||
static void UpdateTrainerCardWinsLosses(s32 battler)
|
||||
{
|
||||
switch (gBattleOutcome)
|
||||
{
|
||||
case B_OUTCOME_WON:
|
||||
IncTrainerCardWins(BATTLE_OPPOSITE(battlerId));
|
||||
IncTrainerCardLosses(battlerId);
|
||||
IncTrainerCardWins(BATTLE_OPPOSITE(battler));
|
||||
IncTrainerCardLosses(battler);
|
||||
break;
|
||||
case B_OUTCOME_LOST:
|
||||
IncTrainerCardLosses(BATTLE_OPPOSITE(battlerId));
|
||||
IncTrainerCardWins(battlerId);
|
||||
IncTrainerCardLosses(BATTLE_OPPOSITE(battler));
|
||||
IncTrainerCardWins(battler);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif //FREE_LINK_BATTLE_RECORDS
|
||||
|
||||
void UpdatePlayerLinkBattleRecords(s32 battlerId)
|
||||
void UpdatePlayerLinkBattleRecords(s32 battler)
|
||||
{
|
||||
#if FREE_LINK_BATTLE_RECORDS == FALSE
|
||||
if (InUnionRoom() != TRUE)
|
||||
{
|
||||
UpdateTrainerCardWinsLosses(battlerId);
|
||||
UpdateTrainerCardWinsLosses(battler);
|
||||
UpdateLinkBattleRecords(
|
||||
&gSaveBlock1Ptr->linkBattleRecords,
|
||||
gTrainerCards[battlerId].playerName,
|
||||
gTrainerCards[battlerId].trainerId,
|
||||
gTrainerCards[battler].playerName,
|
||||
gTrainerCards[battler].trainerId,
|
||||
gBattleOutcome,
|
||||
battlerId);
|
||||
battler);
|
||||
}
|
||||
#endif //FREE_LINK_BATTLE_RECORDS
|
||||
}
|
||||
|
||||
@ -1868,7 +1868,7 @@ static void Cmd_ppreduce(void)
|
||||
|
||||
if (MOVE_IS_PERMANENT(gBattlerAttacker, gCurrMovePos))
|
||||
{
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0,
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0,
|
||||
sizeof(gBattleMons[gBattlerAttacker].pp[gCurrMovePos]),
|
||||
&gBattleMons[gBattlerAttacker].pp[gCurrMovePos]);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
@ -2525,7 +2525,7 @@ static void Cmd_attackanimation(void)
|
||||
}
|
||||
|
||||
BtlController_EmitMoveAnimation(gBattlerAttacker,
|
||||
BUFFER_A,
|
||||
B_COMM_TO_CONTROLLER,
|
||||
gCurrentMove,
|
||||
gBattleScripting.animTurn,
|
||||
gBattleMovePower,
|
||||
@ -2571,7 +2571,7 @@ static void DoublesHPBarReduction(void)
|
||||
|
||||
s32 currDmg = gBattleStruct->moveDamage[battlerDef];
|
||||
s32 healthValue = min(currDmg, 10000); // Max damage (10000) not present in R/S, ensures that huge damage values don't change sign
|
||||
BtlController_EmitHealthBarUpdate(battlerDef, BUFFER_A, healthValue);
|
||||
BtlController_EmitHealthBarUpdate(battlerDef, B_COMM_TO_CONTROLLER, healthValue);
|
||||
MarkBattlerForControllerExec(battlerDef);
|
||||
|
||||
if (IsOnPlayerSide(battlerDef) && currDmg > 0)
|
||||
@ -2607,7 +2607,7 @@ static void Cmd_healthbarupdate(void)
|
||||
{
|
||||
s16 healthValue = min(gBattleStruct->moveDamage[battler], 10000); // Max damage (10000) not present in R/S, ensures that huge damage values don't change sign
|
||||
|
||||
BtlController_EmitHealthBarUpdate(battler, BUFFER_A, healthValue);
|
||||
BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, healthValue);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
if (IsOnPlayerSide(battler) && gBattleStruct->moveDamage[battler] > 0)
|
||||
@ -2735,7 +2735,7 @@ static void Cmd_datahpupdate(void)
|
||||
}
|
||||
gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE;
|
||||
// Send updated HP
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
|
||||
@ -2796,11 +2796,11 @@ static void Cmd_effectivenesssound(void)
|
||||
switch (moveResultFlags & ~MOVE_RESULT_MISSED)
|
||||
{
|
||||
case MOVE_RESULT_SUPER_EFFECTIVE:
|
||||
BtlController_EmitPlaySE(gBattlerTarget, BUFFER_A, SE_SUPER_EFFECTIVE);
|
||||
BtlController_EmitPlaySE(gBattlerTarget, B_COMM_TO_CONTROLLER, SE_SUPER_EFFECTIVE);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
break;
|
||||
case MOVE_RESULT_NOT_VERY_EFFECTIVE:
|
||||
BtlController_EmitPlaySE(gBattlerTarget, BUFFER_A, SE_NOT_EFFECTIVE);
|
||||
BtlController_EmitPlaySE(gBattlerTarget, B_COMM_TO_CONTROLLER, SE_NOT_EFFECTIVE);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
break;
|
||||
case MOVE_RESULT_DOESNT_AFFECT_FOE:
|
||||
@ -2814,17 +2814,17 @@ static void Cmd_effectivenesssound(void)
|
||||
default:
|
||||
if (moveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
|
||||
{
|
||||
BtlController_EmitPlaySE(gBattlerTarget, BUFFER_A, SE_SUPER_EFFECTIVE);
|
||||
BtlController_EmitPlaySE(gBattlerTarget, B_COMM_TO_CONTROLLER, SE_SUPER_EFFECTIVE);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
}
|
||||
else if (moveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
|
||||
{
|
||||
BtlController_EmitPlaySE(gBattlerTarget, BUFFER_A, SE_NOT_EFFECTIVE);
|
||||
BtlController_EmitPlaySE(gBattlerTarget, B_COMM_TO_CONTROLLER, SE_NOT_EFFECTIVE);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
}
|
||||
else if (!(moveResultFlags & (MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)))
|
||||
{
|
||||
BtlController_EmitPlaySE(gBattlerTarget, BUFFER_A, SE_EFFECTIVE);
|
||||
BtlController_EmitPlaySE(gBattlerTarget, B_COMM_TO_CONTROLLER, SE_EFFECTIVE);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
}
|
||||
break;
|
||||
@ -3031,7 +3031,7 @@ static void Cmd_printselectionstring(void)
|
||||
{
|
||||
CMD_ARGS(u16 id);
|
||||
|
||||
BtlController_EmitPrintSelectionString(gBattlerAttacker, BUFFER_A, cmd->id);
|
||||
BtlController_EmitPrintSelectionString(gBattlerAttacker, B_COMM_TO_CONTROLLER, cmd->id);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -3087,7 +3087,7 @@ static void Cmd_printselectionstringfromtable(void)
|
||||
const u16 *ptr = cmd->ptr;
|
||||
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
|
||||
|
||||
BtlController_EmitPrintSelectionString(gBattlerAttacker, BUFFER_A, *ptr);
|
||||
BtlController_EmitPrintSelectionString(gBattlerAttacker, B_COMM_TO_CONTROLLER, *ptr);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -3134,14 +3134,14 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem)
|
||||
gBattleMons[battlerStealer].item = gLastUsedItem;
|
||||
|
||||
gDisableStructs[battlerStealer].unburdenActive = FALSE;
|
||||
BtlController_EmitSetMonData(battlerStealer, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item
|
||||
BtlController_EmitSetMonData(battlerStealer, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item
|
||||
MarkBattlerForControllerExec(battlerStealer);
|
||||
}
|
||||
|
||||
RecordItemEffectBattle(battlerItem, ITEM_NONE);
|
||||
CheckSetUnburden(battlerItem);
|
||||
|
||||
BtlController_EmitSetMonData(battlerItem, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item
|
||||
BtlController_EmitSetMonData(battlerItem, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item
|
||||
MarkBattlerForControllerExec(battlerItem);
|
||||
|
||||
gBattleStruct->choicedMove[battlerItem] = 0;
|
||||
@ -3220,7 +3220,7 @@ void SetNonVolatileStatusCondition(u32 effectBattler, enum MoveEffects effect)
|
||||
|
||||
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[effect];
|
||||
|
||||
BtlController_EmitSetMonData(effectBattler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[effectBattler].status1), &gBattleMons[effectBattler].status1);
|
||||
BtlController_EmitSetMonData(effectBattler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[effectBattler].status1), &gBattleMons[effectBattler].status1);
|
||||
MarkBattlerForControllerExec(effectBattler);
|
||||
|
||||
if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT)
|
||||
@ -3787,7 +3787,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
|
||||
gBattleMons[gEffectBattler].item = 0;
|
||||
CheckSetUnburden(gEffectBattler);
|
||||
|
||||
BtlController_EmitSetMonData(gEffectBattler, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item);
|
||||
BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item);
|
||||
MarkBattlerForControllerExec(gEffectBattler);
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectIncinerate;
|
||||
@ -3802,7 +3802,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
|
||||
gBattleMons[gEffectBattler].item = 0;
|
||||
CheckSetUnburden(gEffectBattler);
|
||||
|
||||
BtlController_EmitSetMonData(gEffectBattler, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item);
|
||||
BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item);
|
||||
MarkBattlerForControllerExec(gEffectBattler);
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite;
|
||||
@ -4104,7 +4104,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
|
||||
if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i))
|
||||
&& !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
}
|
||||
|
||||
@ -4672,7 +4672,7 @@ static void Cmd_tryfaintmon(void)
|
||||
gBattleMons[gBattlerAttacker].pp[moveIndex] = 0;
|
||||
BattleScriptPush(gBattlescriptCurrInstr);
|
||||
gBattlescriptCurrInstr = BattleScript_GrudgeTakesPp;
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].pp[moveIndex]), &gBattleMons[gBattlerAttacker].pp[moveIndex]);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].pp[moveIndex]), &gBattleMons[gBattlerAttacker].pp[moveIndex]);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].moves[moveIndex])
|
||||
@ -4705,7 +4705,7 @@ static void Cmd_dofaintanimation(void)
|
||||
return;
|
||||
}
|
||||
|
||||
BtlController_EmitFaintAnimation(battler, BUFFER_A);
|
||||
BtlController_EmitFaintAnimation(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -4721,7 +4721,7 @@ static void Cmd_cleareffectsonfaint(void)
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !IsBattlerAlive(battler))
|
||||
{
|
||||
gBattleMons[battler].status1 = 0;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
|
||||
@ -5153,7 +5153,7 @@ static void Cmd_getexp(void)
|
||||
gBattleResources->beforeLvlUp->stats[STAT_SPDEF] = GetMonData(&gPlayerParty[*expMonId], MON_DATA_SPDEF);
|
||||
gBattleResources->beforeLvlUp->level = currLvl;
|
||||
|
||||
BtlController_EmitExpUpdate(gBattleStruct->expGetterBattlerId, BUFFER_A, *expMonId, gBattleStruct->battlerExpReward);
|
||||
BtlController_EmitExpUpdate(gBattleStruct->expGetterBattlerId, B_COMM_TO_CONTROLLER, *expMonId, gBattleStruct->battlerExpReward);
|
||||
MarkBattlerForControllerExec(gBattleStruct->expGetterBattlerId);
|
||||
}
|
||||
gBattleScripting.getexpState++;
|
||||
@ -5750,7 +5750,7 @@ static void Cmd_absorb(void)
|
||||
return;
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||
BtlController_EmitHealthBarUpdate(battler, BUFFER_A, gBattleStruct->moveDamage[battler]);
|
||||
BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, gBattleStruct->moveDamage[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
if (IsOnPlayerSide(battler) && gBattleStruct->moveDamage[battler] > 0)
|
||||
@ -5855,7 +5855,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n
|
||||
|| animId == B_ANIM_TERA_CHARGE
|
||||
|| animId == B_ANIM_TERA_ACTIVATE)
|
||||
{
|
||||
BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr);
|
||||
BtlController_EmitBattleAnimation(battler, B_COMM_TO_CONTROLLER, animId, &gDisableStructs[battler], *argPtr);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = nextInstr;
|
||||
}
|
||||
@ -5871,7 +5871,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n
|
||||
|| animId == B_ANIM_SNOW_CONTINUES
|
||||
|| animId == B_ANIM_FOG_CONTINUES)
|
||||
{
|
||||
BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr);
|
||||
BtlController_EmitBattleAnimation(battler, B_COMM_TO_CONTROLLER, animId, &gDisableStructs[battler], *argPtr);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = nextInstr;
|
||||
}
|
||||
@ -5881,7 +5881,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr);
|
||||
BtlController_EmitBattleAnimation(battler, B_COMM_TO_CONTROLLER, animId, &gDisableStructs[battler], *argPtr);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = nextInstr;
|
||||
}
|
||||
@ -6046,7 +6046,7 @@ static void Cmd_playstatchangeanimation(void)
|
||||
}
|
||||
else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed)
|
||||
{
|
||||
BtlController_EmitBattleAnimation(battler, BUFFER_A, B_ANIM_STATS_CHANGE, &gDisableStructs[battler], statAnimId);
|
||||
BtlController_EmitBattleAnimation(battler, B_COMM_TO_CONTROLLER, B_ANIM_STATS_CHANGE, &gDisableStructs[battler], statAnimId);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1)
|
||||
gBattleScripting.statAnimPlayed = TRUE;
|
||||
@ -6083,7 +6083,7 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef)
|
||||
// In Gen 5+, Knock Off removes the target's item rather than rendering it unusable.
|
||||
if (B_KNOCK_OFF_REMOVAL >= GEN_5)
|
||||
{
|
||||
BtlController_EmitSetMonData(battlerDef, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item);
|
||||
BtlController_EmitSetMonData(battlerDef, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item);
|
||||
MarkBattlerForControllerExec(battlerDef);
|
||||
}
|
||||
else
|
||||
@ -6438,7 +6438,7 @@ static void Cmd_moveend(void)
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN;
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_BeakBlastBurn;
|
||||
@ -6636,7 +6636,7 @@ static void Cmd_moveend(void)
|
||||
if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)
|
||||
&& gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION))
|
||||
{
|
||||
BtlController_EmitSpriteInvisibility(gBattlerAttacker, BUFFER_A, TRUE);
|
||||
BtlController_EmitSpriteInvisibility(gBattlerAttacker, B_COMM_TO_CONTROLLER, TRUE);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattleScripting.moveendState++;
|
||||
return;
|
||||
@ -6648,7 +6648,7 @@ static void Cmd_moveend(void)
|
||||
|| !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE))
|
||||
|| WasUnableToUseMove(gBattlerAttacker))
|
||||
{
|
||||
BtlController_EmitSpriteInvisibility(gBattlerAttacker, BUFFER_A, FALSE);
|
||||
BtlController_EmitSpriteInvisibility(gBattlerAttacker, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE;
|
||||
gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = TRUE;
|
||||
@ -6661,7 +6661,7 @@ static void Cmd_moveend(void)
|
||||
if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount
|
||||
&& !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
|
||||
{
|
||||
BtlController_EmitSpriteInvisibility(gBattlerTarget, BUFFER_A, FALSE);
|
||||
BtlController_EmitSpriteInvisibility(gBattlerTarget, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
gStatuses3[gBattlerTarget] &= ~STATUS3_SEMI_INVULNERABLE;
|
||||
gBattleScripting.moveendState++;
|
||||
@ -6937,7 +6937,7 @@ static void Cmd_moveend(void)
|
||||
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT))
|
||||
{
|
||||
gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE;
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
|
||||
@ -6950,7 +6950,7 @@ static void Cmd_moveend(void)
|
||||
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT))
|
||||
{
|
||||
gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FROSTBITE;
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove;
|
||||
@ -7552,7 +7552,7 @@ static void Cmd_returnatktoball(void)
|
||||
|
||||
if (!(gHitMarker & HITMARKER_FAINTED(gBattlerAttacker)))
|
||||
{
|
||||
BtlController_EmitReturnMonToBall(gBattlerAttacker, BUFFER_A, FALSE);
|
||||
BtlController_EmitReturnMonToBall(gBattlerAttacker, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
}
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -7568,7 +7568,7 @@ static void Cmd_getswitchedmondata(void)
|
||||
|
||||
gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler];
|
||||
|
||||
BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]);
|
||||
BtlController_EmitGetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -7614,7 +7614,7 @@ static void Cmd_switchindataupdate(void)
|
||||
if (i != PARTY_SIZE)
|
||||
{
|
||||
gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler] = i;
|
||||
BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]);
|
||||
BtlController_EmitGetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
return;
|
||||
}
|
||||
@ -7689,7 +7689,7 @@ static void Cmd_switchinanim(void)
|
||||
|
||||
gAbsentBattlerFlags &= ~(1u << battler);
|
||||
|
||||
BtlController_EmitSwitchInAnim(battler, BUFFER_A, gBattlerPartyIndexes[battler], cmd->dontClearTransform, cmd->dontClearSubstitute);
|
||||
BtlController_EmitSwitchInAnim(battler, B_COMM_TO_CONTROLLER, gBattlerPartyIndexes[battler], cmd->dontClearTransform, cmd->dontClearSubstitute);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -7868,7 +7868,7 @@ static void ChooseMonToSendOut(u32 battler, u8 slotId)
|
||||
gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE;
|
||||
gBattleStruct->field_93 &= ~(1u << battler);
|
||||
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
|
||||
@ -7893,7 +7893,7 @@ static void Cmd_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBattlerFlags |= 1u << battler;
|
||||
gHitMarker &= ~HITMARKER_FAINTED(battler);
|
||||
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
else if (!gSpecialStatuses[battler].faintedHasReplacement)
|
||||
@ -7904,7 +7904,7 @@ static void Cmd_openpartyscreen(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -7926,7 +7926,7 @@ static void Cmd_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBattlerFlags |= 1u << battler;
|
||||
gHitMarker &= ~HITMARKER_FAINTED(battler);
|
||||
BtlController_EmitCantSwitch(battler, BUFFER_A);
|
||||
BtlController_EmitCantSwitch(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
else if (!gSpecialStatuses[battler].faintedHasReplacement)
|
||||
@ -7936,7 +7936,7 @@ static void Cmd_openpartyscreen(void)
|
||||
}
|
||||
else if (battler < 2 || (battler > 1 && !(flags & BATTLE_PARTNER(battler))))
|
||||
{
|
||||
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
flags |= battler;
|
||||
}
|
||||
@ -7955,7 +7955,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else
|
||||
battler = i;
|
||||
|
||||
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -7979,7 +7979,7 @@ static void Cmd_openpartyscreen(void)
|
||||
{
|
||||
gAbsentBattlerFlags |= (1u << battler);
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(battler));
|
||||
BtlController_EmitCantSwitch(battler, BUFFER_A);
|
||||
BtlController_EmitCantSwitch(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
else if (!gSpecialStatuses[battler].faintedHasReplacement)
|
||||
@ -8037,7 +8037,7 @@ static void Cmd_openpartyscreen(void)
|
||||
gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE;
|
||||
gBattleStruct->field_93 &= ~(1u << battler);
|
||||
|
||||
BtlController_EmitChoosePokemon(battler, BUFFER_A, hitmarkerFaintBits, gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battler)], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, hitmarkerFaintBits, gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battler)], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8051,7 +8051,7 @@ static void Cmd_openpartyscreen(void)
|
||||
{
|
||||
if (i != battler)
|
||||
{
|
||||
BtlController_EmitLinkStandbyMsg(i, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
BtlController_EmitLinkStandbyMsg(i, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
MarkBattlerForControllerExec(i);
|
||||
}
|
||||
}
|
||||
@ -8065,7 +8065,7 @@ static void Cmd_openpartyscreen(void)
|
||||
// Make sure we're checking a valid battler. In edge case scenarios - battler could be absent and battlerOpposite would become a non-existent one softlocking the game.
|
||||
if (battlerOpposite < gBattlersCount)
|
||||
{
|
||||
BtlController_EmitLinkStandbyMsg(battlerOpposite, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
BtlController_EmitLinkStandbyMsg(battlerOpposite, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_ONLY, FALSE);
|
||||
MarkBattlerForControllerExec(battlerOpposite);
|
||||
}
|
||||
}
|
||||
@ -8260,7 +8260,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler)
|
||||
else
|
||||
gBattleMons[battler].status1 |= STATUS1_POISON;
|
||||
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleScripting.battler = battler;
|
||||
BattleScriptPushCursor();
|
||||
@ -8429,7 +8429,7 @@ static void Cmd_trainerslidein(void)
|
||||
CMD_ARGS(u8 position);
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->position);
|
||||
BtlController_EmitTrainerSlide(battler, BUFFER_A);
|
||||
BtlController_EmitTrainerSlide(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8439,7 +8439,7 @@ static void Cmd_playse(void)
|
||||
{
|
||||
CMD_ARGS(u16 song);
|
||||
|
||||
BtlController_EmitPlaySE(gBattlerAttacker, BUFFER_A, cmd->song);
|
||||
BtlController_EmitPlaySE(gBattlerAttacker, B_COMM_TO_CONTROLLER, cmd->song);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8449,7 +8449,7 @@ static void Cmd_fanfare(void)
|
||||
{
|
||||
CMD_ARGS(u16 song);
|
||||
|
||||
BtlController_EmitPlayFanfareOrBGM(gBattlerAttacker, BUFFER_A, cmd->song, FALSE);
|
||||
BtlController_EmitPlayFanfareOrBGM(gBattlerAttacker, B_COMM_TO_CONTROLLER, cmd->song, FALSE);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8460,7 +8460,7 @@ static void Cmd_playfaintcry(void)
|
||||
CMD_ARGS(u8 battler);
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||
BtlController_EmitFaintingCry(battler, BUFFER_A);
|
||||
BtlController_EmitFaintingCry(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8471,7 +8471,7 @@ static void Cmd_endlinkbattle(void)
|
||||
CMD_ARGS();
|
||||
|
||||
u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
BtlController_EmitEndLinkBattle(battler, BUFFER_A, gBattleOutcome);
|
||||
BtlController_EmitEndLinkBattle(battler, B_COMM_TO_CONTROLLER, gBattleOutcome);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8482,7 +8482,7 @@ static void Cmd_returntoball(void)
|
||||
CMD_ARGS(u8 battler, bool8 changingForm);
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||
BtlController_EmitReturnMonToBall(battler, BUFFER_A, TRUE);
|
||||
BtlController_EmitReturnMonToBall(battler, B_COMM_TO_CONTROLLER, TRUE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
// Don't always execute a form change here otherwise we can stomp gigantamax
|
||||
@ -8626,8 +8626,8 @@ static void Cmd_yesnoboxlearnmove(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 moveId = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition);
|
||||
if (IsMoveHM(moveId))
|
||||
u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition);
|
||||
if (IsMoveHM(move))
|
||||
{
|
||||
PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, B_POSITION_PLAYER_LEFT);
|
||||
gBattleScripting.learnMoveState = 6;
|
||||
@ -8636,7 +8636,7 @@ static void Cmd_yesnoboxlearnmove(void)
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->forgotMovePtr;
|
||||
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId)
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff2, move)
|
||||
|
||||
RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterMonId], movePosition);
|
||||
SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterMonId], gMoveToLearn, movePosition);
|
||||
@ -8733,7 +8733,7 @@ static void Cmd_hitanimation(void)
|
||||
|| !(DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove))
|
||||
|| gDisableStructs[battler].substituteHP == 0)
|
||||
{
|
||||
BtlController_EmitHitAnimation(battler, BUFFER_A);
|
||||
BtlController_EmitHitAnimation(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -8751,7 +8751,7 @@ static void Cmd_hitanimation(void)
|
||||
|| !(DoesSubstituteBlockMove(gBattlerAttacker, battlerDef, gCurrentMove))
|
||||
|| gDisableStructs[battlerDef].substituteHP == 0)
|
||||
{
|
||||
BtlController_EmitHitAnimation(battlerDef, BUFFER_A);
|
||||
BtlController_EmitHitAnimation(battlerDef, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battlerDef);
|
||||
}
|
||||
}
|
||||
@ -8838,7 +8838,7 @@ static void Cmd_updatebattlermoves(void)
|
||||
switch (gBattleCommunication[0])
|
||||
{
|
||||
case 0:
|
||||
BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 0);
|
||||
BtlController_EmitGetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_ALL_BATTLE, 0);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleCommunication[0]++;
|
||||
break;
|
||||
@ -8906,7 +8906,7 @@ static void Cmd_drawpartystatussummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
BtlController_EmitDrawPartyStatusSummary(battler, BUFFER_A, hpStatuses, 1);
|
||||
BtlController_EmitDrawPartyStatusSummary(battler, B_COMM_TO_CONTROLLER, hpStatuses, 1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8917,7 +8917,7 @@ static void Cmd_hidepartystatussummary(void)
|
||||
CMD_ARGS(u8 battler);
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||
BtlController_EmitHidePartyStatusSummary(battler, BUFFER_A);
|
||||
BtlController_EmitHidePartyStatusSummary(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8961,7 +8961,7 @@ static void Cmd_statusanimation(void)
|
||||
&& gDisableStructs[battler].substituteHP == 0
|
||||
&& !(gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION)))
|
||||
{
|
||||
BtlController_EmitStatusAnimation(battler, BUFFER_A, FALSE, gBattleMons[battler].status1);
|
||||
BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, FALSE, gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8980,7 +8980,7 @@ static void Cmd_status2animation(void)
|
||||
&& gDisableStructs[battler].substituteHP == 0
|
||||
&& !(gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION)))
|
||||
{
|
||||
BtlController_EmitStatusAnimation(battler, BUFFER_A, TRUE, gBattleMons[battler].status2 & status2ToAnim);
|
||||
BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, TRUE, gBattleMons[battler].status2 & status2ToAnim);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -8999,7 +8999,7 @@ static void Cmd_chosenstatusanimation(void)
|
||||
&& gDisableStructs[battler].substituteHP == 0
|
||||
&& !(gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION)))
|
||||
{
|
||||
BtlController_EmitStatusAnimation(battler, BUFFER_A, cmd->isStatus2, wantedStatus);
|
||||
BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, cmd->isStatus2, wantedStatus);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -9117,12 +9117,12 @@ static void BestowItem(u32 battlerAtk, u32 battlerDef)
|
||||
gLastUsedItem = gBattleMons[battlerAtk].item;
|
||||
|
||||
gBattleMons[battlerAtk].item = ITEM_NONE;
|
||||
BtlController_EmitSetMonData(battlerAtk, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerAtk].item), &gBattleMons[battlerAtk].item);
|
||||
BtlController_EmitSetMonData(battlerAtk, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerAtk].item), &gBattleMons[battlerAtk].item);
|
||||
MarkBattlerForControllerExec(battlerAtk);
|
||||
CheckSetUnburden(battlerAtk);
|
||||
|
||||
gBattleMons[battlerDef].item = gLastUsedItem;
|
||||
BtlController_EmitSetMonData(battlerDef, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item);
|
||||
BtlController_EmitSetMonData(battlerDef, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item);
|
||||
MarkBattlerForControllerExec(battlerDef);
|
||||
gDisableStructs[battlerDef].unburdenActive = FALSE;
|
||||
}
|
||||
@ -9177,7 +9177,7 @@ static void Cmd_removeitem(void)
|
||||
gBattleStruct->battlerState[battler].canPickupItem = TRUE;
|
||||
CheckSetUnburden(battler);
|
||||
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battler].item), &gBattleMons[battler].item);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battler].item), &gBattleMons[battler].item);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
ClearBattlerItemEffectHistory(battler);
|
||||
@ -9499,7 +9499,7 @@ static void Cmd_makevisible(void)
|
||||
return;
|
||||
|
||||
battler = GetBattlerForBattleScript(cmd->battler);
|
||||
BtlController_EmitSpriteInvisibility(battler, BUFFER_A, FALSE);
|
||||
BtlController_EmitSpriteInvisibility(battler, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -9939,7 +9939,7 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type)
|
||||
|
||||
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battler].species);
|
||||
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
// Update healthbox and elevation and play cry.
|
||||
@ -10403,7 +10403,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_EMIT_YESNOBOX:
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
BtlController_EmitYesNoBox(battler, BUFFER_A);
|
||||
BtlController_EmitYesNoBox(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -10446,7 +10446,7 @@ static void Cmd_various(void)
|
||||
battler = 1;
|
||||
if (IsBattlerAlive(battler))
|
||||
{
|
||||
BtlController_EmitReturnMonToBall(battler, BUFFER_A, FALSE);
|
||||
BtlController_EmitReturnMonToBall(battler, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
break;
|
||||
@ -10459,7 +10459,7 @@ static void Cmd_various(void)
|
||||
battler = 3;
|
||||
if (IsBattlerAlive(battler))
|
||||
{
|
||||
BtlController_EmitReturnMonToBall(battler, BUFFER_A, FALSE);
|
||||
BtlController_EmitReturnMonToBall(battler, B_COMM_TO_CONTROLLER, FALSE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -10517,7 +10517,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC:
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
BtlController_EmitPlayFanfareOrBGM(battler, BUFFER_A, MUS_VICTORY_TRAINER, TRUE);
|
||||
BtlController_EmitPlayFanfareOrBGM(battler, B_COMM_TO_CONTROLLER, MUS_VICTORY_TRAINER, TRUE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -10539,7 +10539,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_INSTANT_HP_DROP:
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
BtlController_EmitHealthBarUpdate(battler, BUFFER_A, INSTANT_HP_BAR_DROP);
|
||||
BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -10547,7 +10547,7 @@ static void Cmd_various(void)
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
gBattleMons[battler].status1 = 0;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -10560,7 +10560,7 @@ static void Cmd_various(void)
|
||||
data[i] = gBattleMons[battler].pp[i];
|
||||
}
|
||||
data[i] = gBattleMons[battler].ppBonuses;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_PP_DATA_BATTLE, 0, 5, data);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_PP_DATA_BATTLE, 0, 5, data);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -10606,7 +10606,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_PLAY_MOVE_ANIMATION:
|
||||
{
|
||||
VARIOUS_ARGS(u16 move);
|
||||
BtlController_EmitMoveAnimation(battler, BUFFER_A, cmd->move, gBattleScripting.animTurn, 0, 0, gBattleMons[battler].friendship, &gDisableStructs[battler], gMultiHitCounter);
|
||||
BtlController_EmitMoveAnimation(battler, B_COMM_TO_CONTROLLER, cmd->move, gBattleScripting.animTurn, 0, 0, gBattleMons[battler].friendship, &gDisableStructs[battler], gMultiHitCounter);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
return;
|
||||
@ -10789,7 +10789,7 @@ static void Cmd_various(void)
|
||||
if (!gBattleTextBuff1)
|
||||
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battler].species);
|
||||
*/
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
// Change stats.
|
||||
@ -10932,7 +10932,7 @@ static void Cmd_various(void)
|
||||
}
|
||||
gBattleMons[gBattlerTarget].status1 = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY;
|
||||
battler = gBattlerTarget;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
TryActivateSleepClause(battler, gBattlerPartyIndexes[battler]);
|
||||
@ -10946,7 +10946,7 @@ static void Cmd_various(void)
|
||||
TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]);
|
||||
|
||||
gBattleMons[battler].status1 = 0;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -11003,7 +11003,7 @@ static void Cmd_various(void)
|
||||
VARIOUS_ARGS(u8 case_);
|
||||
if (cmd->case_ == PRINT_SLIDE_MESSAGE)
|
||||
{
|
||||
BtlController_EmitPrintString(battler, BUFFER_A, STRINGID_TRAINERSLIDE);
|
||||
BtlController_EmitPrintString(battler, B_COMM_TO_CONTROLLER, STRINGID_TRAINERSLIDE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
else if (cmd->case_ == RESTORE_BATTLER_SLIDE_CONTROL)
|
||||
@ -11187,7 +11187,7 @@ static void Cmd_various(void)
|
||||
if (gBattleControllerExecFlags)
|
||||
break;
|
||||
|
||||
BtlController_EmitSpriteInvisibility(battler, BUFFER_A, TRUE);
|
||||
BtlController_EmitSpriteInvisibility(battler, B_COMM_TO_CONTROLLER, TRUE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
break;
|
||||
}
|
||||
@ -11678,7 +11678,7 @@ static void Cmd_tryexplosion(void)
|
||||
return;
|
||||
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp;
|
||||
BtlController_EmitHealthBarUpdate(gBattlerAttacker, BUFFER_A, INSTANT_HP_BAR_DROP);
|
||||
BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -11691,7 +11691,7 @@ static void Cmd_setatkhptozero(void)
|
||||
return;
|
||||
|
||||
gBattleMons[gBattlerAttacker].hp = 0;
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].hp), &gBattleMons[gBattlerAttacker].hp);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].hp), &gBattleMons[gBattlerAttacker].hp);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -11924,7 +11924,7 @@ static void Cmd_trysetrest(void)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_REST;
|
||||
|
||||
gBattleMons[gBattlerTarget].status1 = STATUS1_SLEEP_TURN(3);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -13052,7 +13052,7 @@ static void Cmd_updatestatusicon(void)
|
||||
{
|
||||
if (!(gAbsentBattlerFlags & (1u << battler)))
|
||||
{
|
||||
BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -13063,7 +13063,7 @@ static void Cmd_updatestatusicon(void)
|
||||
battler = gBattlerAttacker;
|
||||
if (!(gAbsentBattlerFlags & (1u << battler)))
|
||||
{
|
||||
BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
if ((IsDoubleBattle()))
|
||||
@ -13071,7 +13071,7 @@ static void Cmd_updatestatusicon(void)
|
||||
battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker)));
|
||||
if (!(gAbsentBattlerFlags & (1u << battler)))
|
||||
{
|
||||
BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -13080,7 +13080,7 @@ static void Cmd_updatestatusicon(void)
|
||||
else
|
||||
{
|
||||
battler = GetBattlerForBattleScript(cmd->battler);
|
||||
BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -13184,7 +13184,7 @@ static void Cmd_transformdataexecution(void)
|
||||
RecordAllMoves(gBattlerAttacker);
|
||||
RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability);
|
||||
|
||||
BtlController_EmitResetActionMoveSelection(gBattlerAttacker, BUFFER_A, RESET_MOVE_SELECTION);
|
||||
BtlController_EmitResetActionMoveSelection(gBattlerAttacker, B_COMM_TO_CONTROLLER, RESET_MOVE_SELECTION);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORMED;
|
||||
}
|
||||
@ -13641,7 +13641,7 @@ static void Cmd_copymovepermanently(void)
|
||||
}
|
||||
movePpData.ppBonuses = gBattleMons[gBattlerAttacker].ppBonuses;
|
||||
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_MOVES_PP_BATTLE, 0, sizeof(movePpData), &movePpData);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_MOVES_PP_BATTLE, 0, sizeof(movePpData), &movePpData);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget])
|
||||
@ -13818,7 +13818,7 @@ static void Cmd_tryspiteppreduce(void)
|
||||
if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i))
|
||||
&& !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
}
|
||||
|
||||
@ -13929,7 +13929,7 @@ static void Cmd_healpartystatus(void)
|
||||
|
||||
if (toHeal)
|
||||
{
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_STATUS_BATTLE, toHeal, sizeof(zero), &zero);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, toHeal, sizeof(zero), &zero);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
}
|
||||
|
||||
@ -14624,7 +14624,7 @@ static void Cmd_trymemento(void)
|
||||
{
|
||||
// Success, drop user's HP bar to 0
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp;
|
||||
BtlController_EmitHealthBarUpdate(gBattlerAttacker, BUFFER_A, INSTANT_HP_BAR_DROP);
|
||||
BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -14706,7 +14706,7 @@ static void Cmd_curestatuswithmove(void)
|
||||
|
||||
gBattleMons[gBattlerAttacker].status1 = 0;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
}
|
||||
else
|
||||
@ -14864,10 +14864,10 @@ static void Cmd_tryswapitems(void)
|
||||
RecordItemEffectBattle(gBattlerAttacker, 0);
|
||||
RecordItemEffectBattle(gBattlerTarget, ItemId_GetHoldEffect(oldItemAtk));
|
||||
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(*newItemAtk), newItemAtk);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(*newItemAtk), newItemAtk);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
|
||||
gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE;
|
||||
@ -15287,7 +15287,7 @@ static void Cmd_switchoutabilities(void)
|
||||
TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]);
|
||||
|
||||
gBattleMons[battler].status1 = 0;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE,
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE,
|
||||
1u << gBattleStruct->battlerPartyIndexes[battler],
|
||||
sizeof(gBattleMons[battler].status1),
|
||||
&gBattleMons[battler].status1);
|
||||
@ -15299,7 +15299,7 @@ static void Cmd_switchoutabilities(void)
|
||||
regenerate += gBattleMons[battler].hp;
|
||||
if (regenerate > gBattleMons[battler].maxHP)
|
||||
regenerate = gBattleMons[battler].maxHP;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HP_BATTLE,
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE,
|
||||
1u << gBattleStruct->battlerPartyIndexes[battler],
|
||||
sizeof(regenerate),
|
||||
®enerate);
|
||||
@ -15527,7 +15527,7 @@ static void Cmd_tryrecycleitem(void)
|
||||
*usedHeldItem = ITEM_NONE;
|
||||
gBattleMons[gBattlerAttacker].item = gLastUsedItem;
|
||||
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].item), &gBattleMons[gBattlerAttacker].item);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].item), &gBattleMons[gBattlerAttacker].item);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -15676,13 +15676,13 @@ static void Cmd_handleballthrow(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, BUFFER_A, BALL_TRAINER_BLOCK);
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_TRAINER_BLOCK);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
{
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, BUFFER_A, BALL_3_SHAKES_SUCCESS);
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_3_SHAKES_SUCCESS);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
|
||||
}
|
||||
@ -15885,7 +15885,7 @@ static void Cmd_handleballthrow(void)
|
||||
|
||||
if (odds > 254) // mon caught
|
||||
{
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, BUFFER_A, BALL_3_SHAKES_SUCCESS);
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_3_SHAKES_SUCCESS);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE);
|
||||
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
|
||||
@ -15938,7 +15938,7 @@ static void Cmd_handleballthrow(void)
|
||||
for (shakes = 0; shakes < maxShakes && Random() < odds; shakes++);
|
||||
}
|
||||
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, BUFFER_A, shakes);
|
||||
BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, shakes);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
||||
if (shakes == maxShakes) // mon caught, copy of the code above
|
||||
@ -16047,7 +16047,7 @@ static void Cmd_givecaughtmon(void)
|
||||
case GIVECAUGHTMON_DO_CHOOSE_MON:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
BtlController_EmitChoosePokemon(gBattlerAttacker, BUFFER_A, PARTY_ACTION_SEND_MON_TO_BOX, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]);
|
||||
BtlController_EmitChoosePokemon(gBattlerAttacker, B_COMM_TO_CONTROLLER, PARTY_ACTION_SEND_MON_TO_BOX, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_CHOSEN_MON;
|
||||
}
|
||||
@ -16376,7 +16376,7 @@ static void Cmd_trainerslideout(void)
|
||||
CMD_ARGS(u8 position);
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->position);
|
||||
BtlController_EmitTrainerSlideBack(battler, BUFFER_A);
|
||||
BtlController_EmitTrainerSlideBack(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -18100,7 +18100,7 @@ void BS_TryRevivalBlessing(void)
|
||||
struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
|
||||
|
||||
u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2;
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, 1u << gSelectedMonPartyId, sizeof(hp), &hp);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 1u << gSelectedMonPartyId, sizeof(hp), &hp);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES));
|
||||
|
||||
@ -18121,7 +18121,7 @@ void BS_TryRevivalBlessing(void)
|
||||
else
|
||||
{
|
||||
// Open party menu, wait to go to next instruction.
|
||||
BtlController_EmitChoosePokemon(gBattlerAttacker, BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]);
|
||||
BtlController_EmitChoosePokemon(gBattlerAttacker, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
}
|
||||
}
|
||||
@ -18160,7 +18160,7 @@ static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position)
|
||||
{
|
||||
battler = GetBattlerAtPosition(position);
|
||||
status = 0;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, monToCheck, 4, &status);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
}
|
||||
@ -18361,7 +18361,7 @@ static void TrySetParalysis(const u8 *nextInstr, const u8 *failInstr)
|
||||
gBattleMons[gBattlerTarget].status1 |= STATUS1_PARALYSIS;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
|
||||
gEffectBattler = gBattlerTarget;
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
gBattlescriptCurrInstr = nextInstr;
|
||||
}
|
||||
@ -18378,7 +18378,7 @@ static void TrySetPoison(const u8 *nextInstr, const u8 *failInstr)
|
||||
gBattleMons[gBattlerTarget].status1 |= STATUS1_POISON;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gEffectBattler = gBattlerTarget;
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
gBattlescriptCurrInstr = nextInstr;
|
||||
}
|
||||
@ -18400,7 +18400,7 @@ static void TrySetSleep(const u8 *nextInstr, const u8 *failInstr)
|
||||
TryActivateSleepClause(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]);
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 4;
|
||||
gEffectBattler = gBattlerTarget;
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
gBattlescriptCurrInstr = nextInstr;
|
||||
}
|
||||
@ -18554,7 +18554,7 @@ void BS_TryRecycleBerry(void)
|
||||
*usedHeldItem = ITEM_NONE;
|
||||
gBattleMons[gBattlerTarget].item = gLastUsedItem;
|
||||
|
||||
BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item);
|
||||
BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
|
||||
@ -2392,7 +2392,7 @@ static void LoadMultiPartnerCandidatesData(void)
|
||||
|
||||
static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId)
|
||||
{
|
||||
u16 move = 0;
|
||||
u16 move = MOVE_NONE;
|
||||
u16 species = 0;
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
|
||||
@ -81,7 +81,7 @@ struct RectangularSpiralLine
|
||||
{
|
||||
u8 state;
|
||||
s16 position;
|
||||
u8 moveIdx;
|
||||
u8 moveIndex;
|
||||
s16 reboundPosition;
|
||||
bool8 outward;
|
||||
};
|
||||
@ -3231,28 +3231,28 @@ static bool8 RectangularSpiral_Init(struct Task *task)
|
||||
// Line starting in top left
|
||||
sRectangularSpiralLines[0].state = SPIRAL_INWARD_START;
|
||||
sRectangularSpiralLines[0].position = -1;
|
||||
sRectangularSpiralLines[0].moveIdx = 1;
|
||||
sRectangularSpiralLines[0].moveIndex = 1;
|
||||
sRectangularSpiralLines[0].reboundPosition = 308;
|
||||
sRectangularSpiralLines[0].outward = FALSE;
|
||||
|
||||
// Line starting in bottom right
|
||||
sRectangularSpiralLines[1].state = SPIRAL_INWARD_START;
|
||||
sRectangularSpiralLines[1].position = -1;
|
||||
sRectangularSpiralLines[1].moveIdx = 1;
|
||||
sRectangularSpiralLines[1].moveIndex = 1;
|
||||
sRectangularSpiralLines[1].reboundPosition = 308;
|
||||
sRectangularSpiralLines[1].outward = FALSE;
|
||||
|
||||
// Line starting in top right
|
||||
sRectangularSpiralLines[2].state = SPIRAL_INWARD_START;
|
||||
sRectangularSpiralLines[2].position = -3;
|
||||
sRectangularSpiralLines[2].moveIdx = 1;
|
||||
sRectangularSpiralLines[2].moveIndex = 1;
|
||||
sRectangularSpiralLines[2].reboundPosition = 307;
|
||||
sRectangularSpiralLines[2].outward = FALSE;
|
||||
|
||||
// Line starting in bottom left
|
||||
sRectangularSpiralLines[3].state = SPIRAL_INWARD_START;
|
||||
sRectangularSpiralLines[3].position = -3;
|
||||
sRectangularSpiralLines[3].moveIdx = 1;
|
||||
sRectangularSpiralLines[3].moveIndex = 1;
|
||||
sRectangularSpiralLines[3].reboundPosition = 307;
|
||||
sRectangularSpiralLines[3].outward = FALSE;
|
||||
|
||||
@ -3315,7 +3315,7 @@ static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, stru
|
||||
// Has spiral finished?
|
||||
// Note that most move data arrays endsin SPIRAL_END but it is
|
||||
// only ever reached on the final array of spiraling outward.
|
||||
if (moveData[line->moveIdx] == SPIRAL_END)
|
||||
if (moveData[line->moveIndex] == SPIRAL_END)
|
||||
return FALSE;
|
||||
|
||||
// Presumably saving data for debug.
|
||||
@ -3346,21 +3346,21 @@ static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, stru
|
||||
|
||||
// Below check is never true.
|
||||
// SPIRAL_END was already checked, and position is never >= 640
|
||||
if (line->position >= 640 || moveData[line->moveIdx] == SPIRAL_END)
|
||||
if (line->position >= 640 || moveData[line->moveIndex] == SPIRAL_END)
|
||||
return FALSE;
|
||||
|
||||
if (!line->outward && moveData[line->moveIdx] == SPIRAL_REBOUND)
|
||||
if (!line->outward && moveData[line->moveIndex] == SPIRAL_REBOUND)
|
||||
{
|
||||
// Line has reached the final point of spiraling inward.
|
||||
// Time to flip and start spiraling outward.
|
||||
line->outward = TRUE;
|
||||
line->moveIdx = 1;
|
||||
line->moveIndex = 1;
|
||||
line->position = line->reboundPosition;
|
||||
line->state = SPIRAL_OUTWARD_START;
|
||||
}
|
||||
|
||||
// Reached move target, advance to next movement.
|
||||
if (line->position == moveData[line->moveIdx])
|
||||
if (line->position == moveData[line->moveIndex])
|
||||
{
|
||||
line->state++;
|
||||
if (line->outward == TRUE)
|
||||
@ -3370,7 +3370,7 @@ static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, stru
|
||||
// Still spiraling outward, loop back to the first state
|
||||
// but use the second set of move targets.
|
||||
// For example, the 28 in sRectangularSpiral_Major_OutwardUp
|
||||
line->moveIdx++;
|
||||
line->moveIndex++;
|
||||
line->state = SPIRAL_OUTWARD_START;
|
||||
}
|
||||
}
|
||||
@ -3381,7 +3381,7 @@ static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, stru
|
||||
// Still spiraling inward, loop back to the first state
|
||||
// but use the second set of move targets.
|
||||
// For example, the 275 in sRectangularSpiral_Major_InwardRight
|
||||
line->moveIdx++;
|
||||
line->moveIndex++;
|
||||
line->state = SPIRAL_INWARD_START;
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,8 +15,8 @@ static bool8 IsNotSpecialBattleString(enum StringID stringId);
|
||||
static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3);
|
||||
static void TrySetBattleSeminarShow(void);
|
||||
static void AddPointsOnFainting(bool8 targetFainted);
|
||||
static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot);
|
||||
static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride);
|
||||
static void AddPointsBasedOnWeather(u16 weatherFlags, u16 move, u8 moveSlot);
|
||||
static bool8 ShouldCalculateDamage(u16 move, s32 *dmg, u16 *powerOverride);
|
||||
|
||||
#define TABLE_END ((u16)-1)
|
||||
|
||||
@ -654,7 +654,7 @@ void TryPutLinkBattleTvShowOnAir(void)
|
||||
u8 countPlayer = 0, countOpponent = 0;
|
||||
s16 sum = 0;
|
||||
u16 species = 0;
|
||||
u16 moveId = 0;
|
||||
u16 move = MOVE_NONE;
|
||||
s32 i, j;
|
||||
int zero = 0, one = 1; //needed for matching
|
||||
|
||||
@ -722,8 +722,8 @@ void TryPutLinkBattleTvShowOnAir(void)
|
||||
}
|
||||
}
|
||||
|
||||
moveId = GetMonData(&gPlayerParty[playerBestMonId], MON_DATA_MOVE1 + i, NULL);
|
||||
if (playerBestSum == 0 || moveId == 0)
|
||||
move = GetMonData(&gPlayerParty[playerBestMonId], MON_DATA_MOVE1 + i, NULL);
|
||||
if (playerBestSum == 0 || move == MOVE_NONE)
|
||||
return;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
@ -732,12 +732,12 @@ void TryPutLinkBattleTvShowOnAir(void)
|
||||
|| (playerBestMonId >= MULTI_PARTY_SIZE && GetLinkTrainerFlankId(gBattleScripting.multiplayerId)))
|
||||
{
|
||||
j = (opponentBestMonId < MULTI_PARTY_SIZE) ? FALSE : TRUE;
|
||||
PutBattleUpdateOnTheAir(GetOpposingLinkMultiBattlerId(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
|
||||
PutBattleUpdateOnTheAir(GetOpposingLinkMultiBattlerId(j, gBattleScripting.multiplayerId), move, playerBestSpecies, opponentBestSpecies);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PutBattleUpdateOnTheAir(gBattleScripting.multiplayerId ^ 1, moveId, playerBestSpecies, opponentBestSpecies);
|
||||
PutBattleUpdateOnTheAir(gBattleScripting.multiplayerId ^ 1, move, playerBestSpecies, opponentBestSpecies);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1288,9 +1288,9 @@ static void TrySetBattleSeminarShow(void)
|
||||
gCurrentMove = currMoveSaved;
|
||||
}
|
||||
|
||||
static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride)
|
||||
static bool8 ShouldCalculateDamage(u16 move, s32 *dmg, u16 *powerOverride)
|
||||
{
|
||||
if (IsBattleMoveStatus(moveId))
|
||||
if (IsBattleMoveStatus(move))
|
||||
{
|
||||
*dmg = 0;
|
||||
return FALSE;
|
||||
@ -1300,7 +1300,7 @@ static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride)
|
||||
s32 i = 0;
|
||||
do
|
||||
{
|
||||
if (moveId == sVariableDmgMoves[i])
|
||||
if (move == sVariableDmgMoves[i])
|
||||
break;
|
||||
i++;
|
||||
} while (sVariableDmgMoves[i] != TABLE_END);
|
||||
@ -1310,13 +1310,13 @@ static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride)
|
||||
*dmg = 0;
|
||||
return FALSE;
|
||||
}
|
||||
else if (moveId == MOVE_PSYWAVE)
|
||||
else if (move == MOVE_PSYWAVE)
|
||||
{
|
||||
*dmg = gBattleMons[gBattlerAttacker].level;
|
||||
*dmg /= 2;
|
||||
return FALSE;
|
||||
}
|
||||
else if (moveId == MOVE_MAGNITUDE)
|
||||
else if (move == MOVE_MAGNITUDE)
|
||||
{
|
||||
*powerOverride = 10;
|
||||
return TRUE;
|
||||
@ -1351,17 +1351,17 @@ void BattleTv_ClearExplosionFaintCause(void)
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId)
|
||||
u8 GetBattlerMoveSlotId(u8 battler, u16 move)
|
||||
{
|
||||
s32 i;
|
||||
struct Pokemon *mon = GetBattlerMon(battlerId);
|
||||
struct Pokemon *mon = GetBattlerMon(battler);
|
||||
|
||||
i = 0;
|
||||
while (1)
|
||||
{
|
||||
if (i >= MAX_MON_MOVES)
|
||||
break;
|
||||
if (GetMonData(mon, MON_DATA_MOVE1 + i, NULL) == moveId)
|
||||
if (GetMonData(mon, MON_DATA_MOVE1 + i, NULL) == move)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
@ -1369,14 +1369,14 @@ u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId)
|
||||
return i;
|
||||
}
|
||||
|
||||
static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot)
|
||||
static void AddPointsBasedOnWeather(u16 weatherFlags, u16 move, u8 moveSlot)
|
||||
{
|
||||
if (weatherFlags & B_WEATHER_RAIN)
|
||||
AddMovePoints(PTS_RAIN, moveId, moveSlot, 0);
|
||||
AddMovePoints(PTS_RAIN, move, moveSlot, 0);
|
||||
else if (weatherFlags & B_WEATHER_SUN)
|
||||
AddMovePoints(PTS_SUN, moveId, moveSlot, 0);
|
||||
AddMovePoints(PTS_SUN, move, moveSlot, 0);
|
||||
else if (weatherFlags & B_WEATHER_SANDSTORM)
|
||||
AddMovePoints(PTS_SANDSTORM, moveId, moveSlot, 0);
|
||||
AddMovePoints(PTS_SANDSTORM, move, moveSlot, 0);
|
||||
else if (weatherFlags & (B_WEATHER_HAIL | B_WEATHER_SNOW))
|
||||
AddMovePoints(PTS_HAIL_SNOW, moveId, moveSlot, 0);
|
||||
AddMovePoints(PTS_HAIL_SNOW, move, moveSlot, 0);
|
||||
}
|
||||
|
||||
@ -1170,7 +1170,7 @@ void PrepareStringBattle(enum StringID stringId, u32 battler)
|
||||
if ((stringId == STRINGID_ITDOESNTAFFECT || stringId == STRINGID_PKMNWASNTAFFECTED || stringId == STRINGID_PKMNUNAFFECTED))
|
||||
TryInitializeTrainerSlideEnemyMonUnaffected(gBattlerTarget);
|
||||
|
||||
BtlController_EmitPrintString(battler, BUFFER_A, stringId);
|
||||
BtlController_EmitPrintString(battler, B_COMM_TO_CONTROLLER, stringId);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
|
||||
@ -2547,7 +2547,7 @@ u32 AtkCanceller_MoveSuccessOrder(void)
|
||||
|
||||
if (effect == 2)
|
||||
{
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1);
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
}
|
||||
|
||||
@ -4102,7 +4102,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
if (gBattleMons[battler].status2 & STATUS2_CONFUSION
|
||||
&& !(gStatuses4[battler] & STATUS4_INFINITE_CONFUSION))
|
||||
gBattleMons[battler].status2 -= STATUS2_CONFUSION_TURN(1);
|
||||
BtlController_EmitSpriteInvisibility(battler, BUFFER_A, TRUE);
|
||||
BtlController_EmitSpriteInvisibility(battler, B_COMM_TO_CONTROLLER, TRUE);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
BattleScriptPushCursorAndCallback(BattleScript_CommanderActivates);
|
||||
effect++;
|
||||
@ -4199,7 +4199,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE;
|
||||
gBattleScripting.battler = battler;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
effect++;
|
||||
}
|
||||
@ -4306,7 +4306,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
&& !gHasFetchedBall)
|
||||
{
|
||||
gBattleScripting.battler = battler;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
gHasFetchedBall = TRUE;
|
||||
gLastUsedItem = gLastUsedBall;
|
||||
@ -5132,7 +5132,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
|
||||
gBattleScripting.battler = gBattlerAbility = battler;
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
return effect;
|
||||
}
|
||||
@ -6156,7 +6156,7 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, enum ItemCaseId caseID)
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_BerryPPHealRet;
|
||||
}
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
if (MOVE_IS_PERMANENT(battler, i))
|
||||
gBattleMons[battler].pp[i] = changedPP;
|
||||
@ -6823,7 +6823,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battler;
|
||||
if (effect == ITEM_STATUS_CHANGE)
|
||||
{
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -7026,7 +7026,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battler;
|
||||
if (effect == ITEM_STATUS_CHANGE)
|
||||
{
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
@ -7040,7 +7040,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
gPotentialItemEffectBattler = gBattleScripting.battler = battler;
|
||||
if (effect == ITEM_STATUS_CHANGE)
|
||||
{
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
break;
|
||||
@ -7056,7 +7056,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
gPotentialItemEffectBattler = gBattleScripting.battler = battler;
|
||||
if (effect == ITEM_STATUS_CHANGE)
|
||||
{
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
break;
|
||||
@ -7375,7 +7375,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
|
||||
if (effect == ITEM_STATUS_CHANGE)
|
||||
{
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,7 +208,7 @@ u32 BattlePalace_TryEscapeStatus(u8 battler)
|
||||
|
||||
if (effect == 2)
|
||||
{
|
||||
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
}
|
||||
|
||||
|
||||
@ -1449,13 +1449,13 @@ static bool8 SetupContestGraphics(u8 *stateVar)
|
||||
CreateApplauseMeterSprite();
|
||||
CreateJudgeAttentionEyeTask();
|
||||
CreateUnusedBlendTask();
|
||||
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattleTypeFlags = 0;
|
||||
gBattlerAttacker = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerTarget = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerAttacker = B_BATTLER_2;
|
||||
gBattlerTarget = B_BATTLER_3;
|
||||
// Unclear why judge sprite is assigned here
|
||||
// Overwritten in APPEALSTATE_SLIDE_MON_IN with the attacking contest mon
|
||||
gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite();
|
||||
|
||||
@ -326,8 +326,8 @@ u8 ContestAI_GetActionToUse(void)
|
||||
{
|
||||
// Randomly choose a move index. If it's the move
|
||||
// with the highest (or tied highest) score, return
|
||||
u8 moveIdx = MOD(Random(), MAX_MON_MOVES);
|
||||
u8 score = eContestAI.moveScores[moveIdx];
|
||||
u8 moveIndex = MOD(Random(), MAX_MON_MOVES);
|
||||
u8 score = eContestAI.moveScores[moveIndex];
|
||||
int i;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
@ -335,7 +335,7 @@ u8 ContestAI_GetActionToUse(void)
|
||||
break;
|
||||
}
|
||||
if (i == MAX_MON_MOVES)
|
||||
return moveIdx;
|
||||
return moveIndex;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -26665,7 +26665,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
|
||||
#endif //P_FAMILY_IRON_CROWN
|
||||
|
||||
#if P_FAMILY_TERAPAGOS
|
||||
const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/anim_front.4bpp.lz");
|
||||
const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/front.4bpp.lz");
|
||||
const u16 gMonPalette_TerapagosNormal[] = INCBIN_U16("graphics/pokemon/terapagos/normal.gbapal");
|
||||
const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz");
|
||||
const u16 gMonShinyPalette_TerapagosNormal[] = INCBIN_U16("graphics/pokemon/terapagos/shiny.gbapal");
|
||||
@ -26681,7 +26681,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
|
||||
#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
|
||||
#endif //OW_POKEMON_OBJECT_EVENTS
|
||||
|
||||
const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/anim_front.4bpp.lz");
|
||||
const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/front.4bpp.lz");
|
||||
const u16 gMonPalette_TerapagosTerastal[] = INCBIN_U16("graphics/pokemon/terapagos/terastal/normal.gbapal");
|
||||
const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz");
|
||||
const u16 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U16("graphics/pokemon/terapagos/terastal/shiny.gbapal");
|
||||
|
||||
@ -2817,13 +2817,13 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
.trainerOffset = 0,
|
||||
.frontPic = gMonFrontPic_Hydrapple,
|
||||
.frontPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.frontPicYOffset = 1,
|
||||
.frontPicYOffset = 0,
|
||||
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
|
||||
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.backPic = gMonBackPic_Hydrapple,
|
||||
.backPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.backPicYOffset = 0,
|
||||
.backAnimId = BACK_ANIM_NONE,
|
||||
.backPicYOffset = 2,
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
.palette = gMonPalette_Hydrapple,
|
||||
.shinyPalette = gMonShinyPalette_Hydrapple,
|
||||
.iconSprite = gMonIcon_Hydrapple,
|
||||
|
||||
@ -687,19 +687,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
|
||||
.trainerOffset = 0,
|
||||
.frontPic = gMonFrontPic_OinkologneM,
|
||||
.frontPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.frontPicYOffset = 6,
|
||||
.frontPicYOffset = 7,
|
||||
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.backPic = gMonBackPic_OinkologneM,
|
||||
.backPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.backPicYOffset = 8,
|
||||
.backPicYOffset = 12,
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
.palette = gMonPalette_OinkologneM,
|
||||
.shinyPalette = gMonShinyPalette_OinkologneM,
|
||||
.iconSprite = gMonIcon_OinkologneM,
|
||||
.iconPalIndex = 1,
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-2, 6, SHADOW_SIZE_M)
|
||||
SHADOW(5, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Oinkologne)
|
||||
OVERWORLD(
|
||||
sPicTable_OinkologneM,
|
||||
@ -751,19 +751,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
|
||||
.trainerOffset = 0,
|
||||
.frontPic = gMonFrontPic_OinkologneF,
|
||||
.frontPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.frontPicYOffset = 6,
|
||||
.frontPicYOffset = 7,
|
||||
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.backPic = gMonBackPic_OinkologneF,
|
||||
.backPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.backPicYOffset = 7,
|
||||
.backPicYOffset = 12,
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
.palette = gMonPalette_OinkologneF,
|
||||
.shinyPalette = gMonShinyPalette_OinkologneF,
|
||||
.iconSprite = gMonIcon_OinkologneF,
|
||||
.iconPalIndex = 0,
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(3, 7, SHADOW_SIZE_M)
|
||||
SHADOW(5, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Oinkologne)
|
||||
OVERWORLD(
|
||||
sPicTable_OinkologneF,
|
||||
@ -4003,10 +4003,9 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
|
||||
.trainerOffset = 0,
|
||||
.frontPic = gMonFrontPic_Bombirdier,
|
||||
.frontPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.frontPicYOffset = 1,
|
||||
.frontPicYOffset = 0,
|
||||
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.enemyMonElevation = 8,
|
||||
.backPic = gMonBackPic_Bombirdier,
|
||||
.backPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.backPicYOffset = 4,
|
||||
@ -4016,7 +4015,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
|
||||
.iconSprite = gMonIcon_Bombirdier,
|
||||
.iconPalIndex = 0,
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(1, 18, SHADOW_SIZE_M)
|
||||
SHADOW(8, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Bombirdier)
|
||||
OVERWORLD(
|
||||
sPicTable_Bombirdier,
|
||||
@ -7984,20 +7983,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
|
||||
.trainerOffset = 7,
|
||||
.frontPic = gMonFrontPic_TerapagosNormal,
|
||||
.frontPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.frontPicYOffset = 0,
|
||||
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
|
||||
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.enemyMonElevation = 1,
|
||||
.frontPicYOffset = 10,
|
||||
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.backPic = gMonBackPic_TerapagosNormal,
|
||||
.backPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.backPicYOffset = 0,
|
||||
.backAnimId = BACK_ANIM_NONE,
|
||||
.backPicYOffset = 9,
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
.palette = gMonPalette_TerapagosNormal,
|
||||
.shinyPalette = gMonShinyPalette_TerapagosNormal,
|
||||
.iconSprite = gMonIcon_TerapagosNormal,
|
||||
.iconPalIndex = 0,
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
|
||||
SHADOW(3, 13, SHADOW_SIZE_L)
|
||||
SHADOW(0, 2, SHADOW_SIZE_M)
|
||||
FOOTPRINT(TerapagosNormal)
|
||||
OVERWORLD(
|
||||
sPicTable_TerapagosNormal,
|
||||
@ -8056,19 +8054,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
|
||||
.frontPic = gMonFrontPic_TerapagosTerastal,
|
||||
.frontPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.frontPicYOffset = 8,
|
||||
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
|
||||
.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.enemyMonElevation = 1,
|
||||
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
.enemyMonElevation = 8,
|
||||
.backPic = gMonBackPic_TerapagosTerastal,
|
||||
.backPicSize = MON_COORDS_SIZE(64, 64),
|
||||
.backPicYOffset = 0,
|
||||
.backAnimId = BACK_ANIM_NONE,
|
||||
.backPicYOffset = 11,
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
.palette = gMonPalette_TerapagosTerastal,
|
||||
.shinyPalette = gMonShinyPalette_TerapagosTerastal,
|
||||
.iconSprite = gMonIcon_TerapagosTerastal,
|
||||
.iconPalIndex = 0,
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-4, 4, SHADOW_SIZE_L)
|
||||
SHADOW(-4, 8, SHADOW_SIZE_L)
|
||||
FOOTPRINT(TerapagosTerastal)
|
||||
OVERWORLD(
|
||||
sPicTable_TerapagosTerastal,
|
||||
|
||||
@ -2591,7 +2591,7 @@ static void PrepareTMHMMoveWindow(void)
|
||||
static void PrintTMHMMoveData(u16 itemId)
|
||||
{
|
||||
u8 i;
|
||||
u16 moveId;
|
||||
u16 move;
|
||||
const u8 *text;
|
||||
|
||||
FillWindowPixelBuffer(WIN_TMHM_INFO, PIXEL_FILL(0));
|
||||
@ -2603,11 +2603,11 @@ static void PrintTMHMMoveData(u16 itemId)
|
||||
}
|
||||
else
|
||||
{
|
||||
moveId = ItemIdToBattleMoveId(itemId);
|
||||
BlitMenuInfoIcon(WIN_TMHM_INFO, GetMoveType(moveId) + 1, 0, 0);
|
||||
move = ItemIdToBattleMoveId(itemId);
|
||||
BlitMenuInfoIcon(WIN_TMHM_INFO, GetMoveType(move) + 1, 0, 0);
|
||||
|
||||
// Print TMHM power
|
||||
u32 power = GetMovePower(moveId);
|
||||
u32 power = GetMovePower(move);
|
||||
if (power <= 1)
|
||||
{
|
||||
text = gText_ThreeDashes;
|
||||
@ -2619,7 +2619,7 @@ static void PrintTMHMMoveData(u16 itemId)
|
||||
}
|
||||
BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, text, 7, 12, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO);
|
||||
|
||||
u32 accuracy = GetMoveAccuracy(moveId);
|
||||
u32 accuracy = GetMoveAccuracy(move);
|
||||
// Print TMHM accuracy
|
||||
if (accuracy == 0)
|
||||
{
|
||||
@ -2633,7 +2633,7 @@ static void PrintTMHMMoveData(u16 itemId)
|
||||
BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, text, 7, 24, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO);
|
||||
|
||||
// Print TMHM pp
|
||||
ConvertIntToDecimalStringN(gStringVar1, GetMovePP(moveId), STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
ConvertIntToDecimalStringN(gStringVar1, GetMovePP(move), STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, gStringVar1, 7, 36, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO);
|
||||
|
||||
CopyWindowToVram(WIN_TMHM_INFO, COPYWIN_GFX);
|
||||
|
||||
@ -733,10 +733,10 @@ static void DoMoveRelearnerMain(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 moveId = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_MOVE1 + sMoveRelearnerStruct->moveSlot);
|
||||
u16 move = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_MOVE1 + sMoveRelearnerStruct->moveSlot);
|
||||
u8 originalPP = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_PP1 + sMoveRelearnerStruct->moveSlot);
|
||||
|
||||
StringCopy(gStringVar3, GetMoveName(moveId));
|
||||
StringCopy(gStringVar3, GetMoveName(move));
|
||||
RemoveMonPPBonus(&gPlayerParty[sMoveRelearnerStruct->partyMon], sMoveRelearnerStruct->moveSlot);
|
||||
SetMonMoveSlot(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove(), sMoveRelearnerStruct->moveSlot);
|
||||
u8 newPP = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_PP1 + sMoveRelearnerStruct->moveSlot);
|
||||
@ -955,19 +955,19 @@ static void CreateLearnableMovesList(void)
|
||||
sMoveRelearnerStruct->numToShowAtOnce = LoadMoveRelearnerMovesList(sMoveRelearnerStruct->menuItems, sMoveRelearnerStruct->numMenuChoices);
|
||||
}
|
||||
|
||||
void MoveRelearnerShowHideHearts(s32 moveId)
|
||||
void MoveRelearnerShowHideHearts(s32 move)
|
||||
{
|
||||
u16 numHearts;
|
||||
u16 i;
|
||||
|
||||
if (!sMoveRelearnerMenuSate.showContestInfo || moveId == LIST_CANCEL)
|
||||
if (!sMoveRelearnerMenuSate.showContestInfo || move == LIST_CANCEL)
|
||||
{
|
||||
for (i = 0; i < 16; i++)
|
||||
gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
numHearts = (u8)(gContestEffects[GetMoveContestEffect(moveId)].appeal / 10);
|
||||
numHearts = (u8)(gContestEffects[GetMoveContestEffect(move)].appeal / 10);
|
||||
|
||||
if (numHearts == 0xFF)
|
||||
numHearts = 0;
|
||||
@ -981,7 +981,7 @@ void MoveRelearnerShowHideHearts(s32 moveId)
|
||||
gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = FALSE;
|
||||
}
|
||||
|
||||
numHearts = (u8)(gContestEffects[GetMoveContestEffect(moveId)].jam / 10);
|
||||
numHearts = (u8)(gContestEffects[GetMoveContestEffect(move)].jam / 10);
|
||||
|
||||
if (numHearts == 0xFF)
|
||||
numHearts = 0;
|
||||
|
||||
@ -7401,20 +7401,20 @@ static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId)
|
||||
partyBattleOrder[i] = (partyIds[0 + (i * 2)] << 4) | partyIds[1 + (i * 2)];
|
||||
}
|
||||
|
||||
void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId)
|
||||
void BufferBattlePartyCurrentOrderBySide(u8 battler, u8 flankId)
|
||||
{
|
||||
BufferBattlePartyOrderBySide(gBattleStruct->battlerPartyOrders[battlerId], flankId, battlerId);
|
||||
BufferBattlePartyOrderBySide(gBattleStruct->battlerPartyOrders[battler], flankId, battler);
|
||||
}
|
||||
|
||||
// when IsOnPlayerSide(battlerId), this function is identical the one above
|
||||
static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battlerId)
|
||||
static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battler)
|
||||
{
|
||||
u8 partyIndexes[PARTY_SIZE];
|
||||
int i, j;
|
||||
u8 leftBattler;
|
||||
u8 rightBattler;
|
||||
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
leftBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
rightBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
@ -7473,7 +7473,7 @@ static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 ba
|
||||
partyBattleOrder[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
|
||||
}
|
||||
|
||||
void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2)
|
||||
void SwitchPartyOrderLinkMulti(u8 battler, u8 slot, u8 slot2)
|
||||
{
|
||||
u8 partyIds[PARTY_SIZE];
|
||||
u8 tempSlot = 0;
|
||||
@ -7483,7 +7483,7 @@ void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2)
|
||||
|
||||
if (IsMultiBattle())
|
||||
{
|
||||
partyBattleOrder = gBattleStruct->battlerPartyOrders[battlerId];
|
||||
partyBattleOrder = gBattleStruct->battlerPartyOrders[battler];
|
||||
for (i = j = 0; i < PARTY_SIZE / 2; j++, i++)
|
||||
{
|
||||
partyIds[j] = partyBattleOrder[i] >> 4;
|
||||
|
||||
@ -44,7 +44,7 @@ static void SpriteCB_TradePokeballEnd(struct Sprite *sprite);
|
||||
static void SpriteCB_HealthboxSlideInDelayed(struct Sprite *sprite);
|
||||
static void SpriteCB_HealthboxSlideIn(struct Sprite *sprite);
|
||||
static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite);
|
||||
static u16 GetBattlerPokeballItemId(u8 battlerId);
|
||||
static u16 GetBattlerPokeballItemId(u8 battler);
|
||||
|
||||
// rom const data
|
||||
|
||||
@ -563,7 +563,7 @@ u8 DoPokeballSendOutAnimation(u32 battler, s16 pan, u8 kindOfThrow)
|
||||
|
||||
static void Task_DoPokeballSendOutAnim(u8 taskId)
|
||||
{
|
||||
u32 throwCaseId, ballId, battlerId, ballSpriteId;
|
||||
u32 throwCaseId, ballId, battler, ballSpriteId;
|
||||
bool32 notSendOut = FALSE;
|
||||
u32 throwXoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? 24 : 0;
|
||||
s32 throwYoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? -16 : 24;
|
||||
@ -575,8 +575,8 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
|
||||
}
|
||||
|
||||
throwCaseId = gTasks[taskId].tThrowId;
|
||||
battlerId = gTasks[taskId].tBattler;
|
||||
ballId = GetBattlerPokeballItemId(battlerId);
|
||||
battler = gTasks[taskId].tBattler;
|
||||
ballId = GetBattlerPokeballItemId(battler);
|
||||
LoadBallGfx(ballId);
|
||||
ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
|
||||
gSprites[ballSpriteId].data[0] = 0x80;
|
||||
@ -586,24 +586,24 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
|
||||
switch (throwCaseId)
|
||||
{
|
||||
case POKEBALL_PLAYER_SLIDEIN: // don't actually send out, trigger the slide-in animation
|
||||
gBattlerTarget = battlerId;
|
||||
gBattlerTarget = battler;
|
||||
gSprites[ballSpriteId].callback = HandleBallAnimEnd;
|
||||
gSprites[ballSpriteId].invisible = TRUE;
|
||||
break;
|
||||
case POKEBALL_PLAYER_SENDOUT:
|
||||
gBattlerTarget = battlerId;
|
||||
gBattlerTarget = battler;
|
||||
gSprites[ballSpriteId].x = 24;
|
||||
gSprites[ballSpriteId].y = 68;
|
||||
gSprites[ballSpriteId].callback = SpriteCB_MonSendOut_1;
|
||||
DoPokeballSendOutSoundEffect(battlerId);
|
||||
DoPokeballSendOutSoundEffect(battler);
|
||||
break;
|
||||
case POKEBALL_OPPONENT_SENDOUT:
|
||||
gSprites[ballSpriteId].x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X) + throwXoffset;
|
||||
gSprites[ballSpriteId].y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + throwYoffset;
|
||||
gBattlerTarget = battlerId;
|
||||
gSprites[ballSpriteId].x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X) + throwXoffset;
|
||||
gSprites[ballSpriteId].y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + throwYoffset;
|
||||
gBattlerTarget = battler;
|
||||
gSprites[ballSpriteId].data[0] = 0;
|
||||
gSprites[ballSpriteId].callback = GetOpponentMonSendOutCallback();
|
||||
DoPokeballSendOutSoundEffect(battlerId);
|
||||
DoPokeballSendOutSoundEffect(battler);
|
||||
break;
|
||||
default:
|
||||
gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
@ -895,7 +895,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
||||
u8 wantedCry = gTasks[taskId].tCryTaskWantedCry;
|
||||
s8 pan = gTasks[taskId].tCryTaskPan;
|
||||
u16 species = gTasks[taskId].tCryTaskSpecies;
|
||||
u8 battlerId = gTasks[taskId].tCryTaskBattler;
|
||||
u8 battler = gTasks[taskId].tCryTaskBattler;
|
||||
u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId;
|
||||
struct Pokemon *mon = (void *)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 16) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
|
||||
|
||||
@ -912,7 +912,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_NORMAL);
|
||||
else
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_WEAK);
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry = FALSE;
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
case 2:
|
||||
@ -929,7 +929,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
||||
else
|
||||
PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK_DOUBLES);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry = FALSE;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
@ -969,7 +969,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
||||
else
|
||||
PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry = FALSE;
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
@ -977,11 +977,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
||||
|
||||
static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
||||
{
|
||||
u8 battlerId = sprite->sBattler;
|
||||
u8 battler = sprite->sBattler;
|
||||
u32 ballId;
|
||||
|
||||
StartSpriteAnim(sprite, 1);
|
||||
ballId = GetBattlerPokeballItemId(battlerId);
|
||||
ballId = GetBattlerPokeballItemId(battler);
|
||||
AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId);
|
||||
sprite->callback = HandleBallAnimEnd;
|
||||
@ -993,13 +993,13 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
||||
u16 wantedCryCase;
|
||||
u8 taskId;
|
||||
|
||||
mon = GetBattlerMon(battlerId);
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
mon = GetBattlerMon(battler);
|
||||
if (!IsOnPlayerSide(battler))
|
||||
pan = 25;
|
||||
else
|
||||
pan = -25;
|
||||
|
||||
if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
|
||||
if ((battler == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battler == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
|
||||
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
@ -1015,16 +1015,16 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
||||
|
||||
if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->introAnimActive)
|
||||
wantedCryCase = 0;
|
||||
else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
|
||||
else if (battler == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battler == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
|
||||
wantedCryCase = 1;
|
||||
else
|
||||
wantedCryCase = 2;
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = TRUE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].waitForCry = TRUE;
|
||||
|
||||
taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3);
|
||||
|
||||
illusionMon = GetIllusionMonPtr(battlerId);
|
||||
illusionMon = GetIllusionMonPtr(battler);
|
||||
if (illusionMon != NULL)
|
||||
gTasks[taskId].tCryTaskSpecies = GetMonData(illusionMon, MON_DATA_SPECIES);
|
||||
else
|
||||
@ -1032,7 +1032,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
||||
|
||||
gTasks[taskId].tCryTaskPan = pan;
|
||||
gTasks[taskId].tCryTaskWantedCry = wantedCryCase;
|
||||
gTasks[taskId].tCryTaskBattler = battlerId;
|
||||
gTasks[taskId].tCryTaskBattler = battler;
|
||||
gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler];
|
||||
gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 16;
|
||||
gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon);
|
||||
@ -1072,35 +1072,35 @@ static void SpriteCB_BallThrow_StartCaptureMon(struct Sprite *sprite)
|
||||
static void HandleBallAnimEnd(struct Sprite *sprite)
|
||||
{
|
||||
bool8 affineAnimEnded = FALSE;
|
||||
u8 battlerId = sprite->sBattler;
|
||||
u8 battler = sprite->sBattler;
|
||||
|
||||
if (sprite->data[7] == POKEBALL_PLAYER_SLIDEIN)
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_PlayerMonSlideIn;
|
||||
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
|
||||
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_PlayerMonSlideIn;
|
||||
AnimateSprite(&gSprites[gBattlerSpriteIds[battler]]);
|
||||
gSprites[gBattlerSpriteIds[battler]].data[1] = 0x1000;
|
||||
}
|
||||
|
||||
gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE;
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
|
||||
if (sprite->animEnded)
|
||||
sprite->invisible = TRUE;
|
||||
if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded)
|
||||
if (gSprites[gBattlerSpriteIds[battler]].affineAnimEnded)
|
||||
{
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], BATTLER_AFFINE_NORMAL);
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battler]], BATTLER_AFFINE_NORMAL);
|
||||
affineAnimEnded = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[battlerId]].data[1] -= 288;
|
||||
gSprites[gBattlerSpriteIds[battlerId]].y2 = gSprites[gBattlerSpriteIds[battlerId]].data[1] >> 8;
|
||||
gSprites[gBattlerSpriteIds[battler]].data[1] -= 288;
|
||||
gSprites[gBattlerSpriteIds[battler]].y2 = gSprites[gBattlerSpriteIds[battler]].data[1] >> 8;
|
||||
}
|
||||
if (sprite->animEnded && affineAnimEnded)
|
||||
{
|
||||
s32 i, doneBattlers;
|
||||
|
||||
gSprites[gBattlerSpriteIds[battlerId]].y2 = 0;
|
||||
gSprites[gBattlerSpriteIds[battler]].y2 = 0;
|
||||
gDoingBattleAnim = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive = FALSE;
|
||||
FreeSpriteOamMatrix(sprite);
|
||||
DestroySprite(sprite);
|
||||
|
||||
@ -1119,7 +1119,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
|
||||
|
||||
static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
|
||||
{
|
||||
u8 battlerId = sprite->sBattler;
|
||||
u8 battler = sprite->sBattler;
|
||||
|
||||
sprite->data[4]++;
|
||||
if (sprite->data[4] == 40)
|
||||
@ -1134,11 +1134,11 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
|
||||
}
|
||||
else if (sprite->data[4] == 315)
|
||||
{
|
||||
FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBattler]].oam.matrixNum);
|
||||
DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
|
||||
FreeOamMatrix(gSprites[gBattlerSpriteIds[battler]].oam.matrixNum);
|
||||
DestroySprite(&gSprites[gBattlerSpriteIds[battler]]);
|
||||
DestroySpriteAndFreeResources(sprite);
|
||||
if (gMain.inBattle)
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1482,16 +1482,16 @@ static void UNUSED DestroySpriteAndFreeResources_Ball(struct Sprite *sprite)
|
||||
|
||||
#define sDelayTimer data[1]
|
||||
|
||||
void StartHealthboxSlideIn(u8 battlerId)
|
||||
void StartHealthboxSlideIn(u8 battler)
|
||||
{
|
||||
struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]];
|
||||
struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battler]];
|
||||
|
||||
healthboxSprite->sSpeedX = 5;
|
||||
healthboxSprite->sSpeedY = 0;
|
||||
healthboxSprite->x2 = 0x73;
|
||||
healthboxSprite->y2 = 0;
|
||||
healthboxSprite->callback = SpriteCB_HealthboxSlideIn;
|
||||
if (!IsOnPlayerSide(battlerId))
|
||||
if (!IsOnPlayerSide(battler))
|
||||
{
|
||||
healthboxSprite->sSpeedX = -healthboxSprite->sSpeedX;
|
||||
healthboxSprite->sSpeedY = -healthboxSprite->sSpeedY;
|
||||
@ -1499,7 +1499,7 @@ void StartHealthboxSlideIn(u8 battlerId)
|
||||
healthboxSprite->y2 = -healthboxSprite->y2;
|
||||
}
|
||||
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
|
||||
if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)
|
||||
if (GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)
|
||||
healthboxSprite->callback = SpriteCB_HealthboxSlideInDelayed;
|
||||
}
|
||||
|
||||
@ -1525,13 +1525,13 @@ static void SpriteCB_HealthboxSlideIn(struct Sprite *sprite)
|
||||
#undef sSpeedY
|
||||
#undef sDelayTimer
|
||||
|
||||
void DoHitAnimHealthboxEffect(u8 battlerId)
|
||||
void DoHitAnimHealthboxEffect(u8 battler)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
spriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HitAnimHealthoxEffect);
|
||||
gSprites[spriteId].data[0] = 1;
|
||||
gSprites[spriteId].data[1] = gHealthboxSpriteIds[battlerId];
|
||||
gSprites[spriteId].data[1] = gHealthboxSpriteIds[battler];
|
||||
gSprites[spriteId].callback = SpriteCB_HitAnimHealthoxEffect;
|
||||
}
|
||||
|
||||
@ -1578,12 +1578,12 @@ void FreeBallGfx(u8 ballId)
|
||||
FreeSpritePaletteByTag(gBallSpritePalettes[ballId].tag);
|
||||
}
|
||||
|
||||
static u16 GetBattlerPokeballItemId(u8 battlerId)
|
||||
static u16 GetBattlerPokeballItemId(u8 battler)
|
||||
{
|
||||
struct Pokemon *illusionMon;
|
||||
struct Pokemon *mon = GetBattlerMon(battlerId);
|
||||
struct Pokemon *mon = GetBattlerMon(battler);
|
||||
|
||||
illusionMon = GetIllusionMonPtr(battlerId);
|
||||
illusionMon = GetIllusionMonPtr(battler);
|
||||
if (illusionMon != NULL)
|
||||
mon = illusionMon;
|
||||
|
||||
|
||||
@ -1175,7 +1175,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
|
||||
isShiny = GET_SHINY_VALUE(value, personality) < SHINY_ODDS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (hasFixedPersonality)
|
||||
personality = fixedPersonality;
|
||||
|
||||
@ -1624,7 +1624,7 @@ static void CreateEventMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedI
|
||||
}
|
||||
|
||||
// If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form
|
||||
bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
|
||||
bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battler)
|
||||
{
|
||||
switch (caseId)
|
||||
{
|
||||
@ -1636,7 +1636,7 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
|
||||
return FALSE;
|
||||
if (!gMain.inBattle)
|
||||
return FALSE;
|
||||
if (gLinkPlayers[GetMultiplayerId()].id == battlerId)
|
||||
if (gLinkPlayers[GetMultiplayerId()].id == battler)
|
||||
return FALSE;
|
||||
break;
|
||||
case 2:
|
||||
@ -1646,7 +1646,7 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
|
||||
return FALSE;
|
||||
if (!gMain.inBattle)
|
||||
return FALSE;
|
||||
if (battlerId == 1 || battlerId == 4 || battlerId == 5)
|
||||
if (battler == 1 || battler == 4 || battler == 5)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
case 4:
|
||||
@ -1658,12 +1658,12 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
|
||||
return FALSE;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
if (gLinkPlayers[GetMultiplayerId()].id == battlerId)
|
||||
if (gLinkPlayers[GetMultiplayerId()].id == battler)
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@ -1671,7 +1671,7 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
|
||||
{
|
||||
if (!gMain.inBattle)
|
||||
return FALSE;
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
@ -3728,14 +3728,14 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst)
|
||||
dst->status2 = 0;
|
||||
}
|
||||
|
||||
void CopyPartyMonToBattleData(u32 battlerId, u32 partyIndex)
|
||||
void CopyPartyMonToBattleData(u32 battler, u32 partyIndex)
|
||||
{
|
||||
u32 side = GetBattlerSide(battlerId);
|
||||
u32 side = GetBattlerSide(battler);
|
||||
struct Pokemon *party = GetSideParty(side);
|
||||
PokemonToBattleMon(&party[partyIndex], &gBattleMons[battlerId]);
|
||||
gBattleStruct->hpOnSwitchout[side] = gBattleMons[battlerId].hp;
|
||||
UpdateSentPokesToOpponentValue(battlerId);
|
||||
ClearTemporarySpeciesSpriteData(battlerId, FALSE, FALSE);
|
||||
PokemonToBattleMon(&party[partyIndex], &gBattleMons[battler]);
|
||||
gBattleStruct->hpOnSwitchout[side] = gBattleMons[battler].hp;
|
||||
UpdateSentPokesToOpponentValue(battler);
|
||||
ClearTemporarySpeciesSpriteData(battler, FALSE, FALSE);
|
||||
}
|
||||
|
||||
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
|
||||
@ -3791,7 +3791,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
u32 temp1, temp2;
|
||||
s8 friendshipChange = 0;
|
||||
u8 holdEffect;
|
||||
u8 battlerId = MAX_BATTLERS_COUNT;
|
||||
u8 battler = MAX_BATTLERS_COUNT;
|
||||
u32 friendshipOnly = FALSE;
|
||||
u16 heldItem;
|
||||
u8 effectFlags;
|
||||
@ -3877,15 +3877,15 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
}
|
||||
|
||||
// Cure status
|
||||
if ((itemEffect[i] & ITEM3_SLEEP) && HealStatusConditions(mon, STATUS1_SLEEP, battlerId) == 0)
|
||||
if ((itemEffect[i] & ITEM3_SLEEP) && HealStatusConditions(mon, STATUS1_SLEEP, battler) == 0)
|
||||
retVal = FALSE;
|
||||
if ((itemEffect[i] & ITEM3_POISON) && HealStatusConditions(mon, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId) == 0)
|
||||
if ((itemEffect[i] & ITEM3_POISON) && HealStatusConditions(mon, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battler) == 0)
|
||||
retVal = FALSE;
|
||||
if ((itemEffect[i] & ITEM3_BURN) && HealStatusConditions(mon, STATUS1_BURN, battlerId) == 0)
|
||||
if ((itemEffect[i] & ITEM3_BURN) && HealStatusConditions(mon, STATUS1_BURN, battler) == 0)
|
||||
retVal = FALSE;
|
||||
if ((itemEffect[i] & ITEM3_FREEZE) && HealStatusConditions(mon, STATUS1_FREEZE | STATUS1_FROSTBITE, battlerId) == 0)
|
||||
if ((itemEffect[i] & ITEM3_FREEZE) && HealStatusConditions(mon, STATUS1_FREEZE | STATUS1_FROSTBITE, battler) == 0)
|
||||
retVal = FALSE;
|
||||
if ((itemEffect[i] & ITEM3_PARALYSIS) && HealStatusConditions(mon, STATUS1_PARALYSIS, battlerId) == 0)
|
||||
if ((itemEffect[i] & ITEM3_PARALYSIS) && HealStatusConditions(mon, STATUS1_PARALYSIS, battler) == 0)
|
||||
retVal = FALSE;
|
||||
break;
|
||||
|
||||
@ -4035,14 +4035,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
// Heal PP for all moves
|
||||
for (temp2 = 0; (signed)(temp2) < (signed)(MAX_MON_MOVES); temp2++)
|
||||
{
|
||||
u16 moveId;
|
||||
u16 move;
|
||||
dataUnsigned = GetMonData(mon, MON_DATA_PP1 + temp2, NULL);
|
||||
moveId = GetMonData(mon, MON_DATA_MOVE1 + temp2, NULL);
|
||||
if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2))
|
||||
move = GetMonData(mon, MON_DATA_MOVE1 + temp2, NULL);
|
||||
if (dataUnsigned != CalculatePPWithBonus(move, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2))
|
||||
{
|
||||
dataUnsigned += itemEffect[itemEffectParam];
|
||||
if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2))
|
||||
dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2);
|
||||
if (dataUnsigned > CalculatePPWithBonus(move, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2))
|
||||
dataUnsigned = CalculatePPWithBonus(move, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2);
|
||||
SetMonData(mon, MON_DATA_PP1 + temp2, &dataUnsigned);
|
||||
retVal = FALSE;
|
||||
}
|
||||
@ -4052,14 +4052,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
else
|
||||
{
|
||||
// Heal PP for one move
|
||||
u16 moveId;
|
||||
u16 move;
|
||||
dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL);
|
||||
moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
|
||||
if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
|
||||
move = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
|
||||
if (dataUnsigned != CalculatePPWithBonus(move, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
|
||||
{
|
||||
dataUnsigned += itemEffect[itemEffectParam++];
|
||||
if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
|
||||
dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
|
||||
if (dataUnsigned > CalculatePPWithBonus(move, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
|
||||
dataUnsigned = CalculatePPWithBonus(move, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
|
||||
SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
|
||||
retVal = FALSE;
|
||||
}
|
||||
@ -4219,7 +4219,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
return retVal;
|
||||
}
|
||||
|
||||
bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battlerId)
|
||||
bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battler)
|
||||
{
|
||||
u32 status = GetMonData(mon, MON_DATA_STATUS, 0);
|
||||
|
||||
@ -4227,13 +4227,13 @@ bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battlerId)
|
||||
{
|
||||
status &= ~healMask;
|
||||
SetMonData(mon, MON_DATA_STATUS, &status);
|
||||
if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT)
|
||||
if (gMain.inBattle && battler != MAX_BATTLERS_COUNT)
|
||||
{
|
||||
gBattleMons[battlerId].status1 &= ~healMask;
|
||||
gBattleMons[battler].status1 &= ~healMask;
|
||||
if((healMask & STATUS1_SLEEP))
|
||||
{
|
||||
u32 i = 0;
|
||||
u32 battlerSide = GetBattlerSide(battlerId);
|
||||
u32 battlerSide = GetBattlerSide(battler);
|
||||
struct Pokemon *party = GetSideParty(battlerSide);
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@ -4537,7 +4537,7 @@ bool32 DoesMonMeetAdditionalConditions(struct Pokemon *mon, const struct Evoluti
|
||||
case IF_TIME:
|
||||
if (GetTimeOfDay() == params[i].arg1)
|
||||
currentCondition = TRUE;
|
||||
|
||||
|
||||
break;
|
||||
case IF_NOT_TIME:
|
||||
if (GetTimeOfDay() != params[i].arg1)
|
||||
@ -4577,8 +4577,8 @@ bool32 DoesMonMeetAdditionalConditions(struct Pokemon *mon, const struct Evoluti
|
||||
currentCondition = TRUE;
|
||||
break;
|
||||
}
|
||||
case IF_MIN_SMARTNESS:
|
||||
// remember that even though it's called "Smart/Smartness" here,
|
||||
case IF_MIN_SMARTNESS:
|
||||
// remember that even though it's called "Smart/Smartness" here,
|
||||
// from gen 6 and up it's known as "Clever/Cleverness."
|
||||
{
|
||||
u32 smartness = GetMonData(mon, MON_DATA_SMART, 0);
|
||||
@ -4937,7 +4937,7 @@ u32 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16
|
||||
case EVO_SPIN:
|
||||
if (gSpecialVar_0x8000 == evolutions[i].param)
|
||||
conditionsMet = TRUE;
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -6299,22 +6299,22 @@ void BattleAnimateBackSprite(struct Sprite *sprite, u16 species)
|
||||
static u8 UNUSED GetOwnOpposingLinkMultiBattlerId(bool8 rightSide)
|
||||
{
|
||||
s32 i;
|
||||
s32 battlerId = 0;
|
||||
s32 battler = 0;
|
||||
u8 multiplayerId = GetMultiplayerId();
|
||||
switch (gLinkPlayers[multiplayerId].id)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
battlerId = rightSide ? 1 : 3;
|
||||
battler = rightSide ? 1 : 3;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
battlerId = rightSide ? 2 : 0;
|
||||
battler = rightSide ? 2 : 0;
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
if (gLinkPlayers[i].id == (s16)battlerId)
|
||||
if (gLinkPlayers[i].id == (s16)battler)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
@ -6323,21 +6323,21 @@ static u8 UNUSED GetOwnOpposingLinkMultiBattlerId(bool8 rightSide)
|
||||
u8 GetOpposingLinkMultiBattlerId(bool8 rightSide, u8 multiplayerId)
|
||||
{
|
||||
s32 i;
|
||||
s32 battlerId = 0;
|
||||
s32 battler = 0;
|
||||
switch (gLinkPlayers[multiplayerId].id)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
battlerId = rightSide ? 1 : 3;
|
||||
battler = rightSide ? 1 : 3;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
battlerId = rightSide ? 2 : 0;
|
||||
battler = rightSide ? 2 : 0;
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
if (gLinkPlayers[i].id == (s16)battlerId)
|
||||
if (gLinkPlayers[i].id == (s16)battler)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
@ -6371,9 +6371,9 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
|
||||
|
||||
bool8 HasTwoFramesAnimation(u16 species)
|
||||
{
|
||||
return P_TWO_FRAME_FRONT_SPRITES
|
||||
&& gSpeciesInfo[species].frontAnimFrames != sAnims_SingleFramePlaceHolder
|
||||
&& species != SPECIES_UNOWN
|
||||
return P_TWO_FRAME_FRONT_SPRITES
|
||||
&& gSpeciesInfo[species].frontAnimFrames != sAnims_SingleFramePlaceHolder
|
||||
&& species != SPECIES_UNOWN
|
||||
&& !gTestRunnerHeadless;
|
||||
}
|
||||
|
||||
@ -6813,7 +6813,7 @@ void TrySpecialOverworldEvo(void)
|
||||
EvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i);
|
||||
else
|
||||
BeginEvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i);
|
||||
|
||||
|
||||
if (tryMultiple)
|
||||
gCB2_AfterEvolution = TrySpecialOverworldEvo;
|
||||
else
|
||||
|
||||
@ -544,14 +544,14 @@ void StartMonSummaryAnimation(struct Sprite *sprite, u8 frontAnimId)
|
||||
|
||||
void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet)
|
||||
{
|
||||
u8 nature, taskId, animId, battlerId;
|
||||
u8 nature, taskId, animId, battler;
|
||||
|
||||
taskId = CreateTask(Task_HandleMonAnimation, 128);
|
||||
gTasks[taskId].tPtrHi = (u32)(sprite) >> 16;
|
||||
gTasks[taskId].tPtrLo = (u32)(sprite);
|
||||
|
||||
battlerId = sprite->data[0];
|
||||
nature = GetNature(GetBattlerMon(battlerId));
|
||||
battler = sprite->data[0];
|
||||
nature = GetNature(GetBattlerMon(battler));
|
||||
|
||||
// * 3 below because each back anim has 3 variants depending on nature
|
||||
animId = 3 * backAnimSet + gNaturesInfo[nature].backAnim;
|
||||
|
||||
@ -9709,9 +9709,9 @@ u32 CountAllStorageMons(void)
|
||||
return count;
|
||||
}
|
||||
|
||||
bool32 AnyStorageMonWithMove(u16 moveId)
|
||||
bool32 AnyStorageMonWithMove(u16 move)
|
||||
{
|
||||
u16 moves[] = {moveId, MOVES_COUNT};
|
||||
u16 moves[] = {move, MOVES_COUNT};
|
||||
s32 i, j;
|
||||
|
||||
for (i = 0; i < TOTAL_BOXES_COUNT; i++)
|
||||
|
||||
@ -26,7 +26,7 @@ struct PlayerInfo
|
||||
u32 trainerId;
|
||||
u8 name[PLAYER_NAME_LENGTH + 1];
|
||||
u8 gender;
|
||||
u16 battlerId;
|
||||
u16 battler;
|
||||
u16 language;
|
||||
};
|
||||
|
||||
@ -120,7 +120,7 @@ void RecordedBattle_SetTrainerInfo(void)
|
||||
{
|
||||
sPlayers[i].trainerId = gLinkPlayers[i].trainerId;
|
||||
sPlayers[i].gender = gLinkPlayers[i].gender;
|
||||
sPlayers[i].battlerId = gLinkPlayers[i].id;
|
||||
sPlayers[i].battler = gLinkPlayers[i].id;
|
||||
sPlayers[i].language = gLinkPlayers[i].language;
|
||||
|
||||
// Record names
|
||||
@ -146,7 +146,7 @@ void RecordedBattle_SetTrainerInfo(void)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
|
||||
sPlayers[0].gender = gSaveBlock2Ptr->playerGender;
|
||||
sPlayers[0].battlerId = 0;
|
||||
sPlayers[0].battler = 0;
|
||||
sPlayers[0].language = gGameLanguage;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
@ -154,32 +154,32 @@ void RecordedBattle_SetTrainerInfo(void)
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
|
||||
void RecordedBattle_SetBattlerAction(u8 battler, u8 action)
|
||||
{
|
||||
if (sBattlerRecordSizes[battlerId] < BATTLER_RECORD_SIZE && sRecordMode != B_RECORD_MODE_PLAYBACK)
|
||||
sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++] = action;
|
||||
if (sBattlerRecordSizes[battler] < BATTLER_RECORD_SIZE && sRecordMode != B_RECORD_MODE_PLAYBACK)
|
||||
sBattleRecords[battler][sBattlerRecordSizes[battler]++] = action;
|
||||
}
|
||||
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
|
||||
void RecordedBattle_ClearBattlerAction(u8 battler, u8 bytesToClear)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < bytesToClear; i++)
|
||||
{
|
||||
sBattlerRecordSizes[battlerId]--;
|
||||
sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] = 0xFF;
|
||||
if (sBattlerRecordSizes[battlerId] == 0)
|
||||
sBattlerRecordSizes[battler]--;
|
||||
sBattleRecords[battler][sBattlerRecordSizes[battler]] = 0xFF;
|
||||
if (sBattlerRecordSizes[battler] == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battlerId)
|
||||
u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battler)
|
||||
{
|
||||
if (gTestRunnerEnabled)
|
||||
TestRunner_Battle_CheckBattleRecordActionType(battlerId, sBattlerRecordSizes[battlerId], actionType);
|
||||
TestRunner_Battle_CheckBattleRecordActionType(battler, sBattlerRecordSizes[battler], actionType);
|
||||
|
||||
// Trying to read past array or invalid action byte, battle is over.
|
||||
if (sBattlerRecordSizes[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == 0xFF)
|
||||
if (sBattlerRecordSizes[battler] >= BATTLER_RECORD_SIZE || sBattleRecords[battler][sBattlerRecordSizes[battler]] == 0xFF)
|
||||
{
|
||||
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
|
||||
ResetPaletteFadeControl();
|
||||
@ -189,7 +189,7 @@ u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battlerId)
|
||||
}
|
||||
else
|
||||
{
|
||||
return sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++];
|
||||
return sBattleRecords[battler][sBattlerRecordSizes[battler]++];
|
||||
}
|
||||
}
|
||||
|
||||
@ -239,11 +239,11 @@ void RecordedBattle_RecordAllBattlerData(u8 *src)
|
||||
{
|
||||
for (size = *src; size != 0;)
|
||||
{
|
||||
u8 battlerId = GetNextRecordedDataByte(src, &idx, &size);
|
||||
u8 battler = GetNextRecordedDataByte(src, &idx, &size);
|
||||
u8 numActions = GetNextRecordedDataByte(src, &idx, &size);
|
||||
|
||||
for (i = 0; i < numActions; i++)
|
||||
sBattleRecords[battlerId][sBattlerSavedRecordSizes[battlerId]++] = GetNextRecordedDataByte(src, &idx, &size);
|
||||
sBattleRecords[battler][sBattlerSavedRecordSizes[battler]++] = GetNextRecordedDataByte(src, &idx, &size);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -310,7 +310,7 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
battleSave->playersName[i][j] = sPlayers[i].name[j];
|
||||
battleSave->playersGender[i] = sPlayers[i].gender;
|
||||
battleSave->playersLanguage[i] = sPlayers[i].language;
|
||||
battleSave->playersBattlers[i] = sPlayers[i].battlerId;
|
||||
battleSave->playersBattlers[i] = sPlayers[i].battler;
|
||||
battleSave->playersTrainerId[i] = sPlayers[i].trainerId;
|
||||
}
|
||||
|
||||
@ -329,16 +329,16 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
else if (sBattleFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
switch (sPlayers[0].battlerId)
|
||||
switch (sPlayers[0].battler)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if (!(sPlayers[gRecordedBattleMultiplayerId].battlerId & 1))
|
||||
if (!(sPlayers[gRecordedBattleMultiplayerId].battler & 1))
|
||||
battleSave->battleFlags |= BATTLE_TYPE_RECORDED_IS_MASTER;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
if ((sPlayers[gRecordedBattleMultiplayerId].battlerId & 1))
|
||||
if ((sPlayers[gRecordedBattleMultiplayerId].battler & 1))
|
||||
battleSave->battleFlags |= BATTLE_TYPE_RECORDED_IS_MASTER;
|
||||
break;
|
||||
}
|
||||
@ -683,35 +683,35 @@ void RecordedBattle_CopyBattlerMoves(u32 battler)
|
||||
|
||||
void RecordedBattle_CheckMovesetChanges(u8 mode)
|
||||
{
|
||||
s32 battlerId, j, k;
|
||||
s32 battler, j, k;
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
|
||||
return;
|
||||
|
||||
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
|
||||
for (battler = 0; battler < gBattlersCount; battler++)
|
||||
{
|
||||
// Player's side only
|
||||
if (IsOnPlayerSide(battlerId))
|
||||
if (IsOnPlayerSide(battler))
|
||||
{
|
||||
if (mode == B_RECORD_MODE_RECORDING)
|
||||
{
|
||||
// Check if any of the battler's moves have changed.
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
if (gBattleMons[battlerId].moves[j] != sPlayerMonMoves[battlerId / 2][j])
|
||||
if (gBattleMons[battler].moves[j] != sPlayerMonMoves[battler / 2][j])
|
||||
break;
|
||||
}
|
||||
if (j != MAX_MON_MOVES)
|
||||
{
|
||||
// At least one of the moves has been changed
|
||||
RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE);
|
||||
RecordedBattle_SetBattlerAction(battler, ACTION_MOVE_CHANGE);
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
for (k = 0; k < MAX_MON_MOVES; k++)
|
||||
{
|
||||
if (gBattleMons[battlerId].moves[j] == sPlayerMonMoves[battlerId / 2][k])
|
||||
if (gBattleMons[battler].moves[j] == sPlayerMonMoves[battler / 2][k])
|
||||
{
|
||||
RecordedBattle_SetBattlerAction(battlerId, k);
|
||||
RecordedBattle_SetBattlerAction(battler, k);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -720,7 +720,7 @@ void RecordedBattle_CheckMovesetChanges(u8 mode)
|
||||
}
|
||||
else // B_RECORD_MODE_PLAYBACK
|
||||
{
|
||||
if (sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == ACTION_MOVE_CHANGE)
|
||||
if (sBattleRecords[battler][sBattlerRecordSizes[battler]] == ACTION_MOVE_CHANGE)
|
||||
{
|
||||
u8 ppBonuses[MAX_MON_MOVES];
|
||||
u8 moveSlots[MAX_MON_MOVES];
|
||||
@ -730,55 +730,55 @@ void RecordedBattle_CheckMovesetChanges(u8 mode)
|
||||
|
||||
// We know the current action is ACTION_MOVE_CHANGE, retrieve
|
||||
// it without saving it to move on to the next action.
|
||||
RecordedBattle_GetBattlerAction(RECORDED_BYTE, battlerId);
|
||||
RecordedBattle_GetBattlerAction(RECORDED_BYTE, battler);
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & (3 << (j << 1))) >> (j << 1));
|
||||
ppBonuses[j] = ((gBattleMons[battler].ppBonuses & (3 << (j << 1))) >> (j << 1));
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
moveSlots[j] = RecordedBattle_GetBattlerAction(RECORDED_BYTE, battlerId);
|
||||
movePp.moves[j] = gBattleMons[battlerId].moves[moveSlots[j]];
|
||||
movePp.currentPp[j] = gBattleMons[battlerId].pp[moveSlots[j]];
|
||||
moveSlots[j] = RecordedBattle_GetBattlerAction(RECORDED_BYTE, battler);
|
||||
movePp.moves[j] = gBattleMons[battler].moves[moveSlots[j]];
|
||||
movePp.currentPp[j] = gBattleMons[battler].pp[moveSlots[j]];
|
||||
movePp.maxPp[j] = ppBonuses[moveSlots[j]];
|
||||
mimickedMoveSlots[j] = (gDisableStructs[battlerId].mimickedMoves & (1u << j)) >> j;
|
||||
mimickedMoveSlots[j] = (gDisableStructs[battler].mimickedMoves & (1u << j)) >> j;
|
||||
}
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
gBattleMons[battlerId].moves[j] = movePp.moves[j];
|
||||
gBattleMons[battlerId].pp[j] = movePp.currentPp[j];
|
||||
gBattleMons[battler].moves[j] = movePp.moves[j];
|
||||
gBattleMons[battler].pp[j] = movePp.currentPp[j];
|
||||
}
|
||||
gBattleMons[battlerId].ppBonuses = 0;
|
||||
gDisableStructs[battlerId].mimickedMoves = 0;
|
||||
gBattleMons[battler].ppBonuses = 0;
|
||||
gDisableStructs[battler].mimickedMoves = 0;
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
gBattleMons[battlerId].ppBonuses |= movePp.maxPp[j] << (j << 1);
|
||||
gDisableStructs[battlerId].mimickedMoves |= mimickedMoveSlots[j] << j;
|
||||
gBattleMons[battler].ppBonuses |= movePp.maxPp[j] << (j << 1);
|
||||
gDisableStructs[battler].mimickedMoves |= mimickedMoveSlots[j] << j;
|
||||
}
|
||||
|
||||
if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
|
||||
if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
ppBonuses[j] = (GetMonData(GetBattlerMon(battlerId), MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1);
|
||||
ppBonuses[j] = (GetMonData(GetBattlerMon(battler), MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1);
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
movePp.moves[j] = GetMonData(GetBattlerMon(battlerId), MON_DATA_MOVE1 + moveSlots[j], NULL);
|
||||
movePp.currentPp[j] = GetMonData(GetBattlerMon(battlerId), MON_DATA_PP1 + moveSlots[j], NULL);
|
||||
movePp.moves[j] = GetMonData(GetBattlerMon(battler), MON_DATA_MOVE1 + moveSlots[j], NULL);
|
||||
movePp.currentPp[j] = GetMonData(GetBattlerMon(battler), MON_DATA_PP1 + moveSlots[j], NULL);
|
||||
movePp.maxPp[j] = ppBonuses[moveSlots[j]];
|
||||
}
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
SetMonData(GetBattlerMon(battlerId), MON_DATA_MOVE1 + j, &movePp.moves[j]);
|
||||
SetMonData(GetBattlerMon(battlerId), MON_DATA_PP1 + j, &movePp.currentPp[j]);
|
||||
SetMonData(GetBattlerMon(battler), MON_DATA_MOVE1 + j, &movePp.moves[j]);
|
||||
SetMonData(GetBattlerMon(battler), MON_DATA_PP1 + j, &movePp.currentPp[j]);
|
||||
}
|
||||
ppBonusSet = 0;
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
ppBonusSet |= movePp.maxPp[j] << (j << 1);
|
||||
|
||||
SetMonData(GetBattlerMon(battlerId), MON_DATA_PP_BONUSES, &ppBonusSet);
|
||||
SetMonData(GetBattlerMon(battler), MON_DATA_PP_BONUSES, &ppBonusSet);
|
||||
}
|
||||
gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[gBattleStruct->chosenMovePositions[battlerId]];
|
||||
gChosenMoveByBattler[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2170,11 +2170,11 @@ bool8 ScrCmd_bufferdecorationname(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_buffermovename(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 stringVarIndex = ScriptReadByte(ctx);
|
||||
u16 moveId = VarGet(ScriptReadHalfword(ctx));
|
||||
u16 move = VarGet(ScriptReadHalfword(ctx));
|
||||
|
||||
Script_RequestEffects(SCREFF_V1);
|
||||
|
||||
StringCopy(sScriptStringVars[stringVarIndex], GetMoveName(moveId));
|
||||
StringCopy(sScriptStringVars[stringVarIndex], GetMoveName(move));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -2282,7 +2282,7 @@ bool8 ScrCmd_setmonmove(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 i;
|
||||
u16 moveId = ScriptReadHalfword(ctx);
|
||||
u16 move = ScriptReadHalfword(ctx);
|
||||
|
||||
Script_RequestEffects(SCREFF_V1);
|
||||
|
||||
@ -2292,7 +2292,7 @@ bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx)
|
||||
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
|
||||
if (!species)
|
||||
break;
|
||||
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && MonKnowsMove(&gPlayerParty[i], moveId) == TRUE)
|
||||
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && MonKnowsMove(&gPlayerParty[i], move) == TRUE)
|
||||
{
|
||||
gSpecialVar_Result = i;
|
||||
gSpecialVar_0x8004 = species;
|
||||
|
||||
@ -771,7 +771,7 @@ static u8 GetAverageEVs(struct Pokemon *pokemon)
|
||||
void SetPlayerSecretBaseParty(void)
|
||||
{
|
||||
u16 i;
|
||||
u16 moveIdx;
|
||||
u16 moveIndex;
|
||||
u16 partyId;
|
||||
struct SecretBaseParty *party;
|
||||
|
||||
@ -781,8 +781,8 @@ void SetPlayerSecretBaseParty(void)
|
||||
{
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
for (moveIdx = 0; moveIdx < MAX_MON_MOVES; moveIdx++)
|
||||
party->moves[i * MAX_MON_MOVES + moveIdx] = MOVE_NONE;
|
||||
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
|
||||
party->moves[i * MAX_MON_MOVES + moveIndex] = MOVE_NONE;
|
||||
|
||||
party->species[i] = SPECIES_NONE;
|
||||
party->heldItems[i] = ITEM_NONE;
|
||||
@ -793,8 +793,8 @@ void SetPlayerSecretBaseParty(void)
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||
{
|
||||
for (moveIdx = 0; moveIdx < MAX_MON_MOVES; moveIdx++)
|
||||
party->moves[partyId * MAX_MON_MOVES + moveIdx] = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveIdx);
|
||||
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
|
||||
party->moves[partyId * MAX_MON_MOVES + moveIndex] = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveIndex);
|
||||
|
||||
party->species[partyId] = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
|
||||
party->heldItems[partyId] = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
|
||||
|
||||
6
src/tv.c
@ -2169,7 +2169,7 @@ void TryPutLotteryWinnerReportOnAir(void)
|
||||
}
|
||||
}
|
||||
|
||||
void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove)
|
||||
void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIndex, const u16 *movePtr, u16 betterMove)
|
||||
{
|
||||
TVShow *show;
|
||||
u8 i;
|
||||
@ -2184,10 +2184,10 @@ void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16
|
||||
StringCopy(show->battleSeminar.playerName, gSaveBlock2Ptr->playerName);
|
||||
show->battleSeminar.foeSpecies = foeSpecies;
|
||||
show->battleSeminar.species = species;
|
||||
show->battleSeminar.move = movePtr[moveIdx];
|
||||
show->battleSeminar.move = movePtr[moveIndex];
|
||||
for (i = 0, j = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (i != moveIdx && movePtr[i])
|
||||
if (i != moveIndex && movePtr[i])
|
||||
{
|
||||
show->battleSeminar.otherMoves[j] = movePtr[i];
|
||||
j++;
|
||||
|
||||