Document old man batttle controller

This commit is contained in:
PikalaxALT
2021-03-15 14:27:50 -04:00
parent 67cdab24f8
commit 2f4f63afdb
44 changed files with 672 additions and 646 deletions
+1 -1
View File
@@ -6,4 +6,4 @@ gBattlerControllerFuncs
gHealthboxSpriteIds gHealthboxSpriteIds
gMultiUsePlayerCursor gMultiUsePlayerCursor
gNumberOfMovesToChoose gNumberOfMovesToChoose
gUnknown_3004FFC gBattleControllerData
+22 -25
View File
@@ -370,15 +370,15 @@ struct BattleStruct
{ {
u8 turnEffectsTracker; u8 turnEffectsTracker;
u8 turnEffectsBattlerId; u8 turnEffectsBattlerId;
u8 filler2; u8 filler2; // unused
u8 turnCountersTracker; u8 turnCountersTracker;
u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access. u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
u8 moveTarget[MAX_BATTLERS_COUNT]; u8 moveTarget[MAX_BATTLERS_COUNT];
u8 expGetterMonId; u8 expGetterMonId;
u8 field_11; u8 field_11; // unuused
u8 wildVictorySong; u8 wildVictorySong;
u8 dynamicMoveType; u8 dynamicMoveType;
u8 wrappedBy[4]; u8 wrappedBy[MAX_BATTLERS_COUNT];
u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // 6 mons, each of them knowing 4 moves u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // 6 mons, each of them knowing 4 moves
u8 focusPunchBattlerId; u8 focusPunchBattlerId;
u8 battlerPreventingSwitchout; u8 battlerPreventingSwitchout;
@@ -387,17 +387,17 @@ struct BattleStruct
u8 switchInAbilitiesCounter; u8 switchInAbilitiesCounter;
u8 faintedActionsState; u8 faintedActionsState;
u8 faintedActionsBattlerId; u8 faintedActionsBattlerId;
u8 field_4F; // balign 2
u16 expValue; u16 expValue;
u8 field_52; u8 scriptPartyIdx; // for printing the nickname
u8 sentInPokes; u8 sentInPokes;
bool8 selectionScriptFinished[MAX_BATTLERS_COUNT]; bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
u8 field_58[4]; u8 battlerPartyIndexes[MAX_BATTLERS_COUNT];
u8 monToSwitchIntoId[MAX_BATTLERS_COUNT]; u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_60[4][3]; u8 battlerPartyOrders[MAX_BATTLERS_COUNT][3];
u8 runTries; u8 runTries;
u8 caughtMonNick[11]; u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
u8 field_78; u8 field_78; // unused
u8 safariGoNearCounter; u8 safariGoNearCounter;
u8 safariPkblThrowCounter; u8 safariPkblThrowCounter;
u8 safariEscapeFactor; u8 safariEscapeFactor;
@@ -407,21 +407,18 @@ struct BattleStruct
u8 formToChangeInto; u8 formToChangeInto;
u8 chosenMovePositions[MAX_BATTLERS_COUNT]; u8 chosenMovePositions[MAX_BATTLERS_COUNT];
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT]; u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
u8 field_88; u8 field_88; // unused
u8 field_89; u8 field_89; // unused
u8 field_8A; u8 field_8A; // unused
u8 field_8B; u8 playerPartyIdx;
u8 field_8C; u8 field_8C; // unused
u8 field_8D; u8 field_8D; // unused
u8 stringMoveType; u8 stringMoveType;
u8 expGetterBattlerId; u8 expGetterBattlerId;
u8 field_90; u8 field_90; // unused
u8 field_91; u8 absentBattlerFlags;
u8 AI_monToSwitchIntoId[2]; u8 AI_monToSwitchIntoId[2];
u8 field_94; u8 simulatedInputState[4]; // used by Oak/Old Man/Pokedude controllers
u8 field_95;
u8 field_96;
u8 field_97;
u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // ask gamefreak why they declared it that way u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // ask gamefreak why they declared it that way
u16 hpOnSwitchout[2]; u16 hpOnSwitchout[2];
u8 abilityPreventingSwitchout; u8 abilityPreventingSwitchout;
@@ -544,7 +541,7 @@ struct BattleAnimationInfo
u8 field_6; u8 field_6;
u8 field_7; u8 field_7;
u8 ballThrowCaseId; u8 ballThrowCaseId;
u8 field_9_x1 : 1; u8 healthboxSlideInStarted : 1;
u8 field_9_x2 : 1; u8 field_9_x2 : 1;
u8 field_9_x1C : 3; u8 field_9_x1C : 3;
u8 field_9_x20 : 1; u8 field_9_x20 : 1;
@@ -566,7 +563,7 @@ struct BattleHealthboxInfo
u8 statusAnimActive : 1; // x10 u8 statusAnimActive : 1; // x10
u8 animFromTableActive : 1; // x20 u8 animFromTableActive : 1; // x20
u8 specialAnimActive : 1; //x40 u8 specialAnimActive : 1; //x40
u8 flag_x80 : 1; u8 triedShinyMonAnim : 1;
u8 field_1_x1 : 1; u8 field_1_x1 : 1;
u8 field_1_x1E : 5; u8 field_1_x1E : 5;
u8 field_1_x40 : 1; u8 field_1_x40 : 1;
@@ -578,7 +575,7 @@ struct BattleHealthboxInfo
u8 matrixNum; u8 matrixNum;
u8 shadowSpriteId; u8 shadowSpriteId;
u8 field_8; u8 field_8;
u8 field_9; u8 introEndDelay;
u8 field_A; u8 field_A;
u8 field_B; u8 field_B;
}; };
@@ -696,7 +693,7 @@ extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
extern u8 gCurrentActionFuncId; extern u8 gCurrentActionFuncId;
extern u8 gCurrMovePos; extern u8 gCurrMovePos;
extern u8 gChosenMovePos; extern u8 gChosenMovePos;
extern u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT]; extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT]; extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
extern u16 gDynamicBasePower; extern u16 gDynamicBasePower;
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT]; extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
+3
View File
@@ -445,6 +445,9 @@ void AnimTask_GetFrustrationPowerLevel(u8 taskId);
void sub_80767F0(void); void sub_80767F0(void);
u8 GetBattlerSpriteSubpriority(u8 battlerId); u8 GetBattlerSpriteSubpriority(u8 battlerId);
u8 GetBattlerSpriteBGPriority(u8 battlerId); u8 GetBattlerSpriteBGPriority(u8 battlerId);
// Returns 2 if player left or opp right
// Returns 1 if player right or opp left
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId); u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10); u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10);
void DestroySpriteAndFreeResources_(struct Sprite *sprite); void DestroySpriteAndFreeResources_(struct Sprite *sprite);
+24 -11
View File
@@ -235,14 +235,14 @@ void BtlController_EmitCmd55(u8 bufferId, u8 arg1);
void nullsub_13(void); void nullsub_13(void);
void SetControllerToPlayer(void); void SetControllerToPlayer(void);
void PlayerHandleGetRawMonData(void); void PlayerHandleGetRawMonData(void);
void sub_80335F8(struct Sprite *sprite); void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite);
void SetCB2ToReshowScreenAfterMenu(void); void SetCB2ToReshowScreenAfterMenu(void);
void SetCB2ToReshowScreenAfterMenu2(void); void SetCB2ToReshowScreenAfterMenu2(void);
void c3_0802FDF4(u8 taskId); void Task_PlayerController_RestoreBgmAfterCry(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused); void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos); void ActionSelectionDestroyCursorAt(u8 cursorPos);
void InitMoveSelectionsVarsAndStrings(void); void InitMoveSelectionsVarsAndStrings(void);
void sub_802F6A8(void); void SetBattleEndCallbacks(void);
void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
void MoveSelectionDestroyCursorAt(u8 cursorPos); void MoveSelectionDestroyCursorAt(u8 cursorPos);
void HandleInputChooseMove(void); void HandleInputChooseMove(void);
@@ -260,14 +260,27 @@ void InitPokedudePartyAndOpponent(void);
// oak and old man controller // oak and old man controller
void SetControllerToOakOrOldMan(void); void SetControllerToOakOrOldMan(void);
bool8 sub_80EB2E0(u8);
void sub_80EB2F4(u8); // These flags are set to signal that the indicated message
void sub_80E8570(void); // was already emitted
void sub_80E85C0(void);
void sub_80E8598(void); // Inflicting damage is key
void sub_80E7988(void); #define FIRST_BATTLE_MSG_FLAG_INFLICT_DMG 0x1
void sub_80EB30C(void); // Lowering stats is advantageous
void sub_80EB524(void); #define FIRST_BATTLE_MSG_FLAG_STAT_CHG 0x2
// Keep an eye on your HP
#define FIRST_BATTLE_MSG_FLAG_HP_RESTORE 0x4
//
#define FIRST_BATTLE_MSG_FLAG_PARTY_MENU 0x8
bool8 BtlCtrl_OakOldMan_TestState2Flag(u8 mask);
void BtlCtrl_OakOldMan_SetState2Flag(u8 mask);
void PrintOakText_InflictingDamageIsKey(void);
void PrintOakText_HowDisappointing(void);
void PrintOakText_OakNoRunningFromATrainer(void);
void OakOldManHandleInputChooseMove(void);
void BtlCtrl_DrawVoiceoverMessageFrame(void);
void BtlCtrl_RemoveVoiceoverMessageFrame(void);
// link opponent controller // link opponent controller
void SetControllerToLinkOpponent(void); void SetControllerToLinkOpponent(void);
+3 -3
View File
@@ -3,8 +3,8 @@
void AllocateBattleSpritesData(void); void AllocateBattleSpritesData(void);
void FreeBattleSpritesData(void); void FreeBattleSpritesData(void);
void sub_8033E3C(struct Sprite *sprite); void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite);
void sub_8033EEC(struct Sprite *sprite); void SpriteCB_TrainerSlideIn(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status); void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument); bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument);
void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId); void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId);
@@ -31,7 +31,7 @@ void ClearBehindSubstituteBit(u8 battlerId);
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId); void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void); void BattleStopLowHpSound(void);
void HandleBattleLowHpMusicChange(void); void HandleBattleLowHpMusicChange(void);
void sub_8035450(u8 affineMode); void SetBattlerSpriteAffineMode(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void); void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite); void SpriteCB_SetInvisible(struct Sprite *sprite);
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species); void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
+1 -1
View File
@@ -77,7 +77,7 @@ void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite);
void SpriteCb_HideAsMoveTarget(struct Sprite *sprite); void SpriteCb_HideAsMoveTarget(struct Sprite *sprite);
void SpriteCB_AllyMon(struct Sprite *sprite); void SpriteCB_AllyMon(struct Sprite *sprite);
void sub_8012100(struct Sprite *sprite); void sub_8012100(struct Sprite *sprite);
void sub_8012110(struct Sprite *sprite); void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude); void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude);
void EndBounceEffect(u8 battler, u8 which); void EndBounceEffect(u8 battler, u8 which);
void SpriteCB_PlayerThrowInit(struct Sprite *sprite); void SpriteCB_PlayerThrowInit(struct Sprite *sprite);
+3 -3
View File
@@ -199,7 +199,7 @@ struct BattleMsgData
u16 lastItem; u16 lastItem;
u8 lastAbility; u8 lastAbility;
u8 scrActive; u8 scrActive;
u8 unk1605E; u8 bakScriptPartyIdx;
u8 hpScale; u8 hpScale;
u8 itemEffectBattler; u8 itemEffectBattler;
u8 moveType; u8 moveType;
@@ -213,8 +213,8 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
void BattleHandleAddTextPrinter(const u8* text, u8 arg1); void BattleHandleAddTextPrinter(const u8* text, u8 arg1);
void SetPpNumbersPaletteInMoveSelection(void); void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
void BattlePutTextOnWindow(const u8* text, u8 arg1); void BattlePutTextOnWindow(const u8* text, u8 windowId_flags);
bool8 sub_80D89B0(u16); bool8 BattleStringShouldBeColored(u16);
extern struct BattleMsgData *gBattleMsgDataPtr; extern struct BattleMsgData *gBattleMsgDataPtr;
+2 -2
View File
@@ -251,14 +251,14 @@ void sub_800E0E8(void);
bool8 sub_800A520(void); bool8 sub_800A520(void);
bool8 sub_8010500(void); bool8 sub_8010500(void);
void sub_800DFB4(u8, u8); void sub_800DFB4(u8, u8);
void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void); void SetLinkStandbyCallback(void);
void SetWirelessCommType1(void); void SetWirelessCommType1(void);
void sub_8009734(void); void sub_8009734(void);
void sub_800A620(void); void sub_800A620(void);
void LinkRfu_DestroyIdleTask(void); void LinkRfu_DestroyIdleTask(void);
u8 sub_800ABAC(void); u8 sub_800ABAC(void);
u8 sub_800ABBC(void); u8 sub_800ABBC(void);
void Link_TryStartSend5FFF(void); void SetCloseLinkCallback(void);
void OpenLink(void); void OpenLink(void);
bool8 IsLinkMaster(void); bool8 IsLinkMaster(void);
void CheckShouldAdvanceLinkState(void); void CheckShouldAdvanceLinkState(void);
+3 -3
View File
@@ -72,9 +72,9 @@ void ChooseMonForTradingBoard(u8 menuType, MainCallback callback);
void ChooseMonForMoveTutor(void); void ChooseMonForMoveTutor(void);
void ChooseMonForWirelessMinigame(void); void ChooseMonForWirelessMinigame(void);
void OpenPartyMenuInTutorialBattle(u8 partyAction); void OpenPartyMenuInTutorialBattle(u8 partyAction);
void OpenPartyMenuInBattle(void); void Pokedude_OpenPartyMenuInBattle(void);
void ChooseMonForInBattleItem(void); void Pokedude_ChooseMonForInBattleItem(void);
void sub_81279E0(void); void EnterPartyFromItemMenuInBattle(void);
void BufferBattlePartyCurrentOrder(void); void BufferBattlePartyCurrentOrder(void);
void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId); void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId);
void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2); void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2);
+1 -1
View File
@@ -3,7 +3,7 @@
#include "global.h" #include "global.h"
void nullsub_44(void); void ReshowBattleScreenDummy(void);
void ReshowBattleScreenAfterMenu(void); void ReshowBattleScreenAfterMenu(void);
#endif // GUARD_RESHOW_BATTLE_SCREEN_H #endif // GUARD_RESHOW_BATTLE_SCREEN_H
+2 -2
View File
@@ -338,12 +338,12 @@ extern const u8 gText_SwitchedPkmnItem[];
extern const u8 gText_BagFullCouldNotRemoveItem[]; extern const u8 gText_BagFullCouldNotRemoveItem[];
extern const u8 gText_PkmnCantParticipate[]; extern const u8 gText_PkmnCantParticipate[];
extern const u8 gText_CancelParticipation[]; extern const u8 gText_CancelParticipation[];
extern const u8 gUnknown_8417494[]; extern const u8 gText_OakThisIsListOfPokemon[];
extern const u8 gMenuText_Confirm[]; extern const u8 gMenuText_Confirm[];
extern const u8 gText_MaleSymbol[]; extern const u8 gText_MaleSymbol[];
extern const u8 gText_FemaleSymbol[]; extern const u8 gText_FemaleSymbol[];
extern const u8 gText_Slash[]; extern const u8 gText_Slash[];
extern const u8 gUnknown_8417457[]; extern const u8 gText_OakImportantToGetToKnowPokemonThroughly[];
extern const u8 gText_PkmnNotHolding[]; extern const u8 gText_PkmnNotHolding[];
extern const u8 gText_PCMailboxFull[]; extern const u8 gText_PCMailboxFull[];
extern const u8 gText_MailSentToPC[]; extern const u8 gText_MailSentToPC[];
+1 -1
View File
@@ -2054,7 +2054,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon)
u8 taskId1, taskId2; u8 taskId1, taskId2;
isShiny = FALSE; isShiny = FALSE;
gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1; gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = TRUE;
otId = GetMonData(mon, MON_DATA_OT_ID); otId = GetMonData(mon, MON_DATA_OT_ID);
personality = GetMonData(mon, MON_DATA_PERSONALITY); personality = GetMonData(mon, MON_DATA_PERSONALITY);
+33 -33
View File
@@ -187,9 +187,9 @@ static void sub_803A70C(void)
static void sub_803A79C(void) static void sub_803A79C(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
} }
@@ -217,12 +217,12 @@ static void sub_803A7E4(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
|| !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
return; return;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
} }
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
@@ -233,7 +233,7 @@ static void sub_803A7E4(void)
{ {
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
} }
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = sub_803A79C; gBattlerControllerFuncs[gActiveBattler] = sub_803A79C;
} }
} }
@@ -243,19 +243,19 @@ static void sub_803A9CC(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim)
TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == 3) if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == 3)
{ {
if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 1) if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 1)
return; return;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
} }
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
@@ -263,14 +263,14 @@ static void sub_803A9CC(void)
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES));
} }
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattleSpritesDataPtr->animationData->field_9_x1 = 0; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
gBattlerControllerFuncs[gActiveBattler] = sub_803A7E4; gBattlerControllerFuncs[gActiveBattler] = sub_803A7E4;
} }
} }
@@ -280,16 +280,16 @@ static void sub_803AC14(void)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{ {
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
} }
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
} }
@@ -375,10 +375,10 @@ static void sub_803AF28(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
@@ -391,13 +391,13 @@ static void sub_803AF28(void)
static void sub_803AFFC(void) static void sub_803AFFC(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattlerControllerFuncs[gActiveBattler] = sub_803AF28; gBattlerControllerFuncs[gActiveBattler] = sub_803AF28;
} }
@@ -1046,21 +1046,21 @@ static void sub_803C550(u8 battlerId, bool8 dontClearSubstituteBit)
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_3004FFC[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[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
} }
static void LinkOpponentHandleReturnMonToBall(void) static void LinkOpponentHandleReturnMonToBall(void)
@@ -1167,7 +1167,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -1271,7 +1271,7 @@ static void LinkOpponentDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
sub_8035450(0); SetBattlerSpriteAffineMode(0);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1280,7 +1280,7 @@ static void LinkOpponentDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
sub_8035450(1); SetBattlerSpriteAffineMode(1);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{ {
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1309,7 +1309,7 @@ static void LinkOpponentHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
@@ -1537,7 +1537,7 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
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->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_19; gBattlerControllerFuncs[gActiveBattler] = nullsub_19;
} }
@@ -1667,7 +1667,7 @@ static void LinkOpponentHandleCmd55(void)
FadeOutMapMusic(5); FadeOutMapMusic(5);
BeginFastPaletteFade(3); BeginFastPaletteFade(3);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8; gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
} }
static void LinkOpponentCmdEnd(void) static void LinkOpponentCmdEnd(void)
+26 -26
View File
@@ -182,9 +182,9 @@ static void sub_80D42A8(void)
static void sub_80D4310(void) static void sub_80D4310(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
} }
@@ -207,7 +207,7 @@ static void sub_80D4358(void)
var = FALSE; var = FALSE;
if (var) if (var)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = sub_80D4310; gBattlerControllerFuncs[gActiveBattler] = sub_80D4310;
} }
} }
@@ -217,25 +217,25 @@ static void sub_80D443C(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{ {
if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 != 1) if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
} }
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->field_9_x1 = 0; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
gBattlerControllerFuncs[gActiveBattler] = sub_80D4358; gBattlerControllerFuncs[gActiveBattler] = sub_80D4358;
} }
} }
@@ -330,11 +330,11 @@ static void sub_80D484C(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(c3_0802FDF4, 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);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
@@ -347,13 +347,13 @@ static void sub_80D484C(void)
static void sub_80D4944(void) static void sub_80D4944(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 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[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
gBattlerControllerFuncs[gActiveBattler] = sub_80D484C; gBattlerControllerFuncs[gActiveBattler] = sub_80D484C;
} }
} }
@@ -1004,20 +1004,20 @@ static void sub_80D5F40(u8 battlerId, bool8 dontClearSubstituteBit)
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_3004FFC[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[gUnknown_3004FFC[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)
@@ -1077,7 +1077,7 @@ static void LinkPartnerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -1114,7 +1114,7 @@ static void LinkPartnerHandleFaintAnimation(void)
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
gBattlerControllerFuncs[gActiveBattler] = sub_80D4640; gBattlerControllerFuncs[gActiveBattler] = sub_80D4640;
} }
} }
@@ -1184,7 +1184,7 @@ static void LinkPartnerDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
sub_8035450(0); SetBattlerSpriteAffineMode(0);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1193,7 +1193,7 @@ static void LinkPartnerDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
sub_8035450(1); SetBattlerSpriteAffineMode(1);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{ {
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1222,7 +1222,7 @@ static void LinkPartnerHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
@@ -1448,7 +1448,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.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]], sub_80335F8); 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
@@ -1463,7 +1463,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
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->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_77; gBattlerControllerFuncs[gActiveBattler] = nullsub_77;
} }
@@ -1579,7 +1579,7 @@ static void LinkPartnerHandleCmd55(void)
FadeOutMapMusic(5); FadeOutMapMusic(5);
BeginFastPaletteFade(3); BeginFastPaletteFade(3);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8; gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
} }
static void LinkPartnerCmdEnd(void) static void LinkPartnerCmdEnd(void)
+168 -162
View File
@@ -15,6 +15,7 @@
#include "battle_interface.h" #include "battle_interface.h"
#include "battle_message.h" #include "battle_message.h"
#include "reshow_battle_screen.h" #include "reshow_battle_screen.h"
#include "battle_string_ids.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/items.h" #include "constants/items.h"
@@ -80,21 +81,21 @@ static void OakOldManBufferRunCommand(void);
static void OakOldManBufferExecCompleted(void); static void OakOldManBufferExecCompleted(void);
static void WaitForMonSelection(void); static void WaitForMonSelection(void);
static void CompleteWhenChoseItem(void); static void CompleteWhenChoseItem(void);
static void sub_80E8704(void); static void PrintOakText_KeepAnEyeOnHP(void);
static void sub_80E7CD8(void); static void Intro_WaitForShinyAnimAndHealthbox(void);
static void sub_80E835C(void); static void PrintOakText_ForPetesSake(void);
static void Task_LaunchLvlUpAnim(u8 taskId); static void Task_LaunchLvlUpAnim(u8 taskId);
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
static void CompleteOnInactiveTextPrinter2(void); static void CompleteOnInactiveTextPrinter2(void);
static void Task_PrepareToGiveExpWithExpBar(u8 taskId); static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
static void sub_80E804C(u8 taskId); static void Task_GiveExpWithExpBar(u8 taskId);
static void Task_UpdateLvlInHealthbox(u8 taskId); static void Task_UpdateLvlInHealthbox(u8 taskId);
static void sub_80E85D4(const u8 *text, u8 a1); static void PrintOakTextWithMainBgDarkened(const u8 *text, u8 delay);
static u32 CopyOakOldManMonData(u8 monId, u8 *dst); static u32 CopyOakOldManMonData(u8 monId, u8 *dst);
static void SetOakOldManMonData(u8 monId); static void SetOakOldManMonData(u8 monId);
static void OakOldManDoMoveAnimation(void); static void OakOldManDoMoveAnimation(void);
static void HandleInputChooseAction(void); static void HandleInputChooseAction(void);
static void sub_80EB0A8(u8 taskId); static void Task_StartSendOutAnim(u8 taskId);
static void (*const sOakOldManBufferCommands[CONTROLLER_CMDS_COUNT])(void) = static void (*const sOakOldManBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{ {
@@ -164,10 +165,10 @@ static void nullsub_81(void)
void SetControllerToOakOrOldMan(void) void SetControllerToOakOrOldMan(void)
{ {
gBattlerControllerFuncs[gActiveBattler] = OakOldManBufferRunCommand; gBattlerControllerFuncs[gActiveBattler] = OakOldManBufferRunCommand;
gBattleStruct->field_94 = 0; gBattleStruct->simulatedInputState[0] = 0;
gBattleStruct->field_95 = 0; gBattleStruct->simulatedInputState[1] = 0;
gBattleStruct->field_96 = 0; gBattleStruct->simulatedInputState[2] = 0;
gBattleStruct->field_97 = 0; gBattleStruct->simulatedInputState[3] = 0;
} }
static void OakOldManBufferRunCommand(void) static void OakOldManBufferRunCommand(void)
@@ -183,6 +184,7 @@ static void OakOldManBufferRunCommand(void)
static void HandleInputChooseAction(void) static void HandleInputChooseAction(void)
{ {
// Like player, but specifically for Rival in Oak's Lab
u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
@@ -274,27 +276,30 @@ static void HandleInputChooseAction(void)
} }
} }
static void sub_80E7844(void) static void SimulateInputChooseAction(void)
{ {
switch (gBattleStruct->field_94) // Old Man
switch (gBattleStruct->simulatedInputState[0])
{ {
case 0: case 0:
gBattleStruct->field_96 = 64; gBattleStruct->simulatedInputState[2] = 64;
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
// fall through // fall through
case 1: case 1:
if (--gBattleStruct->field_96 == 0) if (--gBattleStruct->simulatedInputState[2] == 0)
{ {
// Move cursor to BAG
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
ActionSelectionDestroyCursorAt(0); ActionSelectionDestroyCursorAt(0);
ActionSelectionCreateCursorAt(1, 0); ActionSelectionCreateCursorAt(1, 0);
gBattleStruct->field_96 = 64; gBattleStruct->simulatedInputState[2] = 64;
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 2: case 2:
if (--gBattleStruct->field_96 == 0) if (--gBattleStruct->simulatedInputState[2] == 0)
{ {
// Open bag
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
@@ -315,7 +320,7 @@ static void CompleteOnInactiveTextPrinter(void)
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
static void sub_80E7930(void) static void OakOldManSetBattleEndCallbacks(void)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
@@ -331,7 +336,7 @@ static void CompleteOnSpecialAnimDone(void)
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
void sub_80E7988(void) void OakOldManHandleInputChooseMove(void)
{ {
HandleInputChooseMove(); HandleInputChooseMove();
if (!(gBattleControllerExecFlags & gBitTable[gActiveBattler])) if (!(gBattleControllerExecFlags & gBitTable[gActiveBattler]))
@@ -345,8 +350,8 @@ static void OpenPartyMenuToChooseMon(void)
u8 caseId; u8 caseId;
gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0]; caseId = gTasks[gBattleControllerData[gActiveBattler]].data[0];
DestroyTask(gUnknown_3004FFC[gActiveBattler]); DestroyTask(gBattleControllerData[gActiveBattler]);
FreeAllWindowBuffers(); FreeAllWindowBuffers();
OpenPartyMenuInTutorialBattle(caseId); OpenPartyMenuInTutorialBattle(caseId);
} }
@@ -369,7 +374,7 @@ static void OpenBagAndChooseItem(void)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
nullsub_44(); ReshowBattleScreenDummy();
FreeAllWindowBuffers(); FreeAllWindowBuffers();
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
CB2_BagMenuFromBattle(); CB2_BagMenuFromBattle();
@@ -382,12 +387,12 @@ static void CompleteWhenChoseItem(void)
{ {
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{ {
if (!sub_80EB2E0(4) if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_HP_RESTORE)
&& gSpecialVar_ItemId == ITEM_POTION && gSpecialVar_ItemId == ITEM_POTION
&& gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) && gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
sub_80EB2F4(4); BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_HP_RESTORE);
gBattlerControllerFuncs[gActiveBattler] = sub_80E8704; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_KeepAnEyeOnHP;
} }
else else
{ {
@@ -397,37 +402,37 @@ static void CompleteWhenChoseItem(void)
} }
} }
static void sub_80E7B4C(void) static void Intro_TryShinyAnimShowHealthbox(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{ {
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
} }
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->field_9_x1 = 0; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
gBattlerControllerFuncs[gActiveBattler] = sub_80E7CD8; gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
} }
} }
static void sub_80E7CD8(void) static void Intro_WaitForShinyAnimAndHealthbox(void)
{ {
bool32 r4 = FALSE; bool32 r4 = FALSE;
@@ -437,15 +442,15 @@ static void sub_80E7CD8(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(c3_0802FDF4, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
gBattlerControllerFuncs[gActiveBattler] = sub_80E835C; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_ForPetesSake;
} }
} }
@@ -515,10 +520,10 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
PlaySE(SE_EXP); PlaySE(SE_EXP);
gTasks[taskId].func = sub_80E804C; gTasks[taskId].func = Task_GiveExpWithExpBar;
} }
static void sub_80E804C(u8 taskId) static void Task_GiveExpWithExpBar(u8 taskId)
{ {
if (gTasks[taskId].tExpTask_frames < 13) if (gTasks[taskId].tExpTask_frames < 13)
{ {
@@ -588,7 +593,7 @@ static void Task_UpdateLvlInHealthbox(u8 taskId)
{ {
u8 monIndex = gTasks[taskId].tExpTask_monId; u8 monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
else else
@@ -608,7 +613,7 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
DestroyTask(taskId); DestroyTask(taskId);
} }
static void sub_80E82F4(void) static void FreeMonSpriteAfterFaintAnim(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT) if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
{ {
@@ -619,46 +624,46 @@ static void sub_80E82F4(void)
} }
} }
static void sub_80E835C(void) static void PrintOakText_ForPetesSake(void)
{ {
u32 mask; u32 mask;
switch (gBattleStruct->field_94) switch (gBattleStruct->simulatedInputState[0])
{ {
case 0: case 0:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
DoLoadHealthboxPalsForLevelUp(&gBattleStruct->field_95, &gBattleStruct->field_97, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); DoLoadHealthboxPalsForLevelUp(&gBattleStruct->simulatedInputState[1], &gBattleStruct->simulatedInputState[3], GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT));
BeginNormalPaletteFade(0xFFFFFF7E, BeginNormalPaletteFade(0xFFFFFF7E,
4, 4,
0, 0,
8, 8,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 1: case 1:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
sub_80EB30C(); BtlCtrl_DrawVoiceoverMessageFrame();
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 2: case 2:
BattleStringExpandPlaceholdersToDisplayedString(gText_ForPetesSake); BattleStringExpandPlaceholdersToDisplayedString(gText_ForPetesSake);
BattlePutTextOnWindow(gDisplayedStringBattle, 24); BattlePutTextOnWindow(gDisplayedStringBattle, 24);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
break; break;
case 3: case 3:
if (!IsTextPrinterActive(24)) if (!IsTextPrinterActive(24))
{ {
mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16;
BeginNormalPaletteFade(mask, BeginNormalPaletteFade(mask,
4, 4,
8, 8,
0, 0,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 4: case 4:
@@ -666,19 +671,19 @@ static void sub_80E835C(void)
{ {
BattleStringExpandPlaceholdersToDisplayedString(gText_TheTrainerThat); BattleStringExpandPlaceholdersToDisplayedString(gText_TheTrainerThat);
BattlePutTextOnWindow(gDisplayedStringBattle, 24); BattlePutTextOnWindow(gDisplayedStringBattle, 24);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 5: case 5:
if (!IsTextPrinterActive(24)) if (!IsTextPrinterActive(24))
{ {
mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16;
BeginNormalPaletteFade(mask, BeginNormalPaletteFade(mask,
4, 4,
0, 0,
8, 8,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 6: case 6:
@@ -686,7 +691,7 @@ static void sub_80E835C(void)
{ {
BattleStringExpandPlaceholdersToDisplayedString(gText_TryBattling); BattleStringExpandPlaceholdersToDisplayedString(gText_TryBattling);
BattlePutTextOnWindow(gDisplayedStringBattle, 24); BattlePutTextOnWindow(gDisplayedStringBattle, 24);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 7: case 7:
@@ -697,79 +702,80 @@ static void sub_80E835C(void)
8, 8,
0, 0,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 8: case 8:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
DoFreeHealthboxPalsForLevelUp(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); DoFreeHealthboxPalsForLevelUp(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT));
sub_80EB524(); BtlCtrl_RemoveVoiceoverMessageFrame();
gBattleStruct->field_94 = 0; gBattleStruct->simulatedInputState[0] = 0;
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
break; break;
} }
} }
void sub_80E8570(void) void PrintOakText_InflictingDamageIsKey(void)
{ {
sub_80E85D4(gText_InflictingDamageIsKey, 1); PrintOakTextWithMainBgDarkened(gText_InflictingDamageIsKey, 1);
} }
static void sub_80E8584(void) static void PrintOakText_LoweringStats(void)
{ {
sub_80E85D4(gText_LoweringStats, 64); PrintOakTextWithMainBgDarkened(gText_LoweringStats, 64);
} }
void sub_80E8598(void) void PrintOakText_OakNoRunningFromATrainer(void)
{ {
sub_80E85D4(gText_OakNoRunningFromATrainer, 1); PrintOakTextWithMainBgDarkened(gText_OakNoRunningFromATrainer, 1);
} }
static void sub_80E85AC(void) static void PrintOakText_WinEarnsPrizeMoney(void)
{ {
sub_80E85D4(gText_WinEarnsPrizeMoney, 64); PrintOakTextWithMainBgDarkened(gText_WinEarnsPrizeMoney, 64);
} }
void sub_80E85C0(void) void PrintOakText_HowDisappointing(void)
{ {
sub_80E85D4(gText_HowDissapointing, 64); PrintOakTextWithMainBgDarkened(gText_HowDissapointing, 64);
} }
static void sub_80E85D4(const u8 *text, u8 a2) static void PrintOakTextWithMainBgDarkened(const u8 *text, u8 delay)
{ {
switch (gBattleStruct->field_94) // If delay is 0, it's treated as 256.
switch (gBattleStruct->simulatedInputState[0])
{ {
case 0: case 0:
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(0))
{ {
gBattleStruct->field_97 = a2; gBattleStruct->simulatedInputState[3] = delay;
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 1: case 1:
if (--gBattleStruct->field_97 == 0) if (--gBattleStruct->simulatedInputState[3] == 0)
{ {
BeginNormalPaletteFade(0xFFFFFF7E, BeginNormalPaletteFade(0xFFFFFF7E,
4, 4,
0, 0,
8, 8,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 2: case 2:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
sub_80EB30C(); BtlCtrl_DrawVoiceoverMessageFrame();
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 3: case 3:
BattleStringExpandPlaceholdersToDisplayedString(text); BattleStringExpandPlaceholdersToDisplayedString(text);
BattlePutTextOnWindow(gDisplayedStringBattle, 24); BattlePutTextOnWindow(gDisplayedStringBattle, 24);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
break; break;
case 4: case 4:
if (!IsTextPrinterActive(24)) if (!IsTextPrinterActive(24))
@@ -779,76 +785,76 @@ static void sub_80E85D4(const u8 *text, u8 a2)
8, 8,
0, 0,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 5: case 5:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
sub_80EB524(); BtlCtrl_RemoveVoiceoverMessageFrame();
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
else else
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
gBattleCommunication[MSG_DISPLAY] = 0; gBattleCommunication[MSG_DISPLAY] = 0;
gBattleStruct->field_94 = 0; gBattleStruct->simulatedInputState[0] = 0;
} }
break; break;
} }
} }
static void sub_80E8704(void) static void PrintOakText_KeepAnEyeOnHP(void)
{ {
u32 mask; u32 mask;
switch (gBattleStruct->field_94) switch (gBattleStruct->simulatedInputState[0])
{ {
case 0: case 0:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
DoLoadHealthboxPalsForLevelUp(&gBattleStruct->field_95, &gBattleStruct->field_97, gActiveBattler); DoLoadHealthboxPalsForLevelUp(&gBattleStruct->simulatedInputState[1], &gBattleStruct->simulatedInputState[3], gActiveBattler);
BeginNormalPaletteFade(0xFFFFFF7E, BeginNormalPaletteFade(0xFFFFFF7E,
4, 4,
0, 0,
8, 8,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 1: case 1:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16;
BeginNormalPaletteFade(mask, BeginNormalPaletteFade(mask,
4, 4,
8, 8,
0, 0,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 2: case 2:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
sub_80EB30C(); BtlCtrl_DrawVoiceoverMessageFrame();
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 3: case 3:
BattleStringExpandPlaceholdersToDisplayedString(gText_KeepAnEyeOnHP); BattleStringExpandPlaceholdersToDisplayedString(gText_KeepAnEyeOnHP);
BattlePutTextOnWindow(gDisplayedStringBattle, 24); BattlePutTextOnWindow(gDisplayedStringBattle, 24);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
break; break;
case 4: case 4:
if (!IsTextPrinterActive(24)) if (!IsTextPrinterActive(24))
{ {
mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16;
BeginNormalPaletteFade(mask, BeginNormalPaletteFade(mask,
4, 4,
0, 0,
8, 8,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 5: case 5:
@@ -859,16 +865,16 @@ static void sub_80E8704(void)
8, 8,
0, 0,
RGB_BLACK); RGB_BLACK);
++gBattleStruct->field_94; ++gBattleStruct->simulatedInputState[0];
} }
break; break;
case 6: case 6:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
sub_80EB524(); BtlCtrl_RemoveVoiceoverMessageFrame();
BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId); BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
gBattleStruct->field_94 = 0; gBattleStruct->simulatedInputState[0] = 0;
} }
break; break;
} }
@@ -915,7 +921,7 @@ static void DoHitAnimBlinkSpriteEffect(void)
} }
} }
static void sub_80E89C4(void) static void DoSwitchOutAnimation(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
@@ -1554,7 +1560,7 @@ static void OakOldManHandleReturnMonToBall(void)
if (gBattleBufferA[gActiveBattler][1] == 0) if (gBattleBufferA[gActiveBattler][1] == 0)
{ {
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON);
gBattlerControllerFuncs[gActiveBattler] = sub_80E89C4; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
} }
else else
{ {
@@ -1580,15 +1586,15 @@ static void OakOldManHandleDrawTrainerPic(void)
{ {
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, (8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80,
30); 30);
} }
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -1607,15 +1613,15 @@ static void OakOldManHandleTrainerSlide(void)
{ {
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, (8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80,
30); 30);
} }
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
} }
@@ -1641,8 +1647,8 @@ static void OakOldManHandleFaintAnimation(void)
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
gBattlerControllerFuncs[gActiveBattler] = sub_80E82F4; gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim;
} }
} }
} }
@@ -1711,7 +1717,7 @@ static void OakOldManDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
sub_8035450(0); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1720,7 +1726,7 @@ static void OakOldManDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
sub_8035450(1); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
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);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3;
@@ -1752,30 +1758,30 @@ static void OakOldManHandlePrintString(void)
else else
{ {
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 64); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
switch (*stringId) switch (*stringId)
{ {
case 216: case STRINGID_PKMNSSTATCHANGED4:
if (!sub_80EB2E0(2)) if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_STAT_CHG))
{ {
sub_80EB2F4(2); BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_STAT_CHG);
gBattlerControllerFuncs[gActiveBattler] = sub_80E8584; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_LoweringStats;
return; return;
} }
break; break;
case 30: case STRINGID_PLAYERGOTMONEY:
gBattlerControllerFuncs[gActiveBattler] = sub_80E85AC; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_WinEarnsPrizeMoney;
return; return;
case 383: case STRINGID_TRAINER1WINTEXT:
gBattlerControllerFuncs[gActiveBattler] = sub_80E85C0; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_HowDisappointing;
return; return;
case 227: case STRINGID_DONTLEAVEBIRCH:
gBattlerControllerFuncs[gActiveBattler] = sub_80E8598; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_OakNoRunningFromATrainer;
return; return;
} }
} }
@@ -1791,7 +1797,7 @@ static void OakOldManHandlePrintSelectionString(void)
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
static void sub_80EA690(void) static void HandleChooseActionAfterDma3(void)
{ {
if (!IsDma3ManagerBusyWithBgCopy()) if (!IsDma3ManagerBusyWithBgCopy())
{ {
@@ -1800,7 +1806,7 @@ static void sub_80EA690(void)
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction;
else else
gBattlerControllerFuncs[gActiveBattler] = sub_80E7844; gBattlerControllerFuncs[gActiveBattler] = SimulateInputChooseAction;
} }
} }
@@ -1808,7 +1814,7 @@ static void OakOldManHandleChooseAction(void)
{ {
s32 i; s32 i;
gBattlerControllerFuncs[gActiveBattler] = sub_80EA690; gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
BattlePutTextOnWindow(gText_EmptyString3, 0); BattlePutTextOnWindow(gText_EmptyString3, 0);
BattlePutTextOnWindow(gText_BattleMenu, 2); BattlePutTextOnWindow(gText_BattleMenu, 2);
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; ++i)
@@ -1826,13 +1832,13 @@ static void OakOldManHandleUnknownYesNoBox(void)
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
static void sub_80EA798(void) static void OakHandleChooseMove_WaitDma3(void)
{ {
if (!IsDma3ManagerBusyWithBgCopy()) if (!IsDma3ManagerBusyWithBgCopy())
{ {
gBattle_BG0_X = 0; gBattle_BG0_X = 0;
gBattle_BG0_Y = 320; gBattle_BG0_Y = 320;
gBattlerControllerFuncs[gActiveBattler] = sub_80E7988; gBattlerControllerFuncs[gActiveBattler] = OakOldManHandleInputChooseMove;
} }
} }
@@ -1841,19 +1847,19 @@ static void OakOldManHandleChooseMove(void)
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
InitMoveSelectionsVarsAndStrings(); InitMoveSelectionsVarsAndStrings();
gBattlerControllerFuncs[gActiveBattler] = sub_80EA798; gBattlerControllerFuncs[gActiveBattler] = OakHandleChooseMove_WaitDma3;
} }
else else
{ {
switch (gBattleStruct->field_95) switch (gBattleStruct->simulatedInputState[1])
{ {
case 0: case 0:
InitMoveSelectionsVarsAndStrings(); InitMoveSelectionsVarsAndStrings();
++gBattleStruct->field_95; ++gBattleStruct->simulatedInputState[1];
gBattleStruct->field_97 = 80; gBattleStruct->simulatedInputState[3] = 80;
// fall through // fall through
case 1: case 1:
if (--gBattleStruct->field_97 == 0) if (--gBattleStruct->simulatedInputState[3] == 0)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
BtlController_EmitTwoReturnValues(1, 10, 0x100); BtlController_EmitTwoReturnValues(1, 10, 0x100);
@@ -1879,10 +1885,10 @@ static void OakOldManHandleChoosePokemon(void)
{ {
s32 i; s32 i;
gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
*(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->playerPartyIdx) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
@@ -1906,13 +1912,13 @@ static void OakOldManHandleHealthBarUpdate(void)
{ {
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal);
} }
else else
{ {
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT);
} }
@@ -2078,16 +2084,16 @@ static void OakOldManHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.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]], sub_80335F8); 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[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(sub_80EB0A8, 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->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_13; gBattlerControllerFuncs[gActiveBattler] = nullsub_13;
} }
else else
@@ -2098,30 +2104,30 @@ static void OakOldManHandleIntroTrainerBallThrow(void)
} }
} }
static void sub_80EAF34(u8 battlerId) static void StartSendOutAnim(u8 battlerId)
{ {
u16 species; u16 species;
gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE; gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_3004FFC[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[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
} }
static void sub_80EB0A8(u8 taskId) static void Task_StartSendOutAnim(u8 taskId)
{ {
if (gTasks[taskId].data[1] < 31) if (gTasks[taskId].data[1] < 31)
{ {
@@ -2133,8 +2139,8 @@ static void sub_80EB0A8(u8 taskId)
gActiveBattler = gTasks[taskId].data[0]; gActiveBattler = gTasks[taskId].data[0];
gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
sub_80EAF34(gActiveBattler); StartSendOutAnim(gActiveBattler);
gBattlerControllerFuncs[gActiveBattler] = sub_80E7B4C; gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox;
gActiveBattler = savedActiveBattler; gActiveBattler = savedActiveBattler;
DestroyTask(taskId); DestroyTask(taskId);
} }
@@ -2213,24 +2219,24 @@ static void OakOldManHandleCmd55(void)
BeginFastPaletteFade(3); BeginFastPaletteFade(3);
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK) if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK)
gBattlerControllerFuncs[gActiveBattler] = sub_80E7930; gBattlerControllerFuncs[gActiveBattler] = OakOldManSetBattleEndCallbacks;
} }
static void OakOldManCmdEnd(void) static void OakOldManCmdEnd(void)
{ {
} }
bool8 sub_80EB2E0(u8 a1) bool8 BtlCtrl_OakOldMan_TestState2Flag(u8 mask)
{ {
return gBattleStruct->field_96 & a1; return gBattleStruct->simulatedInputState[2] & mask;
} }
void sub_80EB2F4(u8 a1) void BtlCtrl_OakOldMan_SetState2Flag(u8 mask)
{ {
gBattleStruct->field_96 |= a1; gBattleStruct->simulatedInputState[2] |= mask;
} }
void sub_80EB30C(void) void BtlCtrl_DrawVoiceoverMessageFrame(void)
{ {
u32 width = 0x1A; u32 width = 0x1A;
u32 pal = 7; u32 pal = 7;
@@ -2263,7 +2269,7 @@ void sub_80EB30C(void)
FillBgTilemapBufferRect(0, BG_TILE_V_FLIP(0x34), 0x1D, 0x13, 1, 1, pal); FillBgTilemapBufferRect(0, BG_TILE_V_FLIP(0x34), 0x1D, 0x13, 1, 1, pal);
} }
void sub_80EB524(void) void BtlCtrl_RemoveVoiceoverMessageFrame(void)
{ {
u32 pal = 0; u32 pal = 0;
u32 width = 0x1A; u32 width = 0x1A;
+37 -37
View File
@@ -199,9 +199,9 @@ static void sub_8035B58(void)
static void sub_8035BE8(void) static void sub_8035BE8(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
} }
@@ -224,32 +224,32 @@ static void sub_8035C30(void)
var = FALSE; var = FALSE;
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
m4aMPlayContinue(&gMPlayInfo_BGM); m4aMPlayContinue(&gMPlayInfo_BGM);
else else
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = sub_8035BE8; gBattlerControllerFuncs[gActiveBattler] = sub_8035BE8;
} }
} }
static void sub_8035DF0(void) static void sub_8035DF0(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{ {
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
@@ -257,14 +257,14 @@ static void sub_8035DF0(void)
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES));
} }
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattleSpritesDataPtr->animationData->field_9_x1 = 0; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
gBattlerControllerFuncs[gActiveBattler] = sub_8035C30; gBattlerControllerFuncs[gActiveBattler] = sub_8035C30;
} }
} }
@@ -274,16 +274,16 @@ static void sub_8035FE8(void)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{ {
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
} }
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
} }
@@ -300,10 +300,10 @@ static void CompleteOnHealthbarDone(void)
} }
else else
{ {
if (!sub_80EB2E0(1) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) if (!BtlCtrl_OakOldMan_TestState2Flag(1) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE))
{ {
sub_80EB2F4(1); BtlCtrl_OakOldMan_SetState2Flag(1);
gBattlerControllerFuncs[gActiveBattler] = sub_80E8570; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_InflictingDamageIsKey;
} }
else else
{ {
@@ -381,10 +381,10 @@ static void sub_8036334(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
@@ -396,12 +396,12 @@ static void sub_8036334(void)
static void sub_8036408(void) static void sub_8036408(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattlerControllerFuncs[gActiveBattler] = sub_8036334; gBattlerControllerFuncs[gActiveBattler] = sub_8036334;
} }
@@ -1025,7 +1025,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].flag_x80 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 1;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 1;
} }
else else
@@ -1063,7 +1063,7 @@ static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit)
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
@@ -1072,12 +1072,12 @@ static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit)
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(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[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
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[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
} }
static void OpponentHandleReturnMonToBall(void) static void OpponentHandleReturnMonToBall(void)
@@ -1143,7 +1143,7 @@ static void OpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -1174,7 +1174,7 @@ static void OpponentHandleTrainerSlide(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
} }
@@ -1273,7 +1273,7 @@ static void OpponentDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
sub_8035450(0); SetBattlerSpriteAffineMode(0);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1282,7 +1282,7 @@ static void OpponentDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
sub_8035450(1); SetBattlerSpriteAffineMode(1);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{ {
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1311,7 +1311,7 @@ static void OpponentHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
@@ -1320,10 +1320,10 @@ static void OpponentHandlePrintString(void)
switch (*stringId) switch (*stringId)
{ {
case 0x17F: case 0x17F:
gBattlerControllerFuncs[gActiveBattler] = sub_80E85C0; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_HowDisappointing;
return; return;
case 0xE3: case 0xE3:
gBattlerControllerFuncs[gActiveBattler] = sub_80E8598; gBattlerControllerFuncs[gActiveBattler] = PrintOakText_OakNoRunningFromATrainer;
return; return;
} }
} }
@@ -1637,7 +1637,7 @@ static void OpponentHandleIntroTrainerBallThrow(void)
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->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_17; gBattlerControllerFuncs[gActiveBattler] = nullsub_17;
} }
+79 -79
View File
@@ -98,12 +98,12 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst);
static void SetPlayerMonData(u8 monId); static void SetPlayerMonData(u8 monId);
static void DoSwitchOutAnimation(void); static void DoSwitchOutAnimation(void);
static void PlayerDoMoveAnimation(void); static void PlayerDoMoveAnimation(void);
static void task05_08033660(u8 taskId); static void Task_StartSendOutAnim(u8 taskId);
static void sub_8033AC8(void); static void sub_8033AC8(void);
static void sub_802FCAC(void); static void sub_802FCAC(void);
static void sub_80300F4(u8 taskId); static void Task_GiveExpWithExpBar(u8 taskId);
static void sub_80303A8(u8 taskId); static void Task_CreateLevelUpVerticalStripes(u8 taskId);
static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit); static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit);
static void sub_8033830(void); static void sub_8033830(void);
static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
@@ -704,7 +704,7 @@ static void HandleMoveSwitching(void)
} }
} }
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
gBattlerControllerFuncs[gActiveBattler] = sub_80E7988; gBattlerControllerFuncs[gActiveBattler] = OakOldManHandleInputChooseMove;
else else
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
gMoveSelectionCursor[gActiveBattler] = gMultiUsePlayerCursor; gMoveSelectionCursor[gActiveBattler] = gMultiUsePlayerCursor;
@@ -719,7 +719,7 @@ static void HandleMoveSwitching(void)
MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
gBattlerControllerFuncs[gActiveBattler] = sub_80E7988; gBattlerControllerFuncs[gActiveBattler] = OakOldManHandleInputChooseMove;
else else
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
MoveSelectionDisplayPpString(); MoveSelectionDisplayPpString();
@@ -792,7 +792,7 @@ static void HandleMoveSwitching(void)
} }
} }
static void sub_802F610(void) static void SetLinkBattleEndCallbacks(void)
{ {
if (gWirelessCommType == 0) if (gWirelessCommType == 0)
{ {
@@ -815,17 +815,17 @@ static void sub_802F610(void)
} }
} }
void sub_802F6A8(void) void SetBattleEndCallbacks(void)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
if (gWirelessCommType == 0) if (gWirelessCommType == 0)
Link_TryStartSend5FFF(); SetCloseLinkCallback();
else else
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gBattlerControllerFuncs[gActiveBattler] = sub_802F610; gBattlerControllerFuncs[gActiveBattler] = SetLinkBattleEndCallbacks;
} }
else else
{ {
@@ -860,16 +860,16 @@ static void sub_802F7A0(void)
} }
} }
static void sub_802F810(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
} }
static void sub_802F858(void) static void Intro_WaitForShinyAnimAndHealthbox(void)
{ {
bool8 var = FALSE; bool8 var = FALSE;
@@ -889,12 +889,12 @@ static void sub_802F858(void)
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
m4aMPlayContinue(&gMPlayInfo_BGM); m4aMPlayContinue(&gMPlayInfo_BGM);
else else
@@ -902,36 +902,36 @@ static void sub_802F858(void)
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
if (IsDoubleBattle()) if (IsDoubleBattle())
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = sub_802F810; gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd;
} }
} }
static void sub_802FA58(void) static void Intro_TryShinyAnimShowHealthbox(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim)
TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
} }
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->field_9_x1 = 0; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
gBattlerControllerFuncs[gActiveBattler] = sub_802F858; gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox;
} }
} }
@@ -940,10 +940,10 @@ static void sub_802FBF4(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
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] = sub_802FCAC; gBattlerControllerFuncs[gActiveBattler] = sub_802FCAC;
@@ -961,15 +961,15 @@ static void sub_802FCAC(void)
} }
} }
static void sub_802FD18(void) static void SwitchIn_TryShinyAnimShowHealthbox(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 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[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)) && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
@@ -980,7 +980,7 @@ static void sub_802FD18(void)
} }
} }
void c3_0802FDF4(u8 taskId) void Task_PlayerController_RestoreBgmAfterCry(u8 taskId)
{ {
if (!IsCryPlayingOrClearCrySongs()) if (!IsCryPlayingOrClearCrySongs())
{ {
@@ -1078,10 +1078,10 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
PlaySE(SE_EXP); PlaySE(SE_EXP);
gTasks[taskId].func = sub_80300F4; gTasks[taskId].func = Task_GiveExpWithExpBar;
} }
static void sub_80300F4(u8 taskId) static void Task_GiveExpWithExpBar(u8 taskId)
{ {
if (gTasks[taskId].tExpTask_frames < 13) if (gTasks[taskId].tExpTask_frames < 13)
{ {
@@ -1167,7 +1167,7 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
if (IsBattlerSpriteVisible((u8)battlerId) == TRUE) if (IsBattlerSpriteVisible((u8)battlerId) == TRUE)
{ {
gTasks[taskId].func = sub_80303A8; gTasks[taskId].func = Task_CreateLevelUpVerticalStripes;
gTasks[taskId].data[15] = 0; gTasks[taskId].data[15] = 0;
} }
else else
@@ -1177,12 +1177,12 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
} }
} }
static void sub_80303A8(u8 taskId) static void Task_CreateLevelUpVerticalStripes(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
u8 battlerId = tExpTask_battler; u8 battlerId = tExpTask_battler;
u16 v5 = GetBattlerSpriteBGPriorityRank(battlerId); u16 bgPriorityRank = GetBattlerSpriteBGPriorityRank(battlerId);
bool32 v6 = ((v5 ^ BIT_SIDE)) != B_SIDE_PLAYER; bool32 isOnBg2 = ((bgPriorityRank ^ 1)) != 0;
struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]]; struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]];
switch (data[15]) switch (data[15])
@@ -1190,7 +1190,7 @@ static void sub_80303A8(u8 taskId)
case 0: case 0:
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(0))
{ {
if (!v6) if (!isOnBg2)
{ {
data[14] = gBattle_BG1_X; data[14] = gBattle_BG1_X;
data[13] = gBattle_BG1_Y; data[13] = gBattle_BG1_Y;
@@ -1210,7 +1210,7 @@ static void sub_80303A8(u8 taskId)
case 1: case 1:
{ {
u32 battlerIdAlt = battlerId; u32 battlerIdAlt = battlerId;
bool32 v6Alt = v6; bool32 v6Alt = isOnBg2;
MoveBattlerSpriteToBG(battlerIdAlt, v6Alt); MoveBattlerSpriteToBG(battlerIdAlt, v6Alt);
} }
@@ -1235,14 +1235,14 @@ static void sub_80303A8(u8 taskId)
} }
break; break;
case 5: case 5:
ResetBattleAnimBg(v6); ResetBattleAnimBg(isOnBg2);
++data[15]; ++data[15];
break; break;
case 4: case 4:
++data[15]; ++data[15];
break; break;
case 6: case 6:
if (!v6) if (!isOnBg2)
{ {
gBattle_BG1_X = data[14]; gBattle_BG1_X = data[14];
gBattle_BG1_Y = data[13]; gBattle_BG1_Y = data[13];
@@ -1258,7 +1258,7 @@ static void sub_80303A8(u8 taskId)
} }
} }
static void sub_8030538(void) static void FreeMonSpriteAfterFaintAnim(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT) if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
{ {
@@ -1269,7 +1269,7 @@ static void sub_8030538(void)
} }
} }
static void sub_80305A0(void) static void FreeMonSpriteAfterSwitchOutAnim(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
@@ -1293,8 +1293,8 @@ static void OpenPartyMenuToChooseMon(void)
u8 caseId; u8 caseId;
gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0]; caseId = gTasks[gBattleControllerData[gActiveBattler]].data[0];
DestroyTask(gUnknown_3004FFC[gActiveBattler]); DestroyTask(gBattleControllerData[gActiveBattler]);
FreeAllWindowBuffers(); FreeAllWindowBuffers();
OpenPartyMenuInTutorialBattle(caseId); OpenPartyMenuInTutorialBattle(caseId);
} }
@@ -1319,7 +1319,7 @@ static void OpenBagAndChooseItem(void)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
nullsub_44(); ReshowBattleScreenDummy();
FreeAllWindowBuffers(); FreeAllWindowBuffers();
CB2_BagMenuFromBattle(); CB2_BagMenuFromBattle();
} }
@@ -2090,31 +2090,31 @@ static void PlayerHandleSwitchInAnim(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
gActionSelectionCursor[gActiveBattler] = 0; gActionSelectionCursor[gActiveBattler] = 0;
gMoveSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0;
sub_8031FF4(gActiveBattler, gBattleBufferA[gActiveBattler][2]); StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = sub_802FD18; gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox;
} }
static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit) static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
{ {
u16 species; u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_3004FFC[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[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
} }
static void PlayerHandleReturnMonToBall(void) static void PlayerHandleReturnMonToBall(void)
@@ -2147,7 +2147,7 @@ static void DoSwitchOutAnimation(void)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON);
gBattlerControllerFuncs[gActiveBattler] = sub_80305A0; gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim;
} }
break; break;
} }
@@ -2192,7 +2192,7 @@ static void PlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -2222,7 +2222,7 @@ static void PlayerHandleTrainerSlide(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
} }
@@ -2255,8 +2255,8 @@ static void PlayerHandleFaintAnimation(void)
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
gBattlerControllerFuncs[gActiveBattler] = sub_8030538; gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim;
} }
} }
} }
@@ -2338,7 +2338,7 @@ static void PlayerDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
sub_8035450(0); SetBattlerSpriteAffineMode(0);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -2347,7 +2347,7 @@ static void PlayerDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
sub_8035450(1); SetBattlerSpriteAffineMode(1);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{ {
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -2376,8 +2376,8 @@ static void PlayerHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 64); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
@@ -2460,10 +2460,10 @@ static void PlayerHandleChoosePokemon(void)
{ {
s32 i; s32 i;
gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
*(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->playerPartyIdx) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
@@ -2709,20 +2709,20 @@ static void PlayerHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80755B8; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80755B8;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8); paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[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(task05_08033660, 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->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_13; gBattlerControllerFuncs[gActiveBattler] = nullsub_13;
} }
void sub_80335F8(struct Sprite *sprite) void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite)
{ {
u8 battlerId = sprite->data[5]; u8 battlerId = sprite->data[5];
@@ -2733,7 +2733,7 @@ void sub_80335F8(struct Sprite *sprite)
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
} }
static void task05_08033660(u8 taskId) static void Task_StartSendOutAnim(u8 taskId)
{ {
if (gTasks[taskId].data[1] < 31) if (gTasks[taskId].data[1] < 31)
{ {
@@ -2747,19 +2747,19 @@ static void task05_08033660(u8 taskId)
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
sub_8031FF4(gActiveBattler, FALSE); StartSendOutAnim(gActiveBattler, FALSE);
} }
else else
{ {
gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
sub_8031FF4(gActiveBattler, FALSE); StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK; gActiveBattler ^= BIT_FLANK;
gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
sub_8031FF4(gActiveBattler, FALSE); StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK; gActiveBattler ^= BIT_FLANK;
} }
gBattlerControllerFuncs[gActiveBattler] = sub_802FA58; gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox;
gActiveBattler = savedActiveBattler; gActiveBattler = savedActiveBattler;
DestroyTask(taskId); DestroyTask(taskId);
} }
@@ -2871,7 +2871,7 @@ static void PlayerHandleCmd55(void)
FadeOutMapMusic(5); FadeOutMapMusic(5);
BeginFastPaletteFade(3); BeginFastPaletteFade(3);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8; gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
} }
static void PlayerCmdEnd(void) static void PlayerCmdEnd(void)
+68 -68
View File
@@ -560,8 +560,8 @@ static void nullsub_99(void)
void SetControllerToPokedude(void) void SetControllerToPokedude(void)
{ {
gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand; gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand;
*(&gBattleStruct->field_96) = gSpecialVar_0x8004; *(&gBattleStruct->simulatedInputState[2]) = gSpecialVar_0x8004;
gBattleStruct->field_97 = 0; gBattleStruct->simulatedInputState[3] = 0;
} }
static void PokedudeBufferRunCommand(void) static void PokedudeBufferRunCommand(void)
@@ -596,16 +596,16 @@ static void sub_8156184(void)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{ {
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
} }
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
} }
} }
@@ -631,7 +631,7 @@ static void sub_8156294(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
CreateTask(c3_0802FDF4, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
} }
@@ -642,10 +642,10 @@ static void sub_81562F0(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
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] = sub_8156294; gBattlerControllerFuncs[gActiveBattler] = sub_8156294;
@@ -654,13 +654,13 @@ static void sub_81562F0(void)
static void sub_81563A8(void) static void sub_81563A8(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 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[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)) && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
@@ -679,9 +679,9 @@ static void CompleteOnSpecialAnimDone(void)
static void sub_815649C(void) static void sub_815649C(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 255) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 255)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
} }
} }
@@ -696,9 +696,9 @@ static void OpenPartyMenuToChooseMon(void)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
DestroyTask(gUnknown_3004FFC[gActiveBattler]); DestroyTask(gBattleControllerData[gActiveBattler]);
FreeAllWindowBuffers(); FreeAllWindowBuffers();
OpenPartyMenuInBattle(); Pokedude_OpenPartyMenuInBattle();
} }
} }
@@ -721,7 +721,7 @@ static void OpenBagAndChooseItem(void)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
nullsub_44(); ReshowBattleScreenDummy();
FreeAllWindowBuffers(); FreeAllWindowBuffers();
switch (gSpecialVar_0x8004) switch (gSpecialVar_0x8004)
{ {
@@ -748,30 +748,30 @@ static void CompleteWhenChoseItem(void)
static void sub_8156624(void) static void sub_8156624(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{ {
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
} }
DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->field_9_x1 = 0; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0;
gBattlerControllerFuncs[gActiveBattler] = sub_81567B0; gBattlerControllerFuncs[gActiveBattler] = sub_81567B0;
} }
} }
@@ -786,13 +786,13 @@ static void sub_81567B0(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
FreeSpriteTilesByTag(0x27F9); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(0x27F9); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(c3_0802FDF4, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
gBattlerControllerFuncs[gActiveBattler] = sub_815649C; gBattlerControllerFuncs[gActiveBattler] = sub_815649C;
} }
@@ -1723,7 +1723,7 @@ static void PokedudeHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
} }
else else
{ {
@@ -1740,7 +1740,7 @@ static void PokedudeHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[tranerPicid].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[tranerPicid].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = tranerPicid; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = tranerPicid;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -1756,7 +1756,7 @@ static void PokedudeHandleTrainerSlide(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
} }
@@ -1784,7 +1784,7 @@ static void PokedudeHandleFaintAnimation(void)
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
} }
else else
{ {
@@ -1860,7 +1860,7 @@ static void PokedudeDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
sub_8035450(0); SetBattlerSpriteAffineMode(0);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1869,7 +1869,7 @@ static void PokedudeDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
sub_8035450(1); SetBattlerSpriteAffineMode(1);
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);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3;
@@ -1895,8 +1895,8 @@ static void PokedudeHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 64); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1984,10 +1984,10 @@ static void PokedudeHandleChoosePokemon(void)
{ {
s32 i; s32 i;
gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
*(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->playerPartyIdx) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
@@ -2219,7 +2219,7 @@ static void PokedudeHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.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]], sub_80335F8); 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[BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32);
@@ -2228,7 +2228,7 @@ static void PokedudeHandleIntroTrainerBallThrow(void)
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->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_99; gBattlerControllerFuncs[gActiveBattler] = nullsub_99;
} }
@@ -2239,20 +2239,20 @@ static void sub_8159478(u8 battlerId)
gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE; gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_3004FFC[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[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
} }
static void sub_81595EC(u8 taskId) static void sub_81595EC(u8 taskId)
@@ -2356,7 +2356,7 @@ static void PokedudeCmdEnd(void)
static void sub_8159824(void) static void sub_8159824(void)
{ {
const u8 (*r7)[8] = gUnknown_8479060[gBattleStruct->field_96]; const u8 (*r7)[8] = gUnknown_8479060[gBattleStruct->simulatedInputState[2]];
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
@@ -2404,7 +2404,7 @@ static void sub_8159824(void)
static void sub_8159998(void) static void sub_8159998(void)
{ {
const u8 (*r7)[8] = gUnknown_84790D8[gBattleStruct->field_96]; const u8 (*r7)[8] = gUnknown_84790D8[gBattleStruct->simulatedInputState[2]];
if (*(r7[gUnknown_3005EE0[gActiveBattler][1]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2]) if (*(r7[gUnknown_3005EE0[gActiveBattler][1]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2])
{ {
@@ -2435,24 +2435,24 @@ static void sub_8159998(void)
static bool8 sub_8159AB8(void) static bool8 sub_8159AB8(void)
{ {
const struct Unk_84790E8 *r6 = gUnknown_8479198[gBattleStruct->field_96]; const struct Unk_84790E8 *r6 = gUnknown_8479198[gBattleStruct->simulatedInputState[2]];
const u16 * r12 = (const u16 *)&gBattleBufferA[gActiveBattler][2]; const u16 * r12 = (const u16 *)&gBattleBufferA[gActiveBattler][2];
if (gBattleBufferA[gActiveBattler][0] != r6[gBattleStruct->field_97].unk_0) if (gBattleBufferA[gActiveBattler][0] != r6[gBattleStruct->simulatedInputState[3]].unk_0)
return FALSE; return FALSE;
if (gActiveBattler != r6[gBattleStruct->field_97].unk_1) if (gActiveBattler != r6[gBattleStruct->simulatedInputState[3]].unk_1)
return FALSE; return FALSE;
if (gBattleBufferA[gActiveBattler][0] == 16 && r6[gBattleStruct->field_97].unk_2 != *r12) if (gBattleBufferA[gActiveBattler][0] == 16 && r6[gBattleStruct->simulatedInputState[3]].unk_2 != *r12)
return FALSE; return FALSE;
if (r6[gBattleStruct->field_97].unk_4 == NULL) if (r6[gBattleStruct->simulatedInputState[3]].unk_4 == NULL)
{ {
gBattleStruct->field_97++; gBattleStruct->simulatedInputState[3]++;
return FALSE; return FALSE;
} }
gBattlerControllerFuncs[gActiveBattler] = r6[gBattleStruct->field_97].unk_4; gBattlerControllerFuncs[gActiveBattler] = r6[gBattleStruct->simulatedInputState[3]].unk_4;
gUnknown_3005EE0[gActiveBattler][2] = 0; gUnknown_3005EE0[gActiveBattler][2] = 0;
gUnknown_3005EE0[gActiveBattler][3] = r6[gBattleStruct->field_97].unk_2; gUnknown_3005EE0[gActiveBattler][3] = r6[gBattleStruct->simulatedInputState[3]].unk_2;
gBattleStruct->field_97++; gBattleStruct->simulatedInputState[3]++;
return TRUE; return TRUE;
} }
@@ -2477,7 +2477,7 @@ static void sub_8159BA8(void)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
gUnknown_3005EE0[gActiveBattler][4] = gBattle_BG0_Y; gUnknown_3005EE0[gActiveBattler][4] = gBattle_BG0_Y;
sub_80EB30C(); BtlCtrl_DrawVoiceoverMessageFrame();
++gUnknown_3005EE0[gActiveBattler][2]; ++gUnknown_3005EE0[gActiveBattler][2];
} }
break; break;
@@ -2504,7 +2504,7 @@ static void sub_8159BA8(void)
PlayBGM(MUS_VICTORY_WILD); PlayBGM(MUS_VICTORY_WILD);
} }
gBattle_BG0_Y = gUnknown_3005EE0[gActiveBattler][4]; gBattle_BG0_Y = gUnknown_3005EE0[gActiveBattler][4];
sub_80EB524(); BtlCtrl_RemoveVoiceoverMessageFrame();
sub_8159B78(); sub_8159B78();
} }
break; break;
@@ -2518,8 +2518,8 @@ static void sub_8159D04(void)
case 0: case 0:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
DoLoadHealthboxPalsForLevelUp(&gBattleStruct->field_95, DoLoadHealthboxPalsForLevelUp(&gBattleStruct->simulatedInputState[1],
&gBattleStruct->field_94, &gBattleStruct->simulatedInputState[0],
GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK);
++gUnknown_3005EE0[gActiveBattler][2]; ++gUnknown_3005EE0[gActiveBattler][2];
@@ -2528,7 +2528,7 @@ static void sub_8159D04(void)
case 1: case 1:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
u32 mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16; u32 mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[0]]) << 16;
++mask; // It's possible that this is influenced by other functions, as ++mask; // It's possible that this is influenced by other functions, as
--mask; // this also striked in battle_controller_oak_old_man.c but was naturally fixed. --mask; // this also striked in battle_controller_oak_old_man.c but was naturally fixed.
@@ -2539,7 +2539,7 @@ static void sub_8159D04(void)
case 2: case 2:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
sub_80EB30C(); BtlCtrl_DrawVoiceoverMessageFrame();
++gUnknown_3005EE0[gActiveBattler][2]; ++gUnknown_3005EE0[gActiveBattler][2];
} }
break; break;
@@ -2554,7 +2554,7 @@ static void sub_8159D04(void)
u32 mask; u32 mask;
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16; mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[0]]) << 16;
++mask; ++mask;
--mask; --mask;
BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK); BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK);
@@ -2577,7 +2577,7 @@ static void sub_8159D04(void)
PlayBGM(MUS_VICTORY_WILD); PlayBGM(MUS_VICTORY_WILD);
} }
DoFreeHealthboxPalsForLevelUp(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); DoFreeHealthboxPalsForLevelUp(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
sub_80EB524(); BtlCtrl_RemoveVoiceoverMessageFrame();
sub_8159B78(); sub_8159B78();
} }
break; break;
@@ -2586,17 +2586,17 @@ static void sub_8159D04(void)
static const u8 *GetPokedudeText(void) static const u8 *GetPokedudeText(void)
{ {
switch (gBattleStruct->field_96) switch (gBattleStruct->simulatedInputState[2])
{ {
case TTVSCR_BATTLE: case TTVSCR_BATTLE:
default: default:
return sPokedudeTexts_Battle[gBattleStruct->field_97 - 1]; return sPokedudeTexts_Battle[gBattleStruct->simulatedInputState[3] - 1];
case TTVSCR_STATUS: case TTVSCR_STATUS:
return sPokedudeTexts_Status[gBattleStruct->field_97 - 1]; return sPokedudeTexts_Status[gBattleStruct->simulatedInputState[3] - 1];
case TTVSCR_MATCHUPS: case TTVSCR_MATCHUPS:
return sPokedudeTexts_TypeMatchup[gBattleStruct->field_97 - 1]; return sPokedudeTexts_TypeMatchup[gBattleStruct->simulatedInputState[3] - 1];
case TTVSCR_CATCHING: case TTVSCR_CATCHING:
return sPokedudeTexts_Catching[gBattleStruct->field_97 - 1]; return sPokedudeTexts_Catching[gBattleStruct->simulatedInputState[3] - 1];
} }
} }
+2 -2
View File
@@ -348,7 +348,7 @@ static void SafariHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -408,7 +408,7 @@ static void SafariHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
if (sub_80D89B0(*stringId)) if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
else else
BattlePutTextOnWindow(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+2 -2
View File
@@ -748,7 +748,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->lastItem = gLastUsedItem; stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility; stringInfo->lastAbility = gLastUsedAbility;
stringInfo->scrActive = gBattleScripting.battler; stringInfo->scrActive = gBattleScripting.battler;
stringInfo->unk1605E = gBattleStruct->field_52; stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx;
stringInfo->hpScale = gBattleStruct->hpScale; stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->itemEffectBattler = gPotentialItemEffectBattler; stringInfo->itemEffectBattler = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type; stringInfo->moveType = gBattleMoves[gCurrentMove].type;
@@ -778,7 +778,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
stringInfo->lastItem = gLastUsedItem; stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility; stringInfo->lastAbility = gLastUsedAbility;
stringInfo->scrActive = gBattleScripting.battler; stringInfo->scrActive = gBattleScripting.battler;
stringInfo->unk1605E = gBattleStruct->field_52; stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i) for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
stringInfo->abilities[i] = gBattleMons[i].ability; stringInfo->abilities[i] = gBattleMons[i].ability;
for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i) for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i)
+3 -3
View File
@@ -128,7 +128,7 @@ void FreeBattleSpritesData(void)
} }
} }
void sub_8033E3C(struct Sprite *sprite) void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite)
{ {
u8 spriteId = sprite->data[1]; u8 spriteId = sprite->data[1];
@@ -158,7 +158,7 @@ static void sub_8033EB0(struct Sprite *sprite, bool8 arg1)
AnimateSprite(sprite); AnimateSprite(sprite);
} }
void sub_8033EEC(struct Sprite *sprite) void SpriteCB_TrainerSlideIn(struct Sprite *sprite)
{ {
if (!(gIntroSlideFlags & 1)) if (!(gIntroSlideFlags & 1))
{ {
@@ -864,7 +864,7 @@ void HandleBattleLowHpMusicChange(void)
} }
} }
void sub_8035450(u8 affineMode) void SetBattlerSpriteAffineMode(u8 affineMode)
{ {
s32 i; s32 i;
+28 -28
View File
@@ -224,7 +224,7 @@ void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
u8 gMultiUsePlayerCursor; u8 gMultiUsePlayerCursor;
u8 gNumberOfMovesToChoose; u8 gNumberOfMovesToChoose;
u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT]; u8 gBattleControllerData[MAX_BATTLERS_COUNT];
static const struct ScanlineEffectParams sIntroScanlineParams16Bit = static const struct ScanlineEffectParams sIntroScanlineParams16Bit =
{ {
@@ -1149,9 +1149,9 @@ static void CB2_PreInitMultiBattle(void)
{ {
++gBattleCommunication[MULTIUSE_STATE]; ++gBattleCommunication[MULTIUSE_STATE];
if (gWirelessCommType) if (gWirelessCommType)
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
else else
Link_TryStartSend5FFF(); SetCloseLinkCallback();
} }
break; break;
case 3: case 3:
@@ -2021,7 +2021,7 @@ static void SpriteCallbackDummy3(struct Sprite *sprite)
{ {
} }
void sub_8012110(struct Sprite *sprite) void SpriteCB_FaintSlideAnim(struct Sprite *sprite)
{ {
if (!(gIntroSlideFlags & 1)) if (!(gIntroSlideFlags & 1))
{ {
@@ -2808,7 +2808,7 @@ static void TryDoEventsBeforeFirstTurn(void)
} }
TurnValuesCleanUp(FALSE); TurnValuesCleanUp(FALSE);
SpecialStatusesClear(); SpecialStatusesClear();
*(&gBattleStruct->field_91) = gAbsentBattlerFlags; *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
gBattleMainFunc = HandleTurnActionSelectionState; gBattleMainFunc = HandleTurnActionSelectionState;
ResetSentPokesToOpponentValue(); ResetSentPokesToOpponentValue();
for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; ++i) for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; ++i)
@@ -2895,7 +2895,7 @@ void BattleTurnPassed(void)
} }
for (i = 0; i < MAX_BATTLERS_COUNT; ++i) for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
*(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
*(&gBattleStruct->field_91) = gAbsentBattlerFlags; *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
gBattleMainFunc = HandleTurnActionSelectionState; gBattleMainFunc = HandleTurnActionSelectionState;
gRandomTurnNumber = Random(); gRandomTurnNumber = Random();
} }
@@ -2965,7 +2965,7 @@ void UpdatePartyOwnerOnSwitch_NonMulti(u8 battler)
u8 r4, r1; u8 r4, r1;
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)); gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders));
r4 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]); r4 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]);
r1 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); r1 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler));
SwitchPartyMonSlots(r4, r1); SwitchPartyMonSlots(r4, r1);
@@ -2973,14 +2973,14 @@ void UpdatePartyOwnerOnSwitch_NonMulti(u8 battler)
{ {
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
{ {
*(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
*(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
} }
} }
else else
{ {
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
*(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
} }
} }
@@ -3010,10 +3010,10 @@ static void HandleTurnActionSelectionState(void)
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI if (gBattleTypeFlags & BATTLE_TYPE_MULTI
|| (position & BIT_FLANK) == B_FLANK_LEFT || (position & BIT_FLANK) == B_FLANK_LEFT
|| gBattleStruct->field_91 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] || gBattleStruct->absentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]
|| gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED)
{ {
if (gBattleStruct->field_91 & gBitTable[gActiveBattler]) if (gBattleStruct->absentBattlerFlags & gBitTable[gActiveBattler])
{ {
gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED;
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
@@ -3090,15 +3090,15 @@ static void HandleTurnActionSelectionState(void)
} }
else else
{ {
BtlController_EmitChooseItem(0, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChooseItem(0, gBattleStruct->battlerPartyOrders[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
} }
break; break;
case B_ACTION_SWITCH: case B_ACTION_SWITCH:
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) || gStatuses3[gActiveBattler] & STATUS3_ROOTED) if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) || gStatuses3[gActiveBattler] & STATUS3_ROOTED)
{ {
BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]);
} }
else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
|| ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP))
@@ -3107,16 +3107,16 @@ static void HandleTurnActionSelectionState(void)
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
&& IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
{ {
BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->battlerPartyOrders[gActiveBattler]);
} }
else else
{ {
if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH) if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH)
BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]);
else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH) else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH)
BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]);
else else
BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]);
} }
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
break; break;
@@ -3214,12 +3214,12 @@ static void HandleTurnActionSelectionState(void)
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1]; *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1];
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
*(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF; *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF;
*(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0);
*(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleBufferB[gActiveBattler][3];
*((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0); *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0);
*((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4;
*((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleBufferB[gActiveBattler][3];
} }
++gBattleCommunication[gActiveBattler]; ++gBattleCommunication[gActiveBattler];
} }
@@ -3253,7 +3253,7 @@ static void HandleTurnActionSelectionState(void)
{ {
if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE)
|| (position & BIT_FLANK) != B_FLANK_LEFT || (position & BIT_FLANK) != B_FLANK_LEFT
|| (*(&gBattleStruct->field_91) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)]))
BtlController_EmitLinkStandbyMsg(0, 0); BtlController_EmitLinkStandbyMsg(0, 0);
else else
BtlController_EmitLinkStandbyMsg(0, 1); BtlController_EmitLinkStandbyMsg(0, 1);
@@ -3864,7 +3864,7 @@ static void HandleAction_UseMove(void)
u8 var = 4; u8 var = 4;
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) if (*(&gBattleStruct->absentBattlerFlags) & gBitTable[gBattlerAttacker])
{ {
gCurrentActionFuncId = B_ACTION_FINISHED; gCurrentActionFuncId = B_ACTION_FINISHED;
return; return;
@@ -4037,7 +4037,7 @@ static void HandleAction_Switch(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
gActionSelectionCursor[gBattlerAttacker] = 0; gActionSelectionCursor[gBattlerAttacker] = 0;
gMoveSelectionCursor[gBattlerAttacker] = 0; gMoveSelectionCursor[gBattlerAttacker] = 0;
PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)); PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->battlerPartyIndexes + gBattlerAttacker));
gBattleScripting.battler = gBattlerAttacker; gBattleScripting.battler = gBattlerAttacker;
gBattlescriptCurrInstr = BattleScript_ActionSwitch; gBattlescriptCurrInstr = BattleScript_ActionSwitch;
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
+6 -3
View File
@@ -1469,7 +1469,7 @@ void BufferStringBattle(u16 stringId)
gLastUsedItem = sBattleMsgDataPtr->lastItem; gLastUsedItem = sBattleMsgDataPtr->lastItem;
gLastUsedAbility = sBattleMsgDataPtr->lastAbility; gLastUsedAbility = sBattleMsgDataPtr->lastAbility;
gBattleScripting.battler = sBattleMsgDataPtr->scrActive; gBattleScripting.battler = sBattleMsgDataPtr->scrActive;
*(&gBattleStruct->field_52) = sBattleMsgDataPtr->unk1605E; *(&gBattleStruct->scriptPartyIdx) = sBattleMsgDataPtr->bakScriptPartyIdx;
*(&gBattleStruct->hpScale) = sBattleMsgDataPtr->hpScale; *(&gBattleStruct->hpScale) = sBattleMsgDataPtr->hpScale;
gPotentialItemEffectBattler = sBattleMsgDataPtr->itemEffectBattler; gPotentialItemEffectBattler = sBattleMsgDataPtr->itemEffectBattler;
*(&gBattleStruct->stringMoveType) = sBattleMsgDataPtr->moveType; *(&gBattleStruct->stringMoveType) = sBattleMsgDataPtr->moveType;
@@ -2079,7 +2079,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gStringVar4; toCpy = gStringVar4;
break; break;
case B_TXT_26: // ? case B_TXT_26: // ?
HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->field_52)) HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->scriptPartyIdx))
break; break;
case B_TXT_PC_CREATOR_NAME: // lanette pc case B_TXT_PC_CREATOR_NAME: // lanette pc
if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC)) if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC))
@@ -2379,6 +2379,9 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
const u8 gUnknown_83FEC90[] = {0x04, 0x05, 0x02, 0x02}; const u8 gUnknown_83FEC90[] = {0x04, 0x05, 0x02, 0x02};
// windowId: Upper 2 bits are text flags
// x40: Use NPC context-defined font
// x80: Inhibit window clear
void BattlePutTextOnWindow(const u8 *text, u8 windowId) { void BattlePutTextOnWindow(const u8 *text, u8 windowId) {
bool32 copyToVram; bool32 copyToVram;
struct TextPrinterTemplate printerTemplate; struct TextPrinterTemplate printerTemplate;
@@ -2457,7 +2460,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) {
} }
} }
bool8 sub_80D89B0(u16 stringId) bool8 BattleStringShouldBeColored(u16 stringId)
{ {
if (stringId == STRINGID_TRAINER1LOSETEXT || stringId == STRINGID_TRAINER2CLASS || stringId == STRINGID_TRAINER1WINTEXT || stringId == STRINGID_TRAINER2NAME) if (stringId == STRINGID_TRAINER1LOSETEXT || stringId == STRINGID_TRAINER2CLASS || stringId == STRINGID_TRAINER1WINTEXT || stringId == STRINGID_TRAINER2NAME)
return TRUE; return TRUE;
+18 -18
View File
@@ -1040,11 +1040,11 @@ static void atk01_accuracycheck(void)
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
if ((gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE if ((gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE
&& !sub_80EB2E0(1) && !BtlCtrl_OakOldMan_TestState2Flag(1)
&& gBattleMoves[move].power != 0 && gBattleMoves[move].power != 0
&& GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
|| (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE || (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE
&& !sub_80EB2E0(2) && !BtlCtrl_OakOldMan_TestState2Flag(2)
&& gBattleMoves[move].power == 0 && gBattleMoves[move].power == 0
&& GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
|| (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)) || (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
@@ -1213,7 +1213,7 @@ static void atk04_critcalc(void)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT) && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT)
&& !(gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL) && !(gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL)
&& !(Random() % sCriticalHitChance[critChance]) && !(Random() % sCriticalHitChance[critChance])
&& (!(gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) || sub_80EB2E0(1)) && (!(gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) || BtlCtrl_OakOldMan_TestState2Flag(1))
&& !(gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)) && !(gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
gCritMultiplier = 2; gCritMultiplier = 2;
else else
@@ -4146,7 +4146,7 @@ static void atk49_moveend(void)
gLastPrintedMoves[gBattlerAttacker] = gChosenMove; gLastPrintedMoves[gBattlerAttacker] = gChosenMove;
} }
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
&& !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker])
&& gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS) && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS)
{ {
if (gHitMarker & HITMARKER_OBEYS) if (gHitMarker & HITMARKER_OBEYS)
@@ -4184,7 +4184,7 @@ static void atk49_moveend(void)
break; break;
case ATK49_MIRROR_MOVE: // mirror move case ATK49_MIRROR_MOVE: // mirror move
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
&& !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker])
&& gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED
&& gHitMarker & HITMARKER_OBEYS && gHitMarker & HITMARKER_OBEYS
&& gBattlerAttacker != gBattlerTarget && gBattlerAttacker != gBattlerTarget
@@ -4491,8 +4491,8 @@ static void atk4F_jumpifcantswitch(void)
static void sub_8024398(u8 arg0) static void sub_8024398(u8 arg0)
{ {
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, arg0, 0, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, arg0, 0, gBattleStruct->battlerPartyOrders[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
} }
@@ -4745,8 +4745,8 @@ static void atk50_openpartyscreen(void)
else else
{ {
gActiveBattler = battlerId; gActiveBattler = battlerId;
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->battlerPartyOrders[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 6; gBattlescriptCurrInstr += 6;
if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 0xFF) if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 0xFF)
@@ -4799,12 +4799,12 @@ static void atk51_switchhandleorder(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
*(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF; *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF;
*(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0);
*(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleBufferB[gActiveBattler][3];
*((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0); *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0);
*((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4;
*((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleBufferB[gActiveBattler][3];
} }
else else
{ {
@@ -6601,7 +6601,7 @@ static bool8 TryDoForceSwitchOut(void)
{ {
if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
{ {
*(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
} }
else else
{ {
@@ -6612,7 +6612,7 @@ static bool8 TryDoForceSwitchOut(void)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
return FALSE; return FALSE;
} }
*(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
} }
gBattlescriptCurrInstr = BattleScript_SuccessForceOut; gBattlescriptCurrInstr = BattleScript_SuccessForceOut;
return TRUE; return TRUE;
@@ -8742,7 +8742,7 @@ static void atkE2_switchoutabilities(void)
{ {
case ABILITY_NATURAL_CURE: case ABILITY_NATURAL_CURE:
gBattleMons[gActiveBattler].status1 = 0; gBattleMons[gActiveBattler].status1 = 0;
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[*(gBattleStruct->field_58 + gActiveBattler)], 4, &gBattleMons[gActiveBattler].status1); BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)], 4, &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
break; break;
} }
+1 -1
View File
@@ -1356,7 +1356,7 @@ static u32 BerryCrushCommand_GracefulExit(struct BerryCrushGame * game, UNUSED u
case 1: case 1:
if (!IsLinkTaskFinished()) if (!IsLinkTaskFinished())
return 0; return 0;
Link_TryStartSend5FFF(); SetCloseLinkCallback();
break; break;
case 2: case 2:
if (gReceivedRemoteLinkPlayers) if (gReceivedRemoteLinkPlayers)
+10 -10
View File
@@ -301,7 +301,7 @@ static void Task_LinkupSlave_2(u8 taskId)
{ {
if (*res == 3 || *res == 4) if (*res == 3 || *res == 4)
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
HideFieldMessageBox(); HideFieldMessageBox();
gTasks[taskId].func = Task_Linkup_7; gTasks[taskId].func = Task_Linkup_7;
} }
@@ -346,13 +346,13 @@ static void Task_LinkupMaster_6(u8 taskId)
if (AnyConnectedPartnersPlayingRS() == TRUE) if (AnyConnectedPartnersPlayingRS() == TRUE)
CloseLink(); CloseLink();
else else
Link_TryStartSend5FFF(); SetCloseLinkCallback();
HideFieldMessageBox(); HideFieldMessageBox();
gTasks[taskId].func = Task_Linkup_7; gTasks[taskId].func = Task_Linkup_7;
} }
else if (gSpecialVar_Result == 3) else if (gSpecialVar_Result == 3)
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
HideFieldMessageBox(); HideFieldMessageBox();
gTasks[taskId].func = Task_Linkup_7; gTasks[taskId].func = Task_Linkup_7;
} }
@@ -410,7 +410,7 @@ static void Task_Linkup_6a(u8 taskId)
} }
else else
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
gTasks[taskId].func = Task_Linkup_7; gTasks[taskId].func = Task_Linkup_7;
} }
} }
@@ -599,7 +599,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
task->data[0]++; task->data[0]++;
break; break;
case 3: case 3:
Link_TryStartSend5FFF(); SetCloseLinkCallback();
task->data[0]++; task->data[0]++;
break; break;
case 4: case 4:
@@ -671,7 +671,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
data[0] = 5; data[0] = 5;
break; break;
case 5: case 5:
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
data[0] = 6; data[0] = 6;
break; break;
case 6: case 6:
@@ -711,7 +711,7 @@ static void sub_8081624(void)
switch (gMain.state) switch (gMain.state)
{ {
case 0: case 0:
Link_TryStartSend5FFF(); SetCloseLinkCallback();
gMain.state++; gMain.state++;
break; break;
case 1: case 1:
@@ -838,7 +838,7 @@ static void Task_StartWiredCableClubTrade(u8 taskId)
gSelectedTradeMonPositions[0] = 0; gSelectedTradeMonPositions[0] = 0;
gSelectedTradeMonPositions[1] = 0; gSelectedTradeMonPositions[1] = 0;
m4aMPlayAllStop(); m4aMPlayAllStop();
Link_TryStartSend5FFF(); SetCloseLinkCallback();
task->data[0]++; task->data[0]++;
break; break;
case 3: case 3:
@@ -870,7 +870,7 @@ static void Task_StartWirelessCableClubTrade(u8 taskId)
gSelectedTradeMonPositions[0] = 0; gSelectedTradeMonPositions[0] = 0;
gSelectedTradeMonPositions[1] = 0; gSelectedTradeMonPositions[1] = 0;
m4aMPlayAllStop(); m4aMPlayAllStop();
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
data[0]++; data[0]++;
break; break;
case 3: case 3:
@@ -959,6 +959,6 @@ static void sub_8081AE4(u8 taskId)
static void sub_8081B08(u8 taskId) static void sub_8081B08(u8 taskId)
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
gTasks[taskId].func = sub_8081AE4; gTasks[taskId].func = sub_8081AE4;
} }
+1 -1
View File
@@ -526,7 +526,7 @@ static const struct WindowTemplate sLevelUpStatsWindowTemplate =
.baseBlock = 0x2BF, .baseBlock = 0x2BF,
}; };
static const struct WindowTemplate gUnknown_845A170 = static const struct WindowTemplate sWindowTemplate_FirstBattleOakVoiceover =
{ {
.bg = 2, .bg = 2,
.tilemapLeft = 2, .tilemapLeft = 2,
+1 -1
View File
@@ -804,7 +804,7 @@ static void sub_8151488(void)
switch (gUnknown_203F3E0->unk10) switch (gUnknown_203F3E0->unk10)
{ {
case 0: case 0:
Link_TryStartSend5FFF(); SetCloseLinkCallback();
sub_81549D4(7); sub_81549D4(7);
gUnknown_203F3E0->unk10++; gUnknown_203F3E0->unk10++;
break; break;
+2 -2
View File
@@ -207,7 +207,7 @@ static void sub_807DDF0(u8 taskId)
switch (task->data[0]) switch (task->data[0])
{ {
case 0: case 0:
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
task->data[0]++; task->data[0]++;
break; break;
case 1: case 1:
@@ -663,7 +663,7 @@ static void Task_ReturnFromLinkRoomWarp(u8 taskId)
case 1: case 1:
if (!WaitWarpFadeOutScreen() && BGMusicStopped()) if (!WaitWarpFadeOutScreen() && BGMusicStopped())
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
data[0]++; data[0]++;
} }
break; break;
+1 -1
View File
@@ -2351,7 +2351,7 @@ static void Task_Bag_TeachyTvStatus(u8 taskId)
DestroyListMenuTask(data[0], NULL, NULL); DestroyListMenuTask(data[0], NULL, NULL);
RestorePlayerBag(); RestorePlayerBag();
gItemUseCB = ItemUseCB_MedicineStep; gItemUseCB = ItemUseCB_MedicineStep;
ItemMenu_SetExitCallback(ChooseMonForInBattleItem); ItemMenu_SetExitCallback(Pokedude_ChooseMonForInBattleItem);
gTasks[taskId].func = Task_Pokedude_FadeFromBag; gTasks[taskId].func = Task_Pokedude_FadeFromBag;
return; return;
} }
+2 -2
View File
@@ -793,12 +793,12 @@ static void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
{ {
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
{ {
BerryPouch_SetExitCallback(sub_81279E0); BerryPouch_SetExitCallback(EnterPartyFromItemMenuInBattle);
BerryPouch_StartFadeToExitCallback(taskId); BerryPouch_StartFadeToExitCallback(taskId);
} }
else else
{ {
ItemMenu_SetExitCallback(sub_81279E0); ItemMenu_SetExitCallback(EnterPartyFromItemMenuInBattle);
ItemMenu_StartFadeToExitCallback(taskId); ItemMenu_StartFadeToExitCallback(taskId);
} }
} }
+3 -3
View File
@@ -461,7 +461,7 @@ void LinkTestProcessKeyInput(void)
} }
if (JOY_NEW(SELECT_BUTTON)) if (JOY_NEW(SELECT_BUTTON))
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
} }
if (gLinkTestDebugValuesEnabled) if (gLinkTestDebugValuesEnabled)
{ {
@@ -1322,7 +1322,7 @@ void Link_StartSend5FFFwithParam(u16 a0)
} }
} }
void Link_TryStartSend5FFF(void) void SetCloseLinkCallback(void)
{ {
if (gWirelessCommType == 1) if (gWirelessCommType == 1)
{ {
@@ -1377,7 +1377,7 @@ static void LinkCB_WaitAckCommand5FFF(void)
} }
} }
void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void) void SetLinkStandbyCallback(void)
{ {
if (gWirelessCommType == 1) if (gWirelessCommType == 1)
{ {
+81 -77
View File
@@ -353,23 +353,23 @@ static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId);
static void Task_MultiPartnerPartySlideIn(u8 taskId); static void Task_MultiPartnerPartySlideIn(u8 taskId);
static bool8 CB2_FadeFromPartyMenu(void); static bool8 CB2_FadeFromPartyMenu(void);
static void Task_PartyMenuWaitForFade(u8 taskId); static void Task_PartyMenuWaitForFade(u8 taskId);
static void sub_8120C6C(u8 taskId); static void Task_OakOldManEnterParty_DarkenScreen(u8 taskId);
static void sub_8120CA8(u8 taskId); static void Task_OakOldManEnterParty_WaitDarken(u8 taskId);
static void sub_8120CD8(u8 taskId); static void Task_OakOldManEnterParty_CreatePrinter(u8 taskId);
static void sub_8120D08(u8 taskId); static void Task_OakOldManEnterParty_RunPrinterMsg1(u8 taskId);
static void sub_8120D40(u8 taskId); static void Task_OakOldManEnterParty_LightenFirstMonIcon(u8 taskId);
static void sub_8120D7C(u8 taskId); static void Task_OakOldManEnterParty_WaitLightenFirstMonIcon(u8 taskId);
static void sub_8120DAC(u8 taskId); static void Task_OakOldManEnterParty_StartPrintMsg2(u8 taskId);
static void sub_8120DE0(u8 taskId); static void Task_OakOldManEnterParty_RunPrinterMsg2(u8 taskId);
static void sub_8120E1C(u8 taskId); static void Task_OakOldManEnterParty_FadeNormal(u8 taskId);
static void sub_8120E58(u8 taskId); static void Task_OakOldManEnterParty_WaitFadeNormal(u8 taskId);
static void sub_8120EE0(u8 taskId); static void Task_PartyMenu_PokedudeStep(u8 taskId);
static void sub_8120FF0(u8 taskId); static void Task_PartyMenuFromBag_PokedudeStep(u8 taskId);
static bool8 sub_8120F78(u8 taskId); static bool8 PartyMenuPokedudeIsCancelled(u8 taskId);
static void sub_8120FB0(void); static void PartyMenuHandlePokedudeCancel(void);
static void sub_8122084(u8 windowId, const u8 *str); static void PartyMenu_OakOldMan_PrintText(u8 windowId, const u8 *str);
static u8 sub_81220D4(void); static u8 OakOldManEnterParty_CreateWindowAndMsg1Printer(void);
static void sub_8122110(u8 windowId); static void OakOldManEnterParty_DestroyVoiceoverWindow(u8 windowId);
static void SetSwitchedPartyOrderQuestLogEvent(void); static void SetSwitchedPartyOrderQuestLogEvent(void);
static void SetUsedFieldMoveQuestLogEvent(struct Pokemon *mon, u8 fieldMove); static void SetUsedFieldMoveQuestLogEvent(struct Pokemon *mon, u8 fieldMove);
static void sub_8124DE0(void); static void sub_8124DE0(void);
@@ -1955,76 +1955,78 @@ static bool8 CanLearnTutorMove(u16 species, u8 tutor)
} }
} }
static void sub_8120C3C(u8 taskId) // Tutorial battle messages
static void Task_OakOldManEnterParty_WaitFadeIn(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
gTasks[taskId].func = sub_8120C6C; gTasks[taskId].func = Task_OakOldManEnterParty_DarkenScreen;
} }
static void sub_8120C6C(u8 taskId) static void Task_OakOldManEnterParty_DarkenScreen(u8 taskId)
{ {
BeginNormalPaletteFade(0xFFFF1FFF, 4, 0, 6, RGB_BLACK); BeginNormalPaletteFade(0xFFFF1FFF, 4, 0, 6, RGB_BLACK);
gTasks[taskId].func = sub_8120CA8; gTasks[taskId].func = Task_OakOldManEnterParty_WaitDarken;
} }
static void sub_8120CA8(u8 taskId) static void Task_OakOldManEnterParty_WaitDarken(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
gTasks[taskId].func = sub_8120CD8; gTasks[taskId].func = Task_OakOldManEnterParty_CreatePrinter;
} }
static void sub_8120CD8(u8 taskId) static void Task_OakOldManEnterParty_CreatePrinter(u8 taskId)
{ {
gTasks[taskId].data[0] = sub_81220D4(); gTasks[taskId].data[0] = OakOldManEnterParty_CreateWindowAndMsg1Printer();
gTasks[taskId].func = sub_8120D08; gTasks[taskId].func = Task_OakOldManEnterParty_RunPrinterMsg1;
} }
static void sub_8120D08(u8 taskId) static void Task_OakOldManEnterParty_RunPrinterMsg1(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE) if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE)
gTasks[taskId].func = sub_8120D40; gTasks[taskId].func = Task_OakOldManEnterParty_LightenFirstMonIcon;
} }
static void sub_8120D40(u8 taskId) static void Task_OakOldManEnterParty_LightenFirstMonIcon(u8 taskId)
{ {
BeginNormalPaletteFade(0xFFFF0008, 4, 6, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFF0008, 4, 6, 0, RGB_BLACK);
gTasks[taskId].func = sub_8120D7C; gTasks[taskId].func = Task_OakOldManEnterParty_WaitLightenFirstMonIcon;
} }
static void sub_8120D7C(u8 taskId) static void Task_OakOldManEnterParty_WaitLightenFirstMonIcon(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
gTasks[taskId].func = sub_8120DAC; gTasks[taskId].func = Task_OakOldManEnterParty_StartPrintMsg2;
} }
static void sub_8120DAC(u8 taskId) static void Task_OakOldManEnterParty_StartPrintMsg2(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
sub_8122084(data[0], gUnknown_8417494); PartyMenu_OakOldMan_PrintText(data[0], gText_OakThisIsListOfPokemon);
gTasks[taskId].func = sub_8120DE0; gTasks[taskId].func = Task_OakOldManEnterParty_RunPrinterMsg2;
} }
static void sub_8120DE0(u8 taskId) static void Task_OakOldManEnterParty_RunPrinterMsg2(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE) if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE)
{ {
sub_8122110((u8)data[0]); OakOldManEnterParty_DestroyVoiceoverWindow((u8)data[0]);
gTasks[taskId].func = sub_8120E1C; gTasks[taskId].func = Task_OakOldManEnterParty_FadeNormal;
} }
} }
static void sub_8120E1C(u8 taskId) static void Task_OakOldManEnterParty_FadeNormal(u8 taskId)
{ {
BeginNormalPaletteFade(0x0000FFF7, 4, 6, 0, RGB_BLACK); BeginNormalPaletteFade(0x0000FFF7, 4, 6, 0, RGB_BLACK);
gTasks[taskId].func = sub_8120E58; gTasks[taskId].func = Task_OakOldManEnterParty_WaitFadeNormal;
} }
static void sub_8120E58(u8 taskId) static void Task_OakOldManEnterParty_WaitFadeNormal(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
@@ -2038,24 +2040,25 @@ static void sub_8120E58(u8 taskId)
} }
} }
static void sub_8120EBC(u8 taskId) // Pokedude switches Pokemon
static void Task_PartyMenu_Pokedude(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
data[0] = 0; data[0] = 0;
gTasks[taskId].func = sub_8120EE0; gTasks[taskId].func = Task_PartyMenu_PokedudeStep;
} }
static void sub_8120EE0(u8 taskId) static void Task_PartyMenu_PokedudeStep(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE) if (!gPaletteFade.active && PartyMenuPokedudeIsCancelled(taskId) != TRUE)
{ {
switch (data[0]) switch (data[0])
{ {
case 80: case 80:
UpdateCurrentPartySelection(&gPartyMenu.slotId, 2); UpdateCurrentPartySelection(&gPartyMenu.slotId, MENU_DIR_RIGHT);
break; break;
case 160: case 160:
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
@@ -2070,18 +2073,18 @@ static void sub_8120EE0(u8 taskId)
} }
} }
static bool8 sub_8120F78(u8 taskId) static bool8 PartyMenuPokedudeIsCancelled(u8 taskId)
{ {
if (JOY_NEW(B_BUTTON)) if (JOY_NEW(B_BUTTON))
{ {
sPartyMenuInternal->exitCallback = sub_8120FB0; sPartyMenuInternal->exitCallback = PartyMenuHandlePokedudeCancel;
Task_ClosePartyMenu(taskId); Task_ClosePartyMenu(taskId);
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
static void sub_8120FB0(void) static void PartyMenuHandlePokedudeCancel(void)
{ {
FreeRestoreBattleData(); FreeRestoreBattleData();
LoadPlayerParty(); LoadPlayerParty();
@@ -2089,19 +2092,20 @@ static void sub_8120FB0(void)
SetMainCallback2(CB2_ReturnToTeachyTV); SetMainCallback2(CB2_ReturnToTeachyTV);
} }
static void sub_8120FCC(u8 taskId) // Pokedude uses item on his own Pokemon
static void Task_PartyMenuFromBag_Pokedude(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
data[0] = 0; data[0] = 0;
gTasks[taskId].func = sub_8120FF0; gTasks[taskId].func = Task_PartyMenuFromBag_PokedudeStep;
} }
static void sub_8120FF0(u8 taskId) static void Task_PartyMenuFromBag_PokedudeStep(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE) if (!gPaletteFade.active && PartyMenuPokedudeIsCancelled(taskId) != TRUE)
{ {
if (data[0] != 80) if (data[0] != 80)
{ {
@@ -2612,24 +2616,24 @@ static void RemoveLevelUpStatsWindow(void)
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
} }
static void sub_8122084(u8 windowId, const u8 *str) static void PartyMenu_OakOldMan_PrintText(u8 windowId, const u8 *str)
{ {
StringExpandPlaceholders(gStringVar4, str); StringExpandPlaceholders(gStringVar4, str);
gTextFlags.canABSpeedUpPrint = TRUE; gTextFlags.canABSpeedUpPrint = TRUE;
AddTextPrinterParameterized2(windowId, 4, gStringVar4, GetTextSpeedSetting(), 0, 2, 1, 3); AddTextPrinterParameterized2(windowId, 4, gStringVar4, GetTextSpeedSetting(), NULL, 2, 1, 3);
} }
static bool8 sub_81220D4(void) static bool8 OakOldManEnterParty_CreateWindowAndMsg1Printer(void)
{ {
u8 windowId = AddWindow(&gUnknown_845A170); u8 windowId = AddWindow(&sWindowTemplate_FirstBattleOakVoiceover);
TextWindow_LoadResourcesStdFrame0(windowId, 0x4F, 0xE0); TextWindow_LoadResourcesStdFrame0(windowId, 0x4F, 0xE0);
DrawDialogFrameWithCustomTileAndPalette(windowId, 1, 0x4F, 0xE); DrawDialogFrameWithCustomTileAndPalette(windowId, 1, 0x4F, 0xE);
sub_8122084(windowId, gUnknown_8417457); PartyMenu_OakOldMan_PrintText(windowId, gText_OakImportantToGetToKnowPokemonThroughly);
return windowId; return windowId;
} }
static void sub_8122110(u8 windowId) static void OakOldManEnterParty_DestroyVoiceoverWindow(u8 windowId)
{ {
ClearWindowTilemap(windowId); ClearWindowTilemap(windowId);
ClearDialogWindowAndFrameToTransparent(windowId, FALSE); ClearDialogWindowAndFrameToTransparent(windowId, FALSE);
@@ -5858,16 +5862,16 @@ static u8 GetPartyLayoutFromBattleType(void)
void OpenPartyMenuInTutorialBattle(u8 partyAction) void OpenPartyMenuInTutorialBattle(u8 partyAction)
{ {
if (!sub_80EB2E0(8) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE))
{ {
InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE,
GetPartyLayoutFromBattleType(), GetPartyLayoutFromBattleType(),
partyAction, partyAction,
FALSE, FALSE,
PARTY_MSG_NONE, PARTY_MSG_NONE,
sub_8120C3C, Task_OakOldManEnterParty_WaitFadeIn,
SetCB2ToReshowScreenAfterMenu); SetCB2ToReshowScreenAfterMenu);
sub_80EB2F4(8); BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU);
} }
else else
{ {
@@ -5879,36 +5883,36 @@ void OpenPartyMenuInTutorialBattle(u8 partyAction)
Task_HandleChooseMonInput, Task_HandleChooseMonInput,
SetCB2ToReshowScreenAfterMenu); SetCB2ToReshowScreenAfterMenu);
} }
nullsub_44(); ReshowBattleScreenDummy();
UpdatePartyToBattleOrder(); UpdatePartyToBattleOrder();
} }
void OpenPartyMenuInBattle(void) void Pokedude_OpenPartyMenuInBattle(void)
{ {
InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, sub_8120EBC, SetCB2ToReshowScreenAfterMenu); InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_PartyMenu_Pokedude, SetCB2ToReshowScreenAfterMenu);
nullsub_44(); ReshowBattleScreenDummy();
UpdatePartyToBattleOrder(); UpdatePartyToBattleOrder();
} }
void ChooseMonForInBattleItem(void) void Pokedude_ChooseMonForInBattleItem(void)
{ {
InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, CB2_BagMenuFromBattle); InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, Task_PartyMenuFromBag_Pokedude, CB2_BagMenuFromBattle);
nullsub_44(); ReshowBattleScreenDummy();
UpdatePartyToBattleOrder(); UpdatePartyToBattleOrder();
} }
void sub_81279E0(void) void EnterPartyFromItemMenuInBattle(void)
{ {
if (!sub_80EB2E0(8) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE))
{ {
InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE,
GetPartyLayoutFromBattleType(), GetPartyLayoutFromBattleType(),
PARTY_ACTION_USE_ITEM, PARTY_ACTION_USE_ITEM,
FALSE, FALSE,
PARTY_MSG_NONE, PARTY_MSG_NONE,
sub_8120C3C, Task_OakOldManEnterParty_WaitFadeIn,
CB2_BagMenuFromBattle); CB2_BagMenuFromBattle);
sub_80EB2F4(8); BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU);
} }
else else
{ {
@@ -5926,7 +5930,7 @@ void sub_81279E0(void)
Task_HandleChooseMonInput, Task_HandleChooseMonInput,
callback); callback);
} }
nullsub_44(); ReshowBattleScreenDummy();
UpdatePartyToBattleOrder(); UpdatePartyToBattleOrder();
} }
@@ -5973,7 +5977,7 @@ static bool8 TrySwitchInPokemon(void)
StringExpandPlaceholders(gStringVar4, gText_EggCantBattle); StringExpandPlaceholders(gStringVar4, gText_EggCantBattle);
return FALSE; return FALSE;
} }
if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->field_8B) if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->playerPartyIdx)
{ {
GetMonNickname(&gPlayerParty[slot], gStringVar1); GetMonNickname(&gPlayerParty[slot], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected); StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected);
@@ -6061,7 +6065,7 @@ static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId)
void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId) void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId)
{ {
BufferBattlePartyOrderBySide(gBattleStruct->field_60[battlerId], flankId, battlerId); BufferBattlePartyOrderBySide(gBattleStruct->battlerPartyOrders[battlerId], flankId, battlerId);
} }
// when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above // when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above
@@ -6139,7 +6143,7 @@ void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2)
if (IsMultiBattle()) if (IsMultiBattle())
{ {
partyBattleOrder = gBattleStruct->field_60[battlerId]; partyBattleOrder = gBattleStruct->battlerPartyOrders[battlerId];
for (i = j = 0; i < 3; ++j, ++i) for (i = j = 0; i < 3; ++j, ++i)
{ {
partyIds[j] = partyBattleOrder[i] >> 4; partyIds[j] = partyBattleOrder[i] >> 4;
+4 -4
View File
@@ -775,7 +775,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
species = GetMonData(mon, MON_DATA_SPECIES); species = GetMonData(mon, MON_DATA_SPECIES);
if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1) && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
@@ -788,7 +788,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
} }
} }
if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1) if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->healthboxSlideInStarted)
wantedCryCase = 0; wantedCryCase = 0;
else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
wantedCryCase = 1; wantedCryCase = 1;
@@ -949,7 +949,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
sprite->sBattler = sprite->oam.affineParam & 0xFF; sprite->sBattler = sprite->oam.affineParam & 0xFF;
sprite->data[0] = 0; sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted
&& sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
sprite->callback = SpriteCB_ReleaseMon2FromBall; sprite->callback = SpriteCB_ReleaseMon2FromBall;
else else
@@ -975,7 +975,7 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
if (sprite->data[0] > 15) if (sprite->data[0] > 15)
{ {
sprite->data[0] = 0; sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted
&& sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
sprite->callback = SpriteCB_ReleaseMon2FromBall; sprite->callback = SpriteCB_ReleaseMon2FromBall;
else else
+1 -1
View File
@@ -1317,7 +1317,7 @@ static bool32 sub_8148D5C(void)
case 4: case 4:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
gUnknown_203F3D4->unkA++; gUnknown_203F3D4->unkA++;
} }
break; break;
+1 -1
View File
@@ -15,7 +15,7 @@ static bool8 LoadBattlerSpriteGfx(u8 battlerId);
static void CreateBattlerSprite(u8 battlerId); static void CreateBattlerSprite(u8 battlerId);
static void CreateHealthboxSprite(u8 battlerId); static void CreateHealthboxSprite(u8 battlerId);
void nullsub_44(void) void ReshowBattleScreenDummy(void)
{ {
} }
+3 -3
View File
@@ -853,7 +853,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId)
gTasks[taskId].data[0] = 1; gTasks[taskId].data[0] = 1;
break; break;
case 1: case 1:
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gTasks[taskId].data[0] = 2; gTasks[taskId].data[0] = 2;
break; break;
case 2: case 2:
@@ -887,7 +887,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId)
break; break;
case 7: case 7:
ClearContinueGameWarpStatus2(); ClearContinueGameWarpStatus2();
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gTasks[taskId].data[0] = 8; gTasks[taskId].data[0] = 8;
break; break;
case 8: case 8:
@@ -898,7 +898,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId)
} }
break; break;
case 9: case 9:
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gTasks[taskId].data[0] = 10; gTasks[taskId].data[0] = 10;
break; break;
case 10: case 10:
+2 -2
View File
@@ -342,8 +342,8 @@ const u8 gText_NotAble[] = _("NOT ABLE");
const u8 gText_Able3[] = _("ABLE!"); const u8 gText_Able3[] = _("ABLE!");
const u8 gText_NotAble2[] = _("NOT ABLE!"); const u8 gText_NotAble2[] = _("NOT ABLE!");
const u8 gText_Learned[] = _("LEARNED"); const u8 gText_Learned[] = _("LEARNED");
const u8 gUnknown_8417457[] = _("OAK: It's important to get to know\nyour POKéMON thoroughly.\p"); const u8 gText_OakImportantToGetToKnowPokemonThroughly[] = _("OAK: It's important to get to know\nyour POKéMON thoroughly.\p");
const u8 gUnknown_8417494[] = _("This is a list of your POKéMON,\n{PLAYER}.\pOpen this to check the skills\nand moves of your POKéMON.\pYou also choose POKéMON here if\nyou want to use an item on one.{PAUSE_UNTIL_PRESS}"); const u8 gText_OakThisIsListOfPokemon[] = _("This is a list of your POKéMON,\n{PLAYER}.\pOpen this to check the skills\nand moves of your POKéMON.\pYou also choose POKéMON here if\nyou want to use an item on one.{PAUSE_UNTIL_PRESS}");
const u8 gText_CutATreeOrGrass[] = _("Cut a tree or grass."); const u8 gText_CutATreeOrGrass[] = _("Cut a tree or grass.");
const u8 gText_FlyToAKnownTown[] = _("Fly to a known town."); const u8 gText_FlyToAKnownTown[] = _("Fly to a known town.");
const u8 gText_TravelOnWater[] = _("Travel on water."); const u8 gText_TravelOnWater[] = _("Travel on water.");
+3 -3
View File
@@ -814,7 +814,7 @@ static void CB2_ReturnFromLinkTrade2(void)
if (gWirelessCommType) if (gWirelessCommType)
{ {
ToggleLMANlinkRecovery(TRUE); ToggleLMANlinkRecovery(TRUE);
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
} }
} }
break; break;
@@ -2001,7 +2001,7 @@ static void TradeMenuCB_11(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ {
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
} }
else else
{ {
@@ -2041,7 +2041,7 @@ static void TradeMenuCB_16(void)
{ {
if (!ToggleLMANlinkRecovery(FALSE)) if (!ToggleLMANlinkRecovery(FALSE))
{ {
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
sTradeMenuResourcesPtr->tradeMenuCBnum = 13; sTradeMenuResourcesPtr->tradeMenuCBnum = 13;
} }
} }
+5 -5
View File
@@ -2546,7 +2546,7 @@ static void sub_8053E8C(void)
DrawTextOnTradeWindow(0, gStringVar4, 0); DrawTextOnTradeWindow(0, gStringVar4, 0);
break; break;
case 1: case 1:
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gMain.state = 100; gMain.state = 100;
sTradeData->timer = 0; sTradeData->timer = 0;
break; break;
@@ -2631,7 +2631,7 @@ static void sub_8053E8C(void)
case 41: case 41:
if (sTradeData->timer == 0) if (sTradeData->timer == 0)
{ {
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gMain.state = 42; gMain.state = 42;
} }
else else
@@ -2650,7 +2650,7 @@ static void sub_8053E8C(void)
if (++sTradeData->timer > 60) if (++sTradeData->timer > 60)
{ {
gMain.state++; gMain.state++;
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
} }
break; break;
case 6: case 6:
@@ -2672,11 +2672,11 @@ static void sub_8053E8C(void)
{ {
if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade)
{ {
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
} }
else else
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
} }
gMain.state++; gMain.state++;
} }
+1 -1
View File
@@ -618,7 +618,7 @@ static void Task_TrainerCard(u8 taskId)
} }
break; break;
case STATE_WAIT_LINK_PARTNER: case STATE_WAIT_LINK_PARTNER:
Link_TryStartSend5FFF(); SetCloseLinkCallback();
DrawDialogueFrame(0, 1); DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0); AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0);
CopyWindowToVram(0, COPYWIN_BOTH); CopyWindowToVram(0, COPYWIN_BOTH);
+9 -9
View File
@@ -2022,7 +2022,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
case 2: case 2:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
data[0]++; data[0]++;
} }
break; break;
@@ -2246,7 +2246,7 @@ static void Task_MEvent_Leader(u8 taskId)
Free(data->field_8); Free(data->field_8);
Free(data->field_0); Free(data->field_0);
Free(data->field_4); Free(data->field_4);
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
data->state++; data->state++;
break; break;
case 17: case 17:
@@ -2413,7 +2413,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
break; break;
case 11: case 11:
data->state++; data->state++;
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
break; break;
case 12: case 12:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
@@ -2592,7 +2592,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
break; break;
case 13: case 13:
data->state++; data->state++;
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
break; break;
case 14: case 14:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
@@ -2935,7 +2935,7 @@ static void Task_RunUnionRoom(u8 taskId)
} }
break; break;
case 32: case 32:
Link_TryStartSend5FFF(); SetCloseLinkCallback();
data->state = 36; data->state = 36;
break; break;
case 31: case 31:
@@ -2984,7 +2984,7 @@ static void Task_RunUnionRoom(u8 taskId)
if (PrintOnTextbox(&data->textState, gStringVar4)) if (PrintOnTextbox(&data->textState, gStringVar4))
{ {
data->state = 41; data->state = 41;
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
data->partnerYesNoResponse = 0; data->partnerYesNoResponse = 0;
data->recvActivityRequest[0] = 0; data->recvActivityRequest[0] = 0;
} }
@@ -3162,7 +3162,7 @@ static void Task_RunUnionRoom(u8 taskId)
} }
break; break;
case 10: case 10:
Link_TryStartSend5FFF(); SetCloseLinkCallback();
data->state = 36; data->state = 36;
break; break;
case 36: case 36:
@@ -3185,7 +3185,7 @@ static void Task_RunUnionRoom(u8 taskId)
UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4); UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4);
break; break;
case 14: case 14:
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
data->state = 15; data->state = 15;
break; break;
case 15: case 15:
@@ -3447,7 +3447,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * ur
else if (var == 2) else if (var == 2)
{ {
uroom->state = 36; uroom->state = 36;
Link_TryStartSend5FFF(); SetCloseLinkCallback();
return FALSE; return FALSE;
} }
} }
+2 -2
View File
@@ -163,7 +163,7 @@ void CB2_UnionRoomBattle(void)
} }
else else
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40)) if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40))
{ {
gMain.state = 6; gMain.state = 6;
@@ -179,7 +179,7 @@ void CB2_UnionRoomBattle(void)
case 50: case 50:
if (!UpdatePaletteFade()) if (!UpdatePaletteFade())
{ {
PrepareSendLinkCmd2FFE_or_RfuCmd6600(); SetLinkStandbyCallback();
gMain.state++; gMain.state++;
} }
break; break;
+3 -3
View File
@@ -587,7 +587,7 @@ static void ChatEntryRoutine_ExitChat(void)
case 5: case 5:
if (IsLinkTaskFinished() && !GetRfuUnkCE8()) if (IsLinkTaskFinished() && !GetRfuUnkCE8())
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
sWork->exitDelayTimer = 0; sWork->exitDelayTimer = 0;
sWork->routineState++; sWork->routineState++;
} }
@@ -622,7 +622,7 @@ static void ChatEntryRoutine_Drop(void)
case 1: case 1:
if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8()) if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8())
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
sWork->exitDelayTimer = 0; sWork->exitDelayTimer = 0;
sWork->routineState++; sWork->routineState++;
} }
@@ -668,7 +668,7 @@ static void ChatEntryRoutine_Disbanded(void)
case 2: case 2:
if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8()) if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8())
{ {
Link_TryStartSend5FFF(); SetCloseLinkCallback();
sWork->exitDelayTimer = 0; sWork->exitDelayTimer = 0;
sWork->routineState++; sWork->routineState++;
} }