Document battle_controller_player.c
This commit is contained in:
@@ -97,7 +97,7 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit);
|
||||
static void DoSwitchOutAnimation(void);
|
||||
static void LinkPartnerDoMoveAnimation(void);
|
||||
static void sub_814DCCC(u8 taskId);
|
||||
static void sub_814DE9C(void);
|
||||
static void EndDrawPartyStatusSummary(void);
|
||||
|
||||
static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
|
||||
{
|
||||
@@ -190,7 +190,7 @@ static void sub_814AF54(void)
|
||||
{
|
||||
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
|
||||
{
|
||||
nullsub_25(0);
|
||||
BattleGfxSfxDummy3(MALE);
|
||||
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
|
||||
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
|
||||
LinkPartnerBufferExecCompleted();
|
||||
@@ -199,9 +199,9 @@ static void sub_814AF54(void)
|
||||
|
||||
static void sub_814AFBC(void)
|
||||
{
|
||||
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF)
|
||||
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -229,7 +229,7 @@ static void sub_814B004(void)
|
||||
|
||||
if (r6)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814AFBC;
|
||||
}
|
||||
}
|
||||
@@ -238,26 +238,26 @@ static void sub_814B0E8(void)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
|
||||
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
|
||||
&& gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
|
||||
&& gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
|
||||
&& gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
|
||||
&& ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 != 1)
|
||||
&& ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
|
||||
|
||||
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
{
|
||||
DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBattler ^ BIT_FLANK]]);
|
||||
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL);
|
||||
sub_8076918(gActiveBattler ^ BIT_FLANK);
|
||||
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
|
||||
}
|
||||
|
||||
DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBattler]]);
|
||||
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
|
||||
sub_8076918(gActiveBattler);
|
||||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814B004;
|
||||
}
|
||||
@@ -286,13 +286,13 @@ static void CompleteOnHealthbarDone(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_814B340(void)
|
||||
static void FreeMonSpriteAfterFaintAnim(void)
|
||||
{
|
||||
if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
|
||||
|
||||
nullsub_24(species);
|
||||
BattleGfxSfxDummy2(species);
|
||||
FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum);
|
||||
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
|
||||
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
@@ -364,14 +364,14 @@ static void sub_814B5A8(void)
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
|
||||
|
||||
FreeSpriteTilesByTag(0x27F9);
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
|
||||
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
|
||||
|
||||
CreateTask(c3_0802FDF4, 10);
|
||||
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
|
||||
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
|
||||
sub_8076918(gActiveBattler);
|
||||
StartHealthboxSlideIn(gActiveBattler);
|
||||
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814B4E0;
|
||||
@@ -386,10 +386,10 @@ static void sub_814B69C(void)
|
||||
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
|
||||
}
|
||||
|
||||
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
|
||||
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
|
||||
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
|
||||
{
|
||||
DestroySprite(&gSprites[gUnknown_03005D7C[gActiveBattler]]);
|
||||
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814B5A8;
|
||||
}
|
||||
}
|
||||
@@ -1044,7 +1044,7 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
|
||||
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
|
||||
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
|
||||
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
|
||||
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
|
||||
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
|
||||
|
||||
gBattlerSpriteIds[battlerId] = CreateSprite(
|
||||
@@ -1053,8 +1053,8 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
|
||||
GetBattlerSpriteDefault_Y(battlerId),
|
||||
GetBattlerSpriteSubpriority(battlerId));
|
||||
|
||||
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
|
||||
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
|
||||
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
|
||||
gSprites[gBattleControllerData[battlerId]].data[2] = battlerId;
|
||||
|
||||
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
|
||||
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
|
||||
@@ -1065,7 +1065,7 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
|
||||
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
|
||||
gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
|
||||
|
||||
gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
|
||||
gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
|
||||
}
|
||||
|
||||
static void LinkPartnerHandleReturnMonToBall(void)
|
||||
@@ -1105,6 +1105,8 @@ static void DoSwitchOutAnimation(void)
|
||||
}
|
||||
}
|
||||
|
||||
#define sSpeedX data[0]
|
||||
|
||||
static void LinkPartnerHandleDrawTrainerPic(void)
|
||||
{
|
||||
s16 xPos;
|
||||
@@ -1142,13 +1144,15 @@ static void LinkPartnerHandleDrawTrainerPic(void)
|
||||
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
|
||||
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = DISPLAY_WIDTH;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
|
||||
}
|
||||
|
||||
#undef sSpeedX
|
||||
|
||||
static void LinkPartnerHandleTrainerSlide(void)
|
||||
{
|
||||
LinkPartnerBufferExecCompleted();
|
||||
@@ -1165,6 +1169,9 @@ static void LinkPartnerHandleTrainerSlideBack(void)
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814AF54;
|
||||
}
|
||||
|
||||
#define sSpeedX data[1]
|
||||
#define sSpeedY data[2]
|
||||
|
||||
static void LinkPartnerHandleFaintAnimation(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
|
||||
@@ -1180,14 +1187,17 @@ static void LinkPartnerHandleFaintAnimation(void)
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
|
||||
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039C00;
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814B340;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
|
||||
gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#undef sSpeedX
|
||||
#undef sSpeedY
|
||||
|
||||
static void LinkPartnerHandlePaletteFade(void)
|
||||
{
|
||||
LinkPartnerBufferExecCompleted();
|
||||
@@ -1210,7 +1220,7 @@ static void LinkPartnerHandlePause(void)
|
||||
|
||||
static void LinkPartnerHandleMoveAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBattler))
|
||||
if (!IsBattleSEPlaying(gActiveBattler))
|
||||
{
|
||||
u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
|
||||
|
||||
@@ -1253,7 +1263,7 @@ static void LinkPartnerDoMoveAnimation(void)
|
||||
case 1:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
|
||||
{
|
||||
sub_805EB9C(ST_OAM_AFFINE_OFF);
|
||||
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
|
||||
DoMoveAnim(move);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
|
||||
}
|
||||
@@ -1262,7 +1272,7 @@ static void LinkPartnerDoMoveAnimation(void)
|
||||
gAnimScriptCallback();
|
||||
if (!gAnimScriptActive)
|
||||
{
|
||||
sub_805EB9C(ST_OAM_AFFINE_NORMAL);
|
||||
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
|
||||
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
|
||||
{
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
@@ -1362,7 +1372,7 @@ static void LinkPartnerHandleExpUpdate(void)
|
||||
|
||||
static void LinkPartnerHandleStatusIconUpdate(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBattler))
|
||||
if (!IsBattleSEPlaying(gActiveBattler))
|
||||
{
|
||||
u8 battlerId;
|
||||
|
||||
@@ -1375,7 +1385,7 @@ static void LinkPartnerHandleStatusIconUpdate(void)
|
||||
|
||||
static void LinkPartnerHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBattler))
|
||||
if (!IsBattleSEPlaying(gActiveBattler))
|
||||
{
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
|
||||
gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
|
||||
@@ -1529,7 +1539,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
|
||||
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
|
||||
|
||||
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_805CC00);
|
||||
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
|
||||
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
|
||||
|
||||
paletteNum = AllocSpritePalette(0xD6F9);
|
||||
@@ -1559,7 +1569,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
|
||||
gBattlerControllerFuncs[gActiveBattler] = SpriteCB_Null2;
|
||||
}
|
||||
|
||||
@@ -1605,20 +1615,20 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_814DE9C;
|
||||
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_814DE9C(void)
|
||||
static void EndDrawPartyStatusSummary(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -1647,7 +1657,7 @@ static void LinkPartnerHandleSpriteInvisibility(void)
|
||||
|
||||
static void LinkPartnerHandleBattleAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBattler))
|
||||
if (!IsBattleSEPlaying(gActiveBattler))
|
||||
{
|
||||
u8 animationId = gBattleBufferA[gActiveBattler][1];
|
||||
u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
|
||||
@@ -1663,7 +1673,7 @@ static void LinkPartnerHandleBattleAnimation(void)
|
||||
|
||||
static void LinkPartnerHandleLinkStandbyMsg(void)
|
||||
{
|
||||
sub_81851A8(&gBattleBufferA[gActiveBattler][2]);
|
||||
RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]);
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1674,13 +1684,13 @@ static void LinkPartnerHandleResetActionMoveSelection(void)
|
||||
|
||||
static void LinkPartnerHandleEndLinkBattle(void)
|
||||
{
|
||||
sub_81851A8(&gBattleBufferA[gActiveBattler][4]);
|
||||
RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]);
|
||||
gBattleOutcome = gBattleBufferA[gActiveBattler][1];
|
||||
gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
|
||||
FadeOutMapMusic(5);
|
||||
BeginFastPaletteFade(3);
|
||||
LinkPartnerBufferExecCompleted();
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_80587B0;
|
||||
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
|
||||
}
|
||||
|
||||
static void LinkPartnerCmdEnd(void)
|
||||
|
||||
Reference in New Issue
Block a user