move data to c
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "pokemon.h"
|
||||
#include "battle.h"
|
||||
#include "battle_setup.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "random.h"
|
||||
@@ -44,26 +45,7 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
|
||||
AI scripts.
|
||||
*/
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gCurrentMove;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSideStatuses[2];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gMoveResultFlags;
|
||||
extern s32 gBattleMoveDamage;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u16 gBattleWeather;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const struct BaseStats gBaseStats[];
|
||||
extern const u8 * const gBattleAI_ScriptsTable[];
|
||||
|
||||
extern u32 GetAiScriptsInRecordedBattle();
|
||||
|
||||
@@ -8,23 +8,8 @@
|
||||
#include "random.h"
|
||||
#include "util.h"
|
||||
#include "constants/items.h"
|
||||
#include "pokemon_item_effects.h"
|
||||
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gMoveResultFlags;
|
||||
extern u8 gCritMultiplier;
|
||||
extern s32 gBattleMoveDamage;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const struct BaseStats gBaseStats[];
|
||||
extern const u8 gTypeEffectiveness[];
|
||||
extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
|
||||
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
|
||||
#define ANIM_SPRITE_INDEX_COUNT 8
|
||||
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u16 gBattle_WIN0H;
|
||||
extern u16 gBattle_WIN0V;
|
||||
extern u16 gBattle_WIN1H;
|
||||
@@ -35,12 +33,9 @@ extern u16 gBattle_BG1_X;
|
||||
extern u16 gBattle_BG1_Y;
|
||||
extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
|
||||
extern const u16 gUnknown_082C8D64[];
|
||||
extern const u8 * const gBattleAnims_Moves[];
|
||||
|
||||
+1
-3
@@ -18,6 +18,7 @@
|
||||
#include "window.h"
|
||||
#include "text_window.h"
|
||||
#include "menu.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
struct BattleBackground
|
||||
{
|
||||
@@ -35,13 +36,10 @@ extern const struct BgTemplate gUnknown_0831AA08[4];
|
||||
extern const struct WindowTemplate *gUnknown_0831ABA0[];
|
||||
extern const struct BattleBackground gBattleTerrainTable[];
|
||||
|
||||
extern u8 gBattleTerrain;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gBattle_BG1_X;
|
||||
extern u16 gBattle_BG1_Y;
|
||||
extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gPartnerTrainerId;
|
||||
|
||||
extern u8 GetCurrentMapBattleScene(void);
|
||||
|
||||
|
||||
@@ -24,47 +24,21 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gFacilityClassToPicIndex[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern void sub_81851A8(u8 *);
|
||||
extern u16 sub_8068B48(void);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void LinkOpponentHandleGetMonData(void);
|
||||
@@ -1270,7 +1244,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|
||||
{
|
||||
if (gActiveBattler == 1)
|
||||
if (gActiveBattler == B_POSITION_OPPONENT_LEFT)
|
||||
trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A);
|
||||
else
|
||||
trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B);
|
||||
@@ -1280,18 +1254,18 @@ static void LinkOpponentHandleDrawTrainerPic(void)
|
||||
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED
|
||||
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN)
|
||||
{
|
||||
if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != 0)
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_10];
|
||||
if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE)
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_LEAF];
|
||||
else
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_9];
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RED];
|
||||
}
|
||||
else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|
||||
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != 0)
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_12];
|
||||
if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE)
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_MAY];
|
||||
else
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_11];
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1310,17 +1284,17 @@ static void LinkOpponentHandleDrawTrainerPic(void)
|
||||
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN)
|
||||
{
|
||||
if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != 0)
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_10];
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_LEAF];
|
||||
else
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_9];
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RED];
|
||||
}
|
||||
else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_RUBY
|
||||
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != 0)
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_12];
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_MAY];
|
||||
else
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_11];
|
||||
trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1722,7 +1696,7 @@ static void LinkOpponentHandleFaintingCry(void)
|
||||
static void LinkOpponentHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1744,7 +1718,7 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_28;
|
||||
@@ -1804,7 +1778,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -1826,7 +1800,7 @@ static void sub_806782C(void)
|
||||
static void LinkOpponentHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,34 +23,10 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@@ -60,6 +36,7 @@ extern const struct BattleMove gBattleMoves[];
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern void sub_81851A8(u8 *);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void LinkPartnerHandleGetMonData(void);
|
||||
@@ -1543,7 +1520,7 @@ static void LinkPartnerHandleFaintingCry(void)
|
||||
static void LinkPartnerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1589,7 +1566,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_112;
|
||||
@@ -1636,7 +1613,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -1658,7 +1635,7 @@ static void sub_814DE9C(void)
|
||||
static void LinkPartnerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -27,33 +27,12 @@
|
||||
#include "random.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void *gUnknown_020244D8;
|
||||
extern void *gUnknown_020244DC;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
@@ -1866,7 +1845,7 @@ static void OpponentHandleFaintingCry(void)
|
||||
static void OpponentHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1888,7 +1867,7 @@ static void OpponentHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_26;
|
||||
@@ -1953,7 +1932,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -1975,7 +1954,7 @@ static void sub_8062A2C(void)
|
||||
static void OpponentHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,44 +26,19 @@
|
||||
#include "random.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
#include "item_use.h"
|
||||
#include "recorded_battle.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u8 gPlayerDpadHoldFrames;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gUnknown_0203CEE8;
|
||||
extern u8 gUnknown_0203CEE9;
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern s32 gUnknown_0203CD70;
|
||||
extern u8 gBankInMenu;
|
||||
extern u32 gBattlePalaceMoveSelectionRngValue;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
@@ -897,7 +872,7 @@ static void HandleMoveSwitchting(void)
|
||||
|
||||
static void sub_80586F8(void)
|
||||
{
|
||||
if (gLinkVSyncDisabled == 0)
|
||||
if (gWirelessCommType == 0)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
@@ -933,7 +908,7 @@ void sub_80587B0(void)
|
||||
{
|
||||
if (sub_800A520())
|
||||
{
|
||||
if (gLinkVSyncDisabled == 0)
|
||||
if (gWirelessCommType == 0)
|
||||
sub_800AC34();
|
||||
else
|
||||
sub_800ADF8();
|
||||
@@ -2677,7 +2652,7 @@ static void PlayerHandleChooseItem(void)
|
||||
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][1 + i];
|
||||
@@ -2704,7 +2679,7 @@ static void PlayerHandleChoosePokemon(void)
|
||||
*(&gBattleStruct->field_B0) = gBattleBufferA[gActiveBattler][3];
|
||||
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_80597CC;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2953,7 +2928,7 @@ static void PlayerHandleFaintingCry(void)
|
||||
static void PlayerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -2981,7 +2956,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
|
||||
@@ -3039,7 +3014,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -3061,7 +3036,7 @@ static void sub_805CE38(void)
|
||||
static void PlayerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,35 +22,11 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@@ -60,6 +36,7 @@ extern const struct BattleMove gBattleMoves[];
|
||||
extern void sub_81358F4(void);
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void PlayerPartnerHandleGetMonData(void);
|
||||
@@ -1796,7 +1773,7 @@ static void PlayerPartnerHandleFaintingCry(void)
|
||||
static void PlayerPartnerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1835,7 +1812,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_77;
|
||||
@@ -1882,7 +1859,7 @@ static void PlayerPartnerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -1904,7 +1881,7 @@ static void sub_81BE498(void)
|
||||
static void PlayerPartnerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -24,38 +24,13 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "item_use.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@@ -63,6 +38,7 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern u16 sub_8068B48(void);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void RecordedOpponentHandleGetMonData(void);
|
||||
@@ -1258,7 +1234,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBankLinkPlayerGender());
|
||||
trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBattlerLinkPlayerGender());
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1661,7 +1637,7 @@ static void RecordedOpponentHandleFaintingCry(void)
|
||||
static void RecordedOpponentHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1683,7 +1659,7 @@ static void RecordedOpponentHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_70;
|
||||
@@ -1743,7 +1719,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -1765,7 +1741,7 @@ static void sub_818975C(void)
|
||||
static void RecordedOpponentHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,36 +23,11 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
@@ -63,6 +38,7 @@ extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void RecordedPlayerHandleGetMonData(void);
|
||||
@@ -1230,7 +1206,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
trainerPicId = GetActiveBankLinkPlayerGender();
|
||||
trainerPicId = GetActiveBattlerLinkPlayerGender();
|
||||
else
|
||||
trainerPicId = gLinkPlayers[gUnknown_0203C7B4].gender;
|
||||
}
|
||||
@@ -1684,7 +1660,7 @@ static void RecordedPlayerHandleFaintingCry(void)
|
||||
static void RecordedPlayerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1719,7 +1695,7 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_120;
|
||||
@@ -1766,7 +1742,7 @@ static void RecordedPlayerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[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].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@@ -1788,7 +1764,7 @@ static void sub_818CDF4(void)
|
||||
static void RecordedPlayerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,27 +21,11 @@
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "pokeblock.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
|
||||
@@ -500,7 +484,7 @@ static void SafariHandleChooseItem(void)
|
||||
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = SafariOpenPokeblockCase;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
}
|
||||
|
||||
static void SafariHandleChoosePokemon(void)
|
||||
@@ -648,7 +632,7 @@ static void SafariHandleFaintingCry(void)
|
||||
static void SafariHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@@ -27,38 +27,12 @@
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "party_menu.h"
|
||||
#include "battle_setup.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern s32 gUnknown_0203CD70;
|
||||
extern u8 gBankInMenu;
|
||||
extern u32 gBattlePalaceMoveSelectionRngValue;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
@@ -1282,7 +1256,7 @@ static void WallyHandleChooseItem(void)
|
||||
{
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = OpenBagAfterPaletteFade;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
}
|
||||
|
||||
static void WallyHandleChoosePokemon(void)
|
||||
@@ -1452,7 +1426,7 @@ static void WallyHandleFaintingCry(void)
|
||||
static void WallyHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
WallyBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1480,7 +1454,7 @@ static void WallyHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
|
||||
@@ -1541,7 +1515,7 @@ static void WallyHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[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]);
|
||||
WallyBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
+321
-329
@@ -12,37 +12,29 @@
|
||||
#include "constants/abilities.h"
|
||||
#include "battle_message.h"
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gUnknown_0202428C;
|
||||
extern u32 gUnknown_02022FF4;
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBuffersTransferData[0x100];
|
||||
extern u32 gBattleExecBuffer;
|
||||
extern void (*gBattleBankFunc[4])(void);
|
||||
extern u8 gBanksByIdentity[4];
|
||||
extern u8 gActionSelectionCursor[4];
|
||||
extern u8 gMoveSelectionCursor[4];
|
||||
extern u8 gNoOfAllBanks;
|
||||
extern u8 gActiveBank;
|
||||
extern u16 gBattlePartyID[4];
|
||||
extern u8 gBattleBufferA[4][0x200];
|
||||
extern u8 gBattleBufferB[4][0x200];
|
||||
extern u8 gUnknown_02022D08;
|
||||
extern u8 gUnknown_02022D09;
|
||||
extern u8 gUnknown_02022D0A;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gBankAttacker;
|
||||
extern u8 gBankTarget;
|
||||
extern u8 gAbsentBankFlags;
|
||||
extern u8 gEffectBank;
|
||||
extern u16 gBattleWeather;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gCurrentMove;
|
||||
extern u16 gChosenMove;
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gStringBattler;
|
||||
extern struct BattlePokemon gBattleMons[4];
|
||||
extern u16 gLastUsedMove;
|
||||
extern u8 gStringBank;
|
||||
extern u8 gBattleBuffersTransferData[0x100];
|
||||
|
||||
static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {};
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
@@ -61,7 +53,7 @@ void HandleLinkBattleSetup(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
sub_800B488();
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
OpenLink();
|
||||
@@ -757,7 +749,7 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_SIZE_LO] = alignedSize;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_ABSENT_BANK_FLAGS] = gAbsentBattlerFlags;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_EFFECT_BANK] = gEffectBank;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_EFFECT_BANK] = gEffectBattler;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_DATA + i] = data[i];
|
||||
@@ -782,7 +774,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
|
||||
gTasks[taskId].data[11]++;
|
||||
break;
|
||||
case 2:
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
gTasks[taskId].data[11]++;
|
||||
}
|
||||
@@ -923,7 +915,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 2];
|
||||
gBattlerTarget = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 3];
|
||||
gAbsentBattlerFlags = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 6];
|
||||
gEffectBank = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 7];
|
||||
gEffectBattler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 7];
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
@@ -941,171 +933,171 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
|
||||
void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
|
||||
gBattleBuffersTransferData[1] = requestId;
|
||||
gBattleBuffersTransferData[2] = monToCheck;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
|
||||
sBattleBuffersTransferData[1] = requestId;
|
||||
sBattleBuffersTransferData[2] = monToCheck;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
|
||||
gBattleBuffersTransferData[1] = monId;
|
||||
gBattleBuffersTransferData[2] = bytes;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
|
||||
sBattleBuffersTransferData[1] = monId;
|
||||
sBattleBuffersTransferData[2] = bytes;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
|
||||
gBattleBuffersTransferData[1] = requestId;
|
||||
gBattleBuffersTransferData[2] = monToCheck;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
|
||||
sBattleBuffersTransferData[1] = requestId;
|
||||
sBattleBuffersTransferData[2] = monToCheck;
|
||||
for (i = 0; i < bytes; i++)
|
||||
gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 3 + bytes);
|
||||
sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes);
|
||||
}
|
||||
|
||||
void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
|
||||
gBattleBuffersTransferData[1] = monId;
|
||||
gBattleBuffersTransferData[2] = bytes;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
|
||||
sBattleBuffersTransferData[1] = monId;
|
||||
sBattleBuffersTransferData[2] = bytes;
|
||||
for (i = 0; i < bytes; i++)
|
||||
gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, bytes + 3);
|
||||
sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3);
|
||||
}
|
||||
|
||||
void BtlController_EmitLoadMonSprite(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SWITCHINANIM;
|
||||
gBattleBuffersTransferData[1] = partyId;
|
||||
gBattleBuffersTransferData[2] = dontClearSubstituteBit;
|
||||
gBattleBuffersTransferData[3] = 5;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_SWITCHINANIM;
|
||||
sBattleBuffersTransferData[1] = partyId;
|
||||
sBattleBuffersTransferData[2] = dontClearSubstituteBit;
|
||||
sBattleBuffersTransferData[3] = 5;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_RETURNMONTOBALL;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_RETURNMONTOBALL;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitDrawTrainerPic(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitTrainerSlide(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitTrainerSlideBack(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitFaintAnimation(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_FAINTANIMATION;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_FAINTANIMATION;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_FAINTANIMATION;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_FAINTANIMATION;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_FAINTANIMATION;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_FAINTANIMATION;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_FAINTANIMATION;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_FAINTANIMATION;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitPaletteFade(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitSuccessBallThrowAnim(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
|
||||
gBattleBuffersTransferData[1] = caseId;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
|
||||
sBattleBuffersTransferData[1] = caseId;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
|
||||
gBattleBuffersTransferData[1] = toWait;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
|
||||
sBattleBuffersTransferData[1] = toWait;
|
||||
for (i = 0; i < toWait * 3; i++)
|
||||
gBattleBuffersTransferData[2 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, toWait * 3 + 2);
|
||||
sBattleBuffersTransferData[2 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_MOVEANIMATION;
|
||||
gBattleBuffersTransferData[1] = move;
|
||||
gBattleBuffersTransferData[2] = (move & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = turnOfMove;
|
||||
gBattleBuffersTransferData[4] = movePower;
|
||||
gBattleBuffersTransferData[5] = (movePower & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[6] = dmg;
|
||||
gBattleBuffersTransferData[7] = (dmg & 0x0000FF00) >> 8;
|
||||
gBattleBuffersTransferData[8] = (dmg & 0x00FF0000) >> 16;
|
||||
gBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24;
|
||||
gBattleBuffersTransferData[10] = friendship;
|
||||
gBattleBuffersTransferData[11] = multihit;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_MOVEANIMATION;
|
||||
sBattleBuffersTransferData[1] = move;
|
||||
sBattleBuffersTransferData[2] = (move & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = turnOfMove;
|
||||
sBattleBuffersTransferData[4] = movePower;
|
||||
sBattleBuffersTransferData[5] = (movePower & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[6] = dmg;
|
||||
sBattleBuffersTransferData[7] = (dmg & 0x0000FF00) >> 8;
|
||||
sBattleBuffersTransferData[8] = (dmg & 0x00FF0000) >> 16;
|
||||
sBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24;
|
||||
sBattleBuffersTransferData[10] = friendship;
|
||||
sBattleBuffersTransferData[11] = multihit;
|
||||
if (WEATHER_HAS_EFFECT2)
|
||||
{
|
||||
gBattleBuffersTransferData[12] = gBattleWeather;
|
||||
gBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[12] = gBattleWeather;
|
||||
sBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBuffersTransferData[12] = 0;
|
||||
gBattleBuffersTransferData[13] = 0;
|
||||
sBattleBuffersTransferData[12] = 0;
|
||||
sBattleBuffersTransferData[13] = 0;
|
||||
}
|
||||
gBattleBuffersTransferData[14] = 0;
|
||||
gBattleBuffersTransferData[15] = 0;
|
||||
memcpy(&gBattleBuffersTransferData[16], disableStructPtr, sizeof(struct DisableStruct));
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 16 + sizeof(struct DisableStruct));
|
||||
sBattleBuffersTransferData[14] = 0;
|
||||
sBattleBuffersTransferData[15] = 0;
|
||||
memcpy(&sBattleBuffersTransferData[16], disableStructPtr, sizeof(struct DisableStruct));
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 16 + sizeof(struct DisableStruct));
|
||||
}
|
||||
|
||||
void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
|
||||
@@ -1113,12 +1105,12 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
|
||||
s32 i;
|
||||
struct StringInfoBattle* stringInfo;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
|
||||
gBattleBuffersTransferData[1] = gBattleOutcome;
|
||||
gBattleBuffersTransferData[2] = stringID;
|
||||
gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
|
||||
sBattleBuffersTransferData[1] = gBattleOutcome;
|
||||
sBattleBuffersTransferData[2] = stringID;
|
||||
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
|
||||
|
||||
stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
|
||||
stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]);
|
||||
stringInfo->currentMove = gCurrentMove;
|
||||
stringInfo->originallyUsedMove = gChosenMove;
|
||||
stringInfo->lastItem = gLastUsedItem;
|
||||
@@ -1126,7 +1118,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
|
||||
stringInfo->scrActive = gBattleScripting.battler;
|
||||
stringInfo->unk1605E = gBattleStruct->field_52;
|
||||
stringInfo->hpScale = gBattleStruct->hpScale;
|
||||
stringInfo->StringBank = gStringBattler;
|
||||
stringInfo->StringBank = gPotentialItemEffectBattler;
|
||||
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
@@ -1137,7 +1129,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
|
||||
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
|
||||
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
|
||||
}
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
|
||||
@@ -1145,12 +1137,12 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
|
||||
s32 i;
|
||||
struct StringInfoBattle *stringInfo;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
|
||||
gBattleBuffersTransferData[2] = stringID;
|
||||
gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
|
||||
sBattleBuffersTransferData[2] = stringID;
|
||||
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
|
||||
|
||||
stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
|
||||
stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]);
|
||||
stringInfo->currentMove = gCurrentMove;
|
||||
stringInfo->originallyUsedMove = gChosenMove;
|
||||
stringInfo->lastItem = gLastUsedItem;
|
||||
@@ -1166,386 +1158,386 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
|
||||
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
|
||||
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
|
||||
}
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = arg2;
|
||||
gBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[2] = arg2;
|
||||
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitUnknownYesNoBox(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_CHOOSEMOVE;
|
||||
gBattleBuffersTransferData[1] = isDoubleBattle;
|
||||
gBattleBuffersTransferData[2] = NoPpNumber;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEMOVE;
|
||||
sBattleBuffersTransferData[1] = isDoubleBattle;
|
||||
sBattleBuffersTransferData[2] = NoPpNumber;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
for (i = 0; i < sizeof(*movePpData); i++)
|
||||
gBattleBuffersTransferData[4 + i] = *((u8*)(movePpData) + i);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(*movePpData) + 4);
|
||||
sBattleBuffersTransferData[4 + i] = *((u8*)(movePpData) + i);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
|
||||
for (i = 0; i < 3; i++)
|
||||
gBattleBuffersTransferData[1 + i] = arg1[i];
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[1 + i] = arg1[i];
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
|
||||
gBattleBuffersTransferData[1] = caseId;
|
||||
gBattleBuffersTransferData[2] = arg2;
|
||||
gBattleBuffersTransferData[3] = abilityId;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
|
||||
sBattleBuffersTransferData[1] = caseId;
|
||||
sBattleBuffersTransferData[2] = arg2;
|
||||
sBattleBuffersTransferData[3] = abilityId;
|
||||
for (i = 0; i < 3; i++)
|
||||
gBattleBuffersTransferData[4 + i] = arg4[i];
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 8); // but only 7 bytes were written
|
||||
sBattleBuffersTransferData[4 + i] = arg4[i];
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // but only 7 bytes were written
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd23(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_23;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_23;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_23;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_23;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_23;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_23;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_23;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_23;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
// why is the argument u16 if it's being cast to s16 anyway?
|
||||
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_HEALTHBARUPDATE;
|
||||
gBattleBuffersTransferData[1] = 0;
|
||||
gBattleBuffersTransferData[2] = (s16)hpValue;
|
||||
gBattleBuffersTransferData[3] = ((s16)hpValue & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_HEALTHBARUPDATE;
|
||||
sBattleBuffersTransferData[1] = 0;
|
||||
sBattleBuffersTransferData[2] = (s16)hpValue;
|
||||
sBattleBuffersTransferData[3] = ((s16)hpValue & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
// why is the argument u16 if it's being cast to s16 anyway?
|
||||
void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE;
|
||||
gBattleBuffersTransferData[1] = partyId;
|
||||
gBattleBuffersTransferData[2] = (s16)expPoints;
|
||||
gBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE;
|
||||
sBattleBuffersTransferData[1] = partyId;
|
||||
sBattleBuffersTransferData[2] = (s16)expPoints;
|
||||
sBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_STATUSICONUPDATE;
|
||||
gBattleBuffersTransferData[1] = status1;
|
||||
gBattleBuffersTransferData[2] = (status1 & 0x0000FF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = (status1 & 0x00FF0000) >> 16;
|
||||
gBattleBuffersTransferData[4] = (status1 & 0xFF000000) >> 24;
|
||||
gBattleBuffersTransferData[5] = status2;
|
||||
gBattleBuffersTransferData[6] = (status2 & 0x0000FF00) >> 8;
|
||||
gBattleBuffersTransferData[7] = (status2 & 0x00FF0000) >> 16;
|
||||
gBattleBuffersTransferData[8] = (status2 & 0xFF000000) >> 24;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 9);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_STATUSICONUPDATE;
|
||||
sBattleBuffersTransferData[1] = status1;
|
||||
sBattleBuffersTransferData[2] = (status1 & 0x0000FF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = (status1 & 0x00FF0000) >> 16;
|
||||
sBattleBuffersTransferData[4] = (status1 & 0xFF000000) >> 24;
|
||||
sBattleBuffersTransferData[5] = status2;
|
||||
sBattleBuffersTransferData[6] = (status2 & 0x0000FF00) >> 8;
|
||||
sBattleBuffersTransferData[7] = (status2 & 0x00FF0000) >> 16;
|
||||
sBattleBuffersTransferData[8] = (status2 & 0xFF000000) >> 24;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 9);
|
||||
}
|
||||
|
||||
void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_STATUSANIMATION;
|
||||
gBattleBuffersTransferData[1] = status2;
|
||||
gBattleBuffersTransferData[2] = status;
|
||||
gBattleBuffersTransferData[3] = (status & 0x0000FF00) >> 8;
|
||||
gBattleBuffersTransferData[4] = (status & 0x00FF0000) >> 16;
|
||||
gBattleBuffersTransferData[5] = (status & 0xFF000000) >> 24;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 6);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_STATUSANIMATION;
|
||||
sBattleBuffersTransferData[1] = status2;
|
||||
sBattleBuffersTransferData[2] = status;
|
||||
sBattleBuffersTransferData[3] = (status & 0x0000FF00) >> 8;
|
||||
sBattleBuffersTransferData[4] = (status & 0x00FF0000) >> 16;
|
||||
sBattleBuffersTransferData[5] = (status & 0xFF000000) >> 24;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
|
||||
}
|
||||
|
||||
void BtlController_EmitStatusXor(u8 bufferId, u8 b)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
|
||||
sBattleBuffersTransferData[1] = b;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DATATRANSFER;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
|
||||
gBattleBuffersTransferData[2] = size;
|
||||
gBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_DATATRANSFER;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
|
||||
sBattleBuffersTransferData[2] = size;
|
||||
sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
|
||||
for (i = 0; i < size; i++)
|
||||
gBattleBuffersTransferData[4 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 4);
|
||||
sBattleBuffersTransferData[4 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DMA3TRANSFER;
|
||||
gBattleBuffersTransferData[1] = (u32)(dst);
|
||||
gBattleBuffersTransferData[2] = ((u32)(dst) & 0x0000FF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = ((u32)(dst) & 0x00FF0000) >> 16;
|
||||
gBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
|
||||
gBattleBuffersTransferData[5] = size;
|
||||
gBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_DMA3TRANSFER;
|
||||
sBattleBuffersTransferData[1] = (u32)(dst);
|
||||
sBattleBuffersTransferData[2] = ((u32)(dst) & 0x0000FF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = ((u32)(dst) & 0x00FF0000) >> 16;
|
||||
sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
|
||||
sBattleBuffersTransferData[5] = size;
|
||||
sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
|
||||
for (i = 0; i < size; i++)
|
||||
gBattleBuffersTransferData[7 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 7);
|
||||
sBattleBuffersTransferData[7 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7);
|
||||
}
|
||||
|
||||
void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_31;
|
||||
gBattleBuffersTransferData[1] = songId;
|
||||
gBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_31;
|
||||
sBattleBuffersTransferData[1] = songId;
|
||||
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
|
||||
for (i = 0; i < songId; i++) // ????
|
||||
gBattleBuffersTransferData[3 + i] = *(u8*)(unusedDumbDataParameter++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, songId + 3);
|
||||
sBattleBuffersTransferData[3 + i] = *(u8*)(unusedDumbDataParameter++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_32;
|
||||
gBattleBuffersTransferData[1] = size;
|
||||
gBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_32;
|
||||
sBattleBuffersTransferData[1] = size;
|
||||
sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
|
||||
for (i = 0; i < size; i++)
|
||||
gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 3);
|
||||
sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
|
||||
}
|
||||
|
||||
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = arg2;
|
||||
gBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[2] = arg2;
|
||||
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
|
||||
sBattleBuffersTransferData[1] = b;
|
||||
for (i = 0; i < 3; i++)
|
||||
gBattleBuffersTransferData[2 + i] = c[i];
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 5);
|
||||
sBattleBuffersTransferData[2 + i] = c[i];
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
|
||||
}
|
||||
|
||||
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
|
||||
sBattleBuffersTransferData[1] = b;
|
||||
sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd37(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_37;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_37;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_37;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_37;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_37;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_37;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_37;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_37;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd38(u8 bufferId, u8 b)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_38;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_38;
|
||||
sBattleBuffersTransferData[1] = b;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd39(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_39;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_39;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_39;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_39;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_39;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_39;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_39;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_39;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd40(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_40;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_40;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_40;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_40;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_40;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_40;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_40;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_40;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitHitAnimation(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd42(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_42;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_42;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_42;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_42;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_42;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_42;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_42;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_42;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
|
||||
gBattleBuffersTransferData[1] = songId;
|
||||
gBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
|
||||
sBattleBuffersTransferData[1] = songId;
|
||||
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM;
|
||||
gBattleBuffersTransferData[1] = songId;
|
||||
gBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = playBGM;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM;
|
||||
sBattleBuffersTransferData[1] = songId;
|
||||
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = playBGM;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitFaintingCry(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_FAINTINGCRY;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_FAINTINGCRY;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_FAINTINGCRY;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_FAINTINGCRY;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_FAINTINGCRY;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_FAINTINGCRY;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_FAINTINGCRY;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_FAINTINGCRY;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_INTROSLIDE;
|
||||
gBattleBuffersTransferData[1] = terrainId;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_INTROSLIDE;
|
||||
sBattleBuffersTransferData[1] = terrainId;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
|
||||
gBattleBuffersTransferData[1] = arg2 & 0x7F;
|
||||
gBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
|
||||
sBattleBuffersTransferData[1] = arg2 & 0x7F;
|
||||
sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
|
||||
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * 6); i++)
|
||||
gBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4);
|
||||
sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd49(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_49;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_49;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_49;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_49;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_49;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_49;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_49;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_49;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd50(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_50;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_50;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_50;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_50;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_50;
|
||||
sBattleBuffersTransferData[1] = CONTROLLER_50;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_50;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_50;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
gBattleBuffersTransferData[1] = isInvisible;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
sBattleBuffersTransferData[1] = isInvisible;
|
||||
sBattleBuffersTransferData[2] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
sBattleBuffersTransferData[3] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_BATTLEANIMATION;
|
||||
gBattleBuffersTransferData[1] = animationId;
|
||||
gBattleBuffersTransferData[2] = argument;
|
||||
gBattleBuffersTransferData[3] = (argument & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_BATTLEANIMATION;
|
||||
sBattleBuffersTransferData[1] = animationId;
|
||||
sBattleBuffersTransferData[2] = argument;
|
||||
sBattleBuffersTransferData[3] = (argument & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2)
|
||||
{
|
||||
bool8 arg2_ = arg2;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_LINKSTANDBYMSG;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_LINKSTANDBYMSG;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
|
||||
if (arg2_)
|
||||
gBattleBuffersTransferData[3] = gBattleBuffersTransferData[2] = sub_81850DC(&gBattleBuffersTransferData[4]);
|
||||
sBattleBuffersTransferData[3] = sBattleBuffersTransferData[2] = sub_81850DC(&sBattleBuffersTransferData[4]);
|
||||
else
|
||||
gBattleBuffersTransferData[3] = gBattleBuffersTransferData[2] = 0;
|
||||
sBattleBuffersTransferData[3] = sBattleBuffersTransferData[2] = 0;
|
||||
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, gBattleBuffersTransferData[2] + 4);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[2] + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_RESETACTIONMOVESELECTION;
|
||||
gBattleBuffersTransferData[1] = caseId;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_RESETACTIONMOVESELECTION;
|
||||
sBattleBuffersTransferData[1] = caseId;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
|
||||
}
|
||||
|
||||
void BtlController_EmitCmd55(u8 bufferId, u8 arg1)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_55;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = gSaveBlock2Ptr->field_CA9_b;
|
||||
gBattleBuffersTransferData[3] = gSaveBlock2Ptr->field_CA9_b;
|
||||
gBattleBuffersTransferData[5] = gBattleBuffersTransferData[4] = sub_81850DC(&gBattleBuffersTransferData[6]);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, gBattleBuffersTransferData[4] + 6);
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_55;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[2] = gSaveBlock2Ptr->field_CA9_b;
|
||||
sBattleBuffersTransferData[3] = gSaveBlock2Ptr->field_CA9_b;
|
||||
sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = sub_81850DC(&sBattleBuffersTransferData[6]);
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[4] + 6);
|
||||
}
|
||||
|
||||
+123
-134
@@ -22,18 +22,8 @@
|
||||
#include "blend_palette.h"
|
||||
#include "contest.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
@@ -49,7 +39,6 @@ extern const struct CompressedSpriteSheet gTrainerBackPicTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
extern const union AnimCmd* const * const gMonAnimationsSpriteAnimsPtrTable[];
|
||||
extern const struct SpriteTemplate gUnknown_08329D98[4];
|
||||
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
|
||||
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
|
||||
extern const u8 gEnemyMonElevation[];
|
||||
@@ -68,7 +57,7 @@ extern const u8 gBlankGfxCompressed[];
|
||||
extern const u16 gBattleInterface_BallStatusBarPal[];
|
||||
extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
|
||||
extern u8 sub_80688F8(u8, u8 bank);
|
||||
extern u8 sub_80688F8(u8, u8 battlerId);
|
||||
extern u8 pokemon_order_func(u8); // party menu
|
||||
extern void sub_81B8C68(void);
|
||||
|
||||
@@ -366,7 +355,7 @@ void sub_805D770(struct Sprite *sprite, bool8 arg1)
|
||||
|
||||
void sub_805D7AC(struct Sprite *sprite)
|
||||
{
|
||||
if (!(gUnknown_020243FC & 1))
|
||||
if (!(gIntroSlideFlags & 1))
|
||||
{
|
||||
sprite->pos2.x += sprite->data[0];
|
||||
if (sprite->pos2.x == 0)
|
||||
@@ -421,7 +410,7 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBank data[0]
|
||||
#define tBattlerId data[0]
|
||||
|
||||
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument)
|
||||
{
|
||||
@@ -451,8 +440,8 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank,
|
||||
gBattleSpritesDataPtr->animationData->animArg = argument;
|
||||
LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE);
|
||||
taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
|
||||
gTasks[taskId].tBank = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 1;
|
||||
gTasks[taskId].tBattlerId = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -462,12 +451,12 @@ static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId)
|
||||
gAnimScriptCallback();
|
||||
if (!gAnimScriptActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 0;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
#undef tBank
|
||||
#undef tBattlerId
|
||||
|
||||
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
|
||||
{
|
||||
@@ -485,7 +474,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBank data[0]
|
||||
#define tBattlerId data[0]
|
||||
|
||||
void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId)
|
||||
{
|
||||
@@ -495,8 +484,8 @@ void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tab
|
||||
gBattleAnimTarget = defBank;
|
||||
LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
|
||||
taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
|
||||
gTasks[taskId].tBank = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 1;
|
||||
gTasks[taskId].tBattlerId = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1;
|
||||
}
|
||||
|
||||
static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
|
||||
@@ -504,12 +493,12 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
|
||||
gAnimScriptCallback();
|
||||
if (!gAnimScriptActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 0;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
#undef tBank
|
||||
#undef tBattlerId
|
||||
|
||||
// great function to include newly added moves that don't have animation yet
|
||||
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
|
||||
@@ -517,13 +506,13 @@ bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 mplay_80342A4(u8 bank)
|
||||
bool8 mplay_80342A4(u8 battlerId)
|
||||
{
|
||||
u8 zero = 0;
|
||||
|
||||
if (IsSEPlaying())
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].field_8++;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8++;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_8 < 30)
|
||||
return TRUE;
|
||||
|
||||
@@ -532,14 +521,14 @@ bool8 mplay_80342A4(u8 bank)
|
||||
}
|
||||
if (zero == 0)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].field_8 = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8 = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u32 monsPersonality, currentPersonality, otId;
|
||||
u16 species;
|
||||
@@ -549,50 +538,50 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
|
||||
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[bank];
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[battlerId];
|
||||
}
|
||||
|
||||
otId = GetMonData(mon, MON_DATA_OT_ID);
|
||||
position = GetBattlerPosition(bank);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
species, currentPersonality);
|
||||
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
lzPaletteData = GetMonFrontSpritePal(mon);
|
||||
else
|
||||
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
|
||||
|
||||
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
|
||||
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + bank * 16, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
|
||||
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[bank]], paletteOffset, 0x20);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
// transform's pink color
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
}
|
||||
}
|
||||
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u32 monsPersonality, currentPersonality, otId;
|
||||
u16 species;
|
||||
@@ -602,21 +591,21 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
|
||||
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[bank];
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[battlerId];
|
||||
}
|
||||
|
||||
otId = GetMonData(mon, MON_DATA_OT_ID);
|
||||
position = GetBattlerPosition(bank);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
|
||||
if (sub_80688F8(1, bank) == 1 || gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
if (sub_80688F8(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
@@ -629,28 +618,28 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
species, currentPersonality);
|
||||
}
|
||||
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
lzPaletteData = GetMonFrontSpritePal(mon);
|
||||
else
|
||||
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
|
||||
|
||||
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
|
||||
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + bank * 16, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
|
||||
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[bank]], paletteOffset, 0x20);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
// transform's pink color
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
}
|
||||
}
|
||||
@@ -663,23 +652,23 @@ void nullsub_24(u16 species)
|
||||
{
|
||||
}
|
||||
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 bank)
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId)
|
||||
{
|
||||
u8 position = GetBattlerPosition(bank);
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
DecompressPicFromTable_2(&gTrainerFrontPicTable[frontPicId],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
SPECIES_NONE);
|
||||
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[frontPicId]);
|
||||
}
|
||||
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 bank)
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 battlerId)
|
||||
{
|
||||
u8 position = GetBattlerPosition(bank);
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
DecompressPicFromTable_2(&gTrainerBackPicTable[backPicId],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
SPECIES_NONE);
|
||||
LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data,
|
||||
0x100 + 16 * bank, 0x20);
|
||||
0x100 + 16 * battlerId, 0x20);
|
||||
}
|
||||
|
||||
void nullsub_25(u8 arg0)
|
||||
@@ -776,7 +765,7 @@ void LoadBattleBarGfx(u8 arg0)
|
||||
LZDecompressWram(gUnknown_08C093F0, gMonSpritesGfxPtr->barFontGfx);
|
||||
}
|
||||
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
|
||||
{
|
||||
bool8 retVal = FALSE;
|
||||
|
||||
@@ -787,13 +776,13 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
|
||||
(*state1)++;
|
||||
break;
|
||||
case 1:
|
||||
if (!BattleLoadAllHealthBoxesGfx(*bank))
|
||||
if (!BattleLoadAllHealthBoxesGfx(*battlerId))
|
||||
{
|
||||
(*bank)++;
|
||||
(*battlerId)++;
|
||||
}
|
||||
else
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
@@ -801,47 +790,47 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
|
||||
(*state1)++;
|
||||
break;
|
||||
case 3:
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *bank == 0)
|
||||
gHealthboxSpriteIds[*bank] = CreateSafariPlayerHealthboxSprites();
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *battlerId == 0)
|
||||
gHealthboxSpriteIds[*battlerId] = CreateSafariPlayerHealthboxSprites();
|
||||
else
|
||||
gHealthboxSpriteIds[*bank] = CreateBattlerHealthboxSprites(*bank);
|
||||
gHealthboxSpriteIds[*battlerId] = CreateBattlerHealthboxSprites(*battlerId);
|
||||
|
||||
(*bank)++;
|
||||
if (*bank == gBattlersCount)
|
||||
(*battlerId)++;
|
||||
if (*battlerId == gBattlersCount)
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
InitBattlerHealthboxCoords(*bank);
|
||||
if (gBattlerPositions[*bank] <= 1)
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*bank], FALSE);
|
||||
InitBattlerHealthboxCoords(*battlerId);
|
||||
if (gBattlerPositions[*battlerId] <= 1)
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], FALSE);
|
||||
else
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*bank], TRUE);
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], TRUE);
|
||||
|
||||
(*bank)++;
|
||||
if (*bank == gBattlersCount)
|
||||
(*battlerId)++;
|
||||
if (*battlerId == gBattlersCount)
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (GetBattlerSide(*bank) == B_SIDE_PLAYER)
|
||||
if (GetBattlerSide(*battlerId) == B_SIDE_PLAYER)
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*bank], &gPlayerParty[gBattlerPartyIndexes[*bank]], HEALTHBOX_ALL);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gPlayerParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*bank], &gEnemyParty[gBattlerPartyIndexes[*bank]], HEALTHBOX_ALL);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gEnemyParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
|
||||
}
|
||||
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*bank]);
|
||||
(*bank)++;
|
||||
if (*bank == gBattlersCount)
|
||||
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*battlerId]);
|
||||
(*battlerId)++;
|
||||
if (*battlerId == gBattlersCount)
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
@@ -875,9 +864,9 @@ void CopyAllBattleSpritesInvisibilities(void)
|
||||
gBattleSpritesDataPtr->battlerData[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible;
|
||||
}
|
||||
|
||||
void CopyBattleSpriteInvisibility(u8 bank)
|
||||
void CopyBattleSpriteInvisibility(u8 battlerId)
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].invisible = gSprites[gBattlerSpriteIds[bank]].invisible;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
|
||||
}
|
||||
|
||||
void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
@@ -896,7 +885,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
gBattleMonForms[bankAtk] = gBattleSpritesDataPtr->animationData->animArg;
|
||||
if (gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
}
|
||||
gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk);
|
||||
@@ -965,7 +954,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[bankDef] * 16, paletteOffset, 32);
|
||||
}
|
||||
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
|
||||
if (!IsContest())
|
||||
@@ -979,7 +968,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
}
|
||||
}
|
||||
|
||||
void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
|
||||
void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
|
||||
{
|
||||
u8 position;
|
||||
s32 i;
|
||||
@@ -991,17 +980,17 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
|
||||
if (IsContest())
|
||||
position = 0;
|
||||
else
|
||||
position = GetBattlerPosition(bank);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
|
||||
if (IsContest())
|
||||
LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
|
||||
else if (GetBattlerSide(bank) != B_SIDE_PLAYER)
|
||||
else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites[position]);
|
||||
else
|
||||
LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
|
||||
|
||||
i = 1;
|
||||
var = bank * 16;
|
||||
var = battlerId * 16;
|
||||
substitutePal = gSubstituteDollPal;
|
||||
for (; i < 4; i++)
|
||||
{
|
||||
@@ -1018,59 +1007,59 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (GetBattlerSide(bank) != B_SIDE_PLAYER)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
else
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[bank]], bank);
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId)
|
||||
void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId)
|
||||
{
|
||||
BattleLoadSubstituteOrMonSpriteGfx(bank, loadMonSprite);
|
||||
StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[bank]);
|
||||
BattleLoadSubstituteOrMonSpriteGfx(battlerId, loadMonSprite);
|
||||
StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[battlerId]);
|
||||
|
||||
if (!loadMonSprite)
|
||||
gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(bank);
|
||||
gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(battlerId);
|
||||
else
|
||||
gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(bank);
|
||||
gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(battlerId);
|
||||
}
|
||||
|
||||
void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move)
|
||||
void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move)
|
||||
{
|
||||
if (move == MOVE_SUBSTITUTE)
|
||||
gBattleSpritesDataPtr->battlerData[bank].behindSubstitute = 1;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 1;
|
||||
}
|
||||
|
||||
void ClearBehindSubstituteBit(u8 bank)
|
||||
void ClearBehindSubstituteBit(u8 battlerId)
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].behindSubstitute = 0;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 0;
|
||||
}
|
||||
|
||||
void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank)
|
||||
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u16 hp = GetMonData(mon, MON_DATA_HP);
|
||||
u16 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
|
||||
|
||||
if (GetHPBarLevel(hp, maxHP) == HP_BAR_RED)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->battlerData[bank].lowHpSong)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->battlerData[bank ^ BIT_FLANK].lowHpSong)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
|
||||
PlaySE(SE_HINSI);
|
||||
gBattleSpritesDataPtr->battlerData[bank].lowHpSong = 1;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].lowHpSong = 0;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 0;
|
||||
if (!IsDoubleBattle())
|
||||
{
|
||||
m4aSongNumStop(SE_HINSI);
|
||||
return;
|
||||
}
|
||||
if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[bank ^ BIT_FLANK].lowHpSong)
|
||||
if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
|
||||
{
|
||||
m4aSongNumStop(SE_HINSI);
|
||||
return;
|
||||
@@ -1135,44 +1124,44 @@ void sub_805EB9C(u8 affineMode)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBank data[0]
|
||||
#define tBattlerId data[0]
|
||||
|
||||
void LoadAndCreateEnemyShadowSprites(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
LoadCompressedObjectPic(&gSpriteSheet_EnemyShadow);
|
||||
|
||||
bank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(bank, 0), GetBattlerSpriteCoord(bank, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].data[0] = bank;
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
|
||||
|
||||
if (IsDoubleBattle())
|
||||
{
|
||||
bank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(bank, 0), GetBattlerSpriteCoord(bank, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].data[0] = bank;
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
|
||||
}
|
||||
}
|
||||
|
||||
void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
|
||||
{
|
||||
bool8 invisible = FALSE;
|
||||
u8 bank = shadowSprite->tBank;
|
||||
struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[bank]];
|
||||
u8 battlerId = shadowSprite->tBattlerId;
|
||||
struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[battlerId]];
|
||||
|
||||
if (!bankSprite->inUse || !IsBattlerSpritePresent(bank))
|
||||
if (!bankSprite->inUse || !IsBattlerSpritePresent(battlerId))
|
||||
{
|
||||
shadowSprite->callback = SpriteCB_SetInvisible;
|
||||
return;
|
||||
}
|
||||
if (gAnimScriptActive || bankSprite->invisible)
|
||||
invisible = TRUE;
|
||||
else if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE
|
||||
&& gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[bank].transformSpecies] == 0)
|
||||
else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE
|
||||
&& gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0)
|
||||
invisible = TRUE;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].behindSubstitute)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute)
|
||||
invisible = TRUE;
|
||||
|
||||
shadowSprite->pos1.x = bankSprite->pos1.x;
|
||||
@@ -1180,31 +1169,31 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
|
||||
shadowSprite->invisible = invisible;
|
||||
}
|
||||
|
||||
#undef tBank
|
||||
#undef tBattlerId
|
||||
|
||||
void SpriteCB_SetInvisible(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = 1;
|
||||
}
|
||||
|
||||
void SetBattlerShadowSpriteCallback(u8 bank, u16 species)
|
||||
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
|
||||
{
|
||||
// The player's shadow is never seen
|
||||
if (GetBattlerSide(bank) == B_SIDE_PLAYER)
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
return;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
|
||||
if (gEnemyMonElevation[species] != 0)
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_EnemyShadow;
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_EnemyShadow;
|
||||
else
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
}
|
||||
|
||||
void HideBattlerShadowSprite(u8 bank)
|
||||
void HideBattlerShadowSprite(u8 battlerId)
|
||||
{
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
}
|
||||
|
||||
void sub_805EF14(void)
|
||||
@@ -1230,12 +1219,12 @@ void sub_805EF14(void)
|
||||
}
|
||||
}
|
||||
|
||||
void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute)
|
||||
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute)
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].transformSpecies = SPECIES_NONE;
|
||||
gBattleMonForms[bank] = 0;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
|
||||
gBattleMonForms[battlerId] = 0;
|
||||
if (!dontClearSubstitute)
|
||||
ClearBehindSubstituteBit(bank);
|
||||
ClearBehindSubstituteBit(battlerId);
|
||||
}
|
||||
|
||||
void AllocateMonSpritesGfx(void)
|
||||
|
||||
+2
-10
@@ -153,11 +153,6 @@ enum
|
||||
HEALTHBOX_GFX_117,
|
||||
};
|
||||
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
|
||||
extern const u8 * const gNatureNamePointers[];
|
||||
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
|
||||
|
||||
@@ -177,9 +172,6 @@ extern const u16 gBattleInterface_BallStatusBarPal[];
|
||||
extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
extern const u8 gHealthboxElementsGfxTable[][32];
|
||||
|
||||
// functions
|
||||
extern void LoadBattleBarGfx(u8 arg0);
|
||||
|
||||
// this file's functions
|
||||
|
||||
static const u8 *GetHealthboxElementGfxPtr(u8 elementId);
|
||||
@@ -658,7 +650,7 @@ static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
|
||||
}
|
||||
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -1536,7 +1528,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
|
||||
gSprites[barSpriteId].pos1.x += 96;
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9);
|
||||
|
||||
|
||||
+243
-204
@@ -7,6 +7,7 @@
|
||||
#include "scanline_effect.h"
|
||||
#include "battle_setup.h"
|
||||
#include "battle_scripts.h"
|
||||
#include "battle_interface.h"
|
||||
#include "pokemon.h"
|
||||
#include "palette.h"
|
||||
#include "task.h"
|
||||
@@ -19,6 +20,7 @@
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "bg.h"
|
||||
#include "dma3.h"
|
||||
#include "string_util.h"
|
||||
@@ -43,10 +45,13 @@
|
||||
#include "roamer.h"
|
||||
#include "tv.h"
|
||||
#include "safari_zone.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "data2.h"
|
||||
#include "decompress.h"
|
||||
#include "international_string_util.h"
|
||||
#include "pokeball.h"
|
||||
|
||||
struct UnknownPokemonStruct2
|
||||
struct UnknownPokemonStruct4
|
||||
{
|
||||
/*0x00*/ u16 species;
|
||||
/*0x02*/ u16 heldItem;
|
||||
@@ -60,8 +65,6 @@ struct UnknownPokemonStruct2
|
||||
/*0x1D*/ u8 language;
|
||||
};
|
||||
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gBattleTerrain;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gBattle_BG1_X;
|
||||
@@ -70,84 +73,19 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern u16 gBattle_BG3_Y;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u16 gBattle_WIN0H;
|
||||
extern u16 gBattle_WIN0V;
|
||||
extern u16 gBattle_WIN1H;
|
||||
extern u16 gBattle_WIN1V;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern void (*gCB2_AfterEvolution)(void);
|
||||
extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for?
|
||||
extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for?
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gStringBattler;
|
||||
extern u32 gUnknown_02022F88;
|
||||
extern u32 gHitMarker;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPaydayMoney;
|
||||
extern u16 gBattleWeather;
|
||||
extern u16 gPauseCounterBattle;
|
||||
extern u16 gRandomTurnNumber;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gLeveledUpInBattle;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gMultiHitCounter;
|
||||
extern u8 gMoveResultFlags;
|
||||
extern s32 gBattleMoveDamage;
|
||||
extern const u8* gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_02024284[MAX_BATTLERS_COUNT];
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSideStatuses[2];
|
||||
extern u16 gCurrentMove;
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentActionFuncId;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern const u8* gSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
||||
extern const u8* gBattlescriptCurrInstr;
|
||||
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentTurnActionNumber;
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u8 gCurrMovePos;
|
||||
extern u8 gUnknown_020241E9;
|
||||
extern u16 gChosenMove;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u16 gBattleTextboxPalette[]; // battle textbox palette
|
||||
extern const struct BgTemplate gUnknown_0831AA08[];
|
||||
extern const struct WindowTemplate * const gUnknown_0831ABA0[];
|
||||
extern const u8 gUnknown_0831ACE0[];
|
||||
extern const u8 gStatStageRatios[][2];
|
||||
extern const u8 * const gBattleScriptsForMoveEffects[];
|
||||
extern const u8 * const gBattlescriptsForBallThrow[];
|
||||
extern const u8 * const gBattlescriptsForRunningByItem[];
|
||||
@@ -172,20 +110,14 @@ extern const u8 gText_Confusion[];
|
||||
extern const u8 gText_Love[];
|
||||
|
||||
// functions
|
||||
extern void ScanlineEffect_Clear(void);
|
||||
extern void sub_80356D0(void);
|
||||
extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower
|
||||
extern void sub_8166188(void); // battle tower, sets link battle mons level but why?
|
||||
extern void sub_8165B88(u8* dst, u16 trainerId); // battle tower, gets language
|
||||
extern void PadNameString(u8* dst, u8 arg2); //
|
||||
extern void sub_81B9150(void);
|
||||
extern void sub_800AC34(void);
|
||||
extern void sub_80B3AF8(u8 taskId); // cable club
|
||||
extern void sub_8076918(u8 bank);
|
||||
extern void SetHealthboxSpriteVisible(u8 healthoxSpriteId);
|
||||
extern void sub_81A56B4(void); // battle frontier 2
|
||||
extern u8 sub_81A9E28(void); // battle frontier 2
|
||||
extern void sub_81A56E8(u8 bank); // battle frontier 2
|
||||
extern void sub_81A56E8(u8 battlerId); // battle frontier 2
|
||||
extern void sub_81B8FB0(u8, u8); // party menu
|
||||
extern u8 pokemon_order_func(u8); // party menu
|
||||
extern bool8 InBattlePyramid(void);
|
||||
@@ -233,7 +165,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void);
|
||||
static void TryDoEventsBeforeFirstTurn(void);
|
||||
static void HandleTurnActionSelectionState(void);
|
||||
static void RunTurnActionsFunctions(void);
|
||||
static void SetActionsAndBanksTurnOrder(void);
|
||||
static void SetActionsAndBattlersTurnOrder(void);
|
||||
static void sub_803CDF8(void);
|
||||
static bool8 sub_803CDB8(void);
|
||||
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void);
|
||||
@@ -261,6 +193,113 @@ static void HandleAction_Action11(void);
|
||||
static void HandleAction_NothingIsFainted(void);
|
||||
static void HandleAction_ActionFinished(void);
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0};
|
||||
EWRAM_DATA u32 gBattleTypeFlags = 0;
|
||||
EWRAM_DATA u8 gBattleTerrain = 0;
|
||||
EWRAM_DATA u32 gUnknown_02022FF4 = 0;
|
||||
EWRAM_DATA struct UnknownPokemonStruct4 gUnknown_02022FF8[3] = {0}; // what is it used for?
|
||||
EWRAM_DATA struct UnknownPokemonStruct4* gUnknown_02023058 = NULL; // what is it used for?
|
||||
EWRAM_DATA u8 *gUnknown_0202305C = NULL;
|
||||
EWRAM_DATA u8 *gUnknown_02023060 = NULL;
|
||||
EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0};
|
||||
EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0};
|
||||
EWRAM_DATA u8 gActiveBattler = 0;
|
||||
EWRAM_DATA u32 gBattleControllerExecFlags = 0;
|
||||
EWRAM_DATA u8 gBattlersCount = 0;
|
||||
EWRAM_DATA u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerPositions[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattleTurnOrder[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gCurrentTurnActionNumber = 0;
|
||||
EWRAM_DATA u8 gCurrentActionFuncId = 0;
|
||||
EWRAM_DATA struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gCurrMovePos = 0;
|
||||
EWRAM_DATA u8 gChosenMovePos = 0;
|
||||
EWRAM_DATA u16 gCurrentMove = 0;
|
||||
EWRAM_DATA u16 gChosenMove = 0;
|
||||
EWRAM_DATA u16 gRandomMove = 0;
|
||||
EWRAM_DATA s32 gBattleMoveDamage = 0;
|
||||
EWRAM_DATA s32 gHpDealt = 0;
|
||||
EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastUsedItem = 0;
|
||||
EWRAM_DATA u8 gLastUsedAbility = 0;
|
||||
EWRAM_DATA u8 gBattlerAttacker = 0;
|
||||
EWRAM_DATA u8 gBattlerTarget = 0;
|
||||
EWRAM_DATA u8 gBattlerFainted = 0;
|
||||
EWRAM_DATA u8 gEffectBattler = 0;
|
||||
EWRAM_DATA u8 gPotentialItemEffectBattler = 0;
|
||||
EWRAM_DATA u8 gAbsentBattlerFlags = 0;
|
||||
EWRAM_DATA u8 gCritMultiplier = 0;
|
||||
EWRAM_DATA u8 gMultiHitCounter = 0;
|
||||
EWRAM_DATA const u8 *gBattlescriptCurrInstr = NULL;
|
||||
EWRAM_DATA u32 gUnusedBattleMainVar = 0;
|
||||
EWRAM_DATA u8 gChosenActionByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
|
||||
EWRAM_DATA const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
|
||||
EWRAM_DATA u16 gLastPrintedMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gLastHitBy[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gMoveResultFlags = 0;
|
||||
EWRAM_DATA u32 gHitMarker = 0;
|
||||
EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gUnknown_0202428C = 0;
|
||||
EWRAM_DATA u16 gSideStatuses[2] = {0};
|
||||
EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
|
||||
EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gPauseCounterBattle = 0;
|
||||
EWRAM_DATA u16 gPaydayMoney = 0;
|
||||
EWRAM_DATA u16 gRandomTurnNumber = 0;
|
||||
EWRAM_DATA u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattleOutcome = 0;
|
||||
EWRAM_DATA struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gBattleWeather = 0;
|
||||
EWRAM_DATA struct WishFutureKnock gWishFutureKnock = {0};
|
||||
EWRAM_DATA u16 gIntroSlideFlags = 0;
|
||||
EWRAM_DATA u8 gSentPokesToOpponent[2] = {0};
|
||||
EWRAM_DATA u16 gDynamicBasePower = 0;
|
||||
EWRAM_DATA u16 gExpShareExp = 0;
|
||||
EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct BattleScripting gBattleScripting = {0};
|
||||
EWRAM_DATA struct BattleStruct *gBattleStruct = NULL;
|
||||
EWRAM_DATA u8 *gLinkBattleSendBuffer = NULL;
|
||||
EWRAM_DATA u8 *gLinkBattleRecvBuffer = NULL;
|
||||
EWRAM_DATA struct BattleResources *gBattleResources = NULL;
|
||||
EWRAM_DATA u8 gActionSelectionCursor[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerInMenuId = 0;
|
||||
EWRAM_DATA bool8 gDoingBattleAnim = FALSE;
|
||||
EWRAM_DATA u32 gTransformedPersonalities[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gPlayerDpadHoldFrames = 0;
|
||||
EWRAM_DATA struct BattleSpriteData *gBattleSpritesDataPtr = NULL;
|
||||
EWRAM_DATA struct MonSpritesGfx *gMonSpritesGfxPtr = NULL;
|
||||
EWRAM_DATA struct BattleHealthboxInfo *gUnknown_020244D8 = NULL;
|
||||
EWRAM_DATA struct BattleHealthboxInfo *gUnknown_020244DC = NULL;
|
||||
EWRAM_DATA u16 gBattleMovePower = 0;
|
||||
EWRAM_DATA u16 gMoveToLearn = 0;
|
||||
EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0};
|
||||
|
||||
// IWRAM common vars
|
||||
void (*gPreBattleCallback1)(void);
|
||||
void (*gBattleMainFunc)(void);
|
||||
struct BattleResults gBattleResults;
|
||||
u8 gLeveledUpInBattle;
|
||||
void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
u8 gMultiUsePlayerCursor;
|
||||
u8 gNumberOfMovesToChoose;
|
||||
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
|
||||
// rom const data
|
||||
static void (* const sTurnActionsFuncsTable[])(void) =
|
||||
{
|
||||
@@ -288,11 +327,11 @@ static void (* const sEndTurnFuncsTable[])(void) =
|
||||
HandleEndTurn_BattleLost, // B_OUTCOME_DREW
|
||||
HandleEndTurn_RanFromBattle, // B_OUTCOME_RAN
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_PLAYER_TELEPORTED
|
||||
HandleEndTurn_MonFled, // B_OUTCOME_POKE_FLED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT_POKE
|
||||
HandleEndTurn_MonFled, // B_OUTCOME_MON_FLED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT
|
||||
HandleEndTurn_FinishBattle, // battle outcome 8
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_FORFEITED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_POKE_TELEPORTED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_MON_TELEPORTED
|
||||
};
|
||||
|
||||
const u8 gStatusConditionString_PoisonJpn[8] = _("どく$$$$$");
|
||||
@@ -699,7 +738,7 @@ static void CB2_HandleStartBattle(void)
|
||||
sub_805EF14();
|
||||
gBattleCommunication[MULTIUSE_STATE] = 1;
|
||||
}
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
sub_800E0E8();
|
||||
break;
|
||||
case 1:
|
||||
@@ -723,8 +762,8 @@ static void CB2_HandleStartBattle(void)
|
||||
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
|
||||
gBattleCommunication[MULTIUSE_STATE] = 2;
|
||||
}
|
||||
if (gLinkVSyncDisabled)
|
||||
sub_800DFB4(0, 0);
|
||||
if (gWirelessCommType)
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -751,7 +790,7 @@ static void CB2_HandleStartBattle(void)
|
||||
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1];
|
||||
sub_8185F90(gBlockRecvBuffer[playerMultiplayerId][1]);
|
||||
sub_8185F90(gBlockRecvBuffer[enemyMultiplayerId][1]);
|
||||
sub_8068AA4();
|
||||
SetDeoxysStats();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
@@ -894,7 +933,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
|
||||
sub_805EF14();
|
||||
gBattleCommunication[MULTIUSE_STATE] = 1;
|
||||
}
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
sub_800E0E8();
|
||||
// fall through
|
||||
case 1:
|
||||
@@ -925,8 +964,8 @@ static void CB2_HandleStartMultiPartnerBattle(void)
|
||||
gBattleCommunication[MULTIUSE_STATE] = 2;
|
||||
}
|
||||
|
||||
if (gLinkVSyncDisabled)
|
||||
sub_800DFB4(0, 0);
|
||||
if (gWirelessCommType)
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1163,9 +1202,9 @@ static void CB2_PreInitMultiBattle(void)
|
||||
case 0:
|
||||
if (gReceivedRemoteLinkPlayers != 0 && sub_800A520())
|
||||
{
|
||||
gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct2) * 3);
|
||||
gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
|
||||
sub_80379F8(0);
|
||||
SendBlock(bitmask_all_link_players_but_self(), gUnknown_02023058, sizeof(struct UnknownPokemonStruct2) * 3);
|
||||
SendBlock(bitmask_all_link_players_but_self(), gUnknown_02023058, sizeof(struct UnknownPokemonStruct4) * 3);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
@@ -1183,12 +1222,12 @@ static void CB2_PreInitMultiBattle(void)
|
||||
if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerMultiplierId].lp_field_18 & 1))
|
||||
|| (gLinkPlayers[i].lp_field_18 & 1 && gLinkPlayers[playerMultiplierId].lp_field_18 & 1))
|
||||
{
|
||||
memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct2) * 3);
|
||||
memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct2) * 3);
|
||||
memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
|
||||
}
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
@@ -1202,14 +1241,14 @@ static void CB2_PreInitMultiBattle(void)
|
||||
if (sub_800A520() && !gPaletteFade.active)
|
||||
{
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
sub_800ADF8();
|
||||
else
|
||||
sub_800AC34();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
if (sub_8010500())
|
||||
{
|
||||
@@ -1247,7 +1286,7 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void)
|
||||
switch (gBattleCommunication[MULTIUSE_STATE])
|
||||
{
|
||||
case 0:
|
||||
gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct2) * 3);
|
||||
gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
|
||||
sub_80379F8(3);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
*savedCallback = gMain.savedCallback;
|
||||
@@ -1294,7 +1333,7 @@ static void CB2_HandleStartMultiBattle(void)
|
||||
sub_805EF14();
|
||||
gBattleCommunication[MULTIUSE_STATE] = 1;
|
||||
}
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
sub_800E0E8();
|
||||
break;
|
||||
case 1:
|
||||
@@ -1312,8 +1351,8 @@ static void CB2_HandleStartMultiBattle(void)
|
||||
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
if (gLinkVSyncDisabled)
|
||||
sub_800DFB4(0, 0);
|
||||
if (gWirelessCommType)
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1330,7 +1369,7 @@ static void CB2_HandleStartMultiBattle(void)
|
||||
ResetBlockReceivedFlags();
|
||||
sub_8036EB8(4, playerMultiplayerId);
|
||||
SetAllPlayersBerryData();
|
||||
sub_8068AA4();
|
||||
SetDeoxysStats();
|
||||
var = CreateTask(sub_8035D74, 0);
|
||||
gTasks[var].data[1] = 0x10E;
|
||||
gTasks[var].data[2] = 0x5A;
|
||||
@@ -1698,7 +1737,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
|
||||
else
|
||||
personalityValue = 0x88;
|
||||
|
||||
for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++)
|
||||
for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++)
|
||||
nameHash += gTrainers[trainerNum].trainerName[j];
|
||||
|
||||
switch (gTrainers[trainerNum].partyFlags)
|
||||
@@ -2097,12 +2136,12 @@ static void sub_8038F34(void)
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
if (!gLinkVSyncDisabled)
|
||||
if (!gWirelessCommType)
|
||||
sub_800AC34();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 9:
|
||||
if (!gMain.field_439_x4 || gLinkVSyncDisabled || gReceivedRemoteLinkPlayers != 1)
|
||||
if (!gMain.field_439_x4 || gWirelessCommType || gReceivedRemoteLinkPlayers != 1)
|
||||
{
|
||||
gMain.field_439_x4 = 0;
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
@@ -2281,13 +2320,13 @@ static void sub_803939C(void)
|
||||
case 8:
|
||||
if (--gBattleCommunication[1] == 0)
|
||||
{
|
||||
if (gMain.field_439_x4 && !gLinkVSyncDisabled)
|
||||
if (gMain.field_439_x4 && !gWirelessCommType)
|
||||
sub_800AC34();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (!gMain.field_439_x4 || gLinkVSyncDisabled || gReceivedRemoteLinkPlayers != 1)
|
||||
if (!gMain.field_439_x4 || gWirelessCommType || gReceivedRemoteLinkPlayers != 1)
|
||||
{
|
||||
gMain.field_439_x4 = 0;
|
||||
if (!gPaletteFade.active)
|
||||
@@ -2383,7 +2422,7 @@ void oac_poke_opponent(struct Sprite *sprite)
|
||||
|
||||
static void sub_803980C(struct Sprite *sprite)
|
||||
{
|
||||
if ((gUnknown_020243FC & 1) == 0)
|
||||
if ((gIntroSlideFlags & 1) == 0)
|
||||
{
|
||||
sprite->pos2.x += 2;
|
||||
if (sprite->pos2.x == 0)
|
||||
@@ -2437,7 +2476,7 @@ static void sub_80398D0(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
sprite->callback = SpriteCallbackDummy_2;
|
||||
gUnknown_02022F88 = 0;
|
||||
sUnusedUnknownArray[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2560,7 +2599,7 @@ void sub_8039BB4(struct Sprite *sprite)
|
||||
|
||||
static void oac_poke_ally_(struct Sprite *sprite)
|
||||
{
|
||||
if ((gUnknown_020243FC & 1) == 0)
|
||||
if ((gIntroSlideFlags & 1) == 0)
|
||||
{
|
||||
sprite->pos2.x -= 2;
|
||||
if (sprite->pos2.x == 0)
|
||||
@@ -2582,7 +2621,7 @@ static void SpriteCallbackDummy_3(struct Sprite *sprite)
|
||||
|
||||
void sub_8039C00(struct Sprite *sprite)
|
||||
{
|
||||
if (!(gUnknown_020243FC & 1))
|
||||
if (!(gIntroSlideFlags & 1))
|
||||
{
|
||||
sprite->pos2.x += sprite->data[1];
|
||||
sprite->pos2.y += sprite->data[2];
|
||||
@@ -2731,7 +2770,7 @@ static void BattleStartClearSetData(void)
|
||||
dataPtr[j] = 0;
|
||||
|
||||
gDisableStructs[i].isFirstTurn = 2;
|
||||
gUnknown_02024284[i] = 0;
|
||||
sUnusedBattlersArray[i] = 0;
|
||||
gLastMoves[i] = 0;
|
||||
gLastLandedMoves[i] = 0;
|
||||
gLastHitByType[i] = 0;
|
||||
@@ -2784,7 +2823,7 @@ static void BattleStartClearSetData(void)
|
||||
|
||||
gPauseCounterBattle = 0;
|
||||
gBattleMoveDamage = 0;
|
||||
gUnknown_020243FC = 0;
|
||||
gIntroSlideFlags = 0;
|
||||
gBattleScripting.animTurn = 0;
|
||||
gBattleScripting.animTargetsHit = 0;
|
||||
gLeveledUpInBattle = 0;
|
||||
@@ -3350,7 +3389,7 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void)
|
||||
}
|
||||
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
static void BattleIntroOpponent1SendsOutMonAnimation(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -3656,12 +3695,12 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
gBattleMons[i].status2 &= ~(STATUS2_FLINCHED);
|
||||
|
||||
*(&gBattleStruct->turnEffectsTracker) = 0;
|
||||
*(&gBattleStruct->turnEffectsBank) = 0;
|
||||
*(&gBattleStruct->turnEffectsBattlerId) = 0;
|
||||
*(&gBattleStruct->wishPerishSongState) = 0;
|
||||
*(&gBattleStruct->wishPerishSongBank) = 0;
|
||||
*(&gBattleStruct->wishPerishSongBattlerId) = 0;
|
||||
gBattleScripting.atk49_state = 0;
|
||||
gBattleStruct->faintedActionsState = 0;
|
||||
gBattleStruct->turncountersTracker = 0;
|
||||
gBattleStruct->turnCountersTracker = 0;
|
||||
gMoveResultFlags = 0;
|
||||
|
||||
gRandomTurnNumber = Random();
|
||||
@@ -3689,10 +3728,10 @@ static void HandleEndTurn_ContinueBattle(void)
|
||||
CancelMultiTurnMoves(i);
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker = 0;
|
||||
gBattleStruct->turnEffectsBank = 0;
|
||||
gBattleStruct->turnEffectsBattlerId = 0;
|
||||
gBattleStruct->wishPerishSongState = 0;
|
||||
gBattleStruct->wishPerishSongBank = 0;
|
||||
gBattleStruct->turncountersTracker = 0;
|
||||
gBattleStruct->wishPerishSongBattlerId = 0;
|
||||
gBattleStruct->turnCountersTracker = 0;
|
||||
gMoveResultFlags = 0;
|
||||
}
|
||||
}
|
||||
@@ -3773,7 +3812,7 @@ u8 IsRunningFromBattleImpossible(void)
|
||||
else
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
|
||||
|
||||
gStringBattler = gActiveBattler;
|
||||
gPotentialItemEffectBattler = gActiveBattler;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
|
||||
return 0;
|
||||
@@ -3884,7 +3923,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
switch (gBattleCommunication[gActiveBattler])
|
||||
{
|
||||
case STATE_TURN_START_RECORD: // recorded battle related on start of every turn
|
||||
RecordedBattle_CopyBankMoves();
|
||||
RecordedBattle_CopyBattlerMoves();
|
||||
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
|
||||
break;
|
||||
case STATE_BEFORE_ACTION_CHOSEN: // choose an action
|
||||
@@ -4288,7 +4327,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount)
|
||||
{
|
||||
sub_818603C(1);
|
||||
gBattleMainFunc = SetActionsAndBanksTurnOrder;
|
||||
gBattleMainFunc = SetActionsAndBattlersTurnOrder;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
|
||||
{
|
||||
@@ -4345,162 +4384,162 @@ void SwapTurnOrder(u8 id1, u8 id2)
|
||||
gBattleTurnOrder[id2] = temp;
|
||||
}
|
||||
|
||||
u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves)
|
||||
u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
|
||||
{
|
||||
u8 strikesFirst = 0;
|
||||
u8 speedMultiplierBank1 = 0, speedMultiplierBank2 = 0;
|
||||
u32 speedBank1 = 0, speedBank2 = 0;
|
||||
u8 speedMultiplierBattler1 = 0, speedMultiplierBattler2 = 0;
|
||||
u32 speedBattler1 = 0, speedBattler2 = 0;
|
||||
u8 holdEffect = 0;
|
||||
u8 holdEffectParam = 0;
|
||||
u16 moveBank1 = 0, moveBank2 = 0;
|
||||
u16 moveBattler1 = 0, moveBattler2 = 0;
|
||||
|
||||
if (WEATHER_HAS_EFFECT)
|
||||
{
|
||||
if ((gBattleMons[bank1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[bank1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBank1 = 2;
|
||||
if ((gBattleMons[battler1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[battler1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBattler1 = 2;
|
||||
else
|
||||
speedMultiplierBank1 = 1;
|
||||
speedMultiplierBattler1 = 1;
|
||||
|
||||
if ((gBattleMons[bank2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[bank2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBank2 = 2;
|
||||
if ((gBattleMons[battler2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[battler2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBattler2 = 2;
|
||||
else
|
||||
speedMultiplierBank2 = 1;
|
||||
speedMultiplierBattler2 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
speedMultiplierBank1 = 1;
|
||||
speedMultiplierBank2 = 1;
|
||||
speedMultiplierBattler1 = 1;
|
||||
speedMultiplierBattler2 = 1;
|
||||
}
|
||||
|
||||
speedBank1 = (gBattleMons[bank1].speed * speedMultiplierBank1)
|
||||
* (gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1]);
|
||||
speedBattler1 = (gBattleMons[battler1].speed * speedMultiplierBattler1)
|
||||
* (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][1]);
|
||||
|
||||
if (gBattleMons[bank1].item == ITEM_ENIGMA_BERRY)
|
||||
if (gBattleMons[battler1].item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
holdEffect = gEnigmaBerries[bank1].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[bank1].holdEffectParam;
|
||||
holdEffect = gEnigmaBerries[battler1].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[battler1].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[bank1].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank1].item);
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler1].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler1].item);
|
||||
}
|
||||
|
||||
// badge boost
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
|
||||
&& FlagGet(FLAG_BADGE03_GET)
|
||||
&& GetBattlerSide(bank1) == B_SIDE_PLAYER)
|
||||
&& GetBattlerSide(battler1) == B_SIDE_PLAYER)
|
||||
{
|
||||
speedBank1 = (speedBank1 * 110) / 100;
|
||||
speedBattler1 = (speedBattler1 * 110) / 100;
|
||||
}
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
|
||||
speedBank1 /= 2;
|
||||
speedBattler1 /= 2;
|
||||
|
||||
if (gBattleMons[bank1].status1 & STATUS1_PARALYSIS)
|
||||
speedBank1 /= 4;
|
||||
if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS)
|
||||
speedBattler1 /= 4;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
|
||||
speedBank1 = UINT_MAX;
|
||||
speedBattler1 = UINT_MAX;
|
||||
|
||||
// check second bank's speed
|
||||
// check second battlerId's speed
|
||||
|
||||
speedBank2 = (gBattleMons[bank2].speed * speedMultiplierBank2)
|
||||
* (gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][1]);
|
||||
speedBattler2 = (gBattleMons[battler2].speed * speedMultiplierBattler2)
|
||||
* (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][1]);
|
||||
|
||||
if (gBattleMons[bank2].item == ITEM_ENIGMA_BERRY)
|
||||
if (gBattleMons[battler2].item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
holdEffect = gEnigmaBerries[bank2].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[bank2].holdEffectParam;
|
||||
holdEffect = gEnigmaBerries[battler2].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[battler2].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[bank2].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank2].item);
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler2].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler2].item);
|
||||
}
|
||||
|
||||
// badge boost
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
|
||||
&& FlagGet(FLAG_BADGE03_GET)
|
||||
&& GetBattlerSide(bank2) == B_SIDE_PLAYER)
|
||||
&& GetBattlerSide(battler2) == B_SIDE_PLAYER)
|
||||
{
|
||||
speedBank2 = (speedBank2 * 110) / 100;
|
||||
speedBattler2 = (speedBattler2 * 110) / 100;
|
||||
}
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
|
||||
speedBank2 /= 2;
|
||||
speedBattler2 /= 2;
|
||||
|
||||
if (gBattleMons[bank2].status1 & STATUS1_PARALYSIS)
|
||||
speedBank2 /= 4;
|
||||
if (gBattleMons[battler2].status1 & STATUS1_PARALYSIS)
|
||||
speedBattler2 /= 4;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
|
||||
speedBank2 = UINT_MAX;
|
||||
speedBattler2 = UINT_MAX;
|
||||
|
||||
if (ignoreChosenMoves)
|
||||
{
|
||||
moveBank1 = MOVE_NONE;
|
||||
moveBank2 = MOVE_NONE;
|
||||
moveBattler1 = MOVE_NONE;
|
||||
moveBattler2 = MOVE_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gChosenActionByBattler[bank1] == B_ACTION_USE_MOVE)
|
||||
if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE)
|
||||
{
|
||||
if (gProtectStructs[bank1].onlyStruggle)
|
||||
moveBank1 = MOVE_STRUGGLE;
|
||||
if (gProtectStructs[battler1].onlyStruggle)
|
||||
moveBattler1 = MOVE_STRUGGLE;
|
||||
else
|
||||
moveBank1 = gBattleMons[bank1].moves[*(gBattleStruct->chosenMovePositions + bank1)];
|
||||
moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)];
|
||||
}
|
||||
else
|
||||
moveBank1 = MOVE_NONE;
|
||||
moveBattler1 = MOVE_NONE;
|
||||
|
||||
if (gChosenActionByBattler[bank2] == B_ACTION_USE_MOVE)
|
||||
if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE)
|
||||
{
|
||||
if (gProtectStructs[bank2].onlyStruggle)
|
||||
moveBank2 = MOVE_STRUGGLE;
|
||||
if (gProtectStructs[battler2].onlyStruggle)
|
||||
moveBattler2 = MOVE_STRUGGLE;
|
||||
else
|
||||
moveBank2 = gBattleMons[bank2].moves[*(gBattleStruct->chosenMovePositions + bank2)];
|
||||
moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)];
|
||||
}
|
||||
else
|
||||
moveBank2 = MOVE_NONE;
|
||||
moveBattler2 = MOVE_NONE;
|
||||
}
|
||||
|
||||
// both move priorities are different than 0
|
||||
if (gBattleMoves[moveBank1].priority != 0 || gBattleMoves[moveBank2].priority != 0)
|
||||
if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0)
|
||||
{
|
||||
// both priorities are the same
|
||||
if (gBattleMoves[moveBank1].priority == gBattleMoves[moveBank2].priority)
|
||||
if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority)
|
||||
{
|
||||
if (speedBank1 == speedBank2 && Random() & 1)
|
||||
if (speedBattler1 == speedBattler2 && Random() & 1)
|
||||
strikesFirst = 2; // same speeds, same priorities
|
||||
else if (speedBank1 < speedBank2)
|
||||
strikesFirst = 1; // bank2 has more speed
|
||||
else if (speedBattler1 < speedBattler2)
|
||||
strikesFirst = 1; // battler2 has more speed
|
||||
|
||||
// else bank1 has more speed
|
||||
// else battler1 has more speed
|
||||
}
|
||||
else if (gBattleMoves[moveBank1].priority < gBattleMoves[moveBank2].priority)
|
||||
strikesFirst = 1; // bank2's move has greater priority
|
||||
else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority)
|
||||
strikesFirst = 1; // battler2's move has greater priority
|
||||
|
||||
// else bank1's move has greater priority
|
||||
// else battler1's move has greater priority
|
||||
}
|
||||
// both priorities are equal to 0
|
||||
else
|
||||
{
|
||||
if (speedBank1 == speedBank2 && Random() & 1)
|
||||
if (speedBattler1 == speedBattler2 && Random() & 1)
|
||||
strikesFirst = 2; // same speeds, same priorities
|
||||
else if (speedBank1 < speedBank2)
|
||||
strikesFirst = 1; // bank2 has more speed
|
||||
else if (speedBattler1 < speedBattler2)
|
||||
strikesFirst = 1; // battler2 has more speed
|
||||
|
||||
// else bank1 has more speed
|
||||
// else battler1 has more speed
|
||||
}
|
||||
|
||||
return strikesFirst;
|
||||
}
|
||||
|
||||
static void SetActionsAndBanksTurnOrder(void)
|
||||
static void SetActionsAndBattlersTurnOrder(void)
|
||||
{
|
||||
s32 var = 0;
|
||||
s32 i, j;
|
||||
@@ -4556,7 +4595,7 @@ static void SetActionsAndBanksTurnOrder(void)
|
||||
}
|
||||
}
|
||||
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
|
||||
gBattleStruct->focusPunchBank = 0;
|
||||
gBattleStruct->focusPunchBattlerId = 0;
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -4583,14 +4622,14 @@ static void SetActionsAndBanksTurnOrder(void)
|
||||
{
|
||||
for (j = i + 1; j < gBattlersCount; j++)
|
||||
{
|
||||
u8 bank1 = gBattleTurnOrder[i];
|
||||
u8 bank2 = gBattleTurnOrder[j];
|
||||
u8 battler1 = gBattleTurnOrder[i];
|
||||
u8 battler2 = gBattleTurnOrder[j];
|
||||
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
|
||||
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
|
||||
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
|
||||
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
|
||||
{
|
||||
if (GetWhoStrikesFirst(bank1, bank2, FALSE))
|
||||
if (GetWhoStrikesFirst(battler1, battler2, FALSE))
|
||||
SwapTurnOrder(i, j);
|
||||
}
|
||||
}
|
||||
@@ -4598,7 +4637,7 @@ static void SetActionsAndBanksTurnOrder(void)
|
||||
}
|
||||
}
|
||||
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
|
||||
gBattleStruct->focusPunchBank = 0;
|
||||
gBattleStruct->focusPunchBattlerId = 0;
|
||||
}
|
||||
|
||||
static void TurnValuesCleanUp(bool8 var0)
|
||||
@@ -4654,10 +4693,10 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
|
||||
{
|
||||
if (!(gHitMarker & HITMARKER_RUN))
|
||||
{
|
||||
while (gBattleStruct->focusPunchBank < gBattlersCount)
|
||||
while (gBattleStruct->focusPunchBattlerId < gBattlersCount)
|
||||
{
|
||||
gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBank;
|
||||
gBattleStruct->focusPunchBank++;
|
||||
gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId;
|
||||
gBattleStruct->focusPunchBattlerId++;
|
||||
if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH
|
||||
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
|
||||
&& !(gDisableStructs[gBattlerAttacker].truantCounter)
|
||||
@@ -4700,7 +4739,7 @@ static void RunTurnActionsFunctions(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
|
||||
if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
|
||||
{
|
||||
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
|
||||
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
|
||||
@@ -4934,7 +4973,7 @@ static void TryEvolvePokemon(void)
|
||||
|
||||
while (gLeveledUpInBattle != 0)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (gLeveledUpInBattle & gBitTable[i])
|
||||
{
|
||||
@@ -4983,7 +5022,7 @@ static void ReturnFromBattleToOverworld(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
|
||||
{
|
||||
UpdateRoamerHPStatus(&gEnemyParty[0]);
|
||||
if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
|
||||
if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT)
|
||||
SetRoamerInactive();
|
||||
}
|
||||
|
||||
@@ -5031,7 +5070,7 @@ static void HandleAction_UseMove(void)
|
||||
gMoveResultFlags = 0;
|
||||
gMultiHitCounter = 0;
|
||||
gBattleCommunication[6] = 0;
|
||||
gCurrMovePos = gUnknown_020241E9 = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
|
||||
gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
|
||||
|
||||
// choose move
|
||||
if (gProtectStructs[gBattlerAttacker].onlyStruggle)
|
||||
@@ -5050,14 +5089,14 @@ static void HandleAction_UseMove(void)
|
||||
&& gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
|
||||
{
|
||||
gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove;
|
||||
gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0);
|
||||
}
|
||||
// check if the encored move wasn't overwritten
|
||||
else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
|
||||
&& gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
|
||||
{
|
||||
gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
|
||||
gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE;
|
||||
gDisableStructs[gBattlerAttacker].encoredMovePos = 0;
|
||||
@@ -5338,7 +5377,7 @@ bool8 TryRunFromBattle(u8 battler)
|
||||
else
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item);
|
||||
|
||||
gStringBattler = battler;
|
||||
gPotentialItemEffectBattler = battler;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
|
||||
{
|
||||
@@ -5454,7 +5493,7 @@ static void HandleAction_Run(void)
|
||||
else
|
||||
{
|
||||
gCurrentTurnActionNumber = gBattlersCount;
|
||||
gBattleOutcome = B_OUTCOME_POKE_FLED;
|
||||
gBattleOutcome = B_OUTCOME_MON_FLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+20
-35
@@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "constants/moves.h"
|
||||
#include "text.h"
|
||||
#include "string_util.h"
|
||||
@@ -13,23 +13,11 @@
|
||||
#include "palette.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_setup.h"
|
||||
#include "menu.h"
|
||||
#include "recorded_battle.h"
|
||||
#include "international_string_util.h"
|
||||
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gStringBattler;
|
||||
extern u8 gEffectBank;
|
||||
extern u8 gBattlerAbilities[MAX_BATTLERS_COUNT];
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern struct StringInfoBattle *gStringInfo;
|
||||
|
||||
@@ -56,9 +44,6 @@ extern void GetEreaderTrainerName(u8 *txtPtr);
|
||||
extern void sub_81A36D0(u8 arg0, u16 trainerId); // battle_frontier_2
|
||||
extern void sub_81D572C(u8 arg0, u16 trainerId); // pokenav
|
||||
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
|
||||
extern s32 GetStringCenterAlignXOffsetWithLetterSpacing(u8 fontId, const u8 *str, s32 totalWidth, s16 letterSpacing);
|
||||
extern u8 GetTextSpeedInRecordedBattle(void);
|
||||
extern u8 GetPlayerTextSpeed(void);
|
||||
|
||||
// this file's functions
|
||||
static void sub_814F8F8(u8 *textPtr);
|
||||
@@ -1436,7 +1421,7 @@ void BufferStringBattle(u16 stringID)
|
||||
gBattleScripting.battler = gStringInfo->scrActive;
|
||||
*(&gBattleStruct->field_52) = gStringInfo->unk1605E;
|
||||
*(&gBattleStruct->hpScale) = gStringInfo->hpScale;
|
||||
gStringBattler = gStringInfo->StringBank;
|
||||
gPotentialItemEffectBattler = gStringInfo->StringBank;
|
||||
*(&gBattleStruct->stringMoveType) = gStringInfo->moveType;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
@@ -1903,7 +1888,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
|
||||
break;
|
||||
case B_TXT_EFF_NAME_WITH_PREFIX: // effect bank name with prefix
|
||||
HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlerPartyIndexes[gEffectBank])
|
||||
HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
|
||||
break;
|
||||
case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active bank name with prefix
|
||||
HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
|
||||
@@ -1930,10 +1915,10 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
{
|
||||
if ((gBattleScripting.multiplayerId != 0 && (gStringBattler & BIT_SIDE))
|
||||
|| (gBattleScripting.multiplayerId == 0 && !(gStringBattler & BIT_SIDE)))
|
||||
if ((gBattleScripting.multiplayerId != 0 && (gPotentialItemEffectBattler & BIT_SIDE))
|
||||
|| (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE)))
|
||||
{
|
||||
StringCopy(text, gEnigmaBerries[gStringBattler].name);
|
||||
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
|
||||
StringAppend(text, gText_BerrySuffix);
|
||||
toCpy = text;
|
||||
}
|
||||
@@ -1944,9 +1929,9 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gStringBattler)
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
|
||||
{
|
||||
StringCopy(text, gEnigmaBerries[gStringBattler].name);
|
||||
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
|
||||
StringAppend(text, gText_BerrySuffix);
|
||||
toCpy = text;
|
||||
}
|
||||
@@ -1979,11 +1964,11 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]];
|
||||
break;
|
||||
case B_TXT_EFF_ABILITY: // effect bank ability
|
||||
toCpy = gAbilityNames[gBattlerAbilities[gEffectBank]];
|
||||
toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]];
|
||||
break;
|
||||
case B_TXT_TRAINER1_CLASS: // trainer class name
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
|
||||
toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()];
|
||||
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
toCpy = gTrainerClassNames[sub_8068BB0()];
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
|
||||
@@ -2313,9 +2298,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
{
|
||||
if (hword == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gStringBattler)
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
|
||||
{
|
||||
StringCopy(dst, gEnigmaBerries[gStringBattler].name);
|
||||
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
|
||||
StringAppend(dst, gText_BerrySuffix);
|
||||
}
|
||||
else
|
||||
@@ -2360,20 +2345,20 @@ static void sub_814F8F8(u8* textBuff)
|
||||
|
||||
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
|
||||
// into the table of moves at sUnknownMoveTable and varied the line accordingly.
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark was a plain "!", used for any attack not on the list.
|
||||
// It resulted in the translation "<NAME>'s <ATTACK>!".
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark2 was "を つかった!". This resulted in the translation
|
||||
// "<NAME> used <ATTACK>!", which was used for all attacks in English.
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark3 was "した!". This was used for those moves whose
|
||||
// names were verbs, such as Recover, and resulted in translations like "<NAME>
|
||||
// recovered itself!".
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark4 was "を した!" This resulted in a translation of
|
||||
// "<NAME> did an <ATTACK>!".
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of
|
||||
// "<NAME>'s <ATTACK> attack!".
|
||||
static void sub_814F950(u8* dst)
|
||||
|
||||
+391
-452
File diff suppressed because it is too large
Load Diff
+4
-12
@@ -5,7 +5,6 @@
|
||||
#include "battle_transition.h"
|
||||
#include "main.h"
|
||||
#include "task.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "safari_zone.h"
|
||||
#include "script.h"
|
||||
#include "constants/game_stat.h"
|
||||
@@ -30,6 +29,8 @@
|
||||
#include "strings.h"
|
||||
#include "secret_base.h"
|
||||
#include "string_util.h"
|
||||
#include "overworld.h"
|
||||
#include "field_weather.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -59,14 +60,11 @@ extern void sub_81BE72C(void);
|
||||
extern void FreezeMapObjects(void);
|
||||
extern void sub_808BCF4(void);
|
||||
extern void sub_80EECC8(void);
|
||||
extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
|
||||
extern void c2_exit_to_overworld_2_switch(void);
|
||||
extern void Overworld_ClearSavedMusic(void);
|
||||
extern void CB2_WhiteOut(void);
|
||||
extern void sub_80AF6F0(void);
|
||||
extern void PlayBattleBGM(void);
|
||||
extern void sub_81DA57C(void);
|
||||
extern u8 GetSav1Weather(void);
|
||||
extern u8 Overworld_GetFlashLevel(void);
|
||||
extern u16 sub_81A9AA8(u8 localId);
|
||||
extern u16 sub_81D6180(u8 localId);
|
||||
@@ -82,12 +80,6 @@ extern void sub_81D61E8(void);
|
||||
extern void sub_80982B8(void);
|
||||
extern void sub_81A9EDC(u16 a0);
|
||||
extern void sub_81D572C(u8 a0, u16 arg1);
|
||||
extern void IncrementGameStat(u8 statId);
|
||||
extern u32 GetGameStat(u8 statId);
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattleOutcome;
|
||||
extern void (*gFieldCallback)(void);
|
||||
|
||||
// this file's functions
|
||||
static void DoBattlePikeWildBattle(void);
|
||||
@@ -996,8 +988,8 @@ static bool32 IsPlayerDefeated(u32 battleOutcome)
|
||||
case B_OUTCOME_WON:
|
||||
case B_OUTCOME_RAN:
|
||||
case B_OUTCOME_PLAYER_TELEPORTED:
|
||||
case B_OUTCOME_POKE_FLED:
|
||||
case B_OUTCOME_CAUGHT_POKE:
|
||||
case B_OUTCOME_MON_FLED:
|
||||
case B_OUTCOME_CAUGHT:
|
||||
return FALSE;
|
||||
default:
|
||||
return FALSE;
|
||||
|
||||
@@ -61,9 +61,7 @@ extern u16 gBattle_BG0_Y;
|
||||
|
||||
extern const struct OamData gFieldObjectBaseOam_32x32;
|
||||
|
||||
extern void c2_exit_to_overworld_2_switch(void);
|
||||
extern void sub_80AC3D0(void);
|
||||
extern void ScanlineEffect_Clear(void);
|
||||
|
||||
// this file's functions
|
||||
static void LaunchBattleTransitionTask(u8 transitionId);
|
||||
|
||||
+256
-295
File diff suppressed because it is too large
Load Diff
+23
-28
@@ -8,12 +8,7 @@
|
||||
#include "random.h"
|
||||
#include "battle_scripts.h"
|
||||
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern const u8 *gBattlescriptCurrInstr;
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gActiveBattler;
|
||||
|
||||
extern void sub_81D55D0(void);
|
||||
extern void sub_81D5694(void);
|
||||
@@ -79,7 +74,7 @@ void FreeBattleResources(void)
|
||||
}
|
||||
}
|
||||
|
||||
void AdjustFriendshipOnBattleFaint(u8 bank)
|
||||
void AdjustFriendshipOnBattleFaint(u8 battlerId)
|
||||
{
|
||||
u8 opposingBank;
|
||||
|
||||
@@ -98,22 +93,22 @@ void AdjustFriendshipOnBattleFaint(u8 bank)
|
||||
opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
}
|
||||
|
||||
if (gBattleMons[opposingBank].level > gBattleMons[bank].level)
|
||||
if (gBattleMons[opposingBank].level > gBattleMons[battlerId].level)
|
||||
{
|
||||
if (gBattleMons[opposingBank].level - gBattleMons[bank].level > 29)
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 8);
|
||||
if (gBattleMons[opposingBank].level - gBattleMons[battlerId].level > 29)
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8);
|
||||
else
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 6);
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 6);
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80571DC(u8 bank, u8 arg1)
|
||||
void sub_80571DC(u8 battlerId, u8 arg1)
|
||||
{
|
||||
if (GetBattlerSide(bank) != B_SIDE_OPPONENT)
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -122,14 +117,14 @@ void sub_80571DC(u8 bank, u8 arg1)
|
||||
for (i = 0; i < 3; i++)
|
||||
gUnknown_0203CF00[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60));
|
||||
|
||||
sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[bank]), pokemon_order_func(arg1));
|
||||
sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[battlerId]), pokemon_order_func(arg1));
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
*(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_805725C(u8 bank)
|
||||
u32 sub_805725C(u8 battlerId)
|
||||
{
|
||||
u32 effect = 0;
|
||||
|
||||
@@ -138,12 +133,12 @@ u32 sub_805725C(u8 bank)
|
||||
switch (gBattleCommunication[MULTIUSE_STATE])
|
||||
{
|
||||
case 0:
|
||||
if (gBattleMons[bank].status1 & STATUS1_SLEEP)
|
||||
if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
if (UproarWakeUpCheck(bank))
|
||||
if (UproarWakeUpCheck(battlerId))
|
||||
{
|
||||
gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
|
||||
gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
|
||||
gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
BattleScriptPushCursor();
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
|
||||
@@ -153,24 +148,24 @@ u32 sub_805725C(u8 bank)
|
||||
{
|
||||
u32 toSub;
|
||||
|
||||
if (gBattleMons[bank].ability == ABILITY_EARLY_BIRD)
|
||||
if (gBattleMons[battlerId].ability == ABILITY_EARLY_BIRD)
|
||||
toSub = 2;
|
||||
else
|
||||
toSub = 1;
|
||||
|
||||
if ((gBattleMons[bank].status1 & STATUS1_SLEEP) < toSub)
|
||||
gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
|
||||
if ((gBattleMons[battlerId].status1 & STATUS1_SLEEP) < toSub)
|
||||
gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
|
||||
else
|
||||
gBattleMons[bank].status1 -= toSub;
|
||||
gBattleMons[battlerId].status1 -= toSub;
|
||||
|
||||
if (gBattleMons[bank].status1 & STATUS1_SLEEP)
|
||||
if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
|
||||
effect = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
BattleScriptPushCursor();
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
|
||||
@@ -181,7 +176,7 @@ u32 sub_805725C(u8 bank)
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 1:
|
||||
if (gBattleMons[bank].status1 & STATUS1_FREEZE)
|
||||
if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
|
||||
{
|
||||
if (Random() % 5 != 0)
|
||||
{
|
||||
@@ -189,7 +184,7 @@ u32 sub_805725C(u8 bank)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[bank].status1 &= ~(STATUS1_FREEZE);
|
||||
gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
@@ -206,7 +201,7 @@ u32 sub_805725C(u8 bank)
|
||||
|
||||
if (effect == 2)
|
||||
{
|
||||
gActiveBattler = bank;
|
||||
gActiveBattler = battlerId;
|
||||
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
}
|
||||
|
||||
+11
-11
@@ -160,7 +160,7 @@ extern void sub_809882C(u8, u16, u8);
|
||||
extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
|
||||
extern void sub_81AABF0(void (*callback)(void));
|
||||
extern void sub_800B4C0(void);
|
||||
extern void sub_8009F8C(void);
|
||||
extern void ClearLinkCallback(void);
|
||||
extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
|
||||
extern void sub_8153430(void);
|
||||
extern bool8 sub_8153474(void);
|
||||
@@ -952,10 +952,10 @@ static void sub_807FAC8(void)
|
||||
sBerryBlenderData->syncArrowSpriteIds[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
|
||||
StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[i]], i + 8);
|
||||
}
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
|
||||
{
|
||||
sub_800E0E8();
|
||||
sub_800DFB4(0, 0);
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
SetVBlankCallback(VBlankCB0_BerryBlender);
|
||||
sBerryBlenderData->mainState++;
|
||||
@@ -1158,10 +1158,10 @@ static void sub_8080018(void)
|
||||
sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
|
||||
StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8);
|
||||
}
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
|
||||
{
|
||||
sub_800E0E8();
|
||||
sub_800DFB4(0, 0);
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
sBerryBlenderData->mainState++;
|
||||
break;
|
||||
@@ -1874,7 +1874,7 @@ static void sub_8081370(u16 a0)
|
||||
|
||||
static bool32 sub_80814B0(u16 arg0, u16 arg1, u16 arg2)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
|
||||
{
|
||||
if ((arg0 & 0xFF00) == arg2)
|
||||
return TRUE;
|
||||
@@ -2316,7 +2316,7 @@ static void sub_8081E20(void)
|
||||
|
||||
static void sub_8081F94(u16 *a0)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
|
||||
*a0 = 0x2F00;
|
||||
else
|
||||
*a0 = 0x2FFF;
|
||||
@@ -2345,7 +2345,7 @@ static void CB2_HandleBlenderEndGame(void)
|
||||
sBerryBlenderData->field_4C -= 32;
|
||||
if (sBerryBlenderData->field_4C <= 0)
|
||||
{
|
||||
sub_8009F8C();
|
||||
ClearLinkCallback();
|
||||
sBerryBlenderData->field_4C = 0;
|
||||
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
@@ -2365,7 +2365,7 @@ static void CB2_HandleBlenderEndGame(void)
|
||||
}
|
||||
else if (sub_800A520())
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
|
||||
{
|
||||
sBerryBlenderData->gameBlock.timeRPM.time = sBerryBlenderData->gameFrameTime;
|
||||
sBerryBlenderData->gameBlock.timeRPM.max_RPM = sBerryBlenderData->max_RPM;
|
||||
@@ -2394,7 +2394,7 @@ static void CB2_HandleBlenderEndGame(void)
|
||||
ResetBlockReceivedFlags();
|
||||
sBerryBlenderData->gameEndState++;
|
||||
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
|
||||
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
|
||||
{
|
||||
struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer);
|
||||
|
||||
@@ -2871,7 +2871,7 @@ static void sub_8082D28(void)
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
playerId = GetMultiplayerId();
|
||||
|
||||
if (gLinkVSyncDisabled && gReceivedRemoteLinkPlayers != 0)
|
||||
if (gWirelessCommType && gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
if (playerId == 0)
|
||||
{
|
||||
|
||||
@@ -463,7 +463,7 @@ bool8 IsDma3ManagerBusyWithBgCopy(void)
|
||||
return FALSE;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
bool8 IsDma3ManagerBusyWithBgCopy(void)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
@@ -1048,7 +1048,7 @@ void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8
|
||||
}
|
||||
}
|
||||
}*/
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
@@ -1495,7 +1495,7 @@ void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 pal
|
||||
*dest = test;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2)
|
||||
{
|
||||
asm("push {r4-r6,lr}\n\
|
||||
|
||||
@@ -421,7 +421,7 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
return FALSE;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
|
||||
@@ -1,283 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "battle.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "event_data.h"
|
||||
#include "item.h"
|
||||
#include "constants/items.h"
|
||||
#include "pokemon.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/battle_move_effects.h"
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern struct BattlePokemon gBattleMons[4];
|
||||
extern u16 gCurrentMove;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u16 gBattleWeather;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[];
|
||||
extern u16 gBattleMovePower;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
|
||||
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 bank);
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gHoldEffectToType[][2];
|
||||
extern const u8 gStatStageRatios[][2];
|
||||
|
||||
#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
|
||||
{ \
|
||||
(var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \
|
||||
(var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \
|
||||
}
|
||||
|
||||
s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef)
|
||||
{
|
||||
u32 i;
|
||||
s32 damage = 0;
|
||||
s32 damageHelper;
|
||||
u8 type;
|
||||
u16 attack, defense;
|
||||
u16 spAttack, spDefense;
|
||||
u8 defenderHoldEffect;
|
||||
u8 defenderHoldEffectParam;
|
||||
u8 attackerHoldEffect;
|
||||
u8 attackerHoldEffectParam;
|
||||
|
||||
if (!powerOverride)
|
||||
gBattleMovePower = gBattleMoves[move].power;
|
||||
else
|
||||
gBattleMovePower = powerOverride;
|
||||
|
||||
if (!typeOverride)
|
||||
type = gBattleMoves[move].type;
|
||||
else
|
||||
type = typeOverride & 0x3F;
|
||||
|
||||
attack = attacker->attack;
|
||||
defense = defender->defense;
|
||||
spAttack = attacker->spAttack;
|
||||
spDefense = defender->spDefense;
|
||||
|
||||
if (attacker->item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
|
||||
attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
attackerHoldEffect = ItemId_GetHoldEffect(attacker->item);
|
||||
attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
|
||||
}
|
||||
|
||||
if (defender->item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
|
||||
defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
defenderHoldEffect = ItemId_GetHoldEffect(defender->item);
|
||||
defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item);
|
||||
}
|
||||
|
||||
if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
|
||||
attack *= 2;
|
||||
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, bankAtk))
|
||||
attack = (110 * attack) / 100;
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, bankDef))
|
||||
defense = (110 * defense) / 100;
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankAtk))
|
||||
spAttack = (110 * spAttack) / 100;
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankDef))
|
||||
spDefense = (110 * spDefense) / 100;
|
||||
|
||||
for (i = 0; i < 17; i++)
|
||||
{
|
||||
if (attackerHoldEffect == gHoldEffectToType[i][0]
|
||||
&& type == gHoldEffectToType[i][1])
|
||||
{
|
||||
if (type <= 8)
|
||||
attack = (attack * (attackerHoldEffectParam + 100)) / 100;
|
||||
else
|
||||
spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND)
|
||||
attack = (150 * attack) / 100;
|
||||
if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS))
|
||||
spAttack = (150 * spAttack) / 100;
|
||||
if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS))
|
||||
spDefense = (150 * spDefense) / 100;
|
||||
if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL)
|
||||
spAttack *= 2;
|
||||
if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL)
|
||||
spDefense *= 2;
|
||||
if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU)
|
||||
spAttack *= 2;
|
||||
if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO)
|
||||
defense *= 2;
|
||||
if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK))
|
||||
attack *= 2;
|
||||
if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE))
|
||||
spAttack /= 2;
|
||||
if (attacker->ability == ABILITY_HUSTLE)
|
||||
attack = (150 * attack) / 100;
|
||||
if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0))
|
||||
spAttack = (150 * spAttack) / 100;
|
||||
if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_PLUS, 0, 0))
|
||||
spAttack = (150 * spAttack) / 100;
|
||||
if (attacker->ability == ABILITY_GUTS && attacker->status1)
|
||||
attack = (150 * attack) / 100;
|
||||
if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1)
|
||||
defense = (150 * defense) / 100;
|
||||
if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFD, 0))
|
||||
gBattleMovePower /= 2;
|
||||
if (type == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFE, 0))
|
||||
gBattleMovePower /= 2;
|
||||
if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3))
|
||||
gBattleMovePower = (150 * gBattleMovePower) / 100;
|
||||
if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3))
|
||||
gBattleMovePower = (150 * gBattleMovePower) / 100;
|
||||
if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3))
|
||||
gBattleMovePower = (150 * gBattleMovePower) / 100;
|
||||
if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3))
|
||||
gBattleMovePower = (150 * gBattleMovePower) / 100;
|
||||
if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
|
||||
defense /= 2;
|
||||
|
||||
if (type < TYPE_MYSTERY) // is physical
|
||||
{
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (attacker->statStages[STAT_STAGE_ATK] > 6)
|
||||
APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
|
||||
else
|
||||
damage = attack;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
|
||||
|
||||
damage = damage * gBattleMovePower;
|
||||
damage *= (2 * attacker->level / 5 + 2);
|
||||
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (defender->statStages[STAT_STAGE_DEF] < 6)
|
||||
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
|
||||
else
|
||||
damageHelper = defense;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
|
||||
|
||||
damage = damage / damageHelper;
|
||||
damage /= 50;
|
||||
|
||||
if ((attacker->status1 & STATUS1_BURN) && attacker->ability != ABILITY_GUTS)
|
||||
damage /= 2;
|
||||
|
||||
if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1)
|
||||
{
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
|
||||
damage = 2 * (damage / 3);
|
||||
else
|
||||
damage /= 2;
|
||||
}
|
||||
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
|
||||
damage /= 2;
|
||||
|
||||
// moves always do at least 1 damage.
|
||||
if (damage == 0)
|
||||
damage = 1;
|
||||
}
|
||||
|
||||
if (type == TYPE_MYSTERY)
|
||||
damage = 0; // is ??? type. does 0 damage.
|
||||
|
||||
if (type > TYPE_MYSTERY) // is special?
|
||||
{
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (attacker->statStages[STAT_STAGE_SPATK] > 6)
|
||||
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
|
||||
else
|
||||
damage = spAttack;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
|
||||
|
||||
damage = damage * gBattleMovePower;
|
||||
damage *= (2 * attacker->level / 5 + 2);
|
||||
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (defender->statStages[STAT_STAGE_SPDEF] < 6)
|
||||
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
|
||||
else
|
||||
damageHelper = spDefense;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
|
||||
|
||||
damage = (damage / damageHelper);
|
||||
damage /= 50;
|
||||
|
||||
if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1)
|
||||
{
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
|
||||
damage = 2 * (damage / 3);
|
||||
else
|
||||
damage /= 2;
|
||||
}
|
||||
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
|
||||
damage /= 2;
|
||||
|
||||
// are effects of weather negated with cloud nine or air lock
|
||||
if (!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0)
|
||||
&& !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0))
|
||||
{
|
||||
if (gBattleWeather & WEATHER_RAIN_TEMPORARY)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_FIRE:
|
||||
damage /= 2;
|
||||
break;
|
||||
case TYPE_WATER:
|
||||
damage = (15 * damage) / 10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// any weather except sun weakens solar beam
|
||||
if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM)
|
||||
damage /= 2;
|
||||
|
||||
// sunny
|
||||
if (gBattleWeather & WEATHER_SUN_ANY)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_FIRE:
|
||||
damage = (15 * damage) / 10;
|
||||
break;
|
||||
case TYPE_WATER:
|
||||
damage /= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// flash fire triggered
|
||||
if ((gBattleResources->flags->flags[bankAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
|
||||
damage = (15 * damage) / 10;
|
||||
}
|
||||
|
||||
return damage + 2;
|
||||
}
|
||||
@@ -14,8 +14,6 @@
|
||||
extern u8 gText_ClearAllSaveData[];
|
||||
extern u8 gText_ClearingData[];
|
||||
|
||||
extern u16 gUnknown_0860F074[];
|
||||
|
||||
static void Task_DoClearSaveDataScreenYesNo(u8);
|
||||
static void Task_ClearSaveDataScreenYesNoChoice(u8);
|
||||
static void Task_ClearSaveData(u8);
|
||||
|
||||
+1
-1
@@ -117,7 +117,7 @@ void Unused_LZDecompressWramIndirect(const void **src, void *dest)
|
||||
}
|
||||
|
||||
// This one (unused) function is really challenging, won't even try to decompile it.
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_803471C()
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
|
||||
+1
-1
@@ -2542,7 +2542,7 @@ void sub_812A0E8(u8 taskId)
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked)) void sub_812A0E8(u8 taskId)
|
||||
ASM_DIRECT void sub_812A0E8(u8 taskId)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tlsls r0, 24\n"
|
||||
|
||||
+2
-9
@@ -44,7 +44,6 @@ struct EggHatchData
|
||||
u8 textColor[3];
|
||||
};
|
||||
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern void (*gFieldCallback)(void);
|
||||
|
||||
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
|
||||
@@ -58,20 +57,14 @@ extern const u8 gText_HatchedFromEgg[];
|
||||
extern const u8 gText_NickHatchPrompt[];
|
||||
|
||||
extern u8 sav1_map_get_name(void);
|
||||
extern s8 ProcessMenuInputNoWrap_(void);
|
||||
extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern void FadeScreen(u8, u8);
|
||||
extern void overworld_free_bg_tilemaps(void);
|
||||
extern void sub_80AF168(void);
|
||||
extern void AllocateMonSpritesGfx(void);
|
||||
extern void FreeMonSpritesGfx(void);
|
||||
extern void ScanlineEffect_Stop(void);
|
||||
extern void reset_temp_tile_data_buffers(void);
|
||||
extern void c2_exit_to_overworld_2_switch(void);
|
||||
extern void play_some_sound(void);
|
||||
extern void copy_decompressed_tile_data_to_vram_autofree(u8 bg_id, const void* src, u16 size, u16 offset, u8 mode);
|
||||
extern void CreateYesNoMenu(const struct WindowTemplate*, u16, u8, u8);
|
||||
extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback);
|
||||
extern u16 sub_80D22D0(void);
|
||||
extern u8 CountPartyAliveNonEggMonsExcept(u8);
|
||||
@@ -440,12 +433,12 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
|
||||
gMonSpritesGfxPtr->sprites[(a0 * 2) + 1],
|
||||
species, pid);
|
||||
LoadCompressedObjectPalette(sub_806E794(mon));
|
||||
LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
|
||||
*speciesLoc = species;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
sub_806A068(sub_806E794(mon)->tag, r5);
|
||||
sub_806A068(GetMonSpritePalStruct(mon)->tag, r5);
|
||||
spriteID = CreateSprite(&gUnknown_0202499C, 120, 75, 6);
|
||||
gSprites[spriteID].invisible = 1;
|
||||
gSprites[spriteID].callback = SpriteCallbackDummy;
|
||||
|
||||
+4
-10
@@ -21,7 +21,7 @@
|
||||
#include "constants/songs.h"
|
||||
#include "overworld.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "bg.h"
|
||||
#include "link.h"
|
||||
@@ -48,13 +48,10 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern u16 gBattle_BG3_Y;
|
||||
extern u8 gBattleTerrain;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern bool8 gAffineAnimsDisabled;
|
||||
extern u16 gMoveToLearn;
|
||||
extern const u8 gSpeciesNames[][11];
|
||||
|
||||
extern u8 gBattleCommunication[];
|
||||
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
|
||||
#define sEvoGraphicsTaskID gBattleCommunication[2]
|
||||
|
||||
@@ -69,9 +66,6 @@ extern const u8 gText_PkmnStoppedEvolving[];
|
||||
extern const u8 gText_EllipsisQuestionMark[];
|
||||
extern const u8 gText_CommunicationStandby5[];
|
||||
|
||||
extern void copy_decompressed_tile_data_to_vram_autofree(u8 arg0, const void *arg1, bool32 arg2, u16 arg3, u8 arg4);
|
||||
extern u32 sub_80391E0(u8, u8);
|
||||
extern void SpriteCallbackDummy_2(struct Sprite *sprite);
|
||||
extern void sub_80356D0(void);
|
||||
extern void sub_807B154(void);
|
||||
extern void sub_806A068(u16, u8);
|
||||
@@ -473,10 +467,10 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_800E0E8();
|
||||
sub_800DFB4(0, 0);
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
BlendPalettes(-1,0x10, 0);
|
||||
gMain.state++;
|
||||
@@ -1257,7 +1251,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
|
||||
case 5:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
if (gLinkVSyncDisabled)
|
||||
if (gWirelessCommType)
|
||||
sub_800E084();
|
||||
|
||||
Free(GetBgTilemapBuffer(3));
|
||||
|
||||
Executable
+2448
File diff suppressed because it is too large
Load Diff
+5
-8
@@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "item_use.h"
|
||||
#include "battle.h"
|
||||
#include "berry.h"
|
||||
#include "bike.h"
|
||||
@@ -28,7 +29,6 @@
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern void(**gUnknown_0203CE54)(void);
|
||||
extern void(**gUnknown_0203CF2C)(void);
|
||||
extern void(*gUnknown_0203A0F4)(u8 taskId);
|
||||
@@ -87,15 +87,12 @@ extern void sub_81ABA88(u8);
|
||||
extern void sub_80B7CC8(void);
|
||||
extern void flagmods_08054D70(void);
|
||||
extern u8* sub_806CF78(u16);
|
||||
extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon*, u16, u8, u8);
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gBattlerPartyIndexes[];
|
||||
extern void sub_81B89F0(void);
|
||||
extern u8 GetItemEffectType(u16);
|
||||
extern struct MapConnection *sub_8088A8C(s16, s16);
|
||||
|
||||
void MapPostLoadHook_UseItem(void);
|
||||
extern void sub_80AF6D4(void);
|
||||
void sub_80AF6D4(void);
|
||||
void Task_CallItemUseOnFieldCallback(u8 taskId);
|
||||
void bag_menu_inits_lists_menu(u8 taskId);
|
||||
void ItemUseOnFieldCB_Bike(u8 taskId);
|
||||
@@ -116,7 +113,7 @@ void sub_80FE024(u8 taskId);
|
||||
void sub_80FE124(u8 taskId);
|
||||
void sub_80FE164(u8 taskId);
|
||||
|
||||
void DisplayItemMessage(u8 taskId, u8 a, u8* str, void(*callback)(u8 taskId));
|
||||
void DisplayItemMessage(u8 taskId, u8 a, const u8* str, void(*callback)(u8 taskId));
|
||||
void DisplayItemMessageInBattlePyramid(u8 taskId, u8* str, void(*callback)(u8 taskId));
|
||||
void DisplayItemMessageOnField(u8 taskId, u8* str, void(*callback)(u8 taskId));
|
||||
void sub_81C6714(u8 taskId);
|
||||
@@ -984,9 +981,9 @@ void sub_80FE440(u8 taskId)
|
||||
|
||||
void ItemUseInBattle_StatIncrease(u8 taskId)
|
||||
{
|
||||
u16 partyId = gBattlerPartyIndexes[gBankInMenu];
|
||||
u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId];
|
||||
|
||||
if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
|
||||
if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
|
||||
{
|
||||
if (!InBattlePyramid())
|
||||
DisplayItemMessage(taskId, 1, gText_WontHaveEffect, bag_menu_inits_lists_menu);
|
||||
|
||||
@@ -3,38 +3,6 @@
|
||||
|
||||
#include "librfu.h"
|
||||
|
||||
struct RfuUnk1
|
||||
{
|
||||
u8 unk_0[0x14];
|
||||
u32 unk_14;
|
||||
u32 unk_18;
|
||||
struct RfuIntrStruct unk_1c;
|
||||
};
|
||||
|
||||
struct RfuUnk2
|
||||
{
|
||||
u8 unk_0[0x68];
|
||||
u32 unk_68;
|
||||
u32 unk_6c;
|
||||
u8 unk_70[0x70];
|
||||
};
|
||||
|
||||
struct RfuUnk3
|
||||
{
|
||||
u32 unk_0;
|
||||
u32 unk_4;
|
||||
u8 unk_8[0xD4];
|
||||
u32 unk_dc;
|
||||
};
|
||||
|
||||
extern u32 *gUnknown_03007890;
|
||||
extern u32 *gUnknown_03007894;
|
||||
extern struct RfuUnk3* gUnknown_03007898;
|
||||
extern struct RfuUnk2* gUnknown_03007880[4];
|
||||
extern struct RfuUnk1* gUnknown_03007870[4];
|
||||
extern void* sub_82E53F4;
|
||||
extern void rfu_STC_clearAPIVariables(void);
|
||||
|
||||
// Nonmatching, only register differences
|
||||
/*u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam)
|
||||
{
|
||||
|
||||
+1
-1
@@ -641,7 +641,7 @@ static u8 sub_818E13C(void)
|
||||
return retval;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked)) static u8 sub_818E13C(void)
|
||||
ASM_DIRECT static u8 sub_818E13C(void)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmovs r7, 0x1\n"
|
||||
|
||||
+2406
-22
File diff suppressed because it is too large
Load Diff
+4940
File diff suppressed because it is too large
Load Diff
+37
-55
@@ -1,50 +1,32 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "crt0.h"
|
||||
#include "malloc.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "librfu.h"
|
||||
#include "m4a.h"
|
||||
#include "bg.h"
|
||||
#include "rtc.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "overworld.h"
|
||||
#include "play_time.h"
|
||||
#include "random.h"
|
||||
#include "dma3.h"
|
||||
#include "gba/flash_internal.h"
|
||||
#include "load_save.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "agb_flash.h"
|
||||
#include "sound.h"
|
||||
#include "battle.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "text.h"
|
||||
#include "intro.h"
|
||||
#include "main.h"
|
||||
|
||||
extern u16 GetGpuReg(u8);
|
||||
extern void SetGpuReg(u8, u16);
|
||||
extern void LinkVSync(void);
|
||||
extern void sub_800E174(void);
|
||||
extern void sub_800B9B8(void);
|
||||
extern void InitGpuRegManager(void);
|
||||
extern void sub_800E6D0(void);
|
||||
extern void CheckForFlashMemory(void);
|
||||
extern void InitMapMusic(void);
|
||||
extern void ResetBgs(void);
|
||||
extern void SetDefaultFontsPointer(void);
|
||||
extern void InitHeap(void *heapStart, u32 heapSize); // malloc.h
|
||||
extern void rfu_REQ_stopMode(void);
|
||||
extern void rfu_waitREQComplete(void);
|
||||
extern bool32 sub_8087634(void);
|
||||
extern bool32 sub_80875C8(void);
|
||||
extern void ClearSpriteCopyRequests(void);
|
||||
extern void PlayTimeCounter_Update(void);
|
||||
extern void MapMusicMain(void);
|
||||
extern void EnableInterrupts(u16);
|
||||
extern void sub_8033648(void);
|
||||
extern u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
|
||||
extern void ScanlineEffect_Stop(void);
|
||||
|
||||
extern struct SoundInfo gSoundInfo;
|
||||
extern u32 gFlashMemoryPresent;
|
||||
extern u32 IntrMain[];
|
||||
extern u8 gHeap[];
|
||||
extern struct SaveBlock2 gSaveblock2;
|
||||
extern struct PokemonStorage gPokemonStorage;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gUnknown_03002748;
|
||||
extern u32 *gUnknown_0203CF5C;
|
||||
|
||||
void Timer3Intr(void);
|
||||
bool8 HandleLinkConnection(void);
|
||||
void c2_copyright_1(void);
|
||||
|
||||
static void VBlankIntr(void);
|
||||
static void HBlankIntr(void);
|
||||
static void VCountIntr(void);
|
||||
@@ -79,19 +61,19 @@ const IntrFunc gIntrTableTemplate[] =
|
||||
|
||||
static u16 gUnknown_03000000;
|
||||
|
||||
extern u16 gKeyRepeatStartDelay;
|
||||
extern u8 gUnknown_030022B4;
|
||||
extern struct Main gMain;
|
||||
extern u16 gKeyRepeatContinueDelay;
|
||||
extern u8 gSoftResetDisabled;
|
||||
extern IntrFunc gIntrTable[INTR_COUNT];
|
||||
extern bool8 gLinkVSyncDisabled;
|
||||
extern u32 IntrMain_Buffer[0x200];
|
||||
extern u8 gPcmDmaCounter;
|
||||
u16 gKeyRepeatStartDelay;
|
||||
bool8 gLinkTransferringData;
|
||||
struct Main gMain;
|
||||
u16 gKeyRepeatContinueDelay;
|
||||
bool8 gSoftResetDisabled;
|
||||
IntrFunc gIntrTable[INTR_COUNT];
|
||||
u8 gLinkVSyncDisabled;
|
||||
u32 IntrMain_Buffer[0x200];
|
||||
u8 gPcmDmaCounter;
|
||||
|
||||
extern u16 gTrainerId;
|
||||
static EWRAM_DATA u16 gTrainerId = 0;
|
||||
|
||||
EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
|
||||
//EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
|
||||
|
||||
static void UpdateLinkAndCallCallbacks(void);
|
||||
static void InitMainCallbacks(void);
|
||||
@@ -129,7 +111,7 @@ void AgbMain()
|
||||
if (gFlashMemoryPresent != TRUE)
|
||||
SetMainCallback2(NULL);
|
||||
|
||||
gUnknown_030022B4 = 0;
|
||||
gLinkTransferringData = FALSE;
|
||||
gUnknown_03000000 = 0xFC0;
|
||||
|
||||
for (;;)
|
||||
@@ -147,22 +129,22 @@ void AgbMain()
|
||||
|
||||
if (sub_8087634() == 1)
|
||||
{
|
||||
gUnknown_030022B4 = 1;
|
||||
gLinkTransferringData = TRUE;
|
||||
UpdateLinkAndCallCallbacks();
|
||||
gUnknown_030022B4 = 0;
|
||||
gLinkTransferringData = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_030022B4 = 0;
|
||||
gLinkTransferringData = FALSE;
|
||||
UpdateLinkAndCallCallbacks();
|
||||
|
||||
if (sub_80875C8() == 1)
|
||||
{
|
||||
gMain.newKeys = 0;
|
||||
ClearSpriteCopyRequests();
|
||||
gUnknown_030022B4 = 1;
|
||||
gLinkTransferringData = TRUE;
|
||||
UpdateLinkAndCallCallbacks();
|
||||
gUnknown_030022B4 = 0;
|
||||
gLinkTransferringData = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -335,10 +317,10 @@ extern void CopyBufferedValuesToGpuRegs(void);
|
||||
|
||||
static void VBlankIntr(void)
|
||||
{
|
||||
if (gLinkVSyncDisabled != FALSE)
|
||||
if (gWirelessCommType != 0)
|
||||
RfuVSync();
|
||||
else if (gLinkVSyncDisabled == FALSE)
|
||||
LinkVSync();
|
||||
else if (gUnknown_03002748 == FALSE)
|
||||
sub_800B9B8();
|
||||
|
||||
gMain.vblankCounter1++;
|
||||
|
||||
|
||||
+140
-53
@@ -51,48 +51,15 @@ IWRAM_DATA u8 gUnknown_03000DD0;
|
||||
|
||||
// Static ROM declarations
|
||||
|
||||
// .rodata
|
||||
|
||||
// .text
|
||||
|
||||
enum
|
||||
{
|
||||
HAS_NO_SAVED_GAME, //NEW GAME, OPTION
|
||||
HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION
|
||||
HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION
|
||||
HAS_MYSTERY_EVENTS,
|
||||
};
|
||||
|
||||
struct ArrowStruct {
|
||||
u8 unk0[6];
|
||||
u16 unk6[5];
|
||||
};
|
||||
|
||||
extern struct BgTemplate gUnknown_082FF0E8[];
|
||||
extern struct WindowTemplate gUnknown_082FF038[];
|
||||
extern struct WindowTemplate gUnknown_082FF070[];
|
||||
extern u8 gUnknown_082FF0E0[];
|
||||
extern struct WindowTemplate gUnknown_082FF048[];
|
||||
extern struct ArrowStruct gUnknown_082FF0F4;
|
||||
extern struct BgTemplate gUnknown_082FF0F0;
|
||||
extern struct WindowTemplate gUnknown_082FF080[];
|
||||
extern const union AffineAnimCmd *const gUnknown_082FF114[];
|
||||
extern struct WindowTemplate gUnknown_082FF088[];
|
||||
extern const struct MenuAction gUnknown_082FF118[];
|
||||
extern u8* gMalePresetNames[];
|
||||
extern u8* gFemalePresetNames[];
|
||||
extern u8 gUnknown_082FF0E3[];
|
||||
|
||||
u32 InitMainMenu(bool8);
|
||||
void Task_MainMenuCheckSaveFile(u8);
|
||||
void Task_MainMenuCheckBattery(u8);
|
||||
void Task_WaitForSaveFileErrorWindow(u8);
|
||||
void CreateMainMenuErrorWindow(const u8*);
|
||||
void sub_8032250(struct WindowTemplate*);
|
||||
void sub_8032250(const struct WindowTemplate*);
|
||||
void Task_DisplayMainMenu(u8);
|
||||
void Task_WaitForBatteryDryErrorWindow(u8);
|
||||
void fmt_savegame(void);
|
||||
u8 AddScrollIndicatorArrowPair(struct ArrowStruct*, u16*);
|
||||
void HighlightSelectedMainMenuItem(u8, u8, s16);
|
||||
void Task_HandleMainMenuInput(u8);
|
||||
void Task_HandleMainMenuAPressed(u8);
|
||||
@@ -119,7 +86,7 @@ void task_new_game_prof_birch_speech_9(u8);
|
||||
void task_new_game_prof_birch_speech_10(u8);
|
||||
void task_new_game_prof_birch_speech_11(u8);
|
||||
void LoadMainMenuWindowFrameTiles(u8, u16);
|
||||
void DrawMainMenuWindowBorder(struct WindowTemplate*, u16);
|
||||
void DrawMainMenuWindowBorder(const struct WindowTemplate*, u16);
|
||||
void Task_HighlightSelectedMainMenuItem(u8);
|
||||
void task_new_game_prof_birch_speech_12(u8);
|
||||
void task_new_game_prof_birch_speech_13(u8);
|
||||
@@ -154,6 +121,126 @@ void fmt_player(void);
|
||||
void fmt_badges(void);
|
||||
void sub_8032474(u8, u8, u8, u8, u8, u8);
|
||||
|
||||
// .rodata
|
||||
|
||||
const u16 gUnknown_082FECFC[][16] = {
|
||||
INCBIN_U16("graphics/birch_speech/bg0.gbapal"),
|
||||
INCBIN_U16("graphics/birch_speech/bg1.gbapal")
|
||||
};
|
||||
|
||||
const u8 gBirchIntroShadowGfx[] = INCBIN_U8("graphics/birch_speech/shadow.4bpp.lz");
|
||||
const u8 gUnknown_082FEEF0[] = INCBIN_U8("graphics/birch_speech/map.bin.lz");
|
||||
const u16 gUnknown_082FF018[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal");
|
||||
const u16 gUnknown_082FF028[] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
const struct WindowTemplate gUnknown_082FF038[] = {
|
||||
{0, 2, 1, 26, 2, 15, 1},
|
||||
{0, 2, 5, 26, 2, 15, 0x35}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082FF048[] = {
|
||||
{0, 2, 1, 26, 6, 15, 1},
|
||||
{0, 2, 9, 26, 2, 15, 0x9D},
|
||||
{0, 2, 13, 26, 2, 15, 0xD1},
|
||||
{0, 2, 17, 26, 2, 15, 0x105},
|
||||
{0, 2, 21, 26, 2, 15, 0x139}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082FF070[] = {
|
||||
{0, 2, 15, 26, 4, 15, 0x16D},
|
||||
{0xFF, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082FF080[] = {
|
||||
{0, 2, 15, 27, 4, 15, 1},
|
||||
{0, 3, 5, 6, 4, 15, 0x6D},
|
||||
{0, 3, 2, 9, 10, 15, 0x85},
|
||||
{0xFF, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
const u16 gMainMenuBgPal[] = INCBIN_U16("graphics/misc/main_menu_bg.gbapal");
|
||||
const u16 gMainMenuTextPal[] = INCBIN_U16("graphics/misc/main_menu_text.gbapal");
|
||||
|
||||
const u8 gUnknown_082FF0E0[] = {10, 11, 12};
|
||||
const u8 gUnknown_082FF0E3[] = {10, 1, 12};
|
||||
|
||||
const struct BgTemplate gUnknown_082FF0E8[] = {
|
||||
{0, 2, 30, 0, 0, 0, 0},
|
||||
{1, 0, 7, 0, 0, 3, 0}
|
||||
};
|
||||
|
||||
const struct BgTemplate gUnknown_082FF0F0 = {0, 3, 30, 0, 0, 0, 0};
|
||||
|
||||
const struct ArrowStruct gUnknown_082FF0F4 = {2, 0x78, 8, 3, 0x78, 0x98, 3, 4, 1, 1, 0};
|
||||
|
||||
const union AffineAnimCmd gUnknown_082FF104[] = {
|
||||
AFFINEANIMCMD_FRAME(-2, -2, 0, 0x30),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_082FF114 = gUnknown_082FF104;
|
||||
|
||||
const struct MenuAction gUnknown_082FF118[] = {
|
||||
{gText_BirchBoy, NULL},
|
||||
{gText_BirchGirl, NULL}
|
||||
};
|
||||
|
||||
const u8 *const gMalePresetNames[] = {
|
||||
gText_DefaultNameStu,
|
||||
gText_DefaultNameMilton,
|
||||
gText_DefaultNameTom,
|
||||
gText_DefaultNameKenny,
|
||||
gText_DefaultNameReid,
|
||||
gText_DefaultNameJude,
|
||||
gText_DefaultNameJaxson,
|
||||
gText_DefaultNameEaston,
|
||||
gText_DefaultNameWalker,
|
||||
gText_DefaultNameTeru,
|
||||
gText_DefaultNameJohnny,
|
||||
gText_DefaultNameBrett,
|
||||
gText_DefaultNameSeth,
|
||||
gText_DefaultNameTerry,
|
||||
gText_DefaultNameCasey,
|
||||
gText_DefaultNameDarren,
|
||||
gText_DefaultNameLandon,
|
||||
gText_DefaultNameCollin,
|
||||
gText_DefaultNameStanley,
|
||||
gText_DefaultNameQuincy
|
||||
};
|
||||
|
||||
const u8 *const gFemalePresetNames[] = {
|
||||
gText_DefaultNameKimmy,
|
||||
gText_DefaultNameTiara,
|
||||
gText_DefaultNameBella,
|
||||
gText_DefaultNameJayla,
|
||||
gText_DefaultNameAllie,
|
||||
gText_DefaultNameLianna,
|
||||
gText_DefaultNameSara,
|
||||
gText_DefaultNameMonica,
|
||||
gText_DefaultNameCamila,
|
||||
gText_DefaultNameAubree,
|
||||
gText_DefaultNameRuthie,
|
||||
gText_DefaultNameHazel,
|
||||
gText_DefaultNameNadine,
|
||||
gText_DefaultNameTanja,
|
||||
gText_DefaultNameYasmin,
|
||||
gText_DefaultNameNicola,
|
||||
gText_DefaultNameLillie,
|
||||
gText_DefaultNameTerra,
|
||||
gText_DefaultNameLucy,
|
||||
gText_DefaultNameHalie
|
||||
};
|
||||
|
||||
// .text
|
||||
|
||||
enum
|
||||
{
|
||||
HAS_NO_SAVED_GAME, //NEW GAME, OPTION
|
||||
HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION
|
||||
HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION
|
||||
HAS_MYSTERY_EVENTS,
|
||||
};
|
||||
|
||||
void CB2_MainMenu(void)
|
||||
{
|
||||
RunTasks();
|
||||
@@ -230,7 +317,7 @@ u32 InitMainMenu(bool8 affects_palette_maybe)
|
||||
EnableInterrupts(1);
|
||||
SetVBlankCallback(VBlankCB_MainMenu);
|
||||
SetMainCallback2(CB2_MainMenu);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0x3040);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
ShowBg(0);
|
||||
HideBg(1);
|
||||
CreateTask(Task_MainMenuCheckSaveFile, 0);
|
||||
@@ -248,7 +335,7 @@ void Task_MainMenuCheckSaveFile(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 17);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x31);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 7);
|
||||
|
||||
@@ -326,7 +413,7 @@ void Task_MainMenuCheckBattery(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 17);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x31);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 7);
|
||||
|
||||
@@ -364,7 +451,7 @@ void Task_DisplayMainMenu(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 17);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x31);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 7);
|
||||
|
||||
@@ -862,7 +949,7 @@ void HighlightSelectedMainMenuItem(u8 menuType, u8 selectedMenuItem, s16 a)
|
||||
void task_new_game_prof_birch_speech_1(u8 taskId)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0x1040);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
InitBgFromTemplate(&gUnknown_082FF0F0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
@@ -1338,7 +1425,7 @@ void task_new_game_prof_birch_speech_part2_9(u8 taskId)
|
||||
{
|
||||
spriteId = gTasks[taskId].data[2];
|
||||
gSprites[spriteId].oam.affineMode = 1;
|
||||
gSprites[spriteId].affineAnims = gUnknown_082FF114;
|
||||
gSprites[spriteId].affineAnims = &gUnknown_082FF114;
|
||||
InitSpriteAffineAnim(&gSprites[spriteId]);
|
||||
StartSpriteAffineAnim(&gSprites[spriteId], 0);
|
||||
gSprites[spriteId].callback = sub_80318D8;
|
||||
@@ -1365,7 +1452,7 @@ void task_new_game_prof_birch_speech_part2_11(u8 taskId)
|
||||
{
|
||||
spriteId = gTasks[taskId].data[2];
|
||||
gSprites[spriteId].callback = nullsub_11;
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0x1040);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
BeginNormalPaletteFade(-0x10000, 0, 0, 16, -1);
|
||||
gTasks[taskId].func = task_new_game_prof_birch_speech_part2_12;
|
||||
}
|
||||
@@ -1391,7 +1478,7 @@ void new_game_prof_birch_speech_part2_start(void)
|
||||
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0x1040);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
InitBgsFromTemplates(0, gUnknown_082FF0E8, 2);
|
||||
InitBgFromTemplate(&gUnknown_082FF0F0);
|
||||
SetVBlankCallback(NULL);
|
||||
@@ -1493,12 +1580,12 @@ void AddBirchSpeechObjects(u8 taskId)
|
||||
gSprites[spriteId2].oam.priority = 0;
|
||||
gSprites[spriteId2].invisible = 1;
|
||||
gTasks[taskId].data[9] = spriteId2;
|
||||
spriteId3 = CreateTrainerSprite(sub_806EFF0(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer);
|
||||
spriteId3 = CreateTrainerSprite(FacilityClassToPicIndex(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer);
|
||||
gSprites[spriteId3].callback = nullsub_11;
|
||||
gSprites[spriteId3].invisible = 1;
|
||||
gSprites[spriteId3].oam.priority = 0;
|
||||
gTasks[taskId].data[10] = spriteId3;
|
||||
spriteId4 = CreateTrainerSprite(sub_806EFF0(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]);
|
||||
spriteId4 = CreateTrainerSprite(FacilityClassToPicIndex(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]);
|
||||
gSprites[spriteId4].callback = nullsub_11;
|
||||
gSprites[spriteId4].invisible = 1;
|
||||
gSprites[spriteId4].oam.priority = 0;
|
||||
@@ -1532,8 +1619,8 @@ void sub_8031ACC(u8 taskId, u8 a)
|
||||
{
|
||||
u8 taskId2;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0x250);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 16);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_OBJ);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
gTasks[taskId].data[5] = 0;
|
||||
taskId2 = CreateTask(sub_8031A5C, 0);
|
||||
@@ -1571,8 +1658,8 @@ void sub_8031BAC(u8 taskId, u8 a)
|
||||
{
|
||||
u8 taskId2;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0x250);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_OBJ);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
gTasks[taskId].data[5] = 0;
|
||||
taskId2 = CreateTask(sub_8031B3C, 0);
|
||||
@@ -1653,7 +1740,7 @@ void sub_8031D34(u8 taskId, u8 a)
|
||||
|
||||
void sub_8031D74(void)
|
||||
{
|
||||
DrawMainMenuWindowBorder(gUnknown_082FF088, 0xF3);
|
||||
DrawMainMenuWindowBorder(&gUnknown_082FF080[1], 0xF3);
|
||||
FillWindowPixelBuffer(1, 17);
|
||||
PrintMenuTable(1, 2, gUnknown_082FF118);
|
||||
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0);
|
||||
@@ -1668,7 +1755,7 @@ s8 sub_8031DB4(void)
|
||||
|
||||
void set_default_player_name(u8 nameId)
|
||||
{
|
||||
u8* name;
|
||||
const u8* name;
|
||||
u8 i;
|
||||
|
||||
if (gSaveBlock2Ptr->playerGender == MALE)
|
||||
@@ -1760,7 +1847,7 @@ void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset)
|
||||
LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 32, 32);
|
||||
}
|
||||
|
||||
void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum)
|
||||
void DrawMainMenuWindowBorder(const struct WindowTemplate *template, u16 baseTileNum)
|
||||
{
|
||||
u16 r9 = 1 + baseTileNum;
|
||||
u16 r10 = 2 + baseTileNum;
|
||||
@@ -1781,7 +1868,7 @@ void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum)
|
||||
CopyBgTilemapBufferToVram(template->priority);
|
||||
}
|
||||
|
||||
void sub_8032250(struct WindowTemplate *template)
|
||||
void sub_8032250(const struct WindowTemplate *template)
|
||||
{
|
||||
FillBgTilemapBufferRect(template->priority, 0, template->tilemapLeft - 1, template->tilemapTop - 1, template->tilemapLeft + template->width + 1, template->tilemapTop + template->height + 1, 2);
|
||||
CopyBgTilemapBufferToVram(template->priority);
|
||||
|
||||
@@ -189,7 +189,7 @@ static void CB2_MysteryEventMenu(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
if (sub_800A0C8(2, 2) == 3)
|
||||
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3)
|
||||
{
|
||||
sub_800AC34();
|
||||
GetEventLoadMessage(gStringVar4, 1);
|
||||
|
||||
@@ -15,12 +15,6 @@
|
||||
#include "util.h"
|
||||
#include "graphics.h"
|
||||
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u16 gBattlerPartyIndexes[];
|
||||
extern u8 gBattlerSpriteIds[];
|
||||
extern u8 gHealthboxSpriteIds[];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
// this file's functions
|
||||
|
||||
@@ -50,7 +50,6 @@ struct PokeblockFeedStruct
|
||||
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
|
||||
extern const u8 gBattleTerrainPalette_Frontier[];
|
||||
extern const u8 gBattleTerrainTiles_Building[];
|
||||
@@ -837,7 +836,7 @@ static u8 CreateMonSprite(struct Pokemon* mon)
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
|
||||
sPokeblockFeed->noMonFlip = TRUE;
|
||||
if (!IsPokeSpriteNotFlipped(species))
|
||||
if (!IsMonSpriteNotFlipped(species))
|
||||
{
|
||||
gSprites[spriteId].affineAnims = sSpriteAffineAnimTable_MonNoFlip;
|
||||
gSprites[spriteId].oam.affineMode = 3;
|
||||
|
||||
+6094
File diff suppressed because it is too large
Load Diff
-457
@@ -1,457 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "main.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/moves.h"
|
||||
#include "string_util.h"
|
||||
#include "text.h"
|
||||
|
||||
//Extracts the upper 16 bits of a 32-bit number
|
||||
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
|
||||
|
||||
//Extracts the lower 16 bits of a 32-bit number
|
||||
#define LOHALF(n) ((n) & 0xFFFF)
|
||||
|
||||
extern u8 sav1_map_get_name(void);
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA u8 sLearningMoveTableID = 0;
|
||||
EWRAM_DATA u8 gPlayerPartyCount = 0;
|
||||
EWRAM_DATA u8 gEnemyPartyCount = 0;
|
||||
EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0};
|
||||
EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
|
||||
|
||||
// const rom data
|
||||
const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
|
||||
const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
|
||||
const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
|
||||
|
||||
const struct SpindaSpot gSpindaSpotGraphics[] =
|
||||
{
|
||||
{16, 7, INCBIN_U16("graphics/spinda_spots/spot_0.bin")},
|
||||
{40, 8, INCBIN_U16("graphics/spinda_spots/spot_1.bin")},
|
||||
{22, 25, INCBIN_U16("graphics/spinda_spots/spot_2.bin")},
|
||||
{34, 26, INCBIN_U16("graphics/spinda_spots/spot_3.bin")}
|
||||
};
|
||||
|
||||
#include "data/pokemon/item_effects.h"
|
||||
|
||||
const s8 gNatureStatTable[][5] =
|
||||
{
|
||||
// Atk Def Spd Sp.Atk Sp.Def
|
||||
{ 0, 0, 0, 0, 0}, // Hardy
|
||||
{ +1, -1, 0, 0, 0}, // Lonely
|
||||
{ +1, 0, -1, 0, 0}, // Brave
|
||||
{ +1, 0, 0, -1, 0}, // Adamant
|
||||
{ +1, 0, 0, 0, -1}, // Naughty
|
||||
{ -1, +1, 0, 0, 0}, // Bold
|
||||
{ 0, 0, 0, 0, 0}, // Docile
|
||||
{ 0, +1, -1, 0, 0}, // Relaxed
|
||||
{ 0, +1, 0, -1, 0}, // Impish
|
||||
{ 0, +1, 0, 0, -1}, // Lax
|
||||
{ -1, 0, +1, 0, 0}, // Timid
|
||||
{ 0, -1, +1, 0, 0}, // Hasty
|
||||
{ 0, 0, 0, 0, 0}, // Serious
|
||||
{ 0, 0, +1, -1, 0}, // Jolly
|
||||
{ 0, 0, +1, 0, -1}, // Naive
|
||||
{ -1, 0, 0, +1, 0}, // Modest
|
||||
{ 0, -1, 0, +1, 0}, // Mild
|
||||
{ 0, 0, -1, +1, 0}, // Quiet
|
||||
{ 0, 0, 0, 0, 0}, // Bashful
|
||||
{ 0, 0, 0, +1, -1}, // Rash
|
||||
{ -1, 0, 0, 0, +1}, // Calm
|
||||
{ 0, -1, 0, 0, +1}, // Gentle
|
||||
{ 0, 0, -1, 0, +1}, // Sassy
|
||||
{ 0, 0, 0, -1, +1}, // Careful
|
||||
{ 0, 0, 0, 0, 0}, // Quirky
|
||||
};
|
||||
|
||||
#include "data/pokemon/tmhm_learnsets.h"
|
||||
#include "data/pokemon/trainer_class_lookups.h"
|
||||
#include "data/pokemon/cry_ids.h"
|
||||
#include "data/pokemon/experience_tables.h"
|
||||
#include "data/pokemon/base_stats.h"
|
||||
#include "data/pokemon/level_up_learnsets.h"
|
||||
#include "data/pokemon/evolution.h"
|
||||
#include "data/pokemon/level_up_learnset_pointers.h"
|
||||
|
||||
// code
|
||||
void ZeroBoxMonData(struct BoxPokemon *boxMon)
|
||||
{
|
||||
u8 *raw = (u8 *)boxMon;
|
||||
u32 i;
|
||||
for (i = 0; i < sizeof(struct BoxPokemon); i++)
|
||||
raw[i] = 0;
|
||||
}
|
||||
|
||||
void ZeroMonData(struct Pokemon *mon)
|
||||
{
|
||||
u32 arg;
|
||||
ZeroBoxMonData(&mon->box);
|
||||
arg = 0;
|
||||
SetMonData(mon, MON_DATA_STATUS, &arg);
|
||||
SetMonData(mon, MON_DATA_LEVEL, &arg);
|
||||
SetMonData(mon, MON_DATA_HP, &arg);
|
||||
SetMonData(mon, MON_DATA_MAX_HP, &arg);
|
||||
SetMonData(mon, MON_DATA_ATK, &arg);
|
||||
SetMonData(mon, MON_DATA_DEF, &arg);
|
||||
SetMonData(mon, MON_DATA_SPEED, &arg);
|
||||
SetMonData(mon, MON_DATA_SPATK, &arg);
|
||||
SetMonData(mon, MON_DATA_SPDEF, &arg);
|
||||
arg = 255;
|
||||
SetMonData(mon, MON_DATA_MAIL, &arg);
|
||||
}
|
||||
|
||||
void ZeroPlayerPartyMons(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
ZeroMonData(&gPlayerParty[i]);
|
||||
}
|
||||
|
||||
void ZeroEnemyPartyMons(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
ZeroMonData(&gEnemyParty[i]);
|
||||
}
|
||||
|
||||
void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
|
||||
{
|
||||
u32 arg;
|
||||
ZeroMonData(mon);
|
||||
CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
|
||||
SetMonData(mon, MON_DATA_LEVEL, &level);
|
||||
arg = 255;
|
||||
SetMonData(mon, MON_DATA_MAIL, &arg);
|
||||
CalculateMonStats(mon);
|
||||
}
|
||||
|
||||
void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
|
||||
{
|
||||
u8 speciesName[POKEMON_NAME_LENGTH + 1];
|
||||
u32 personality;
|
||||
u32 value;
|
||||
u16 checksum;
|
||||
|
||||
ZeroBoxMonData(boxMon);
|
||||
|
||||
if (hasFixedPersonality)
|
||||
personality = fixedPersonality;
|
||||
else
|
||||
personality = Random32();
|
||||
|
||||
SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);
|
||||
|
||||
//Determine original trainer ID
|
||||
if (otIdType == OT_ID_RANDOM_NO_SHINY) //Pokemon cannot be shiny
|
||||
{
|
||||
u32 shinyValue;
|
||||
do
|
||||
{
|
||||
value = Random32();
|
||||
shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
|
||||
} while (shinyValue < 8);
|
||||
}
|
||||
else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID
|
||||
{
|
||||
value = fixedOtId;
|
||||
}
|
||||
else //Player is the OT
|
||||
{
|
||||
value = gSaveBlock2Ptr->playerTrainerId[0]
|
||||
| (gSaveBlock2Ptr->playerTrainerId[1] << 8)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[2] << 16)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
}
|
||||
|
||||
SetBoxMonData(boxMon, MON_DATA_OT_ID, &value);
|
||||
|
||||
checksum = CalculateBoxMonChecksum(boxMon);
|
||||
SetBoxMonData(boxMon, MON_DATA_CHECKSUM, &checksum);
|
||||
EncryptBoxMon(boxMon);
|
||||
GetSpeciesName(speciesName, species);
|
||||
SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName);
|
||||
SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
|
||||
SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
|
||||
SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
|
||||
SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
|
||||
SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
|
||||
value = sav1_map_get_name();
|
||||
SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
|
||||
SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
|
||||
SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
|
||||
value = ITEM_POKE_BALL;
|
||||
SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value);
|
||||
SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
|
||||
|
||||
if (fixedIV < 32)
|
||||
{
|
||||
SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
|
||||
SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
|
||||
SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
|
||||
SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &fixedIV);
|
||||
SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
|
||||
SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 iv;
|
||||
value = Random();
|
||||
|
||||
iv = value & 0x1F;
|
||||
SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv);
|
||||
iv = (value & 0x3E0) >> 5;
|
||||
SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv);
|
||||
iv = (value & 0x7C00) >> 10;
|
||||
SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv);
|
||||
|
||||
value = Random();
|
||||
|
||||
iv = value & 0x1F;
|
||||
SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv);
|
||||
iv = (value & 0x3E0) >> 5;
|
||||
SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv);
|
||||
iv = (value & 0x7C00) >> 10;
|
||||
SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv);
|
||||
}
|
||||
|
||||
if (gBaseStats[species].ability2)
|
||||
{
|
||||
value = personality & 1;
|
||||
SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value);
|
||||
}
|
||||
|
||||
GiveBoxMonInitialMoveset(boxMon);
|
||||
}
|
||||
|
||||
void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature)
|
||||
{
|
||||
u32 personality;
|
||||
|
||||
do
|
||||
{
|
||||
personality = Random32();
|
||||
}
|
||||
while (nature != GetNatureFromPersonality(personality));
|
||||
|
||||
CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0);
|
||||
}
|
||||
|
||||
void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter)
|
||||
{
|
||||
u32 personality;
|
||||
|
||||
if ((u8)(unownLetter - 1) < 28)
|
||||
{
|
||||
u16 actualLetter;
|
||||
|
||||
do
|
||||
{
|
||||
personality = Random32();
|
||||
actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28);
|
||||
}
|
||||
while (nature != GetNatureFromPersonality(personality)
|
||||
|| gender != GetGenderFromSpeciesAndPersonality(species, personality)
|
||||
|| actualLetter != unownLetter - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
personality = Random32();
|
||||
}
|
||||
while (nature != GetNatureFromPersonality(personality)
|
||||
|| gender != GetGenderFromSpeciesAndPersonality(species, personality));
|
||||
}
|
||||
|
||||
CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0);
|
||||
}
|
||||
|
||||
// This is only used to create Wally's Ralts.
|
||||
void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level)
|
||||
{
|
||||
u32 personality;
|
||||
u32 otId;
|
||||
|
||||
do
|
||||
{
|
||||
otId = Random32();
|
||||
personality = Random32();
|
||||
}
|
||||
while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE);
|
||||
CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId);
|
||||
}
|
||||
|
||||
void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality)
|
||||
{
|
||||
CreateMon(mon, species, level, 0, 1, personality, OT_ID_PLAYER_ID, 0);
|
||||
SetMonData(mon, MON_DATA_IVS, &ivs);
|
||||
CalculateMonStats(mon);
|
||||
}
|
||||
|
||||
void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId)
|
||||
{
|
||||
CreateMon(mon, species, level, 0, 0, 0, OT_ID_PRESET, otId);
|
||||
SetMonData(mon, MON_DATA_HP_IV, &ivs[0]);
|
||||
SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]);
|
||||
SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]);
|
||||
SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]);
|
||||
SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]);
|
||||
SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]);
|
||||
CalculateMonStats(mon);
|
||||
}
|
||||
|
||||
void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread)
|
||||
{
|
||||
s32 i;
|
||||
s32 statCount = 0;
|
||||
u16 evAmount;
|
||||
u8 temp;
|
||||
|
||||
CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0);
|
||||
|
||||
temp = evSpread;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
if (temp & 1)
|
||||
statCount++;
|
||||
temp >>= 1;
|
||||
}
|
||||
|
||||
evAmount = 510 / statCount;
|
||||
|
||||
temp = 1;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
if (evSpread & temp)
|
||||
SetMonData(mon, MON_DATA_HP_EV + i, &evAmount);
|
||||
temp <<= 1;
|
||||
}
|
||||
|
||||
CalculateMonStats(mon);
|
||||
}
|
||||
|
||||
void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
|
||||
{
|
||||
s32 i;
|
||||
u8 nickname[30];
|
||||
u8 language;
|
||||
u8 value;
|
||||
|
||||
CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
SetMonMoveSlot(mon, src->moves[i], i);
|
||||
|
||||
SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
|
||||
|
||||
StringCopy(nickname, src->nickname);
|
||||
|
||||
if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
|
||||
{
|
||||
language = LANGUAGE_JAPANESE;
|
||||
StripExtCtrlCodes(nickname);
|
||||
}
|
||||
else
|
||||
{
|
||||
language = GAME_LANGUAGE;
|
||||
}
|
||||
|
||||
SetMonData(mon, MON_DATA_LANGUAGE, &language);
|
||||
SetMonData(mon, MON_DATA_NICKNAME, nickname);
|
||||
SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
|
||||
SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
|
||||
SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
|
||||
SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
|
||||
SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
|
||||
SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
|
||||
value = src->altAbility;
|
||||
SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
|
||||
value = src->hpIV;
|
||||
SetMonData(mon, MON_DATA_HP_IV, &value);
|
||||
value = src->attackIV;
|
||||
SetMonData(mon, MON_DATA_ATK_IV, &value);
|
||||
value = src->defenseIV;
|
||||
SetMonData(mon, MON_DATA_DEF_IV, &value);
|
||||
value = src->speedIV;
|
||||
SetMonData(mon, MON_DATA_SPEED_IV, &value);
|
||||
value = src->spAttackIV;
|
||||
SetMonData(mon, MON_DATA_SPATK_IV, &value);
|
||||
value = src->spDefenseIV;
|
||||
SetMonData(mon, MON_DATA_SPDEF_IV, &value);
|
||||
MonRestorePP(mon);
|
||||
CalculateMonStats(mon);
|
||||
}
|
||||
|
||||
u8 BattleFrontierGetOpponentLvl(u8);
|
||||
|
||||
void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50)
|
||||
{
|
||||
s32 i;
|
||||
u8 nickname[30];
|
||||
u8 level;
|
||||
u8 language;
|
||||
u8 value;
|
||||
|
||||
if (gSaveBlock2Ptr->frontierChosenLvl != 0)
|
||||
level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontierChosenLvl);
|
||||
else if (lvl50)
|
||||
level = 50;
|
||||
else
|
||||
level = src->level;
|
||||
|
||||
CreateMon(mon, src->species, level, 0, 1, src->personality, 1, src->otId);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
SetMonMoveSlot(mon, src->moves[i], i);
|
||||
|
||||
SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
|
||||
|
||||
StringCopy(nickname, src->nickname);
|
||||
|
||||
if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
|
||||
{
|
||||
language = LANGUAGE_JAPANESE;
|
||||
StripExtCtrlCodes(nickname);
|
||||
}
|
||||
else
|
||||
{
|
||||
language = GAME_LANGUAGE;
|
||||
}
|
||||
|
||||
SetMonData(mon, MON_DATA_LANGUAGE, &language);
|
||||
SetMonData(mon, MON_DATA_NICKNAME, nickname);
|
||||
SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
|
||||
SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
|
||||
SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
|
||||
SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
|
||||
SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
|
||||
SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
|
||||
value = src->altAbility;
|
||||
SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
|
||||
value = src->hpIV;
|
||||
SetMonData(mon, MON_DATA_HP_IV, &value);
|
||||
value = src->attackIV;
|
||||
SetMonData(mon, MON_DATA_ATK_IV, &value);
|
||||
value = src->defenseIV;
|
||||
SetMonData(mon, MON_DATA_DEF_IV, &value);
|
||||
value = src->speedIV;
|
||||
SetMonData(mon, MON_DATA_SPEED_IV, &value);
|
||||
value = src->spAttackIV;
|
||||
SetMonData(mon, MON_DATA_SPATK_IV, &value);
|
||||
value = src->spDefenseIV;
|
||||
SetMonData(mon, MON_DATA_SPDEF_IV, &value);
|
||||
MonRestorePP(mon);
|
||||
CalculateMonStats(mon);
|
||||
}
|
||||
-1365
File diff suppressed because it is too large
Load Diff
-1749
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,12 @@
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "window.h"
|
||||
#include "event_data.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "menu.h"
|
||||
#include "international_string_util.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "menu_helpers.h"
|
||||
|
||||
struct ContestMove
|
||||
{
|
||||
@@ -36,16 +42,12 @@ struct ContestEffect
|
||||
u8 jam;
|
||||
};
|
||||
|
||||
|
||||
|
||||
extern struct UnkSummaryStruct* gUnknown_0203CF1C;
|
||||
extern struct BgTemplate gUnknown_0861CBB4;
|
||||
extern u8 gUnknown_0203CF20;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern s8 gUnknown_0861CC1C[];
|
||||
extern u8 gUnknown_08329D22[];
|
||||
extern u8 gUnknown_0203CF21;
|
||||
extern u16 gSpecialVar_0x8005;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CC04;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CC10;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CBEC;
|
||||
@@ -67,20 +69,9 @@ extern u8 gUnknown_0861CE7B[];
|
||||
extern struct WindowTemplate gUnknown_0861CCEC;
|
||||
extern struct WindowTemplate gUnknown_0861CD14;
|
||||
|
||||
extern void sub_806F2AC(u8 a, u8 b);
|
||||
void sub_81C488C(u8 a);
|
||||
extern void do_scheduled_bg_tilemap_copies_to_vram(void);
|
||||
extern u8 sub_81221EC();
|
||||
extern u8 sub_81221AC();
|
||||
extern void SetVBlankHBlankCallbacksToNull();
|
||||
extern void ResetVramOamAndBgCntRegs();
|
||||
extern void clear_scheduled_bg_copies_to_vram();
|
||||
extern void ScanlineEffect_Stop();
|
||||
extern void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable);
|
||||
extern void ShowBg(u8 a);
|
||||
extern void SetGpuReg(u8 regOffset, u16 value);
|
||||
extern void schedule_bg_copy_tilemap_to_vram(u8 a);
|
||||
extern void SetBgTilemapBuffer(u8 bg, void *tilemap);
|
||||
extern u8 gUnknown_08D9862C;
|
||||
extern u8 gUnknown_08D98CC8;
|
||||
extern u8 gUnknown_08D987FC;
|
||||
@@ -95,9 +86,6 @@ extern struct CompressedSpritePalette gUnknown_0861D100;
|
||||
extern struct CompressedSpritePalette gUnknown_0861D07C;
|
||||
extern u8 gMoveTypes_Pal;
|
||||
extern u8 gUnknown_08D97D0C;
|
||||
extern void reset_temp_tile_data_buffers();
|
||||
extern void decompress_and_copy_tile_data_to_vram(u8 a, void* tiledata, u8 b, u8 c, u8 d);
|
||||
extern u8 free_temp_tile_data_buffers_if_possible();
|
||||
extern void sub_81C1E20(u8 taskId);
|
||||
extern u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
|
||||
extern u16 SpeciesToPokedexNum(u16 species);
|
||||
@@ -160,11 +148,7 @@ extern u8 gText_ThreeDashes[];
|
||||
extern u8 gUnknown_0861CE97[];
|
||||
extern struct BattleMove gBattleMoves[];
|
||||
|
||||
extern u32 ChangeBgX(u8 bg, u32 value, u8 op);
|
||||
extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
|
||||
extern void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8* colors, s8 speed, u8 *str);
|
||||
extern s32 GetStringCenterAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
|
||||
extern s32 GetStringRightAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
|
||||
extern bool8 sub_81A6BF4();
|
||||
extern bool8 sub_81B9E94();
|
||||
extern void UnkTextUtil_Reset();
|
||||
@@ -1435,7 +1419,7 @@ void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
|
||||
*ppBonusesPtr = localPpBonuses;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -1646,7 +1630,7 @@ void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
|
||||
*ppBonusesPtr = localPpBonuses;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -2057,7 +2041,7 @@ void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
|
||||
Free(alloced);
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -2359,7 +2343,7 @@ void sub_81C2194(u16 *a, u16 b, u8 c)
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C2194(u16 *a, u16 b, u8 c)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -2808,7 +2792,7 @@ u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
|
||||
return r4[a];
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -2853,7 +2837,7 @@ void sub_81C2D68(u8 a)
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C2D68(u8 a)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -3110,7 +3094,7 @@ void sub_81C335C()
|
||||
sub_81C25A4(r4, gText_FiveMarks, r5, 1, 0, 1);
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C335C()
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -3453,7 +3437,7 @@ void sub_81C3B08(u8 a)
|
||||
sub_81C25A4(sp, text, offset, (a<<4), 0, r5);
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_81C3B08(u8 a)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
|
||||
+56
-65
@@ -13,23 +13,15 @@
|
||||
#include "util.h"
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
#define BANK_RECORD_SIZE 664
|
||||
#define BATTLER_RECORD_SIZE 664
|
||||
#define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \
|
||||
| BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
|
||||
| BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
|
||||
| BATTLE_TYPE_RECORDED | BATTLE_TYPE_x4000000 | BATTLE_TYPE_SECRET_BASE \
|
||||
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA))
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_03001278;
|
||||
extern u8 gUnknown_03001279;
|
||||
|
||||
@@ -38,7 +30,7 @@ struct PlayerInfo
|
||||
u32 trainerId;
|
||||
u8 name[PLAYER_NAME_LENGTH];
|
||||
u8 gender;
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u16 language;
|
||||
};
|
||||
|
||||
@@ -58,7 +50,7 @@ struct RecordedBattleSave
|
||||
u8 playersLanguage[MAX_BATTLERS_COUNT];
|
||||
u32 rngSeed;
|
||||
u32 battleFlags;
|
||||
u8 playersBank[MAX_BATTLERS_COUNT];
|
||||
u8 playersBattlers[MAX_BATTLERS_COUNT];
|
||||
u16 opponentA;
|
||||
u16 opponentB;
|
||||
u16 partnerId;
|
||||
@@ -75,13 +67,13 @@ struct RecordedBattleSave
|
||||
u16 field_50E[6];
|
||||
u8 field_51A;
|
||||
u8 field_51B;
|
||||
u8 battleRecord[MAX_BATTLERS_COUNT][BANK_RECORD_SIZE];
|
||||
u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE];
|
||||
u32 checksum;
|
||||
};
|
||||
|
||||
EWRAM_DATA u32 gRecordedBattleRngSeed = 0;
|
||||
EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0;
|
||||
EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BANK_RECORD_SIZE] = {0};
|
||||
EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE] = {0};
|
||||
EWRAM_DATA static u16 sRecordedBytesNo[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
|
||||
EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
|
||||
@@ -108,7 +100,6 @@ EWRAM_DATA static u16 sUnknown_0203CCDC[6] = {0};
|
||||
EWRAM_DATA static u8 sUnknown_0203CCE8 = 0;
|
||||
|
||||
extern u32 sub_81A513C(void);
|
||||
extern void PlayMapChosenOrBattleBGM(bool8);
|
||||
|
||||
// this file's functions
|
||||
static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2);
|
||||
@@ -131,7 +122,7 @@ void sub_8184DA4(u8 arg0)
|
||||
|
||||
if (arg0 == 1)
|
||||
{
|
||||
for (j = 0; j < BANK_RECORD_SIZE; j++)
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] |= 0xFF;
|
||||
}
|
||||
@@ -168,7 +159,7 @@ void sub_8184E58(void)
|
||||
{
|
||||
sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId;
|
||||
sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender;
|
||||
sRecordedBattle_Players[i].bank = gLinkPlayers[i].lp_field_18;
|
||||
sRecordedBattle_Players[i].battlerId = gLinkPlayers[i].lp_field_18;
|
||||
sRecordedBattle_Players[i].language = gLinkPlayers[i].language;
|
||||
|
||||
if (i < linkPlayersCount)
|
||||
@@ -192,7 +183,7 @@ void sub_8184E58(void)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
|
||||
sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender;
|
||||
sRecordedBattle_Players[0].bank = 0;
|
||||
sRecordedBattle_Players[0].battlerId = 0;
|
||||
sRecordedBattle_Players[0].language = gGameLanguage;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
@@ -200,31 +191,31 @@ void sub_8184E58(void)
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_SetBattlerAction(u8 bank, u8 action)
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
|
||||
{
|
||||
if (sRecordedBytesNo[bank] < BANK_RECORD_SIZE && sUnknown_0203C7AC != 2)
|
||||
if (sRecordedBytesNo[battlerId] < BATTLER_RECORD_SIZE && sUnknown_0203C7AC != 2)
|
||||
{
|
||||
sBattleRecords[bank][sRecordedBytesNo[bank]++] = action;
|
||||
sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++] = action;
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_ClearBattlerAction(u8 bank, u8 bytesToClear)
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < bytesToClear; i++)
|
||||
{
|
||||
sRecordedBytesNo[bank]--;
|
||||
sBattleRecords[bank][sRecordedBytesNo[bank]] |= 0xFF;
|
||||
if (sRecordedBytesNo[bank] == 0)
|
||||
sRecordedBytesNo[battlerId]--;
|
||||
sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] |= 0xFF;
|
||||
if (sRecordedBytesNo[battlerId] == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u8 RecordedBattle_GetBattlerAction(u8 bank)
|
||||
u8 RecordedBattle_GetBattlerAction(u8 battlerId)
|
||||
{
|
||||
// trying to read past array or invalid action byte, battle is over
|
||||
if (sRecordedBytesNo[bank] >= BANK_RECORD_SIZE || sBattleRecords[bank][sRecordedBytesNo[bank]] == 0xFF)
|
||||
if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF)
|
||||
{
|
||||
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
|
||||
ResetPaletteFadeControl();
|
||||
@@ -234,7 +225,7 @@ u8 RecordedBattle_GetBattlerAction(u8 bank)
|
||||
}
|
||||
else
|
||||
{
|
||||
return sBattleRecords[bank][sRecordedBytesNo[bank]++];
|
||||
return sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,7 +349,7 @@ u32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
battleSave->playersGender[i] = sRecordedBattle_Players[i].gender;
|
||||
battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language;
|
||||
battleSave->playersBank[i] = sRecordedBattle_Players[i].bank;
|
||||
battleSave->playersBattlers[i] = sRecordedBattle_Players[i].battlerId;
|
||||
battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId;
|
||||
}
|
||||
|
||||
@@ -375,16 +366,16 @@ u32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
switch (sRecordedBattle_Players[0].bank)
|
||||
switch (sRecordedBattle_Players[0].battlerId)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if (!(sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
|
||||
if (!(sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
|
||||
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
if ((sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
|
||||
if ((sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
|
||||
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
|
||||
break;
|
||||
}
|
||||
@@ -484,7 +475,7 @@ u32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
u32 MoveRecordedBattleToSaveData(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
@@ -1349,7 +1340,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
|
||||
}
|
||||
gLinkPlayers[i].gender = src->playersGender[i];
|
||||
gLinkPlayers[i].language = src->playersLanguage[i];
|
||||
gLinkPlayers[i].lp_field_18 = src->playersBank[i];
|
||||
gLinkPlayers[i].lp_field_18 = src->playersBattlers[i];
|
||||
gLinkPlayers[i].trainerId = src->playersTrainerId[i];
|
||||
|
||||
if (var)
|
||||
@@ -1388,7 +1379,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < BANK_RECORD_SIZE; j++)
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] = src->battleRecord[i][j];
|
||||
}
|
||||
@@ -1456,7 +1447,7 @@ static void RecordedBattle_RestoreSavedParties(void)
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetActiveBankLinkPlayerGender(void)
|
||||
u8 GetActiveBattlerLinkPlayerGender(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -1497,7 +1488,7 @@ u8 GetTextSpeedInRecordedBattle(void)
|
||||
return sRecordedBattle_TextSpeed;
|
||||
}
|
||||
|
||||
void RecordedBattle_CopyBankMoves(void)
|
||||
void RecordedBattle_CopyBattlerMoves(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -1518,32 +1509,32 @@ void RecordedBattle_CopyBankMoves(void)
|
||||
|
||||
void sub_818603C(u8 arg0)
|
||||
{
|
||||
s32 bank, j, k;
|
||||
s32 battlerId, j, k;
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
|
||||
return;
|
||||
|
||||
for (bank = 0; bank < gBattlersCount; bank++)
|
||||
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
|
||||
{
|
||||
if (GetBattlerSide(bank) != B_SIDE_OPPONENT) // player's side only
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only
|
||||
{
|
||||
if (arg0 == 1)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
if (gBattleMons[bank].moves[j] != sRecordedBattle_PlayerMonMoves[bank / 2][j])
|
||||
if (gBattleMons[battlerId].moves[j] != sRecordedBattle_PlayerMonMoves[battlerId / 2][j])
|
||||
break;
|
||||
}
|
||||
if (j != 4) // player's mon's move has been changed
|
||||
{
|
||||
RecordedBattle_SetBattlerAction(bank, ACTION_MOVE_CHANGE);
|
||||
RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for (k = 0; k < 4; k++)
|
||||
{
|
||||
if (gBattleMons[bank].moves[j] == sRecordedBattle_PlayerMonMoves[bank / 2][k])
|
||||
if (gBattleMons[battlerId].moves[j] == sRecordedBattle_PlayerMonMoves[battlerId / 2][k])
|
||||
{
|
||||
RecordedBattle_SetBattlerAction(bank, k);
|
||||
RecordedBattle_SetBattlerAction(battlerId, k);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1552,7 +1543,7 @@ void sub_818603C(u8 arg0)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sBattleRecords[bank][sRecordedBytesNo[bank]] == ACTION_MOVE_CHANGE)
|
||||
if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE)
|
||||
{
|
||||
u8 ppBonuses[4];
|
||||
u8 array1[4];
|
||||
@@ -1561,58 +1552,58 @@ void sub_818603C(u8 arg0)
|
||||
u8 array3[8];
|
||||
u8 var;
|
||||
|
||||
RecordedBattle_GetBattlerAction(bank);
|
||||
RecordedBattle_GetBattlerAction(battlerId);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
ppBonuses[j] = ((gBattleMons[bank].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
array1[j] = RecordedBattle_GetBattlerAction(bank);
|
||||
movePp.moves[j] = gBattleMons[bank].moves[array1[j]];
|
||||
movePp.pp[j] = gBattleMons[bank].pp[array1[j]];
|
||||
array1[j] = RecordedBattle_GetBattlerAction(battlerId);
|
||||
movePp.moves[j] = gBattleMons[battlerId].moves[array1[j]];
|
||||
movePp.pp[j] = gBattleMons[battlerId].pp[array1[j]];
|
||||
array3[j] = ppBonuses[array1[j]];
|
||||
array2[j] = (gDisableStructs[bank].unk18_b & gBitTable[j]) >> j;
|
||||
array2[j] = (gDisableStructs[battlerId].unk18_b & gBitTable[j]) >> j;
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
gBattleMons[bank].moves[j] = movePp.moves[j];
|
||||
gBattleMons[bank].pp[j] = movePp.pp[j];
|
||||
gBattleMons[battlerId].moves[j] = movePp.moves[j];
|
||||
gBattleMons[battlerId].pp[j] = movePp.pp[j];
|
||||
}
|
||||
gBattleMons[bank].ppBonuses = 0;
|
||||
gDisableStructs[bank].unk18_b = 0;
|
||||
gBattleMons[battlerId].ppBonuses = 0;
|
||||
gDisableStructs[battlerId].unk18_b = 0;
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
gBattleMons[bank].ppBonuses |= (array3[j]) << (j << 1);
|
||||
gDisableStructs[bank].unk18_b |= (array2[j]) << (j);
|
||||
gBattleMons[battlerId].ppBonuses |= (array3[j]) << (j << 1);
|
||||
gDisableStructs[battlerId].unk18_b |= (array2[j]) << (j);
|
||||
}
|
||||
|
||||
if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED))
|
||||
if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
|
||||
ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_MOVE1 + array1[j], NULL);
|
||||
movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP1 + array1[j], NULL);
|
||||
movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL);
|
||||
movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + array1[j], NULL);
|
||||
array3[j] = ppBonuses[array1[j]];
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP1 + j, &movePp.pp[j]);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + j, &movePp.pp[j]);
|
||||
}
|
||||
var = 0;
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
var |= (array3[j]) << (j << 1);
|
||||
}
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP_BONUSES, &var);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var);
|
||||
}
|
||||
|
||||
gChosenMoveByBattler[bank] = gBattleMons[bank].moves[*(gBattleStruct->chosenMovePositions + bank)];
|
||||
gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ void sub_81700F8(void)
|
||||
imeBackup = REG_IME;
|
||||
REG_IME = 0;
|
||||
RegisterRamReset(0x00000001);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, 0x80);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
|
||||
REG_IME = imeBackup;
|
||||
gMain.inBattle = FALSE;
|
||||
SetSaveBlocksPointers(sub_815355C());
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "sprite.h"
|
||||
#include "constants/species.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
@@ -21,28 +22,11 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern u16 gBattle_BG3_Y;
|
||||
extern u8 gReservedSpritePaletteCount;
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
|
||||
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
|
||||
|
||||
extern void ScanlineEffect_Clear(void);
|
||||
extern void sub_8035658(void);
|
||||
extern bool8 IsDoubleBattle(void);
|
||||
extern u8 GetSubstituteSpriteDefault_Y(u8 bank);
|
||||
extern u8 GetBattlerSpriteDefault_Y(u8 bank);
|
||||
extern u8 sub_80A82E4(u8 bank);
|
||||
extern void sub_806A068(u16 species, u8 bankIdentity);
|
||||
extern void sub_806A12C(u16 backPicId, u8 bankIdentity);
|
||||
extern u8 GetBattlerSpriteCoord(u8 bank, u8 caseId);
|
||||
|
||||
// this file's functions
|
||||
static void CB2_ReshowBattleScreenAfterMenu(void);
|
||||
@@ -175,12 +159,12 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
|
||||
SetBattlerShadowSpriteCallback(opponentBank, species);
|
||||
}
|
||||
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBankInMenu], 0);
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
|
||||
|
||||
if (gLinkVSyncDisabled != 0 && gReceivedRemoteLinkPlayers != 0)
|
||||
if (gWirelessCommType != 0 && gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
sub_800E0E8();
|
||||
sub_800DFB4(0, 0);
|
||||
CreateWirelessStatusIndicatorSprite(0, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
|
||||
// Static type declarations
|
||||
|
||||
// Static RAM declarations
|
||||
IWRAM_DATA u32 gUnknown_03000DA0;
|
||||
IWRAM_DATA u32 gUnknown_03000DA4;
|
||||
IWRAM_DATA void *gUnknown_03000DA8;
|
||||
IWRAM_DATA void *gUnknown_03000DAC;
|
||||
IWRAM_DATA bool32 gUnknown_03000DB0;
|
||||
|
||||
// Static ROM declarations
|
||||
|
||||
// .rodata
|
||||
|
||||
// .text
|
||||
+2
-2
@@ -108,7 +108,7 @@ void SafariZoneRetirePrompt(void)
|
||||
void CB2_EndSafariBattle(void)
|
||||
{
|
||||
sSafariZoneFleedMons += gBattleResults.field_1F;
|
||||
if (gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
|
||||
if (gBattleOutcome == B_OUTCOME_CAUGHT)
|
||||
sSafariZoneCaughtMons++;
|
||||
if (gNumSafariBalls != 0)
|
||||
{
|
||||
@@ -121,7 +121,7 @@ void CB2_EndSafariBattle(void)
|
||||
gFieldCallback = sub_80AF6F0;
|
||||
SetMainCallback2(c2_load_new_map);
|
||||
}
|
||||
else if (gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
|
||||
else if (gBattleOutcome == B_OUTCOME_CAUGHT)
|
||||
{
|
||||
ScriptContext1_SetupScript(EventScript_2A4B9B);
|
||||
ScriptContext1_Stop();
|
||||
|
||||
+1
-9
@@ -31,7 +31,6 @@
|
||||
#include "mystery_event_script.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_storage_system.h"
|
||||
#include "random.h"
|
||||
#include "overworld.h"
|
||||
@@ -63,13 +62,6 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0;
|
||||
static EWRAM_DATA u16 sMovingNpcMapId = 0;
|
||||
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
|
||||
|
||||
extern u16 gSpecialVar_0x8000;
|
||||
extern u16 gSpecialVar_0x8001;
|
||||
extern u16 gSpecialVar_0x8002;
|
||||
extern u16 gSpecialVar_0x8004;
|
||||
|
||||
extern u16 gSpecialVar_Result;
|
||||
|
||||
extern u16 gSpecialVar_ContestCategory;
|
||||
|
||||
IWRAM_DATA u8 gUnknown_03000F30;
|
||||
@@ -1536,7 +1528,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
|
||||
CopyWindowToVram(gUnknown_03000F30, 3);
|
||||
return FALSE;
|
||||
}*/
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "international_string_util.h"
|
||||
#include "event_data.h"
|
||||
#include "battle.h"
|
||||
#include "battle_setup.h"
|
||||
#include "rom6.h"
|
||||
#include "decoration.h"
|
||||
#include "link.h"
|
||||
|
||||
+3
-4
@@ -379,7 +379,7 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
|
||||
*(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
@@ -875,7 +875,7 @@ void DecompressGlyphTile(const u16 *src, u16 *dest)
|
||||
*(dest) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] >> 8]];
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void DecompressGlyphTile(const u16 *src, u16 *dest)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
@@ -1056,7 +1056,7 @@ u8 GetLastTextColor(u8 colorType)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void CopyGlyphToWindow(struct TextPrinter *x)
|
||||
{
|
||||
asm("push {r4-r7,lr}\n\
|
||||
@@ -2285,7 +2285,6 @@ u16 RenderText(struct TextPrinter *textPrinter)
|
||||
else
|
||||
textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80];
|
||||
}
|
||||
|
||||
return 0;
|
||||
case 1: // _08005C78
|
||||
if (TextPrinterWait(textPrinter))
|
||||
|
||||
@@ -1208,7 +1208,7 @@ void PutPokemonTodayFailedOnTheAir(void)
|
||||
{
|
||||
ct = 0xFF;
|
||||
}
|
||||
if (ct > 2 && (gBattleOutcome == B_OUTCOME_POKE_FLED || gBattleOutcome == B_OUTCOME_WON))
|
||||
if (ct > 2 && (gBattleOutcome == B_OUTCOME_MON_FLED || gBattleOutcome == B_OUTCOME_WON))
|
||||
{
|
||||
sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_FAILED, FALSE) != TRUE)
|
||||
@@ -2154,7 +2154,7 @@ void sub_80EDE98(TVShow *show)
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
ASM_DIRECT
|
||||
void sub_80EDE98(TVShow *show)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
@@ -2406,7 +2406,7 @@ void sub_80EE184(void)
|
||||
case B_OUTCOME_DREW:
|
||||
show->breakingNews.kind = TVSHOW_OFF_AIR;
|
||||
return;
|
||||
case B_OUTCOME_CAUGHT_POKE:
|
||||
case B_OUTCOME_CAUGHT:
|
||||
show->breakingNews.outcome = 0;
|
||||
break;
|
||||
case B_OUTCOME_WON:
|
||||
@@ -2417,8 +2417,8 @@ void sub_80EE184(void)
|
||||
case B_OUTCOME_NO_SAFARI_BALLS:
|
||||
show->breakingNews.outcome = 2;
|
||||
break;
|
||||
case B_OUTCOME_POKE_FLED:
|
||||
case B_OUTCOME_POKE_TELEPORTED:
|
||||
case B_OUTCOME_MON_FLED:
|
||||
case B_OUTCOME_MON_TELEPORTED:
|
||||
show->breakingNews.outcome = 3;
|
||||
break;
|
||||
}
|
||||
@@ -4110,7 +4110,7 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked)) void sub_80F0708(void)
|
||||
ASM_DIRECT void sub_80F0708(void)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r9\n"
|
||||
|
||||
+1
-1
@@ -230,7 +230,7 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
|
||||
}
|
||||
|
||||
#else
|
||||
__attribute__((naked)) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
|
||||
ASM_DIRECT void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
|
||||
{
|
||||
asm("\n\
|
||||
.syntax unified\n\
|
||||
|
||||
+5
-2
@@ -2,8 +2,11 @@
|
||||
#include "window.h"
|
||||
#include "malloc.h"
|
||||
|
||||
extern u8 gUnknown_03002F60;
|
||||
extern void* gUnknown_03002F70[];
|
||||
u32 filler_03002F58;
|
||||
u32 filler_03002F5C;
|
||||
u8 gUnknown_03002F60;
|
||||
u32 filler_03002F64;
|
||||
void *gUnknown_03002F70[4];
|
||||
extern u32 gUnneededFireRedVariable;
|
||||
|
||||
#define WINDOWS_MAX 32
|
||||
|
||||
Reference in New Issue
Block a user