summaryrefslogtreecommitdiff
path: root/src/battle_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_main.c')
-rw-r--r--src/battle_main.c158
1 files changed, 103 insertions, 55 deletions
diff --git a/src/battle_main.c b/src/battle_main.c
index 42f204508..df1828d18 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -17,6 +17,7 @@
#include "dma3.h"
#include "event_data.h"
#include "evolution_scene.h"
+#include "graphics.h"
#include "gpu_regs.h"
#include "international_string_util.h"
#include "item.h"
@@ -39,6 +40,7 @@
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
#include "trig.h"
@@ -58,9 +60,7 @@
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
-extern u8 gUnknown_0203CF00[];
-extern const u16 gBattleTextboxPalette[];
extern const struct BgTemplate gBattleBgTemplates[];
extern const struct WindowTemplate *const gBattleWindowTemplates[];
extern const u8 *const gBattleScriptsForMoveEffects[];
@@ -68,25 +68,9 @@ extern const u8 *const gBattlescriptsForBallThrow[];
extern const u8 *const gBattlescriptsForRunningByItem[];
extern const u8 *const gBattlescriptsForUsingItem[];
extern const u8 *const gBattlescriptsForSafariActions[];
-extern const struct ScanlineEffectParams gBattleIntroSlideScanlineEffectParams;
-
-// strings
-extern const u8 gText_LinkStandby3[];
-extern const u8 gText_BattleRecordCouldntBeSaved[];
-extern const u8 gText_ShedinjaJapaneseName[];
-extern const u8 gText_Poison[];
-extern const u8 gText_Sleep[];
-extern const u8 gText_Paralysis[];
-extern const u8 gText_Burn[];
-extern const u8 gText_Ice[];
-extern const u8 gText_Confusion[];
-extern const u8 gText_Love[];
// functions
-extern void sub_81B9150(void);
extern void sub_80B3AF8(u8 taskId); // cable club
-extern void sub_81B8FB0(u8, u8); // party menu
-extern u8 pokemon_order_func(u8); // party menu
// this file's functions
static void CB2_InitBattleInternal(void);
@@ -104,9 +88,9 @@ static void sub_8038F34(void);
static void sub_80392A8(void);
static void sub_803937C(void);
static void sub_803939C(void);
-static void sub_803980C(struct Sprite *sprite);
-static void sub_8039838(struct Sprite *sprite);
-static void sub_8039894(struct Sprite *sprite);
+static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite);
+static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite);
+static void SpriteCb_WildMonAnimate(struct Sprite *sprite);
static void sub_80398D0(struct Sprite *sprite);
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
static void sub_8039AF4(struct Sprite *sprite);
@@ -283,6 +267,70 @@ u8 gNumberOfMovesToChoose;
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
// rom const data
+static const struct ScanlineEffectParams sIntroScanlineParams16Bit =
+{
+ (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1
+};
+
+// unused
+static const struct ScanlineEffectParams sIntroScanlineParams32Bit =
+{
+ (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_32BIT, 1
+};
+
+const struct SpriteTemplate gUnknown_0831AC88 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8038528,
+};
+
+static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin
+
+const struct OamData gOamData_831ACA8 =
+{
+ .y = 0,
+ .affineMode = 1,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+const struct OamData gOamData_831ACB0 =
+{
+ .y = 0,
+ .affineMode = 1,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 2,
+ .affineParam = 0
+};
+
+// Unknown and unused data. Feel free to remove.
+static const u16 gUnknown_0831ACB8[] = {0, 5, 0xfffe, 0};
+static const u16 *const gUnknown_0831ACC0 = gUnknown_0831ACB8;
+static const u16 gUnknown_0831ACC4[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0};
+static const u16 *const gUnknown_0831ACDC = gUnknown_0831ACC4;
+
static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0};
// format: attacking type, defending type, damage multiplier
@@ -620,7 +668,7 @@ static void CB2_InitBattleInternal(void)
gScanlineEffectRegBuffers[1][i] = 0xFF10;
}
- ScanlineEffect_SetParams(gBattleIntroSlideScanlineEffectParams);
+ ScanlineEffect_SetParams(sIntroScanlineParams16Bit);
}
ResetPaletteFade();
@@ -938,7 +986,7 @@ static void CB2_HandleStartBattle(void)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
@@ -987,7 +1035,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1002,7 +1050,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 7:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1017,7 +1065,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 11:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1059,7 +1107,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 16:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1146,7 +1194,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
GetBattleTowerTrainerLanguage(&language, gTrainerBattleOpponent_B);
gLinkPlayers[3].language = language;
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
@@ -1186,7 +1234,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1210,7 +1258,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 5:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1234,7 +1282,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 7:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gEnemyParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1252,7 +1300,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 9:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gEnemyParty + 2, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1270,7 +1318,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 11:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gEnemyParty + 4, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1312,7 +1360,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 14:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1392,7 +1440,7 @@ static void CB2_PreInitMultiBattle(void)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- if (gReceivedRemoteLinkPlayers != 0 && sub_800A520())
+ if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished())
{
gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
sub_80379F8(0);
@@ -1430,7 +1478,7 @@ static void CB2_PreInitMultiBattle(void)
}
break;
case 2:
- if (sub_800A520() && !gPaletteFade.active)
+ if (IsLinkTaskFinished() && !gPaletteFade.active)
{
gBattleCommunication[MULTIUSE_STATE]++;
if (gWirelessCommType)
@@ -1533,7 +1581,7 @@ static void CB2_HandleStartMultiBattle(void)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
@@ -1595,7 +1643,7 @@ static void CB2_HandleStartMultiBattle(void)
break;
// fall through
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1658,7 +1706,7 @@ static void CB2_HandleStartMultiBattle(void)
}
break;
case 5:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1754,7 +1802,7 @@ static void CB2_HandleStartMultiBattle(void)
}
break;
case 8:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
u32* ptr = (u32*)(&gBattleStruct->field_180);
ptr[0] = gBattleTypeFlags;
@@ -1957,7 +2005,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
fixedIV = partyData[i].iv * 31 / 255;
CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0);
- for (j = 0; j < 4; j++)
+ for (j = 0; j < MAX_MON_MOVES; j++)
{
SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]);
SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
@@ -1991,7 +2039,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
- for (j = 0; j < 4; j++)
+ for (j = 0; j < MAX_MON_MOVES; j++)
{
SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]);
SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
@@ -2313,7 +2361,7 @@ static void sub_8038F34(void)
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 6:
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
sub_800ADF8();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
@@ -2323,7 +2371,7 @@ static void sub_8038F34(void)
case 7:
if (!IsTextPrinterActive(0))
{
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2498,7 +2546,7 @@ static void sub_803939C(void)
}
break;
case 6:
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
if (gMain.field_439_x4)
@@ -2548,7 +2596,7 @@ static void sub_803939C(void)
}
break;
case 11:
- if (sub_800A520() == TRUE && !IsTextPrinterActive(0) && --gBattleCommunication[1] == 0)
+ if (IsLinkTaskFinished() == TRUE && !IsTextPrinterActive(0) && --gBattleCommunication[1] == 0)
{
if (gMain.field_439_x4)
{
@@ -2564,7 +2612,7 @@ static void sub_803939C(void)
{
if (gMain.field_439_x4)
{
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattleCommunication[1] = 0x20;
@@ -2592,7 +2640,7 @@ static void TryCorrectShedinjaLanguage(struct Pokemon *mon)
&& GetMonData(mon, MON_DATA_LANGUAGE) != language)
{
GetMonData(mon, MON_DATA_NICKNAME, nickname);
- if (StringCompareWithoutExtCtrlCodes(nickname, gText_ShedinjaJapaneseName) == 0)
+ if (StringCompareWithoutExtCtrlCodes(nickname, sText_ShedinjaJpnName) == 0)
SetMonData(mon, MON_DATA_LANGUAGE, &language);
}
}
@@ -2605,38 +2653,38 @@ u32 sub_80397C4(u32 setId, u32 tableId)
#define sBattler data[0]
#define sSpeciesId data[2]
-void oac_poke_opponent(struct Sprite *sprite)
+void SpriteCb_WildMon(struct Sprite *sprite)
{
- sprite->callback = sub_803980C;
+ sprite->callback = SpriteCb_MoveWildMonToRight;
StartSpriteAnimIfDifferent(sprite, 0);
BeginNormalPaletteFade(0x20000, 0, 10, 10, RGB(8, 8, 8));
}
-static void sub_803980C(struct Sprite *sprite)
+static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite)
{
if ((gIntroSlideFlags & 1) == 0)
{
sprite->pos2.x += 2;
if (sprite->pos2.x == 0)
{
- sprite->callback = sub_8039838;
+ sprite->callback = SpriteCb_WildMonShowHealthbox;
}
}
}
-static void sub_8039838(struct Sprite *sprite)
+static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite)
{
if (sprite->animEnded)
{
sub_8076918(sprite->sBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]);
- sprite->callback = sub_8039894;
+ sprite->callback = SpriteCb_WildMonAnimate;
StartSpriteAnimIfDifferent(sprite, 0);
BeginNormalPaletteFade(0x20000, 0, 10, 0, RGB(8, 8, 8));
}
}
-static void sub_8039894(struct Sprite *sprite)
+static void SpriteCb_WildMonAnimate(struct Sprite *sprite)
{
if (!gPaletteFade.active)
{