Merge pull request #93 from cawtds/fix/frostbite

fix frostbite
This commit is contained in:
cawtds
2025-12-20 04:16:43 +01:00
committed by GitHub
26 changed files with 255 additions and 115 deletions

View File

@@ -28326,6 +28326,17 @@ gBattleAnimStatus_Nightmare::
clearmonbg ANIM_DEF_PARTNER
end
gBattleAnimStatus_Frostbite::
playsewithpan SE_M_ICY_WIND, 0
loadspritegfx ANIM_TAG_ICE_CRYSTALS
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
call IceCrystalEffectShort
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31)
waitforvisualfinish
clearmonbg ANIM_DEF_PARTNER
end
gBattleAnimGeneral_StatsChange::
createvisualtask AnimTask_StatsChange, 5
waitforvisualfinish

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 452 B

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 448 B

View File

@@ -948,6 +948,7 @@ extern const u8 gBattleAnimStatus_Paralysis[];
extern const u8 gBattleAnimStatus_Freeze[];
extern const u8 gBattleAnimStatus_Curse[];
extern const u8 gBattleAnimStatus_Nightmare[];
extern const u8 gBattleAnimStatus_Frostbite[];
// general animations
extern const u8 gBattleAnimGeneral_StatsChange[];

View File

@@ -9,6 +9,7 @@
#define AILMENT_BRN 5
#define AILMENT_PKRS 6
#define AILMENT_FNT 7
#define AILMENT_FRB 8
#define PARTY_LAYOUT_SINGLE 0
#define PARTY_LAYOUT_DOUBLE 1
@@ -17,14 +18,14 @@
#define PARTY_LAYOUT_COUNT 4
#define KEEP_PARTY_LAYOUT 0xFF
#define PARTY_MENU_TYPE_FIELD 0
#define PARTY_MENU_TYPE_IN_BATTLE 1
#define PARTY_MENU_TYPE_CONTEST 2
#define PARTY_MENU_TYPE_CHOOSE_SINGLE_MON 3
#define PARTY_MENU_TYPE_FIELD 0
#define PARTY_MENU_TYPE_IN_BATTLE 1
#define PARTY_MENU_TYPE_CONTEST 2
#define PARTY_MENU_TYPE_CHOOSE_SINGLE_MON 3
#define PARTY_MENU_TYPE_CHOOSE_MULTIPLE_MONS 4 // multi battles, eReader battles, and some battle facilities
#define PARTY_MENU_TYPE_MULTI_SHOWCASE 5
#define PARTY_MENU_TYPE_DAYCARE 6
#define PARTY_MENU_TYPE_MOVE_RELEARNER 7
#define PARTY_MENU_TYPE_DAYCARE 6
#define PARTY_MENU_TYPE_MOVE_RELEARNER 7
#define PARTY_MENU_TYPE_UNION_ROOM_REGISTER 8 // trading board
#define PARTY_MENU_TYPE_UNION_ROOM_TRADE 9 // trading board
#define PARTY_MENU_TYPE_SPIN_TRADE 10 // Unused beta for Gen IV's Spin Trade
@@ -52,7 +53,7 @@
#define PARTY_MSG_CHOOSE_MON 0
#define PARTY_MSG_CHOOSE_MON_OR_CANCEL 1
#define PARTY_MSG_CHOOSE_MON_AND_CONFIRM 2
#define PARTY_MSG_MOVE_TO_WHERE 3
#define PARTY_MSG_MOVE_TO_WHERE 3
#define PARTY_MSG_TEACH_WHICH_MON 4
#define PARTY_MSG_USE_ON_WHICH_MON 5
#define PARTY_MSG_GIVE_TO_WHICH_MON 6

View File

@@ -5446,7 +5446,7 @@ extern const u32 gBattleTextboxTiles[];
extern const u16 gBattleTextboxPalette[];
extern const u32 gBattleTextboxTilemap[];
extern const u32 gBattleInterface_PartySummaryBar_Gfx[];
extern const u8 gBattleInterface_Gfx[][32];
extern const u8 gHealthboxElementsGfxTable[][32];
extern const u16 gBattleInterface_Healthbox_Pal[];
extern const u16 gBattleInterface_Healthbar_Pal[];
extern const u16 gCategoryIcons_Pal[];

View File

@@ -195,6 +195,7 @@ static const u8* const sBattleAnims_StatusConditions[NUM_B_ANIMS_STATUS] =
[B_ANIM_STATUS_FRZ] = gBattleAnimStatus_Freeze,
[B_ANIM_STATUS_CURSED] = gBattleAnimStatus_Curse,
[B_ANIM_STATUS_NIGHTMARE] = gBattleAnimStatus_Nightmare,
[B_ANIM_STATUS_FRB] = gBattleAnimStatus_Frostbite,
};
static const u8* const sBattleAnims_General[NUM_B_ANIMS_GENERAL] =

