added new pokeball graphics, fixed/refactored tmhms, smaller pokedex entry font to fit whole text

This commit is contained in:
cawtds
2024-05-14 22:20:07 +02:00
parent 2b3e3789a7
commit b2a56f6b6c
51 changed files with 850 additions and 311 deletions

View File

@@ -79,6 +79,8 @@ ViridianCity_Mart_Items::
.2byte ITEM_DIRE_HIT
.2byte ITEM_POKE_DOLL
.2byte ITEM_MASTER_BALL
.2byte ITEM_MOON_BALL
.2byte ITEM_CHERISH_BALL
.2byte ITEM_REVIVE
.2byte ITEM_ETHER
.2byte ITEM_ELIXIR
@@ -100,6 +102,7 @@ ViridianCity_Mart_Items::
.2byte ITEM_BEAST_BALL
.2byte ITEM_POMEG_BERRY
.2byte ITEM_MEGA_RING
.2byte ITEM_VENUSAURITE
.2byte ITEM_CHARIZARDITE_X
.2byte ITEM_CHARIZARDITE_Y
.2byte ITEM_SILPH_SCOPE

BIN
graphics/balls/beast.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

BIN
graphics/balls/cherish.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

View File

Before

Width:  |  Height:  |  Size: 326 B

After

Width:  |  Height:  |  Size: 326 B

BIN
graphics/balls/dream.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

BIN
graphics/balls/dusk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

BIN
graphics/balls/fast.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
graphics/balls/friend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

View File

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 257 B

BIN
graphics/balls/heal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

BIN
graphics/balls/heavy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

BIN
graphics/balls/level.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

BIN
graphics/balls/love.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

BIN
graphics/balls/lure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

View File

Before

Width:  |  Height:  |  Size: 350 B

After

Width:  |  Height:  |  Size: 350 B

View File

Before

Width:  |  Height:  |  Size: 260 B

After

Width:  |  Height:  |  Size: 260 B

BIN
graphics/balls/moon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

View File

Before

Width:  |  Height:  |  Size: 266 B

After

Width:  |  Height:  |  Size: 266 B

View File

Before

Width:  |  Height:  |  Size: 246 B

After

Width:  |  Height:  |  Size: 246 B

BIN
graphics/balls/open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

BIN
graphics/balls/park.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

View File

Before

Width:  |  Height:  |  Size: 249 B

After

Width:  |  Height:  |  Size: 249 B

View File

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 289 B

BIN
graphics/balls/quick.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

View File

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 257 B

View File

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 259 B

BIN
graphics/balls/sport.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

View File

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 296 B

View File

Before

Width:  |  Height:  |  Size: 245 B

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

View File

@@ -14,6 +14,7 @@
#include "battle_util2.h"
#include "battle_bg.h"
#include "battle_dynamax.h"
#include "pokeball.h"
/*
Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
@@ -467,7 +468,7 @@ struct BattleResults
u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[10]; // 0x2A
u8 filler34[2];
u8 catchAttempts[11]; // 0x36
u8 catchAttempts[POKEBALL_COUNT]; // 0x36
};
extern struct BattleResults gBattleResults;

View File

@@ -45,8 +45,8 @@
#define PC_ITEMS_COUNT 30
#define BAG_ITEMS_COUNT 42
#define BAG_KEYITEMS_COUNT 30
#define BAG_POKEBALLS_COUNT 13
#define BAG_TMHM_COUNT 58
#define BAG_POKEBALLS_COUNT 27
#define BAG_TMHM_COUNT 108
#define BAG_BERRIES_COUNT 43
#define OBJECT_EVENTS_COUNT 16
#define OBJECT_EVENT_TEMPLATES_COUNT 64

View File

@@ -4,74 +4,39 @@
#define ITEM_NONE 0
// Poké Balls
#define ITEM_POKE_BALL 1
#define ITEM_GREAT_BALL 2
#define ITEM_ULTRA_BALL 3
#define ITEM_MASTER_BALL 4
#define ITEM_PREMIER_BALL 5
#define ITEM_HEAL_BALL 6
#define ITEM_NET_BALL 7
#define ITEM_MASTER_BALL 1
#define ITEM_ULTRA_BALL 2
#define ITEM_GREAT_BALL 3
#define ITEM_POKE_BALL 4
#define ITEM_SAFARI_BALL 5
#define ITEM_NET_BALL 6
#define ITEM_DIVE_BALL 7
#define ITEM_NEST_BALL 8
#define ITEM_DIVE_BALL 9
#define ITEM_DUSK_BALL 10
#define ITEM_TIMER_BALL 11
#define ITEM_QUICK_BALL 12
#define ITEM_REPEAT_BALL 13
#define ITEM_LUXURY_BALL 14
#define ITEM_LEVEL_BALL 15
#define ITEM_LURE_BALL 16
#define ITEM_MOON_BALL 17
#define ITEM_FRIEND_BALL 18
#define ITEM_LOVE_BALL 19
#define ITEM_FAST_BALL 20
#define ITEM_HEAVY_BALL 21
#define ITEM_DREAM_BALL 22
#define ITEM_SAFARI_BALL 23
#define ITEM_REPEAT_BALL 9
#define ITEM_TIMER_BALL 10
#define ITEM_LUXURY_BALL 11
#define ITEM_PREMIER_BALL 12
#define ITEM_HEAL_BALL 13
#define ITEM_DUSK_BALL 14
#define ITEM_QUICK_BALL 15
#define ITEM_LEVEL_BALL 16
#define ITEM_LURE_BALL 17
#define ITEM_MOON_BALL 18
#define ITEM_FRIEND_BALL 19
#define ITEM_LOVE_BALL 20
#define ITEM_FAST_BALL 21
#define ITEM_HEAVY_BALL 22
#define ITEM_DREAM_BALL 23
#define ITEM_SPORT_BALL 24
#define ITEM_PARK_BALL 25
#define ITEM_BEAST_BALL 26
#define ITEM_CHERISH_BALL 27 // TODO: throwing CHERISH_BALL restarts game, intended?
// Note: If moving ball IDs around, updating FIRST_BALL/LAST_BALL is not sufficient
// Several places expect the ball IDs to be first and contiguous (e.g. MON_DATA_POKEBALL)
// If adding new balls, it's easiest to insert them after the last ball and increment the below IDs (and removing ITEM_034 for example)
#define FIRST_BALL ITEM_POKE_BALL
#define LAST_BALL ITEM_CHERISH_BALL
// // Poké Balls
// #define ITEM_MASTER_BALL 1
// #define ITEM_ULTRA_BALL 2
// #define ITEM_GREAT_BALL 3
// #define ITEM_POKE_BALL 4
// #define ITEM_SAFARI_BALL 5
// #define ITEM_NET_BALL 6
// #define ITEM_DIVE_BALL 7
// #define ITEM_NEST_BALL 8
// #define ITEM_REPEAT_BALL 9
// #define ITEM_TIMER_BALL 10
// #define ITEM_LUXURY_BALL 11
// #define ITEM_PREMIER_BALL 12
// #define ITEM_HEAL_BALL 13
// #define ITEM_DUSK_BALL 14
// #define ITEM_QUICK_BALL 15
// #define ITEM_LEVEL_BALL 16
// #define ITEM_LURE_BALL 17
// #define ITEM_MOON_BALL 18
// #define ITEM_FRIEND_BALL 19
// #define ITEM_LOVE_BALL 20
// #define ITEM_FAST_BALL 21
// #define ITEM_HEAVY_BALL 22
// #define ITEM_DREAM_BALL 23
// #define ITEM_SPORT_BALL 24
// #define ITEM_PARK_BALL 25
// #define ITEM_BEAST_BALL 26
// #define ITEM_CHERISH_BALL 27
#define ITEM_CHERISH_BALL 27
// // Note: If moving ball IDs around, updating FIRST_BALL/LAST_BALL is not sufficient
// // Several places expect the ball IDs to be first and contiguous (e.g. MON_DATA_POKEBALL)
// // If adding new balls, it's easiest to insert them after the last ball and increment the below IDs (and removing ITEM_034 for example)
// #define FIRST_BALL ITEM_MASTER_BALL
// #define LAST_BALL ITEM_CHERISH_BALL
#define FIRST_BALL ITEM_MASTER_BALL
#define LAST_BALL ITEM_CHERISH_BALL
// Medicine
#define ITEM_POTION 28

View File

@@ -827,7 +827,7 @@ struct SaveBlock1
/*0x3A18*/ u8 seen2[DEX_FLAGS_NO];
/*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
/*0x3A94*/ u8 unused_3A94[64];
// /*0x3A94*/ u8 unused_3A94[64];
/*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C98*/ struct DaycareMon route5DayCareMon;

