Merge pull request #548 from AsparagusEduardo/pokefirered_pokeemeraldSync4

pokeemerald sync No. 4
This commit is contained in:
GriffinR
2022-09-05 21:00:13 -04:00
committed by GitHub
39 changed files with 748 additions and 611 deletions
+2 -17
View File
@@ -29,11 +29,6 @@
(!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \ (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \
&& !(gDisableStructs[battler].mimickedMoves & gBitTable[moveSlot])) && !(gDisableStructs[battler].mimickedMoves & gBitTable[moveSlot]))
#define TRAINER_OPPONENT_3FE 0x3FE
#define TRAINER_UNION_ROOM 0xC00
#define TRAINER_LINK_OPPONENT 0x800
#define SECRET_BASE_OPPONENT 0x400
// Battle Actions // Battle Actions
// These determine what each battler will do in a turn // These determine what each battler will do in a turn
#define B_ACTION_USE_MOVE 0 #define B_ACTION_USE_MOVE 0
@@ -521,16 +516,6 @@ struct BattleScripting
u8 field_23; u8 field_23;
}; };
enum
{
BACK_PIC_RED,
BACK_PIC_LEAF,
BACK_PIC_RS_BRENDAN,
BACK_PIC_RS_MAY,
BACK_PIC_POKEDUDE,
BACK_PIC_OLDMAN
};
struct BattleSpriteInfo struct BattleSpriteInfo
{ {
/*0x0*/ u16 invisible : 1; // 0x1 /*0x0*/ u16 invisible : 1; // 0x1
@@ -685,8 +670,8 @@ extern u8 *gBattleAnimBgTileBuffer;
extern u8 *gBattleAnimBgTilemapBuffer; extern u8 *gBattleAnimBgTilemapBuffer;
extern void (*gBattleMainFunc)(void); extern void (*gBattleMainFunc)(void);
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT]; extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
extern u32 gUnknown_2022B54; extern u32 gUnusedFirstBattleVar1;
extern u8 gUnknown_2023DDC; extern u8 gUnusedFirstBattleVar2;
extern u8 gBattlerAttacker; extern u8 gBattlerAttacker;
extern u8 gEffectBattler; extern u8 gEffectBattler;
extern u8 gMultiHitCounter; extern u8 gMultiHitCounter;
+13 -13
View File
@@ -108,8 +108,8 @@ enum {
struct UnusedControllerStruct struct UnusedControllerStruct
{ {
u8 field_0 : 7; u8 unk:7;
u8 flag_x80 : 1; u8 flag:1;
}; };
struct HpAndStatus struct HpAndStatus
@@ -174,14 +174,14 @@ enum
CONTROLLER_CHOSENMONRETURNVALUE, CONTROLLER_CHOSENMONRETURNVALUE,
CONTROLLER_ONERETURNVALUE, CONTROLLER_ONERETURNVALUE,
CONTROLLER_ONERETURNVALUE_DUPLICATE, CONTROLLER_ONERETURNVALUE_DUPLICATE,
CONTROLLER_37, CONTROLLER_CLEARUNKVAR,
CONTROLLER_38, CONTROLLER_SETUNKVAR,
CONTROLLER_39, CONTROLLER_CLEARUNKFLAG,
CONTROLLER_40, CONTROLLER_TOGGLEUNKFLAG,
CONTROLLER_HITANIMATION, CONTROLLER_HITANIMATION,
CONTROLLER_42, CONTROLLER_CANTSWITCH,
CONTROLLER_EFFECTIVENESSSOUND, CONTROLLER_PLAYSE,
CONTROLLER_PLAYFANFAREORBGM, CONTROLLER_PLAYFANFARE,
CONTROLLER_FAINTINGCRY, CONTROLLER_FAINTINGCRY,
CONTROLLER_INTROSLIDE, CONTROLLER_INTROSLIDE,
CONTROLLER_INTROTRAINERBALLTHROW, CONTROLLER_INTROTRAINERBALLTHROW,
@@ -198,12 +198,12 @@ enum
CONTROLLER_CMDS_COUNT CONTROLLER_CMDS_COUNT
}; };
extern struct UnusedControllerStruct gUnknown_2022870; extern struct UnusedControllerStruct gUnusedControllerStruct;
// general functions // general functions
void HandleLinkBattleSetup(void); void HandleLinkBattleSetup(void);
void SetUpBattleVars(void); void SetUpBattleVars(void);
void InitBtlControllers(void); void InitBattleControllers(void);
void TryReceiveLinkBattleData(void); void TryReceiveLinkBattleData(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data); void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
@@ -221,7 +221,7 @@ void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId);
void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr); void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr);
void BtlController_EmitPrintString(u8 bufferId, u16 stringId); void BtlController_EmitPrintString(u8 bufferId, u16 stringId);
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId); void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2); void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId);
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData); void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1); void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1);
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4); void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4);
@@ -251,7 +251,7 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome); void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome);
// player controller // player controller
void PlayerDummy(void); void BattleControllerDummy(void);
void SetControllerToPlayer(void); void SetControllerToPlayer(void);
void PlayerHandleGetRawMonData(void); void PlayerHandleGetRawMonData(void);
void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite); void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite);
+1 -1
View File
@@ -15,7 +15,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId); void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId);
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId); void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
void DecompressTrainerBackPalette(u16 a1, u8 a2); void DecompressTrainerBackPalette(u16 a1, u8 a2);
void BattleGfxSfxDummy3(u8 a1); void BattleGfxSfxDummy3(u8 gender);
void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId); void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId);
bool8 BattleLoadAllHealthBoxesGfx(u8 state); bool8 BattleLoadAllHealthBoxesGfx(u8 state);
void LoadBattleBarGfx(u8 arg0); void LoadBattleBarGfx(u8 arg0);
+1 -1
View File
@@ -82,7 +82,7 @@ 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);
void UpdatePlayerPosInThrowAnim(struct Sprite *sprite); void UpdatePlayerPosInThrowAnim(struct Sprite *sprite);
void BattleDummy(void); void BeginBattleIntroDummy(void);
void BeginBattleIntro(void); void BeginBattleIntro(void);
void SwitchInClearSetData(void); void SwitchInClearSetData(void);
void FaintClearSetData(void); void FaintClearSetData(void);
+12 -2
View File
@@ -167,8 +167,18 @@
#define TRAINER_PIC_LADY 146 #define TRAINER_PIC_LADY 146
#define TRAINER_PIC_PAINTER 147 #define TRAINER_PIC_PAINTER 147
// Leftover from R/S // The player back pics are assumed to alternate according to the gender values (MALE/FEMALE)
#define TRAINER_SECRET_BASE 1024 #define TRAINER_BACK_PIC_RED 0
#define TRAINER_BACK_PIC_LEAF 1
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN 2
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY 3
#define TRAINER_BACK_PIC_POKEDUDE 4
#define TRAINER_BACK_PIC_OLD_MAN 5
// Special Trainer Ids.
#define TRAINER_UNION_ROOM 0xC00
#define TRAINER_LINK_OPPONENT 0x800
#define TRAINER_SECRET_BASE 0x400
#define TRAINER_CLASS_NONE 0 #define TRAINER_CLASS_NONE 0
#define TRAINER_CLASS_PKMN_TRAINER_UNUSED 1 #define TRAINER_CLASS_PKMN_TRAINER_UNUSED 1
+1 -1
View File
@@ -234,7 +234,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void);
u32 GetLinkPlayerTrainerId(u8); u32 GetLinkPlayerTrainerId(u8);
void ResetLinkPlayers(void); void ResetLinkPlayers(void);
u8 GetMultiplayerId(void); u8 GetMultiplayerId(void);
u8 bitmask_all_link_players_but_self(void); u8 BitmaskAllOtherLinkPlayers(void);
bool8 SendBlock(u8, const void *, u16); bool8 SendBlock(u8, const void *, u16);
u8 GetBlockReceivedStatus(void); u8 GetBlockReceivedStatus(void);
void ResetBlockReceivedFlags(void); void ResetBlockReceivedFlags(void);
+2 -2
View File
@@ -269,7 +269,7 @@ void BattleAI_HandleItemUseBeforeAISetup(void)
// Items are allowed to use in ONLY trainer battles. // Items are allowed to use in ONLY trainer battles.
if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
&& (gTrainerBattleOpponent_A != SECRET_BASE_OPPONENT) && (gTrainerBattleOpponent_A != TRAINER_SECRET_BASE)
&& !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_SAFARI | BATTLE_TYPE_LINK)) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_SAFARI | BATTLE_TYPE_LINK))
) )
{ {
@@ -339,7 +339,7 @@ void BattleAI_SetupAIData(void)
AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_ROAMING; AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_ROAMING;
return; return;
} }
else if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)) && (gTrainerBattleOpponent_A != SECRET_BASE_OPPONENT)) else if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)) && (gTrainerBattleOpponent_A != TRAINER_SECRET_BASE))
{ {
if (gBattleTypeFlags & BATTLE_TYPE_WILD_SCRIPTED) if (gBattleTypeFlags & BATTLE_TYPE_WILD_SCRIPTED)
{ {
+2 -2
View File
@@ -3861,8 +3861,8 @@ static void AnimAirCutterSlice(struct Sprite* sprite)
b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
{ {
a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2; a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X) + a) / 2;
b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2; b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y) + b) / 2;
} }
break; break;
case 0: case 0:
+2 -2
View File
@@ -661,8 +661,8 @@ static void AnimElectricity(struct Sprite *sprite)
// The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt // The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt
void AnimTask_ElectricBolt(u8 taskId) void AnimTask_ElectricBolt(u8 taskId)
{ {
gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0]; gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0];
gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1]; gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2]; gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_ElectricBolt_Step; gTasks[taskId].func = AnimTask_ElectricBolt_Step;
} }
+6 -6
View File
@@ -640,9 +640,9 @@ static void AnimFireRing_Step1(struct Sprite *sprite)
{ {
sprite->data[0] = 0x19; sprite->data[0] = 0x19;
sprite->data[1] = sprite->x; sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y; sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite); InitAnimLinearTranslation(sprite);
sprite->callback = AnimFireRing_Step2; sprite->callback = AnimFireRing_Step2;
} }
@@ -654,8 +654,8 @@ static void AnimFireRing_Step2(struct Sprite *sprite)
{ {
sprite->data[0] = 0; sprite->data[0] = 0;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->x2 = sprite->y2 = 0; sprite->x2 = sprite->y2 = 0;
sprite->callback = AnimFireRing_Step3; sprite->callback = AnimFireRing_Step3;
sprite->callback(sprite); sprite->callback(sprite);
@@ -1092,9 +1092,9 @@ static void AnimWillOWispOrb(struct Sprite *sprite)
sprite->x2 = sprite->y2 = 0; sprite->x2 = sprite->y2 = 0;
sprite->data[0] = 256; sprite->data[0] = 256;
sprite->data[1] = sprite->x; sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y; sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslationWithSpeed(sprite); InitAnimLinearTranslationWithSpeed(sprite);
sprite->callback = AnimWillOWispOrb_Step; sprite->callback = AnimWillOWispOrb_Step;
} }
+5 -5
View File
@@ -537,7 +537,7 @@ void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
{ {
FreeOamMatrix(sprite->oam.matrixNum); FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = 0; sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
} }
DestroySprite(sprite); DestroySprite(sprite);
--gAnimVisualTaskCount; --gAnimVisualTaskCount;
@@ -884,8 +884,8 @@ static void AnimFallingFeather_Step(struct Sprite *sprite)
static void AnimUnusedBubbleThrow(struct Sprite *sprite) static void AnimUnusedBubbleThrow(struct Sprite *sprite)
{ {
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = TranslateAnimSpriteToTargetMonLocation; sprite->callback = TranslateAnimSpriteToTargetMonLocation;
} }
@@ -1032,8 +1032,8 @@ void AnimTask_DrillPeckHitSplats(u8 taskId)
gBattleAnimArgs[2] = 1; gBattleAnimArgs[2] = 1;
gBattleAnimArgs[3] = 3; gBattleAnimArgs[3] = 3;
CreateSpriteAndAnimate(&gFlashingHitSplatSpriteTemplate, CreateSpriteAndAnimate(&gFlashingHitSplatSpriteTemplate,
GetBattlerSpriteCoord(gBattleAnimTarget, 2), GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2),
GetBattlerSpriteCoord(gBattleAnimTarget, 3), GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET),
3); 3);
} }
gTasks[taskId].data[0] += 8; gTasks[taskId].data[0] += 8;
+2 -2
View File
@@ -190,8 +190,8 @@ static void AnimSludgeProjectile(struct Sprite *sprite)
StartSpriteAnim(sprite, 2); StartSpriteAnim(sprite, 2);
InitSpritePosToAnimAttacker(sprite, 1); InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = -30; sprite->data[5] = -30;
InitAnimArcTranslation(sprite); InitAnimArcTranslation(sprite);
sprite->callback = AnimSludgeProjectile_Step; sprite->callback = AnimSludgeProjectile_Step;
+2 -2
View File
@@ -601,8 +601,8 @@ static void AnimQuestionMark(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
x = -x; x = -x;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x; sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + x;
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y; sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + y;
if (sprite->y < 16) if (sprite->y < 16)
sprite->y = 16; sprite->y = 16;
StoreSpriteCallbackInData6(sprite, AnimQuestionMark_Step1); StoreSpriteCallbackInData6(sprite, AnimQuestionMark_Step1);
+2 -2
View File
@@ -2080,7 +2080,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon)
} }
} }
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
} }
static void AnimTask_ShinySparkles(u8 taskId) static void AnimTask_ShinySparkles(u8 taskId)
@@ -2163,7 +2163,7 @@ static void AnimTask_ShinySparkles_WaitSparkles(u8 taskId)
if (gTasks[taskId].data[1] == TRUE) if (gTasks[taskId].data[1] == TRUE)
{ {
battler = gTasks[taskId].data[0]; battler = gTasks[taskId].data[0];
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
} }
DestroyTask(taskId); DestroyTask(taskId);
+173 -136
View File
@@ -1,4 +1,9 @@
#include "global.h" #include "global.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
#include "battle_message.h"
#include "gflib.h" #include "gflib.h"
#include "data.h" #include "data.h"
#include "link.h" #include "link.h"
@@ -6,11 +11,6 @@
#include "pokeball.h" #include "pokeball.h"
#include "task.h" #include "task.h"
#include "util.h" #include "util.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
#include "battle_message.h"
#include "constants/battle_anim.h" #include "constants/battle_anim.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/sound.h" #include "constants/sound.h"
@@ -53,12 +53,12 @@ static void LinkOpponentHandleTwoReturnValues(void);
static void LinkOpponentHandleChosenMonReturnValue(void); static void LinkOpponentHandleChosenMonReturnValue(void);
static void LinkOpponentHandleOneReturnValue(void); static void LinkOpponentHandleOneReturnValue(void);
static void LinkOpponentHandleOneReturnValue_Duplicate(void); static void LinkOpponentHandleOneReturnValue_Duplicate(void);
static void LinkOpponentHandleCmd37(void); static void LinkOpponentHandleClearUnkVar(void);
static void LinkOpponentHandleCmd38(void); static void LinkOpponentHandleSetUnkVar(void);
static void LinkOpponentHandleCmd39(void); static void LinkOpponentHandleClearUnkFlag(void);
static void LinkOpponentHandleCmd40(void); static void LinkOpponentHandleToggleUnkFlag(void);
static void LinkOpponentHandleHitAnimation(void); static void LinkOpponentHandleHitAnimation(void);
static void LinkOpponentHandleCmd42(void); static void LinkOpponentHandleCantSwitch(void);
static void LinkOpponentHandlePlaySE(void); static void LinkOpponentHandlePlaySE(void);
static void LinkOpponentHandlePlayFanfare(void); static void LinkOpponentHandlePlayFanfare(void);
static void LinkOpponentHandleFaintingCry(void); static void LinkOpponentHandleFaintingCry(void);
@@ -71,83 +71,82 @@ static void LinkOpponentHandleSpriteInvisibility(void);
static void LinkOpponentHandleBattleAnimation(void); static void LinkOpponentHandleBattleAnimation(void);
static void LinkOpponentHandleLinkStandbyMsg(void); static void LinkOpponentHandleLinkStandbyMsg(void);
static void LinkOpponentHandleResetActionMoveSelection(void); static void LinkOpponentHandleResetActionMoveSelection(void);
static void LinkOpponentHandleCmd55(void); static void LinkOpponentHandleEndLinkBattle(void);
static void LinkOpponentCmdEnd(void); static void LinkOpponentCmdEnd(void);
static void LinkOpponentBufferRunCommand(void); static void LinkOpponentBufferRunCommand(void);
static void LinkOpponentBufferExecCompleted(void); static void LinkOpponentBufferExecCompleted(void);
static void SwitchIn_HandleSoundAndEnd(void);
static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst); static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst);
static void SetLinkOpponentMonData(u8 monId); static void SetLinkOpponentMonData(u8 monId);
static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void); static void DoSwitchOutAnimation(void);
static void LinkOpponentDoMoveAnimation(void); static void LinkOpponentDoMoveAnimation(void);
static void SwitchIn_HandleSoundAndEnd(void);
static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit);
static void Task_StartSendOutAnim(u8 taskId); static void Task_StartSendOutAnim(u8 taskId);
static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite);
static void EndDrawPartyStatusSummary(void); static void EndDrawPartyStatusSummary(void);
static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{ {
LinkOpponentHandleGetMonData, [CONTROLLER_GETMONDATA] = LinkOpponentHandleGetMonData,
LinkOpponentHandleGetRawMonData, [CONTROLLER_GETRAWMONDATA] = LinkOpponentHandleGetRawMonData,
LinkOpponentHandleSetMonData, [CONTROLLER_SETMONDATA] = LinkOpponentHandleSetMonData,
LinkOpponentHandleSetRawMonData, [CONTROLLER_SETRAWMONDATA] = LinkOpponentHandleSetRawMonData,
LinkOpponentHandleLoadMonSprite, [CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite,
LinkOpponentHandleSwitchInAnim, [CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim,
LinkOpponentHandleReturnMonToBall, [CONTROLLER_RETURNMONTOBALL] = LinkOpponentHandleReturnMonToBall,
LinkOpponentHandleDrawTrainerPic, [CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic,
LinkOpponentHandleTrainerSlide, [CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide,
LinkOpponentHandleTrainerSlideBack, [CONTROLLER_TRAINERSLIDEBACK] = LinkOpponentHandleTrainerSlideBack,
LinkOpponentHandleFaintAnimation, [CONTROLLER_FAINTANIMATION] = LinkOpponentHandleFaintAnimation,
LinkOpponentHandlePaletteFade, [CONTROLLER_PALETTEFADE] = LinkOpponentHandlePaletteFade,
LinkOpponentHandleSuccessBallThrowAnim, [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkOpponentHandleSuccessBallThrowAnim,
LinkOpponentHandleBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = LinkOpponentHandleBallThrowAnim,
LinkOpponentHandlePause, [CONTROLLER_PAUSE] = LinkOpponentHandlePause,
LinkOpponentHandleMoveAnimation, [CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation,
LinkOpponentHandlePrintString, [CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString,
LinkOpponentHandlePrintSelectionString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkOpponentHandlePrintSelectionString,
LinkOpponentHandleChooseAction, [CONTROLLER_CHOOSEACTION] = LinkOpponentHandleChooseAction,
LinkOpponentHandleUnknownYesNoBox, [CONTROLLER_UNKNOWNYESNOBOX] = LinkOpponentHandleUnknownYesNoBox,
LinkOpponentHandleChooseMove, [CONTROLLER_CHOOSEMOVE] = LinkOpponentHandleChooseMove,
LinkOpponentHandleChooseItem, [CONTROLLER_OPENBAG] = LinkOpponentHandleChooseItem,
LinkOpponentHandleChoosePokemon, [CONTROLLER_CHOOSEPOKEMON] = LinkOpponentHandleChoosePokemon,
LinkOpponentHandleCmd23, [CONTROLLER_23] = LinkOpponentHandleCmd23,
LinkOpponentHandleHealthBarUpdate, [CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate,
LinkOpponentHandleExpUpdate, [CONTROLLER_EXPUPDATE] = LinkOpponentHandleExpUpdate,
LinkOpponentHandleStatusIconUpdate, [CONTROLLER_STATUSICONUPDATE] = LinkOpponentHandleStatusIconUpdate,
LinkOpponentHandleStatusAnimation, [CONTROLLER_STATUSANIMATION] = LinkOpponentHandleStatusAnimation,
LinkOpponentHandleStatusXor, [CONTROLLER_STATUSXOR] = LinkOpponentHandleStatusXor,
LinkOpponentHandleDataTransfer, [CONTROLLER_DATATRANSFER] = LinkOpponentHandleDataTransfer,
LinkOpponentHandleDMA3Transfer, [CONTROLLER_DMA3TRANSFER] = LinkOpponentHandleDMA3Transfer,
LinkOpponentHandlePlayBGM, [CONTROLLER_PLAYBGM] = LinkOpponentHandlePlayBGM,
LinkOpponentHandleCmd32, [CONTROLLER_32] = LinkOpponentHandleCmd32,
LinkOpponentHandleTwoReturnValues, [CONTROLLER_TWORETURNVALUES] = LinkOpponentHandleTwoReturnValues,
LinkOpponentHandleChosenMonReturnValue, [CONTROLLER_CHOSENMONRETURNVALUE] = LinkOpponentHandleChosenMonReturnValue,
LinkOpponentHandleOneReturnValue, [CONTROLLER_ONERETURNVALUE] = LinkOpponentHandleOneReturnValue,
LinkOpponentHandleOneReturnValue_Duplicate, [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkOpponentHandleOneReturnValue_Duplicate,
LinkOpponentHandleCmd37, [CONTROLLER_CLEARUNKVAR] = LinkOpponentHandleClearUnkVar,
LinkOpponentHandleCmd38, [CONTROLLER_SETUNKVAR] = LinkOpponentHandleSetUnkVar,
LinkOpponentHandleCmd39, [CONTROLLER_CLEARUNKFLAG] = LinkOpponentHandleClearUnkFlag,
LinkOpponentHandleCmd40, [CONTROLLER_TOGGLEUNKFLAG] = LinkOpponentHandleToggleUnkFlag,
LinkOpponentHandleHitAnimation, [CONTROLLER_HITANIMATION] = LinkOpponentHandleHitAnimation,
LinkOpponentHandleCmd42, [CONTROLLER_CANTSWITCH] = LinkOpponentHandleCantSwitch,
LinkOpponentHandlePlaySE, [CONTROLLER_PLAYSE] = LinkOpponentHandlePlaySE,
LinkOpponentHandlePlayFanfare, [CONTROLLER_PLAYFANFARE] = LinkOpponentHandlePlayFanfare,
LinkOpponentHandleFaintingCry, [CONTROLLER_FAINTINGCRY] = LinkOpponentHandleFaintingCry,
LinkOpponentHandleIntroSlide, [CONTROLLER_INTROSLIDE] = LinkOpponentHandleIntroSlide,
LinkOpponentHandleIntroTrainerBallThrow, [CONTROLLER_INTROTRAINERBALLTHROW] = LinkOpponentHandleIntroTrainerBallThrow,
LinkOpponentHandleDrawPartyStatusSummary, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkOpponentHandleDrawPartyStatusSummary,
LinkOpponentHandleHidePartyStatusSummary, [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkOpponentHandleHidePartyStatusSummary,
LinkOpponentHandleEndBounceEffect, [CONTROLLER_ENDBOUNCE] = LinkOpponentHandleEndBounceEffect,
LinkOpponentHandleSpriteInvisibility, [CONTROLLER_SPRITEINVISIBILITY] = LinkOpponentHandleSpriteInvisibility,
LinkOpponentHandleBattleAnimation, [CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation,
LinkOpponentHandleLinkStandbyMsg, [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg,
LinkOpponentHandleResetActionMoveSelection, [CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection,
LinkOpponentHandleCmd55, [CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle,
LinkOpponentCmdEnd [CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd
}; };
static void LinkOpponentDummy(void) static void LinkOpponentDummy(void)
{ {
} }
@@ -161,7 +160,7 @@ static void LinkOpponentBufferRunCommand(void)
{ {
if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{ {
if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkOpponentBufferCommands)) if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands))
sLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]](); sLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
else else
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
@@ -188,7 +187,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
@@ -197,31 +196,34 @@ static void Intro_DelayAndEnd(void)
static void Intro_WaitForShinyAnimAndHealthbox(void) static void Intro_WaitForShinyAnimAndHealthbox(void)
{ {
bool8 var = FALSE; bool32 healthboxAnimDone = FALSE;
if (!IsDoubleBattle() || ((IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))) if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{ {
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
var = TRUE; healthboxAnimDone = TRUE;
} }
else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == gSprites[gHealthboxSpriteIds[gActiveBattler]].callback) && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == gSprites[gHealthboxSpriteIds[gActiveBattler]].callback)
{ {
var = TRUE; healthboxAnimDone = TRUE;
} }
if (IsCryPlayingOrClearCrySongs()) if (IsCryPlayingOrClearCrySongs())
var = FALSE; healthboxAnimDone = FALSE;
if (var)
if (healthboxAnimDone)
{ {
if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
|| !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
return; return;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
} }
@@ -287,8 +289,8 @@ static void TryShinyAnimAfterMonAnim(void)
} }
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
@@ -301,6 +303,7 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1) if (hpValue != -1)
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
else else
@@ -330,7 +333,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void)
static void CompleteOnInactiveTextPrinter(void) static void CompleteOnInactiveTextPrinter(void)
{ {
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(B_WIN_MSG))
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -347,9 +350,9 @@ static void DoHitAnimBlinkSpriteEffect(void)
} }
else else
{ {
if (!(gSprites[spriteId].data[1] % 4)) if ((gSprites[spriteId].data[1] % 4) == 0)
gSprites[spriteId].invisible ^= 1; gSprites[spriteId].invisible ^= 1;
++gSprites[spriteId].data[1]; gSprites[spriteId].data[1]++;
} }
} }
@@ -359,6 +362,7 @@ static void SwitchIn_ShowSubstitute(void)
{ {
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd;
} }
} }
@@ -376,11 +380,14 @@ static void SwitchIn_ShowHealthbox(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler); StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -392,11 +399,13 @@ static void SwitchIn_ShowHealthbox(void)
static void SwitchIn_TryShinyAnim(void) static void SwitchIn_TryShinyAnim(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{ {
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
@@ -439,21 +448,21 @@ static void LinkOpponentHandleGetMonData(void)
u8 monToCheck; u8 monToCheck;
s32 i; s32 i;
if (!gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] == 0)
{ {
size += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); size += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
} }
else else
{ {
monToCheck = gBattleBufferA[gActiveBattler][2]; monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (monToCheck & 1) if (monToCheck & 1)
size += CopyLinkOpponentMonData(i, monData + size); size += CopyLinkOpponentMonData(i, monData + size);
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -472,7 +481,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
case REQUEST_ALL_BATTLE: case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM); battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM);
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
{ {
battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size);
battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
@@ -503,7 +512,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
StringCopy_Nickname(battleMon.nickname, nickname); StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon; src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); ++size) for (size = 0; size < sizeof(battleMon); size++)
dst[size] = src[size]; dst[size] = src[size];
break; break;
case REQUEST_SPECIES_BATTLE: case REQUEST_SPECIES_BATTLE:
@@ -519,14 +528,14 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
size = 2; size = 2;
break; break;
case REQUEST_MOVES_PP_BATTLE: case REQUEST_MOVES_PP_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
{ {
moveData.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size); moveData.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size);
moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
} }
moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
src = (u8 *)(&moveData); src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); ++size) for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size]; dst[size] = src[size];
break; break;
case REQUEST_MOVE1_BATTLE: case REQUEST_MOVE1_BATTLE:
@@ -539,10 +548,10 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
size = 2; size = 2;
break; break;
case REQUEST_PP_DATA_BATTLE: case REQUEST_PP_DATA_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
++size; size++;
break; break;
case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE2_BATTLE:
@@ -772,14 +781,14 @@ static void LinkOpponentHandleSetMonData(void)
u8 monToCheck; u8 monToCheck;
u8 i; u8 i;
if (!gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] == 0)
{ {
SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
} }
else else
{ {
monToCheck = gBattleBufferA[gActiveBattler][2]; monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (monToCheck & 1) if (monToCheck & 1)
SetLinkOpponentMonData(i); SetLinkOpponentMonData(i);
@@ -803,7 +812,7 @@ static void SetLinkOpponentMonData(u8 monId)
SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species); SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
@@ -842,7 +851,7 @@ static void SetLinkOpponentMonData(u8 monId)
SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
break; break;
case REQUEST_MOVES_PP_BATTLE: case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
@@ -1010,8 +1019,9 @@ static void LinkOpponentHandleSetRawMonData(void)
u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
u8 i; u8 i;
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
dst[i] = gBattleBufferA[gActiveBattler][3 + i]; dst[i] = gBattleBufferA[gActiveBattler][3 + i];
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -1021,15 +1031,19 @@ static void LinkOpponentHandleLoadMonSprite(void)
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim;
} }
@@ -1051,22 +1065,27 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
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, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
} }
static void LinkOpponentHandleReturnMonToBall(void) static void LinkOpponentHandleReturnMonToBall(void)
{ {
if (!gBattleBufferA[gActiveBattler][1]) if (gBattleBufferA[gActiveBattler][1] == 0)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1102,6 +1121,8 @@ static void DoSwitchOutAnimation(void)
} }
} }
#define sSpeedX data[0]
static void LinkOpponentHandleDrawTrainerPic(void) static void LinkOpponentHandleDrawTrainerPic(void)
{ {
s16 xPos; s16 xPos;
@@ -1109,10 +1130,11 @@ static void LinkOpponentHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
if (GetBattlerPosition(gActiveBattler) & BIT_FLANK) // second mon if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon
xPos = 152; xPos = 152;
else // first mon else // first mon
xPos = 200; xPos = 200;
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
@@ -1162,13 +1184,14 @@ static void LinkOpponentHandleDrawTrainerPic(void)
xPos, xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
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 = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
@@ -1177,6 +1200,8 @@ static void LinkOpponentHandleTrainerSlide(void)
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
#undef sSpeedX
static void LinkOpponentHandleTrainerSlideBack(void) static void LinkOpponentHandleTrainerSlideBack(void)
{ {
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
@@ -1194,7 +1219,7 @@ static void LinkOpponentHandleFaintAnimation(void)
{ {
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++;
} }
else else
{ {
@@ -1262,7 +1287,7 @@ static void LinkOpponentDoMoveAnimation(void)
{ {
case 0: case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
{ {
gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
@@ -1272,7 +1297,7 @@ static void LinkOpponentDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
SetBattlerSpriteAffineMode(0); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1281,7 +1306,7 @@ static void LinkOpponentDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
SetBattlerSpriteAffineMode(1); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
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);
@@ -1358,6 +1383,7 @@ static void LinkOpponentHandleHealthBarUpdate(void)
LoadBattleBarGfx(0); LoadBattleBarGfx(0);
hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP) if (hpVal != INSTANT_HP_BAR_DROP)
{ {
u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
@@ -1371,6 +1397,7 @@ static void LinkOpponentHandleHealthBarUpdate(void)
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
} }
@@ -1447,27 +1474,27 @@ static void LinkOpponentHandleOneReturnValue_Duplicate(void)
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
static void LinkOpponentHandleCmd37(void) static void LinkOpponentHandleClearUnkVar(void)
{ {
gUnknown_2022870.field_0 = 0; gUnusedControllerStruct.unk = 0;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
static void LinkOpponentHandleCmd38(void) static void LinkOpponentHandleSetUnkVar(void)
{ {
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
static void LinkOpponentHandleCmd39(void) static void LinkOpponentHandleClearUnkFlag(void)
{ {
gUnknown_2022870.flag_x80 = 0; gUnusedControllerStruct.flag = 0;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
static void LinkOpponentHandleCmd40(void) static void LinkOpponentHandleToggleUnkFlag(void)
{ {
gUnknown_2022870.flag_x80 ^= 1; gUnusedControllerStruct.flag ^= 1;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -1486,7 +1513,7 @@ static void LinkOpponentHandleHitAnimation(void)
} }
} }
static void LinkOpponentHandleCmd42(void) static void LinkOpponentHandleCantSwitch(void)
{ {
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -1499,6 +1526,7 @@ static void LinkOpponentHandlePlaySE(void)
pan = SOUND_PAN_ATTACKER; pan = SOUND_PAN_ATTACKER;
else else
pan = SOUND_PAN_TARGET; pan = SOUND_PAN_TARGET;
PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
@@ -1526,18 +1554,23 @@ static void LinkOpponentHandleIntroSlide(void)
static void LinkOpponentHandleIntroTrainerBallThrow(void) static void LinkOpponentHandleIntroTrainerBallThrow(void)
{ {
u8 paletteNum, taskId; u8 taskId;
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite);
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDummy; gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDummy;
} }
@@ -1576,19 +1609,19 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite)
static void LinkOpponentHandleDrawPartyStatusSummary(void) static void LinkOpponentHandleDrawPartyStatusSummary(void)
{ {
if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
if (gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] != 0)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2)
{ {
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay++;
return; return;
} }
else else
@@ -1596,17 +1629,20 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0;
} }
} }
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2])
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0x5D; if (gBattleBufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
} }
} }
static void EndDrawPartyStatusSummary(void) static void EndDrawPartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 0x5C) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
@@ -1659,12 +1695,13 @@ static void LinkOpponentHandleResetActionMoveSelection(void)
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
static void LinkOpponentHandleCmd55(void) static void LinkOpponentHandleEndLinkBattle(void)
{ {
if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW) if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW)
gBattleOutcome = gBattleBufferA[gActiveBattler][1]; gBattleOutcome = gBattleBufferA[gActiveBattler][1];
else else
gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
FadeOutMapMusic(5); FadeOutMapMusic(5);
BeginFastPaletteFade(3); BeginFastPaletteFade(3);
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
+202 -143
View File
@@ -51,12 +51,12 @@ static void LinkPartnerHandleTwoReturnValues(void);
static void LinkPartnerHandleChosenMonReturnValue(void); static void LinkPartnerHandleChosenMonReturnValue(void);
static void LinkPartnerHandleOneReturnValue(void); static void LinkPartnerHandleOneReturnValue(void);
static void LinkPartnerHandleOneReturnValue_Duplicate(void); static void LinkPartnerHandleOneReturnValue_Duplicate(void);
static void LinkPartnerHandleCmd37(void); static void LinkPartnerHandleClearUnkVar(void);
static void LinkPartnerHandleCmd38(void); static void LinkPartnerHandleSetUnkVar(void);
static void LinkPartnerHandleCmd39(void); static void LinkPartnerHandleClearUnkFlag(void);
static void LinkPartnerHandleCmd40(void); static void LinkPartnerHandleToggleUnkFlag(void);
static void LinkPartnerHandleHitAnimation(void); static void LinkPartnerHandleHitAnimation(void);
static void LinkPartnerHandleCmd42(void); static void LinkPartnerHandleCantSwitch(void);
static void LinkPartnerHandlePlaySE(void); static void LinkPartnerHandlePlaySE(void);
static void LinkPartnerHandlePlayFanfare(void); static void LinkPartnerHandlePlayFanfare(void);
static void LinkPartnerHandleFaintingCry(void); static void LinkPartnerHandleFaintingCry(void);
@@ -69,7 +69,7 @@ static void LinkPartnerHandleSpriteInvisibility(void);
static void LinkPartnerHandleBattleAnimation(void); static void LinkPartnerHandleBattleAnimation(void);
static void LinkPartnerHandleLinkStandbyMsg(void); static void LinkPartnerHandleLinkStandbyMsg(void);
static void LinkPartnerHandleResetActionMoveSelection(void); static void LinkPartnerHandleResetActionMoveSelection(void);
static void LinkPartnerHandleCmd55(void); static void LinkPartnerHandleEndLinkBattle(void);
static void LinkPartnerCmdEnd(void); static void LinkPartnerCmdEnd(void);
static void LinkPartnerBufferRunCommand(void); static void LinkPartnerBufferRunCommand(void);
@@ -85,63 +85,63 @@ static void EndDrawPartyStatusSummary(void);
static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{ {
LinkPartnerHandleGetMonData, [CONTROLLER_GETMONDATA] = LinkPartnerHandleGetMonData,
LinkPartnerHandleGetRawMonData, [CONTROLLER_GETRAWMONDATA] = LinkPartnerHandleGetRawMonData,
LinkPartnerHandleSetMonData, [CONTROLLER_SETMONDATA] = LinkPartnerHandleSetMonData,
LinkPartnerHandleSetRawMonData, [CONTROLLER_SETRAWMONDATA] = LinkPartnerHandleSetRawMonData,
LinkPartnerHandleLoadMonSprite, [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite,
LinkPartnerHandleSwitchInAnim, [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim,
LinkPartnerHandleReturnMonToBall, [CONTROLLER_RETURNMONTOBALL] = LinkPartnerHandleReturnMonToBall,
LinkPartnerHandleDrawTrainerPic, [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic,
LinkPartnerHandleTrainerSlide, [CONTROLLER_TRAINERSLIDE] = LinkPartnerHandleTrainerSlide,
LinkPartnerHandleTrainerSlideBack, [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack,
LinkPartnerHandleFaintAnimation, [CONTROLLER_FAINTANIMATION] = LinkPartnerHandleFaintAnimation,
LinkPartnerHandlePaletteFade, [CONTROLLER_PALETTEFADE] = LinkPartnerHandlePaletteFade,
LinkPartnerHandleSuccessBallThrowAnim, [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkPartnerHandleSuccessBallThrowAnim,
LinkPartnerHandleBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = LinkPartnerHandleBallThrowAnim,
LinkPartnerHandlePause, [CONTROLLER_PAUSE] = LinkPartnerHandlePause,
LinkPartnerHandleMoveAnimation, [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation,
LinkPartnerHandlePrintString, [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString,
LinkPartnerHandlePrintSelectionString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkPartnerHandlePrintSelectionString,
LinkPartnerHandleChooseAction, [CONTROLLER_CHOOSEACTION] = LinkPartnerHandleChooseAction,
LinkPartnerHandleUnknownYesNoBox, [CONTROLLER_UNKNOWNYESNOBOX] = LinkPartnerHandleUnknownYesNoBox,
LinkPartnerHandleChooseMove, [CONTROLLER_CHOOSEMOVE] = LinkPartnerHandleChooseMove,
LinkPartnerHandleChooseItem, [CONTROLLER_OPENBAG] = LinkPartnerHandleChooseItem,
LinkPartnerHandleChoosePokemon, [CONTROLLER_CHOOSEPOKEMON] = LinkPartnerHandleChoosePokemon,
LinkPartnerHandleCmd23, [CONTROLLER_23] = LinkPartnerHandleCmd23,
LinkPartnerHandleHealthBarUpdate, [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate,
LinkPartnerHandleExpUpdate, [CONTROLLER_EXPUPDATE] = LinkPartnerHandleExpUpdate,
LinkPartnerHandleStatusIconUpdate, [CONTROLLER_STATUSICONUPDATE] = LinkPartnerHandleStatusIconUpdate,
LinkPartnerHandleStatusAnimation, [CONTROLLER_STATUSANIMATION] = LinkPartnerHandleStatusAnimation,
LinkPartnerHandleStatusXor, [CONTROLLER_STATUSXOR] = LinkPartnerHandleStatusXor,
LinkPartnerHandleDataTransfer, [CONTROLLER_DATATRANSFER] = LinkPartnerHandleDataTransfer,
LinkPartnerHandleDMA3Transfer, [CONTROLLER_DMA3TRANSFER] = LinkPartnerHandleDMA3Transfer,
LinkPartnerHandlePlayBGM, [CONTROLLER_PLAYBGM] = LinkPartnerHandlePlayBGM,
LinkPartnerHandleCmd32, [CONTROLLER_32] = LinkPartnerHandleCmd32,
LinkPartnerHandleTwoReturnValues, [CONTROLLER_TWORETURNVALUES] = LinkPartnerHandleTwoReturnValues,
LinkPartnerHandleChosenMonReturnValue, [CONTROLLER_CHOSENMONRETURNVALUE] = LinkPartnerHandleChosenMonReturnValue,
LinkPartnerHandleOneReturnValue, [CONTROLLER_ONERETURNVALUE] = LinkPartnerHandleOneReturnValue,
LinkPartnerHandleOneReturnValue_Duplicate, [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkPartnerHandleOneReturnValue_Duplicate,
LinkPartnerHandleCmd37, [CONTROLLER_CLEARUNKVAR] = LinkPartnerHandleClearUnkVar,
LinkPartnerHandleCmd38, [CONTROLLER_SETUNKVAR] = LinkPartnerHandleSetUnkVar,
LinkPartnerHandleCmd39, [CONTROLLER_CLEARUNKFLAG] = LinkPartnerHandleClearUnkFlag,
LinkPartnerHandleCmd40, [CONTROLLER_TOGGLEUNKFLAG] = LinkPartnerHandleToggleUnkFlag,
LinkPartnerHandleHitAnimation, [CONTROLLER_HITANIMATION] = LinkPartnerHandleHitAnimation,
LinkPartnerHandleCmd42, [CONTROLLER_CANTSWITCH] = LinkPartnerHandleCantSwitch,
LinkPartnerHandlePlaySE, [CONTROLLER_PLAYSE] = LinkPartnerHandlePlaySE,
LinkPartnerHandlePlayFanfare, [CONTROLLER_PLAYFANFARE] = LinkPartnerHandlePlayFanfare,
LinkPartnerHandleFaintingCry, [CONTROLLER_FAINTINGCRY] = LinkPartnerHandleFaintingCry,
LinkPartnerHandleIntroSlide, [CONTROLLER_INTROSLIDE] = LinkPartnerHandleIntroSlide,
LinkPartnerHandleIntroTrainerBallThrow, [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow,
LinkPartnerHandleDrawPartyStatusSummary, [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary,
LinkPartnerHandleHidePartyStatusSummary, [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkPartnerHandleHidePartyStatusSummary,
LinkPartnerHandleEndBounceEffect, [CONTROLLER_ENDBOUNCE] = LinkPartnerHandleEndBounceEffect,
LinkPartnerHandleSpriteInvisibility, [CONTROLLER_SPRITEINVISIBILITY] = LinkPartnerHandleSpriteInvisibility,
LinkPartnerHandleBattleAnimation, [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation,
LinkPartnerHandleLinkStandbyMsg, [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg,
LinkPartnerHandleResetActionMoveSelection, [CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection,
LinkPartnerHandleCmd55, [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle,
LinkPartnerCmdEnd [CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd
}; };
static void LinkPartnerDummy(void) static void LinkPartnerDummy(void)
@@ -157,7 +157,7 @@ static void LinkPartnerBufferRunCommand(void)
{ {
if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{ {
if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkPartnerBufferCommands)) if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands))
sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]](); sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
else else
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -174,7 +174,7 @@ static void FreeTrainerSpriteAfterSlide(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{ {
BattleGfxSfxDummy3(0); BattleGfxSfxDummy3(MALE);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -183,7 +183,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -192,21 +192,23 @@ static void Intro_DelayAndEnd(void)
static void Intro_WaitForHealthbox(void) static void Intro_WaitForHealthbox(void)
{ {
bool32 var = FALSE; bool32 finished = FALSE;
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{ {
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
var = TRUE; finished = TRUE;
} }
else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy) && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy)
{ {
var = TRUE; finished = TRUE;
} }
if (IsCryPlayingOrClearCrySongs()) if (IsCryPlayingOrClearCrySongs())
var = FALSE; finished = FALSE;
if (var)
if (finished)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd;
@@ -216,29 +218,33 @@ static void Intro_WaitForHealthbox(void)
static void Intro_ShowHealthbox(void) static void Intro_ShowHealthbox(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
&& ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1)
{ {
if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
{ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
}
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL); HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox; SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
} }
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox;
} }
} }
@@ -253,6 +259,7 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1) if (hpValue != -1)
{ {
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
@@ -288,7 +295,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void)
static void CompleteOnInactiveTextPrinter(void) static void CompleteOnInactiveTextPrinter(void)
{ {
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(B_WIN_MSG))
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -305,9 +312,9 @@ static void DoHitAnimBlinkSpriteEffect(void)
} }
else else
{ {
if (!(gSprites[spriteId].data[1] % 4)) if ((gSprites[spriteId].data[1] % 4) == 0)
gSprites[spriteId].invisible ^= 1; gSprites[spriteId].invisible ^= 1;
++gSprites[spriteId].data[1]; gSprites[spriteId].data[1]++;
} }
} }
@@ -317,6 +324,7 @@ static void SwitchIn_ShowSubstitute(void)
{ {
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd; gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd;
} }
} }
@@ -324,17 +332,21 @@ static void SwitchIn_ShowSubstitute(void)
static void SwitchIn_WaitAndEnd(void) static void SwitchIn_WaitAndEnd(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
}
} }
static void SwitchIn_ShowHealthbox(void) static void SwitchIn_ShowHealthbox(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -349,8 +361,11 @@ static void SwitchIn_ShowHealthbox(void)
static void SwitchIn_TryShinyAnim(void) static void SwitchIn_TryShinyAnim(void)
{ {
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{ {
@@ -394,21 +409,21 @@ static void LinkPartnerHandleGetMonData(void)
u8 monToCheck; u8 monToCheck;
s32 i; s32 i;
if (!gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] == 0)
{ {
size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData); size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
} }
else else
{ {
monToCheck = gBattleBufferA[gActiveBattler][2]; monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (monToCheck & 1) if (monToCheck & 1)
size += CopyLinkPartnerMonData(i, monData + size); size += CopyLinkPartnerMonData(i, monData + size);
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -427,7 +442,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
case REQUEST_ALL_BATTLE: case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
{ {
battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
@@ -458,7 +473,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
StringCopy_Nickname(battleMon.nickname, nickname); StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon; src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); ++size) for (size = 0; size < sizeof(battleMon); size++)
dst[size] = src[size]; dst[size] = src[size];
break; break;
case REQUEST_SPECIES_BATTLE: case REQUEST_SPECIES_BATTLE:
@@ -474,14 +489,14 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 2; size = 2;
break; break;
case REQUEST_MOVES_PP_BATTLE: case REQUEST_MOVES_PP_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
{ {
moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size); moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
} }
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
src = (u8 *)(&moveData); src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); ++size) for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size]; dst[size] = src[size];
break; break;
case REQUEST_MOVE1_BATTLE: case REQUEST_MOVE1_BATTLE:
@@ -494,10 +509,10 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 2; size = 2;
break; break;
case REQUEST_PP_DATA_BATTLE: case REQUEST_PP_DATA_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size) for (size = 0; size < MAX_MON_MOVES; size++)
dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
++size; size++;
break; break;
case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE2_BATTLE:
@@ -714,6 +729,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 1; size = 1;
break; break;
} }
return size; return size;
} }
@@ -727,14 +743,14 @@ static void LinkPartnerHandleSetMonData(void)
u8 monToCheck; u8 monToCheck;
u8 i; u8 i;
if (!gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2] == 0)
{ {
SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]); SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]);
} }
else else
{ {
monToCheck = gBattleBufferA[gActiveBattler][2]; monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (monToCheck & 1) if (monToCheck & 1)
SetLinkPartnerMonData(i); SetLinkPartnerMonData(i);
@@ -758,7 +774,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species); SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item); SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]); SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
@@ -797,7 +813,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
break; break;
case REQUEST_MOVES_PP_BATTLE: case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; ++i) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]); SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]); SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
@@ -958,6 +974,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
break; break;
} }
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
} }
@@ -966,8 +983,9 @@ static void LinkPartnerHandleSetRawMonData(void)
u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
u8 i; u8 i;
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
dst[i] = gBattleBufferA[gActiveBattler][3 + i]; dst[i] = gBattleBufferA[gActiveBattler][3 + i];
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -978,11 +996,12 @@ static void LinkPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
@@ -1007,23 +1026,29 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
} }
static void LinkPartnerHandleReturnMonToBall(void) static void LinkPartnerHandleReturnMonToBall(void)
{ {
if (!gBattleBufferA[gActiveBattler][1]) if (gBattleBufferA[gActiveBattler][1] == 0)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1044,6 +1069,7 @@ static void DoSwitchOutAnimation(void)
case 0: case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1;
break; break;
case 1: case 1:
@@ -1057,6 +1083,8 @@ static void DoSwitchOutAnimation(void)
} }
} }
#define sSpeedX data[0]
static void LinkPartnerHandleDrawTrainerPic(void) static void LinkPartnerHandleDrawTrainerPic(void)
{ {
s16 xPos; s16 xPos;
@@ -1066,22 +1094,32 @@ static void LinkPartnerHandleDrawTrainerPic(void)
xPos = 90; xPos = 90;
else // First mon, on the left. else // First mon, on the left.
xPos = 32; xPos = 32;
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else else
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender;
}
DecompressTrainerBackPalette(trainerPicId, gActiveBattler); DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
#undef sSpeedX
static void LinkPartnerHandleTrainerSlide(void) static void LinkPartnerHandleTrainerSlide(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -1098,13 +1136,16 @@ static void LinkPartnerHandleTrainerSlideBack(void)
gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide;
} }
#define sSpeedX data[1]
#define sSpeedY data[2]
static void LinkPartnerHandleFaintAnimation(void) static void LinkPartnerHandleFaintAnimation(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
{ {
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++;
} }
else else
{ {
@@ -1113,14 +1154,17 @@ static void LinkPartnerHandleFaintAnimation(void)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim;
} }
} }
} }
#undef sSpeedX
#undef sSpeedY
static void LinkPartnerHandlePaletteFade(void) static void LinkPartnerHandlePaletteFade(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -1175,7 +1219,7 @@ static void LinkPartnerDoMoveAnimation(void)
{ {
case 0: case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8) && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
{ {
gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1; gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
@@ -1185,7 +1229,7 @@ static void LinkPartnerDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
SetBattlerSpriteAffineMode(0); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1194,7 +1238,7 @@ static void LinkPartnerDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
SetBattlerSpriteAffineMode(1); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
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);
@@ -1271,6 +1315,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
LoadBattleBarGfx(0); LoadBattleBarGfx(0);
hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP) if (hpVal != INSTANT_HP_BAR_DROP)
{ {
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
@@ -1284,6 +1329,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
} }
@@ -1360,27 +1406,27 @@ static void LinkPartnerHandleOneReturnValue_Duplicate(void)
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd37(void) static void LinkPartnerHandleClearUnkVar(void)
{ {
gUnknown_2022870.field_0 = 0; gUnusedControllerStruct.unk = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd38(void) static void LinkPartnerHandleSetUnkVar(void)
{ {
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd39(void) static void LinkPartnerHandleClearUnkFlag(void)
{ {
gUnknown_2022870.flag_x80 = 0; gUnusedControllerStruct.flag = 0;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd40(void) static void LinkPartnerHandleToggleUnkFlag(void)
{ {
gUnknown_2022870.flag_x80 ^= 1; gUnusedControllerStruct.flag ^= 1;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1399,7 +1445,7 @@ static void LinkPartnerHandleHitAnimation(void)
} }
} }
static void LinkPartnerHandleCmd42(void) static void LinkPartnerHandleCantSwitch(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1412,6 +1458,7 @@ static void LinkPartnerHandlePlaySE(void)
pan = SOUND_PAN_ATTACKER; pan = SOUND_PAN_ATTACKER;
else else
pan = SOUND_PAN_TARGET; pan = SOUND_PAN_TARGET;
PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1444,26 +1491,38 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
u32 trainerPicId; u32 trainerPicId;
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F9); paletteNum = AllocSpritePalette(0xD6F9);
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else else
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0; {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender;
}
LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy; gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy;
} }
@@ -1472,7 +1531,7 @@ static void Task_StartSendOutAnim(u8 taskId)
{ {
if (gTasks[taskId].data[1] < 24) if (gTasks[taskId].data[1] < 24)
{ {
++gTasks[taskId].data[1]; gTasks[taskId].data[1]++;
} }
else else
{ {
@@ -1502,7 +1561,7 @@ static void Task_StartSendOutAnim(u8 taskId)
static void LinkPartnerHandleDrawPartyStatusSummary(void) static void LinkPartnerHandleDrawPartyStatusSummary(void)
{ {
if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
@@ -1512,7 +1571,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2]) // Skip delay on battle start if (gBattleBufferA[gActiveBattler][2] != 0) // Skip delay on battle start
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1574,7 +1633,7 @@ static void LinkPartnerHandleResetActionMoveSelection(void)
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd55(void) static void LinkPartnerHandleEndLinkBattle(void)
{ {
gBattleOutcome = gBattleBufferA[gActiveBattler][1]; gBattleOutcome = gBattleBufferA[gActiveBattler][1];
FadeOutMapMusic(5); FadeOutMapMusic(5);
+21 -21
View File
@@ -441,10 +441,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
@@ -986,7 +986,7 @@ static void OakOldManHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
OakOldManBufferExecCompleted(); OakOldManBufferExecCompleted();
} }
@@ -1574,24 +1574,24 @@ static void OakOldManHandleDrawTrainerPic(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler); DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30); 30);
} }
else else
{ {
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_OLD_MAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_OLD_MAN].size) * 4 + 80,
30); 30);
} }
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
@@ -1601,20 +1601,20 @@ static void OakOldManHandleTrainerSlide(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{ {
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler); DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30); 30);
} }
else else
{ {
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_OLD_MAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_OLD_MAN].size) * 4 + 80,
30); 30);
} }
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -2086,14 +2086,14 @@ static void OakOldManHandleIntroTrainerBallThrow(void)
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8); paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
} }
else else
{ {
@@ -2113,7 +2113,7 @@ static void StartSendOutAnim(u8 battlerId)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+26 -26
View File
@@ -200,7 +200,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
@@ -225,10 +225,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
var = FALSE; var = FALSE;
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -281,8 +281,8 @@ static void TryShinyAnimAfterMonAnim(void)
} }
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
@@ -382,8 +382,8 @@ static void SwitchIn_ShowHealthbox(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -447,7 +447,7 @@ static void OpponentHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
@@ -765,7 +765,7 @@ static void OpponentHandleGetRawMonData(void)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
dst[i] = src[i]; dst[i] = src[i];
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst); BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
@@ -1026,8 +1026,8 @@ static void OpponentHandleLoadMonSprite(void)
{ {
DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
y = GetGhostSpriteDefault_Y(gActiveBattler); y = GetGhostSpriteDefault_Y(gActiveBattler);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = TRUE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = TRUE;
} }
else else
{ {
@@ -1036,10 +1036,10 @@ static void OpponentHandleLoadMonSprite(void)
} }
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
y, y,
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1068,7 +1068,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
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, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
@@ -1122,7 +1122,7 @@ static void OpponentHandleDrawTrainerPic(void)
{ {
u32 trainerPicId; u32 trainerPicId;
if (gTrainerBattleOpponent_A == 0x400) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
trainerPicId = GetSecretBaseTrainerPicIndex(); trainerPicId = GetSecretBaseTrainerPicIndex();
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicId = GetBattleTowerTrainerFrontSpriteId(); trainerPicId = GetBattleTowerTrainerFrontSpriteId();
@@ -1138,7 +1138,7 @@ static void OpponentHandleDrawTrainerPic(void)
176, 176,
(8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40, (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
@@ -1152,7 +1152,7 @@ static void OpponentHandleTrainerSlide(void)
{ {
u32 trainerPicId; u32 trainerPicId;
if (gTrainerBattleOpponent_A == 0x400) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
trainerPicId = GetSecretBaseTrainerPicIndex(); trainerPicId = GetSecretBaseTrainerPicIndex();
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicId = GetBattleTowerTrainerFrontSpriteId(); trainerPicId = GetBattleTowerTrainerFrontSpriteId();
@@ -1274,7 +1274,7 @@ static void OpponentDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
SetBattlerSpriteAffineMode(0); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1283,7 +1283,7 @@ static void OpponentDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
SetBattlerSpriteAffineMode(1); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
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);
@@ -1548,25 +1548,25 @@ static void OpponentHandleOneReturnValue_Duplicate(void)
static void OpponentHandleCmd37(void) static void OpponentHandleCmd37(void)
{ {
gUnknown_2022870.field_0 = 0; gUnusedControllerStruct.unk = 0;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
static void OpponentHandleCmd38(void) static void OpponentHandleCmd38(void)
{ {
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
static void OpponentHandleCmd39(void) static void OpponentHandleCmd39(void)
{ {
gUnknown_2022870.flag_x80 = 0; gUnusedControllerStruct.flag = 0;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
static void OpponentHandleCmd40(void) static void OpponentHandleCmd40(void)
{ {
gUnknown_2022870.flag_x80 ^= 1; gUnusedControllerStruct.flag ^= 1;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
@@ -1682,7 +1682,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
if (gBattleBufferA[gActiveBattler][2]) if (gBattleBufferA[gActiveBattler][2])
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2)
+24 -24
View File
@@ -173,7 +173,7 @@ static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYE
// not used // not used
static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 }; static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
void PlayerDummy(void) void BattleControllerDummy(void)
{ {
} }
@@ -863,7 +863,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void) static void Intro_DelayAndEnd(void)
{ {
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
@@ -890,10 +890,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -941,8 +941,8 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
@@ -1505,7 +1505,7 @@ static void PlayerHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -1824,7 +1824,7 @@ void PlayerHandleGetRawMonData(void)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i) for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
dst[i] = src[i]; dst[i] = src[i];
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst); BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -2105,7 +2105,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
@@ -2176,13 +2176,13 @@ static void PlayerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD) || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
else else
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
} }
else else
{ {
trainerPicId = gSaveBlock2Ptr->playerGender + BACK_PIC_RED; trainerPicId = gSaveBlock2Ptr->playerGender;
} }
DecompressTrainerBackPalette(trainerPicId, gActiveBattler); DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
@@ -2191,7 +2191,7 @@ static void PlayerHandleDrawTrainerPic(void)
(8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80,
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
@@ -2339,7 +2339,7 @@ static void PlayerDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
SetBattlerSpriteAffineMode(0); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -2348,7 +2348,7 @@ static void PlayerDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
SetBattlerSpriteAffineMode(1); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
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);
@@ -2523,7 +2523,7 @@ static void PlayerHandleExpUpdate(void)
gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_monId = monId;
gTasks[taskId].tExpTask_gainedExp = expPointsToGive; gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
gTasks[taskId].tExpTask_battler = gActiveBattler; gTasks[taskId].tExpTask_battler = gActiveBattler;
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
} }
} }
@@ -2626,25 +2626,25 @@ static void PlayerHandleOneReturnValue_Duplicate(void)
static void PlayerHandleCmd37(void) static void PlayerHandleCmd37(void)
{ {
gUnknown_2022870.field_0 = 0; gUnusedControllerStruct.unk = 0;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
static void PlayerHandleCmd38(void) static void PlayerHandleCmd38(void)
{ {
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
static void PlayerHandleCmd39(void) static void PlayerHandleCmd39(void)
{ {
gUnknown_2022870.flag_x80 = 0; gUnusedControllerStruct.flag = 0;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
static void PlayerHandleCmd40(void) static void PlayerHandleCmd40(void)
{ {
gUnknown_2022870.flag_x80 ^= 1; gUnusedControllerStruct.flag ^= 1;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -2720,7 +2720,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
} }
void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite) void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite)
@@ -2774,7 +2774,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2] != 0) if (gBattleBufferA[gActiveBattler][2] != 0)
+23 -23
View File
@@ -238,8 +238,8 @@ static void CompleteOnBattlerSpritePosX_0(void)
} }
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
@@ -278,8 +278,8 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
@@ -422,10 +422,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
@@ -729,7 +729,7 @@ static void PokedudeHandleGetMonData(void)
monToCheck >>= 1; monToCheck >>= 1;
} }
} }
BtlController_EmitDataTransfer(1, size, monData); BtlController_EmitDataTransfer(BUFFER_B, size, monData);
PokedudeBufferExecCompleted(); PokedudeBufferExecCompleted();
} }
@@ -1306,10 +1306,10 @@ static void PokedudeHandleLoadMonSprite(void)
y = GetBattlerSpriteDefault_Y(gActiveBattler); y = GetBattlerSpriteDefault_Y(gActiveBattler);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
y, y,
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1350,13 +1350,13 @@ static void PokedudeHandleDrawTrainerPic(void)
{ {
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_POKEDUDE].size) * 4 + 80,
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
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 = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
@@ -1370,7 +1370,7 @@ static void PokedudeHandleDrawTrainerPic(void)
176, 176,
(8 - gTrainerFrontPicCoords[tranerPicid].size) * 4 + 40, (8 - gTrainerFrontPicCoords[tranerPicid].size) * 4 + 40,
GetBattlerSpriteSubpriority(gActiveBattler)); GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[tranerPicid].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[tranerPicid].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
@@ -1383,11 +1383,11 @@ static void PokedudeHandleDrawTrainerPic(void)
static void PokedudeHandleTrainerSlide(void) static void PokedudeHandleTrainerSlide(void)
{ {
DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_POKEDUDE].size) * 4 + 80,
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96;
@@ -1496,7 +1496,7 @@ static void PokedudeDoMoveAnimation(void)
case 1: case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{ {
SetBattlerSpriteAffineMode(0); SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move); DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
} }
@@ -1505,7 +1505,7 @@ static void PokedudeDoMoveAnimation(void)
gAnimScriptCallback(); gAnimScriptCallback();
if (!gAnimScriptActive) if (!gAnimScriptActive)
{ {
SetBattlerSpriteAffineMode(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;
@@ -1858,7 +1858,7 @@ static void PokedudeHandleIntroTrainerBallThrow(void)
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8); paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5); taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
@@ -1878,7 +1878,7 @@ static void StartSendOutAnim(u8 battlerId)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId)); GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+1 -1
View File
@@ -346,7 +346,7 @@ static void SafariHandleDrawTrainerPic(void)
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+159 -117
View File
@@ -1,25 +1,22 @@
#include "global.h" #include "global.h"
#include "battle.h" #include "battle.h"
#include "battle_main.h"
#include "battle_ai_script_commands.h" #include "battle_ai_script_commands.h"
#include "battle_anim.h" #include "battle_anim.h"
#include "battle_util.h"
#include "battle_controllers.h" #include "battle_controllers.h"
#include "battle_message.h" #include "battle_message.h"
#include "cable_club.h"
#include "link.h" #include "link.h"
#include "link_rfu.h" #include "link_rfu.h"
#include "cable_club.h"
#include "party_menu.h" #include "party_menu.h"
#include "task.h" #include "task.h"
#include "util.h" #include "util.h"
#include "constants/abilities.h" #include "constants/abilities.h"
#include "constants/battle.h"
static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkSendTaskId = 0;
static EWRAM_DATA u8 sLinkReceiveTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0;
static EWRAM_DATA u8 gUnknown_202286E = 0; static EWRAM_DATA u8 sUnused = 0; // Debug? Never read
EWRAM_DATA struct UnusedControllerStruct gUnknown_2022870 = {0}; EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read
static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {0}; static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {};
static void CreateTasksForSendRecvLinkBuffers(void); static void CreateTasksForSendRecvLinkBuffers(void);
static void InitLinkBtlControllers(void); static void InitLinkBtlControllers(void);
@@ -45,24 +42,28 @@ void SetUpBattleVars(void)
{ {
s32 i; s32 i;
gBattleMainFunc = BattleDummy; gBattleMainFunc = BeginBattleIntroDummy;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{ {
gBattlerControllerFuncs[i] = PlayerDummy; gBattlerControllerFuncs[i] = BattleControllerDummy;
gBattlerPositions[i] = 0xFF; gBattlerPositions[i] = 0xFF;
gActionSelectionCursor[i] = 0; gActionSelectionCursor[i] = 0;
gMoveSelectionCursor[i] = 0; gMoveSelectionCursor[i] = 0;
} }
HandleLinkBattleSetup(); HandleLinkBattleSetup();
gBattleControllerExecFlags = 0; gBattleControllerExecFlags = 0;
ClearBattleAnimationVars(); ClearBattleAnimationVars();
ClearBattleMonForms(); ClearBattleMonForms();
BattleAI_HandleItemUseBeforeAISetup(); BattleAI_HandleItemUseBeforeAISetup();
gUnknown_2022B54 = 0;
gUnknown_2023DDC = 0; // Below are never read
gUnusedFirstBattleVar1 = 0;
gUnusedFirstBattleVar2 = 0;
} }
void InitBtlControllers(void) void InitBattleControllers(void)
{ {
s32 i; s32 i;
@@ -70,10 +71,14 @@ void InitBtlControllers(void)
InitLinkBtlControllers(); InitLinkBtlControllers();
else else
InitSinglePlayerBtlControllers(); InitSinglePlayerBtlControllers();
SetBattlePartyIds(); SetBattlePartyIds();
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
for (i = 0; i < gBattlersCount; ++i) {
for (i = 0; i < gBattlersCount; i++)
BufferBattlePartyCurrentOrderBySide(i, 0); BufferBattlePartyCurrentOrderBySide(i, 0);
}
} }
static void InitSinglePlayerBtlControllers(void) static void InitSinglePlayerBtlControllers(void)
@@ -143,55 +148,71 @@ static void InitLinkBtlControllers(void)
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
{ {
gBattleMainFunc = BeginBattleIntro; gBattleMainFunc = BeginBattleIntro;
gBattlerControllerFuncs[0] = SetControllerToPlayer; gBattlerControllerFuncs[0] = SetControllerToPlayer;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent; gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlersCount = 2; gBattlersCount = 2;
} }
else else
{ {
gBattlerControllerFuncs[1] = SetControllerToPlayer; gBattlerControllerFuncs[1] = SetControllerToPlayer;
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT; gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[0] = SetControllerToLinkOpponent; gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
gBattlersCount = 2; gBattlersCount = 2;
} }
} }
else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
{ {
gBattleMainFunc = BeginBattleIntro; gBattleMainFunc = BeginBattleIntro;
gBattlerControllerFuncs[0] = SetControllerToPlayer; gBattlerControllerFuncs[0] = SetControllerToPlayer;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent; gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlerControllerFuncs[2] = SetControllerToPlayer; gBattlerControllerFuncs[2] = SetControllerToPlayer;
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
gBattlerControllerFuncs[3] = SetControllerToLinkOpponent; gBattlerControllerFuncs[3] = SetControllerToLinkOpponent;
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT; gBattlersCount = MAX_BATTLERS_COUNT;
} }
else else
{ {
gBattlerControllerFuncs[1] = SetControllerToPlayer; gBattlerControllerFuncs[1] = SetControllerToPlayer;
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT; gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[0] = SetControllerToLinkOpponent; gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
gBattlerControllerFuncs[3] = SetControllerToPlayer; gBattlerControllerFuncs[3] = SetControllerToPlayer;
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT; gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
gBattlerControllerFuncs[2] = SetControllerToLinkOpponent; gBattlerControllerFuncs[2] = SetControllerToLinkOpponent;
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT; gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT; gBattlersCount = MAX_BATTLERS_COUNT;
} }
} }
else else
{ {
multiplayerId = GetMultiplayerId(); multiplayerId = GetMultiplayerId();
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
gBattleMainFunc = BeginBattleIntro; gBattleMainFunc = BeginBattleIntro;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{ {
switch (gLinkPlayers[i].id) switch (gLinkPlayers[i].id)
{ {
@@ -204,6 +225,7 @@ static void InitLinkBtlControllers(void)
BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1); BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
break; break;
} }
if (i == multiplayerId) if (i == multiplayerId)
{ {
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer; gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer;
@@ -223,7 +245,8 @@ static void InitLinkBtlControllers(void)
} }
else else
{ {
if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1))) if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1))
|| ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
{ {
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner; gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner;
switch (gLinkPlayers[i].id) switch (gLinkPlayers[i].id)
@@ -259,6 +282,7 @@ static void InitLinkBtlControllers(void)
} }
} }
} }
gBattlersCount = MAX_BATTLERS_COUNT; gBattlersCount = MAX_BATTLERS_COUNT;
} }
} }
@@ -269,7 +293,7 @@ static void SetBattlePartyIds(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{ {
for (i = 0; i < gBattlersCount; ++i) for (i = 0; i < gBattlersCount; i++)
{ {
for (j = 0; j < PARTY_SIZE; ++j) for (j = 0; j < PARTY_SIZE; ++j)
{ {
@@ -342,12 +366,12 @@ static void PrepareBufferDataTransfer(u8 bufferId, u8 *data, u16 size)
{ {
switch (bufferId) switch (bufferId)
{ {
case 0: case BUFFER_A:
for (i = 0; i < size; ++data, ++i) for (i = 0; i < size; data++, i++)
gBattleBufferA[gActiveBattler][i] = *data; gBattleBufferA[gActiveBattler][i] = *data;
break; break;
case 1: case BUFFER_B:
for (i = 0; i < size; ++data, ++i) for (i = 0; i < size; data++, i++)
gBattleBufferB[gActiveBattler][i] = *data; gBattleBufferB[gActiveBattler][i] = *data;
break; break;
} }
@@ -362,12 +386,14 @@ static void CreateTasksForSendRecvLinkBuffers(void)
gTasks[sLinkSendTaskId].data[13] = 0; gTasks[sLinkSendTaskId].data[13] = 0;
gTasks[sLinkSendTaskId].data[14] = 0; gTasks[sLinkSendTaskId].data[14] = 0;
gTasks[sLinkSendTaskId].data[15] = 0; gTasks[sLinkSendTaskId].data[15] = 0;
sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0); sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0);
gTasks[sLinkReceiveTaskId].data[12] = 0; gTasks[sLinkReceiveTaskId].data[12] = 0;
gTasks[sLinkReceiveTaskId].data[13] = 0; gTasks[sLinkReceiveTaskId].data[13] = 0;
gTasks[sLinkReceiveTaskId].data[14] = 0; gTasks[sLinkReceiveTaskId].data[14] = 0;
gTasks[sLinkReceiveTaskId].data[15] = 0; gTasks[sLinkReceiveTaskId].data[15] = 0;
gUnknown_202286E = 0;
sUnused = 0;
} }
enum enum
@@ -380,12 +406,13 @@ enum
LINK_BUFF_SIZE_HI, LINK_BUFF_SIZE_HI,
LINK_BUFF_ABSENT_BATTLER_FLAGS, LINK_BUFF_ABSENT_BATTLER_FLAGS,
LINK_BUFF_EFFECT_BATTLER, LINK_BUFF_EFFECT_BATTLER,
LINK_BUFF_DATA LINK_BUFF_DATA,
}; };
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data) void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
{ {
s32 alignedSize, i; s32 alignedSize;
s32 i;
alignedSize = size - size % 4 + 4; alignedSize = size - size % 4 + 4;
if (gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE) if (gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE)
@@ -401,8 +428,10 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8; gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ABSENT_BATTLER_FLAGS] = gAbsentBattlerFlags; gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ABSENT_BATTLER_FLAGS] = gAbsentBattlerFlags;
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_EFFECT_BATTLER] = gEffectBattler; gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_EFFECT_BATTLER] = gEffectBattler;
for (i = 0; i < size; ++i)
for (i = 0; i < size; i++)
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_DATA + i] = data[i]; gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_DATA + i] = data[i];
gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA; gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA;
} }
@@ -415,12 +444,13 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
{ {
case 0: case 0:
gTasks[taskId].data[10] = 100; gTasks[taskId].data[10] = 100;
++gTasks[taskId].data[11]; gTasks[taskId].data[11]++;
break; break;
case 1: case 1:
if (!--gTasks[taskId].data[10]) gTasks[taskId].data[10]--;
if (gTasks[taskId].data[10] == 0)
{ {
++gTasks[taskId].data[11]; gTasks[taskId].data[11]++;
if (gReceivedRemoteLinkPlayers) if (gReceivedRemoteLinkPlayers)
gTasks[taskId].data[11] = 3; gTasks[taskId].data[11] = 3;
} }
@@ -432,18 +462,18 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
if (IsLinkMaster()) if (IsLinkMaster())
{ {
CheckShouldAdvanceLinkState(); CheckShouldAdvanceLinkState();
++gTasks[taskId].data[11]; gTasks[taskId].data[11]++;
} }
else else
{ {
++gTasks[taskId].data[11]; gTasks[taskId].data[11]++;
} }
} }
break; break;
case 3: case 3:
if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
{ {
if (!gTasks[taskId].data[13]) if (gTasks[taskId].data[13] == 0)
{ {
if (gTasks[taskId].data[15] > gTasks[taskId].data[14] if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
&& gTasks[taskId].data[15] == gTasks[taskId].data[12]) && gTasks[taskId].data[15] == gTasks[taskId].data[12])
@@ -452,12 +482,12 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
gTasks[taskId].data[15] = 0; gTasks[taskId].data[15] = 0;
} }
blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA; blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA;
SendBlock(bitmask_all_link_players_but_self(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize); SendBlock(BitmaskAllOtherLinkPlayers(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize);
++gTasks[taskId].data[11]; gTasks[taskId].data[11]++;
} }
else else
{ {
--gTasks[taskId].data[13]; gTasks[taskId].data[13]--;
break; break;
} }
} }
@@ -472,7 +502,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
} }
break; break;
case 5: case 5:
if (!--gTasks[taskId].data[13]) if (--gTasks[taskId].data[13] == 0)
{ {
gTasks[taskId].data[13] = 5; gTasks[taskId].data[13] = 5;
gTasks[taskId].data[11] = 3; gTasks[taskId].data[11] = 3;
@@ -487,10 +517,10 @@ void TryReceiveLinkBattleData(void)
s32 j; s32 j;
u8 *recvBuffer; u8 *recvBuffer;
if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211)) if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211))
{ {
LinkRfu_DestroyIdleTask(); LinkRfu_DestroyIdleTask();
for (i = 0; i < GetLinkPlayerCount(); ++i) for (i = 0; i < GetLinkPlayerCount(); i++)
{ {
if (GetBlockReceivedStatus() & gBitTable[i]) if (GetBlockReceivedStatus() & gBitTable[i])
{ {
@@ -498,18 +528,21 @@ void TryReceiveLinkBattleData(void)
recvBuffer = (u8 *)gBlockRecvBuffer[i]; recvBuffer = (u8 *)gBlockRecvBuffer[i];
{ {
u8 *dest, *src; u8 *dest, *src;
u16 r6 = gBlockRecvBuffer[i][2]; u16 dataSize = gBlockRecvBuffer[i][2];
if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000) if (gTasks[sLinkReceiveTaskId].data[14] + 9 + dataSize > 0x1000)
{ {
gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14]; gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14];
gTasks[sLinkReceiveTaskId].data[14] = 0; gTasks[sLinkReceiveTaskId].data[14] = 0;
} }
dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]]; dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]];
src = recvBuffer; src = recvBuffer;
for (j = 0; j < r6 + 8; ++j)
for (j = 0; j < dataSize + 8; j++)
dest[j] = src[j]; dest[j] = src[j];
gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8;
gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + dataSize + 8;
} }
} }
} }
@@ -532,13 +565,16 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
} }
battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER]; battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER];
blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8); blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0]) switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0])
{ {
case 0: case 0:
if (gBattleControllerExecFlags & gBitTable[battlerId]) if (gBattleControllerExecFlags & gBitTable[battlerId])
return; return;
memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
MarkBattlerReceivedLinkData(battlerId); MarkBattlerReceivedLinkData(battlerId);
if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
{ {
gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ATTACKER]; gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ATTACKER];
@@ -555,6 +591,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4)); gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4));
break; break;
} }
gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA; gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA;
} }
} }
@@ -568,7 +605,7 @@ void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes) static void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA; sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
@@ -585,12 +622,12 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b
sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA; sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
sBattleBuffersTransferData[1] = requestId; sBattleBuffersTransferData[1] = requestId;
sBattleBuffersTransferData[2] = monToCheck; sBattleBuffersTransferData[2] = monToCheck;
for (i = 0; i < bytes; ++i) for (i = 0; i < bytes; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes);
} }
// not used // Unused
static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data) static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
{ {
s32 i; s32 i;
@@ -598,7 +635,7 @@ static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, voi
sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA; sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
sBattleBuffersTransferData[1] = monId; sBattleBuffersTransferData[1] = monId;
sBattleBuffersTransferData[2] = bytes; sBattleBuffersTransferData[2] = bytes;
for (i = 0; i < bytes; ++i) for (i = 0; i < bytes; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3);
} }
@@ -664,7 +701,7 @@ void BtlController_EmitFaintAnimation(u8 bufferId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitPaletteFade(u8 bufferId) static void BtlController_EmitPaletteFade(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE; sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
@@ -674,7 +711,7 @@ static void BtlController_EmitPaletteFade(u8 bufferId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitSuccessBallThrowAnim(u8 bufferId) static void BtlController_EmitSuccessBallThrowAnim(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM; sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
@@ -691,14 +728,14 @@ void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
} }
// not used // Unused
static void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data) static void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data)
{ {
s32 i; s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_PAUSE; sBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
sBattleBuffersTransferData[1] = toWait; sBattleBuffersTransferData[1] = toWait;
for (i = 0; i < toWait * 3; ++i) for (i = 0; i < toWait * 3; i++)
sBattleBuffersTransferData[2 + i] = *(u8 *)(data++); sBattleBuffersTransferData[2 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2);
} }
@@ -742,6 +779,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
sBattleBuffersTransferData[1] = gBattleOutcome; sBattleBuffersTransferData[1] = gBattleOutcome;
sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove; stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove; stringInfo->originallyUsedMove = gChosenMove;
@@ -752,9 +790,10 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->hpScale = gBattleStruct->hpScale; stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->itemEffectBattler = gPotentialItemEffectBattler; stringInfo->itemEffectBattler = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type; stringInfo->moveType = gBattleMoves[gCurrentMove].type;
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++)
{ {
stringInfo->textBuffs[0][i] = gBattleTextBuff1[i]; stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
@@ -772,6 +811,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY; sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove; stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove; stringInfo->originallyUsedMove = gChosenMove;
@@ -779,9 +819,10 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
stringInfo->lastAbility = gLastUsedAbility; stringInfo->lastAbility = gLastUsedAbility;
stringInfo->scrActive = gBattleScripting.battler; stringInfo->scrActive = gBattleScripting.battler;
stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx; 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++)
{ {
stringInfo->textBuffs[0][i] = gBattleTextBuff1[i]; stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
@@ -790,16 +831,17 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
} }
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2) // itemId only relevant for B_ACTION_USE_ITEM
void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION; sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
sBattleBuffersTransferData[1] = arg1; sBattleBuffersTransferData[1] = action;
sBattleBuffersTransferData[2] = arg2; sBattleBuffersTransferData[2] = itemId;
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (itemId & 0xFF00) >> 8;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered? static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered?
{ {
sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX; sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
@@ -815,35 +857,35 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN
sBattleBuffersTransferData[1] = isDoubleBattle; sBattleBuffersTransferData[1] = isDoubleBattle;
sBattleBuffersTransferData[2] = NoPpNumber; sBattleBuffersTransferData[2] = NoPpNumber;
sBattleBuffersTransferData[3] = 0; sBattleBuffersTransferData[3] = 0;
for (i = 0; i < sizeof(*movePpData); ++i) for (i = 0; i < sizeof(*movePpData); i++)
sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i); sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
} }
void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1) void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder)
{ {
s32 i; s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG; sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
for (i = 0; i < 3; ++i) for (i = 0; i < PARTY_SIZE / 2; i++)
sBattleBuffersTransferData[1 + i] = arg1[i]; sBattleBuffersTransferData[1 + i] = battlePartyOrder[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4) void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *data)
{ {
s32 i; s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON; sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
sBattleBuffersTransferData[1] = caseId; sBattleBuffersTransferData[1] = caseId;
sBattleBuffersTransferData[2] = arg2; sBattleBuffersTransferData[2] = slotId;
sBattleBuffersTransferData[3] = abilityId; sBattleBuffersTransferData[3] = abilityId;
for (i = 0; i < 3; ++i) for (i = 0; i < 3; i++)
sBattleBuffersTransferData[4 + i] = arg4[i]; sBattleBuffersTransferData[4 + i] = data[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written. PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
} }
// not used // Unused
static void BtlController_EmitCmd23(u8 bufferId) static void BtlController_EmitCmd23(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_23; sBattleBuffersTransferData[0] = CONTROLLER_23;
@@ -896,7 +938,7 @@ void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
} }
// not used // Unused
static void BtlController_EmitStatusXor(u8 bufferId, u8 b) static void BtlController_EmitStatusXor(u8 bufferId, u8 b)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR; sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
@@ -912,12 +954,12 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data)
sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER; sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
sBattleBuffersTransferData[2] = size; sBattleBuffersTransferData[2] = size;
sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
for (i = 0; i < size; ++i) for (i = 0; i < size; i++)
sBattleBuffersTransferData[4 + i] = *(u8 *)(data++); sBattleBuffersTransferData[4 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4);
} }
// not used // Unused
static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data) static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data)
{ {
s32 i; s32 i;
@@ -929,7 +971,7 @@ static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, voi
sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24; sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
sBattleBuffersTransferData[5] = size; sBattleBuffersTransferData[5] = size;
sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8; sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
for (i = 0; i < size; ++i) for (i = 0; i < size; i++)
sBattleBuffersTransferData[7 + i] = *(u8 *)(data++); sBattleBuffersTransferData[7 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7);
} }
@@ -945,12 +987,12 @@ static void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data)
// Nonsense loop using songId as a size // Nonsense loop using songId as a size
// Would go out of bounds for any song id after SE_DEOXYS_MOVE (253) // Would go out of bounds for any song id after SE_DEOXYS_MOVE (253)
for (i = 0; i < songId; ++i) for (i = 0; i < songId; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3);
} }
// not used // Unused
static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
{ {
s32 i; s32 i;
@@ -958,84 +1000,84 @@ static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
sBattleBuffersTransferData[0] = CONTROLLER_32; sBattleBuffersTransferData[0] = CONTROLLER_32;
sBattleBuffersTransferData[1] = size; sBattleBuffersTransferData[1] = size;
sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8; sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
for (i = 0; i < size; ++i) for (i = 0; i < size; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
} }
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2) void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES; sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
sBattleBuffersTransferData[1] = arg1; sBattleBuffersTransferData[1] = ret8;
sBattleBuffersTransferData[2] = arg2; sBattleBuffersTransferData[2] = ret16;
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (ret16 & 0xFF00) >> 8;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c) void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder)
{ {
s32 i; s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE; sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
sBattleBuffersTransferData[1] = b; sBattleBuffersTransferData[1] = partyId;
for (i = 0; i < 3; ++i) for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
sBattleBuffersTransferData[2 + i] = c[i]; sBattleBuffersTransferData[2 + i] = battlePartyOrder[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
} }
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1) void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE; sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
sBattleBuffersTransferData[1] = arg1; sBattleBuffersTransferData[1] = ret;
sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8; sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0; sBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b) void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE; sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
sBattleBuffersTransferData[1] = b; sBattleBuffersTransferData[1] = ret;
sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0; sBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitCmd37(u8 bufferId) static void BtlController_EmitClearUnkVar(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_37; sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKVAR;
sBattleBuffersTransferData[1] = CONTROLLER_37; sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKVAR;
sBattleBuffersTransferData[2] = CONTROLLER_37; sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKVAR;
sBattleBuffersTransferData[3] = CONTROLLER_37; sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKVAR;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitCmd38(u8 bufferId, u8 b) static void BtlController_EmitSetUnkVar(u8 bufferId, u8 b)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_38; sBattleBuffersTransferData[0] = CONTROLLER_SETUNKVAR;
sBattleBuffersTransferData[1] = b; sBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
} }
// not used // Unused
static void BtlController_EmitCmd39(u8 bufferId) static void BtlController_EmitClearUnkFlag(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_39; sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKFLAG;
sBattleBuffersTransferData[1] = CONTROLLER_39; sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKFLAG;
sBattleBuffersTransferData[2] = CONTROLLER_39; sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKFLAG;
sBattleBuffersTransferData[3] = CONTROLLER_39; sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKFLAG;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
// not used // Unused
static void BtlController_EmitCmd40(u8 bufferId) static void BtlController_EmitToggleUnkFlag(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_40; sBattleBuffersTransferData[0] = CONTROLLER_TOGGLEUNKFLAG;
sBattleBuffersTransferData[1] = CONTROLLER_40; sBattleBuffersTransferData[1] = CONTROLLER_TOGGLEUNKFLAG;
sBattleBuffersTransferData[2] = CONTROLLER_40; sBattleBuffersTransferData[2] = CONTROLLER_TOGGLEUNKFLAG;
sBattleBuffersTransferData[3] = CONTROLLER_40; sBattleBuffersTransferData[3] = CONTROLLER_TOGGLEUNKFLAG;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
@@ -1050,16 +1092,16 @@ void BtlController_EmitHitAnimation(u8 bufferId)
void BtlController_EmitCantSwitch(u8 bufferId) void BtlController_EmitCantSwitch(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_42; sBattleBuffersTransferData[0] = CONTROLLER_CANTSWITCH;
sBattleBuffersTransferData[1] = CONTROLLER_42; sBattleBuffersTransferData[1] = CONTROLLER_CANTSWITCH;
sBattleBuffersTransferData[2] = CONTROLLER_42; sBattleBuffersTransferData[2] = CONTROLLER_CANTSWITCH;
sBattleBuffersTransferData[3] = CONTROLLER_42; sBattleBuffersTransferData[3] = CONTROLLER_CANTSWITCH;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
void BtlController_EmitPlaySE(u8 bufferId, u16 songId) void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND; sBattleBuffersTransferData[0] = CONTROLLER_PLAYSE;
sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[1] = songId;
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0; sBattleBuffersTransferData[3] = 0;
@@ -1068,7 +1110,7 @@ void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId) void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM; sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFARE;
sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[1] = songId;
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0; sBattleBuffersTransferData[3] = 0;
@@ -1108,7 +1150,7 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h
sBattleBuffersTransferData[1] = flags & ~PARTY_SUMM_SKIP_DRAW_DELAY; // If true, skip player side sBattleBuffersTransferData[1] = flags & ~PARTY_SUMM_SKIP_DRAW_DELAY; // If true, skip player side
sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); ++i) for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++)
sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus)); sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus));
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4);
} }
+3 -3
View File
@@ -452,7 +452,7 @@ void DecompressTrainerBackPalette(u16 index, u8 palette)
LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20); LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20);
} }
void BattleGfxSfxDummy3(u8 a1) void BattleGfxSfxDummy3(u8 gender)
{ {
} }
@@ -894,12 +894,12 @@ void LoadAndCreateEnemyShadowSprites(void)
LoadCompressedSpriteSheetUsingHeap(&gSpriteSheet_EnemyShadow); LoadCompressedSpriteSheetUsingHeap(&gSpriteSheet_EnemyShadow);
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8); gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, 0xC8);
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId; gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
if (IsDoubleBattle()) if (IsDoubleBattle())
{ {
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8); gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, 0xC8);
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId; gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
} }
} }
+14 -13
View File
@@ -132,7 +132,7 @@ EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
static EWRAM_DATA u32 sFlickerArray[25] = {0}; static EWRAM_DATA u32 sFlickerArray[25] = {0};
EWRAM_DATA u32 gBattleTypeFlags = 0; EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0; EWRAM_DATA u8 gBattleTerrain = 0;
EWRAM_DATA u32 gUnknown_2022B54 = 0; EWRAM_DATA u32 gUnusedFirstBattleVar1 = 0;
EWRAM_DATA struct MultiBattlePokemonTx gMultiPartnerParty[3] = {0}; EWRAM_DATA struct MultiBattlePokemonTx gMultiPartnerParty[3] = {0};
EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL; EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL;
EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL; EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL;
@@ -184,7 +184,7 @@ EWRAM_DATA u8 gMoveResultFlags = 0;
EWRAM_DATA u32 gHitMarker = 0; EWRAM_DATA u32 gHitMarker = 0;
static EWRAM_DATA u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0}; static EWRAM_DATA u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gUnknown_2023DDC = 0; EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0;
EWRAM_DATA u16 gSideStatuses[2] = {0}; EWRAM_DATA u16 gSideStatuses[2] = {0};
EWRAM_DATA struct SideTimer gSideTimers[2] = {0}; EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
@@ -973,7 +973,7 @@ static void CB2_HandleStartBattle(void)
*(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2; *(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2;
BufferPartyVsScreenHealth_AtStart(); BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader));
gBattleCommunication[MULTIUSE_STATE] = 2; gBattleCommunication[MULTIUSE_STATE] = 2;
} }
if (gWirelessCommType != 0) if (gWirelessCommType != 0)
@@ -1008,7 +1008,7 @@ static void CB2_HandleStartBattle(void)
case 3: case 3:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
break; break;
@@ -1023,7 +1023,7 @@ static void CB2_HandleStartBattle(void)
case 7: case 7:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2); SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 2, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
break; break;
@@ -1038,7 +1038,7 @@ static void CB2_HandleStartBattle(void)
case 11: case 11:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2); SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 4, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
break; break;
@@ -1057,7 +1057,7 @@ static void CB2_HandleStartBattle(void)
} }
break; break;
case 15: case 15:
InitBtlControllers(); InitBattleControllers();
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE1] = 0;
gBattleCommunication[SPRITES_INIT_STATE2] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0;
@@ -1140,7 +1140,7 @@ static void CB2_PreInitMultiBattle(void)
if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished()) if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished())
{ {
PrepareOwnMultiPartnerBuffer(); PrepareOwnMultiPartnerBuffer();
SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons)); SendBlock(BitmaskAllOtherLinkPlayers(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons));
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
break; break;
@@ -1229,7 +1229,7 @@ static void CB2_HandleStartMultiBattle(void)
*(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2; *(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2;
BufferPartyVsScreenHealth_AtStart(); BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader));
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
if (gWirelessCommType) if (gWirelessCommType)
@@ -1280,7 +1280,7 @@ static void CB2_HandleStartMultiBattle(void)
case 3: case 3:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, sizeof(struct Pokemon) * 2); SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
break; break;
@@ -1343,7 +1343,7 @@ static void CB2_HandleStartMultiBattle(void)
case 7: case 7:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon)); SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon));
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
} }
break; break;
@@ -1416,7 +1416,7 @@ static void CB2_HandleStartMultiBattle(void)
} }
break; break;
case 11: case 11:
InitBtlControllers(); InitBattleControllers();
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE1] = 0;
gBattleCommunication[SPRITES_INIT_STATE2] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0;
@@ -2183,8 +2183,9 @@ static void SpriteCB_PlayerThrowUpdate(struct Sprite *sprite)
sprite->callback = SpriteCB_Idle; sprite->callback = SpriteCB_Idle;
} }
void BattleDummy(void) void BeginBattleIntroDummy(void)
{ {
} }
void BeginBattleIntro(void) void BeginBattleIntro(void)
+2 -2
View File
@@ -2040,7 +2040,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]]; toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]];
break; break;
case B_TXT_TRAINER1_CLASS: // trainer class name case B_TXT_TRAINER1_CLASS: // trainer class name
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()]; toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()];
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()]; toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
@@ -2054,7 +2054,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_A].trainerClass]; toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_A].trainerClass];
break; break;
case B_TXT_TRAINER1_NAME: // trainer1 name case B_TXT_TRAINER1_NAME: // trainer1 name
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
{ {
for (i = 0; i < (s32)NELEMS(gBattleResources->secretBase->trainerName); i++) for (i = 0; i < (s32)NELEMS(gBattleResources->secretBase->trainerName); i++)
text[i] = gBattleResources->secretBase->trainerName[i]; text[i] = gBattleResources->secretBase->trainerName[i];
+1 -1
View File
@@ -673,7 +673,7 @@ static const u8 sRubyLevelUpStatBoxStats[] =
static const struct OamData sOamData_MonIconOnLvlUpBanner = static const struct OamData sOamData_MonIconOnLvlUpBanner =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
+2 -2
View File
@@ -478,7 +478,7 @@ static const struct SpriteTemplate sSpriteTemplate_SlidingPokeball =
static const struct OamData sOamData_Unused = static const struct OamData sOamData_Unused =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -1076,7 +1076,7 @@ bool8 FldEff_Pokeball(void)
u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_SlidingPokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_SlidingPokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].data[0] = gFieldEffectArguments[2]; gSprites[spriteId].data[0] = gFieldEffectArguments[2];
gSprites[spriteId].data[1] = gFieldEffectArguments[3]; gSprites[spriteId].data[1] = gFieldEffectArguments[3];
gSprites[spriteId].data[2] = -1; gSprites[spriteId].data[2] = -1;
+3
View File
@@ -1002,10 +1002,13 @@ void Task_WaitForLinkPlayerConnection(u8 taskId)
SetMainCallback2(CB2_LinkError); SetMainCallback2(CB2_LinkError);
DestroyTask(taskId); DestroyTask(taskId);
} }
if (gReceivedRemoteLinkPlayers) if (gReceivedRemoteLinkPlayers)
DestroyTask(taskId); DestroyTask(taskId);
} }
#undef tTimer
static void Task_WaitExitToScript(u8 taskId) static void Task_WaitExitToScript(u8 taskId)
{ {
if (!gReceivedRemoteLinkPlayers) if (!gReceivedRemoteLinkPlayers)
+4 -4
View File
@@ -709,7 +709,7 @@ static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.
static const struct OamData sOamData_HeldItem = static const struct OamData sOamData_HeldItem =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -765,7 +765,7 @@ static const struct SpriteTemplate sSpriteTemplate_HeldItem =
static const struct OamData sOamData_MenuPokeball = static const struct OamData sOamData_MenuPokeball =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -822,7 +822,7 @@ static const struct SpriteTemplate sSpriteTemplate_MenuPokeball =
static const struct OamData sOamData_MenuPokeballSmall = static const struct OamData sOamData_MenuPokeballSmall =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -903,7 +903,7 @@ static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall =
static const struct OamData sOamData_StatusCondition = static const struct OamData sOamData_StatusCondition =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
+6 -6
View File
@@ -1,10 +1,10 @@
const struct MonCoords gTrainerBackPicCoords[] = { const struct MonCoords gTrainerBackPicCoords[] = {
{.size = 8, .y_offset = 5}, [TRAINER_BACK_PIC_RED] = {.size = 8, .y_offset = 5},
{.size = 8, .y_offset = 5}, [TRAINER_BACK_PIC_LEAF] = {.size = 8, .y_offset = 5},
{.size = 8, .y_offset = 4}, [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4}, [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4}, [TRAINER_BACK_PIC_POKEDUDE] = {.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4} [TRAINER_BACK_PIC_OLD_MAN] = {.size = 8, .y_offset = 4}
}; };
const struct CompressedSpriteSheet gTrainerBackPicTable[] = { const struct CompressedSpriteSheet gTrainerBackPicTable[] = {
+2 -2
View File
@@ -141,7 +141,7 @@ static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
static const struct OamData sOamData_EggHatch = static const struct OamData sOamData_EggHatch =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -221,7 +221,7 @@ static const struct SpriteTemplate sSpriteTemplate_EggHatch =
static const struct OamData sOamData_EggShard = static const struct OamData sOamData_EggShard =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
+1 -1
View File
@@ -982,7 +982,7 @@ u8 GetMultiplayerId(void)
return SIO_MULTI_CNT->id; return SIO_MULTI_CNT->id;
} }
u8 bitmask_all_link_players_but_self(void) u8 BitmaskAllOtherLinkPlayers(void)
{ {
u8 mpId; u8 mpId;
+2 -2
View File
@@ -82,7 +82,7 @@ static const struct ScrollIndicatorTemplate sScrollIndicatorTemplates[] =
static const struct OamData sOamData_ScrollArrowIndicator = static const struct OamData sOamData_ScrollArrowIndicator =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -222,7 +222,7 @@ static const struct Subsprite sSubsprite_RedOutline8 =
static const struct OamData sOamData_RedArrowCursor = static const struct OamData sOamData_RedArrowCursor =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
+2 -2
View File
@@ -3103,14 +3103,14 @@ u8 DexScreen_DrawMonAreaPage(void)
{ {
sPokedexScreenData->windowIds[14] = CreateMonPicSprite_HandleDeoxys(species, SHINY_ODDS, DexScreen_GetDefaultPersonality(species), TRUE, 40, 104, 0, 0xFFFF); sPokedexScreenData->windowIds[14] = CreateMonPicSprite_HandleDeoxys(species, SHINY_ODDS, DexScreen_GetDefaultPersonality(species), TRUE, 40, 104, 0, 0xFFFF);
gSprites[sPokedexScreenData->windowIds[14]].oam.paletteNum = 2; gSprites[sPokedexScreenData->windowIds[14]].oam.paletteNum = 2;
gSprites[sPokedexScreenData->windowIds[14]].oam.affineMode = 1; gSprites[sPokedexScreenData->windowIds[14]].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[sPokedexScreenData->windowIds[14]].oam.matrixNum = 2; gSprites[sPokedexScreenData->windowIds[14]].oam.matrixNum = 2;
gSprites[sPokedexScreenData->windowIds[14]].oam.priority = 1; gSprites[sPokedexScreenData->windowIds[14]].oam.priority = 1;
gSprites[sPokedexScreenData->windowIds[14]].y2 = gPokedexEntries[speciesId].pokemonOffset; gSprites[sPokedexScreenData->windowIds[14]].y2 = gPokedexEntries[speciesId].pokemonOffset;
SetOamMatrix(2, gPokedexEntries[speciesId].pokemonScale, 0, 0, gPokedexEntries[speciesId].pokemonScale); SetOamMatrix(2, gPokedexEntries[speciesId].pokemonScale, 0, 0, gPokedexEntries[speciesId].pokemonScale);
sPokedexScreenData->windowIds[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 80, 104, 0, 0xFFFF); sPokedexScreenData->windowIds[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 80, 104, 0, 0xFFFF);
gSprites[sPokedexScreenData->windowIds[15]].oam.paletteNum = 2; gSprites[sPokedexScreenData->windowIds[15]].oam.paletteNum = 2;
gSprites[sPokedexScreenData->windowIds[15]].oam.affineMode = 1; gSprites[sPokedexScreenData->windowIds[15]].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[sPokedexScreenData->windowIds[15]].oam.matrixNum = 1; gSprites[sPokedexScreenData->windowIds[15]].oam.matrixNum = 1;
gSprites[sPokedexScreenData->windowIds[15]].oam.priority = 1; gSprites[sPokedexScreenData->windowIds[15]].oam.priority = 1;
gSprites[sPokedexScreenData->windowIds[15]].y2 = gPokedexEntries[speciesId].trainerOffset; gSprites[sPokedexScreenData->windowIds[15]].y2 = gPokedexEntries[speciesId].trainerOffset;
+10 -10
View File
@@ -1506,9 +1506,9 @@ const struct SpriteTemplate gSpriteTemplates_Battlers[] =
}, },
}; };
const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] = static const struct SpriteTemplate sTrainerBackSpriteTemplates[] =
{ {
{ [TRAINER_BACK_PIC_RED] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1517,7 +1517,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_LEAF] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1526,7 +1526,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1535,7 +1535,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1544,7 +1544,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_POKEDUDE] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1553,7 +1553,7 @@ const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
.affineAnims = gAffineAnims_BattleSpritePlayerSide, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = SpriteCB_AllyMon, .callback = SpriteCB_AllyMon,
}, },
{ [TRAINER_BACK_PIC_OLD_MAN] = {
.tileTag = TAG_NONE, .tileTag = TAG_NONE,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_BattlerPlayer, .oam = &gOamData_BattlerPlayer,
@@ -1665,7 +1665,7 @@ const u16 gLinkPlayerFacilityClasses[] =
static const struct OamData sOakSpeechNidoranFDummyOamData = static const struct OamData sOakSpeechNidoranFDummyOamData =
{ {
.y = 0, .y = 0,
.affineMode = 0, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0, .objMode = 0,
.mosaic = FALSE, .mosaic = FALSE,
.bpp = 0, .bpp = 0,
@@ -2755,7 +2755,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
gMultiuseSpriteTemplate.paletteTag = trainerSpriteId; gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{ {
gMultiuseSpriteTemplate = gSpriteTemplates_TrainerBackpics[trainerSpriteId]; gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerSpriteId];
gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId];
} }
else else
@@ -3796,7 +3796,7 @@ static void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord
} }
} }
gBattleTypeFlags = 8; gBattleTypeFlags = 8;
gTrainerBattleOpponent_A = SECRET_BASE_OPPONENT; gTrainerBattleOpponent_A = TRAINER_SECRET_BASE;
} }
u8 GetSecretBaseTrainerPicIndex(void) u8 GetSecretBaseTrainerPicIndex(void)
+1 -1
View File
@@ -709,7 +709,7 @@ static void Task_StaticCountdown_Run(u8 taskId)
u16 packet[RFU_PACKET_SIZE]; u16 packet[RFU_PACKET_SIZE];
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (gReceivedRemoteLinkPlayers != 0) if (gReceivedRemoteLinkPlayers)
{ {
// Read link timer // Read link timer
if (gRecvCmds[0][1] == LINKCMD_COUNTDOWN) if (gRecvCmds[0][1] == LINKCMD_COUNTDOWN)
+4 -4
View File
@@ -202,9 +202,9 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
} }
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, battler); DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, battler);
else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, battler); DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, battler);
else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
else else
@@ -231,7 +231,7 @@ static void CreateBattlerSprite(u8 battler)
if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
return; return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler; gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -265,7 +265,7 @@ static void CreateBattlerSprite(u8 battler)
else else
{ {
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler; gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
+5 -5
View File
@@ -1682,7 +1682,7 @@ static void CommunicatePlayerSelectedMonForTrade(void)
{ {
sTradeMenuResourcesPtr->linkData[0] = 0xAABB; sTradeMenuResourcesPtr->linkData[0] = 0xAABB;
sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition;
SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20);
} }
else else
{ {
@@ -1741,7 +1741,7 @@ static void TradeMenuCB_0(void)
{ {
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
sTradeMenuResourcesPtr->linkData[i] = i; sTradeMenuResourcesPtr->linkData[i] = i;
SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20);
} }
} }
@@ -1854,7 +1854,7 @@ static void CommunicateWhetherMonCanBeTraded(void)
sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; sTradeMenuResourcesPtr->linkData[0] = 0xBBBB;
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20);
} }
break; break;
case 2: case 2:
@@ -1880,7 +1880,7 @@ static void TradeMenuCB_3(void)
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; sTradeMenuResourcesPtr->linkData[0] = 0xBBCC;
SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20);
} }
sTradeMenuResourcesPtr->tradeMenuCBnum = 100; sTradeMenuResourcesPtr->tradeMenuCBnum = 100;
PutWindowTilemap(17); PutWindowTilemap(17);
@@ -2400,7 +2400,7 @@ static void RunScheduledLinkTasks(void)
switch (sTradeMenuResourcesPtr->cron[i].kind) switch (sTradeMenuResourcesPtr->cron[i].kind)
{ {
case 0: case 0:
SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20);
break; break;
case 1: case 1:
PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY);
+4 -4
View File
@@ -1093,7 +1093,7 @@ static void HandleLinkDataSend(void)
case 1: case 1:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, 20);
sTradeData->scheduleLinkTransfer++; sTradeData->scheduleLinkTransfer++;
} }
case 2: case 2:
@@ -1465,7 +1465,7 @@ static bool8 DoTradeAnim_Cable(void)
if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0]))
{ {
gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt;
gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3);
StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0);
} }
@@ -1968,7 +1968,7 @@ static bool8 DoTradeAnim_Wireless(void)
if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0]))
{ {
gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt;
gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3);
StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0);
} }
@@ -2526,7 +2526,7 @@ static void CB2_WaitAndAckTradeComplete(void)
if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1) if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1)
{ {
sTradeData->linkData[0] = 0xDCBA; sTradeData->linkData[0] = 0xDCBA;
SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, 20);
sTradeData->tradeStatus1 = 2; sTradeData->tradeStatus1 = 2;
sTradeData->tradeStatus2 = 2; sTradeData->tradeStatus2 = 2;
} }