View File

@@ -22,44 +22,139 @@
#define abs(a) ((a) < 0 ? -(a) : (a))
// These are used as indexes for each "section of tiles" in gBattleInterface_Gfx
#define B_INTERFACE_GFX_TRANSPARENT 0
#define B_INTERFACE_GFX_HP_BAR_HP_TEXT 1
#define B_INTERFACE_GFX_HP_BAR_GREEN 3
#define B_INTERFACE_GFX_EXP_BAR 12
#define B_INTERFACE_GFX_STATUS_PSN_BATTLER0 21 // BATTLER0: B_POSITION_PLAYER_LEFT
#define B_INTERFACE_GFX_STATUS_PAR_BATTLER0 24
#define B_INTERFACE_GFX_STATUS_SLP_BATTLER0 27
#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER0 30
#define B_INTERFACE_GFX_STATUS_BRN_BATTLER0 33
// tiles 36 through 38 are unused
#define B_INTERFACE_GFX_STATUS_NONE 39
// tiles 40 through 42 are unused
#define B_INTERFACE_GFX_SAFARI_HEALTHBOX_0 43
#define B_INTERFACE_GFX_SAFARI_HEALTHBOX_1 44
#define B_INTERFACE_GFX_SAFARI_HEALTHBOX_2 45
// tile 46 is unused
#define B_INTERFACE_GFX_HP_BAR_YELLOW 47
#define B_INTERFACE_GFX_HP_BAR_RED 56
#define B_INTERFACE_GFX_HP_BAR_LEFT_BORDER 65 // Used in place of the HP text graphic if the pokemon is statused
#define B_INTERFACE_GFX_BALL_PARTY_SUMMARY 66
#define B_INTERFACE_GFX_BALL_CAUGHT 70
#define B_INTERFACE_GFX_STATUS_PSN_BATTLER1 71 // BATTLER1: B_POSITION_OPPONENT_LEFT
#define B_INTERFACE_GFX_STATUS_PAR_BATTLER1 74
#define B_INTERFACE_GFX_STATUS_SLP_BATTLER1 77
#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER1 80
#define B_INTERFACE_GFX_STATUS_BRN_BATTLER1 83
#define B_INTERFACE_GFX_STATUS_PSN_BATTLER2 86 // BATTLER2: B_POSITION_PLAYER_RIGHT
#define B_INTERFACE_GFX_STATUS_PAR_BATTLER2 89
#define B_INTERFACE_GFX_STATUS_SLP_BATTLER2 92
#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER2 95
#define B_INTERFACE_GFX_STATUS_BRN_BATTLER2 98
#define B_INTERFACE_GFX_STATUS_PSN_BATTLER3 101 // BATTLER3: B_POSITION_OPPONENT_RIGHT
#define B_INTERFACE_GFX_STATUS_PAR_BATTLER3 104
#define B_INTERFACE_GFX_STATUS_SLP_BATTLER3 107
#define B_INTERFACE_GFX_STATUS_FRZ_BATTLER3 110
#define B_INTERFACE_GFX_STATUS_BRN_BATTLER3 113
#define B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_TEXT 116 // Used in the player's
#define B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_BAR 117 // healthbox in double battles
enum
{
B_INTERFACE_GFX_TRANSPARENT,
B_INTERFACE_GFX_HP_BAR_HP_TEXT,
B_INTERFACE_GFX_HP_BAR_HP_TEXT_2,
B_INTERFACE_GFX_HP_BAR_GREEN,
B_INTERFACE_GFX_HP_BAR_GREEN_2,
B_INTERFACE_GFX_HP_BAR_GREEN_3,
B_INTERFACE_GFX_HP_BAR_GREEN_4,
B_INTERFACE_GFX_HP_BAR_GREEN_5,
B_INTERFACE_GFX_HP_BAR_GREEN_6,
B_INTERFACE_GFX_HP_BAR_GREEN_7,
B_INTERFACE_GFX_HP_BAR_GREEN_8,
B_INTERFACE_GFX_HP_BAR_GREEN_9,
B_INTERFACE_GFX_EXP_BAR,
B_INTERFACE_GFX_EXP_BAR_2,
B_INTERFACE_GFX_EXP_BAR_3,
B_INTERFACE_GFX_EXP_BAR_4,
B_INTERFACE_GFX_EXP_BAR_5,
B_INTERFACE_GFX_EXP_BAR_6,
B_INTERFACE_GFX_EXP_BAR_7,
B_INTERFACE_GFX_EXP_BAR_8,
B_INTERFACE_GFX_EXP_BAR_9,
B_INTERFACE_GFX_STATUS_PSN_BATTLER0, // BATTLER0: B_POSITION_PLAYER_LEFT
B_INTERFACE_GFX_STATUS_PSN_BATTLER0_2,
B_INTERFACE_GFX_STATUS_PSN_BATTLER0_3,
B_INTERFACE_GFX_STATUS_PAR_BATTLER0,
B_INTERFACE_GFX_STATUS_PAR_BATTLER0_2,
B_INTERFACE_GFX_STATUS_PAR_BATTLER0_3,
B_INTERFACE_GFX_STATUS_SLP_BATTLER0,
B_INTERFACE_GFX_STATUS_SLP_BATTLER0_2,
B_INTERFACE_GFX_STATUS_SLP_BATTLER0_3,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER0,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER0_2,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER0_3,
B_INTERFACE_GFX_STATUS_BRN_BATTLER0,
B_INTERFACE_GFX_STATUS_BRN_BATTLER0_2,
B_INTERFACE_GFX_STATUS_BRN_BATTLER0_3,
B_INTERFACE_GFX_STATUS_FRB_BATTLER0,
B_INTERFACE_GFX_STATUS_FRB_BATTLER0_2,
B_INTERFACE_GFX_STATUS_FRB_BATTLER0_3,
B_INTERFACE_GFX_UNUSED_0,
B_INTERFACE_GFX_UNUSED_1,
B_INTERFACE_GFX_UNUSED_2,
B_INTERFACE_GFX_STATUS_NONE,
B_INTERFACE_GFX_UNUSED_3,
B_INTERFACE_GFX_UNUSED_4,
B_INTERFACE_GFX_UNUSED_5,
B_INTERFACE_GFX_SAFARI_HEALTHBOX_0,
B_INTERFACE_GFX_SAFARI_HEALTHBOX_1,
B_INTERFACE_GFX_SAFARI_HEALTHBOX_2,
B_INTERFACE_GFX_UNUSED_6,
B_INTERFACE_GFX_HP_BAR_YELLOW,
B_INTERFACE_GFX_HP_BAR_YELLOW_2,
B_INTERFACE_GFX_HP_BAR_YELLOW_3,
B_INTERFACE_GFX_HP_BAR_YELLOW_4,
B_INTERFACE_GFX_HP_BAR_YELLOW_5,
B_INTERFACE_GFX_HP_BAR_YELLOW_6,
B_INTERFACE_GFX_HP_BAR_YELLOW_7,
B_INTERFACE_GFX_HP_BAR_YELLOW_8,
B_INTERFACE_GFX_HP_BAR_YELLOW_9,
B_INTERFACE_GFX_HP_BAR_RED,
B_INTERFACE_GFX_HP_BAR_RED_2,
B_INTERFACE_GFX_HP_BAR_RED_3,
B_INTERFACE_GFX_HP_BAR_RED_4,
B_INTERFACE_GFX_HP_BAR_RED_5,
B_INTERFACE_GFX_HP_BAR_RED_6,
B_INTERFACE_GFX_HP_BAR_RED_7,
B_INTERFACE_GFX_HP_BAR_RED_8,
B_INTERFACE_GFX_HP_BAR_RED_9,
B_INTERFACE_GFX_HP_BAR_LEFT_BORDER, // Used in place of the HP text graphic if the pokemon is statused
B_INTERFACE_GFX_BALL_PARTY_SUMMARY,
B_INTERFACE_GFX_BALL_PARTY_SUMMARY_2,
B_INTERFACE_GFX_BALL_PARTY_SUMMARY_3,
B_INTERFACE_GFX_BALL_PARTY_SUMMARY_4,
B_INTERFACE_GFX_BALL_CAUGHT,
B_INTERFACE_GFX_STATUS_PSN_BATTLER1, // BATTLER1: B_POSITION_OPPONENT_LEFT
B_INTERFACE_GFX_STATUS_PSN_BATTLER1_2,
B_INTERFACE_GFX_STATUS_PSN_BATTLER1_3,
B_INTERFACE_GFX_STATUS_PAR_BATTLER1,
B_INTERFACE_GFX_STATUS_PAR_BATTLER1_2,
B_INTERFACE_GFX_STATUS_PAR_BATTLER1_3,
B_INTERFACE_GFX_STATUS_SLP_BATTLER1,
B_INTERFACE_GFX_STATUS_SLP_BATTLER1_2,
B_INTERFACE_GFX_STATUS_SLP_BATTLER1_3,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER1,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER1_2,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER1_3,
B_INTERFACE_GFX_STATUS_BRN_BATTLER1,
B_INTERFACE_GFX_STATUS_BRN_BATTLER1_2,
B_INTERFACE_GFX_STATUS_BRN_BATTLER1_3,
B_INTERFACE_GFX_STATUS_FRB_BATTLER1,
B_INTERFACE_GFX_STATUS_FRB_BATTLER1_2,
B_INTERFACE_GFX_STATUS_FRB_BATTLER1_3,
B_INTERFACE_GFX_STATUS_PSN_BATTLER2, // BATTLER2: B_POSITION_PLAYER_RIGHT
B_INTERFACE_GFX_STATUS_PSN_BATTLER2_2,
B_INTERFACE_GFX_STATUS_PSN_BATTLER2_3,
B_INTERFACE_GFX_STATUS_PAR_BATTLER2,
B_INTERFACE_GFX_STATUS_PAR_BATTLER2_2,
B_INTERFACE_GFX_STATUS_PAR_BATTLER2_3,
B_INTERFACE_GFX_STATUS_SLP_BATTLER2,
B_INTERFACE_GFX_STATUS_SLP_BATTLER2_2,
B_INTERFACE_GFX_STATUS_SLP_BATTLER2_3,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER2,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER2_2,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER2_3,
B_INTERFACE_GFX_STATUS_BRN_BATTLER2,
B_INTERFACE_GFX_STATUS_BRN_BATTLER2_2,
B_INTERFACE_GFX_STATUS_BRN_BATTLER2_3,
B_INTERFACE_GFX_STATUS_FRB_BATTLER2,
B_INTERFACE_GFX_STATUS_FRB_BATTLER2_2,
B_INTERFACE_GFX_STATUS_FRB_BATTLER2_3,
B_INTERFACE_GFX_STATUS_PSN_BATTLER3, // BATTLER3: B_POSITION_OPPONENT_RIGHT
B_INTERFACE_GFX_STATUS_PSN_BATTLER3_2,
B_INTERFACE_GFX_STATUS_PSN_BATTLER3_3,
B_INTERFACE_GFX_STATUS_PAR_BATTLER3,
B_INTERFACE_GFX_STATUS_PAR_BATTLER3_2,
B_INTERFACE_GFX_STATUS_PAR_BATTLER3_3,
B_INTERFACE_GFX_STATUS_SLP_BATTLER3,
B_INTERFACE_GFX_STATUS_SLP_BATTLER3_2,
B_INTERFACE_GFX_STATUS_SLP_BATTLER3_3,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER3,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER3_2,
B_INTERFACE_GFX_STATUS_FRZ_BATTLER3_3,
B_INTERFACE_GFX_STATUS_BRN_BATTLER3,
B_INTERFACE_GFX_STATUS_BRN_BATTLER3_2,
B_INTERFACE_GFX_STATUS_BRN_BATTLER3_3,
B_INTERFACE_GFX_STATUS_FRB_BATTLER3,
B_INTERFACE_GFX_STATUS_FRB_BATTLER3_2,
B_INTERFACE_GFX_STATUS_FRB_BATTLER3_3,
B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_TEXT, // healthbox in double battles
B_INTERFACE_GFX_BOTTOM_RIGHT_CORNER_HP_AS_BAR, // healthbox in double battles
};
static void SpriteCB_HealthBoxOther(struct Sprite *sprite);
@@ -377,7 +472,7 @@ static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheet =
static const struct SpritePalette sPartySummaryBarSpritePals =
{
.data = gBattleInterface_Healthbox_Pal,
.data = gBattleInterface_Healthbox_Pal,
.tag = TAG_PARTY_SUMMARY_BAR_PAL,
};
@@ -389,7 +484,7 @@ static const struct SpritePalette sPartySummaryBallSpritePals =
static const struct SpriteSheet sPartySummaryBallSpriteSheets =
{
.data = gBattleInterface_Gfx + B_INTERFACE_GFX_BALL_PARTY_SUMMARY,
.data = &gHealthboxElementsGfxTable[B_INTERFACE_GFX_BALL_PARTY_SUMMARY],
.size = 4 * TILE_SIZE_4BPP,
.tag = TAG_PARTY_SUMMARY_BALL_TILE,
};
@@ -578,7 +673,7 @@ u8 CreateSafariPlayerHealthboxSprites(void)
static const u8 *GetBattleInterfaceGfxPtr(u8 elementId)
{
return gBattleInterface_Gfx[elementId];
return gHealthboxElementsGfxTable[elementId];
}
// Syncs the position of healthbar accordingly with the healthbox.
@@ -1191,7 +1286,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (partyInfo[i].hp == HP_EMPTY_SLOT)
if (partyInfo[i].hp == HP_EMPTY_SLOT)
{
gSprites[ballIconSpritesIds[i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[i]].sIsEmptyBall = TRUE;
@@ -1203,7 +1298,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
}
else
{
if (i >= nValidMons)
if (i >= nValidMons)
{
gSprites[ballIconSpritesIds[i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[i]].sIsEmptyBall = TRUE;
@@ -1650,6 +1745,11 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_FRZ_BATTLER0, battlerId));
statusPalId = PAL_STATUS_FRZ;
}
else if (status & STATUS1_FROSTBITE)
{
statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_FRB_BATTLER0, battlerId));
statusPalId = PAL_STATUS_FRZ;
}
else if (status & STATUS1_PARALYSIS)
{
statusGfxPtr = GetBattleInterfaceGfxPtr(GetStatusIconForBattlerId(B_INTERFACE_GFX_STATUS_PAR_BATTLER0, battlerId));
@@ -1679,7 +1779,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
FillPalette(sStatusIconColors[statusPalId], pltAdder + OBJ_PLTT_OFFSET, PLTT_SIZEOF(1));
CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_OFFSET + pltAdder], (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1));
CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 3 * TILE_SIZE_4BPP);
if (GetBattlerCoordsIndex(battlerId) == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
if (GetBattlerCoordsIndex(battlerId) == BATTLE_COORDS_DOUBLES || !IsOnPlayerSide(battlerId))
{
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
{
@@ -1701,11 +1801,11 @@ static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId)
switch (statusElementId)
{
case B_INTERFACE_GFX_STATUS_PSN_BATTLER0:
if (battlerId == 0)
if (battlerId == B_BATTLER_0)
ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER0;
else if (battlerId == 1)
else if (battlerId == B_BATTLER_1)
ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER1;
else if (battlerId == 2)
else if (battlerId == B_BATTLER_2)
ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER2;
else
ret = B_INTERFACE_GFX_STATUS_PSN_BATTLER3;
@@ -1740,6 +1840,16 @@ static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId)
else
ret = B_INTERFACE_GFX_STATUS_FRZ_BATTLER3;
break;
case B_INTERFACE_GFX_STATUS_FRB_BATTLER0:
if (battlerId == 0)
ret = B_INTERFACE_GFX_STATUS_FRB_BATTLER0;
else if (battlerId == 1)
ret = B_INTERFACE_GFX_STATUS_FRB_BATTLER1;
else if (battlerId == 2)
ret = B_INTERFACE_GFX_STATUS_FRB_BATTLER2;
else
ret = B_INTERFACE_GFX_STATUS_FRB_BATTLER3;
break;
case B_INTERFACE_GFX_STATUS_BRN_BATTLER0:
if (battlerId == 0)
ret = B_INTERFACE_GFX_STATUS_BRN_BATTLER0;

View File

@@ -37,9 +37,9 @@ enum
static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
{
[PARTY_BOX_LEFT_COLUMN] =
[PARTY_BOX_LEFT_COLUMN] =
{
BlitBitmapToPartyWindow_LeftColumn,
BlitBitmapToPartyWindow_LeftColumn,
{
// The below are the x, y, width, and height for each of the following info
24, 11, 40, 13, // Nickname
@@ -51,9 +51,9 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
},
12, 34, 64, 16 // Description text (e.g. NO USE)
},
[PARTY_BOX_RIGHT_COLUMN] =
[PARTY_BOX_RIGHT_COLUMN] =
{
BlitBitmapToPartyWindow_RightColumn,
BlitBitmapToPartyWindow_RightColumn,
{
// The below are the x, y, width, and height for each of the following info
22, 3, 40, 13, // Nickname
@@ -62,14 +62,14 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
102, 12, 24, 8, // HP
117, 12, 24, 8, // Max HP
88, 10, 48, 3 // HP bar
},
},
77, 4, 64, 16 // Description text
},
};
static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
{
[PARTY_LAYOUT_SINGLE] =
[PARTY_LAYOUT_SINGLE] =
{
// pokemon coords, held item coords, status coords, pokeball coords
{ 16, 40, 20, 50, 56, 52, 16, 34},
@@ -79,7 +79,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
{104, 90, 108, 100, 144, 99, 102, 97},
{104, 114, 108, 124, 144, 123, 102, 121},
},
[PARTY_LAYOUT_DOUBLE] =
[PARTY_LAYOUT_DOUBLE] =
{
{ 16, 24, 20, 34, 56, 36, 16, 18},
{ 16, 80, 20, 90, 56, 92, 16, 74},
@@ -88,7 +88,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
{104, 82, 108, 92, 144, 91, 102, 89},
{104, 114, 108, 124, 144, 123, 102, 121},
},
[PARTY_LAYOUT_MULTI] =
[PARTY_LAYOUT_MULTI] =
{
{ 16, 24, 20, 34, 56, 36, 16, 18},
{ 16, 80, 20, 90, 56, 92, 16, 74},
@@ -97,7 +97,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
{104, 82, 106, 92, 144, 91, 102, 89},
{104, 106, 106, 116, 144, 115, 102, 113},
},
[PARTY_LAYOUT_MULTI_SHOWCASE] =
[PARTY_LAYOUT_MULTI_SHOWCASE] =
{
{ 16, 32, 20, 42, 56, 44, 16, 26},
{104, 34, 106, 44, 144, 43, 102, 41},
@@ -938,8 +938,7 @@ static const union AnimCmd sSpriteAnim_StatusFaint[] =
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_Blank[] =
{
static const union AnimCmd sSpriteAnim_StatusFrostbite[] = {
ANIMCMD_FRAME(28, 0),
ANIMCMD_END
};
@@ -953,7 +952,7 @@ static const union AnimCmd *const sSpriteTemplate_StatusCondition[] =
sSpriteAnim_StatusBurn,
sSpriteAnim_StatusPokerus,
sSpriteAnim_StatusFaint,
sSpriteAnim_Blank,
sSpriteAnim_StatusFrostbite,
};
static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons =
@@ -977,14 +976,14 @@ const struct SpriteTemplate gSpriteTemplate_StatusIcons =
.callback = SpriteCallbackDummy,
};
static const bool8 sMultiBattlePartnersPartyMask[PARTY_SIZE + 2] =
static const bool8 sMultiBattlePartnersPartyMask[PARTY_SIZE + 2] =
{
FALSE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,
FALSE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,
FALSE,
};

View File

@@ -419,7 +419,19 @@ const u32 gUnusedTilemap_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.
const u16 gBattleInterface_Healthbox_Pal[] = INCBIN_U16("graphics/battle_interface/healthbox.gbapal");
const u16 gBattleInterface_Healthbar_Pal[] = INCBIN_U16("graphics/battle_interface/healthbar.gbapal");
const u8 gBattleInterface_Gfx[] = INCBIN_U8("graphics/battle_interface/healthbox_elements.4bpp");
const u8 gHealthboxElementsGfxTable[][32] = INCBIN_U8("graphics/battle_interface/hpbar.4bpp",
"graphics/battle_interface/expbar.4bpp",
"graphics/battle_interface/status.4bpp",
"graphics/battle_interface/misc.4bpp",
"graphics/battle_interface/hpbar_anim.4bpp",
"graphics/battle_interface/misc_frameend.4bpp",
"graphics/battle_interface/ball_display.4bpp",
"graphics/battle_interface/ball_caught_indicator.4bpp",
"graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent/partner Pokémon
"graphics/battle_interface/status3.4bpp",
"graphics/battle_interface/status4.4bpp",
"graphics/battle_interface/healthbox_doubles_frameend.4bpp",
"graphics/battle_interface/healthbox_doubles_frameend_bar.4bpp");
const u32 gBattleInterfaceGfx_UnusedWindow3[] = INCBIN_U32("graphics/battle_interface/unused_window3.4bpp.lz");
const u32 gBattleInterfaceGfx_UnusedWindow4[] = INCBIN_U32("graphics/battle_interface/unused_window4.4bpp.lz");

View File

@@ -1989,6 +1989,8 @@ u8 GetAilmentFromStatus(u32 status)
return AILMENT_FRZ;
if (status & STATUS1_BURN)
return AILMENT_BRN;
if (status & STATUS1_FROSTBITE)
return AILMENT_FRB;
return AILMENT_NONE;
}

View File

@@ -370,13 +370,13 @@ static const struct OamData sMoveSelectionCursorOamData =
.paletteNum = 0
};
static const union AnimCmd sMoveSelectionCursorOamAnim_Red[] =
static const union AnimCmd sMoveSelectionCursorOamAnim_Red[] =
{
ANIMCMD_FRAME(0, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sMoveSelectionCursorOamAnim_Blue[] =
static const union AnimCmd sMoveSelectionCursorOamAnim_Blue[] =
{
ANIMCMD_FRAME(0x20, 20),
ANIMCMD_JUMP(0),
@@ -403,49 +403,49 @@ static const struct OamData sStatusAilmentIconOamData = {
.paletteNum = 0
};
static const union AnimCmd sStatusAilmentIconAnim_PSN[] =
static const union AnimCmd sStatusAilmentIconAnim_PSN[] =
{
ANIMCMD_FRAME(0, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_PRZ[] =
static const union AnimCmd sStatusAilmentIconAnim_PRZ[] =
{
ANIMCMD_FRAME(4, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_SLP[] =
static const union AnimCmd sStatusAilmentIconAnim_SLP[] =
{
ANIMCMD_FRAME(8, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_FRZ[] =
static const union AnimCmd sStatusAilmentIconAnim_FRZ[] =
{
ANIMCMD_FRAME(12, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_BRN[] =
static const union AnimCmd sStatusAilmentIconAnim_BRN[] =
{
ANIMCMD_FRAME(16, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_PKRS[] =
static const union AnimCmd sStatusAilmentIconAnim_PKRS[] =
{
ANIMCMD_FRAME(20, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_FNT[] =
static const union AnimCmd sStatusAilmentIconAnim_FNT[] =
{
ANIMCMD_FRAME(24, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sStatusAilmentIconAnim_Blank[] =
static const union AnimCmd sStatusAilmentIconAnim_Blank[] =
{
ANIMCMD_FRAME(28, 20),
ANIMCMD_JUMP(0),
@@ -478,73 +478,73 @@ static const struct OamData sHpOrExpBarOamData = {
.paletteNum = 0
};
static const union AnimCmd sHpOrExpAnim_0[] =
static const union AnimCmd sHpOrExpAnim_0[] =
{
ANIMCMD_FRAME(0, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_1[] =
static const union AnimCmd sHpOrExpAnim_1[] =
{
ANIMCMD_FRAME(1, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_2[] =
static const union AnimCmd sHpOrExpAnim_2[] =
{
ANIMCMD_FRAME(2, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_3[] =
static const union AnimCmd sHpOrExpAnim_3[] =
{
ANIMCMD_FRAME(3, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_4[] =
static const union AnimCmd sHpOrExpAnim_4[] =
{
ANIMCMD_FRAME(4, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_5[] =
static const union AnimCmd sHpOrExpAnim_5[] =
{
ANIMCMD_FRAME(5, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_6[] =
static const union AnimCmd sHpOrExpAnim_6[] =
{
ANIMCMD_FRAME(6, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_7[] =
static const union AnimCmd sHpOrExpAnim_7[] =
{
ANIMCMD_FRAME(7, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_8[] =
static const union AnimCmd sHpOrExpAnim_8[] =
{
ANIMCMD_FRAME(8, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_9[] =
static const union AnimCmd sHpOrExpAnim_9[] =
{
ANIMCMD_FRAME(9, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_10[] =
static const union AnimCmd sHpOrExpAnim_10[] =
{
ANIMCMD_FRAME(10, 20),
ANIMCMD_JUMP(0),
};
static const union AnimCmd sHpOrExpAnim_11[] =
static const union AnimCmd sHpOrExpAnim_11[] =
{
ANIMCMD_FRAME(11, 20),
ANIMCMD_JUMP(0),
@@ -584,7 +584,7 @@ static const struct OamData sPokerusIconObjOamData = {
.paletteNum = 0
};
static const union AnimCmd sPokerusIconObjAnim0[] =
static const union AnimCmd sPokerusIconObjAnim0[] =
{
ANIMCMD_FRAME(0, 20),
ANIMCMD_JUMP(0),
@@ -614,7 +614,7 @@ static const struct OamData sStarObjOamData =
.paletteNum = 0
};
static const union AnimCmd sStarObjAnim0[] =
static const union AnimCmd sStarObjAnim0[] =
{
ANIMCMD_FRAME(1, 20),
ANIMCMD_JUMP(0),
@@ -633,14 +633,14 @@ static const u32 sBgTilemap_MovesPage[] = INCBIN_U32( "graphics/summary_screen/m
static const u8 *const sEggHatchTimeTexts[] = {
gText_PokeSum_EggHatch_LongTime,
gText_PokeSum_EggHatch_SomeTime,
gText_PokeSum_EggHatch_Soon,
gText_PokeSum_EggHatch_Soon,
gText_PokeSum_EggHatch_AlmostReady
};
static const u8 *const sEggOriginTexts[] = {
gText_PokeSum_EggOrigin_DayCare,
gText_PokeSum_EggOrigin_DayCare,
gText_PokeSum_EggOrigin_Trade,
gText_PokeSum_EggOrigin_TravelingMan,
gText_PokeSum_EggOrigin_TravelingMan,
gText_PokeSum_EggOrigin_Trade,
gText_PokeSum_EggOrigin_NicePlace,
gText_PokeSum_EggOrigin_Spa,
@@ -654,7 +654,7 @@ static const u8 sPrintMoveTextColors[][3] = {
{0, 5, 6}
};
static const struct BgTemplate sBgTempaltes[] =
static const struct BgTemplate sBgTempaltes[] =
{
{
.bg = 0,
@@ -746,7 +746,7 @@ static const struct WindowTemplate sWindowTemplates_Permanent_Bg1[] =
}
};
static const struct WindowTemplate sWindowTemplates_Permanent_Bg2[] =
static const struct WindowTemplate sWindowTemplates_Permanent_Bg2[] =
{
{
.bg = 2,
@@ -777,7 +777,7 @@ static const struct WindowTemplate sWindowTemplates_Permanent_Bg2[] =
},
};
static const struct WindowTemplate sWindowTemplates_Info[] =
static const struct WindowTemplate sWindowTemplates_Info[] =
{
[POKESUM_WIN_INFO_3 - 3] = {
.bg = 0,
@@ -817,7 +817,7 @@ static const struct WindowTemplate sWindowTemplates_Info[] =
},
};
static const struct WindowTemplate sWindowTemplates_Skills[] =
static const struct WindowTemplate sWindowTemplates_Skills[] =
{
[POKESUM_WIN_SKILLS_3 - 3] = {
.bg = 0,
@@ -857,7 +857,7 @@ static const struct WindowTemplate sWindowTemplates_Skills[] =
},
};
static const struct WindowTemplate sWindowTemplates_Moves[] =
static const struct WindowTemplate sWindowTemplates_Moves[] =
{
[POKESUM_WIN_MOVES_3 - 3] = {
.bg = 0,
@@ -897,7 +897,7 @@ static const struct WindowTemplate sWindowTemplates_Moves[] =
},
};
static const struct WindowTemplate sWindowTemplates_Dummy[] =
static const struct WindowTemplate sWindowTemplates_Dummy[] =
{
{
.bg = 255,
@@ -2405,7 +2405,7 @@ static const struct StatData sStatData[] = {
.monDataHyperTrained = MON_DATA_HYPER_TRAINED_HP,
.pssStat = PSS_STAT_HP,
},
[STAT_ATK] =
[STAT_ATK] =
{
.monDataStat = MON_DATA_ATK,
.monDataStat2 = MON_DATA_ATK2,
@@ -2414,7 +2414,7 @@ static const struct StatData sStatData[] = {
.monDataHyperTrained = MON_DATA_HYPER_TRAINED_ATK,
.pssStat = PSS_STAT_ATK,
},
[STAT_DEF] =
[STAT_DEF] =
{
.monDataStat = MON_DATA_DEF,
.monDataStat2 = MON_DATA_DEF2,
@@ -2423,7 +2423,7 @@ static const struct StatData sStatData[] = {
.monDataHyperTrained = MON_DATA_HYPER_TRAINED_DEF,
.pssStat = PSS_STAT_DEF,
},
[STAT_SPATK] =
[STAT_SPATK] =
{
.monDataStat = MON_DATA_SPATK,
.monDataStat2 = MON_DATA_SPATK2,
@@ -2432,7 +2432,7 @@ static const struct StatData sStatData[] = {
.monDataHyperTrained = MON_DATA_HYPER_TRAINED_SPATK,
.pssStat = PSS_STAT_SPA,
},
[STAT_SPDEF] =
[STAT_SPDEF] =
{
.monDataStat = MON_DATA_SPDEF,
.monDataStat2 = MON_DATA_SPDEF2,
@@ -2441,7 +2441,7 @@ static const struct StatData sStatData[] = {
.monDataHyperTrained = MON_DATA_HYPER_TRAINED_SPDEF,
.pssStat = PSS_STAT_SPD,
},
[STAT_SPEED] =
[STAT_SPEED] =
{
.monDataStat = MON_DATA_SPEED,
.monDataStat2 = MON_DATA_SPEED2,
@@ -2453,7 +2453,7 @@ static const struct StatData sStatData[] = {
};
static void SetStatXPos(u8 stat, u16 xpos)
{
{
switch (stat)
{
case STAT_HP:
@@ -2529,7 +2529,7 @@ static void BufferEVString(u8 stat)
u16 statValue = GetMonData(&sMonSummaryScreen->currentMon, sStatData[stat].monDataEv);
u8 *dst = sMonSummaryScreen->summary.statValueStrBufs[sStatData[stat].pssStat];
u8 tmp[20];
ConvertIntToDecimalStringN(dst, statValue, STR_CONV_MODE_LEFT_ALIGN, 3);
StringAppend(dst, gText_Slash);
ConvertIntToDecimalStringN(tmp, MAX_PER_STAT_EVS, STR_CONV_MODE_LEFT_ALIGN, 3);
@@ -3952,6 +3952,9 @@ static u8 StatusToAilment(u32 status)
if ((status & STATUS1_BURN) != 0)
return AILMENT_BRN;
if ((status & STATUS1_FROSTBITE) != 0)
return AILMENT_FRB;
if (CheckPartyPokerus(&sMonSummaryScreen->currentMon, 0))
return AILMENT_PKRS;