View File

@@ -3,30 +3,61 @@
#include "global.h"
// pokeballs
extern const u32 gBallGfx_Poke[];
extern const u32 gBallPal_Poke[];
extern const u32 gBallGfx_Great[];
extern const u32 gBallPal_Great[];
extern const u32 gBallGfx_Safari[];
extern const u32 gBallPal_Safari[];
extern const u32 gBallGfx_Ultra[];
extern const u32 gBallPal_Ultra[];
extern const u32 gBallGfx_Master[];
extern const u32 gBallPal_Master[];
extern const u32 gBallGfx_Net[];
extern const u32 gBallPal_Net[];
extern const u32 gBallGfx_Dive[];
extern const u32 gBallPal_Dive[];
extern const u32 gBallGfx_Nest[];
extern const u32 gBallPal_Nest[];
extern const u32 gBallGfx_Repeat[];
extern const u32 gBallPal_Repeat[];
extern const u32 gBallGfx_Timer[];
extern const u32 gBallPal_Timer[];
extern const u32 gBallGfx_Luxury[];
extern const u32 gBallPal_Luxury[];
extern const u32 gBallGfx_Premier[];
extern const u32 gBallPal_Premier[];
extern const u32 gBallGfx_Heal[];
extern const u32 gBallPal_Heal[];
extern const u32 gBallGfx_Net[];
extern const u32 gBallPal_Net[];
extern const u32 gBallGfx_Nest[];
extern const u32 gBallPal_Nest[];
extern const u32 gBallGfx_Dive[];
extern const u32 gBallPal_Dive[];
extern const u32 gBallGfx_Dusk[];
extern const u32 gBallPal_Dusk[];
extern const u32 gBallGfx_Timer[];
extern const u32 gBallPal_Timer[];
extern const u32 gBallGfx_Quick[];
extern const u32 gBallPal_Quick[];
extern const u32 gBallGfx_Repeat[];
extern const u32 gBallPal_Repeat[];
extern const u32 gBallGfx_Luxury[];
extern const u32 gBallPal_Luxury[];
extern const u32 gBallGfx_Level[];
extern const u32 gBallPal_Level[];
extern const u32 gBallGfx_Lure[];
extern const u32 gBallPal_Lure[];
extern const u32 gBallGfx_Moon[];
extern const u32 gBallPal_Moon[];
extern const u32 gBallGfx_Friend[];
extern const u32 gBallPal_Friend[];
extern const u32 gBallGfx_Love[];
extern const u32 gBallPal_Love[];
extern const u32 gBallGfx_Fast[];
extern const u32 gBallPal_Fast[];
extern const u32 gBallGfx_Heavy[];
extern const u32 gBallPal_Heavy[];
extern const u32 gBallGfx_Dream[];
extern const u32 gBallPal_Dream[];
extern const u32 gBallGfx_Safari[];
extern const u32 gBallPal_Safari[];
extern const u32 gBallGfx_Sport[];
extern const u32 gBallPal_Sport[];
extern const u32 gBallGfx_Park[];
extern const u32 gBallPal_Park[];
extern const u32 gBallGfx_Beast[];
extern const u32 gBallPal_Beast[];
extern const u32 gBallGfx_Cherish[];
extern const u32 gBallPal_Cherish[];
extern const u32 gOpenPokeballGfx[];
// pokemon gfx
@@ -4351,6 +4382,7 @@ extern const u32 gBattleAnimSpriteGfx_Smoke[];
extern const u32 gBattleAnimSpriteGfx_Smoke2[];
extern const u32 gBattleAnimSpriteGfx_Impact[];
extern const u32 gBattleAnimSpriteGfx_Particles[];
extern const u32 gBattleAnimSpriteGfx_Particles2[];
extern const u32 gBattleAnimSpriteGfx_CircleImpact[];
extern const u32 gBattleAnimSpriteGfx_Scratch[];
extern const u32 gBattleAnimSpriteGfx_Cut[];
@@ -4613,6 +4645,7 @@ extern const u32 gBattleAnimSpritePal_Tongue[];
extern const u32 gBattleAnimSpritePal_Smoke[];
extern const u32 gBattleAnimSpritePal_Impact[];
extern const u32 gBattleAnimSpritePal_CircleImpact[];
extern const u32 gBattleAnimSpritePal_Particles2[];
extern const u32 gBattleAnimSpritePal_SharpTeeth[];
extern const u32 gBattleAnimSpritePal_RainbowRings[];
extern const u32 gBattleAnimSpritePal_IceCrystals[];

View File

@@ -93,6 +93,12 @@ u8 CountItemsInPC(void);
void ApplyNewEncryptionKeyToBagItems_(u32 newKey);
bool8 HasAtLeastOneBerry(void);
bool8 IsItemTM(u16 itemId);
bool8 IsItemHM(u16 itemId);
bool8 IsItemTMHM(u16 itemId);
bool8 IsItemBall(u16 itemId);
const u8 *ItemId_GetEffect(u32 itemId);
u32 GetItemStatus1Mask(u16 itemId);
u32 GetItemStatus2Mask(u16 itemId);

View File

@@ -5,18 +5,34 @@
enum
{
BALL_POKE,
BALL_GREAT,
BALL_SAFARI,
BALL_ULTRA,
BALL_MASTER,
BALL_NET,
BALL_DIVE,
BALL_NEST,
BALL_REPEAT,
BALL_TIMER,
BALL_LUXURY,
BALL_PREMIER,
BALL_HEAL,
BALL_NET,
BALL_NEST,
BALL_DIVE,
BALL_DUSK,
BALL_TIMER,
BALL_QUICK,
BALL_REPEAT,
BALL_LUXURY,
BALL_LEVEL,
BALL_LURE,
BALL_MOON,
BALL_FRIEND,
BALL_LOVE,
BALL_FAST,
BALL_HEAVY,
BALL_DREAM,
BALL_SAFARI,
BALL_SPORT,
BALL_PARK,
BALL_BEAST,
BALL_CHERISH,
POKEBALL_COUNT
};

View File

