mirror of
https://github.com/pret/pokefirered.git
synced 2026-04-25 15:28:53 -05:00
Synced src/pokeball.c
This commit is contained in:
parent
c40791fd4e
commit
dcb9d9de1e
File diff suppressed because it is too large
Load Diff
|
|
@ -55,6 +55,12 @@
|
|||
|
||||
#define MAX_TRAINER_ITEMS 4
|
||||
|
||||
enum {
|
||||
BATTLER_AFFINE_NORMAL,
|
||||
BATTLER_AFFINE_EMERGE,
|
||||
BATTLER_AFFINE_RETURN,
|
||||
};
|
||||
|
||||
#define MOVE_TARGET_SELECTED 0
|
||||
#define MOVE_TARGET_DEPENDS (1 << 0)
|
||||
#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
|
||||
|
|
@ -545,15 +551,15 @@ struct BattleAnimationInfo
|
|||
u8 field_6;
|
||||
u8 field_7;
|
||||
u8 ballThrowCaseId;
|
||||
u8 healthboxSlideInStarted : 1;
|
||||
u8 field_9_x2 : 1;
|
||||
u8 field_9_x1C : 3;
|
||||
u8 field_9_x20 : 1;
|
||||
u8 field_9_x40 : 1;
|
||||
u8 field_9_x80 : 1;
|
||||
u8 field_A;
|
||||
u8 introAnimActive:1;
|
||||
u8 wildMonInvisible:1;
|
||||
u8 field_9_x1C:3;
|
||||
u8 field_9_x20:1;
|
||||
u8 field_9_x40:1;
|
||||
u8 field_9_x80:1;
|
||||
u8 numBallParticles;
|
||||
u8 field_B;
|
||||
s16 field_C;
|
||||
s16 ballSubpx;
|
||||
u8 field_E;
|
||||
u8 field_F;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ void AnimRecycle(struct Sprite *);
|
|||
// battle_anim_special.c
|
||||
void TryShinyAnimation(u8 battler, struct Pokemon *mon);
|
||||
u8 ItemIdToBallId(u16 itemId);
|
||||
u8 LaunchBallStarsTask(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
|
||||
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
|
||||
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
|
||||
void DoLoadHealthboxPalsForLevelUp(u8 *, u8 *, u8 battlerId);
|
||||
void DoFreeHealthboxPalsForLevelUp(u8 batterId);
|
||||
|
|
|
|||
|
|
@ -40,6 +40,6 @@ void BattleInterfaceSetWindowPals(void);
|
|||
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
|
||||
void AllocateMonSpritesGfx(void);
|
||||
void FreeMonSpritesGfx(void);
|
||||
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon);
|
||||
bool32 ShouldPlayNormalMonCry(struct Pokemon *mon);
|
||||
|
||||
#endif // GUARD_BATTLE_GFX_SFX_UTIL_H
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@
|
|||
#define NUM_CASTFORM_FORMS 4
|
||||
#define CASTFORM_SUBSTITUTE (1 << 7)
|
||||
|
||||
// Return value for IsRunningFromBattleImpossible.
|
||||
// Return value for IsRunningFromBattleImpossible.
|
||||
#define BATTLE_RUN_SUCCESS 0
|
||||
#define BATTLE_RUN_FORBIDDEN 1
|
||||
#define BATTLE_RUN_FAILURE 2
|
||||
|
|
|
|||
|
|
@ -3,30 +3,30 @@
|
|||
|
||||
#include "global.h"
|
||||
|
||||
extern const u32 gInterfaceGfx_PokeBall[];
|
||||
extern const u32 gInterfacePal_PokeBall[];
|
||||
extern const u32 gInterfaceGfx_GreatBall[];
|
||||
extern const u32 gInterfacePal_GreatBall[];
|
||||
extern const u32 gInterfaceGfx_SafariBall[];
|
||||
extern const u32 gInterfacePal_SafariBall[];
|
||||
extern const u32 gInterfaceGfx_UltraBall[];
|
||||
extern const u32 gInterfacePal_UltraBall[];
|
||||
extern const u32 gInterfaceGfx_MasterBall[];
|
||||
extern const u32 gInterfacePal_MasterBall[];
|
||||
extern const u32 gInterfaceGfx_NetBall[];
|
||||
extern const u32 gInterfacePal_NetBall[];
|
||||
extern const u32 gInterfaceGfx_DiveBall[];
|
||||
extern const u32 gInterfacePal_DiveBall[];
|
||||
extern const u32 gInterfaceGfx_NestBall[];
|
||||
extern const u32 gInterfacePal_NestBall[];
|
||||
extern const u32 gInterfaceGfx_RepeatBall[];
|
||||
extern const u32 gInterfacePal_RepeatBall[];
|
||||
extern const u32 gInterfaceGfx_TimerBall[];
|
||||
extern const u32 gInterfacePal_TimerBall[];
|
||||
extern const u32 gInterfaceGfx_LuxuryBall[];
|
||||
extern const u32 gInterfacePal_LuxuryBall[];
|
||||
extern const u32 gInterfaceGfx_PremierBall[];
|
||||
extern const u32 gInterfacePal_PremierBall[];
|
||||
extern const u32 gBallGfx_Poke[];
|
||||
extern const u32 gBallPal_Poke[];
|
||||
extern const u32 gBallGfx_Great[];
|
||||
extern const u32 gBallPal_Great[];
|
||||
extern const u32 gBallGfx_Safari[];
|
||||
extern const u32 gBallPal_Safari[];
|
||||
extern const u32 gBallGfx_Ultra[];
|
||||
extern const u32 gBallPal_Ultra[];
|
||||
extern const u32 gBallGfx_Master[];
|
||||
extern const u32 gBallPal_Master[];
|
||||
extern const u32 gBallGfx_Net[];
|
||||
extern const u32 gBallPal_Net[];
|
||||
extern const u32 gBallGfx_Dive[];
|
||||
extern const u32 gBallPal_Dive[];
|
||||
extern const u32 gBallGfx_Nest[];
|
||||
extern const u32 gBallPal_Nest[];
|
||||
extern const u32 gBallGfx_Repeat[];
|
||||
extern const u32 gBallPal_Repeat[];
|
||||
extern const u32 gBallGfx_Timer[];
|
||||
extern const u32 gBallPal_Timer[];
|
||||
extern const u32 gBallGfx_Luxury[];
|
||||
extern const u32 gBallPal_Luxury[];
|
||||
extern const u32 gBallGfx_Premier[];
|
||||
extern const u32 gBallPal_Premier[];
|
||||
extern const u32 gOpenPokeballGfx[];
|
||||
|
||||
// pokemon gfx
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ struct STWIStatus
|
|||
vu8 sending;
|
||||
};
|
||||
|
||||
// This struct is used as u8 array in SDK.
|
||||
// This struct is used as u8 array in SDK.
|
||||
struct RfuIntrStruct
|
||||
{
|
||||
union RfuPacket rxPacketAlloc;
|
||||
|
|
|
|||
|
|
@ -20,6 +20,14 @@ enum
|
|||
POKEBALL_COUNT
|
||||
};
|
||||
|
||||
enum {
|
||||
BALL_AFFINE_ANIM_0,
|
||||
BALL_ROTATE_RIGHT,
|
||||
BALL_ROTATE_LEFT,
|
||||
BALL_AFFINE_ANIM_3,
|
||||
BALL_AFFINE_ANIM_4
|
||||
};
|
||||
|
||||
extern const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT];
|
||||
extern const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT];
|
||||
extern const struct SpriteTemplate gBallSpriteTemplates[];
|
||||
|
|
@ -34,6 +42,6 @@ void DoHitAnimHealthboxEffect(u8 bank);
|
|||
void LoadBallGfx(u8 ballId);
|
||||
void FreeBallGfx(u8 ballId);
|
||||
void StartHealthboxSlideIn(u8 battler);
|
||||
void DestroySpriteAndFreeResources2(struct Sprite *sprite);
|
||||
void DestroySpriteAndFreeResources_Ball(struct Sprite *sprite);
|
||||
|
||||
#endif // GUARD_POKEBALL_H
|
||||
|
|
|
|||
|
|
@ -659,7 +659,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId)
|
|||
y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
||||
priority = gSprites[spriteId].oam.priority;
|
||||
subpriority = gSprites[spriteId].subpriority;
|
||||
gTasks[taskId].data[10] = LaunchBallStarsTask(x, y + 32, priority, subpriority, ballId);
|
||||
gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
|
||||
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId);
|
||||
gTasks[taskId].data[0]++;
|
||||
|
|
@ -748,7 +748,7 @@ void AnimTask_ThrowBall(u8 taskId)
|
|||
gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 16;
|
||||
gSprites[spriteId].callback = SpriteCB_ThrowBall_Init;
|
||||
gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
|
||||
gBattleSpritesDataPtr->animationData->wildMonInvisible = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].func = AnimTask_ThrowBall_WaitAnimObjComplete;
|
||||
}
|
||||
|
|
@ -860,7 +860,7 @@ static void SpriteCB_ThrowBall_ArcFlight(struct Sprite *sprite)
|
|||
switch (ballId)
|
||||
{
|
||||
case 0 ... POKEBALL_COUNT - 1:
|
||||
LaunchBallStarsTask(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1015,7 +1015,7 @@ static void SpriteCB_ThrowBall_InitShake(struct Sprite *sprite)
|
|||
sprite->data[3] = 0;
|
||||
sprite->affineAnimPaused = TRUE;
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
gBattleSpritesDataPtr->animationData->field_C = 0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx = 0;
|
||||
sprite->callback = SpriteCB_ThrowBall_DoShake;
|
||||
PlaySE(SE_BALL);
|
||||
}
|
||||
|
|
@ -1029,14 +1029,14 @@ static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite)
|
|||
switch (sprite->data[3] & 0xFF)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
|
||||
if (gBattleSpritesDataPtr->animationData->ballSubpx > 0xFF)
|
||||
{
|
||||
sprite->x2 += sprite->data[4];
|
||||
gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_C += 0xB0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx += 0xB0;
|
||||
}
|
||||
|
||||
sprite->data[5]++;
|
||||
|
|
@ -1044,7 +1044,7 @@ static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite)
|
|||
var0 = sprite->data[5] + 7;
|
||||
if (var0 > 14)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_C = 0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx = 0;
|
||||
sprite->data[3]++;
|
||||
sprite->data[5] = 0;
|
||||
}
|
||||
|
|
@ -1067,14 +1067,14 @@ static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite)
|
|||
}
|
||||
break;
|
||||
case 2:
|
||||
if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
|
||||
if (gBattleSpritesDataPtr->animationData->ballSubpx > 0xFF)
|
||||
{
|
||||
sprite->x2 += sprite->data[4];
|
||||
gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_C += 0xB0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx += 0xB0;
|
||||
}
|
||||
|
||||
sprite->data[5]++;
|
||||
|
|
@ -1082,7 +1082,7 @@ static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite)
|
|||
var0 = sprite->data[5] + 12;
|
||||
if (var0 > 24)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_C = 0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx = 0;
|
||||
sprite->data[3]++;
|
||||
sprite->data[5] = 0;
|
||||
}
|
||||
|
|
@ -1104,14 +1104,14 @@ static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite)
|
|||
ChangeSpriteAffineAnim(sprite, 1);
|
||||
// fall through
|
||||
case 4:
|
||||
if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
|
||||
if (gBattleSpritesDataPtr->animationData->ballSubpx > 0xFF)
|
||||
{
|
||||
sprite->x2 += sprite->data[4];
|
||||
gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_C += 0xB0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx += 0xB0;
|
||||
}
|
||||
|
||||
sprite->data[5]++;
|
||||
|
|
@ -1119,7 +1119,7 @@ static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite)
|
|||
var0 = sprite->data[5] + 4;
|
||||
if (var0 > 8)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_C = 0;
|
||||
gBattleSpritesDataPtr->animationData->ballSubpx = 0;
|
||||
sprite->data[3]++;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[4] = -sprite->data[4];
|
||||
|
|
@ -1319,7 +1319,7 @@ static void SpriteCB_ThrowBall_BeginBreakOut(struct Sprite *sprite)
|
|||
switch (ballId)
|
||||
{
|
||||
case 0 ... POKEBALL_COUNT - 1:
|
||||
LaunchBallStarsTask(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1351,7 +1351,7 @@ static void SpriteCB_ThrowBall_RunBreakOut(struct Sprite *sprite)
|
|||
if (sprite->animEnded && next)
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].y2 = 0;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->wildMonInvisible;
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = BattleAnimObj_SignalEnd;
|
||||
gDoingBattleAnim = FALSE;
|
||||
|
|
@ -1430,7 +1430,7 @@ static void LoadBallParticleGfx(u8 ballId)
|
|||
}
|
||||
}
|
||||
|
||||
u8 LaunchBallStarsTask(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
|
||||
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
|
|
@ -1448,7 +1448,7 @@ u8 LaunchBallStarsTask(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
|
|||
static void IncrementBattleParticleCounter(void)
|
||||
{
|
||||
if (gMain.inBattle)
|
||||
gBattleSpritesDataPtr->animationData->field_A++;
|
||||
gBattleSpritesDataPtr->animationData->numBallParticles++;
|
||||
}
|
||||
|
||||
static void PokeBallOpenParticleAnimation(u8 taskId)
|
||||
|
|
@ -1850,8 +1850,8 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
|
|||
}
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->field_A--;
|
||||
if (gBattleSpritesDataPtr->animationData->field_A == 0)
|
||||
gBattleSpritesDataPtr->animationData->numBallParticles--;
|
||||
if (gBattleSpritesDataPtr->animationData->numBallParticles == 0)
|
||||
{
|
||||
for (j = 0; j < POKEBALL_COUNT; j++)
|
||||
{
|
||||
|
|
@ -2097,7 +2097,7 @@ static void AnimTask_ShinySparkles(u8 taskId)
|
|||
return;
|
||||
}
|
||||
|
||||
if (gBattleSpritesDataPtr->animationData->field_A)
|
||||
if (gBattleSpritesDataPtr->animationData->numBallParticles)
|
||||
return;
|
||||
|
||||
counter = gTasks[taskId].data[10]++;
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
|
|||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
|
||||
}
|
||||
}
|
||||
|
|
@ -1538,7 +1538,7 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
|
|||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDummy;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -236,7 +236,7 @@ static void Intro_ShowHealthbox(void)
|
|||
HEALTHBOX_ALL);
|
||||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox;
|
||||
}
|
||||
}
|
||||
|
|
@ -1464,7 +1464,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
|
|||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -427,7 +427,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
|
|||
HEALTHBOX_ALL);
|
||||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
|
||||
}
|
||||
}
|
||||
|
|
@ -2093,7 +2093,7 @@ static void OakOldManHandleIntroTrainerBallThrow(void)
|
|||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
|
|||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = FALSE;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
|
||||
}
|
||||
}
|
||||
|
|
@ -1638,7 +1638,7 @@ static void OpponentHandleIntroTrainerBallThrow(void)
|
|||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = TRUE;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = OpponentDummy;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -931,7 +931,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
|
|||
HEALTHBOX_ALL);
|
||||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
|
||||
}
|
||||
}
|
||||
|
|
@ -2719,7 +2719,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
|
|||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy;
|
||||
}
|
||||
|
||||
|
|
@ -2912,8 +2912,8 @@ static void PreviewDeterminativeMoveTargets(void)
|
|||
break;
|
||||
case MOVE_TARGET_BOTH:
|
||||
case MOVE_TARGET_OPPONENTS_FIELD:
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
|
||||
| gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
|
||||
| gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
|
||||
startY = 8;
|
||||
break;
|
||||
case MOVE_TARGET_USER:
|
||||
|
|
@ -2935,8 +2935,8 @@ static void PreviewDeterminativeMoveTargets(void)
|
|||
case MOVE_MIST:
|
||||
case MOVE_HEAL_BELL:
|
||||
case MOVE_AROMATHERAPY:
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]
|
||||
| gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]) << 16;
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]
|
||||
| gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]) << 16;
|
||||
break;
|
||||
case MOVE_HELPING_HAND:
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]) << 16;
|
||||
|
|
@ -2948,8 +2948,8 @@ static void PreviewDeterminativeMoveTargets(void)
|
|||
startY = 8;
|
||||
break;
|
||||
case MOVE_TARGET_FOES_AND_ALLY:
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
|
||||
| gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]
|
||||
bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
|
||||
| gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]
|
||||
| gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
|
||||
startY = 8;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
|
|||
HEALTHBOX_ALL);
|
||||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
|
||||
}
|
||||
}
|
||||
|
|
@ -1865,7 +1865,7 @@ static void PokedudeHandleIntroTrainerBallThrow(void)
|
|||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = PokedudeDummy;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -800,7 +800,7 @@ void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
|
|||
}
|
||||
|
||||
// not used
|
||||
static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered?
|
||||
static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered?
|
||||
{
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
|
|
|
|||
|
|
@ -663,7 +663,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 transformType)
|
|||
{
|
||||
const void *src;
|
||||
void *dst;
|
||||
|
||||
|
||||
position = GetBattlerPosition(battlerAtk);
|
||||
targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_SPECIES);
|
||||
personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
|
||||
|
|
@ -1042,17 +1042,20 @@ void FreeMonSpritesGfx(void)
|
|||
FREE_AND_SET_NULL(gMonSpritesGfxPtr);
|
||||
}
|
||||
|
||||
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon)
|
||||
bool32 ShouldPlayNormalMonCry(struct Pokemon *mon)
|
||||
{
|
||||
s16 hp, maxHP;
|
||||
s32 barLevel;
|
||||
|
||||
if (GetMonData(mon, MON_DATA_STATUS) & (STATUS1_ANY | STATUS1_TOXIC_COUNTER))
|
||||
return FALSE;
|
||||
|
||||
hp = GetMonData(mon, MON_DATA_HP);
|
||||
maxHP = GetMonData(mon, MON_DATA_MAX_HP);
|
||||
|
||||
barLevel = GetHPBarLevel(hp, maxHP);
|
||||
if (barLevel <= HP_BAR_YELLOW)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -676,7 +676,7 @@ static const struct OamData sOamData_MonIconOnLvlUpBanner =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ static void Task_BattleStart(u8 taskId)
|
|||
case 0:
|
||||
if (!FldEffPoison_IsActive())
|
||||
{
|
||||
HelpSystem_Disable();
|
||||
HelpSystem_Disable();
|
||||
BT_StartOnField(tTransition);
|
||||
++tState;
|
||||
}
|
||||
|
|
@ -189,7 +189,7 @@ static void Task_BattleStart(u8 taskId)
|
|||
case 1:
|
||||
if (BT_IsDone() == TRUE)
|
||||
{
|
||||
HelpSystem_Enable();
|
||||
HelpSystem_Enable();
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
SetMainCallback2(CB2_InitBattle);
|
||||
RestartWildEncounterImmunitySteps();
|
||||
|
|
|
|||
|
|
@ -394,7 +394,7 @@ static const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] =
|
|||
};
|
||||
|
||||
static const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 };
|
||||
|
||||
|
||||
static const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] =
|
||||
{
|
||||
BT_Phase2GridSquares_LoadGfx,
|
||||
|
|
@ -480,7 +480,7 @@ static const struct OamData sOamData_Unused =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(64x64),
|
||||
.x = 0,
|
||||
|
|
@ -1022,7 +1022,7 @@ static void VBCB_BT_Phase2BigPokeball2(void)
|
|||
#undef tTheta
|
||||
#undef tAmplitude
|
||||
|
||||
// TODO: Document this effect after knowing more about field effects.
|
||||
// TODO: Document this effect after knowing more about field effects.
|
||||
static void BT_Phase2SlidingPokeballs(u8 taskId)
|
||||
{
|
||||
while (sBT_Phase2SlidingPokeballsFuncs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
|
|
|
|||
|
|
@ -1,37 +1,37 @@
|
|||
const u32 gInterfaceGfx_PokeBall[] = INCBIN_U32("graphics/interface/ball/poke.4bpp.lz");
|
||||
const u32 gInterfacePal_PokeBall[] = INCBIN_U32("graphics/interface/ball/poke.gbapal.lz");
|
||||
const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/interface/ball/poke.4bpp.lz");
|
||||
const u32 gBallPal_Poke[] = INCBIN_U32("graphics/interface/ball/poke.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_GreatBall[] = INCBIN_U32("graphics/interface/ball/great.4bpp.lz");
|
||||
const u32 gInterfacePal_GreatBall[] = INCBIN_U32("graphics/interface/ball/great.gbapal.lz");
|
||||
const u32 gBallGfx_Great[] = INCBIN_U32("graphics/interface/ball/great.4bpp.lz");
|
||||
const u32 gBallPal_Great[] = INCBIN_U32("graphics/interface/ball/great.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_SafariBall[] = INCBIN_U32("graphics/interface/ball/safari.4bpp.lz");
|
||||
const u32 gInterfacePal_SafariBall[] = INCBIN_U32("graphics/interface/ball/safari.gbapal.lz");
|
||||
const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/interface/ball/safari.4bpp.lz");
|
||||
const u32 gBallPal_Safari[] = INCBIN_U32("graphics/interface/ball/safari.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_UltraBall[] = INCBIN_U32("graphics/interface/ball/ultra.4bpp.lz");
|
||||
const u32 gInterfacePal_UltraBall[] = INCBIN_U32("graphics/interface/ball/ultra.gbapal.lz");
|
||||
const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/interface/ball/ultra.4bpp.lz");
|
||||
const u32 gBallPal_Ultra[] = INCBIN_U32("graphics/interface/ball/ultra.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_MasterBall[] = INCBIN_U32("graphics/interface/ball/master.4bpp.lz");
|
||||
const u32 gInterfacePal_MasterBall[] = INCBIN_U32("graphics/interface/ball/master.gbapal.lz");
|
||||
const u32 gBallGfx_Master[] = INCBIN_U32("graphics/interface/ball/master.4bpp.lz");
|
||||
const u32 gBallPal_Master[] = INCBIN_U32("graphics/interface/ball/master.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_NetBall[] = INCBIN_U32("graphics/interface/ball/net.4bpp.lz");
|
||||
const u32 gInterfacePal_NetBall[] = INCBIN_U32("graphics/interface/ball/net.gbapal.lz");
|
||||
const u32 gBallGfx_Net[] = INCBIN_U32("graphics/interface/ball/net.4bpp.lz");
|
||||
const u32 gBallPal_Net[] = INCBIN_U32("graphics/interface/ball/net.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_DiveBall[] = INCBIN_U32("graphics/interface/ball/dive.4bpp.lz");
|
||||
const u32 gInterfacePal_DiveBall[] = INCBIN_U32("graphics/interface/ball/dive.gbapal.lz");
|
||||
const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/interface/ball/dive.4bpp.lz");
|
||||
const u32 gBallPal_Dive[] = INCBIN_U32("graphics/interface/ball/dive.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_NestBall[] = INCBIN_U32("graphics/interface/ball/nest.4bpp.lz");
|
||||
const u32 gInterfacePal_NestBall[] = INCBIN_U32("graphics/interface/ball/nest.gbapal.lz");
|
||||
const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/interface/ball/nest.4bpp.lz");
|
||||
const u32 gBallPal_Nest[] = INCBIN_U32("graphics/interface/ball/nest.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_RepeatBall[] = INCBIN_U32("graphics/interface/ball/repeat.4bpp.lz");
|
||||
const u32 gInterfacePal_RepeatBall[] = INCBIN_U32("graphics/interface/ball/repeat.gbapal.lz");
|
||||
const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/interface/ball/repeat.4bpp.lz");
|
||||
const u32 gBallPal_Repeat[] = INCBIN_U32("graphics/interface/ball/repeat.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_TimerBall[] = INCBIN_U32("graphics/interface/ball/timer.4bpp.lz");
|
||||
const u32 gInterfacePal_TimerBall[] = INCBIN_U32("graphics/interface/ball/timer.gbapal.lz");
|
||||
const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/interface/ball/timer.4bpp.lz");
|
||||
const u32 gBallPal_Timer[] = INCBIN_U32("graphics/interface/ball/timer.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_LuxuryBall[] = INCBIN_U32("graphics/interface/ball/luxury.4bpp.lz");
|
||||
const u32 gInterfacePal_LuxuryBall[] = INCBIN_U32("graphics/interface/ball/luxury.gbapal.lz");
|
||||
const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/interface/ball/luxury.4bpp.lz");
|
||||
const u32 gBallPal_Luxury[] = INCBIN_U32("graphics/interface/ball/luxury.gbapal.lz");
|
||||
|
||||
const u32 gInterfaceGfx_PremierBall[] = INCBIN_U32("graphics/interface/ball/premier.4bpp.lz");
|
||||
const u32 gInterfacePal_PremierBall[] = INCBIN_U32("graphics/interface/ball/premier.gbapal.lz");
|
||||
const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/interface/ball/premier.4bpp.lz");
|
||||
const u32 gBallPal_Premier[] = INCBIN_U32("graphics/interface/ball/premier.gbapal.lz");
|
||||
|
||||
const u32 gOpenPokeballGfx[] = INCBIN_U32("graphics/interface/ball_open.4bpp.lz");
|
||||
|
|
|
|||
|
|
@ -711,7 +711,7 @@ static const struct OamData sOamData_HeldItem =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.x = 0,
|
||||
|
|
@ -767,7 +767,7 @@ static const struct OamData sOamData_MenuPokeball =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
|
|
@ -824,7 +824,7 @@ static const struct OamData sOamData_MenuPokeballSmall =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
|
|
@ -905,7 +905,7 @@ static const struct OamData sOamData_StatusCondition =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.x = 0,
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ static const struct OamData sOamData_EggHatch =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
|
|
@ -223,7 +223,7 @@ static const struct OamData sOamData_EggShard =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.x = 0,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ bool8 SetUpFieldMove_Strength(void)
|
|||
{
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_PUSHABLE_BOULDER) != TRUE)
|
||||
{
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ void STWI_init_Callback_S(void)
|
|||
STWI_set_Callback_S(NULL);
|
||||
}
|
||||
|
||||
// The callback can take 2 or 3 arguments.
|
||||
// The callback can take 2 or 3 arguments.
|
||||
void STWI_set_Callback_M(void *callbackM)
|
||||
{
|
||||
gSTWIStatus->callbackM = callbackM;
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
|
|||
for (i = 0; i < PLAYER_NAME_LENGTH && gSaveBlock2Ptr->playerName[i] != EOS; i++)
|
||||
gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
|
||||
for (; i <= 5; i++)
|
||||
gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE;
|
||||
gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE;
|
||||
gSaveBlock1Ptr->mail[id].playerName[i] = EOS;
|
||||
for (i = 0; i < 4; i++)
|
||||
gSaveBlock1Ptr->mail[id].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ static const struct OamData sOamData_ScrollArrowIndicator =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
|
|
@ -224,7 +224,7 @@ static const struct OamData sOamData_RedArrowCursor =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
|
|
|
|||
512
src/pokeball.c
512
src/pokeball.c
|
|
@ -14,13 +14,34 @@
|
|||
#include "constants/songs.h"
|
||||
#include "constants/sound.h"
|
||||
|
||||
#define tFrames data[0]
|
||||
#define tPan data[1]
|
||||
#define tThrowId data[2]
|
||||
#define tBattler data[3]
|
||||
#define tOpponentBattler data[4]
|
||||
static void Task_DoPokeballSendOutAnim(u8 taskId);
|
||||
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite);
|
||||
static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite);
|
||||
static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_ReachMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_StartShrinkMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_Close(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_FallToGround(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_StartShakes(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_Shake(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_StartCaptureMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite);
|
||||
static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite);
|
||||
static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite);
|
||||
static void HandleBallAnimEnd(struct Sprite *sprite);
|
||||
static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite);
|
||||
static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite);
|
||||
static void SpriteCB_TradePokeball(struct Sprite *sprite);
|
||||
static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite);
|
||||
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);
|
||||
|
||||
#define sBattler data[6]
|
||||
// rom const data
|
||||
|
||||
#define GFX_TAG_POKE_BALL 55000
|
||||
#define GFX_TAG_GREAT_BALL 55001
|
||||
|
|
@ -35,68 +56,36 @@
|
|||
#define GFX_TAG_LUXURY_BALL 55010
|
||||
#define GFX_TAG_PREMIER_BALL 55011
|
||||
|
||||
// Function Declarations
|
||||
static void Task_DoPokeballSendOutAnim(u8 taskId);
|
||||
static void SpriteCB_TestBallThrow(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_ReachMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_StartShrinkMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_Close(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_FallToGround(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_StartShakes(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_Shake(struct Sprite *sprite);
|
||||
static void Task_PlayCryWhenReleasedFromBall(u8 taskId);
|
||||
static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_StartCaptureMon(struct Sprite *sprite);
|
||||
static void HandleBallAnimEnd(struct Sprite *sprite);
|
||||
static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite);
|
||||
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite);
|
||||
static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite);
|
||||
static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite);
|
||||
static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite);
|
||||
static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d);
|
||||
static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2);
|
||||
static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite);
|
||||
static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite);
|
||||
static void SpriteCB_TradePokeball(struct Sprite *sprite);
|
||||
static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite);
|
||||
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);
|
||||
|
||||
// Data
|
||||
const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] =
|
||||
{
|
||||
{gInterfaceGfx_PokeBall, 384, GFX_TAG_POKE_BALL},
|
||||
{gInterfaceGfx_GreatBall, 384, GFX_TAG_GREAT_BALL},
|
||||
{gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARI_BALL},
|
||||
{gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRA_BALL},
|
||||
{gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTER_BALL},
|
||||
{gInterfaceGfx_NetBall, 384, GFX_TAG_NET_BALL},
|
||||
{gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVE_BALL},
|
||||
{gInterfaceGfx_NestBall, 384, GFX_TAG_NEST_BALL},
|
||||
{gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEAT_BALL},
|
||||
{gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMER_BALL},
|
||||
{gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURY_BALL},
|
||||
{gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIER_BALL},
|
||||
[BALL_POKE] = {gBallGfx_Poke, 384, GFX_TAG_POKE_BALL},
|
||||
[BALL_GREAT] = {gBallGfx_Great, 384, GFX_TAG_GREAT_BALL},
|
||||
[BALL_SAFARI] = {gBallGfx_Safari, 384, GFX_TAG_SAFARI_BALL},
|
||||
[BALL_ULTRA] = {gBallGfx_Ultra, 384, GFX_TAG_ULTRA_BALL},
|
||||
[BALL_MASTER] = {gBallGfx_Master, 384, GFX_TAG_MASTER_BALL},
|
||||
[BALL_NET] = {gBallGfx_Net, 384, GFX_TAG_NET_BALL},
|
||||
[BALL_DIVE] = {gBallGfx_Dive, 384, GFX_TAG_DIVE_BALL},
|
||||
[BALL_NEST] = {gBallGfx_Nest, 384, GFX_TAG_NEST_BALL},
|
||||
[BALL_REPEAT] = {gBallGfx_Repeat, 384, GFX_TAG_REPEAT_BALL},
|
||||
[BALL_TIMER] = {gBallGfx_Timer, 384, GFX_TAG_TIMER_BALL},
|
||||
[BALL_LUXURY] = {gBallGfx_Luxury, 384, GFX_TAG_LUXURY_BALL},
|
||||
[BALL_PREMIER] = {gBallGfx_Premier, 384, GFX_TAG_PREMIER_BALL},
|
||||
};
|
||||
|
||||
const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] =
|
||||
{
|
||||
{gInterfacePal_PokeBall, GFX_TAG_POKE_BALL},
|
||||
{gInterfacePal_GreatBall, GFX_TAG_GREAT_BALL},
|
||||
{gInterfacePal_SafariBall, GFX_TAG_SAFARI_BALL},
|
||||
{gInterfacePal_UltraBall, GFX_TAG_ULTRA_BALL},
|
||||
{gInterfacePal_MasterBall, GFX_TAG_MASTER_BALL},
|
||||
{gInterfacePal_NetBall, GFX_TAG_NET_BALL},
|
||||
{gInterfacePal_DiveBall, GFX_TAG_DIVE_BALL},
|
||||
{gInterfacePal_NestBall, GFX_TAG_NEST_BALL},
|
||||
{gInterfacePal_RepeatBall, GFX_TAG_REPEAT_BALL},
|
||||
{gInterfacePal_TimerBall, GFX_TAG_TIMER_BALL},
|
||||
{gInterfacePal_LuxuryBall, GFX_TAG_LUXURY_BALL},
|
||||
{gInterfacePal_PremierBall, GFX_TAG_PREMIER_BALL},
|
||||
[BALL_POKE] = {gBallPal_Poke, GFX_TAG_POKE_BALL},
|
||||
[BALL_GREAT] = {gBallPal_Great, GFX_TAG_GREAT_BALL},
|
||||
[BALL_SAFARI] = {gBallPal_Safari, GFX_TAG_SAFARI_BALL},
|
||||
[BALL_ULTRA] = {gBallPal_Ultra, GFX_TAG_ULTRA_BALL},
|
||||
[BALL_MASTER] = {gBallPal_Master, GFX_TAG_MASTER_BALL},
|
||||
[BALL_NET] = {gBallPal_Net, GFX_TAG_NET_BALL},
|
||||
[BALL_DIVE] = {gBallPal_Dive, GFX_TAG_DIVE_BALL},
|
||||
[BALL_NEST] = {gBallPal_Nest, GFX_TAG_NEST_BALL},
|
||||
[BALL_REPEAT] = {gBallPal_Repeat, GFX_TAG_REPEAT_BALL},
|
||||
[BALL_TIMER] = {gBallPal_Timer, GFX_TAG_TIMER_BALL},
|
||||
[BALL_LUXURY] = {gBallPal_Luxury, GFX_TAG_LUXURY_BALL},
|
||||
[BALL_PREMIER] = {gBallPal_Premier, GFX_TAG_PREMIER_BALL},
|
||||
};
|
||||
|
||||
static const struct OamData sBallOamData =
|
||||
|
|
@ -171,171 +160,192 @@ static const union AnimCmd *const sBallAnimSequences[] =
|
|||
sBallAnimSeq6,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sBallAffineAnimSeq0[] =
|
||||
static const union AffineAnimCmd sAffineAnim_BallRotate_0[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
|
||||
AFFINEANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sBallAffineAnimSeq1[] =
|
||||
static const union AffineAnimCmd sAffineAnim_BallRotate_Right[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, -3, 1),
|
||||
AFFINEANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sBallAffineAnimSeq2[] =
|
||||
static const union AffineAnimCmd sAffineAnim_BallRotate_Left[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 3, 1),
|
||||
AFFINEANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sBallAffineAnimSeq3[] =
|
||||
static const union AffineAnimCmd sAffineAnim_BallRotate_3[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sBallAffineAnimSeq4[] =
|
||||
static const union AffineAnimCmd sAffineAnim_BallRotate_4[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 25, 1),
|
||||
AFFINEANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sBallAffineAnimSequences[] =
|
||||
static const union AffineAnimCmd *const sAffineAnim_BallRotate[] =
|
||||
{
|
||||
sBallAffineAnimSeq0,
|
||||
sBallAffineAnimSeq1,
|
||||
sBallAffineAnimSeq2,
|
||||
sBallAffineAnimSeq3,
|
||||
sBallAffineAnimSeq4,
|
||||
[BALL_AFFINE_ANIM_0] = sAffineAnim_BallRotate_0,
|
||||
[BALL_ROTATE_RIGHT] = sAffineAnim_BallRotate_Right,
|
||||
[BALL_ROTATE_LEFT] = sAffineAnim_BallRotate_Left,
|
||||
[BALL_AFFINE_ANIM_3] = sAffineAnim_BallRotate_3,
|
||||
[BALL_AFFINE_ANIM_4] = sAffineAnim_BallRotate_4,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
|
||||
{
|
||||
[BALL_POKE] =
|
||||
{
|
||||
.tileTag = GFX_TAG_POKE_BALL,
|
||||
.paletteTag = GFX_TAG_POKE_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_GREAT] =
|
||||
{
|
||||
.tileTag = GFX_TAG_GREAT_BALL,
|
||||
.paletteTag = GFX_TAG_GREAT_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_SAFARI] =
|
||||
{
|
||||
.tileTag = GFX_TAG_SAFARI_BALL,
|
||||
.paletteTag = GFX_TAG_SAFARI_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_ULTRA] =
|
||||
{
|
||||
.tileTag = GFX_TAG_ULTRA_BALL,
|
||||
.paletteTag = GFX_TAG_ULTRA_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_MASTER] =
|
||||
{
|
||||
.tileTag = GFX_TAG_MASTER_BALL,
|
||||
.paletteTag = GFX_TAG_MASTER_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_NET] =
|
||||
{
|
||||
.tileTag = GFX_TAG_NET_BALL,
|
||||
.paletteTag = GFX_TAG_NET_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_DIVE] =
|
||||
{
|
||||
.tileTag = GFX_TAG_DIVE_BALL,
|
||||
.paletteTag = GFX_TAG_DIVE_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_NEST] =
|
||||
{
|
||||
.tileTag = GFX_TAG_NEST_BALL,
|
||||
.paletteTag = GFX_TAG_NEST_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_REPEAT] =
|
||||
{
|
||||
.tileTag = GFX_TAG_REPEAT_BALL,
|
||||
.paletteTag = GFX_TAG_REPEAT_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_TIMER] =
|
||||
{
|
||||
.tileTag = GFX_TAG_TIMER_BALL,
|
||||
.paletteTag = GFX_TAG_TIMER_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_LUXURY] =
|
||||
{
|
||||
.tileTag = GFX_TAG_LUXURY_BALL,
|
||||
.paletteTag = GFX_TAG_LUXURY_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
[BALL_PREMIER] =
|
||||
{
|
||||
.tileTag = GFX_TAG_PREMIER_BALL,
|
||||
.paletteTag = GFX_TAG_PREMIER_BALL,
|
||||
.oam = &sBallOamData,
|
||||
.anims = sBallAnimSequences,
|
||||
.images = NULL,
|
||||
.affineAnims = sBallAffineAnimSequences,
|
||||
.callback = SpriteCB_TestBallThrow,
|
||||
.affineAnims = sAffineAnim_BallRotate,
|
||||
.callback = SpriteCB_BallThrow,
|
||||
},
|
||||
};
|
||||
|
||||
// Functions
|
||||
#define tFrames data[0]
|
||||
#define tPan data[1]
|
||||
#define tThrowId data[2]
|
||||
#define tBattler data[3]
|
||||
#define tOpponentBattler data[4]
|
||||
|
||||
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
|
||||
gDoingBattleAnim = TRUE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE;
|
||||
|
||||
taskId = CreateTask(Task_DoPokeballSendOutAnim, 5);
|
||||
gTasks[taskId].tPan = pan;
|
||||
gTasks[taskId].tThrowId = kindOfThrow;
|
||||
gTasks[taskId].tBattler = gActiveBattler;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define sBattler data[6]
|
||||
|
||||
static void Task_DoPokeballSendOutAnim(u8 taskId)
|
||||
{
|
||||
u16 throwCaseId;
|
||||
|
|
@ -362,12 +372,12 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
|
|||
|
||||
ballId = ItemIdToBallId(itemId);
|
||||
LoadBallGfx(ballId);
|
||||
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender;
|
||||
else
|
||||
gender = gSaveBlock2Ptr->playerGender;
|
||||
|
||||
|
||||
ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
|
||||
gSprites[ballSpriteId].data[0] = 0x80;
|
||||
gSprites[ballSpriteId].data[1] = 0;
|
||||
|
|
@ -387,7 +397,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
|
|||
x = 48;
|
||||
y = 70;
|
||||
}
|
||||
|
||||
|
||||
gBattlerTarget = battlerId;
|
||||
gSprites[ballSpriteId].x = x;
|
||||
gSprites[ballSpriteId].y = y;
|
||||
|
|
@ -425,7 +435,10 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
|
|||
PlaySE(SE_BALL_THROW);
|
||||
}
|
||||
|
||||
static void SpriteCB_TestBallThrow(struct Sprite *sprite)
|
||||
// This sequence of functions is very similar to those that get run when
|
||||
// a Pokéball gets thrown at a wild Pokémon, starting at SpriteCB_Ball_Arc.
|
||||
// These do not seem to get run.
|
||||
static void SpriteCB_BallThrow(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
{
|
||||
|
|
@ -442,7 +455,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
|
|||
sprite->y2 = 0;
|
||||
sprite->data[5] = 0;
|
||||
ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler));
|
||||
LaunchBallStarsTask(sprite->x, sprite->y - 5, 1, 0x1C, ballId);
|
||||
AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId);
|
||||
sprite->sBattler = opponentBattler;
|
||||
sprite->data[7] = noOfShakes;
|
||||
|
|
@ -468,7 +481,7 @@ static void SpriteCB_BallThrow_StartShrinkMon(struct Sprite *sprite)
|
|||
{
|
||||
sprite->data[5] = 0;
|
||||
sprite->callback = SpriteCB_BallThrow_ShrinkMon;
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2);
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], BATTLER_AFFINE_RETURN);
|
||||
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0;
|
||||
}
|
||||
|
|
@ -479,7 +492,7 @@ static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite)
|
|||
sprite->data[5]++;
|
||||
if (sprite->data[5] == 11)
|
||||
PlaySE(SE_BALL_TRADE);
|
||||
|
||||
|
||||
if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded)
|
||||
{
|
||||
StartSpriteAnim(sprite, 2);
|
||||
|
|
@ -649,7 +662,7 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite)
|
|||
StartSpriteAffineAnim(sprite, 2);
|
||||
else
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
|
||||
|
||||
PlaySE(SE_BALL);
|
||||
}
|
||||
break;
|
||||
|
|
@ -666,10 +679,10 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite)
|
|||
|
||||
static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
||||
{
|
||||
u8 state2 = gTasks[taskId].data[2];
|
||||
u8 wantedCry = gTasks[taskId].tCryTaskWantedCry;
|
||||
s8 pan = gTasks[taskId].tCryTaskPan;
|
||||
u16 species = gTasks[taskId].tCryTaskSpecies;
|
||||
struct Pokemon *mon = (void *)(u32)((u32)(gTasks[taskId].tCryTaskMonPtr1 << 0x10) | ((u16)gTasks[taskId].tCryTaskMonPtr2));
|
||||
struct Pokemon *mon = (void *)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 16) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
|
||||
|
||||
switch (gTasks[taskId].tCryTaskState)
|
||||
{
|
||||
|
|
@ -678,14 +691,15 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
|||
if (gTasks[taskId].data[8] < 3)
|
||||
gTasks[taskId].data[8]++;
|
||||
else
|
||||
gTasks[taskId].tCryTaskState = state2 + 1;
|
||||
gTasks[taskId].tCryTaskState = wantedCry + 1;
|
||||
break;
|
||||
case 1:
|
||||
if (ShouldPlayNormalPokeCry(mon) == TRUE)
|
||||
// Play single cry
|
||||
if (ShouldPlayNormalMonCry(mon) == TRUE)
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_NORMAL);
|
||||
else
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_WEAK);
|
||||
|
||||
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
case 2:
|
||||
|
|
@ -696,10 +710,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
|||
case 20:
|
||||
if (gTasks[taskId].tCryTaskFrames == 0)
|
||||
{
|
||||
if (ShouldPlayNormalPokeCry(mon) == TRUE)
|
||||
PlayCry_ReleaseDouble(species, pan, 1);
|
||||
// Play first doubles cry
|
||||
if (ShouldPlayNormalMonCry(mon) == TRUE)
|
||||
PlayCry_ReleaseDouble(species, pan, CRY_MODE_DOUBLES);
|
||||
else
|
||||
PlayCry_ReleaseDouble(species, pan, 12);
|
||||
PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK_DOUBLES);
|
||||
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
|
@ -719,6 +734,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
|||
break;
|
||||
}
|
||||
gTasks[taskId].tCryTaskState++;
|
||||
// fall through
|
||||
case 31:
|
||||
if (!IsCryPlayingOrClearCrySongs())
|
||||
{
|
||||
|
|
@ -733,11 +749,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
|
|||
gTasks[taskId].tCryTaskFrames--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ShouldPlayNormalPokeCry(mon) == TRUE)
|
||||
PlayCry_ReleaseDouble(species, pan, 0);
|
||||
// Play second doubles cry
|
||||
if (ShouldPlayNormalMonCry(mon) == TRUE)
|
||||
PlayCry_ReleaseDouble(species, pan, CRY_MODE_NORMAL);
|
||||
else
|
||||
PlayCry_ReleaseDouble(species, pan, 11);
|
||||
PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK);
|
||||
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
|
|
@ -751,8 +767,8 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
|||
|
||||
StartSpriteAnim(sprite, 1);
|
||||
ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
|
||||
LaunchBallStarsTask(sprite->x, sprite->y - 5, 1, 0x1C, ballId);
|
||||
sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
|
||||
AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId);
|
||||
sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId);
|
||||
sprite->callback = HandleBallAnimEnd;
|
||||
|
||||
if (gMain.inBattle)
|
||||
|
|
@ -776,7 +792,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
|||
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
|
||||
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted)
|
||||
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
|
|
@ -789,23 +805,23 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
|||
}
|
||||
}
|
||||
|
||||
if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->healthboxSlideInStarted)
|
||||
if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->introAnimActive)
|
||||
wantedCryCase = 0;
|
||||
else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
|
||||
wantedCryCase = 1;
|
||||
else
|
||||
wantedCryCase = 2;
|
||||
|
||||
|
||||
taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3);
|
||||
gTasks[taskId].tCryTaskSpecies = species;
|
||||
gTasks[taskId].tCryTaskPan = pan;
|
||||
gTasks[taskId].tCryTaskWantedCry = wantedCryCase;
|
||||
gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10;
|
||||
gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 16;
|
||||
gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon);
|
||||
gTasks[taskId].tCryTaskState = 0;
|
||||
}
|
||||
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1);
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], BATTLER_AFFINE_EMERGE);
|
||||
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
|
||||
}
|
||||
|
|
@ -837,7 +853,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
|
|||
sprite->invisible = TRUE;
|
||||
if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded)
|
||||
{
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], BATTLER_AFFINE_NORMAL);
|
||||
affineAnimEnded = TRUE;
|
||||
}
|
||||
else
|
||||
|
|
@ -857,7 +873,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
|
|||
|
||||
for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == FALSE)
|
||||
doneBattlers++;
|
||||
}
|
||||
if (doneBattlers == MAX_BATTLERS_COUNT)
|
||||
|
|
@ -896,8 +912,8 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
|
|||
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 25;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_Y_PIC_OFFSET) + 24;
|
||||
sprite->data[5] = -30;
|
||||
sprite->oam.affineParam = sprite->sBattler;
|
||||
InitAnimArcTranslation(sprite);
|
||||
|
|
@ -946,11 +962,12 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
|
|||
{
|
||||
sprite->x += sprite->x2;
|
||||
sprite->y += sprite->y2;
|
||||
sprite->x2 = sprite->y2 = 0;
|
||||
sprite->y2 = 0;
|
||||
sprite->x2 = 0;
|
||||
sprite->sBattler = sprite->oam.affineParam & 0xFF;
|
||||
sprite->data[0] = 0;
|
||||
|
||||
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted
|
||||
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive
|
||||
&& sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
|
||||
sprite->callback = SpriteCB_ReleaseMon2FromBall;
|
||||
else
|
||||
|
|
@ -976,7 +993,7 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
|
|||
if (sprite->data[0] > 15)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted
|
||||
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive
|
||||
&& sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
|
||||
sprite->callback = SpriteCB_ReleaseMon2FromBall;
|
||||
else
|
||||
|
|
@ -986,121 +1003,144 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
|
|||
|
||||
#undef sBattler
|
||||
|
||||
static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
|
||||
static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 subpriority)
|
||||
{
|
||||
return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE);
|
||||
return AnimateBallOpenParticles(x, y, kindOfStars, subpriority, BALL_POKE);
|
||||
}
|
||||
|
||||
static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2)
|
||||
static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u32 selectedPalettes)
|
||||
{
|
||||
return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE);
|
||||
return LaunchBallFadeMonTask(unFadeLater, spritePalNum, selectedPalettes, BALL_POKE);
|
||||
}
|
||||
|
||||
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h)
|
||||
// Sprite data for the pokeball
|
||||
#define sMonSpriteId data[0]
|
||||
#define sDelay data[1]
|
||||
#define sMonPalNum data[2]
|
||||
#define sFadePalsLo data[3]
|
||||
#define sFadePalsHi data[4]
|
||||
#define sFinalMonX data[5]
|
||||
#define sFinalMonY data[6]
|
||||
#define sTrigIdx data[7]
|
||||
|
||||
// Pokeball in Oak intro, and when receiving via trade
|
||||
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]);
|
||||
spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy);
|
||||
gSprites[spriteId].data[0] = monSpriteId;
|
||||
gSprites[spriteId].data[5] = gSprites[monSpriteId].x;
|
||||
gSprites[spriteId].data[6] = gSprites[monSpriteId].y;
|
||||
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]);
|
||||
spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriortiy);
|
||||
|
||||
gSprites[spriteId].sMonSpriteId = monSpriteId;
|
||||
gSprites[spriteId].sFinalMonX = gSprites[monSpriteId].x;
|
||||
gSprites[spriteId].sFinalMonY = gSprites[monSpriteId].y;
|
||||
|
||||
gSprites[monSpriteId].x = x;
|
||||
gSprites[monSpriteId].y = y;
|
||||
gSprites[spriteId].data[1] = g;
|
||||
gSprites[spriteId].data[2] = battlerId;
|
||||
gSprites[spriteId].data[3] = h;
|
||||
gSprites[spriteId].data[4] = h >> 0x10;
|
||||
|
||||
gSprites[spriteId].sDelay = delay;
|
||||
gSprites[spriteId].sMonPalNum = monPalNum;
|
||||
gSprites[spriteId].sFadePalsLo = fadePalettes;
|
||||
gSprites[spriteId].sFadePalsHi = fadePalettes >> 16;
|
||||
gSprites[spriteId].oam.priority = oamPriority;
|
||||
gSprites[spriteId].callback = SpriteCB_PokeballReleaseMon;
|
||||
|
||||
gSprites[monSpriteId].invisible = TRUE;
|
||||
}
|
||||
|
||||
static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[1] == 0)
|
||||
if (sprite->sDelay == 0)
|
||||
{
|
||||
u8 r5;
|
||||
u8 r7 = sprite->data[0];
|
||||
u8 battlerId = sprite->data[2];
|
||||
u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16);
|
||||
u8 subpriority;
|
||||
u8 spriteId = sprite->sMonSpriteId;
|
||||
u8 monPalNum = sprite->sMonPalNum;
|
||||
u32 selectedPalettes = (u16)sprite->sFadePalsLo | ((u16)sprite->sFadePalsHi << 16);
|
||||
|
||||
if (sprite->subpriority != 0)
|
||||
r5 = sprite->subpriority - 1;
|
||||
subpriority = sprite->subpriority - 1;
|
||||
else
|
||||
r5 = 0;
|
||||
subpriority = 0;
|
||||
|
||||
StartSpriteAnim(sprite, 1);
|
||||
LaunchBallStarsTaskForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, r5);
|
||||
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
|
||||
AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority);
|
||||
// sDelay re-used to store task id but never read
|
||||
sprite->sDelay = LaunchBallFadeMonTaskForPokeball(TRUE, monPalNum, selectedPalettes);
|
||||
sprite->callback = SpriteCB_ReleasedMonFlyOut;
|
||||
gSprites[r7].invisible = FALSE;
|
||||
StartSpriteAffineAnim(&gSprites[r7], 1);
|
||||
AnimateSprite(&gSprites[r7]);
|
||||
gSprites[r7].data[1] = 0x1000;
|
||||
sprite->data[7] = 0;
|
||||
gSprites[spriteId].invisible = FALSE;
|
||||
StartSpriteAffineAnim(&gSprites[spriteId], BATTLER_AFFINE_EMERGE);
|
||||
AnimateSprite(&gSprites[spriteId]);
|
||||
gSprites[spriteId].data[1] = 0x1000;
|
||||
sprite->sTrigIdx = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[1]--;
|
||||
sprite->sDelay--;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite)
|
||||
{
|
||||
bool8 r12 = FALSE;
|
||||
bool8 r6 = FALSE;
|
||||
u8 monSpriteId = sprite->data[0];
|
||||
u16 var1;
|
||||
u16 var2;
|
||||
bool8 emergeAnimFinished = FALSE;
|
||||
bool8 atFinalPosition = FALSE;
|
||||
u8 monSpriteId = sprite->sMonSpriteId;
|
||||
u16 x, y;
|
||||
|
||||
if (sprite->animEnded)
|
||||
sprite->invisible = TRUE;
|
||||
|
||||
|
||||
if (gSprites[monSpriteId].affineAnimEnded)
|
||||
{
|
||||
StartSpriteAffineAnim(&gSprites[monSpriteId], 0);
|
||||
r12 = TRUE;
|
||||
StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_NORMAL);
|
||||
emergeAnimFinished = TRUE;
|
||||
}
|
||||
|
||||
var1 = (sprite->data[5] - sprite->x) * sprite->data[7] / 128 + sprite->x;
|
||||
var2 = (sprite->data[6] - sprite->y) * sprite->data[7] / 128 + sprite->y;
|
||||
gSprites[monSpriteId].x = var1;
|
||||
gSprites[monSpriteId].y = var2;
|
||||
if (sprite->data[7] < 128)
|
||||
{
|
||||
s16 sine = -(gSineTable[(u8)sprite->data[7]] / 8);
|
||||
|
||||
sprite->data[7] += 4;
|
||||
x = (sprite->sFinalMonX - sprite->x) * sprite->sTrigIdx / 128 + sprite->x;
|
||||
y = (sprite->sFinalMonY - sprite->y) * sprite->sTrigIdx / 128 + sprite->y;
|
||||
gSprites[monSpriteId].x = x;
|
||||
gSprites[monSpriteId].y = y;
|
||||
|
||||
if (sprite->sTrigIdx < 128)
|
||||
{
|
||||
s16 sine = -(gSineTable[(u8)sprite->sTrigIdx] / 8);
|
||||
|
||||
sprite->sTrigIdx += 4;
|
||||
gSprites[monSpriteId].x2 = sine;
|
||||
gSprites[monSpriteId].y2 = sine;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[monSpriteId].x = sprite->data[5];
|
||||
gSprites[monSpriteId].y = sprite->data[6];
|
||||
gSprites[monSpriteId].x = sprite->sFinalMonX;
|
||||
gSprites[monSpriteId].y = sprite->sFinalMonY;
|
||||
gSprites[monSpriteId].x2 = 0;
|
||||
gSprites[monSpriteId].y2 = 0;
|
||||
r6 = TRUE;
|
||||
atFinalPosition = TRUE;
|
||||
}
|
||||
|
||||
if (sprite->animEnded && r12 && r6)
|
||||
if (sprite->animEnded && emergeAnimFinished && atFinalPosition)
|
||||
{
|
||||
DestroySpriteAndFreeResources(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h)
|
||||
#undef sFinalMonX
|
||||
#undef sFinalMonY
|
||||
#undef sTrigIdx
|
||||
|
||||
#define sTimer data[5]
|
||||
|
||||
u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]);
|
||||
spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subPriority);
|
||||
gSprites[spriteId].data[0] = a;
|
||||
gSprites[spriteId].data[1] = g;
|
||||
gSprites[spriteId].data[2] = b;
|
||||
gSprites[spriteId].data[3] = h;
|
||||
gSprites[spriteId].data[4] = h >> 16;
|
||||
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]);
|
||||
spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subPriority);
|
||||
gSprites[spriteId].sMonSpriteId = monSpriteId;
|
||||
gSprites[spriteId].sDelay = delay;
|
||||
gSprites[spriteId].sMonPalNum = monPalNum;
|
||||
gSprites[spriteId].sFadePalsLo = fadePalettes;
|
||||
gSprites[spriteId].sFadePalsHi = fadePalettes >> 16;
|
||||
gSprites[spriteId].oam.priority = oamPriority;
|
||||
gSprites[spriteId].callback = SpriteCB_TradePokeball;
|
||||
return spriteId;
|
||||
|
|
@ -1108,29 +1148,35 @@ u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPrior
|
|||
|
||||
static void SpriteCB_TradePokeball(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[1] == 0)
|
||||
if (sprite->sDelay == 0)
|
||||
{
|
||||
u8 r6;
|
||||
u8 r7 = sprite->data[0];
|
||||
u8 r8 = sprite->data[2];
|
||||
u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16);
|
||||
u8 subpriority;
|
||||
u8 monSpriteId = sprite->sMonSpriteId;
|
||||
u8 monPalNum = sprite->sMonPalNum;
|
||||
u32 selectedPalettes = (u16)sprite->sFadePalsLo | ((u16)sprite->sFadePalsHi << 16);
|
||||
|
||||
if (sprite->subpriority != 0)
|
||||
r6 = sprite->subpriority - 1;
|
||||
subpriority = sprite->subpriority - 1;
|
||||
else
|
||||
r6 = 0;
|
||||
subpriority = 0;
|
||||
|
||||
StartSpriteAnim(sprite, 1);
|
||||
LaunchBallStarsTaskForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, r6);
|
||||
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5);
|
||||
AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority);
|
||||
// sDelay re-used to store task id but never read
|
||||
sprite->sDelay = LaunchBallFadeMonTaskForPokeball(TRUE, monPalNum, selectedPalettes);
|
||||
sprite->callback = SpriteCB_TradePokeballSendOff;
|
||||
StartSpriteAffineAnim(&gSprites[r7], 2);
|
||||
AnimateSprite(&gSprites[r7]);
|
||||
gSprites[r7].data[1] = 0;
|
||||
#ifdef BUGFIX
|
||||
// FIX: If this is used on a sprite that has previously had an affine animation, it will not
|
||||
// play the shrink anim properly due to being paused.
|
||||
gSprites[monSpriteId].affineAnimPaused = FALSE;
|
||||
#endif // BUGFIX
|
||||
StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_RETURN);
|
||||
AnimateSprite(&gSprites[monSpriteId]);
|
||||
gSprites[monSpriteId].data[1] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[1]--;
|
||||
sprite->sDelay--;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1138,16 +1184,16 @@ static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite)
|
|||
{
|
||||
u8 monSpriteId;
|
||||
|
||||
sprite->data[5]++;
|
||||
if (sprite->data[5] == 11)
|
||||
sprite->sTimer++;
|
||||
if (sprite->sTimer == 11)
|
||||
PlaySE(SE_BALL_TRADE);
|
||||
|
||||
monSpriteId = sprite->data[0];
|
||||
|
||||
monSpriteId = sprite->sMonSpriteId;
|
||||
if (gSprites[monSpriteId].affineAnimEnded)
|
||||
{
|
||||
StartSpriteAnim(sprite, 2);
|
||||
gSprites[monSpriteId].invisible = TRUE;
|
||||
sprite->data[5] = 0;
|
||||
sprite->sTimer = 0;
|
||||
sprite->callback = SpriteCB_TradePokeballEnd;
|
||||
}
|
||||
else
|
||||
|
|
@ -1163,28 +1209,40 @@ static void SpriteCB_TradePokeballEnd(struct Sprite *sprite)
|
|||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
|
||||
void DestroySpriteAndFreeResources2(struct Sprite *sprite)
|
||||
#undef sMonSpriteId
|
||||
#undef sDelay
|
||||
#undef sMonPalNum
|
||||
#undef sFadePalsLo
|
||||
#undef sFadePalsHi
|
||||
#undef sTimer
|
||||
|
||||
// Unreferenced in RSE, but used here, possibly by mistake.
|
||||
void DestroySpriteAndFreeResources_Ball(struct Sprite *sprite)
|
||||
{
|
||||
DestroySpriteAndFreeResources(sprite);
|
||||
}
|
||||
|
||||
#define sSpeedX data[0]
|
||||
#define sSpeedY data[1]
|
||||
|
||||
#define sDelayTimer data[1]
|
||||
|
||||
void StartHealthboxSlideIn(u8 battlerId)
|
||||
{
|
||||
struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]];
|
||||
|
||||
healthboxSprite->data[0] = 5;
|
||||
healthboxSprite->data[1] = 0;
|
||||
healthboxSprite->sSpeedX = 5;
|
||||
healthboxSprite->sSpeedY = 0;
|
||||
healthboxSprite->x2 = 0x73;
|
||||
healthboxSprite->y2 = 0;
|
||||
healthboxSprite->callback = SpriteCB_HealthboxSlideIn;
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
{
|
||||
healthboxSprite->data[0] = -healthboxSprite->data[0];
|
||||
healthboxSprite->data[1] = -healthboxSprite->data[1];
|
||||
healthboxSprite->sSpeedX = -healthboxSprite->sSpeedX;
|
||||
healthboxSprite->sSpeedY = -healthboxSprite->sSpeedY;
|
||||
healthboxSprite->x2 = -healthboxSprite->x2;
|
||||
healthboxSprite->y2 = -healthboxSprite->y2;
|
||||
}
|
||||
|
||||
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
|
||||
if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)
|
||||
healthboxSprite->callback = SpriteCB_HealthboxSlideInDelayed;
|
||||
|
|
@ -1192,22 +1250,26 @@ void StartHealthboxSlideIn(u8 battlerId)
|
|||
|
||||
static void SpriteCB_HealthboxSlideInDelayed(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[1]++;
|
||||
if (sprite->data[1] == 20)
|
||||
sprite->sDelayTimer++;
|
||||
if (sprite->sDelayTimer == 20)
|
||||
{
|
||||
sprite->data[1] = 0;
|
||||
sprite->sDelayTimer = 0;
|
||||
sprite->callback = SpriteCB_HealthboxSlideIn;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_HealthboxSlideIn(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 -= sprite->data[0];
|
||||
sprite->y2 -= sprite->data[1];
|
||||
sprite->x2 -= sprite->sSpeedX;
|
||||
sprite->y2 -= sprite->sSpeedY;
|
||||
if (sprite->x2 == 0 && sprite->y2 == 0)
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
|
||||
#undef sSpeedX
|
||||
#undef sSpeedY
|
||||
#undef sDelayTimer
|
||||
|
||||
void DoHitAnimHealthboxEffect(u8 battlerId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
|
@ -1242,7 +1304,7 @@ void LoadBallGfx(u8 ballId)
|
|||
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]);
|
||||
}
|
||||
|
||||
|
||||
switch (ballId)
|
||||
{
|
||||
case BALL_DIVE:
|
||||
|
|
@ -1251,7 +1313,7 @@ void LoadBallGfx(u8 ballId)
|
|||
break;
|
||||
default:
|
||||
var = GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag);
|
||||
LZDecompressVram(gOpenPokeballGfx, (void *)(VRAM + 0x10100 + var * 32));
|
||||
LZDecompressVram(gOpenPokeballGfx, (void *)(OBJ_VRAM0 + 0x100 + var * 32));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1667,7 +1667,7 @@ static const struct OamData sOakSpeechNidoranFDummyOamData =
|
|||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
|
|
|
|||
|
|
@ -3859,7 +3859,7 @@ static const struct OamData sOamData_JumpMon =
|
|||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(64x64),
|
||||
.x = 0,
|
||||
|
|
@ -3876,7 +3876,7 @@ static const struct OamData sOamData_Vine16x32 =
|
|||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(16x32),
|
||||
.x = 0,
|
||||
|
|
@ -3893,7 +3893,7 @@ static const struct OamData sOamData_Vine32x32 =
|
|||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
|
|
@ -3910,7 +3910,7 @@ static const struct OamData sOamData_Vine32x16 =
|
|||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(32x16),
|
||||
.x = 0,
|
||||
|
|
@ -4064,7 +4064,7 @@ static const struct OamData sOamData_Star =
|
|||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
|
|
|
|||
|
|
@ -4133,7 +4133,8 @@ static void ShowOrHideBallIconObj(u8 invisible)
|
|||
|
||||
static void DestroyBallIconObj(void)
|
||||
{
|
||||
DestroySpriteAndFreeResources2(&gSprites[sMonSummaryScreen->ballIconSpriteId]);
|
||||
// Redundant, as DestroySpriteAndFreeResources could've been used.
|
||||
DestroySpriteAndFreeResources_Ball(&gSprites[sMonSummaryScreen->ballIconSpriteId]);
|
||||
}
|
||||
|
||||
static void PokeSum_CreateMonIconSprite(void)
|
||||
|
|
@ -5181,7 +5182,7 @@ static void PokeSum_TryPlayMonCry(void)
|
|||
{
|
||||
if (!GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_IS_EGG))
|
||||
{
|
||||
if (ShouldPlayNormalPokeCry(&sMonSummaryScreen->currentMon) == TRUE)
|
||||
if (ShouldPlayNormalMonCry(&sMonSummaryScreen->currentMon) == TRUE)
|
||||
PlayCry_ByMode(GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2), 0, CRY_MODE_NORMAL);
|
||||
else
|
||||
PlayCry_ByMode(GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2), 0, CRY_MODE_WEAK);
|
||||
|
|
|
|||
|
|
@ -566,7 +566,7 @@ static const struct OamData sOamData_Emoticons = {
|
|||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user