Merge pull request #532 from AsparagusEduardo/pokefirered_pokeemeraldSync3

Sync src/battle_util.c with pokeemerald
This commit is contained in:
GriffinR
2022-08-17 11:29:51 -04:00
committed by GitHub
22 changed files with 1433 additions and 1249 deletions
+9 -16
View File
@@ -9,13 +9,6 @@
#include "util.h"
#include "constants/battle_anim.h"
#define GET_UNOWN_LETTER(personality) (( \
(((personality & 0x03000000) >> 24) << 6) \
| (((personality & 0x00030000) >> 16) << 4) \
| (((personality & 0x00000300) >> 8) << 2) \
| (((personality & 0x00000003) >> 0) << 0) \
) % 28)
#define IS_DOUBLE_BATTLE() (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3);
@@ -811,8 +804,8 @@ bool8 IsDoubleBattle(void)
void GetBattleAnimBg1Data(struct BattleAnimBgData *animBgData)
{
animBgData->bgTiles = gBattleAnimMons_BgTilesBuffer;
animBgData->bgTilemap = (u16 *)gBattleAnimMons_BgTilemapBuffer;
animBgData->bgTiles = gBattleAnimBgTileBuffer;
animBgData->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
animBgData->paletteId = 8;
animBgData->bgId = 1;
animBgData->tilesOffset = 0x200;
@@ -827,8 +820,8 @@ void GetBattleAnimBgData(struct BattleAnimBgData *animBgData, u32 bgId)
}
else
{
animBgData->bgTiles = gBattleAnimMons_BgTilesBuffer;
animBgData->bgTilemap = (u16 *)gBattleAnimMons_BgTilemapBuffer;
animBgData->bgTiles = gBattleAnimBgTileBuffer;
animBgData->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
animBgData->paletteId = 9;
animBgData->bgId = 2;
animBgData->tilesOffset = 0x300;
@@ -838,8 +831,8 @@ void GetBattleAnimBgData(struct BattleAnimBgData *animBgData, u32 bgId)
void GetBattleAnimBgDataByPriorityRank(struct BattleAnimBgData *animBgData, u8 unused)
{
animBgData->bgTiles = gBattleAnimMons_BgTilesBuffer;
animBgData->bgTilemap = (u16 *)gBattleAnimMons_BgTilemapBuffer;
animBgData->bgTiles = gBattleAnimBgTileBuffer;
animBgData->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
{
animBgData->paletteId = 8;
@@ -869,9 +862,9 @@ void InitBattleAnimBg(u32 bgId)
void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset)
{
CpuFill32(0, gBattleAnimMons_BgTilesBuffer, 0x2000);
LZDecompressWram(src, gBattleAnimMons_BgTilesBuffer);
LoadBgTiles(bgId, gBattleAnimMons_BgTilesBuffer, 0x2000, tilesOffset);
CpuFill32(0, gBattleAnimBgTileBuffer, 0x2000);
LZDecompressWram(src, gBattleAnimBgTileBuffer);
LoadBgTiles(bgId, gBattleAnimBgTileBuffer, 0x2000, tilesOffset);
}
void InitAnimBgTilemapBuffer(u32 bgId, const void *src)
+7 -7
View File
@@ -337,7 +337,7 @@ static void HandleInputChooseTarget(void)
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
PlayerBufferExecCompleted();
@@ -345,7 +345,7 @@ static void HandleInputChooseTarget(void)
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
@@ -354,7 +354,7 @@ static void HandleInputChooseTarget(void)
else if (JOY_NEW(DPAD_LEFT | DPAD_UP))
{
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
do
{
@@ -389,12 +389,12 @@ static void HandleInputChooseTarget(void)
i = 0;
}
while (i == 0);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
}
else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN))
{
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
do
{
@@ -429,7 +429,7 @@ static void HandleInputChooseTarget(void)
i = 0;
}
while (i == 0);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
}
}
@@ -496,7 +496,7 @@ void HandleInputChooseMove(void)
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
else
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
}
}
else if (JOY_NEW(B_BUTTON))
+3 -3
View File
@@ -1100,13 +1100,13 @@ void BtlController_EmitIntroTrainerBallThrow(u8 bufferId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 param)
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 flags)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
sBattleBuffersTransferData[1] = param & 0x7F;
sBattleBuffersTransferData[2] = (param & 0x80) >> 7;
sBattleBuffersTransferData[1] = flags & ~PARTY_SUMM_SKIP_DRAW_DELAY; // If true, skip player side
sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); ++i)
sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus));
+1 -1
View File
@@ -140,7 +140,7 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite)
gSprites[spriteId].animPaused = 0;
else if (gSprites[spriteId].animEnded)
{
gSprites[spriteId].callback = SpriteCB_SetToDummy3;
gSprites[spriteId].callback = SetIdleSpriteCallback;
StartSpriteAffineAnim(&gSprites[spriteId], 0);
sprite->callback = SpriteCallbackDummy;
}
+14 -7
View File
@@ -1137,8 +1137,9 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg
if (partyInfo[i].hp == HP_EMPTY_SLOT)
{
// empty slot or an egg
gSprites[ballIconSpritesIds[i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[i]].data[7] = 1;
}
@@ -1153,17 +1154,20 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
}
else
{
if (i >= nValidMons) // empty slot or an egg
if (i >= nValidMons)
{
// empty slot or an egg
gSprites[ballIconSpritesIds[i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[i]].data[7] = 1;
}
else if (partyInfo[i].hp == 0) // fainted mon
else if (partyInfo[i].hp == 0)
{
// fainted mon
gSprites[ballIconSpritesIds[i]].oam.tileNum += 3;
}
else if (partyInfo[i].status != 0) // mon with major status
else if (partyInfo[i].status != 0)
{
// mon with major status
gSprites[ballIconSpritesIds[i]].oam.tileNum += 2;
}
}
@@ -1175,17 +1179,20 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg
if (partyInfo[i].hp == HP_EMPTY_SLOT)
{
// empty slot or an egg
gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[5 - i]].data[7] = 1;
}
else if (partyInfo[i].hp == 0) // fainted mon
else if (partyInfo[i].hp == 0)
{
// fainted mon
gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3;
}
else if (partyInfo[i].status != 0) // mon with major status
else if (partyInfo[i].status != 0)
{
// mon with major status
gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 2;
}
}
+668 -571
View File
File diff suppressed because it is too large Load Diff
+662 -608
View File
File diff suppressed because it is too large Load Diff
+22 -10
View File
@@ -2,8 +2,8 @@
#include "bg.h"
#include "battle.h"
#include "battle_anim.h"
#include "pokemon.h"
#include "malloc.h"
#include "pokemon.h"
#include "trainer_tower.h"
void AllocateBattleResources(void)
@@ -14,10 +14,12 @@ void AllocateBattleResources(void)
{
s32 i;
for (i = 0; i < 4; ++i)
for (i = 0; i < 4; i++)
gPokedudeBattlerStates[i] = AllocZeroed(sizeof(struct PokedudeBattlerState));
}
gBattleStruct = AllocZeroed(sizeof(*gBattleStruct));
gBattleResources = AllocZeroed(sizeof(*gBattleResources));
gBattleResources->secretBase = AllocZeroed(sizeof(*gBattleResources->secretBase));
gBattleResources->flags = AllocZeroed(sizeof(*gBattleResources->flags));
@@ -27,12 +29,15 @@ void AllocateBattleResources(void)
gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack));
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
gBattleAnimMons_BgTilesBuffer = AllocZeroed(0x2000);
gBattleAnimMons_BgTilemapBuffer = AllocZeroed(0x1000);
SetBgTilemapBuffer(1, gBattleAnimMons_BgTilemapBuffer);
SetBgTilemapBuffer(2, gBattleAnimMons_BgTilemapBuffer);
gBattleAnimBgTileBuffer = AllocZeroed(0x2000);
gBattleAnimBgTilemapBuffer = AllocZeroed(0x1000);
SetBgTilemapBuffer(1, gBattleAnimBgTilemapBuffer);
SetBgTilemapBuffer(2, gBattleAnimBgTilemapBuffer);
}
void FreeBattleResources(void)
@@ -43,7 +48,7 @@ void FreeBattleResources(void)
{
s32 i;
for (i = 0; i < 4; ++i)
for (i = 0; i < 4; i++)
{
FREE_AND_SET_NULL(gPokedudeBattlerStates[i]);
}
@@ -51,6 +56,7 @@ void FreeBattleResources(void)
if (gBattleResources != NULL)
{
FREE_AND_SET_NULL(gBattleStruct);
FREE_AND_SET_NULL(gBattleResources->secretBase);
FREE_AND_SET_NULL(gBattleResources->flags);
FREE_AND_SET_NULL(gBattleResources->battleScriptsStack);
@@ -60,21 +66,26 @@ void FreeBattleResources(void)
FREE_AND_SET_NULL(gBattleResources->battleHistory);
FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack);
FREE_AND_SET_NULL(gBattleResources);
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
FREE_AND_SET_NULL(gLinkBattleRecvBuffer);
FREE_AND_SET_NULL(gBattleAnimMons_BgTilesBuffer);
FREE_AND_SET_NULL(gBattleAnimMons_BgTilemapBuffer);
FREE_AND_SET_NULL(gBattleAnimBgTileBuffer);
FREE_AND_SET_NULL(gBattleAnimBgTilemapBuffer);
}
}
void AdjustFriendshipOnBattleFaint(u8 battlerId)
{
u8 opposingBattlerId, opposingBattlerId2;
u8 opposingBattlerId;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u8 opposingBattlerId2;
opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
opposingBattlerId2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
if (gBattleMons[opposingBattlerId2].level > gBattleMons[opposingBattlerId].level)
opposingBattlerId = opposingBattlerId2;
}
@@ -82,6 +93,7 @@ void AdjustFriendshipOnBattleFaint(u8 battlerId)
{
opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level)
{
if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29)
+5 -3
View File
@@ -5,6 +5,8 @@
#include "constants/items.h"
#include "pokemon_icon.h"
#define UNOWN_OFFSET 30000
void ClearMailData(void)
{
u8 i;
@@ -73,7 +75,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
u16 SpeciesToMailSpecies(u16 species, u32 personality)
{
if (species == SPECIES_UNOWN) {
u32 mailSpecies = GetUnownLetterByPersonality(personality) + 30000;
u32 mailSpecies = GetUnownLetterByPersonality(personality) + UNOWN_OFFSET;
return mailSpecies;
}
return species;
@@ -83,10 +85,10 @@ u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *unownLetter)
{
u16 result;
if (mailSpecies >= 30000 && mailSpecies < (30000 + UNOWN_FORM_COUNT))
if (mailSpecies >= UNOWN_OFFSET && mailSpecies < (UNOWN_OFFSET + NUM_UNOWN_FORMS))
{
result = SPECIES_UNOWN;
*unownLetter = mailSpecies - 30000;
*unownLetter = mailSpecies - UNOWN_OFFSET;
}
else
{
+1 -1
View File
@@ -797,7 +797,7 @@ const u8 (*const sCategoryPageIconCoords[])[4] = {
sPageIconCoords_4Mons,
};
static const u8 * const sDexCategoryNamePtrs[] = {
static const u8 *const sDexCategoryNamePtrs[] = {
gText_DexCategory_GrasslandPkmn,
gText_DexCategory_ForestPkmn,
gText_DexCategory_WatersEdgePkmn,
+2 -2
View File
@@ -1856,7 +1856,7 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level,
{
u32 personality;
if ((u8)(unownLetter - 1) < 28)
if ((u8)(unownLetter - 1) < NUM_UNOWN_FORMS)
{
u16 actualLetter;
@@ -3919,7 +3919,7 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
*hpSwitchout = gBattleMons[battlerId].hp;
for (i = 0; i < 8; i++)
gBattleMons[battlerId].statStages[i] = 6;
gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
gBattleMons[battlerId].status2 = 0;
UpdateSentPokesToOpponentValue(battlerId);
+2 -2
View File
@@ -626,14 +626,14 @@ static const u32 sBgTilemap_MovesPage[] = INCBIN_U32( "graphics/interface/pokesu
#include "data/text/nature_names.h"
static const u8 * const sEggHatchTimeTexts[] = {
static const u8 *const sEggHatchTimeTexts[] = {
gText_PokeSum_EggHatch_LongTime,
gText_PokeSum_EggHatch_SomeTime,
gText_PokeSum_EggHatch_Soon,
gText_PokeSum_EggHatch_AlmostReady
};
static const u8 * const sEggOriginTexts[] = {
static const u8 *const sEggOriginTexts[] = {
gText_PokeSum_EggOrigin_DayCare,
gText_PokeSum_EggOrigin_Trade,
gText_PokeSum_EggOrigin_TravelingMan,
+2 -2
View File
@@ -16,7 +16,7 @@ struct GFRomHeader
const struct CompressedSpriteSheet * monBackPics;
const struct CompressedSpritePalette * monNormalPalettes;
const struct CompressedSpritePalette * monShinyPalettes;
const u8 * const * monIcons;
const u8 *const * monIcons;
const u8 * monIconPaletteIds;
const struct SpritePalette * monIconPalettes;
const u8 (* monSpeciesNames)[];
@@ -63,7 +63,7 @@ struct GFRomHeader
u32 unk18;
const struct BaseStats * baseStats;
const u8 (* abilityNames)[];
const u8 * const * abilityDescriptions;
const u8 *const * abilityDescriptions;
const struct Item * items;
const struct BattleMove * moves;
const struct CompressedSpriteSheet * ballGfx;