@@ -17,18 +17,33 @@
#include "constants/moves.h"
#include "constants/songs.h"
#define TAG_PARTICLES_POKEBALL 55020
#define TAG_PARTICLES_GREATBALL 55021
#define TAG_PARTICLES_SAFARIBALL 55022
#define TAG_PARTICLES_ULTRABALL 55023
#define TAG_PARTICLES_MASTERBALL 55024
#define TAG_PARTICLES_NETBALL 55025
#define TAG_PARTICLES_DIVEBALL 55026
#define TAG_PARTICLES_NESTBALL 55027
#define TAG_PARTICLES_REPEATBALL 55028
#define TAG_PARTICLES_TIMERBALL 55029
#define TAG_PARTICLES_LUXURYBALL 55030
#define TAG_PARTICLES_PREMIERBALL 55031
#define TAG_PARTICLES_POKEBALL 65030
#define TAG_PARTICLES_GREATBALL 65031
#define TAG_PARTICLES_ULTRABALL 65032
#define TAG_PARTICLES_MASTERBALL 65033
#define TAG_PARTICLES_PREMIERBALL 65034
#define TAG_PARTICLES_HEALBALL 65035
#define TAG_PARTICLES_NETBALL 65036
#define TAG_PARTICLES_NESTBALL 65037
#define TAG_PARTICLES_DIVEBALL 65038
#define TAG_PARTICLES_DUSKBALL 65039
#define TAG_PARTICLES_TIMERBALL 65040
#define TAG_PARTICLES_QUICKBALL 65041
#define TAG_PARTICLES_REPEATBALL 65042
#define TAG_PARTICLES_LUXURYBALL 65043
#define TAG_PARTICLES_LEVELBALL 65044
#define TAG_PARTICLES_LUREBALL 65045
#define TAG_PARTICLES_MOONBALL 65046
#define TAG_PARTICLES_FRIENDBALL 65047
#define TAG_PARTICLES_LOVEBALL 65048
#define TAG_PARTICLES_FASTBALL 65049
#define TAG_PARTICLES_HEAVYBALL 65050
#define TAG_PARTICLES_DREAMBALL 65051
#define TAG_PARTICLES_SAFARIBALL 65052
#define TAG_PARTICLES_SPORTBALL 65053
#define TAG_PARTICLES_PARKBALL 65054
#define TAG_PARTICLES_BEASTBALL 65055
#define TAG_PARTICLES_CHERISHBALL 65056
u32 gMonShrinkDuration;
u16 gMonShrinkDelta;
@@ -116,34 +131,64 @@ static const struct CaptureStar sCaptureStar[] =
const struct CompressedSpriteSheet gBallParticleSpritesheets[] =
{
[BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL},
[BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL},
[BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL},
[BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL},
[BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL},
[BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL},
[BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL},
[BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL},
[BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL},
[BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL},
[BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL},
[BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL},
[BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL},
[BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL},
[BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL},
[BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL},
[BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL},
[BALL_HEAL] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_HEALBALL},
[BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL},
[BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL},
[BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL},
[BALL_DUSK] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_DUSKBALL},
[BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL},
[BALL_QUICK] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_QUICKBALL},
[BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL},
[BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL},
[BALL_LEVEL] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_LEVELBALL},
[BALL_LURE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUREBALL},
[BALL_MOON] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_MOONBALL},
[BALL_FRIEND] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_FRIENDBALL},
[BALL_LOVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LOVEBALL},
[BALL_FAST] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_FASTBALL},
[BALL_HEAVY] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_HEAVYBALL},
[BALL_DREAM] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DREAMBALL},
[BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL},
[BALL_SPORT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SPORTBALL},
[BALL_PARK] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PARKBALL},
[BALL_BEAST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_BEASTBALL},
[BALL_CHERISH] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_CHERISHBALL},
};
const struct CompressedSpritePalette gBallParticlePalettes[] =
{
[BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL},
[BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL},
[BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL},
[BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL},
[BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL},
[BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL},
[BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL},
[BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL},
[BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL},
[BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL},
[BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL},
[BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL},
[BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL},
[BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL},
[BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL},
[BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL},
[BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL},
[BALL_HEAL] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_HEALBALL},
[BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL},
[BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL},
[BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL},
[BALL_DUSK] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_DUSKBALL},
[BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL},
[BALL_QUICK] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_QUICKBALL},
[BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL},
[BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL},
[BALL_LEVEL] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_LEVELBALL},
[BALL_LURE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUREBALL},
[BALL_MOON] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_MOONBALL},
[BALL_FRIEND] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_FRIENDBALL},
[BALL_LOVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LOVEBALL},
[BALL_FAST] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_FASTBALL},
[BALL_HEAVY] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_HEAVYBALL},
[BALL_DREAM] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DREAMBALL},
[BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL},
[BALL_SPORT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SPORTBALL},
[BALL_PARK] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PARKBALL},
[BALL_BEAST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_BEASTBALL},
[BALL_CHERISH] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_CHERISHBALL},
};
static const union AnimCmd sAnim_RegularBall[] =
@@ -198,39 +243,70 @@ static const union AnimCmd *const sAnims_BallParticles[] =
sAnim_UltraRepeatTimerBall,
};
static const u8 sBallParticleAnimNums[] =
static const u8 sBallParticleAnimNums[POKEBALL_COUNT] =
{
[BALL_POKE] = 0,
[BALL_GREAT] = 0,
[BALL_SAFARI] = 0,
[BALL_ULTRA] = 5,
[BALL_MASTER] = 1,
[BALL_NET] = 2,
[BALL_DIVE] = 2,
[BALL_NEST] = 3,
[BALL_REPEAT] = 5,
[BALL_TIMER] = 5,
[BALL_LUXURY] = 4,
[BALL_PREMIER] = 4,
[BALL_HEAL] = 0,
[BALL_NET] = 2,
[BALL_NEST] = 3,
[BALL_DIVE] = 2,
[BALL_DUSK] = 2,
[BALL_TIMER] = 5,
[BALL_QUICK] = 4,
[BALL_REPEAT] = 5,
[BALL_LUXURY] = 4,
[BALL_LEVEL] = 5,
[BALL_LURE] = 2,
[BALL_MOON] = 4,
[BALL_FRIEND] = 3,
[BALL_LOVE] = 3,
[BALL_FAST] = 4,
[BALL_HEAVY] = 0,
[BALL_DREAM] = 5,
[BALL_SAFARI] = 0,
[BALL_SPORT] = 0,
[BALL_PARK] = 5,
[BALL_BEAST] = 5,
[BALL_CHERISH] = 0,
};
static const TaskFunc sBallParticleAnimationFuncs[] =
{
// Todo: assign and possibly create different particles
[BALL_POKE] = PokeBallOpenParticleAnimation,
[BALL_GREAT] = GreatBallOpenParticleAnimation,
[BALL_SAFARI] = SafariBallOpenParticleAnimation,
[BALL_ULTRA] = UltraBallOpenParticleAnimation,
[BALL_MASTER] = MasterBallOpenParticleAnimation,
[BALL_NET] = SafariBallOpenParticleAnimation,
[BALL_DIVE] = DiveBallOpenParticleAnimation,
[BALL_NEST] = UltraBallOpenParticleAnimation,
[BALL_REPEAT] = RepeatBallOpenParticleAnimation,
[BALL_TIMER] = TimerBallOpenParticleAnimation,
[BALL_LUXURY] = GreatBallOpenParticleAnimation,
[BALL_PREMIER] = PremierBallOpenParticleAnimation,
[BALL_HEAL] = PokeBallOpenParticleAnimation,
[BALL_NET] = SafariBallOpenParticleAnimation,
[BALL_NEST] = UltraBallOpenParticleAnimation,
[BALL_DIVE] = DiveBallOpenParticleAnimation,
[BALL_DUSK] = UltraBallOpenParticleAnimation,
[BALL_TIMER] = TimerBallOpenParticleAnimation,
[BALL_QUICK] = UltraBallOpenParticleAnimation,
[BALL_REPEAT] = RepeatBallOpenParticleAnimation,
[BALL_LUXURY] = GreatBallOpenParticleAnimation,
[BALL_LEVEL] = SafariBallOpenParticleAnimation,
[BALL_LURE] = GreatBallOpenParticleAnimation,
[BALL_MOON] = UltraBallOpenParticleAnimation,
[BALL_FRIEND] = UltraBallOpenParticleAnimation,
[BALL_LOVE] = GreatBallOpenParticleAnimation,
[BALL_FAST] = GreatBallOpenParticleAnimation,
[BALL_HEAVY] = GreatBallOpenParticleAnimation,
[BALL_DREAM] = UltraBallOpenParticleAnimation,
[BALL_SAFARI] = SafariBallOpenParticleAnimation,
[BALL_SPORT] = UltraBallOpenParticleAnimation,
[BALL_PARK] = UltraBallOpenParticleAnimation,
[BALL_BEAST] = UltraBallOpenParticleAnimation,
[BALL_CHERISH] = MasterBallOpenParticleAnimation,
};
static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
static const struct SpriteTemplate sBallParticlesSpriteTemplates[POKEBALL_COUNT] =
{
[BALL_POKE] = {
.tileTag = TAG_PARTICLES_POKEBALL,
@@ -250,15 +326,6 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_SAFARI] = {
.tileTag = TAG_PARTICLES_SAFARIBALL,
.paletteTag = TAG_PARTICLES_SAFARIBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_ULTRA] = {
.tileTag = TAG_PARTICLES_ULTRABALL,
.paletteTag = TAG_PARTICLES_ULTRABALL,
@@ -277,18 +344,27 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_NET] = {
.tileTag = TAG_PARTICLES_NETBALL,
.paletteTag = TAG_PARTICLES_NETBALL,
[BALL_PREMIER] = {
.tileTag = TAG_PARTICLES_PREMIERBALL,
.paletteTag = TAG_PARTICLES_PREMIERBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_DIVE] = {
.tileTag = TAG_PARTICLES_DIVEBALL,
.paletteTag = TAG_PARTICLES_DIVEBALL,
[BALL_HEAL] = {
.tileTag = TAG_PARTICLES_HEALBALL,
.paletteTag = TAG_PARTICLES_HEALBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_NET] = {
.tileTag = TAG_PARTICLES_NETBALL,
.paletteTag = TAG_PARTICLES_NETBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
@@ -304,9 +380,18 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_REPEAT] = {
.tileTag = TAG_PARTICLES_REPEATBALL,
.paletteTag = TAG_PARTICLES_REPEATBALL,
[BALL_DIVE] = {
.tileTag = TAG_PARTICLES_DIVEBALL,
.paletteTag = TAG_PARTICLES_DIVEBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_DUSK] = {
.tileTag = TAG_PARTICLES_DUSKBALL,
.paletteTag = TAG_PARTICLES_DUSKBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
@@ -322,6 +407,24 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_QUICK] = {
.tileTag = TAG_PARTICLES_QUICKBALL,
.paletteTag = TAG_PARTICLES_QUICKBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_REPEAT] = {
.tileTag = TAG_PARTICLES_REPEATBALL,
.paletteTag = TAG_PARTICLES_REPEATBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_LUXURY] = {
.tileTag = TAG_PARTICLES_LUXURYBALL,
.paletteTag = TAG_PARTICLES_LUXURYBALL,
@@ -331,9 +434,117 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_PREMIER] = {
.tileTag = TAG_PARTICLES_PREMIERBALL,
.paletteTag = TAG_PARTICLES_PREMIERBALL,
[BALL_LEVEL] = {
.tileTag = TAG_PARTICLES_LEVELBALL,
.paletteTag = TAG_PARTICLES_LEVELBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_LURE] = {
.tileTag = TAG_PARTICLES_LUREBALL,
.paletteTag = TAG_PARTICLES_LUREBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_MOON] = {
.tileTag = TAG_PARTICLES_MOONBALL,
.paletteTag = TAG_PARTICLES_MOONBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_FRIEND] = {
.tileTag = TAG_PARTICLES_FRIENDBALL,
.paletteTag = TAG_PARTICLES_FRIENDBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_LOVE] = {
.tileTag = TAG_PARTICLES_LOVEBALL,
.paletteTag = TAG_PARTICLES_LOVEBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_FAST] = {
.tileTag = TAG_PARTICLES_FASTBALL,
.paletteTag = TAG_PARTICLES_FASTBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_HEAVY] = {
.tileTag = TAG_PARTICLES_HEAVYBALL,
.paletteTag = TAG_PARTICLES_HEAVYBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_DREAM] = {
.tileTag = TAG_PARTICLES_DREAMBALL,
.paletteTag = TAG_PARTICLES_DREAMBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_SAFARI] = {
.tileTag = TAG_PARTICLES_SAFARIBALL,
.paletteTag = TAG_PARTICLES_SAFARIBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_SPORT] = {
.tileTag = TAG_PARTICLES_SPORTBALL,
.paletteTag = TAG_PARTICLES_SPORTBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_PARK] = {
.tileTag = TAG_PARTICLES_PARKBALL,
.paletteTag = TAG_PARTICLES_PARKBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_BEAST] = {
.tileTag = TAG_PARTICLES_BEASTBALL,
.paletteTag = TAG_PARTICLES_BEASTBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
[BALL_CHERISH] = {
.tileTag = TAG_PARTICLES_CHERISHBALL,
.paletteTag = TAG_PARTICLES_CHERISHBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
@@ -344,28 +555,34 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] =
static const u16 sBallOpenFadeColors[] =
{
[BALL_POKE] = RGB(31, 22, 30),
[BALL_GREAT] = RGB(16, 23, 30),
[BALL_SAFARI] = RGB(23, 30, 20),
[BALL_ULTRA] = RGB(31, 31, 15),
[BALL_MASTER] = RGB(23, 20, 28),
[BALL_NET] = RGB(21, 31, 25),
[BALL_DIVE] = RGB(12, 25, 30),
[BALL_NEST] = RGB(30, 27, 10),
[BALL_REPEAT] = RGB(31, 24, 16),
[BALL_TIMER] = RGB(29, 30, 30),
[BALL_LUXURY] = RGB(31, 17, 10),
// Todo, assign different colors
[BALL_POKE] = RGB(31, 22, 30),
[BALL_GREAT] = RGB(16, 23, 30),
[BALL_ULTRA] = RGB(31, 31, 15),
[BALL_MASTER] = RGB(23, 20, 28),
[BALL_PREMIER] = RGB(31, 9, 10),
// Unused
RGB_BLACK,
RGB(1, 16, 0),
RGB(3, 0, 1),
RGB(1, 8, 0),
RGB(0, 8, 0),
RGB(3, 8, 1),
RGB(6, 8, 1),
RGB(4, 0, 0),
[BALL_HEAL] = RGB(31, 23, 27),
[BALL_NET] = RGB(21, 31, 25),
[BALL_NEST] = RGB(30, 27, 10),
[BALL_DIVE] = RGB(12, 25, 30),
[BALL_DUSK] = RGB(7, 1, 13),
[BALL_TIMER] = RGB(29, 30, 30),
[BALL_QUICK] = RGB(16, 25, 30),
[BALL_REPEAT] = RGB(31, 24, 16),
[BALL_LUXURY] = RGB(31, 17, 10),
[BALL_LEVEL] = RGB(24, 4, 4),
[BALL_LURE] = RGB(9, 22, 27),
[BALL_MOON] = RGB(30, 25, 8),
[BALL_FRIEND] = RGB(17, 24, 7),
[BALL_LOVE] = RGB(31, 19, 26),
[BALL_FAST] = RGB(29, 17, 8),
[BALL_HEAVY] = RGB(7, 11, 20),
[BALL_DREAM] = RGB(31, 31, 15),
[BALL_SAFARI] = RGB(23, 30, 20),
[BALL_SPORT] = RGB(31, 31, 15),
[BALL_PARK] = RGB(31, 31, 15),
[BALL_BEAST] = RGB(31, 31, 15),
[BALL_CHERISH] = RGB(25, 4, 3),
};
const struct SpriteTemplate gSafariBaitSpriteTemplate =
@@ -703,29 +920,60 @@ u8 ItemIdToBallId(u16 ballItem)
{
switch (ballItem)
{
case ITEM_MASTER_BALL:
return BALL_MASTER;
case ITEM_ULTRA_BALL:
return BALL_ULTRA;
case ITEM_POKE_BALL:
return BALL_POKE;
case ITEM_GREAT_BALL:
return BALL_GREAT;
case ITEM_SAFARI_BALL:
return BALL_SAFARI;
case ITEM_NET_BALL:
return BALL_NET;
case ITEM_DIVE_BALL:
return BALL_DIVE;
case ITEM_NEST_BALL:
return BALL_NEST;
case ITEM_REPEAT_BALL:
return BALL_REPEAT;
case ITEM_TIMER_BALL:
return BALL_TIMER;
case ITEM_LUXURY_BALL:
return BALL_LUXURY;
case ITEM_ULTRA_BALL:
return BALL_ULTRA;
case ITEM_MASTER_BALL:
return BALL_MASTER;
case ITEM_PREMIER_BALL:
return BALL_PREMIER;
case ITEM_POKE_BALL:
case ITEM_HEAL_BALL:
return BALL_HEAL;
case ITEM_NET_BALL:
return BALL_NET;
case ITEM_NEST_BALL:
return BALL_NEST;
case ITEM_DIVE_BALL:
return BALL_DIVE;
case ITEM_DUSK_BALL:
return BALL_DUSK;
case ITEM_TIMER_BALL:
return BALL_TIMER;
case ITEM_QUICK_BALL:
return BALL_QUICK;
case ITEM_REPEAT_BALL:
return BALL_REPEAT;
case ITEM_LUXURY_BALL:
return BALL_LUXURY;
case ITEM_LEVEL_BALL:
return BALL_LEVEL;
case ITEM_LURE_BALL:
return BALL_LURE;
case ITEM_MOON_BALL:
return BALL_MOON;
case ITEM_FRIEND_BALL:
return BALL_FRIEND;
case ITEM_LOVE_BALL:
return BALL_LOVE;
case ITEM_FAST_BALL:
return BALL_FAST;
case ITEM_HEAVY_BALL:
return BALL_HEAVY;
case ITEM_DREAM_BALL:
return BALL_DREAM;
case ITEM_SAFARI_BALL:
return BALL_SAFARI;
case ITEM_SPORT_BALL:
return BALL_SPORT;
case ITEM_PARK_BALL:
return BALL_PARK;
case ITEM_BEAST_BALL:
return BALL_BEAST;
case ITEM_CHERISH_BALL:
return BALL_CHERISH;
default:
return BALL_POKE;
}

View File

@@ -208,7 +208,7 @@ static void HandleInputChooseAction(u32 battler)
if (gBattleResources->bufferA[battler][1] == B_ACTION_USE_ITEM)
{
// Add item to bag if it is a ball
if (itemId <= ITEM_PREMIER_BALL)
if (IsItemBall(itemId))
AddBagItem(itemId, 1);
else
return;

View File

@@ -4437,7 +4437,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
break;
case ABILITY_BALL_FETCH:
if (gBattleMons[battler].item == ITEM_NONE
&& gBattleResults.catchAttempts[gLastUsedBall - ITEM_ULTRA_BALL] >= 1
&& gBattleResults.catchAttempts[gLastUsedBall - FIRST_BALL] >= 1
&& !gHasFetchedBall)
{
gBattleScripting.battler = battler;
@@ -9746,7 +9746,7 @@ u8 GetCategoryBasedOnStats(u32 battler)
static u32 GetFlingPowerFromItemId(u32 itemId)
{
if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08)
if (IsItemTMHM(itemId))
{
u32 power = gMovesInfo[ItemIdToBattleMoveId(itemId)].power;
if (power > 1)

View File

@@ -1,37 +1,82 @@
const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/interface/ball/poke.4bpp.lz");
const u32 gBallPal_Poke[] = INCBIN_U32("graphics/interface/ball/poke.gbapal.lz");
const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/balls/poke.4bpp.lz");
const u32 gBallPal_Poke[] = INCBIN_U32("graphics/balls/poke.gbapal.lz");
const u32 gBallGfx_Great[] = INCBIN_U32("graphics/interface/ball/great.4bpp.lz");
const u32 gBallPal_Great[] = INCBIN_U32("graphics/interface/ball/great.gbapal.lz");
const u32 gBallGfx_Great[] = INCBIN_U32("graphics/balls/great.4bpp.lz");
const u32 gBallPal_Great[] = INCBIN_U32("graphics/balls/great.gbapal.lz");
const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/interface/ball/safari.4bpp.lz");
const u32 gBallPal_Safari[] = INCBIN_U32("graphics/interface/ball/safari.gbapal.lz");
const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/balls/ultra.4bpp.lz");
const u32 gBallPal_Ultra[] = INCBIN_U32("graphics/balls/ultra.gbapal.lz");
const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/interface/ball/ultra.4bpp.lz");
const u32 gBallPal_Ultra[] = INCBIN_U32("graphics/interface/ball/ultra.gbapal.lz");
const u32 gBallGfx_Master[] = INCBIN_U32("graphics/balls/master.4bpp.lz");
const u32 gBallPal_Master[] = INCBIN_U32("graphics/balls/master.gbapal.lz");
const u32 gBallGfx_Master[] = INCBIN_U32("graphics/interface/ball/master.4bpp.lz");
const u32 gBallPal_Master[] = INCBIN_U32("graphics/interface/ball/master.gbapal.lz");
const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/balls/premier.4bpp.lz");
const u32 gBallPal_Premier[] = INCBIN_U32("graphics/balls/premier.gbapal.lz");
const u32 gBallGfx_Net[] = INCBIN_U32("graphics/interface/ball/net.4bpp.lz");
const u32 gBallPal_Net[] = INCBIN_U32("graphics/interface/ball/net.gbapal.lz");
const u32 gBallGfx_Heal[] = INCBIN_U32("graphics/balls/heal.4bpp.lz");
const u32 gBallPal_Heal[] = INCBIN_U32("graphics/balls/heal.gbapal.lz");
const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/interface/ball/dive.4bpp.lz");
const u32 gBallPal_Dive[] = INCBIN_U32("graphics/interface/ball/dive.gbapal.lz");
const u32 gBallGfx_Net[] = INCBIN_U32("graphics/balls/net.4bpp.lz");
const u32 gBallPal_Net[] = INCBIN_U32("graphics/balls/net.gbapal.lz");
const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/interface/ball/nest.4bpp.lz");
const u32 gBallPal_Nest[] = INCBIN_U32("graphics/interface/ball/nest.gbapal.lz");
const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/balls/nest.4bpp.lz");
const u32 gBallPal_Nest[] = INCBIN_U32("graphics/balls/nest.gbapal.lz");
const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/interface/ball/repeat.4bpp.lz");
const u32 gBallPal_Repeat[] = INCBIN_U32("graphics/interface/ball/repeat.gbapal.lz");
const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/balls/dive.4bpp.lz");
const u32 gBallPal_Dive[] = INCBIN_U32("graphics/balls/dive.gbapal.lz");
const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/interface/ball/timer.4bpp.lz");
const u32 gBallPal_Timer[] = INCBIN_U32("graphics/interface/ball/timer.gbapal.lz");
const u32 gBallGfx_Dusk[] = INCBIN_U32("graphics/balls/dusk.4bpp.lz");
const u32 gBallPal_Dusk[] = INCBIN_U32("graphics/balls/dusk.gbapal.lz");
const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/interface/ball/luxury.4bpp.lz");
const u32 gBallPal_Luxury[] = INCBIN_U32("graphics/interface/ball/luxury.gbapal.lz");
const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/balls/timer.4bpp.lz");
const u32 gBallPal_Timer[] = INCBIN_U32("graphics/balls/timer.gbapal.lz");
const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/interface/ball/premier.4bpp.lz");
const u32 gBallPal_Premier[] = INCBIN_U32("graphics/interface/ball/premier.gbapal.lz");
const u32 gBallGfx_Quick[] = INCBIN_U32("graphics/balls/quick.4bpp.lz");
const u32 gBallPal_Quick[] = INCBIN_U32("graphics/balls/quick.gbapal.lz");
const u32 gOpenPokeballGfx[] = INCBIN_U32("graphics/interface/ball_open.4bpp.lz");
const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/balls/repeat.4bpp.lz");
const u32 gBallPal_Repeat[] = INCBIN_U32("graphics/balls/repeat.gbapal.lz");
const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/balls/luxury.4bpp.lz");
const u32 gBallPal_Luxury[] = INCBIN_U32("graphics/balls/luxury.gbapal.lz");
const u32 gBallGfx_Level[] = INCBIN_U32("graphics/balls/level.4bpp.lz");
const u32 gBallPal_Level[] = INCBIN_U32("graphics/balls/level.gbapal.lz");
const u32 gBallGfx_Lure[] = INCBIN_U32("graphics/balls/lure.4bpp.lz");
const u32 gBallPal_Lure[] = INCBIN_U32("graphics/balls/lure.gbapal.lz");
const u32 gBallGfx_Moon[] = INCBIN_U32("graphics/balls/moon.4bpp.lz");
const u32 gBallPal_Moon[] = INCBIN_U32("graphics/balls/moon.gbapal.lz");
const u32 gBallGfx_Friend[] = INCBIN_U32("graphics/balls/friend.4bpp.lz");
const u32 gBallPal_Friend[] = INCBIN_U32("graphics/balls/friend.gbapal.lz");
const u32 gBallGfx_Love[] = INCBIN_U32("graphics/balls/love.4bpp.lz");
const u32 gBallPal_Love[] = INCBIN_U32("graphics/balls/love.gbapal.lz");
const u32 gBallGfx_Fast[] = INCBIN_U32("graphics/balls/fast.4bpp.lz");
const u32 gBallPal_Fast[] = INCBIN_U32("graphics/balls/fast.gbapal.lz");
const u32 gBallGfx_Heavy[] = INCBIN_U32("graphics/balls/heavy.4bpp.lz");
const u32 gBallPal_Heavy[] = INCBIN_U32("graphics/balls/heavy.gbapal.lz");
const u32 gBallGfx_Dream[] = INCBIN_U32("graphics/balls/dream.4bpp.lz");
const u32 gBallPal_Dream[] = INCBIN_U32("graphics/balls/dream.gbapal.lz");
const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/balls/safari.4bpp.lz");
const u32 gBallPal_Safari[] = INCBIN_U32("graphics/balls/safari.gbapal.lz");
const u32 gBallGfx_Sport[] = INCBIN_U32("graphics/balls/sport.4bpp.lz");
const u32 gBallPal_Sport[] = INCBIN_U32("graphics/balls/sport.gbapal.lz");
const u32 gBallGfx_Park[] = INCBIN_U32("graphics/balls/park.4bpp.lz");
const u32 gBallPal_Park[] = INCBIN_U32("graphics/balls/park.gbapal.lz");
const u32 gBallGfx_Beast[] = INCBIN_U32("graphics/balls/beast.4bpp.lz");
const u32 gBallPal_Beast[] = INCBIN_U32("graphics/balls/beast.gbapal.lz");
const u32 gBallGfx_Cherish[] = INCBIN_U32("graphics/balls/cherish.4bpp.lz");
const u32 gBallPal_Cherish[] = INCBIN_U32("graphics/balls/cherish.gbapal.lz");
const u32 gOpenPokeballGfx[] = INCBIN_U32("graphics/balls/open.4bpp.lz");

View File

@@ -381,7 +381,7 @@ const struct Item gItems[] =
[ITEM_MOON_BALL] =
{
.name = _("Moon Ball"),
.price = (I_PRICE >= GEN_7) ? 0 : 300,
.price = (I_PRICE >= GEN_7) ? 2 : 2,
.description = COMPOUND_STRING(
"A Ball that works\n"
"well on Moon\n"
@@ -524,7 +524,7 @@ const struct Item gItems[] =
[ITEM_CHERISH_BALL] =
{
.name = _("Cherish Ball"),
.price = 0,
.price = 2,
.description = COMPOUND_STRING(
"A rare Ball made\n"
"in commemoration\n"

View File

@@ -18,6 +18,7 @@
#include "field_camera.h"
#include "field_effect.h"
#include "event_object_movement.h"
#include "item.h"
#include "menu_indicators.h"
#include "random.h"
#include "mail_data.h"
@@ -2075,7 +2076,7 @@ bool8 UsedPokemonCenterWarp(void)
bool8 BufferTMHMMoveName(void)
{
// 8004 = item ID
if (gSpecialVar_0x8004 >= ITEM_TM01 && gSpecialVar_0x8004 <= ITEM_HM08)
if (IsItemTMHM(gSpecialVar_0x8004))
{
StringCopy(gStringVar1, gMovesInfo[ItemIdToBattleMoveId(gSpecialVar_0x8004)].name);
return TRUE;

View File

@@ -464,6 +464,9 @@ const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/spri
const u32 gBattleAnimSpriteGfx_Particles[] = INCBIN_U32("graphics/battle_anims/sprites/particles.4bpp.lz");
const u32 gBattleAnimSpriteGfx_Particles2[] = INCBIN_U32("graphics/battle_anims/sprites/particles2.4bpp.lz");
const u32 gBattleAnimSpritePal_Particles2[] = INCBIN_U32("graphics/battle_anims/sprites/particles2.gbapal.lz");
const u32 gBattleAnimSpriteGfx_CircleImpact[] = INCBIN_U32("graphics/battle_anims/sprites/circle_impact.4bpp.lz");
const u32 gBattleAnimSpritePal_CircleImpact[] = INCBIN_U32("graphics/battle_anims/sprites/circle_impact.gbapal.lz");

View File

@@ -744,3 +744,26 @@ u32 GetItemStatus2Mask(u16 itemId)
else
return 0;
}
bool8 IsItemTM(u16 itemId)
{
itemId = SanitizeItemId(itemId);
return ITEM_TM01 <= itemId && itemId <= ITEM_TM100;
}
bool8 IsItemHM(u16 itemId)
{
itemId = SanitizeItemId(itemId);
return ITEM_HM01 <= itemId && itemId <= ITEM_HM08;
}
bool8 IsItemTMHM(u16 itemId)
{
return IsItemTM(itemId) || IsItemHM(itemId);
}
bool8 IsItemBall(u16 itemId)
{
itemId = SanitizeItemId(itemId);
return FIRST_BALL <= itemId && itemId <= LAST_BALL;
}

View File

@@ -1885,7 +1885,7 @@ static void CreateNidoranFSprite(u8 taskId)
u8 spriteId;
LoadSpecialPokePic(MonSpritesGfxManager_GetSpritePtr(0), INTRO_SPECIES, 0, TRUE);
LoadCompressedSpritePaletteUsingHeapWithTag(GetMonSpritePalFromSpeciesAndPersonality(INTRO_SPECIES, 0, SHINY_ODDS), INTRO_SPECIES);
LoadCompressedSpritePaletteUsingHeapWithTag(GetMonSpritePalFromSpeciesAndPersonality(INTRO_SPECIES, 0, 0), INTRO_SPECIES);
SetMultiuseSpriteTemplateToPokemon(INTRO_SPECIES, 0);
spriteId = CreateSprite(&gMultiuseSpriteTemplate, 96, 96, 1);
gSprites[spriteId].callback = SpriteCallbackDummy;

View File

@@ -5178,7 +5178,7 @@ static void Task_LearnedMove(u8 taskId)
if (learnMoveMethod == LEARN_VIA_TMHM)
{
AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM);
if (item < ITEM_HM01)
if (!ItemId_GetImportance(item))
RemoveBagItem(item, 1);
}
GetMonNickname(mon, gStringVar1);

View File

@@ -45,47 +45,92 @@ static u16 GetBattlerPokeballItemId(u8 battlerId);
#define GFX_TAG_POKE_BALL 55000
#define GFX_TAG_GREAT_BALL 55001
#define GFX_TAG_SAFARI_BALL 55002
#define GFX_TAG_ULTRA_BALL 55003
#define GFX_TAG_MASTER_BALL 55004
#define GFX_TAG_NET_BALL 55005
#define GFX_TAG_DIVE_BALL 55006
#define GFX_TAG_ULTRA_BALL 55002
#define GFX_TAG_MASTER_BALL 55003
#define GFX_TAG_PREMIER_BALL 55004
#define GFX_TAG_HEAL_BALL 55005
#define GFX_TAG_NET_BALL 55006
#define GFX_TAG_NEST_BALL 55007
#define GFX_TAG_REPEAT_BALL 55008
#define GFX_TAG_TIMER_BALL 55009
#define GFX_TAG_LUXURY_BALL 55010
#define GFX_TAG_PREMIER_BALL 55011
#define GFX_TAG_DIVE_BALL 55008
#define GFX_TAG_DUSK_BALL 55009
#define GFX_TAG_TIMER_BALL 55010
#define GFX_TAG_QUICK_BALL 55011
#define GFX_TAG_REPEAT_BALL 55012
#define GFX_TAG_LUXURY_BALL 55013
#define GFX_TAG_LEVEL_BALL 55014
#define GFX_TAG_LURE_BALL 55015
#define GFX_TAG_MOON_BALL 55016
#define GFX_TAG_FRIEND_BALL 55017
#define GFX_TAG_LOVE_BALL 55018
#define GFX_TAG_FAST_BALL 55019
#define GFX_TAG_HEAVY_BALL 55020
#define GFX_TAG_DREAM_BALL 55021
#define GFX_TAG_SAFARI_BALL 55022
#define GFX_TAG_SPORT_BALL 55023
#define GFX_TAG_PARK_BALL 55024
#define GFX_TAG_BEAST_BALL 55025
#define GFX_TAG_CHERISH_BALL 55026
const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] =
{
[BALL_POKE] = {gBallGfx_Poke, 384, GFX_TAG_POKE_BALL},
[BALL_GREAT] = {gBallGfx_Great, 384, GFX_TAG_GREAT_BALL},
[BALL_SAFARI] = {gBallGfx_Safari, 384, GFX_TAG_SAFARI_BALL},
[BALL_ULTRA] = {gBallGfx_Ultra, 384, GFX_TAG_ULTRA_BALL},
[BALL_MASTER] = {gBallGfx_Master, 384, GFX_TAG_MASTER_BALL},
[BALL_NET] = {gBallGfx_Net, 384, GFX_TAG_NET_BALL},
[BALL_DIVE] = {gBallGfx_Dive, 384, GFX_TAG_DIVE_BALL},
[BALL_NEST] = {gBallGfx_Nest, 384, GFX_TAG_NEST_BALL},
[BALL_REPEAT] = {gBallGfx_Repeat, 384, GFX_TAG_REPEAT_BALL},
[BALL_TIMER] = {gBallGfx_Timer, 384, GFX_TAG_TIMER_BALL},
[BALL_LUXURY] = {gBallGfx_Luxury, 384, GFX_TAG_LUXURY_BALL},
[BALL_PREMIER] = {gBallGfx_Premier, 384, GFX_TAG_PREMIER_BALL},
[BALL_HEAL] = {gBallGfx_Heal, 384, GFX_TAG_HEAL_BALL},
[BALL_NET] = {gBallGfx_Net, 384, GFX_TAG_NET_BALL},
[BALL_NEST] = {gBallGfx_Nest, 384, GFX_TAG_NEST_BALL},
[BALL_DIVE] = {gBallGfx_Dive, 384, GFX_TAG_DIVE_BALL},
[BALL_DUSK] = {gBallGfx_Dusk, 384, GFX_TAG_DUSK_BALL},
[BALL_TIMER] = {gBallGfx_Timer, 384, GFX_TAG_TIMER_BALL},
[BALL_QUICK] = {gBallGfx_Quick, 384, GFX_TAG_QUICK_BALL},
[BALL_REPEAT] = {gBallGfx_Repeat, 384, GFX_TAG_REPEAT_BALL},
[BALL_LUXURY] = {gBallGfx_Luxury, 384, GFX_TAG_LUXURY_BALL},
[BALL_LEVEL] = {gBallGfx_Level, 384, GFX_TAG_LEVEL_BALL},
[BALL_LURE] = {gBallGfx_Lure, 384, GFX_TAG_LURE_BALL},
[BALL_MOON] = {gBallGfx_Moon, 384, GFX_TAG_MOON_BALL},
[BALL_FRIEND] = {gBallGfx_Friend, 384, GFX_TAG_FRIEND_BALL},
[BALL_LOVE] = {gBallGfx_Love, 384, GFX_TAG_LOVE_BALL},
[BALL_FAST] = {gBallGfx_Fast, 384, GFX_TAG_FAST_BALL},
[BALL_HEAVY] = {gBallGfx_Heavy, 384, GFX_TAG_HEAVY_BALL},
[BALL_DREAM] = {gBallGfx_Dream, 384, GFX_TAG_DREAM_BALL},
[BALL_SAFARI] = {gBallGfx_Safari, 384, GFX_TAG_SAFARI_BALL},
[BALL_SPORT] = {gBallGfx_Sport, 384, GFX_TAG_SPORT_BALL},
[BALL_PARK] = {gBallGfx_Park, 384, GFX_TAG_PARK_BALL},
[BALL_BEAST] = {gBallGfx_Beast, 384, GFX_TAG_BEAST_BALL},
[BALL_CHERISH] = {gBallGfx_Cherish, 384, GFX_TAG_CHERISH_BALL},
};
const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] =
{
[BALL_POKE] = {gBallPal_Poke, GFX_TAG_POKE_BALL},
[BALL_GREAT] = {gBallPal_Great, GFX_TAG_GREAT_BALL},
[BALL_SAFARI] = {gBallPal_Safari, GFX_TAG_SAFARI_BALL},
[BALL_ULTRA] = {gBallPal_Ultra, GFX_TAG_ULTRA_BALL},
[BALL_MASTER] = {gBallPal_Master, GFX_TAG_MASTER_BALL},
[BALL_NET] = {gBallPal_Net, GFX_TAG_NET_BALL},
[BALL_DIVE] = {gBallPal_Dive, GFX_TAG_DIVE_BALL},
[BALL_NEST] = {gBallPal_Nest, GFX_TAG_NEST_BALL},
[BALL_REPEAT] = {gBallPal_Repeat, GFX_TAG_REPEAT_BALL},
[BALL_TIMER] = {gBallPal_Timer, GFX_TAG_TIMER_BALL},
[BALL_LUXURY] = {gBallPal_Luxury, GFX_TAG_LUXURY_BALL},
[BALL_PREMIER] = {gBallPal_Premier, GFX_TAG_PREMIER_BALL},
[BALL_HEAL] = {gBallPal_Heal, GFX_TAG_HEAL_BALL},
[BALL_NET] = {gBallPal_Net, GFX_TAG_NET_BALL},
[BALL_NEST] = {gBallPal_Nest, GFX_TAG_NEST_BALL},
[BALL_DIVE] = {gBallPal_Dive, GFX_TAG_DIVE_BALL},
[BALL_DUSK] = {gBallPal_Dusk, GFX_TAG_DUSK_BALL},
[BALL_TIMER] = {gBallPal_Timer, GFX_TAG_TIMER_BALL},
[BALL_QUICK] = {gBallPal_Quick, GFX_TAG_QUICK_BALL},
[BALL_REPEAT] = {gBallPal_Repeat, GFX_TAG_REPEAT_BALL},
[BALL_LUXURY] = {gBallPal_Luxury, GFX_TAG_LUXURY_BALL},
[BALL_LEVEL] = {gBallPal_Level, GFX_TAG_LEVEL_BALL},
[BALL_LURE] = {gBallPal_Lure, GFX_TAG_LURE_BALL},
[BALL_MOON] = {gBallPal_Moon, GFX_TAG_MOON_BALL},
[BALL_FRIEND] = {gBallPal_Friend, GFX_TAG_FRIEND_BALL},
[BALL_LOVE] = {gBallPal_Love, GFX_TAG_LOVE_BALL},
[BALL_FAST] = {gBallPal_Fast, GFX_TAG_FAST_BALL},
[BALL_HEAVY] = {gBallPal_Heavy, GFX_TAG_HEAVY_BALL},
[BALL_DREAM] = {gBallPal_Dream, GFX_TAG_DREAM_BALL},
[BALL_SAFARI] = {gBallPal_Safari, GFX_TAG_SAFARI_BALL},
[BALL_SPORT] = {gBallPal_Sport, GFX_TAG_SPORT_BALL},
[BALL_PARK] = {gBallPal_Park, GFX_TAG_PARK_BALL},
[BALL_BEAST] = {gBallPal_Beast, GFX_TAG_BEAST_BALL},
[BALL_CHERISH] = {gBallPal_Cherish, GFX_TAG_CHERISH_BALL},
};
static const struct OamData sBallOamData =
@@ -221,16 +266,6 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_SAFARI] =
{
.tileTag = GFX_TAG_SAFARI_BALL,
.paletteTag = GFX_TAG_SAFARI_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_ULTRA] =
{
.tileTag = GFX_TAG_ULTRA_BALL,
@@ -251,20 +286,30 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_NET] =
[BALL_PREMIER] =
{
.tileTag = GFX_TAG_NET_BALL,
.paletteTag = GFX_TAG_NET_BALL,
.tileTag = GFX_TAG_PREMIER_BALL,
.paletteTag = GFX_TAG_PREMIER_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_DIVE] =
[BALL_HEAL] =
{
.tileTag = GFX_TAG_DIVE_BALL,
.paletteTag = GFX_TAG_DIVE_BALL,
.tileTag = GFX_TAG_HEAL_BALL,
.paletteTag = GFX_TAG_HEAL_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_NET] =
{
.tileTag = GFX_TAG_NET_BALL,
.paletteTag = GFX_TAG_NET_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -281,10 +326,20 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_REPEAT] =
[BALL_DIVE] =
{
.tileTag = GFX_TAG_REPEAT_BALL,
.paletteTag = GFX_TAG_REPEAT_BALL,
.tileTag = GFX_TAG_DIVE_BALL,
.paletteTag = GFX_TAG_DIVE_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_DUSK] =
{
.tileTag = GFX_TAG_DUSK_BALL,
.paletteTag = GFX_TAG_DUSK_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -301,6 +356,26 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_QUICK] =
{
.tileTag = GFX_TAG_QUICK_BALL,
.paletteTag = GFX_TAG_QUICK_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_REPEAT] =
{
.tileTag = GFX_TAG_REPEAT_BALL,
.paletteTag = GFX_TAG_REPEAT_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_LUXURY] =
{
.tileTag = GFX_TAG_LUXURY_BALL,
@@ -311,10 +386,130 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_PREMIER] =
[BALL_LEVEL] =
{
.tileTag = GFX_TAG_PREMIER_BALL,
.paletteTag = GFX_TAG_PREMIER_BALL,
.tileTag = GFX_TAG_LEVEL_BALL,
.paletteTag = GFX_TAG_LEVEL_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_LURE] =
{
.tileTag = GFX_TAG_LURE_BALL,
.paletteTag = GFX_TAG_LURE_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_MOON] =
{
.tileTag = GFX_TAG_MOON_BALL,
.paletteTag = GFX_TAG_MOON_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_FRIEND] =
{
.tileTag = GFX_TAG_FRIEND_BALL,
.paletteTag = GFX_TAG_FRIEND_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_LOVE] =
{
.tileTag = GFX_TAG_LOVE_BALL,
.paletteTag = GFX_TAG_LOVE_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_FAST] =
{
.tileTag = GFX_TAG_FAST_BALL,
.paletteTag = GFX_TAG_FAST_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_HEAVY] =
{
.tileTag = GFX_TAG_HEAVY_BALL,
.paletteTag = GFX_TAG_HEAVY_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_DREAM] =
{
.tileTag = GFX_TAG_DREAM_BALL,
.paletteTag = GFX_TAG_DREAM_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_SAFARI] =
{
.tileTag = GFX_TAG_SAFARI_BALL,
.paletteTag = GFX_TAG_SAFARI_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_SPORT] =
{
.tileTag = GFX_TAG_SPORT_BALL,
.paletteTag = GFX_TAG_SPORT_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_PARK] =
{
.tileTag = GFX_TAG_PARK_BALL,
.paletteTag = GFX_TAG_PARK_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_BEAST] =
{
.tileTag = GFX_TAG_BEAST_BALL,
.paletteTag = GFX_TAG_BEAST_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_BallThrow,
},
[BALL_CHERISH] =
{
.tileTag = GFX_TAG_CHERISH_BALL,
.paletteTag = GFX_TAG_CHERISH_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -1323,11 +1518,10 @@ void LoadBallGfx(u8 ballId)
switch (ballId)
{
case BALL_DIVE:
case BALL_LUXURY:
case BALL_PREMIER:
break;
default:
case BALL_POKE ... BALL_MASTER:
case BALL_NET ... BALL_NEST:
case BALL_REPEAT:
case BALL_SAFARI:
var = GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag);
LZDecompressVram(gOpenPokeballGfx, (void *)(OBJ_VRAM0 + 0x100 + var * 32));
break;
@@ -1342,9 +1536,17 @@ void FreeBallGfx(u8 ballId)
static u16 GetBattlerPokeballItemId(u8 battlerId)
{
struct Pokemon *mon, *illusionMon;
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
else
return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
illusionMon = GetIllusionMonPtr(battlerId);
if (illusionMon != NULL)
mon = illusionMon;
return GetMonData(mon, MON_DATA_POKEBALL);
}

View File

@@ -2867,7 +2867,7 @@ void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y)
{
printerTemplate.currentChar = gSpeciesInfo[species].description;
printerTemplate.windowId = windowId;
printerTemplate.fontId = FONT_NORMAL;
printerTemplate.fontId = FONT_SMALL;
printerTemplate.letterSpacing = 1;
printerTemplate.lineSpacing = 0;
printerTemplate.unk = 0;
@@ -2875,7 +2875,7 @@ void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y)
printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 2;
length = GetStringWidth(FONT_NORMAL, gSpeciesInfo[species].description, 0);
length = GetStringWidth(FONT_SMALL, gSpeciesInfo[species].description, 0);
xCenter = x + (240 - length) / 2;
if (xCenter > 0)
@@ -2954,7 +2954,7 @@ static u8 DexScreen_DrawMonDexPage(bool8 justRegistered)
// Dex entry
FillWindowPixelBuffer(sPokedexScreenData->windowIds[2], PIXEL_FILL(0));
DexScreen_PrintMonFlavorText(sPokedexScreenData->windowIds[2], sPokedexScreenData->dexSpecies, 0, 8);
DexScreen_PrintMonFlavorText(sPokedexScreenData->windowIds[2], sPokedexScreenData->dexSpecies, 0, 1);
PutWindowTilemap(sPokedexScreenData->windowIds[2]);
CopyWindowToVram(sPokedexScreenData->windowIds[2], COPYWIN_GFX);

View File

@@ -61,7 +61,6 @@ EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0};
static EWRAM_DATA struct MonSpritesGfxManager *sMonSpritesGfxManager = NULL;
static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType);
static bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
static bool8 PartyMonHasStatus(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
static bool8 IsPokemonStorageFull(void);
static u8 CopyMonToPC(struct Pokemon *mon);
@@ -5546,18 +5545,7 @@ void SetWildMonHeldItem(void)
bool8 IsMonShiny(struct Pokemon *mon)
{
u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
return IsShinyOtIdPersonality(otId, personality);
}
static bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
{
bool8 retVal = FALSE;
u32 shinyValue = GET_SHINY_VALUE(otId, personality);
if (shinyValue < SHINY_ODDS)
retVal = TRUE;
return retVal;
return GetMonData(mon, MON_DATA_IS_SHINY, NULL);
}
u8 *GetTrainerPartnerName(void)

View File

@@ -25,9 +25,6 @@
#include "constants/songs.h"
#include "constants/quest_log.h"
// Any item in the TM Case with nonzero importance is considered an HM
#define IS_HM(itemId) (ItemId_GetImportance(itemId) != 0)
#define TAG_SCROLL_ARROW 110
enum {
@@ -679,7 +676,7 @@ static void InitTMCaseListMenuItems(void)
static void GetTMNumberAndMoveString(u8 * dest, u16 itemId)
{
StringCopy(gStringVar4, gText_FontSmall);
if (itemId >= ITEM_HM01)
if (IsItemHM(itemId))
{
StringAppend(gStringVar4, sText_ClearTo18);
StringAppend(gStringVar4, gText_NumberClear01);
@@ -720,10 +717,18 @@ static void List_ItemPrintFunc(u8 windowId, u32 itemIndex, u8 y)
{
if (itemIndex != LIST_CANCEL)
{
if (!IS_HM(BagGetItemIdByPocketPosition(POCKET_TM_CASE, itemIndex)))
u16 itemId = BagGetItemIdByPocketPosition(POCKET_TM_CASE, itemIndex);
if (!IsItemHM(itemId))
{
ConvertIntToDecimalStringN(gStringVar1, BagGetQuantityByPocketPosition(POCKET_TM_CASE, itemIndex), STR_CONV_MODE_RIGHT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
if (!ItemId_GetImportance(itemId))
{
ConvertIntToDecimalStringN(gStringVar1, BagGetQuantityByPocketPosition(POCKET_TM_CASE, itemIndex), STR_CONV_MODE_RIGHT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
}
else
{
StringCopy(gStringVar4, gText_EmptyString3);
}
TMCase_Print(windowId, FONT_SMALL, gStringVar4, 126, y, 0, 0, TEXT_SKIP_DRAW, COLOR_DARK);
}
else
@@ -982,7 +987,7 @@ static void Task_SelectedTMHM_Field(u8 taskId)
StringAppend(strbuf, gText_Var1IsSelected + 2); // +2 skips over the stringvar
TMCase_Print(WIN_SELECTED_MSG, FONT_NORMAL, strbuf, 0, 2, 1, 0, 0, COLOR_DARK);
Free(strbuf);
if (IS_HM(gSpecialVar_ItemId))
if (IsItemHM(gSpecialVar_ItemId))
{
PlaceHMTileInWindow(WIN_SELECTED_MSG, 0, 2);
CopyWindowToVram(WIN_SELECTED_MSG, COPYWIN_GFX);
@@ -1050,7 +1055,7 @@ static void Action_Give(u8 taskId)
PutWindowTilemap(WIN_MOVE_INFO);
ScheduleBgCopyTilemapToVram(0);
ScheduleBgCopyTilemapToVram(1);
if (!IS_HM(itemId))
if (!ItemId_GetImportance(itemId))
{
if (CalculatePlayerPartyCount() == 0)
{
@@ -1127,7 +1132,7 @@ static void Task_SelectedTMHM_GiveParty(u8 taskId)
{
s16 * data = gTasks[taskId].data;
if (!IS_HM(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)))
if (!ItemId_GetImportance(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)))
{
sTMCaseDynamicResources->nextScreenCallback = CB2_GiveHoldItem;
Task_BeginFadeOutFromTMCase(taskId);
@@ -1143,7 +1148,7 @@ static void Task_SelectedTMHM_GivePC(u8 taskId)
{
s16 * data = gTasks[taskId].data;
if (!IS_HM(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)))
if (!ItemId_GetImportance(BagGetItemIdByPocketPosition(POCKET_TM_CASE, tSelection)))
{
sTMCaseDynamicResources->nextScreenCallback = CB2_ReturnToPokeStorage;
Task_BeginFadeOutFromTMCase(taskId);
@@ -1159,7 +1164,7 @@ static void Task_SelectedTMHM_Sell(u8 taskId)
{
s16 * data = gTasks[taskId].data;
if (ItemId_GetPrice(gSpecialVar_ItemId) == 0)
if (ItemId_GetImportance(gSpecialVar_ItemId))
{
// Can't sell TM/HMs with no price (by default this is just the HMs)
CopyItemName(gSpecialVar_ItemId, gStringVar1);