added new pokeball graphics, fixed/refactored tmhms, smaller pokedex entry font to fit whole text
@@ -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
|
After Width: | Height: | Size: 329 B |
BIN
graphics/balls/cherish.png
Normal file
|
After Width: | Height: | Size: 329 B |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
BIN
graphics/balls/dream.png
Normal file
|
After Width: | Height: | Size: 316 B |
BIN
graphics/balls/dusk.png
Normal file
|
After Width: | Height: | Size: 318 B |
BIN
graphics/balls/fast.png
Normal file
|
After Width: | Height: | Size: 310 B |
BIN
graphics/balls/friend.png
Normal file
|
After Width: | Height: | Size: 312 B |
|
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 257 B |
BIN
graphics/balls/heal.png
Normal file
|
After Width: | Height: | Size: 309 B |
BIN
graphics/balls/heavy.png
Normal file
|
After Width: | Height: | Size: 316 B |
BIN
graphics/balls/level.png
Normal file
|
After Width: | Height: | Size: 307 B |
BIN
graphics/balls/love.png
Normal file
|
After Width: | Height: | Size: 305 B |
BIN
graphics/balls/lure.png
Normal file
|
After Width: | Height: | Size: 302 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 350 B |
|
Before Width: | Height: | Size: 260 B After Width: | Height: | Size: 260 B |
BIN
graphics/balls/moon.png
Normal file
|
After Width: | Height: | Size: 317 B |
|
Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 266 B |
|
Before Width: | Height: | Size: 246 B After Width: | Height: | Size: 246 B |
BIN
graphics/balls/open.png
Normal file
|
After Width: | Height: | Size: 215 B |
BIN
graphics/balls/park.png
Normal file
|
After Width: | Height: | Size: 307 B |
|
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 249 B |
|
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 289 B |
BIN
graphics/balls/quick.png
Normal file
|
After Width: | Height: | Size: 313 B |
|
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 257 B |
|
Before Width: | Height: | Size: 259 B After Width: | Height: | Size: 259 B |
BIN
graphics/balls/sport.png
Normal file
|
After Width: | Height: | Size: 299 B |
|
Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 296 B |
|
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 245 B |
BIN
graphics/battle_anims/sprites/particles2.png
Normal file
|
After Width: | Height: | Size: 357 B |
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
23
src/item.c
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
306
src/pokeball.c
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||