Skip to content

Commit

Permalink
Moved sprite Ids to the battlestruct
Browse files Browse the repository at this point in the history
  • Loading branch information
Hedara committed Jan 17, 2025
1 parent 1e48e1e commit a30d453
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 54 deletions.
1 change: 1 addition & 0 deletions include/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,7 @@ struct BattleStruct
u8 padding:7;
u8 usedEjectItem;
u8 usedMicleBerry;
u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT];
};

// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
Expand Down
3 changes: 1 addition & 2 deletions include/config/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,6 @@
#define B_SHOW_TYPES SHOW_TYPES_NEVER // When defined as SHOW_TYPES_ALWAYS, after selecting "Fight" in battle, the types of all Pokemon are revealed. Whe defined as SHOW_TYPES_OWN, types are only revealed if the player owns the mon in question.

// Pokémon battle sprite settings
#define B_ENEMY_MON_SHADOW_STYLE GEN_3 // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them.
// Currently Gen4+ shadows don't properly work with Trainerslides
#define B_ENEMY_MON_SHADOW_STYLE GEN_LATEST // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them.

#endif // GUARD_CONFIG_BATTLE_H
103 changes: 51 additions & 52 deletions src/battle_controllers.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include "constants/abilities.h"
#include "constants/songs.h"

static EWRAM_DATA u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT];
static EWRAM_DATA u8 sLinkSendTaskId = 0;
static EWRAM_DATA u8 sLinkReceiveTaskId = 0;
EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read
Expand Down Expand Up @@ -2259,12 +2258,12 @@ static void Controller_DoMoveAnimation(u32 battler)

static void Controller_HandleTrainerSlideBack(u32 battler)
{
if (gSprites[trainerSlideSpriteIds[battler]].callback == SpriteCallbackDummy)
if (gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback == SpriteCallbackDummy)
{
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
FreeTrainerFrontPicPalette(gSprites[trainerSlideSpriteIds[battler]].oam.affineParam);
FreeSpriteOamMatrix(&gSprites[trainerSlideSpriteIds[battler]]);
DestroySprite(&gSprites[trainerSlideSpriteIds[battler]]);
FreeTrainerFrontPicPalette(gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineParam);
FreeSpriteOamMatrix(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]);
DestroySprite(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]);
BattleControllerComplete(battler);
}
}
Expand Down Expand Up @@ -2306,7 +2305,7 @@ static void Controller_WaitForStatusAnimation(u32 battler)

static void Controller_WaitForTrainerPic(u32 battler)
{
if (gSprites[trainerSlideSpriteIds[battler]].callback == SpriteCallbackDummy)
if (gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback == SpriteCallbackDummy)
BattleControllerComplete(battler);
}

Expand Down Expand Up @@ -2499,15 +2498,15 @@ void BtlController_HandleDrawTrainerPic(u32 battler, u32 trainerPicId, bool32 is
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(battler));
if (subpriority == -1)
subpriority = GetBattlerSpriteSubpriority(battler);
trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
yPos,
subpriority);

gSprites[trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[trainerSlideSpriteIds[battler]].x2 = -DISPLAY_WIDTH;
gSprites[trainerSlideSpriteIds[battler]].sSpeedX = 2;
gSprites[trainerSlideSpriteIds[battler]].oam.affineParam = trainerPicId;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = 2;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineParam = trainerPicId;
}
else // Player's side
{
Expand All @@ -2517,36 +2516,36 @@ void BtlController_HandleDrawTrainerPic(u32 battler, u32 trainerPicId, bool32 is
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(battler));
if (subpriority == -1)
subpriority = GetBattlerSpriteSubpriority(battler);
trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
yPos,
subpriority);

gSprites[trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[trainerSlideSpriteIds[battler]].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[trainerSlideSpriteIds[battler]].hFlip = 1;
gSprites[trainerSlideSpriteIds[battler]].y2 = 48;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].hFlip = 1;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].y2 = 48;
}
else
{
DecompressTrainerBackPic(trainerPicId, battler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler));
if (subpriority == -1)
subpriority = GetBattlerSpriteSubpriority(battler);
trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
yPos,
subpriority);

