More sync with battle controllers

This commit is contained in:
Eduardo Quezada
2022-08-20 16:13:03 -04:00
parent 2f03c4a62c
commit 616ab63d94
16 changed files with 339 additions and 274 deletions
-10
View File
@@ -521,16 +521,6 @@ struct BattleScripting
u8 field_23; u8 field_23;
}; };
enum
{
BACK_PIC_RED,
BACK_PIC_LEAF,
BACK_PIC_RS_BRENDAN,
BACK_PIC_RS_MAY,
BACK_PIC_POKEDUDE,
BACK_PIC_OLDMAN
};
struct BattleSpriteInfo struct BattleSpriteInfo
{ {
/*0x0*/ u16 invisible : 1; // 0x1 /*0x0*/ u16 invisible : 1; // 0x1
+1 -1
View File
@@ -181,7 +181,7 @@ enum
CONTROLLER_HITANIMATION, CONTROLLER_HITANIMATION,
CONTROLLER_CANTSWITCH, CONTROLLER_CANTSWITCH,
CONTROLLER_PLAYSE, CONTROLLER_PLAYSE,
CONTROLLER_PLAYFANFAREORBGM, CONTROLLER_PLAYFANFARE,
CONTROLLER_FAINTINGCRY, CONTROLLER_FAINTINGCRY,
CONTROLLER_INTROSLIDE, CONTROLLER_INTROSLIDE,
CONTROLLER_INTROTRAINERBALLTHROW, CONTROLLER_INTROTRAINERBALLTHROW,
+1 -1
View File
@@ -15,7 +15,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId); void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId);
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId); void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
void DecompressTrainerBackPalette(u16 a1, u8 a2); void DecompressTrainerBackPalette(u16 a1, u8 a2);
void BattleGfxSfxDummy3(u8 a1); void BattleGfxSfxDummy3(u8 gender);
void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId); void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId);
bool8 BattleLoadAllHealthBoxesGfx(u8 state); bool8 BattleLoadAllHealthBoxesGfx(u8 state);
void LoadBattleBarGfx(u8 arg0); void LoadBattleBarGfx(u8 arg0);
+8
View File
@@ -167,6 +167,14 @@
#define TRAINER_PIC_LADY 146 #define TRAINER_PIC_LADY 146
#define TRAINER_PIC_PAINTER 147 #define TRAINER_PIC_PAINTER 147
// The player back pics are assumed to alternate according to the gender values (MALE/FEMALE)
#define TRAINER_BACK_PIC_RED 0
#define TRAINER_BACK_PIC_LEAF 1
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN 2
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY 3
#define TRAINER_BACK_PIC_POKEDUDE 4
#define TRAINER_BACK_PIC_OLD_MAN 5
// Leftover from R/S // Leftover from R/S
#define TRAINER_SECRET_BASE 1024 #define TRAINER_SECRET_BASE 1024
+2 -2
View File
@@ -2079,7 +2079,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon)
} }
} }
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
} }
static void AnimTask_ShinySparkles(u8 taskId) static void AnimTask_ShinySparkles(u8 taskId)
@@ -2162,7 +2162,7 @@ static void AnimTask_ShinySparkles_WaitSparkles(u8 taskId)
if (gTasks[taskId].data[1] == TRUE) if (gTasks[taskId].data[1] == TRUE)
{ {
battler = gTasks[taskId].data[0]; battler = gTasks[taskId].data[0];
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
} }
DestroyTask(taskId); DestroyTask(taskId);
+71 -63
View File
@@ -88,63 +88,63 @@ static void EndDrawPartyStatusSummary(void);
static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{ {
LinkOpponentHandleGetMonData, [CONTROLLER_GETMONDATA] = LinkOpponentHandleGetMonData,
LinkOpponentHandleGetRawMonData, [CONTROLLER_GETRAWMONDATA] = LinkOpponentHandleGetRawMonData,
LinkOpponentHandleSetMonData, [CONTROLLER_SETMONDATA] = LinkOpponentHandleSetMonData,
LinkOpponentHandleSetRawMonData, [CONTROLLER_SETRAWMONDATA] = LinkOpponentHandleSetRawMonData,
LinkOpponentHandleLoadMonSprite, [CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite,
LinkOpponentHandleSwitchInAnim, [CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim,
LinkOpponentHandleReturnMonToBall, [CONTROLLER_RETURNMONTOBALL] = LinkOpponentHandleReturnMonToBall,
LinkOpponentHandleDrawTrainerPic, [CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic,
LinkOpponentHandleTrainerSlide, [CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide,
LinkOpponentHandleTrainerSlideBack, [CONTROLLER_TRAINERSLIDEBACK] = LinkOpponentHandleTrainerSlideBack,
LinkOpponentHandleFaintAnimation, [CONTROLLER_FAINTANIMATION] = LinkOpponentHandleFaintAnimation,
LinkOpponentHandlePaletteFade, [CONTROLLER_PALETTEFADE] = LinkOpponentHandlePaletteFade,
LinkOpponentHandleSuccessBallThrowAnim, [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkOpponentHandleSuccessBallThrowAnim,
LinkOpponentHandleBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = LinkOpponentHandleBallThrowAnim,
LinkOpponentHandlePause, [CONTROLLER_PAUSE] = LinkOpponentHandlePause,
LinkOpponentHandleMoveAnimation, [CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation,
LinkOpponentHandlePrintString, [CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString,
LinkOpponentHandlePrintSelectionString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkOpponentHandlePrintSelectionString,
LinkOpponentHandleChooseAction, [CONTROLLER_CHOOSEACTION] = LinkOpponentHandleChooseAction,
LinkOpponentHandleUnknownYesNoBox, [CONTROLLER_UNKNOWNYESNOBOX] = LinkOpponentHandleUnknownYesNoBox,
LinkOpponentHandleChooseMove, [CONTROLLER_CHOOSEMOVE] = LinkOpponentHandleChooseMove,
LinkOpponentHandleChooseItem, [CONTROLLER_OPENBAG] = LinkOpponentHandleChooseItem,
LinkOpponentHandleChoosePokemon, [CONTROLLER_CHOOSEPOKEMON] = LinkOpponentHandleChoosePokemon,
LinkOpponentHandleCmd23, [CONTROLLER_23] = LinkOpponentHandleCmd23,
LinkOpponentHandleHealthBarUpdate, [CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate,
LinkOpponentHandleExpUpdate, [CONTROLLER_EXPUPDATE] = LinkOpponentHandleExpUpdate,
LinkOpponentHandleStatusIconUpdate, [CONTROLLER_STATUSICONUPDATE] = LinkOpponentHandleStatusIconUpdate,
LinkOpponentHandleStatusAnimation, [CONTROLLER_STATUSANIMATION] = LinkOpponentHandleStatusAnimation,
LinkOpponentHandleStatusXor, [CONTROLLER_STATUSXOR] = LinkOpponentHandleStatusXor,
LinkOpponentHandleDataTransfer, [CONTROLLER_DATATRANSFER] = LinkOpponentHandleDataTransfer,
LinkOpponentHandleDMA3Transfer, [CONTROLLER_DMA3TRANSFER] = LinkOpponentHandleDMA3Transfer,
LinkOpponentHandlePlayBGM, [CONTROLLER_PLAYBGM] = LinkOpponentHandlePlayBGM,
LinkOpponentHandleCmd32, [CONTROLLER_32] = LinkOpponentHandleCmd32,
LinkOpponentHandleTwoReturnValues, [CONTROLLER_TWORETURNVALUES] = LinkOpponentHandleTwoReturnValues,
LinkOpponentHandleChosenMonReturnValue, [CONTROLLER_CHOSENMONRETURNVALUE] = LinkOpponentHandleChosenMonReturnValue,
LinkOpponentHandleOneReturnValue, [CONTROLLER_ONERETURNVALUE] = LinkOpponentHandleOneReturnValue,
LinkOpponentHandleOneReturnValue_Duplicate, [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkOpponentHandleOneReturnValue_Duplicate,
LinkOpponentHandleClearUnkVar, [CONTROLLER_CLEARUNKVAR] = LinkOpponentHandleClearUnkVar,
LinkOpponentHandleSetUnkVar, [CONTROLLER_SETUNKVAR] = LinkOpponentHandleSetUnkVar,
LinkOpponentHandleClearUnkFlag, [CONTROLLER_CLEARUNKFLAG] = LinkOpponentHandleClearUnkFlag,
LinkOpponentHandleToggleUnkFlag, [CONTROLLER_TOGGLEUNKFLAG] = LinkOpponentHandleToggleUnkFlag,
LinkOpponentHandleHitAnimation, [CONTROLLER_HITANIMATION] = LinkOpponentHandleHitAnimation,
LinkOpponentHandleCantSwitch, [CONTROLLER_CANTSWITCH] = LinkOpponentHandleCantSwitch,
LinkOpponentHandlePlaySE, [CONTROLLER_PLAYSE] = LinkOpponentHandlePlaySE,
LinkOpponentHandlePlayFanfare, [CONTROLLER_PLAYFANFARE] = LinkOpponentHandlePlayFanfare,
LinkOpponentHandleFaintingCry, [CONTROLLER_FAINTINGCRY] = LinkOpponentHandleFaintingCry,
LinkOpponentHandleIntroSlide, [CONTROLLER_INTROSLIDE] = LinkOpponentHandleIntroSlide,
LinkOpponentHandleIntroTrainerBallThrow, [CONTROLLER_INTROTRAINERBALLTHROW] = LinkOpponentHandleIntroTrainerBallThrow,
LinkOpponentHandleDrawPartyStatusSummary, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkOpponentHandleDrawPartyStatusSummary,
LinkOpponentHandleHidePartyStatusSummary, [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkOpponentHandleHidePartyStatusSummary,
LinkOpponentHandleEndBounceEffect, [CONTROLLER_ENDBOUNCE] = LinkOpponentHandleEndBounceEffect,
LinkOpponentHandleSpriteInvisibility, [CONTROLLER_SPRITEINVISIBILITY] = LinkOpponentHandleSpriteInvisibility,
LinkOpponentHandleBattleAnimation, [CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation,
LinkOpponentHandleLinkStandbyMsg, [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg,
LinkOpponentHandleResetActionMoveSelection, [CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection,
LinkOpponentHandleEndLinkBattle, [CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle,
LinkOpponentCmdEnd [CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd
}; };
static void LinkOpponentDummy(void) static void LinkOpponentDummy(void)
@@ -187,7 +187,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
@@ -208,15 +208,18 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
{ {
healthboxAnimDone = TRUE; healthboxAnimDone = TRUE;
} }
if (IsCryPlayingOrClearCrySongs()) if (IsCryPlayingOrClearCrySongs())
healthboxAnimDone = FALSE; healthboxAnimDone = FALSE;
if (healthboxAnimDone) if (healthboxAnimDone)
{ {
if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
|| !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
return; return;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
@@ -334,7 +337,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void)
static void CompleteOnInactiveTextPrinter(void) static void CompleteOnInactiveTextPrinter(void)
{ {
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(B_WIN_MSG))
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -382,7 +385,7 @@ static void SwitchIn_ShowHealthbox(void)
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
@@ -463,7 +466,7 @@ static void LinkOpponentHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -1032,15 +1035,19 @@ static void LinkOpponentHandleLoadMonSprite(void)
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim;
} }
@@ -1131,6 +1138,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
xPos = 152; xPos = 152;
else // first mon else // first mon
xPos = 200; xPos = 200;
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
@@ -1611,7 +1619,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
if (gBattleBufferA[gActiveBattler][2] != 0) if (gBattleBufferA[gActiveBattler][2] != 0)
{ {
+191 -132
View File
@@ -51,12 +51,12 @@ static void LinkPartnerHandleTwoReturnValues(void);
static void LinkPartnerHandleChosenMonReturnValue(void); static void LinkPartnerHandleChosenMonReturnValue(void);
static void LinkPartnerHandleOneReturnValue(void); static void LinkPartnerHandleOneReturnValue(void);
static void LinkPartnerHandleOneReturnValue_Duplicate(void); static void LinkPartnerHandleOneReturnValue_Duplicate(void);
static void LinkPartnerHandleCmd37(void); static void LinkPartnerHandleClearUnkVar(void);
static void LinkPartnerHandleCmd38(void); static void LinkPartnerHandleSetUnkVar(void);
static void LinkPartnerHandleCmd39(void); static void LinkPartnerHandleClearUnkFlag(void);
static void LinkPartnerHandleCmd40(void); static void LinkPartnerHandleToggleUnkFlag(void);
static void LinkPartnerHandleHitAnimation(void); static void LinkPartnerHandleHitAnimation(void);
static void LinkPartnerHandleCmd42(void); static void LinkPartnerHandleCantSwitch(void);
static void LinkPartnerHandlePlaySE(void); static void LinkPartnerHandlePlaySE(void);
static void LinkPartnerHandlePlayFanfare(void); static void LinkPartnerHandlePlayFanfare(void);
static void LinkPartnerHandleFaintingCry(void); static void LinkPartnerHandleFaintingCry(void);
@@ -69,7 +69,7 @@ static void LinkPartnerHandleSpriteInvisibility(void);
static void LinkPartnerHandleBattleAnimation(void); static void LinkPartnerHandleBattleAnimation(void);
static void LinkPartnerHandleLinkStandbyMsg(void); static void LinkPartnerHandleLinkStandbyMsg(void);
static void LinkPartnerHandleResetActionMoveSelection(void); static void LinkPartnerHandleResetActionMoveSelection(void);
static void LinkPartnerHandleCmd55(void); static void LinkPartnerHandleEndLinkBattle(void);
static void LinkPartnerCmdEnd(void); static void LinkPartnerCmdEnd(void);
static void LinkPartnerBufferRunCommand(void); static void LinkPartnerBufferRunCommand(void);
@@ -85,63 +85,63 @@ static void EndDrawPartyStatusSummary(void);
static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{ {
LinkPartnerHandleGetMonData, [CONTROLLER_GETMONDATA] = LinkPartnerHandleGetMonData,
LinkPartnerHandleGetRawMonData, [CONTROLLER_GETRAWMONDATA] = LinkPartnerHandleGetRawMonData,
LinkPartnerHandleSetMonData, [CONTROLLER_SETMONDATA] = LinkPartnerHandleSetMonData,
LinkPartnerHandleSetRawMonData, [CONTROLLER_SETRAWMONDATA] = LinkPartnerHandleSetRawMonData,
LinkPartnerHandleLoadMonSprite, [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite,
LinkPartnerHandleSwitchInAnim, [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim,
LinkPartnerHandleReturnMonToBall, [CONTROLLER_RETURNMONTOBALL] = LinkPartnerHandleReturnMonToBall,
LinkPartnerHandleDrawTrainerPic, [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic,
LinkPartnerHandleTrainerSlide, [CONTROLLER_TRAINERSLIDE] = LinkPartnerHandleTrainerSlide,
LinkPartnerHandleTrainerSlideBack, [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack,
LinkPartnerHandleFaintAnimation, [CONTROLLER_FAINTANIMATION] = LinkPartnerHandleFaintAnimation,
LinkPartnerHandlePaletteFade, [CONTROLLER_PALETTEFADE] = LinkPartnerHandlePaletteFade,
LinkPartnerHandleSuccessBallThrowAnim, [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkPartnerHandleSuccessBallThrowAnim,
LinkPartnerHandleBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = LinkPartnerHandleBallThrowAnim,
LinkPartnerHandlePause, [CONTROLLER_PAUSE] = LinkPartnerHandlePause,
LinkPartnerHandleMoveAnimation, [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation,
LinkPartnerHandlePrintString, [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString,
LinkPartnerHandlePrintSelectionString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkPartnerHandlePrintSelectionString,
LinkPartnerHandleChooseAction, [CONTROLLER_CHOOSEACTION] = LinkPartnerHandleChooseAction,
LinkPartnerHandleUnknownYesNoBox, [CONTROLLER_UNKNOWNYESNOBOX] = LinkPartnerHandleUnknownYesNoBox,
LinkPartnerHandleChooseMove, [CONTROLLER_CHOOSEMOVE] = LinkPartnerHandleChooseMove,
LinkPartnerHandleChooseItem, [CONTROLLER_OPENBAG] = LinkPartnerHandleChooseItem,
LinkPartnerHandleChoosePokemon, [CONTROLLER_CHOOSEPOKEMON] = LinkPartnerHandleChoosePokemon,
LinkPartnerHandleCmd23, [CONTROLLER_23] = LinkPartnerHandleCmd23,
LinkPartnerHandleHealthBarUpdate, [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate,
LinkPartnerHandleExpUpdate, [CONTROLLER_EXPUPDATE] = LinkPartnerHandleExpUpdate,
LinkPartnerHandleStatusIconUpdate, [CONTROLLER_STATUSICONUPDATE] = LinkPartnerHandleStatusIconUpdate,
LinkPartnerHandleStatusAnimation, [CONTROLLER_STATUSANIMATION] = LinkPartnerHandleStatusAnimation,
LinkPartnerHandleStatusXor, [CONTROLLER_STATUSXOR] = LinkPartnerHandleStatusXor,
LinkPartnerHandleDataTransfer, [CONTROLLER_DATATRANSFER] = LinkPartnerHandleDataTransfer,
LinkPartnerHandleDMA3Transfer, [CONTROLLER_DMA3TRANSFER] = LinkPartnerHandleDMA3Transfer,
LinkPartnerHandlePlayBGM, [CONTROLLER_PLAYBGM] = LinkPartnerHandlePlayBGM,
LinkPartnerHandleCmd32, [CONTROLLER_32] = LinkPartnerHandleCmd32,
LinkPartnerHandleTwoReturnValues, [CONTROLLER_TWORETURNVALUES] = LinkPartnerHandleTwoReturnValues,
LinkPartnerHandleChosenMonReturnValue, [CONTROLLER_CHOSENMONRETURNVALUE] = LinkPartnerHandleChosenMonReturnValue,
LinkPartnerHandleOneReturnValue, [CONTROLLER_ONERETURNVALUE] = LinkPartnerHandleOneReturnValue,
LinkPartnerHandleOneReturnValue_Duplicate, [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkPartnerHandleOneReturnValue_Duplicate,
LinkPartnerHandleCmd37, [CONTROLLER_CLEARUNKVAR] = LinkPartnerHandleClearUnkVar,
LinkPartnerHandleCmd38, [CONTROLLER_SETUNKVAR] = LinkPartnerHandleSetUnkVar,
LinkPartnerHandleCmd39, [CONTROLLER_CLEARUNKFLAG] = LinkPartnerHandleClearUnkFlag,
LinkPartnerHandleCmd40, [CONTROLLER_TOGGLEUNKFLAG] = LinkPartnerHandleToggleUnkFlag,
LinkPartnerHandleHitAnimation, [CONTROLLER_HITANIMATION] = LinkPartnerHandleHitAnimation,
LinkPartnerHandleCmd42, [CONTROLLER_CANTSWITCH] = LinkPartnerHandleCantSwitch,
LinkPartnerHandlePlaySE, [CONTROLLER_PLAYSE] = LinkPartnerHandlePlaySE,
LinkPartnerHandlePlayFanfare, [CONTROLLER_PLAYFANFARE] = LinkPartnerHandlePlayFanfare,
LinkPartnerHandleFaintingCry, [CONTROLLER_FAINTINGCRY] = LinkPartnerHandleFaintingCry,
LinkPartnerHandleIntroSlide, [CONTROLLER_INTROSLIDE] = LinkPartnerHandleIntroSlide,
LinkPartnerHandleIntroTrainerBallThrow, [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow,
LinkPartnerHandleDrawPartyStatusSummary, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary,
LinkPartnerHandleHidePartyStatusSummary, [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkPartnerHandleHidePartyStatusSummary,
LinkPartnerHandleEndBounceEffect, [CONTROLLER_ENDBOUNCE] = LinkPartnerHandleEndBounceEffect,
LinkPartnerHandleSpriteInvisibility, [CONTROLLER_SPRITEINVISIBILITY] = LinkPartnerHandleSpriteInvisibility,
LinkPartnerHandleBattleAnimation, [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation,
LinkPartnerHandleLinkStandbyMsg, [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg,
LinkPartnerHandleResetActionMoveSelection, [CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection,
LinkPartnerHandleCmd55, [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle,
LinkPartnerCmdEnd [CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd
}; };
static void LinkPartnerDummy(void) static void LinkPartnerDummy(void)
@@ -157,7 +157,7 @@ static void LinkPartnerBufferRunCommand(void)
{ {
if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{ {
if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkPartnerBufferCommands)) if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands))
sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]](); sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
else else
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -174,7 +174,7 @@ static void FreeTrainerSpriteAfterSlide(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{ {
BattleGfxSfxDummy3(0); BattleGfxSfxDummy3(MALE);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -183,7 +183,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -192,21 +192,23 @@ static void Intro_DelayAndEnd(void)
static void Intro_WaitForHealthbox(void) static void Intro_WaitForHealthbox(void)
{ {
bool32 var = FALSE; bool32 finished = FALSE;
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{ {
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
var = TRUE; finished = TRUE;
} }
else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy) && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy)
{ {
var = TRUE; finished = TRUE;
} }
if (IsCryPlayingOrClearCrySongs()) if (IsCryPlayingOrClearCrySongs())
var = FALSE; finished = FALSE;
if (var)
if (finished)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd;
@@ -216,29 +218,33 @@ static void Intro_WaitForHealthbox(void)
static void Intro_ShowHealthbox(void) static void Intro_ShowHealthbox(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
&& ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1)
{ {
if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
{ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
}
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox; SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
} }
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox;
} }
} }
@@ -253,6 +259,7 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1) if (hpValue != -1)
{ {
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
@@ -288,7 +295,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void)
static void CompleteOnInactiveTextPrinter(void) static void CompleteOnInactiveTextPrinter(void)
{ {
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(B_WIN_MSG))
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -305,9 +312,9 @@ static void DoHitAnimBlinkSpriteEffect(void)
} }
else else
{ {
if (!(gSprites[spriteId].data[1] % 4)) if ((gSprites[spriteId].data[1] % 4) == 0)
gSprites[spriteId].invisible ^= 1; gSprites[spriteId].invisible ^= 1;
++gSprites[spriteId].data[1]; gSprites[spriteId].data[1]++;
} }
} }
@@ -317,6 +324,7 @@ static void SwitchIn_ShowSubstitute(void)
{ {
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd; gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd;
} }
} }
@@ -324,7 +332,9 @@ static void SwitchIn_ShowSubstitute(void)
static void SwitchIn_WaitAndEnd(void) static void SwitchIn_WaitAndEnd(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
}
} }
static void SwitchIn_ShowHealthbox(void) static void SwitchIn_ShowHealthbox(void)
@@ -332,9 +342,11 @@ static void SwitchIn_ShowHealthbox(void)
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -349,8 +361,11 @@ static void SwitchIn_ShowHealthbox(void)
static void SwitchIn_TryShinyAnim(void) static void SwitchIn_TryShinyAnim(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{ {
@@ -394,21 +409,21 @@ static void LinkPartnerHandleGetMonData(void)
u8 monToCheck; u8 monToCheck;
s32 i; s32 i;
if (!gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] == 0)
{ {
size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData); size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
} }
else else
{ {
monToCheck = gBattleBufferA[gActiveBattler][2]; monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (monToCheck & 1) if (monToCheck & 1)
size += CopyLinkPartnerMonData(i, monData + size); size += CopyLinkPartnerMonData(i, monData + size);
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -427,7 +442,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
case REQUEST_ALL_BATTLE: case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
{ {
battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
@@ -458,7 +473,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
StringCopy_Nickname(battleMon.nickname, nickname); StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon; src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); ++size) for (size = 0; size < sizeof(battleMon); size++)
dst[size] = src[size]; dst[size] = src[size];
break; break;
case REQUEST_SPECIES_BATTLE: case REQUEST_SPECIES_BATTLE:
@@ -474,14 +489,14 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 2; size = 2;
break; break;
case REQUEST_MOVES_PP_BATTLE: case REQUEST_MOVES_PP_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
{ {
moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
} }
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
src = (u8 *)(&moveData); src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); ++size) for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size]; dst[size] = src[size];
break; break;
case REQUEST_MOVE1_BATTLE: case REQUEST_MOVE1_BATTLE:
@@ -494,10 +509,10 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 2; size = 2;
break; break;
case REQUEST_PP_DATA_BATTLE: case REQUEST_PP_DATA_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
++size; size++;
break; break;
case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE2_BATTLE:
@@ -714,6 +729,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 1; size = 1;
break; break;
} }
return size; return size;
} }
@@ -727,14 +743,14 @@ static void LinkPartnerHandleSetMonData(void)
u8 monToCheck; u8 monToCheck;
u8 i; u8 i;
if (!gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] == 0)
{ {
SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]); SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]);
} }
else else
{ {
monToCheck = gBattleBufferA[gActiveBattler][2]; monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (monToCheck & 1) if (monToCheck & 1)
SetLinkPartnerMonData(i); SetLinkPartnerMonData(i);
@@ -758,7 +774,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
@@ -797,7 +813,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
break; break;
case REQUEST_MOVES_PP_BATTLE: case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
@@ -958,6 +974,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
break; break;
} }
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
} }
@@ -966,8 +983,9 @@ static void LinkPartnerHandleSetRawMonData(void)
u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
u8 i; u8 i;
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
dst[i] = gBattleBufferA[gActiveBattler][3 + i]; dst[i] = gBattleBufferA[gActiveBattler][3 + i];
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -978,6 +996,7 @@ static void LinkPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
@@ -1007,23 +1026,29 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
} }
static void LinkPartnerHandleReturnMonToBall(void) static void LinkPartnerHandleReturnMonToBall(void)
{ {
if (!gBattleBufferA[gActiveBattler][1]) if (gBattleBufferA[gActiveBattler][1] == 0)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1044,6 +1069,7 @@ static void DoSwitchOutAnimation(void)
case 0: case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1;
break; break;
case 1: case 1:
@@ -1057,6 +1083,8 @@ static void DoSwitchOutAnimation(void)
} }
} }
#define sSpeedX data[0]
static void LinkPartnerHandleDrawTrainerPic(void) static void LinkPartnerHandleDrawTrainerPic(void)
{ {
s16 xPos; s16 xPos;
@@ -1066,22 +1094,32 @@ static void LinkPartnerHandleDrawTrainerPic(void)
xPos = 90; xPos = 90;
else // First mon, on the left. else // First mon, on the left.
xPos = 32; xPos = 32;
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else else
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender;
}
DecompressTrainerBackPalette(trainerPicId, gActiveBattler); DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
#undef sSpeedX
static void LinkPartnerHandleTrainerSlide(void) static void LinkPartnerHandleTrainerSlide(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -1098,13 +1136,16 @@ static void LinkPartnerHandleTrainerSlideBack(void)
gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide;
} }
#define sSpeedX data[1]
#define sSpeedY data[2]
static void LinkPartnerHandleFaintAnimation(void) static void LinkPartnerHandleFaintAnimation(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
{ {
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++;
} }
else else
{ {
@@ -1113,14 +1154,17 @@ static void LinkPartnerHandleFaintAnimation(void)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim;
} }
} }
} }
#undef sSpeedX
#undef sSpeedY
static void LinkPartnerHandlePaletteFade(void) static void LinkPartnerHandlePaletteFade(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -1175,7 +1219,7 @@ static void LinkPartnerDoMoveAnimation(void)
{ {
case 0: case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
{ {
gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
@@ -1271,6 +1315,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
LoadBattleBarGfx(0); LoadBattleBarGfx(0);
hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP) if (hpVal != INSTANT_HP_BAR_DROP)
{ {
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
@@ -1284,6 +1329,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
} }
@@ -1360,25 +1406,25 @@ static void LinkPartnerHandleOneReturnValue_Duplicate(void)
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd37(void) static void LinkPartnerHandleClearUnkVar(void)
{ {
gUnusedControllerStruct.unk = 0; gUnusedControllerStruct.unk = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd38(void) static void LinkPartnerHandleSetUnkVar(void)
{ {
gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd39(void) static void LinkPartnerHandleClearUnkFlag(void)
{ {
gUnusedControllerStruct.flag = 0; gUnusedControllerStruct.flag = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd40(void) static void LinkPartnerHandleToggleUnkFlag(void)
{ {
gUnusedControllerStruct.flag ^= 1; gUnusedControllerStruct.flag ^= 1;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -1399,7 +1445,7 @@ static void LinkPartnerHandleHitAnimation(void)
} }
} }
static void LinkPartnerHandleCmd42(void) static void LinkPartnerHandleCantSwitch(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1412,6 +1458,7 @@ static void LinkPartnerHandlePlaySE(void)
pan = SOUND_PAN_ATTACKER; pan = SOUND_PAN_ATTACKER;
else else
pan = SOUND_PAN_TARGET; pan = SOUND_PAN_TARGET;
PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1444,26 +1491,38 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
u32 trainerPicId; u32 trainerPicId;
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F9); paletteNum = AllocSpritePalette(0xD6F9);
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else else
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender;
}
LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy; gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy;
} }
@@ -1472,7 +1531,7 @@ static void Task_StartSendOutAnim(u8 taskId)
{ {
if (gTasks[taskId].data[1] < 24) if (gTasks[taskId].data[1] < 24)
{ {
++gTasks[taskId].data[1]; gTasks[taskId].data[1]++;
} }
else else
{ {
@@ -1502,7 +1561,7 @@ static void Task_StartSendOutAnim(u8 taskId)
static void LinkPartnerHandleDrawPartyStatusSummary(void) static void LinkPartnerHandleDrawPartyStatusSummary(void)
{ {
if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1512,7 +1571,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2]) // Skip delay on battle start if (gBattleBufferA[gActiveBattler][2] != 0) // Skip delay on battle start
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1574,7 +1633,7 @@ static void LinkPartnerHandleResetActionMoveSelection(void)
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd55(void) static void LinkPartnerHandleEndLinkBattle(void)
{ {
gBattleOutcome = gBattleBufferA[gActiveBattler][1]; gBattleOutcome = gBattleBufferA[gActiveBattler][1];
FadeOutMapMusic(5); FadeOutMapMusic(5);
+16 -16
View File
@@ -443,9 +443,9 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
@@ -987,7 +987,7 @@ static void OakOldManHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
@@ -1575,20 +1575,20 @@ static void OakOldManHandleDrawTrainerPic(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler); DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30); 30);
} }
else else
{ {
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_OLD_MAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_OLD_MAN].size) * 4 + 80,
30); 30);
} }
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1602,20 +1602,20 @@ static void OakOldManHandleTrainerSlide(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler); DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30); 30);
} }
else else
{ {
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_OLD_MAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_OLD_MAN].size) * 4 + 80,
30); 30);
} }
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -2087,7 +2087,7 @@ static void OakOldManHandleIntroTrainerBallThrow(void)
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8); paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
+9 -9
View File
@@ -200,7 +200,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
@@ -226,9 +226,9 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -282,7 +282,7 @@ static void TryShinyAnimAfterMonAnim(void)
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
@@ -383,7 +383,7 @@ static void SwitchIn_ShowHealthbox(void)
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -447,7 +447,7 @@ static void OpponentHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
@@ -765,7 +765,7 @@ static void OpponentHandleGetRawMonData(void)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
dst[i] = src[i]; dst[i] = src[i];
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst); BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
@@ -1027,7 +1027,7 @@ static void OpponentHandleLoadMonSprite(void)
DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
y = GetGhostSpriteDefault_Y(gActiveBattler); y = GetGhostSpriteDefault_Y(gActiveBattler);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = TRUE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = TRUE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = TRUE;
} }
else else
{ {
@@ -1682,7 +1682,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
if (gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2])
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2)
+10 -10
View File
@@ -863,7 +863,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
@@ -891,9 +891,9 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -942,7 +942,7 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
@@ -1505,7 +1505,7 @@ static void PlayerHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -1824,7 +1824,7 @@ void PlayerHandleGetRawMonData(void)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
dst[i] = src[i]; dst[i] = src[i];
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst); BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -2176,13 +2176,13 @@ static void PlayerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
else else
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
} }
else else
{ {
trainerPicId = gSaveBlock2Ptr->playerGender + BACK_PIC_RED; trainerPicId = gSaveBlock2Ptr->playerGender;
} }
DecompressTrainerBackPalette(trainerPicId, gActiveBattler); DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
@@ -2774,7 +2774,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2] != 0) if (gBattleBufferA[gActiveBattler][2] != 0)
+12 -12
View File
@@ -240,7 +240,7 @@ static void CompleteOnBattlerSpritePosX_0(void)
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
@@ -280,7 +280,7 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
@@ -424,9 +424,9 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
@@ -730,7 +730,7 @@ static void PokedudeHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
} }
@@ -1351,11 +1351,11 @@ static void PokedudeHandleDrawTrainerPic(void)
{ {
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_POKEDUDE].size) * 4 + 80,
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
@@ -1384,11 +1384,11 @@ static void PokedudeHandleDrawTrainerPic(void)
static void PokedudeHandleTrainerSlide(void) static void PokedudeHandleTrainerSlide(void)
{ {
DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_POKEDUDE].size) * 4 + 80,
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96;
@@ -1859,7 +1859,7 @@ static void PokedudeHandleIntroTrainerBallThrow(void)
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8); paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
+1 -1
View File
@@ -1117,7 +1117,7 @@ void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId) void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM; sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFARE;
sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[1] = songId;
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0; sBattleBuffersTransferData[3] = 0;
+1 -1
View File
@@ -452,7 +452,7 @@ void DecompressTrainerBackPalette(u16 index, u8 palette)
LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20); LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20);
} }
void BattleGfxSfxDummy3(u8 a1) void BattleGfxSfxDummy3(u8 gender)
{ {
} }
+6 -6
View File
@@ -1,10 +1,10 @@
const struct MonCoords gTrainerBackPicCoords[] = { const struct MonCoords gTrainerBackPicCoords[] = {
{.size = 8, .y_offset = 5}, [TRAINER_BACK_PIC_RED] = {.size = 8, .y_offset = 5},
{.size = 8, .y_offset = 5}, [TRAINER_BACK_PIC_LEAF] = {.size = 8, .y_offset = 5},
{.size = 8, .y_offset = 4}, [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4}, [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4}, [TRAINER_BACK_PIC_POKEDUDE] = {.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4} [TRAINER_BACK_PIC_OLD_MAN] = {.size = 8, .y_offset = 4}
}; };
const struct CompressedSpriteSheet gTrainerBackPicTable[] = { const struct CompressedSpriteSheet gTrainerBackPicTable[] = {
+8 -8
View File
@@ -1506,9 +1506,9 @@ const struct SpriteTemplate gSpriteTemplates_Battlers[] =
}, },
}; };
const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] = static const struct SpriteTemplate sTrainerBackSpriteTemplates[] =
{ {
{ [TRAINER_BACK_PIC_RED] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1517,7 +1517,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_LEAF] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1526,7 +1526,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1535,7 +1535,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1544,7 +1544,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_POKEDUDE] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1553,7 +1553,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_OLD_MAN] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -2755,7 +2755,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
gMultiuseSpriteTemplate.paletteTag = trainerSpriteId; gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{ {
gMultiuseSpriteTemplate = gSpriteTemplates_TrainerBackpics[trainerSpriteId]; gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerSpriteId];
gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId];
} }
else else
+2 -2
View File
@@ -202,9 +202,9 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
} }
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, battler); DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, battler);
else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, battler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, battler);
else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
else else