change last ball graphic based on config. replace saveblock field with ewram field
This commit is contained in:
parent
39a254f80d
commit
3f34fec42f
7 changed files with 32 additions and 10 deletions
BIN
graphics/battle_interface/last_used_ball_l.png
Normal file
BIN
graphics/battle_interface/last_used_ball_l.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 223 B After Width: | Height: | Size: 223 B |
|
@ -890,5 +890,6 @@ extern u8 gNumberOfMovesToChoose;
|
||||||
extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
|
extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
|
||||||
extern bool8 gHasFetchedBall;
|
extern bool8 gHasFetchedBall;
|
||||||
extern u8 gLastUsedBall;
|
extern u8 gLastUsedBall;
|
||||||
|
extern u16 gLastThrownBall;
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_H
|
#endif // GUARD_BATTLE_H
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "item_icon.h"
|
#include "item_icon.h"
|
||||||
#include "item_use.h"
|
#include "item_use.h"
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
|
#include "constants/items.h"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{ // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c
|
{ // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c
|
||||||
|
@ -3175,7 +3176,11 @@ static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow =
|
||||||
.callback = SpriteCB_LastUsedBallWin
|
.callback = SpriteCB_LastUsedBallWin
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball.4bpp");
|
#if B_LAST_USED_BALL_BUTTON == R_BUTTON
|
||||||
|
static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp");
|
||||||
|
#else
|
||||||
|
static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp");
|
||||||
|
#endif
|
||||||
static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow =
|
static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow =
|
||||||
{
|
{
|
||||||
sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG
|
sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG
|
||||||
|
@ -3193,31 +3198,39 @@ static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow =
|
||||||
|
|
||||||
bool32 CanThrowLastUsedBall(void)
|
bool32 CanThrowLastUsedBall(void)
|
||||||
{
|
{
|
||||||
|
#if B_LAST_USED_BALL == FALSE
|
||||||
|
return FALSE;
|
||||||
|
#else
|
||||||
return (!(CanThrowBall() != 0
|
return (!(CanThrowBall() != 0
|
||||||
|| (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
|| (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||||
|| !CheckBagHasItem(gSaveBlock2Ptr->lastUsedBall, 1)));
|
|| !CheckBagHasItem(gLastThrownBall, 1)));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TryAddLastUsedBallItemSprites(void)
|
void TryAddLastUsedBallItemSprites(void)
|
||||||
{
|
{
|
||||||
if (gSaveBlock2Ptr->lastUsedBall != 0 && !CheckBagHasItem(gSaveBlock2Ptr->lastUsedBall, 1))
|
#if B_LAST_USED_BALL == TRUE
|
||||||
|
if (gLastThrownBall == 0)
|
||||||
|
gLastThrownBall = ITEM_POKE_BALL;
|
||||||
|
|
||||||
|
if (gLastThrownBall != 0 && !CheckBagHasItem(gLastThrownBall, 1))
|
||||||
{
|
{
|
||||||
// we're out of the last used ball, so just set it to the first ball in the bag
|
// we're out of the last used ball, so just set it to the first ball in the bag
|
||||||
// we have to compact the bag first bc it is typically only compacted when you open it
|
// we have to compact the bag first bc it is typically only compacted when you open it
|
||||||
CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]);
|
CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]);
|
||||||
gSaveBlock2Ptr->lastUsedBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId;
|
gLastThrownBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CanThrowBall() != 0
|
if (CanThrowBall() != 0
|
||||||
|| (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
|| (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||||
|| !CheckBagHasItem(gSaveBlock2Ptr->lastUsedBall, 1))
|
|| !CheckBagHasItem(gLastThrownBall, 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// ball
|
// ball
|
||||||
if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES)
|
if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES)
|
||||||
{
|
{
|
||||||
gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gSaveBlock2Ptr->lastUsedBall);
|
gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gLastThrownBall);
|
||||||
gSprites[gBattleStruct->ballSpriteIds[0]].x = LAST_USED_BALL_X_0;
|
gSprites[gBattleStruct->ballSpriteIds[0]].x = LAST_USED_BALL_X_0;
|
||||||
gSprites[gBattleStruct->ballSpriteIds[0]].y = LAST_USED_BALL_Y;
|
gSprites[gBattleStruct->ballSpriteIds[0]].y = LAST_USED_BALL_Y;
|
||||||
gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
|
gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
|
||||||
|
@ -3236,6 +3249,7 @@ void TryAddLastUsedBallItemSprites(void)
|
||||||
LAST_USED_WIN_Y, 5);
|
LAST_USED_WIN_Y, 5);
|
||||||
gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
|
gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DestroyLastUsedBallWinGfx(struct Sprite *sprite)
|
static void DestroyLastUsedBallWinGfx(struct Sprite *sprite)
|
||||||
|
@ -3290,6 +3304,7 @@ static void SpriteCB_LastUsedBall(struct Sprite *sprite)
|
||||||
|
|
||||||
static void TryHideOrRestoreLastUsedBall(u8 caseId)
|
static void TryHideOrRestoreLastUsedBall(u8 caseId)
|
||||||
{
|
{
|
||||||
|
#if B_LAST_USED_BALL == TRUE
|
||||||
if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES)
|
if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -3308,18 +3323,23 @@ static void TryHideOrRestoreLastUsedBall(u8 caseId)
|
||||||
gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore
|
gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TryHideLastUsedBall(void)
|
void TryHideLastUsedBall(void)
|
||||||
{
|
{
|
||||||
|
#if B_LAST_USED_BALL == TRUE
|
||||||
TryHideOrRestoreLastUsedBall(0);
|
TryHideOrRestoreLastUsedBall(0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TryRestoreLastUsedBall(void)
|
void TryRestoreLastUsedBall(void)
|
||||||
{
|
{
|
||||||
|
#if B_LAST_USED_BALL == TRUE
|
||||||
if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES)
|
if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES)
|
||||||
TryHideOrRestoreLastUsedBall(1);
|
TryHideOrRestoreLastUsedBall(1);
|
||||||
else
|
else
|
||||||
TryAddLastUsedBallItemSprites();
|
TryAddLastUsedBallItemSprites();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -230,6 +230,7 @@ EWRAM_DATA u16 gPartnerSpriteId = 0;
|
||||||
EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0};
|
EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0};
|
||||||
EWRAM_DATA bool8 gHasFetchedBall = FALSE;
|
EWRAM_DATA bool8 gHasFetchedBall = FALSE;
|
||||||
EWRAM_DATA u8 gLastUsedBall = 0;
|
EWRAM_DATA u8 gLastUsedBall = 0;
|
||||||
|
EWRAM_DATA u16 gLastThrownBall = 0;
|
||||||
|
|
||||||
// IWRAM common vars
|
// IWRAM common vars
|
||||||
void (*gPreBattleCallback1)(void);
|
void (*gPreBattleCallback1)(void);
|
||||||
|
|
|
@ -12021,7 +12021,7 @@ static void Cmd_handleballthrow(void)
|
||||||
u32 odds;
|
u32 odds;
|
||||||
u8 catchRate;
|
u8 catchRate;
|
||||||
|
|
||||||
gSaveBlock2Ptr->lastUsedBall = gLastUsedItem;
|
gLastThrownBall = gLastUsedItem;
|
||||||
if (gLastUsedItem == ITEM_SAFARI_BALL)
|
if (gLastUsedItem == ITEM_SAFARI_BALL)
|
||||||
catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
|
catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
|
||||||
else
|
else
|
||||||
|
|
|
@ -759,7 +759,7 @@ void HandleAction_ThrowBall(void)
|
||||||
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
|
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
|
||||||
gBattle_BG0_X = 0;
|
gBattle_BG0_X = 0;
|
||||||
gBattle_BG0_Y = 0;
|
gBattle_BG0_Y = 0;
|
||||||
gLastUsedItem = gSaveBlock2Ptr->lastUsedBall;
|
gLastUsedItem = gLastThrownBall;
|
||||||
RemoveBagItem(gLastUsedItem, 1);
|
RemoveBagItem(gLastUsedItem, 1);
|
||||||
gBattlescriptCurrInstr = BattleScript_BallThrow;
|
gBattlescriptCurrInstr = BattleScript_BallThrow;
|
||||||
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
|
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
|
||||||
|
|
Loading…
Reference in a new issue