gSprites[trainerSlideSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = battler;
}
gSprites[trainerSlideSpriteIds[battler]].x2 = DISPLAY_WIDTH;
gSprites[trainerSlideSpriteIds[battler]].sSpeedX = -2;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = DISPLAY_WIDTH;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = -2;
}
if (B_FAST_INTRO_NO_SLIDE || gTestRunnerHeadless)
gSprites[trainerSlideSpriteIds[battler]].callback = SpriteCB_TrainerSpawn;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback = SpriteCB_TrainerSpawn;
else
gSprites[trainerSlideSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn;

gBattlerControllerFuncs[battler] = Controller_WaitForTrainerPic;
}
Expand All @@ -2557,26 +2556,26 @@ void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId)
{
DecompressTrainerBackPic(trainerPicId, battler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler));
trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80,
30);
gSprites[trainerSlideSpriteIds[battler]].oam.paletteNum = battler;
gSprites[trainerSlideSpriteIds[battler]].x2 = -96;
gSprites[trainerSlideSpriteIds[battler]].sSpeedX = 2;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = -96;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = 2;
}
else
{
DecompressTrainerFrontPic(trainerPicId, battler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(battler));
trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 176, 40, 0);
gSprites[trainerSlideSpriteIds[battler]].oam.affineParam = trainerPicId;
gSprites[trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[trainerSlideSpriteIds[battler]].x2 = 96;
gSprites[trainerSlideSpriteIds[battler]].x += 32;
gSprites[trainerSlideSpriteIds[battler]].sSpeedX = -2;
gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 176, 40, 0);
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineParam = trainerPicId;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = 96;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x += 32;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = -2;
}
gSprites[trainerSlideSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn;

gBattlerControllerFuncs[battler] = Controller_WaitForTrainerPic;
}
Expand All @@ -2587,14 +2586,14 @@ void BtlController_HandleTrainerSlideBack(u32 battler, s16 data0, bool32 startAn
{
u32 side = GetBattlerSide(battler);

SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[trainerSlideSpriteIds[battler]]);
gSprites[trainerSlideSpriteIds[battler]].data[0] = data0;
gSprites[trainerSlideSpriteIds[battler]].data[2] = (side == B_SIDE_PLAYER) ? -40 : 280;
gSprites[trainerSlideSpriteIds[battler]].data[4] = gSprites[trainerSlideSpriteIds[battler]].y;
gSprites[trainerSlideSpriteIds[battler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[trainerSlideSpriteIds[battler]], SpriteCallbackDummy);
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]);
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[0] = data0;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[2] = (side == B_SIDE_PLAYER) ? -40 : 280;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[4] = gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].y;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]], SpriteCallbackDummy);
if (startAnim)
StartSpriteAnim(&gSprites[trainerSlideSpriteIds[battler]], 1);
StartSpriteAnim(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]], 1);
gBattlerControllerFuncs[battler] = Controller_HandleTrainerSlideBack;
}

Expand Down Expand Up @@ -2888,34 +2887,34 @@ void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, c
u8 paletteNum, taskId;
u32 side = GetBattlerSide(battler);

SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[trainerSlideSpriteIds[battler]]);
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]);
if (side == B_SIDE_PLAYER)
{
gSprites[trainerSlideSpriteIds[battler]].data[0] = 50;
gSprites[trainerSlideSpriteIds[battler]].data[2] = -40;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[0] = 50;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[2] = -40;
}
else
{
gSprites[trainerSlideSpriteIds[battler]].data[0] = 35;
gSprites[trainerSlideSpriteIds[battler]].data[2] = 280;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[0] = 35;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[2] = 280;
}

gSprites[trainerSlideSpriteIds[battler]].data[4] = gSprites[trainerSlideSpriteIds[battler]].y;
gSprites[trainerSlideSpriteIds[battler]].callback = StartAnimLinearTranslation;
gSprites[trainerSlideSpriteIds[battler]].sBattlerId = battler;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].data[4] = gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].y;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback = StartAnimLinearTranslation;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sBattlerId = battler;

if (side == B_SIDE_PLAYER)
{
StoreSpriteCallbackInData6(&gSprites[trainerSlideSpriteIds[battler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[trainerSlideSpriteIds[battler]], ShouldDoSlideInAnim() ? 2 : 1);
StoreSpriteCallbackInData6(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]], ShouldDoSlideInAnim() ? 2 : 1);

paletteNum = AllocSpritePalette(tagTrainerPal);
LoadCompressedPalette(trainerPal, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP);
gSprites[trainerSlideSpriteIds[battler]].oam.paletteNum = paletteNum;
gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = paletteNum;
}
else
{
StoreSpriteCallbackInData6(&gSprites[trainerSlideSpriteIds[battler]], SpriteCB_FreeOpponentSprite);
StoreSpriteCallbackInData6(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]], SpriteCB_FreeOpponentSprite);
}

taskId = CreateTask(Task_StartSendOutAnim, 5);
Expand Down

0 comments on commit a30d453

Please sign in to comment.