summaryrefslogtreecommitdiff
path: root/src/pokemon.c
diff options
context:
space:
mode:
authorluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2021-06-01 20:40:27 -0400
committerluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2021-06-01 20:40:27 -0400
commitf0b41debc35c2084aad6d369eab11a2d2df4ab44 (patch)
tree9b720ab0b617fa207051efc7ff9373669f7dc47b /src/pokemon.c
parenta839463c849679974c986bf9c9c260eff0e94cb7 (diff)
parent9f5bf65fb336cf7a3ba68d32267bf993f0f6a494 (diff)
Merge branch 'master' of https://github.com/pret/pokeemerald into remove-temps
Diffstat (limited to 'src/pokemon.c')
-rw-r--r--src/pokemon.c1992
1 files changed, 990 insertions, 1002 deletions
diff --git a/src/pokemon.c b/src/pokemon.c
index 475373550..28b402216 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -57,7 +57,7 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType);
static void EncryptBoxMon(struct BoxPokemon *boxMon);
static void DecryptBoxMon(struct BoxPokemon *boxMon);
-static void sub_806E6CC(u8 taskId);
+static void Task_PlayMapChosenOrBattleBGM(u8 taskId);
static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
static bool8 ShouldSkipFriendshipChange(void);
@@ -1350,32 +1350,32 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
{
- // Atk Def Spd Sp.Atk Sp.Def
- { 0, 0, 0, 0, 0}, // Hardy
- { +1, -1, 0, 0, 0}, // Lonely
- { +1, 0, -1, 0, 0}, // Brave
- { +1, 0, 0, -1, 0}, // Adamant
- { +1, 0, 0, 0, -1}, // Naughty
- { -1, +1, 0, 0, 0}, // Bold
- { 0, 0, 0, 0, 0}, // Docile
- { 0, +1, -1, 0, 0}, // Relaxed
- { 0, +1, 0, -1, 0}, // Impish
- { 0, +1, 0, 0, -1}, // Lax
- { -1, 0, +1, 0, 0}, // Timid
- { 0, -1, +1, 0, 0}, // Hasty
- { 0, 0, 0, 0, 0}, // Serious
- { 0, 0, +1, -1, 0}, // Jolly
- { 0, 0, +1, 0, -1}, // Naive
- { -1, 0, 0, +1, 0}, // Modest
- { 0, -1, 0, +1, 0}, // Mild
- { 0, 0, -1, +1, 0}, // Quiet
- { 0, 0, 0, 0, 0}, // Bashful
- { 0, 0, 0, +1, -1}, // Rash
- { -1, 0, 0, 0, +1}, // Calm
- { 0, -1, 0, 0, +1}, // Gentle
- { 0, 0, -1, 0, +1}, // Sassy
- { 0, 0, 0, -1, +1}, // Careful
- { 0, 0, 0, 0, 0}, // Quirky
+ // Atk Def Spd Sp.Atk Sp.Def
+ [NATURE_HARDY] = { 0, 0, 0, 0, 0},
+ [NATURE_LONELY] = { +1, -1, 0, 0, 0},
+ [NATURE_BRAVE] = { +1, 0, -1, 0, 0},
+ [NATURE_ADAMANT] = { +1, 0, 0, -1, 0},
+ [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1},
+ [NATURE_BOLD] = { -1, +1, 0, 0, 0},
+ [NATURE_DOCILE] = { 0, 0, 0, 0, 0},
+ [NATURE_RELAXED] = { 0, +1, -1, 0, 0},
+ [NATURE_IMPISH] = { 0, +1, 0, -1, 0},
+ [NATURE_LAX] = { 0, +1, 0, 0, -1},
+ [NATURE_TIMID] = { -1, 0, +1, 0, 0},
+ [NATURE_HASTY] = { 0, -1, +1, 0, 0},
+ [NATURE_SERIOUS] = { 0, 0, 0, 0, 0},
+ [NATURE_JOLLY] = { 0, 0, +1, -1, 0},
+ [NATURE_NAIVE] = { 0, 0, +1, 0, -1},
+ [NATURE_MODEST] = { -1, 0, 0, +1, 0},
+ [NATURE_MILD] = { 0, -1, 0, +1, 0},
+ [NATURE_QUIET] = { 0, 0, -1, +1, 0},
+ [NATURE_BASHFUL] = { 0, 0, 0, 0, 0},
+ [NATURE_RASH] = { 0, 0, 0, +1, -1},
+ [NATURE_CALM] = { -1, 0, 0, 0, +1},
+ [NATURE_GENTLE] = { 0, -1, 0, 0, +1},
+ [NATURE_SASSY] = { 0, 0, -1, 0, +1},
+ [NATURE_CAREFUL] = { 0, 0, 0, -1, +1},
+ [NATURE_QUIRKY] = { 0, 0, 0, 0, 0},
};
#include "data/pokemon/tmhm_learnsets.h"
@@ -1391,476 +1391,451 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
static const u8 sMonFrontAnimIdsTable[] =
{
- [SPECIES_BULBASAUR - 1] = 0x06,
- [SPECIES_IVYSAUR - 1] = 0x17,
- [SPECIES_VENUSAUR - 1] = 0x2f,
- [SPECIES_CHARMANDER - 1] = 0x52,
- [SPECIES_CHARMELEON - 1] = 0x25,
- [SPECIES_CHARIZARD - 1] = 0x10,
- [SPECIES_SQUIRTLE - 1] = 0x0b,
- [SPECIES_WARTORTLE - 1] = 0x13,
- [SPECIES_BLASTOISE - 1] = 0x19,
- [SPECIES_CATERPIE - 1] = 0x0b,
- [SPECIES_METAPOD - 1] = 0x0b,
- [SPECIES_BUTTERFREE - 1] = 0x1d,
- [SPECIES_WEEDLE - 1] = 0x46,
- [SPECIES_KAKUNA - 1] = 0x20,
- [SPECIES_BEEDRILL - 1] = 0x02,
- [SPECIES_PIDGEY - 1] = 0x47,
- [SPECIES_PIDGEOTTO - 1] = 0x17,
- [SPECIES_PIDGEOT - 1] = 0x29,
- [SPECIES_RATTATA - 1] = 0x43,
- [SPECIES_RATICATE - 1] = 0x2b,
- [SPECIES_SPEAROW - 1] = 0x18,
- [SPECIES_FEAROW - 1] = 0x2b,
- [SPECIES_EKANS - 1] = 0x16,
- [SPECIES_ARBOK - 1] = 0x17,
- [SPECIES_PIKACHU - 1] = 0x2c,
- [SPECIES_RAICHU - 1] = 0x17,
- [SPECIES_SANDSHREW - 1] = 0x2d,
- [SPECIES_SANDSLASH - 1] = 0x17,
- [SPECIES_NIDORAN_F - 1] = 0x00,
- [SPECIES_NIDORINA - 1] = 0x17,
- [SPECIES_NIDOQUEEN - 1] = 0x0f,
- [SPECIES_NIDORAN_M - 1] = 0x09,
- [SPECIES_NIDORINO - 1] = 0x13,
- [SPECIES_NIDOKING - 1] = 0x0f,
- [SPECIES_CLEFAIRY - 1] = 0x00,
- [SPECIES_CLEFABLE - 1] = 0x4a,
- [SPECIES_VULPIX - 1] = 0x17,
- [SPECIES_NINETALES - 1] = 0x10,
- [SPECIES_JIGGLYPUFF - 1] = 0x48,
- [SPECIES_WIGGLYTUFF - 1] = 0x31,
- [SPECIES_ZUBAT - 1] = 0x00,
- [SPECIES_GOLBAT - 1] = 0x1d,
- [SPECIES_ODDISH - 1] = 0x00,
- [SPECIES_GLOOM - 1] = 0x45,
- [SPECIES_VILEPLUME - 1] = 0x49,
- [SPECIES_PARAS - 1] = 0x46,
- [SPECIES_PARASECT - 1] = 0x0f,
- [SPECIES_VENONAT - 1] = 0x06,
- [SPECIES_VENOMOTH - 1] = 0x4b,
- [SPECIES_DIGLETT - 1] = 0x10,
- [SPECIES_DUGTRIO - 1] = 0x4c,
- [SPECIES_MEOWTH - 1] = 0x52,
- [SPECIES_PERSIAN - 1] = 0x17,
- [SPECIES_PSYDUCK - 1] = 0x06,
- [SPECIES_GOLDUCK - 1] = 0x4c,
- [SPECIES_MANKEY - 1] = 0x32,
- [SPECIES_PRIMEAPE - 1] = 0x48,
- [SPECIES_GROWLITHE - 1] = 0x25,
- [SPECIES_ARCANINE - 1] = 0x02,
- [SPECIES_POLIWAG - 1] = 0x00,
- [SPECIES_POLIWHIRL - 1] = 0x32,
- [SPECIES_POLIWRATH - 1] = 0x19,
- [SPECIES_ABRA - 1] = 0x31,
- [SPECIES_KADABRA - 1] = 0x09,
- [SPECIES_ALAKAZAM - 1] = 0x17,
- [SPECIES_MACHOP - 1] = 0x00,
- [SPECIES_MACHOKE - 1] = 0x10,
- [SPECIES_MACHAMP - 1] = 0x31,
- [SPECIES_BELLSPROUT - 1] = 0x17,
- [SPECIES_WEEPINBELL - 1] = 0x0d,
- [SPECIES_VICTREEBEL - 1] = 0x32,
- [SPECIES_TENTACOOL - 1] = 0x00,
- [SPECIES_TENTACRUEL - 1] = 0x00,
- [SPECIES_GEODUDE - 1] = 0x48,
- [SPECIES_GRAVELER - 1] = 0x48,
- [SPECIES_GOLEM - 1] = 0x2f,
- [SPECIES_PONYTA - 1] = 0x20,
- [SPECIES_RAPIDASH - 1] = 0x11,
- [SPECIES_SLOWPOKE - 1] = 0x45,
- [SPECIES_SLOWBRO - 1] = 0x0b,
- [SPECIES_MAGNEMITE - 1] = 0x54,
- [SPECIES_MAGNETON - 1] = 0x2c,
- [SPECIES_FARFETCHD - 1] = 0x48,
- [SPECIES_DODUO - 1] = 0x4c,
- [SPECIES_DODRIO - 1] = 0x41,
- [SPECIES_SEEL - 1] = 0x0b,
- [SPECIES_DEWGONG - 1] = 0x45,
- [SPECIES_GRIMER - 1] = 0x46,
- [SPECIES_MUK - 1] = 0x30,
- [SPECIES_SHELLDER - 1] = 0x12,
- [SPECIES_CLOYSTER - 1] = 0x1d,
- [SPECIES_GASTLY - 1] = 0x15,
- [SPECIES_HAUNTER - 1] = 0x35,
- [SPECIES_GENGAR - 1] = 0x3a,
- [SPECIES_ONIX - 1] = 0x43,
- [SPECIES_DROWZEE - 1] = 0x4f,
- [SPECIES_HYPNO - 1] = 0x09,
- [SPECIES_KRABBY - 1] = 0x03,
- [SPECIES_KINGLER - 1] = 0x4b,
- [SPECIES_VOLTORB - 1] = 0x00,
- [SPECIES_ELECTRODE - 1] = 0x00,
- [SPECIES_EXEGGCUTE - 1] = 0x46,
- [SPECIES_EXEGGUTOR - 1] = 0x32,
- [SPECIES_CUBONE - 1] = 0x48,
- [SPECIES_MAROWAK - 1] = 0x05,
- [SPECIES_HITMONLEE - 1] = 0x16,
- [SPECIES_HITMONCHAN - 1] = 0x09,
- [SPECIES_LICKITUNG - 1] = 0x45,
- [SPECIES_KOFFING - 1] = 0x13,
- [SPECIES_WEEZING - 1] = 0x04,
- [SPECIES_RHYHORN - 1] = 0x10,
- [SPECIES_RHYDON - 1] = 0x13,
- [SPECIES_CHANSEY - 1] = 0x45,
- [SPECIES_TANGELA - 1] = 0x48,
- [SPECIES_KANGASKHAN - 1] = 0x17,
- [SPECIES_HORSEA - 1] = 0x12,
- [SPECIES_SEADRA - 1] = 0x04,
- [SPECIES_GOLDEEN - 1] = 0x0d,
- [SPECIES_SEAKING - 1] = 0x1c,
- [SPECIES_STARYU - 1] = 0x4e,
- [SPECIES_STARMIE - 1] = 0x12,
- [SPECIES_MR_MIME - 1] = 0x46,
- [SPECIES_SCYTHER - 1] = 0x02,
- [SPECIES_JYNX - 1] = 0x17,
- [SPECIES_ELECTABUZZ - 1] = 0x2c,
- [SPECIES_MAGMAR - 1] = 0x0f,
- [SPECIES_PINSIR - 1] = 0x09,
- [SPECIES_TAUROS - 1] = 0x19,
- [SPECIES_MAGIKARP - 1] = 0x05,
- [SPECIES_GYARADOS - 1] = 0x48,
- [SPECIES_LAPRAS - 1] = 0x17,
- [SPECIES_DITTO - 1] = 0x01,
- [SPECIES_EEVEE - 1] = 0x17,
- [SPECIES_VAPOREON - 1] = 0x17,
- [SPECIES_JOLTEON - 1] = 0x00,
- [SPECIES_FLAREON - 1] = 0x17,
- [SPECIES_PORYGON - 1] = 0x52,
- [SPECIES_OMANYTE - 1] = 0x51,
- [SPECIES_OMASTAR - 1] = 0x09,
- [SPECIES_KABUTO - 1] = 0x1d,
- [SPECIES_KABUTOPS - 1] = 0x0f,
- [SPECIES_AERODACTYL - 1] = 0x47,
- [SPECIES_SNORLAX - 1] = 0x0b,
- [SPECIES_ARTICUNO - 1] = 0x09,
- [SPECIES_ZAPDOS - 1] = 0x2c,
- [SPECIES_MOLTRES - 1] = 0x45,
- [SPECIES_DRATINI - 1] = 0x00,
- [SPECIES_DRAGONAIR - 1] = 0x10,
- [SPECIES_DRAGONITE - 1] = 0x47,
- [SPECIES_MEWTWO - 1] = 0x09,
- [SPECIES_MEW - 1] = 0x0d,
- [SPECIES_CHIKORITA - 1] = 0x00,
- [SPECIES_BAYLEEF - 1] = 0x00,
- [SPECIES_MEGANIUM - 1] = 0x17,
- [SPECIES_CYNDAQUIL - 1] = 0x52,
- [SPECIES_QUILAVA - 1] = 0x17,
- [SPECIES_TYPHLOSION - 1] = 0x10,
- [SPECIES_TOTODILE - 1] = 0x31,
- [SPECIES_CROCONAW - 1] = 0x0f,
- [SPECIES_FERALIGATR - 1] = 0x0f,
- [SPECIES_SENTRET - 1] = 0x00,
- [SPECIES_FURRET - 1] = 0x32,
- [SPECIES_HOOTHOOT - 1] = 0x47,
- [SPECIES_NOCTOWL - 1] = 0x17,
- [SPECIES_LEDYBA - 1] = 0x52,
- [SPECIES_LEDIAN - 1] = 0x47,
- [SPECIES_SPINARAK - 1] = 0x4f,
- [SPECIES_ARIADOS - 1] = 0x0f,
- [SPECIES_CROBAT - 1] = 0x00,
- [SPECIES_CHINCHOU - 1] = 0x45,
- [SPECIES_LANTURN - 1] = 0x51,
- [SPECIES_PICHU - 1] = 0x1e,
- [SPECIES_CLEFFA - 1] = 0x52,
- [SPECIES_IGGLYBUFF - 1] = 0x0c,
- [SPECIES_TOGEPI - 1] = 0x0b,
- [SPECIES_TOGETIC - 1] = 0x00,
- [SPECIES_NATU - 1] = 0x31,
- [SPECIES_XATU - 1] = 0x09,
- [SPECIES_MAREEP - 1] = 0x00,
- [SPECIES_FLAAFFY - 1] = 0x1e,
- [SPECIES_AMPHAROS - 1] = 0x2c,
- [SPECIES_BELLOSSOM - 1] = 0x0b,
- [SPECIES_MARILL - 1] = 0x00,
- [SPECIES_AZUMARILL - 1] = 0x4a,
- [SPECIES_SUDOWOODO - 1] = 0x46,
- [SPECIES_POLITOED - 1] = 0x32,
- [SPECIES_HOPPIP - 1] = 0x1c,
- [SPECIES_SKIPLOOM - 1] = 0x18,
- [SPECIES_JUMPLUFF - 1] = 0x51,
- [SPECIES_AIPOM - 1] = 0x32,
- [SPECIES_SUNKERN - 1] = 0x52,
- [SPECIES_SUNFLORA - 1] = 0x00,
- [SPECIES_YANMA - 1] = 0x2b,
- [SPECIES_WOOPER - 1] = 0x00,
- [SPECIES_QUAGSIRE - 1] = 0x16,
- [SPECIES_ESPEON - 1] = 0x09,
- [SPECIES_UMBREON - 1] = 0x10,
- [SPECIES_MURKROW - 1] = 0x00,
- [SPECIES_SLOWKING - 1] = 0x13,
- [SPECIES_MISDREAVUS - 1] = 0x1c,
- [SPECIES_UNOWN - 1] = 0x0a,
- [SPECIES_WOBBUFFET - 1] = 0x30,
- [SPECIES_GIRAFARIG - 1] = 0x1e,
- [SPECIES_PINECO - 1] = 0x0b,
- [SPECIES_FORRETRESS - 1] = 0x10,
- [SPECIES_DUNSPARCE - 1] = 0x00,
- [SPECIES_GLIGAR - 1] = 0x13,
- [SPECIES_STEELIX - 1] = 0x0f,
- [SPECIES_SNUBBULL - 1] = 0x17,
- [SPECIES_GRANBULL - 1] = 0x10,
- [SPECIES_QWILFISH - 1] = 0x3a,
- [SPECIES_SCIZOR - 1] = 0x02,
- [SPECIES_SHUCKLE - 1] = 0x0b,
- [SPECIES_HERACROSS - 1] = 0x41,
- [SPECIES_SNEASEL - 1] = 0x16,
- [SPECIES_TEDDIURSA - 1] = 0x17,
- [SPECIES_URSARING - 1] = 0x10,
- [SPECIES_SLUGMA - 1] = 0x17,
- [SPECIES_MAGCARGO - 1] = 0x17,
- [SPECIES_SWINUB - 1] = 0x00,
- [SPECIES_PILOSWINE - 1] = 0x0f,
- [SPECIES_CORSOLA - 1] = 0x03,
- [SPECIES_REMORAID - 1] = 0x52,
- [SPECIES_OCTILLERY - 1] = 0x17,
- [SPECIES_DELIBIRD - 1] = 0x52,
- [SPECIES_MANTINE - 1] = 0x0d,
- [SPECIES_SKARMORY - 1] = 0x17,
- [SPECIES_HOUNDOUR - 1] = 0x17,
- [SPECIES_HOUNDOOM - 1] = 0x10,
- [SPECIES_KINGDRA - 1] = 0x42,
- [SPECIES_PHANPY - 1] = 0x32,
- [SPECIES_DONPHAN - 1] = 0x19,
- [SPECIES_PORYGON2 - 1] = 0x00,
- [SPECIES_STANTLER - 1] = 0x00,
- [SPECIES_SMEARGLE - 1] = 0x31,
- [SPECIES_TYROGUE - 1] = 0x16,
- [SPECIES_HITMONTOP - 1] = 0x02,
- [SPECIES_SMOOCHUM - 1] = 0x09,
- [SPECIES_ELEKID - 1] = 0x2c,
- [SPECIES_MAGBY - 1] = 0x00,
- [SPECIES_MILTANK - 1] = 0x45,
- [SPECIES_BLISSEY - 1] = 0x00,
- [SPECIES_RAIKOU - 1] = 0x2c,
- [SPECIES_ENTEI - 1] = 0x09,
- [SPECIES_SUICUNE - 1] = 0x10,
- [SPECIES_LARVITAR - 1] = 0x52,
- [SPECIES_PUPITAR - 1] = 0x10,
- [SPECIES_TYRANITAR - 1] = 0x0f,
- [SPECIES_LUGIA - 1] = 0x3a,
- [SPECIES_HO_OH - 1] = 0x09,
- [SPECIES_CELEBI - 1] = 0x18,
- [SPECIES_OLD_UNOWN_B - 1] = 0x00,
- [SPECIES_OLD_UNOWN_C - 1] = 0x00,
- [SPECIES_OLD_UNOWN_D - 1] = 0x00,
- [SPECIES_OLD_UNOWN_E - 1] = 0x00,
- [SPECIES_OLD_UNOWN_F - 1] = 0x00,
- [SPECIES_OLD_UNOWN_G - 1] = 0x00,
- [SPECIES_OLD_UNOWN_H - 1] = 0x00,
- [SPECIES_OLD_UNOWN_I - 1] = 0x00,
- [SPECIES_OLD_UNOWN_J - 1] = 0x00,
- [SPECIES_OLD_UNOWN_K - 1] = 0x00,
- [SPECIES_OLD_UNOWN_L - 1] = 0x00,
- [SPECIES_OLD_UNOWN_M - 1] = 0x00,
- [SPECIES_OLD_UNOWN_N - 1] = 0x00,
- [SPECIES_OLD_UNOWN_O - 1] = 0x00,
- [SPECIES_OLD_UNOWN_P - 1] = 0x00,
- [SPECIES_OLD_UNOWN_Q - 1] = 0x00,
- [SPECIES_OLD_UNOWN_R - 1] = 0x00,
- [SPECIES_OLD_UNOWN_S - 1] = 0x00,
- [SPECIES_OLD_UNOWN_T - 1] = 0x00,
- [SPECIES_OLD_UNOWN_U - 1] = 0x00,
- [SPECIES_OLD_UNOWN_V - 1] = 0x00,
- [SPECIES_OLD_UNOWN_W - 1] = 0x00,
- [SPECIES_OLD_UNOWN_X - 1] = 0x00,
- [SPECIES_OLD_UNOWN_Y - 1] = 0x00,
- [SPECIES_OLD_UNOWN_Z - 1] = 0x00,
- [SPECIES_TREECKO - 1] = 0x00,
- [SPECIES_GROVYLE - 1] = 0x17,
- [SPECIES_SCEPTILE - 1] = 0x10,
- [SPECIES_TORCHIC - 1] = 0x16,
- [SPECIES_COMBUSKEN - 1] = 0x06,
- [SPECIES_BLAZIKEN - 1] = 0x0f,
- [SPECIES_MUDKIP - 1] = 0x01,
- [SPECIES_MARSHTOMP - 1] = 0x04,
- [SPECIES_SWAMPERT - 1] = 0x1e,
- [SPECIES_POOCHYENA - 1] = 0x10,
- [SPECIES_MIGHTYENA - 1] = 0x10,
- [SPECIES_ZIGZAGOON - 1] = 0x03,
- [SPECIES_LINOONE - 1] = 0x09,
- [SPECIES_WURMPLE - 1] = 0x00,
- [SPECIES_SILCOON - 1] = 0x00,
- [SPECIES_BEAUTIFLY - 1] = 0x04,
- [SPECIES_CASCOON - 1] = 0x04,
- [SPECIES_DUSTOX - 1] = 0x06,
- [SPECIES_LOTAD - 1] = 0x00,
- [SPECIES_LOMBRE - 1] = 0x00,
- [SPECIES_LUDICOLO - 1] = 0x49,
- [SPECIES_SEEDOT - 1] = 0x05,
- [SPECIES_NUZLEAF - 1] = 0x00,
- [SPECIES_SHIFTRY - 1] = 0x02,
- [SPECIES_NINCADA - 1] = 0x00,
- [SPECIES_NINJASK - 1] = 0x46,
- [SPECIES_SHEDINJA - 1] = 0x1c,
- [SPECIES_TAILLOW - 1] = 0x1e,
- [SPECIES_SWELLOW - 1] = 0x01,
- [SPECIES_SHROOMISH - 1] = 0x00,
- [SPECIES_BRELOOM - 1] = 0x00,
- [SPECIES_SPINDA - 1] = 0x31,
- [SPECIES_WINGULL - 1] = 0x1b,
- [SPECIES_PELIPPER - 1] = 0x1c,
- [SPECIES_SURSKIT - 1] = 0x00,
- [SPECIES_MASQUERAIN - 1] = 0x00,
- [SPECIES_WAILMER - 1] = 0x01,
- [SPECIES_WAILORD - 1] = 0x1c,
- [SPECIES_SKITTY - 1] = 0x00,
- [SPECIES_DELCATTY - 1] = 0x17,
- [SPECIES_KECLEON - 1] = 0x35,
- [SPECIES_BALTOY - 1] = 0x1d,
- [SPECIES_CLAYDOL - 1] = 0x51,
- [SPECIES_NOSEPASS - 1] = 0x49,
- [SPECIES_TORKOAL - 1] = 0x17,
- [SPECIES_SABLEYE - 1] = 0x15,
- [SPECIES_BARBOACH - 1] = 0x49,
- [SPECIES_WHISCASH - 1] = 0x49,
- [SPECIES_LUVDISC - 1] = 0x1d,
- [SPECIES_CORPHISH - 1] = 0x10,
- [SPECIES_CRAWDAUNT - 1] = 0x09,
- [SPECIES_FEEBAS - 1] = 0x49,
- [SPECIES_MILOTIC - 1] = 0x22,
- [SPECIES_CARVANHA - 1] = 0x49,
- [SPECIES_SHARPEDO - 1] = 0x56,
- [SPECIES_TRAPINCH - 1] = 0x10,
- [SPECIES_VIBRAVA - 1] = 0x0f,
- [SPECIES_FLYGON - 1] = 0x4b,
- [SPECIES_MAKUHITA - 1] = 0x0b,
- [SPECIES_HARIYAMA - 1] = 0x34,
- [SPECIES_ELECTRIKE - 1] = 0x00,
- [SPECIES_MANECTRIC - 1] = 0x00,
- [SPECIES_NUMEL - 1] = 0x04,
- [SPECIES_CAMERUPT - 1] = 0x10,
- [SPECIES_SPHEAL - 1] = 0x53,
- [SPECIES_SEALEO - 1] = 0x17,
- [SPECIES_WALREIN - 1] = 0x0f,
- [SPECIES_CACNEA - 1] = 0x49,
- [SPECIES_CACTURNE - 1] = 0x04,
- [SPECIES_SNORUNT - 1] = 0x45,
- [SPECIES_GLALIE - 1] = 0x0a,
- [SPECIES_LUNATONE - 1] = 0x0e,
- [SPECIES_SOLROCK - 1] = 0x08,
- [SPECIES_AZURILL - 1] = 0x00,
- [SPECIES_SPOINK - 1] = 0x56,
- [SPECIES_GRUMPIG - 1] = 0x32,
- [SPECIES_PLUSLE - 1] = 0x00,
- [SPECIES_MINUN - 1] = 0x01,
- [SPECIES_MAWILE - 1] = 0x00,
- [SPECIES_MEDITITE - 1] = 0x05,
- [SPECIES_MEDICHAM - 1] = 0x45,
- [SPECIES_SWABLU - 1] = 0x04,
- [SPECIES_ALTARIA - 1] = 0x16,
- [SPECIES_WYNAUT - 1] = 0x32,
- [SPECIES_DUSKULL - 1] = 0x0a,
- [SPECIES_DUSCLOPS - 1] = 0x02,
- [SPECIES_ROSELIA - 1] = 0x45,
- [SPECIES_SLAKOTH - 1] = 0x45,
- [SPECIES_VIGOROTH - 1] = 0x31,
- [SPECIES_SLAKING - 1] = 0x45,
- [SPECIES_GULPIN - 1] = 0x00,
- [SPECIES_SWALOT - 1] = 0x45,
- [SPECIES_TROPIUS - 1] = 0x10,
- [SPECIES_WHISMUR - 1] = 0x03,
- [SPECIES_LOUDRED - 1] = 0x49,
- [SPECIES_EXPLOUD - 1] = 0x19,
- [SPECIES_CLAMPERL - 1] = 0x12,
- [SPECIES_HUNTAIL - 1] = 0x09,
- [SPECIES_GOREBYSS - 1] = 0x1c,
- [SPECIES_ABSOL - 1] = 0x11,
- [SPECIES_SHUPPET - 1] = 0x1c,
- [SPECIES_BANETTE - 1] = 0x0d,
- [SPECIES_SEVIPER - 1] = 0x17,
- [SPECIES_ZANGOOSE - 1] = 0x09,
- [SPECIES_RELICANTH - 1] = 0x1a,
- [SPECIES_ARON - 1] = 0x45,
- [SPECIES_LAIRON - 1] = 0x00,
- [SPECIES_AGGRON - 1] = 0x19,
- [SPECIES_CASTFORM - 1] = 0x1d,
- [SPECIES_VOLBEAT - 1] = 0x00,
- [SPECIES_ILLUMISE - 1] = 0x05,
- [SPECIES_LILEEP - 1] = 0x17,
- [SPECIES_CRADILY - 1] = 0x19,
- [SPECIES_ANORITH - 1] = 0x12,
- [SPECIES_ARMALDO - 1] = 0x10,
- [SPECIES_RALTS - 1] = 0x45,
- [SPECIES_KIRLIA - 1] = 0x00,
- [SPECIES_GARDEVOIR - 1] = 0x00,
- [SPECIES_BAGON - 1] = 0x19,
- [SPECIES_SHELGON - 1] = 0x04,
- [SPECIES_SALAMENCE - 1] = 0x0f,
- [SPECIES_BELDUM - 1] = 0x0f,
- [SPECIES_METANG - 1] = 0x04,
- [SPECIES_METAGROSS - 1] = 0x10,
- [SPECIES_REGIROCK - 1] = 0x01,
- [SPECIES_REGICE - 1] = 0x44,
- [SPECIES_REGISTEEL - 1] = 0x09,
- [SPECIES_KYOGRE - 1] = 0x2d,
- [SPECIES_GROUDON - 1] = 0x10,
- [SPECIES_RAYQUAZA - 1] = 0x0f,
- [SPECIES_LATIAS - 1] = 0x2d,
- [SPECIES_LATIOS - 1] = 0x10,
- [SPECIES_JIRACHI - 1] = 0x0d,
- [SPECIES_DEOXYS - 1] = 0x1b,
- [SPECIES_CHIMECHO - 1] = 0x1d,
+ [SPECIES_BULBASAUR - 1] = ANIM_V_JUMPS_H_JUMPS,
+ [SPECIES_IVYSAUR - 1] = ANIM_V_STRETCH,
+ [SPECIES_VENUSAUR - 1] = ANIM_ROTATE_UP_SLAM_DOWN,
+ [SPECIES_CHARMANDER - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_CHARMELEON - 1] = ANIM_BACK_AND_LUNGE,
+ [SPECIES_CHARIZARD - 1] = ANIM_V_SHAKE,
+ [SPECIES_SQUIRTLE - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_WARTORTLE - 1] = ANIM_SHRINK_GROW,
+ [SPECIES_BLASTOISE - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_CATERPIE - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_METAPOD - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_BUTTERFREE - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_WEEDLE - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_KAKUNA - 1] = ANIM_GLOW_ORANGE,
+ [SPECIES_BEEDRILL - 1] = ANIM_H_VIBRATE,
+ [SPECIES_PIDGEY - 1] = ANIM_V_SLIDE_SLOW,
+ [SPECIES_PIDGEOTTO - 1] = ANIM_V_STRETCH,
+ [SPECIES_PIDGEOT - 1] = ANIM_FRONT_FLIP,
+ [SPECIES_RATTATA - 1] = ANIM_RAPID_H_HOPS,
+ [SPECIES_RATICATE - 1] = ANIM_FIGURE_8,
+ [SPECIES_SPEAROW - 1] = ANIM_RISING_WOBBLE,
+ [SPECIES_FEAROW - 1] = ANIM_FIGURE_8,
+ [SPECIES_EKANS - 1] = ANIM_H_STRETCH,
+ [SPECIES_ARBOK - 1] = ANIM_V_STRETCH,
+ [SPECIES_PIKACHU - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_RAICHU - 1] = ANIM_V_STRETCH,
+ [SPECIES_SANDSHREW - 1] = ANIM_SWING_CONCAVE_FAST_SHORT,
+ [SPECIES_SANDSLASH - 1] = ANIM_V_STRETCH,
+ [SPECIES_NIDORAN_F - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_NIDORINA - 1] = ANIM_V_STRETCH,
+ [SPECIES_NIDOQUEEN - 1] = ANIM_H_SHAKE,
+ [SPECIES_NIDORAN_M - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_NIDORINO - 1] = ANIM_SHRINK_GROW,
+ [SPECIES_NIDOKING - 1] = ANIM_H_SHAKE,
+ [SPECIES_CLEFAIRY - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_CLEFABLE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW,
+ [SPECIES_VULPIX - 1] = ANIM_V_STRETCH,
+ [SPECIES_NINETALES - 1] = ANIM_V_SHAKE,
+ [SPECIES_JIGGLYPUFF - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_WIGGLYTUFF - 1] = ANIM_H_JUMPS,
+ [SPECIES_ZUBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GOLBAT - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_ODDISH - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GLOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_VILEPLUME - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_PARAS - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_PARASECT - 1] = ANIM_H_SHAKE,
+ [SPECIES_VENONAT - 1] = ANIM_V_JUMPS_H_JUMPS,
+ [SPECIES_VENOMOTH - 1] = ANIM_ZIGZAG_SLOW,
+ [SPECIES_DIGLETT - 1] = ANIM_V_SHAKE,
+ [SPECIES_DUGTRIO - 1] = ANIM_H_SHAKE_SLOW,
+ [SPECIES_MEOWTH - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_PERSIAN - 1] = ANIM_V_STRETCH,
+ [SPECIES_PSYDUCK - 1] = ANIM_V_JUMPS_H_JUMPS,
+ [SPECIES_GOLDUCK - 1] = ANIM_H_SHAKE_SLOW,
+ [SPECIES_MANKEY - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_PRIMEAPE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_GROWLITHE - 1] = ANIM_BACK_AND_LUNGE,
+ [SPECIES_ARCANINE - 1] = ANIM_H_VIBRATE,
+ [SPECIES_POLIWAG - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_POLIWHIRL - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_POLIWRATH - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_ABRA - 1] = ANIM_H_JUMPS,
+ [SPECIES_KADABRA - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_ALAKAZAM - 1] = ANIM_V_STRETCH,
+ [SPECIES_MACHOP - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MACHOKE - 1] = ANIM_V_SHAKE,
+ [SPECIES_MACHAMP - 1] = ANIM_H_JUMPS,
+ [SPECIES_BELLSPROUT - 1] = ANIM_V_STRETCH,
+ [SPECIES_WEEPINBELL - 1] = ANIM_SWING_CONVEX,
+ [SPECIES_VICTREEBEL - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_TENTACOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_TENTACRUEL - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GEODUDE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_GRAVELER - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_GOLEM - 1] = ANIM_ROTATE_UP_SLAM_DOWN,
+ [SPECIES_PONYTA - 1] = ANIM_GLOW_ORANGE,
+ [SPECIES_RAPIDASH - 1] = ANIM_CIRCULAR_VIBRATE,
+ [SPECIES_SLOWPOKE - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_SLOWBRO - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_MAGNEMITE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE,
+ [SPECIES_MAGNETON - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_FARFETCHD - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_DODUO - 1] = ANIM_H_SHAKE_SLOW,
+ [SPECIES_DODRIO - 1] = ANIM_LUNGE_GROW,
+ [SPECIES_SEEL - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_DEWGONG - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_GRIMER - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_MUK - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SHELLDER - 1] = ANIM_TWIST,
+ [SPECIES_CLOYSTER - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_GASTLY - 1] = ANIM_GLOW_BLACK,
+ [SPECIES_HAUNTER - 1] = ANIM_FLICKER_INCREASING,
+ [SPECIES_GENGAR - 1] = ANIM_GROW_IN_STAGES,
+ [SPECIES_ONIX - 1] = ANIM_RAPID_H_HOPS,
+ [SPECIES_DROWZEE - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW,
+ [SPECIES_HYPNO - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_KRABBY - 1] = ANIM_H_SLIDE,
+ [SPECIES_KINGLER - 1] = ANIM_ZIGZAG_SLOW,
+ [SPECIES_VOLTORB - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_ELECTRODE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_EXEGGCUTE - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_EXEGGUTOR - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_CUBONE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_MAROWAK - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES,
+ [SPECIES_HITMONLEE - 1] = ANIM_H_STRETCH,
+ [SPECIES_HITMONCHAN - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_LICKITUNG - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_KOFFING - 1] = ANIM_SHRINK_GROW,
+ [SPECIES_WEEZING - 1] = ANIM_V_SLIDE,
+ [SPECIES_RHYHORN - 1] = ANIM_V_SHAKE,
+ [SPECIES_RHYDON - 1] = ANIM_SHRINK_GROW,
+ [SPECIES_CHANSEY - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_TANGELA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_KANGASKHAN - 1] = ANIM_V_STRETCH,
+ [SPECIES_HORSEA - 1] = ANIM_TWIST,
+ [SPECIES_SEADRA - 1] = ANIM_V_SLIDE,
+ [SPECIES_GOLDEEN - 1] = ANIM_SWING_CONVEX,
+ [SPECIES_SEAKING - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_STARYU - 1] = ANIM_TWIST_TWICE,
+ [SPECIES_STARMIE - 1] = ANIM_TWIST,
+ [SPECIES_MR_MIME - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_SCYTHER - 1] = ANIM_H_VIBRATE,
+ [SPECIES_JYNX - 1] = ANIM_V_STRETCH,
+ [SPECIES_ELECTABUZZ - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_MAGMAR - 1] = ANIM_H_SHAKE,
+ [SPECIES_PINSIR - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_TAUROS - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_MAGIKARP - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES,
+ [SPECIES_GYARADOS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
+ [SPECIES_LAPRAS - 1] = ANIM_V_STRETCH,
+ [SPECIES_DITTO - 1] = ANIM_CIRCULAR_STRETCH_TWICE,
+ [SPECIES_EEVEE - 1] = ANIM_V_STRETCH,
+ [SPECIES_VAPOREON - 1] = ANIM_V_STRETCH,
+ [SPECIES_JOLTEON - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_FLAREON - 1] = ANIM_V_STRETCH,
+ [SPECIES_PORYGON - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_OMANYTE - 1] = ANIM_V_SLIDE_WOBBLE_SMALL,
+ [SPECIES_OMASTAR - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_KABUTO - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_KABUTOPS - 1] = ANIM_H_SHAKE,
+ [SPECIES_AERODACTYL - 1] = ANIM_V_SLIDE_SLOW,
+ [SPECIES_SNORLAX - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_ARTICUNO - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_ZAPDOS - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_MOLTRES - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_DRATINI - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_DRAGONAIR - 1] = ANIM_V_SHAKE,
+ [SPECIES_DRAGONITE - 1] = ANIM_V_SLIDE_SLOW,
+ [SPECIES_MEWTWO - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_MEW - 1] = ANIM_SWING_CONVEX,
+ [SPECIES_CHIKORITA - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_BAYLEEF - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MEGANIUM - 1] = ANIM_V_STRETCH,
+ [SPECIES_CYNDAQUIL - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_QUILAVA - 1] = ANIM_V_STRETCH,
+ [SPECIES_TYPHLOSION - 1] = ANIM_V_SHAKE,
+ [SPECIES_TOTODILE - 1] = ANIM_H_JUMPS,
+ [SPECIES_CROCONAW - 1] = ANIM_H_SHAKE,
+ [SPECIES_FERALIGATR - 1] = ANIM_H_SHAKE,
+ [SPECIES_SENTRET - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_FURRET - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_HOOTHOOT - 1] = ANIM_V_SLIDE_SLOW,
+ [SPECIES_NOCTOWL - 1] = ANIM_V_STRETCH,
+ [SPECIES_LEDYBA - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_LEDIAN - 1] = ANIM_V_SLIDE_SLOW,
+ [SPECIES_SPINARAK - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW,
+ [SPECIES_ARIADOS - 1] = ANIM_H_SHAKE,
+ [SPECIES_CROBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_CHINCHOU - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_LANTURN - 1] = ANIM_V_SLIDE_WOBBLE_SMALL,
+ [SPECIES_PICHU - 1] = ANIM_V_JUMPS_BIG,
+ [SPECIES_CLEFFA - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_IGGLYBUFF - 1] = ANIM_SWING_CONCAVE_FAST,
+ [SPECIES_TOGEPI - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_TOGETIC - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_NATU - 1] = ANIM_H_JUMPS,
+ [SPECIES_XATU - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_MAREEP - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_FLAAFFY - 1] = ANIM_V_JUMPS_BIG,
+ [SPECIES_AMPHAROS - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_BELLOSSOM - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_MARILL - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_AZUMARILL - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW,
+ [SPECIES_SUDOWOODO - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_POLITOED - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_HOPPIP - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_SKIPLOOM - 1] = ANIM_RISING_WOBBLE,
+ [SPECIES_JUMPLUFF - 1] = ANIM_V_SLIDE_WOBBLE_SMALL,
+ [SPECIES_AIPOM - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_SUNKERN - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_SUNFLORA - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_YANMA - 1] = ANIM_FIGURE_8,
+ [SPECIES_WOOPER - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_QUAGSIRE - 1] = ANIM_H_STRETCH,
+ [SPECIES_ESPEON - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_UMBREON - 1] = ANIM_V_SHAKE,
+ [SPECIES_MURKROW - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SLOWKING - 1] = ANIM_SHRINK_GROW,
+ [SPECIES_MISDREAVUS - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_UNOWN - 1] = ANIM_ZIGZAG_FAST,
+ [SPECIES_WOBBUFFET - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GIRAFARIG - 1] = ANIM_V_JUMPS_BIG,
+ [SPECIES_PINECO - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_FORRETRESS - 1] = ANIM_V_SHAKE,
+ [SPECIES_DUNSPARCE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GLIGAR - 1] = ANIM_SHRINK_GROW,
+ [SPECIES_STEELIX - 1] = ANIM_H_SHAKE,
+ [SPECIES_SNUBBULL - 1] = ANIM_V_STRETCH,
+ [SPECIES_GRANBULL - 1] = ANIM_V_SHAKE,
+ [SPECIES_QWILFISH - 1] = ANIM_GROW_IN_STAGES,
+ [SPECIES_SCIZOR - 1] = ANIM_H_VIBRATE,
+ [SPECIES_SHUCKLE - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_HERACROSS - 1] = ANIM_LUNGE_GROW,
+ [SPECIES_SNEASEL - 1] = ANIM_H_STRETCH,
+ [SPECIES_TEDDIURSA - 1] = ANIM_V_STRETCH,
+ [SPECIES_URSARING - 1] = ANIM_V_SHAKE,
+ [SPECIES_SLUGMA - 1] = ANIM_V_STRETCH,
+ [SPECIES_MAGCARGO - 1] = ANIM_V_STRETCH,
+ [SPECIES_SWINUB - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_PILOSWINE - 1] = ANIM_H_SHAKE,
+ [SPECIES_CORSOLA - 1] = ANIM_H_SLIDE,
+ [SPECIES_REMORAID - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_OCTILLERY - 1] = ANIM_V_STRETCH,
+ [SPECIES_DELIBIRD - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_MANTINE - 1] = ANIM_SWING_CONVEX,
+ [SPECIES_SKARMORY - 1] = ANIM_V_STRETCH,
+ [SPECIES_HOUNDOUR - 1] = ANIM_V_STRETCH,
+ [SPECIES_HOUNDOOM - 1] = ANIM_V_SHAKE,
+ [SPECIES_KINGDRA - 1] = ANIM_CIRCLE_INTO_BG,
+ [SPECIES_PHANPY - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_DONPHAN - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_PORYGON2 - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_STANTLER - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SMEARGLE - 1] = ANIM_H_JUMPS,
+ [SPECIES_TYROGUE - 1] = ANIM_H_STRETCH,
+ [SPECIES_HITMONTOP - 1] = ANIM_H_VIBRATE,
+ [SPECIES_SMOOCHUM - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_ELEKID - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_MAGBY - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MILTANK - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_BLISSEY - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_RAIKOU - 1] = ANIM_FLASH_YELLOW,
+ [SPECIES_ENTEI - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_SUICUNE - 1] = ANIM_V_SHAKE,
+ [SPECIES_LARVITAR - 1] = ANIM_V_JUMPS_SMALL,
+ [SPECIES_PUPITAR - 1] = ANIM_V_SHAKE,
+ [SPECIES_TYRANITAR - 1] = ANIM_H_SHAKE,
+ [SPECIES_LUGIA - 1] = ANIM_GROW_IN_STAGES,
+ [SPECIES_HO_OH - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_CELEBI - 1] = ANIM_RISING_WOBBLE,
+ [SPECIES_TREECKO - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GROVYLE - 1] = ANIM_V_STRETCH,
+ [SPECIES_SCEPTILE - 1] = ANIM_V_SHAKE,
+ [SPECIES_TORCHIC - 1] = ANIM_H_STRETCH,
+ [SPECIES_COMBUSKEN - 1] = ANIM_V_JUMPS_H_JUMPS,
+ [SPECIES_BLAZIKEN - 1] = ANIM_H_SHAKE,
+ [SPECIES_MUDKIP - 1] = ANIM_CIRCULAR_STRETCH_TWICE,
+ [SPECIES_MARSHTOMP - 1] = ANIM_V_SLIDE,
+ [SPECIES_SWAMPERT - 1] = ANIM_V_JUMPS_BIG,
+ [SPECIES_POOCHYENA - 1] = ANIM_V_SHAKE,
+ [SPECIES_MIGHTYENA - 1] = ANIM_V_SHAKE,
+ [SPECIES_ZIGZAGOON - 1] = ANIM_H_SLIDE,
+ [SPECIES_LINOONE - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_WURMPLE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SILCOON - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_BEAUTIFLY - 1] = ANIM_V_SLIDE,
+ [SPECIES_CASCOON - 1] = ANIM_V_SLIDE,
+ [SPECIES_DUSTOX - 1] = ANIM_V_JUMPS_H_JUMPS,
+ [SPECIES_LOTAD - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_LOMBRE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_LUDICOLO - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_SEEDOT - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES,
+ [SPECIES_NUZLEAF - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SHIFTRY - 1] = ANIM_H_VIBRATE,
+ [SPECIES_NINCADA - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_NINJASK - 1] = ANIM_H_SLIDE_SLOW,
+ [SPECIES_SHEDINJA - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_TAILLOW - 1] = ANIM_V_JUMPS_BIG,
+ [SPECIES_SWELLOW - 1] = ANIM_CIRCULAR_STRETCH_TWICE,
+ [SPECIES_SHROOMISH - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_BRELOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SPINDA - 1] = ANIM_H_JUMPS,
+ [SPECIES_WINGULL - 1] = ANIM_H_PIVOT,
+ [SPECIES_PELIPPER - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_SURSKIT - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MASQUERAIN - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_WAILMER - 1] = ANIM_CIRCULAR_STRETCH_TWICE,
+ [SPECIES_WAILORD - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_SKITTY - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_DELCATTY - 1] = ANIM_V_STRETCH,
+ [SPECIES_KECLEON - 1] = ANIM_FLICKER_INCREASING,
+ [SPECIES_BALTOY - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_CLAYDOL - 1] = ANIM_V_SLIDE_WOBBLE_SMALL,
+ [SPECIES_NOSEPASS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_TORKOAL - 1] = ANIM_V_STRETCH,
+ [SPECIES_SABLEYE - 1] = ANIM_GLOW_BLACK,
+ [SPECIES_BARBOACH - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_WHISCASH - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_LUVDISC - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_CORPHISH - 1] = ANIM_V_SHAKE,
+ [SPECIES_CRAWDAUNT - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_FEEBAS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_MILOTIC - 1] = ANIM_GLOW_BLUE,
+ [SPECIES_CARVANHA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_SHARPEDO - 1] = ANIM_H_JUMPS_V_STRETCH_TWICE,
+ [SPECIES_TRAPINCH - 1] = ANIM_V_SHAKE,
+ [SPECIES_VIBRAVA - 1] = ANIM_H_SHAKE,
+ [SPECIES_FLYGON - 1] = ANIM_ZIGZAG_SLOW,
+ [SPECIES_MAKUHITA - 1] = ANIM_SWING_CONCAVE,
+ [SPECIES_HARIYAMA - 1] = ANIM_ROTATE_UP_TO_SIDES,
+ [SPECIES_ELECTRIKE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MANECTRIC - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_NUMEL - 1] = ANIM_V_SLIDE,
+ [SPECIES_CAMERUPT - 1] = ANIM_V_SHAKE,
+ [SPECIES_SPHEAL - 1] = ANIM_SPIN,
+ [SPECIES_SEALEO - 1] = ANIM_V_STRETCH,
+ [SPECIES_WALREIN - 1] = ANIM_H_SHAKE,
+ [SPECIES_CACNEA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_CACTURNE - 1] = ANIM_V_SLIDE,
+ [SPECIES_SNORUNT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_GLALIE - 1] = ANIM_ZIGZAG_FAST,
+ [SPECIES_LUNATONE - 1] = ANIM_SWING_CONVEX_FAST,
+ [SPECIES_SOLROCK - 1] = ANIM_ROTATE_TO_SIDES_TWICE,
+ [SPECIES_AZURILL - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SPOINK - 1] = ANIM_H_JUMPS_V_STRETCH_TWICE,
+ [SPECIES_GRUMPIG - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_PLUSLE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MINUN - 1] = ANIM_CIRCULAR_STRETCH_TWICE,
+ [SPECIES_MAWILE - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_MEDITITE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES,
+ [SPECIES_MEDICHAM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_SWABLU - 1] = ANIM_V_SLIDE,
+ [SPECIES_ALTARIA - 1] = ANIM_H_STRETCH,
+ [SPECIES_WYNAUT - 1] = ANIM_H_JUMPS_V_STRETCH,
+ [SPECIES_DUSKULL - 1] = ANIM_ZIGZAG_FAST,
+ [SPECIES_DUSCLOPS - 1] = ANIM_H_VIBRATE,
+ [SPECIES_ROSELIA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_SLAKOTH - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_VIGOROTH - 1] = ANIM_H_JUMPS,
+ [SPECIES_SLAKING - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_GULPIN - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_SWALOT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_TROPIUS - 1] = ANIM_V_SHAKE,
+ [SPECIES_WHISMUR - 1] = ANIM_H_SLIDE,
+ [SPECIES_LOUDRED - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
+ [SPECIES_EXPLOUD - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_CLAMPERL - 1] = ANIM_TWIST,
+ [SPECIES_HUNTAIL - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_GOREBYSS - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_ABSOL - 1] = ANIM_CIRCULAR_VIBRATE,
+ [SPECIES_SHUPPET - 1] = ANIM_V_SLIDE_WOBBLE,
+ [SPECIES_BANETTE - 1] = ANIM_SWING_CONVEX,
+ [SPECIES_SEVIPER - 1] = ANIM_V_STRETCH,
+ [SPECIES_ZANGOOSE - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_RELICANTH - 1] = ANIM_TIP_MOVE_FORWARD,
+ [SPECIES_ARON - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_LAIRON - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_AGGRON - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_CASTFORM - 1] = ANIM_H_SLIDE_WOBBLE,
+ [SPECIES_VOLBEAT - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_ILLUMISE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES,
+ [SPECIES_LILEEP - 1] = ANIM_V_STRETCH,
+ [SPECIES_CRADILY - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_ANORITH - 1] = ANIM_TWIST,
+ [SPECIES_ARMALDO - 1] = ANIM_V_SHAKE,
+ [SPECIES_RALTS - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW,
+ [SPECIES_KIRLIA - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_GARDEVOIR - 1] = ANIM_V_SQUISH_AND_BOUNCE,
+ [SPECIES_BAGON - 1] = ANIM_V_SHAKE_TWICE,
+ [SPECIES_SHELGON - 1] = ANIM_V_SLIDE,
+ [SPECIES_SALAMENCE - 1] = ANIM_H_SHAKE,
+ [SPECIES_BELDUM - 1] = ANIM_H_SHAKE,
+ [SPECIES_METANG - 1] = ANIM_V_SLIDE,
+ [SPECIES_METAGROSS - 1] = ANIM_V_SHAKE,
+ [SPECIES_REGIROCK - 1] = ANIM_CIRCULAR_STRETCH_TWICE,
+ [SPECIES_REGICE - 1] = ANIM_FOUR_PETAL,
+ [SPECIES_REGISTEEL - 1] = ANIM_GROW_VIBRATE,
+ [SPECIES_KYOGRE - 1] = ANIM_SWING_CONCAVE_FAST_SHORT,
+ [SPECIES_GROUDON - 1] = ANIM_V_SHAKE,
+ [SPECIES_RAYQUAZA - 1] = ANIM_H_SHAKE,
+ [SPECIES_LATIAS - 1] = ANIM_SWING_CONCAVE_FAST_SHORT,
+ [SPECIES_LATIOS - 1] = ANIM_V_SHAKE,
+ [SPECIES_JIRACHI - 1] = ANIM_SWING_CONVEX,
+ [SPECIES_DEOXYS - 1] = ANIM_H_PIVOT,
+ [SPECIES_CHIMECHO - 1] = ANIM_H_SLIDE_WOBBLE,
};
static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] =
{
- [SPECIES_BLASTOISE - 1] = 0x32,
- [SPECIES_WEEDLE - 1] = 0x0a,
- [SPECIES_KAKUNA - 1] = 0x14,
- [SPECIES_BEEDRILL - 1] = 0x23,
- [SPECIES_PIDGEOTTO - 1] = 0x19,
- [SPECIES_FEAROW - 1] = 0x02,
- [SPECIES_EKANS - 1] = 0x1e,
- [SPECIES_NIDORAN_F - 1] = 0x1c,
- [SPECIES_NIDOKING - 1] = 0x19,
- [SPECIES_PARAS - 1] = 0x0a,
- [SPECIES_PARASECT - 1] = 0x2d,
- [SPECIES_VENONAT - 1] = 0x14,
- [SPECIES_DIGLETT - 1] = 0x19,
- [SPECIES_DUGTRIO - 1] = 0x23,
- [SPECIES_MEOWTH - 1] = 0x28,
- [SPECIES_PERSIAN - 1] = 0x14,
- [SPECIES_MANKEY - 1] = 0x14,
- [SPECIES_GROWLITHE - 1] = 0x1e,
- [SPECIES_ARCANINE - 1] = 0x28,
- [SPECIES_POLIWHIRL - 1] = 0x05,
- [SPECIES_WEEPINBELL - 1] = 0x03,
- [SPECIES_MUK - 1] = 0x2d,
- [SPECIES_SHELLDER - 1] = 0x14,
- [SPECIES_HAUNTER - 1] = 0x17,
- [SPECIES_DROWZEE - 1] = 0x30,
- [SPECIES_HYPNO - 1] = 0x28,
- [SPECIES_HITMONCHAN - 1] = 0x19,
- [SPECIES_SCYTHER - 1] = 0x0a,
- [SPECIES_TAUROS - 1] = 0x0a,
- [SPECIES_TYPHLOSION - 1] = 0x14,
- [SPECIES_FERALIGATR - 1] = 0x05,
- [SPECIES_NATU - 1] = 0x1e,
- [SPECIES_MAREEP - 1] = 0x32,
- [SPECIES_AMPHAROS - 1] = 0x0a,
- [SPECIES_POLITOED - 1] = 0x28,
- [SPECIES_DUNSPARCE - 1] = 0x0a,
- [SPECIES_STEELIX - 1] = 0x2d,
- [SPECIES_QWILFISH - 1] = 0x27,
- [SPECIES_SCIZOR - 1] = 0x13,
- [SPECIES_OCTILLERY - 1] = 0x14,
- [SPECIES_SMOOCHUM - 1] = 0x28,
- [SPECIES_TYRANITAR - 1] = 0x0a,
- [SPECIES_LUGIA - 1] = 0x14,
- [SPECIES_WAILORD - 1] = 0x0a,
- [SPECIES_KECLEON - 1] = 0x1e,
- [SPECIES_MILOTIC - 1] = 0x2d,
- [SPECIES_SPHEAL - 1] = 0x0f,
- [SPECIES_SNORUNT - 1] = 0x14,
- [SPECIES_GRUMPIG - 1] = 0x0f,
- [SPECIES_WYNAUT - 1] = 0x0f,
- [SPECIES_DUSCLOPS - 1] = 0x1e,
- [SPECIES_ABSOL - 1] = 0x2d,
- [SPECIES_SALAMENCE - 1] = 0x46,
- [SPECIES_KYOGRE - 1] = 0x3c,
- [SPECIES_RAYQUAZA - 1] = 0x3c,
+ [SPECIES_BLASTOISE - 1] = 50,
+ [SPECIES_WEEDLE - 1] = 10,
+ [SPECIES_KAKUNA - 1] = 20,
+ [SPECIES_BEEDRILL - 1] = 35,
+ [SPECIES_PIDGEOTTO - 1] = 25,
+ [SPECIES_FEAROW - 1] = 2,
+ [SPECIES_EKANS - 1] = 30,
+ [SPECIES_NIDORAN_F - 1] = 28,
+ [SPECIES_NIDOKING - 1] = 25,
+ [SPECIES_PARAS - 1] = 10,
+ [SPECIES_PARASECT - 1] = 45,
+ [SPECIES_VENONAT - 1] = 20,
+ [SPECIES_DIGLETT - 1] = 25,
+ [SPECIES_DUGTRIO - 1] = 35,
+ [SPECIES_MEOWTH - 1] = 40,
+ [SPECIES_PERSIAN - 1] = 20,
+ [SPECIES_MANKEY - 1] = 20,
+ [SPECIES_GROWLITHE - 1] = 30,
+ [SPECIES_ARCANINE - 1] = 40,
+ [SPECIES_POLIWHIRL - 1] = 5,
+ [SPECIES_WEEPINBELL - 1] = 3,
+ [SPECIES_MUK - 1] = 45,
+ [SPECIES_SHELLDER - 1] = 20,
+ [SPECIES_HAUNTER - 1] = 23,
+ [SPECIES_DROWZEE - 1] = 48,
+ [SPECIES_HYPNO - 1] = 40,
+ [SPECIES_HITMONCHAN - 1] = 25,
+ [SPECIES_SCYTHER - 1] = 10,
+ [SPECIES_TAUROS - 1] = 10,
+ [SPECIES_TYPHLOSION - 1] = 20,
+ [SPECIES_FERALIGATR - 1] = 5,
+ [SPECIES_NATU - 1] = 30,
+ [SPECIES_MAREEP - 1] = 50,
+ [SPECIES_AMPHAROS - 1] = 10,
+ [SPECIES_POLITOED - 1] = 40,
+ [SPECIES_DUNSPARCE - 1] = 10,
+ [SPECIES_STEELIX - 1] = 45,
+ [SPECIES_QWILFISH - 1] = 39,
+ [SPECIES_SCIZOR - 1] = 19,
+ [SPECIES_OCTILLERY - 1] = 20,
+ [SPECIES_SMOOCHUM - 1] = 40,
+ [SPECIES_TYRANITAR - 1] = 10,
+ [SPECIES_LUGIA - 1] = 20,
+ [SPECIES_WAILORD - 1] = 10,
+ [SPECIES_KECLEON - 1] = 30,
+ [SPECIES_MILOTIC - 1] = 45,
+ [SPECIES_SPHEAL - 1] = 15,
+ [SPECIES_SNORUNT - 1] = 20,
+ [SPECIES_GRUMPIG - 1] = 15,
+ [SPECIES_WYNAUT - 1] = 15,
+ [SPECIES_DUSCLOPS - 1] = 30,
+ [SPECIES_ABSOL - 1] = 45,
+ [SPECIES_SALAMENCE - 1] = 70,
+ [SPECIES_KYOGRE - 1] = 60,
+ [SPECIES_RAYQUAZA - 1] = 60,
};
const u8 gPPUpGetMask[] = {0x03, 0x0c, 0x30, 0xc0}; // Masks for getting PP Up count, also PP Max values
@@ -1937,119 +1912,119 @@ static const u8 sHoldEffectToType[][2] =
{HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
};
-const struct SpriteTemplate gUnknown_08329D98[MAX_BATTLERS_COUNT] =
+const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] =
{
- { // B_POSITION_PLAYER_LEFT
+ [B_POSITION_PLAYER_LEFT] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
- .images = gUnknown_082FF3A8,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .images = gBattlerPicTable_PlayerLeft,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- { // B_POSITION_OPPONENT_LEFT
+ [B_POSITION_OPPONENT_LEFT] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACA8,
+ .oam = &gOamData_BattleSpriteOpponentSide,
.anims = NULL,
- .images = gUnknown_082FF3C8,
- .affineAnims = gUnknown_082FF694,
+ .images = gBattlerPicTable_OpponentLeft,
+ .affineAnims = gAffineAnims_BattleSpriteOpponentSide,
.callback = SpriteCb_WildMon,
},
- { // B_POSITION_PLAYER_RIGHT
+ [B_POSITION_PLAYER_RIGHT] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
- .images = gUnknown_082FF3E8,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .images = gBattlerPicTable_PlayerRight,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- { // B_POSITION_OPPONENT_RIGHT
+ [B_POSITION_OPPONENT_RIGHT] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACA8,
+ .oam = &gOamData_BattleSpriteOpponentSide,
.anims = NULL,
- .images = gUnknown_082FF408,
- .affineAnims = gUnknown_082FF694,
+ .images = gBattlerPicTable_OpponentRight,
+ .affineAnims = gAffineAnims_BattleSpriteOpponentSide,
.callback = SpriteCb_WildMon
},
};
-static const struct SpriteTemplate gSpriteTemplateTable_TrainerBackSprites[] =
+static const struct SpriteTemplate sTrainerBackSpriteTemplates[] =
{
- {
+ [TRAINER_BACK_PIC_BRENDAN] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_Brendan,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_MAY] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_May,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_RED] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_Red,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_LEAF] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_Leaf,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_RubySapphireBrendan,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_RubySapphireMay,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_WALLY] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_Wally,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
- {
+ [TRAINER_BACK_PIC_STEVEN] = {
.tileTag = 0xFFFF,
.paletteTag = 0,
- .oam = &gOamData_831ACB0,
+ .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL,
.images = gTrainerBackPicTable_Steven,
- .affineAnims = gUnknown_082FF618,
- .callback = sub_8039BB4,
+ .affineAnims = gAffineAnims_BattleSpritePlayerSide,
+ .callback = SpriteCB_BattleSpriteStartSlideLeft,
},
};
@@ -2247,7 +2222,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value);
SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
- if (fixedIV < 32)
+ if (fixedIV < USE_RANDOM_IVS)
{
SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
@@ -2261,20 +2236,20 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
u32 iv;
value = Random();
- iv = value & 0x1F;
+ iv = value & MAX_IV_MASK;
SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv);
- iv = (value & 0x3E0) >> 5;
+ iv = (value & (MAX_IV_MASK << 5)) >> 5;
SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv);
- iv = (value & 0x7C00) >> 10;
+ iv = (value & (MAX_IV_MASK << 10)) >> 10;
SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv);
value = Random();
- iv = value & 0x1F;
+ iv = value & MAX_IV_MASK;
SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv);
- iv = (value & 0x3E0) >> 5;
+ iv = (value & (MAX_IV_MASK << 5)) >> 5;
SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv);
- iv = (value & 0x7C00) >> 10;
+ iv = (value & (MAX_IV_MASK << 10)) >> 10;
SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv);
}
@@ -2304,14 +2279,14 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level,
{
u32 personality;
- if ((u8)(unownLetter - 1) < 28)
+ if ((u8)(unownLetter - 1) < NUM_UNOWN_FORMS)
{
u16 actualLetter;
do
{
personality = Random32();
- actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28);
+ actualLetter = GET_UNOWN_LETTER(personality);
}
while (nature != GetNatureFromPersonality(personality)
|| gender != GetGenderFromSpeciesAndPersonality(species, personality)
@@ -2342,7 +2317,7 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level)
personality = Random32();
}
while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE);
- CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId);
+ CreateMon(mon, species, level, USE_RANDOM_IVS, 1, personality, OT_ID_PRESET, otId);
}
void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality)
@@ -2524,7 +2499,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m
CreateMon(mon,
src->party[monId].species,
GetFrontierEnemyMonLevel(src->lvlMode - 1),
- 0x1F,
+ MAX_PER_STAT_IVS,
TRUE,
personality,
OT_ID_PRESET,
@@ -2578,7 +2553,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level,
CalculateMonStats(mon);
}
-void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest)
+void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest)
{
s32 i;
u16 heldItem;
@@ -2587,7 +2562,7 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest)
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
if (heldItem == ITEM_ENIGMA_BERRY)
- heldItem = 0;
+ heldItem = ITEM_NONE;
dest->heldItem = heldItem;
@@ -2615,22 +2590,23 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest)
GetMonData(mon, MON_DATA_NICKNAME, dest->nickname);
}
-void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
+void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
{
- bool32 obedient = TRUE;
+ bool32 isEventLegal = TRUE;
CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
- SetMonData(mon, MON_DATA_OBEDIENCE, &obedient);
+ SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal);
}
-bool8 sub_80688F8(u8 caseId, u8 battlerId)
+// If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form
+bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
{
switch (caseId)
{
case 0:
default:
return FALSE;
- case 1:
+ case 1: // Player's side in battle
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
return FALSE;
if (!gMain.inBattle)
@@ -2640,7 +2616,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
break;
case 2:
break;
- case 3:
+ case 3: // Summary Screen
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
return FALSE;
if (!gMain.inBattle)
@@ -2650,7 +2626,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
return FALSE;
case 4:
break;
- case 5:
+ case 5: // In move animation, e.g. in Role Play or Snatch
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (!gMain.inBattle)
@@ -2685,7 +2661,7 @@ static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId)
u16 statValue = 0;
u8 nature;
- if (gBattleTypeFlags & BATTLE_TYPE_20 || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS)
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS)
return 0;
ivVal = GetMonData(mon, MON_DATA_HP_IV + statId, NULL);
@@ -2729,8 +2705,8 @@ u16 GetUnionRoomTrainerPic(void)
u8 linkId;
u32 arrId;
- if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
- linkId = gUnknown_0203C7B4 ^ 1;
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
+ linkId = gRecordedBattleMultiplayerId ^ 1;
else
linkId = GetMultiplayerId() ^ 1;
@@ -2744,8 +2720,8 @@ u16 GetUnionRoomTrainerClass(void)
u8 linkId;
u32 arrId;
- if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
- linkId = gUnknown_0203C7B4 ^ 1;
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
+ linkId = gRecordedBattleMultiplayerId ^ 1;
else
linkId = GetMultiplayerId() ^ 1;
@@ -2754,14 +2730,14 @@ u16 GetUnionRoomTrainerClass(void)
return gFacilityClassToTrainerClass[gLinkPlayerFacilityClasses[arrId]];
}
-void CreateObedientEnemyMon(void)
+void CreateEventLegalEnemyMon(void)
{
s32 species = gSpecialVar_0x8004;
s32 level = gSpecialVar_0x8005;
s32 itemId = gSpecialVar_0x8006;
ZeroEnemyPartyMons();
- CreateObedientMon(&gEnemyParty[0], species, level, 32, 0, 0, 0, 0);
+ CreateEventLegalMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, 0, 0);
if (itemId)
{
u8 heldItem[2];
@@ -2859,13 +2835,14 @@ void CalculateMonStats(struct Pokemon *mon)
{
if (currentHP == 0 && oldMaxHP == 0)
currentHP = newMaxHP;
- else if (currentHP != 0)
+ else if (currentHP != 0) {
// BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch.
currentHP += newMaxHP - oldMaxHP;
#ifdef BUGFIX
if (currentHP <= 0)
currentHP = 1;
#endif
+ }
else
return;
}
@@ -2991,7 +2968,7 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
{
- u32 retVal = 0;
+ u32 retVal = MOVE_NONE;
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL);
@@ -3007,7 +2984,7 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
{
sLearningMoveTableID++;
if (gLevelUpLearnsets[species][sLearningMoveTableID] == LEVEL_UP_END)
- return 0;
+ return MOVE_NONE;
}
}
@@ -3366,7 +3343,7 @@ u8 CountAliveMonsInBattle(u8 caseId)
static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
{
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
return FALSE;
else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
return FALSE;
@@ -3453,11 +3430,11 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition)
else if (gUnknown_020249B4[1])
gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition];
else
- gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
+ gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.paletteTag = speciesTag;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
- gMultiuseSpriteTemplate.anims = gUnknown_082FF70C;
+ gMultiuseSpriteTemplate.anims = gAnims_MonPic;
else if (speciesTag > SPECIES_SHINY_TAG)
gMultiuseSpriteTemplate.anims = gMonFrontAnimsPtrTable[speciesTag - SPECIES_SHINY_TAG];
else
@@ -3469,7 +3446,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{
- gMultiuseSpriteTemplate = gSpriteTemplateTable_TrainerBackSprites[trainerSpriteId];
+ gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerSpriteId];
gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId];
}
else
@@ -3477,7 +3454,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
if (gMonSpritesGfxPtr != NULL)
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else
- gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
+ gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId];
}
}
@@ -3487,7 +3464,7 @@ void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition)
if (gMonSpritesGfxPtr != NULL)
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else
- gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
+ gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.paletteTag = arg0;
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[arg0];
@@ -3905,32 +3882,32 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
case MON_DATA_EFFORT_RIBBON:
retVal = substruct3->effortRibbon;
break;
- case MON_DATA_GIFT_RIBBON_1:
- retVal = substruct3->giftRibbon1;
+ case MON_DATA_MARINE_RIBBON:
+ retVal = substruct3->marineRibbon;
break;
- case MON_DATA_GIFT_RIBBON_2:
- retVal = substruct3->giftRibbon2;
+ case MON_DATA_LAND_RIBBON:
+ retVal = substruct3->landRibbon;
break;
- case MON_DATA_GIFT_RIBBON_3:
- retVal = substruct3->giftRibbon3;
+ case MON_DATA_SKY_RIBBON:
+ retVal = substruct3->skyRibbon;
break;
- case MON_DATA_GIFT_RIBBON_4:
- retVal = substruct3->giftRibbon4;
+ case MON_DATA_COUNTRY_RIBBON:
+ retVal = substruct3->countryRibbon;
break;
- case MON_DATA_GIFT_RIBBON_5:
- retVal = substruct3->giftRibbon5;
+ case MON_DATA_NATIONAL_RIBBON:
+ retVal = substruct3->nationalRibbon;
break;
- case MON_DATA_GIFT_RIBBON_6:
- retVal = substruct3->giftRibbon6;
+ case MON_DATA_EARTH_RIBBON:
+ retVal = substruct3->earthRibbon;
break;
- case MON_DATA_GIFT_RIBBON_7:
- retVal = substruct3->giftRibbon7;
+ case MON_DATA_WORLD_RIBBON:
+ retVal = substruct3->worldRibbon;
break;
- case MON_DATA_FATEFUL_ENCOUNTER:
- retVal = substruct3->fatefulEncounter;
+ case MON_DATA_UNUSED_RIBBONS:
+ retVal = substruct3->unusedRibbons;
break;
- case MON_DATA_OBEDIENCE:
- retVal = substruct3->obedient;
+ case MON_DATA_EVENT_LEGAL:
+ retVal = substruct3->eventLegal;
break;
case MON_DATA_SPECIES2:
retVal = substruct0->species;
@@ -3950,9 +3927,9 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
u16 move = moves[i];
if (substruct1->moves[0] == move
- || substruct1->moves[1] == move
- || substruct1->moves[2] == move
- || substruct1->moves[3] == move)
+ || substruct1->moves[1] == move
+ || substruct1->moves[2] == move
+ || substruct1->moves[3] == move)
retVal |= gBitTable[i];
i++;
}
@@ -3972,13 +3949,13 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
retVal += substruct3->victoryRibbon;
retVal += substruct3->artistRibbon;
retVal += substruct3->effortRibbon;
- retVal += substruct3->giftRibbon1;
- retVal += substruct3->giftRibbon2;
- retVal += substruct3->giftRibbon3;
- retVal += substruct3->giftRibbon4;
- retVal += substruct3->giftRibbon5;
- retVal += substruct3->giftRibbon6;
- retVal += substruct3->giftRibbon7;
+ retVal += substruct3->marineRibbon;
+ retVal += substruct3->landRibbon;
+ retVal += substruct3->skyRibbon;
+ retVal += substruct3->countryRibbon;
+ retVal += substruct3->nationalRibbon;
+ retVal += substruct3->earthRibbon;
+ retVal += substruct3->worldRibbon;
}
break;
case MON_DATA_RIBBONS:
@@ -3995,13 +3972,13 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
| (substruct3->victoryRibbon << 17)
| (substruct3->artistRibbon << 18)
| (substruct3->effortRibbon << 19)
- | (substruct3->giftRibbon1 << 20)
- | (substruct3->giftRibbon2 << 21)
- | (substruct3->giftRibbon3 << 22)
- | (substruct3->giftRibbon4 << 23)
- | (substruct3->giftRibbon5 << 24)
- | (substruct3->giftRibbon6 << 25)
- | (substruct3->giftRibbon7 << 26);
+ | (substruct3->marineRibbon << 20)
+ | (substruct3->landRibbon << 21)
+ | (substruct3->skyRibbon << 22)
+ | (substruct3->countryRibbon << 23)
+ | (substruct3->nationalRibbon << 24)
+ | (substruct3->earthRibbon << 25)
+ | (substruct3->worldRibbon << 26);
}
break;
default:
@@ -4284,42 +4261,42 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
case MON_DATA_EFFORT_RIBBON:
SET8(substruct3->effortRibbon);
break;
- case MON_DATA_GIFT_RIBBON_1:
- SET8(substruct3->giftRibbon1);
+ case MON_DATA_MARINE_RIBBON:
+ SET8(substruct3->marineRibbon);
break;
- case MON_DATA_GIFT_RIBBON_2:
- SET8(substruct3->giftRibbon2);
+ case MON_DATA_LAND_RIBBON:
+ SET8(substruct3->landRibbon);
break;
- case MON_DATA_GIFT_RIBBON_3:
- SET8(substruct3->giftRibbon3);
+ case MON_DATA_SKY_RIBBON:
+ SET8(substruct3->skyRibbon);
break;
- case MON_DATA_GIFT_RIBBON_4:
- SET8(substruct3->giftRibbon4);
+ case MON_DATA_COUNTRY_RIBBON:
+ SET8(substruct3->countryRibbon);
break;
- case MON_DATA_GIFT_RIBBON_5:
- SET8(substruct3->giftRibbon5);
+ case MON_DATA_NATIONAL_RIBBON:
+ SET8(substruct3->nationalRibbon);
break;
- case MON_DATA_GIFT_RIBBON_6:
- SET8(substruct3->giftRibbon6);
+ case MON_DATA_EARTH_RIBBON:
+ SET8(substruct3->earthRibbon);
break;
- case MON_DATA_GIFT_RIBBON_7:
- SET8(substruct3->giftRibbon7);
+ case MON_DATA_WORLD_RIBBON:
+ SET8(substruct3->worldRibbon);
break;
- case MON_DATA_FATEFUL_ENCOUNTER:
- SET8(substruct3->fatefulEncounter);
+ case MON_DATA_UNUSED_RIBBONS:
+ SET8(substruct3->unusedRibbons);
break;
- case MON_DATA_OBEDIENCE:
- SET8(substruct3->obedient);
+ case MON_DATA_EVENT_LEGAL:
+ SET8(substruct3->eventLegal);
break;
case MON_DATA_IVS:
{
u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
- substruct3->hpIV = ivs & 0x1F;
- substruct3->attackIV = (ivs >> 5) & 0x1F;
- substruct3->defenseIV = (ivs >> 10) & 0x1F;
- substruct3->speedIV = (ivs >> 15) & 0x1F;
- substruct3->spAttackIV = (ivs >> 20) & 0x1F;
- substruct3->spDefenseIV = (ivs >> 25) & 0x1F;
+ substruct3->hpIV = ivs & MAX_IV_MASK;
+ substruct3->attackIV = (ivs >> 5) & MAX_IV_MASK;
+ substruct3->defenseIV = (ivs >> 10) & MAX_IV_MASK;
+ substruct3->speedIV = (ivs >> 15) & MAX_IV_MASK;
+ substruct3->spAttackIV = (ivs >> 20) & MAX_IV_MASK;
+ substruct3->spDefenseIV = (ivs >> 25) & MAX_IV_MASK;
break;
}
default:
@@ -4638,30 +4615,56 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
{
- return PokemonUseItemEffects(mon, item, partyIndex, moveIndex, 0);
-}
-
-bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
+ return PokemonUseItemEffects(mon, item, partyIndex, moveIndex, FALSE);
+}
+
+#define UPDATE_FRIENDSHIP_FROM_ITEM \
+{ \
+ if ((retVal == 0 || friendshipOnly) && !ShouldSkipFriendshipChange() && friendshipChange == 0) \
+ { \
+ friendshipChange = itemEffect[itemEffectParam]; \
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); \
+ if (friendshipChange > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP) \
+ friendship += 150 * friendshipChange / 100; \
+ else \
+ friendship += friendshipChange; \
+ if (friendshipChange > 0) \
+ { \
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL) \
+ friendship++; \
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId()) \
+ friendship++; \
+ } \
+ if (friendship < 0) \
+ friendship = 0; \
+ if (friendship > MAX_FRIENDSHIP) \
+ friendship = MAX_FRIENDSHIP; \
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); \
+ retVal = FALSE; \
+ } \
+}
+
+// Returns TRUE if the item has no effect on the Pokémon, FALSE otherwise
+bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, bool8 usedByAI)
{
u32 dataUnsigned;
s32 dataSigned;
s32 friendship;
- s32 cmdIndex;
+ s32 i;
bool8 retVal = TRUE;
const u8 *itemEffect;
- u8 var_3C = 6;
- u32 var_38;
- s8 var_34 = 0;
+ u8 itemEffectParam = ITEM_EFFECT_ARG_START;
+ u32 temp1, temp2;
+ s8 friendshipChange = 0;
u8 holdEffect;
- u8 battlerId = 4;
- u32 var_28 = 0;
+ u8 battlerId = MAX_BATTLERS_COUNT;
+ u32 friendshipOnly = FALSE;
u16 heldItem;
- u8 r10;
- u32 r4;
- u32 r5;
- s8 r2;
+ u8 effectFlags;
+ s8 evChange;
u16 evCount;
+ // Get item hold effect
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
if (heldItem == ITEM_ENIGMA_BERRY)
{
@@ -4675,19 +4678,20 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
holdEffect = ItemId_GetHoldEffect(heldItem);
}
+ // Get battler id (if relevant)
gPotentialItemEffectBattler = gBattlerInMenuId;
if (gMain.inBattle)
{
gActiveBattler = gBattlerInMenuId;
- cmdIndex = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER);
- while (cmdIndex < gBattlersCount)
+ i = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER);
+ while (i < gBattlersCount)
{
- if (gBattlerPartyIndexes[cmdIndex] == partyIndex)
+ if (gBattlerPartyIndexes[i] == partyIndex)
{
- battlerId = cmdIndex;
+ battlerId = i;
break;
}
- cmdIndex += 2;
+ i += 2;
}
}
else
@@ -4696,11 +4700,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
battlerId = MAX_BATTLERS_COUNT;
}
+ // Skip using the item if it won't do anything
if (!ITEM_HAS_EFFECT(item))
return TRUE;
if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY)
return TRUE;
+ // Get item effect
if (item == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
@@ -4713,79 +4719,98 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
itemEffect = gItemEffectTable[item - ITEM_POTION];
}
- for (cmdIndex = 0; cmdIndex < 6; cmdIndex++)
+ // Do item effect
+ for (i = 0; i < ITEM_EFFECT_ARG_START; i++)
{
- switch (cmdIndex)
+ switch (i)
{
- // infatuation heal, x attack, sacred ash and dire hit
+
+ // Handle ITEM0 effects (infatuation, Dire Hit, X Attack). ITEM0_SACRED_ASH is handled in party_menu.c
case 0:
- if ((itemEffect[cmdIndex] & ITEM0_INFATUATION)
+ // Cure infatuation
+ if ((itemEffect[i] & ITEM0_INFATUATION)
&& gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_INFATUATION))
{
gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM0_DIRE_HIT)
+
+ // Dire Hit
+ if ((itemEffect[i] & ITEM0_DIRE_HIT)
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY))
{
gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK)
+
+ // X Attack
+ if ((itemEffect[i] & ITEM0_X_ATTACK)
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & ITEM0_X_ATTACK;
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[i] & ITEM0_X_ATTACK;
if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE;
retVal = FALSE;
}
break;
- // in-battle stat boosting effects
+
+ // Handle ITEM1 effects (in-battle stat boosting effects)
case 1:
- if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND)
+ // X Defend
+ if ((itemEffect[i] & ITEM1_X_DEFEND)
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & ITEM1_X_DEFEND) >> 4;
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[i] & ITEM1_X_DEFEND) >> 4;
if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM1_X_SPEED)
+
+ // X Speed
+ if ((itemEffect[i] & ITEM1_X_SPEED)
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & ITEM1_X_SPEED;
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[i] & ITEM1_X_SPEED;
if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE;
retVal = FALSE;
}
break;
- // more stat boosting effects
+ // Handle ITEM2 effects (more stat boosting effects)
case 2:
- if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY)
+ // X Accuracy
+ if ((itemEffect[i] & ITEM2_X_ACCURACY)
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & ITEM2_X_ACCURACY) >> 4;
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[i] & ITEM2_X_ACCURACY) >> 4;
if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM2_X_SPATK)
+
+ // X Sp Attack
+ if ((itemEffect[i] & ITEM2_X_SPATK)
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & ITEM2_X_SPATK;
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[i] & ITEM2_X_SPATK;
if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE;
retVal = FALSE;
}
break;
+
+ // Handle ITEM3 effects (Guard Spec, Rare Candy, cure status)
case 3:
- if ((itemEffect[cmdIndex] & ITEM3_GUARD_SPEC)
+ // Guard Spec
+ if ((itemEffect[i] & ITEM3_GUARD_SPEC)
&& gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0)
{
gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP)
+
+ // Rare Candy
+ if ((itemEffect[i] & ITEM3_LEVEL_UP)
&& GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL)
{
dataUnsigned = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1];
@@ -4793,106 +4818,120 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
CalculateMonStats(mon);
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM3_SLEEP)
- && HealStatusConditions(mon, partyIndex, 7, battlerId) == 0)
+
+ // Cure status
+ if ((itemEffect[i] & ITEM3_SLEEP)
+ && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battlerId) == 0)
{
- if (battlerId != 4)
+ if (battlerId != MAX_BATTLERS_COUNT)
gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM3_POISON) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId) == 0)
+ if ((itemEffect[i] & ITEM3_POISON) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battlerId) == 0)
+ if ((itemEffect[i] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battlerId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & ITEM3_FREEZE) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE, battlerId) == 0)
+ if ((itemEffect[i] & ITEM3_FREEZE) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE, battlerId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battlerId) == 0)
+ if ((itemEffect[i] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battlerId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & ITEM3_CONFUSION) // heal confusion
+ if ((itemEffect[i] & ITEM3_CONFUSION) // heal confusion
&& gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION))
{
gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION;
retVal = FALSE;
}
break;
- // EV, HP, and PP raising effects
+
+ // Handle ITEM4 effects (Change HP/Atk EVs, HP heal, PP heal, PP up, Revive, and evolution stones)
case 4:
- r10 = itemEffect[cmdIndex];
- if (r10 & ITEM4_PP_UP)
+ effectFlags = itemEffect[i];
+
+ // PP Up
+ if (effectFlags & ITEM4_PP_UP)
{
- r10 &= ~ITEM4_PP_UP;
+ effectFlags &= ~ITEM4_PP_UP;
dataUnsigned = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
- var_38 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
- if (dataUnsigned <= 2 && var_38 > 4)
+ temp1 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (dataUnsigned <= 2 && temp1 > 4)
{
dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex];
SetMonData(mon, MON_DATA_PP_BONUSES, &dataUnsigned);
- dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - var_38;
+ dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - temp1;
dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + dataUnsigned;
SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
retVal = FALSE;
}
}
- var_38 = 0;
- while (r10 != 0)
+ temp1 = 0;
+
+ // Loop through and try each of the remaining ITEM4 effects
+ while (effectFlags != 0)
{
- if (r10 & 1)
+ if (effectFlags & 1)
{
- switch (var_38)
+ switch (temp1)
{
- case 0:
- case 1:
- // ev raise
+ case 0: // ITEM4_EV_HP
+ case 1: // ITEM4_EV_ATK
evCount = GetMonEVCount(mon);
- r5 = itemEffect[var_3C];
- dataSigned = GetMonData(mon, sGetMonDataEVConstants[var_38], NULL);
- r2 = r5;
- if (r2 > 0)
+ temp2 = itemEffect[itemEffectParam];
+ dataSigned = GetMonData(mon, sGetMonDataEVConstants[temp1], NULL);
+ evChange = temp2;
+
+ if (evChange > 0) // Increasing EV (HP or Atk)
{
+ // Has EV increase limit already been reached?
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
if (dataSigned >= EV_ITEM_RAISE_LIMIT)
break;
- if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT)
- r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2;
+ // Limit the increase
+ if (dataSigned + evChange > EV_ITEM_RAISE_LIMIT)
+ temp2 = EV_ITEM_RAISE_LIMIT - (dataSigned + evChange) + evChange;
else
- r5 = r2;
+ temp2 = evChange;
- if (evCount + r5 > MAX_TOTAL_EVS)
- r5 += MAX_TOTAL_EVS - (evCount + r5);
- dataSigned += r5;
+ if (evCount + temp2 > MAX_TOTAL_EVS)
+ temp2 += MAX_TOTAL_EVS - (evCount + temp2);
+
+ dataSigned += temp2;
}
- else
+ else // Decreasing EV (HP or Atk)
{
if (dataSigned == 0)
{
- var_28 = 1;
- var_3C++;
+ // No EVs to lose, but make sure friendship updates anyway
+ friendshipOnly = TRUE;
+ itemEffectParam++;
break;
}
- dataSigned += r2;
+ dataSigned += evChange;
if (dataSigned < 0)
dataSigned = 0;
}
- SetMonData(mon, sGetMonDataEVConstants[var_38], &dataSigned);
+
+ // Update EVs and stats
+ SetMonData(mon, sGetMonDataEVConstants[temp1], &dataSigned);
CalculateMonStats(mon);
- var_3C++;
+ itemEffectParam++;
retVal = FALSE;
break;
- case 2:
- // revive
- if (r10 & 0x10)
+
+ case 2: // ITEM4_HEAL_HP
+ // If Revive, update number of times revive has been used
+ if (effectFlags & (ITEM4_REVIVE >> 2))
{
if (GetMonData(mon, MON_DATA_HP, NULL) != 0)
{
- var_3C++;
+ itemEffectParam++;
break;
}
if (gMain.inBattle)
{
- if (battlerId != 4)
+ if (battlerId != MAX_BATTLERS_COUNT)
{
gAbsentBattlerFlags &= ~gBitTable[battlerId];
CopyPlayerPartyMonToBattleData(battlerId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId]));
@@ -4911,48 +4950,53 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (GetMonData(mon, MON_DATA_HP, NULL) == 0)
{
- var_3C++;
+ itemEffectParam++;
break;
}
}
// Get amount of HP to restore
- dataUnsigned = itemEffect[var_3C++];
+ dataUnsigned = itemEffect[itemEffectParam++];
switch (dataUnsigned)
{
- case ITEM6_HEAL_FULL:
+ case ITEM6_HEAL_HP_FULL:
dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) - GetMonData(mon, MON_DATA_HP, NULL);
break;
- case ITEM6_HEAL_HALF:
+ case ITEM6_HEAL_HP_HALF:
dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 2;
if (dataUnsigned == 0)
dataUnsigned = 1;
break;
- case ITEM6_HEAL_LVL_UP:
+ case ITEM6_HEAL_HP_LVL_UP:
dataUnsigned = gBattleScripting.levelUpHP;
break;
}
+
+ // Only restore HP if not at max health
if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL))
{
- if (e == 0)
+ if (!usedByAI)
{
+ // Restore HP
dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned;
if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL))
dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL);
SetMonData(mon, MON_DATA_HP, &dataUnsigned);
- if (gMain.inBattle && battlerId != 4)
+
+ // Update battler (if applicable)
+ if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT)
{
gBattleMons[battlerId].hp = dataUnsigned;
- if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (!(effectFlags & (ITEM4_REVIVE >> 2)) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
if (gBattleResults.numHealingItemsUsed < 255)
gBattleResults.numHealingItemsUsed++;
- // I have to re-use this variable to match.
- r5 = gActiveBattler;
+
+ temp2 = gActiveBattler;
gActiveBattler = battlerId;
BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0);
MarkBattlerForControllerExec(gActiveBattler);
- gActiveBattler = r5;
+ gActiveBattler = temp2;
}
}
}
@@ -4962,227 +5006,197 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
retVal = FALSE;
}
- r10 &= 0xEF;
+ effectFlags &= ~(ITEM4_REVIVE >> 2);
break;
- case 3:
- // Heal pp in all moves.
- if (!(r10 & 2))
+
+ case 3: // ITEM4_HEAL_PP
+ if (!(effectFlags & (ITEM4_HEAL_PP_ONE >> 3)))
{
- for (r5 = 0; (signed)(r5) < (signed)(4); r5++)
+ // Heal PP for all moves
+ for (temp2 = 0; (signed)(temp2) < (signed)(MAX_MON_MOVES); temp2++)
{
u16 moveId;
-
- dataUnsigned = GetMonData(mon, MON_DATA_PP1 + r5, NULL);
- moveId = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
- if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
+ dataUnsigned = GetMonData(mon, MON_DATA_PP1 + temp2, NULL);
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + temp2, NULL);
+ if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2))
{
- dataUnsigned += itemEffect[var_3C];
- moveId = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
- if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
+ dataUnsigned += itemEffect[itemEffectParam];
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + temp2, NULL); // Redundant
+ if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2))
{
- moveId = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
- dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5);
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + temp2, NULL); // Redundant
+ dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2);
}
- SetMonData(mon, MON_DATA_PP1 + r5, &dataUnsigned);
+ SetMonData(mon, MON_DATA_PP1 + temp2, &dataUnsigned);
+
+ // Heal battler PP too (if applicable)
if (gMain.inBattle
&& battlerId != MAX_BATTLERS_COUNT && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[r5]))
- gBattleMons[battlerId].pp[r5] = dataUnsigned;
+ && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[temp2]))
+ gBattleMons[battlerId].pp[temp2] = dataUnsigned;
+
retVal = FALSE;
}
}
- var_3C++;
+ itemEffectParam++;
}
- // Heal pp in one move.
else
{
+ // Heal PP for one move
u16 moveId;
-
dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL);
moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
- dataUnsigned += itemEffect[var_3C++];
- moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ dataUnsigned += itemEffect[itemEffectParam++];
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); // Redundant
if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
- moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); // Redundant
dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
}
SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
+
+ // Heal battler PP too (if applicable)
if (gMain.inBattle
- && battlerId != 4 && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
+ && battlerId != MAX_BATTLERS_COUNT && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[battlerId].mimickedMoves & gBitTable[moveIndex]))
gBattleMons[battlerId].pp[moveIndex] = dataUnsigned;
+
retVal = FALSE;
}
}
break;
- // Evolution stone
- case 7:
+
+ // cases 4-6 are ITEM4_HEAL_PP_ONE, ITEM4_PP_UP, and ITEM4_REVIVE, which
+ // are already handled above by other cases or before the loop
+
+ case 7: // ITEM4_EVO_STONE
{
- u16 targetSpecies = GetEvolutionTargetSpecies(mon, 2, item);
+ u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item);
if (targetSpecies != SPECIES_NONE)
{
- BeginEvolutionScene(mon, targetSpecies, 0, partyIndex);
+ BeginEvolutionScene(mon, targetSpecies, FALSE, partyIndex);
return FALSE;
}
}
break;
}
}
- var_38++;
- r10 >>= 1;
+ temp1++;
+ effectFlags >>= 1;
}
break;
- // EV and friendship
+
+ // Handle ITEM5 effects (Change Def/SpDef/SpAtk/Speed EVs, PP Max, and friendship changes)
case 5:
- r10 = itemEffect[cmdIndex];
- var_38 = 0;
- while (r10 != 0)
+ effectFlags = itemEffect[i];
+ temp1 = 0;
+
+ // Loop through and try each of the ITEM5 effects
+ while (effectFlags != 0)
{
- if (r10 & 1)
+ if (effectFlags & 1)
{
- switch (var_38)
+ switch (temp1)
{
- case 0:
- case 1:
- case 2:
- case 3:
+ case 0: // ITEM5_EV_DEF
+ case 1: // ITEM5_EV_SPEED
+ case 2: // ITEM5_EV_SPDEF
+ case 3: // ITEM5_EV_SPATK
evCount = GetMonEVCount(mon);
- r5 = itemEffect[var_3C];
- dataSigned = GetMonData(mon, sGetMonDataEVConstants[var_38 + 2], NULL);
- r2 = r5;
- if (r2 > 0)
+ temp2 = itemEffect[itemEffectParam];
+ dataSigned = GetMonData(mon, sGetMonDataEVConstants[temp1 + 2], NULL);
+ evChange = temp2;
+ if (evChange > 0) // Increasing EV
{
+ // Has EV increase limit already been reached?
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
if (dataSigned >= EV_ITEM_RAISE_LIMIT)
break;
- if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT)
- r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2;
+ // Limit the increase
+ if (dataSigned + evChange > EV_ITEM_RAISE_LIMIT)
+ temp2 = EV_ITEM_RAISE_LIMIT - (dataSigned + evChange) + evChange;
else
- r5 = r2;
+ temp2 = evChange;
- if (evCount + r5 > MAX_TOTAL_EVS)
- r5 += MAX_TOTAL_EVS - (evCount + r5);
- dataSigned += r5;
+ if (evCount + temp2 > MAX_TOTAL_EVS)
+ temp2 += MAX_TOTAL_EVS - (evCount + temp2);
+
+ dataSigned += temp2;
}
- else
+ else // Decreasing EV
{
if (dataSigned == 0)
{
- var_28 = 1;
- var_3C++;
+ // No EVs to lose, but make sure friendship updates anyway
+ friendshipOnly = TRUE;
+ itemEffectParam++;
break;
}
- dataSigned += r2;
+ dataSigned += evChange;
if (dataSigned < 0)
dataSigned = 0;
}
- SetMonData(mon, sGetMonDataEVConstants[var_38 + 2], &dataSigned);
+
+ // Update EVs and stats
+ SetMonData(mon, sGetMonDataEVConstants[temp1 + 2], &dataSigned);
CalculateMonStats(mon);
retVal = FALSE;
- var_3C++;
+ itemEffectParam++;
break;
- case 4:
+
+ case 4: // ITEM5_PP_MAX
dataUnsigned = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
- r5 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
- if (dataUnsigned < 3 && r5 > 4)
+ temp2 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (dataUnsigned < 3 && temp2 > 4)
{
dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
dataUnsigned &= gPPUpSetMask[moveIndex];
dataUnsigned += gPPUpAddMask[moveIndex] * 3;
SetMonData(mon, MON_DATA_PP_BONUSES, &dataUnsigned);
- dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - r5;
+ dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - temp2;
dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + dataUnsigned;
SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
retVal = FALSE;
}
break;
- case 5:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
+
+ case 5: // ITEM5_FRIENDSHIP_LOW
+ // Changes to friendship are given differently depending on
+ // how much friendship the Pokémon already has.
+ // In general, Pokémon with lower friendship receive more,
+ // and Pokémon with higher friendship receive less.
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100)
{
- var_34 = itemEffect[var_3C];
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- if (var_34 > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * var_34 / 100;
- else
- friendship += var_34;
- if (var_34 > 0)
- {
- if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL)
- friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > MAX_FRIENDSHIP)
- friendship = MAX_FRIENDSHIP;
- SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
- retVal = FALSE;
+ UPDATE_FRIENDSHIP_FROM_ITEM;
}
- var_3C++;
+ itemEffectParam++;
break;
- case 6:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
- && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
+
+ case 6: // ITEM5_FRIENDSHIP_MID
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200)
{
- var_34 = itemEffect[var_3C];
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- if ((s8)(var_34) > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * var_34 / 100;
- else
- friendship += var_34;
- if (var_34 > 0)
- {
- if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL)
- friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > MAX_FRIENDSHIP)
- friendship = MAX_FRIENDSHIP;
- SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
- retVal = FALSE;
+ UPDATE_FRIENDSHIP_FROM_ITEM;
}
- var_3C++;
+ itemEffectParam++;
break;
- case 7:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
+
+ case 7: // ITEM5_FRIENDSHIP_HIGH
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200)
{
- var_34 = itemEffect[var_3C];
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- if ((s8)(var_34) > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * var_34 / 100;
- else
- friendship += var_34;
- if (var_34 > 0)
- {
- if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL)
- friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > MAX_FRIENDSHIP)
- friendship = MAX_FRIENDSHIP;
- SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
- retVal = FALSE;
+ UPDATE_FRIENDSHIP_FROM_ITEM;
}
- var_3C++;
+ itemEffectParam++;
break;
}
}
- var_38++;
- r10 >>= 1;
+ temp1++;
+ effectFlags >>= 1;
}
break;
}
@@ -5215,9 +5229,9 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
u8 offset;
int i;
u8 j;
- u8 val;
+ u8 effectFlags;
- offset = 6;
+ offset = ITEM_EFFECT_ARG_START;
temp = gItemEffectTable[itemId - ITEM_POTION];
@@ -5231,7 +5245,7 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
itemEffect = temp;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < ITEM_EFFECT_ARG_START; i++)
{
switch (i)
{
@@ -5243,74 +5257,75 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
return 0;
break;
case 4:
- val = itemEffect[4];
- if (val & ITEM4_PP_UP)
- val &= ~(ITEM4_PP_UP);
+ effectFlags = itemEffect[4];
+ if (effectFlags & ITEM4_PP_UP)
+ effectFlags &= ~(ITEM4_PP_UP);
j = 0;
- while (val)
+ while (effectFlags)
{
- if (val & 1)
+ if (effectFlags & 1)
{
switch (j)
{
- case 2:
- if (val & 0x10)
- val &= 0xEF;
- case 0:
- if (i == effectByte && (val & effectBit))
+ case 2: // ITEM4_HEAL_HP
+ if (effectFlags & (ITEM4_REVIVE >> 2))
+ effectFlags &= ~(ITEM4_REVIVE >> 2);
+ // fallthrough
+ case 0: // ITEM4_EV_HP
+ if (i == effectByte && (effectFlags & effectBit))
return offset;
offset++;
break;
- case 1:
- if (i == effectByte && (val & effectBit))
+ case 1: // ITEM4_EV_ATK
+ if (i == effectByte && (effectFlags & effectBit))
return offset;
offset++;
break;
- case 3:
- if (i == effectByte && (val & effectBit))
+ case 3: // ITEM4_HEAL_PP
+ if (i == effectByte && (effectFlags & effectBit))
return offset;
offset++;
break;
- case 7:
+ case 7: // ITEM4_EVO_STONE
if (i == effectByte)
return 0;
break;
}
}
j++;
- val >>= 1;
+ effectFlags >>= 1;
if (i == effectByte)
effectBit >>= 1;
}
break;
case 5:
- val = itemEffect[5];
+ effectFlags = itemEffect[5];
j = 0;
- while (val)
+ while (effectFlags)
{
- if (val & 1)
+ if (effectFlags & 1)
{
switch (j)
{
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- if (i == effectByte && (val & effectBit))
+ case 0: // ITEM5_EV_DEF
+ case 1: // ITEM5_EV_SPEED
+ case 2: // ITEM5_EV_SPDEF
+ case 3: // ITEM5_EV_SPATK
+ case 4: // ITEM5_PP_MAX
+ case 5: // ITEM5_FRIENDSHIP_LOW
+ case 6: // ITEM5_FRIENDSHIP_MID
+ if (i == effectByte && (effectFlags & effectBit))
return offset;
offset++;
break;
- case 7:
+ case 7: // ITEM5_FRIENDSHIP_HIGH
if (i == effectByte)
return 0;
break;
}
}
j++;
- val >>= 1;
+ effectFlags >>= 1;
if (i == effectByte)
effectBit >>= 1;
}
@@ -5326,7 +5341,7 @@ static void BufferStatRoseMessage(s32 arg0)
gBattlerTarget = gBattlerInMenuId;
StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]);
StringCopy(gBattleTextBuff2, gText_StatRose);
- BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_DefendersStatRose);
}
u8 *UseStatIncreaseItem(u16 itemId)
@@ -5386,7 +5401,7 @@ u8 GetNatureFromPersonality(u32 personality)
return personality % NUM_NATURES;
}
-u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
+u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem)
{
int i;
u16 targetSpecies = 0;
@@ -5404,12 +5419,13 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
else
holdEffect = ItemId_GetHoldEffect(heldItem);
- if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3)
+ // Prevent evolution with Everstone, unless we're just viewing the party menu with an evolution item
+ if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && mode != EVO_MODE_ITEM_CHECK)
return SPECIES_NONE;
- switch (type)
+ switch (mode)
{
- case 0:
+ case EVO_MODE_NORMAL:
level = GetMonData(mon, MON_DATA_LEVEL, 0);
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
@@ -5469,7 +5485,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
}
}
break;
- case 1:
+ case EVO_MODE_TRADE:
for (i = 0; i < EVOS_PER_MON; i++)
{
switch (gEvolutionTable[species][i].method)
@@ -5488,8 +5504,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
}
}
break;
- case 2:
- case 3:
+ case EVO_MODE_ITEM_USE:
+ case EVO_MODE_ITEM_CHECK:
for (i = 0; i < EVOS_PER_MON; i++)
{
if (gEvolutionTable[species][i].method == EVO_ITEM
@@ -5594,96 +5610,63 @@ u16 SpeciesToCryId(u16 species)
return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)];
}
-void sub_806D544(u16 species, u32 personality, u8 *dest)
+#define DRAW_SPINDA_SPOTS \
+{ \
+ int i; \
+ for (i = 0; i < 4; i++) \
+ { \
+ int j; \
+ u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \
+ u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \
+ \
+ for (j = 0; j < 16; j++) \
+ { \
+ int k; \
+ s32 row = gSpindaSpotGraphics[i].image[j]; \
+ \
+ for (k = x; k < x + 16; k++) \
+ { \
+ u8 *val = dest + ((k / 8) * 32) + \
+ ((k % 8) / 2) + \
+ ((y >> 3) << 8) + \
+ ((y & 7) << 2); \
+ \
+ if (row & 1) \
+ { \
+ if (k & 1) \
+ { \
+ if ((u8)((*val & 0xF0) - 0x10) <= 0x20) \
+ *val += 0x40; \
+ } \
+ else \
+ { \
+ if ((u8)((*val & 0xF) - 0x01) <= 0x02) \
+ *val += 0x04; \
+ } \
+ } \
+ \
+ row >>= 1; \
+ } \
+ \
+ y++; \
+ } \
+ \
+ personality >>= 8; \
+ } \
+}
+
+static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest)
{
if (species == SPECIES_SPINDA
&& dest != gMonSpritesGfxPtr->sprites.ptr[0]
&& dest != gMonSpritesGfxPtr->sprites.ptr[2])
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = gSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
+ DRAW_SPINDA_SPOTS;
}
-void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
+void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic)
{
- if (species == SPECIES_SPINDA && a4)
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = gSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
+ if (species == SPECIES_SPINDA && isFrontPic)
+ DRAW_SPINDA_SPOTS;
}
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
@@ -5820,7 +5803,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
&& (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE))
{
s8 mod = sFriendshipEventModifiers[event][friendshipLevel];
- if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ if (mod > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP)
mod = (150 * mod) / 100;
friendship += mod;
if (mod > 0)
@@ -6266,7 +6249,7 @@ u16 GetBattleBGM(void)
return MUS_VS_KYOGRE_GROUDON;
else if (gBattleTypeFlags & BATTLE_TYPE_REGI)
return MUS_VS_REGI;
- else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
return MUS_VS_TRAINER;
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
@@ -6334,26 +6317,31 @@ void PlayMapChosenOrBattleBGM(u16 songId)
PlayNewMapMusic(GetBattleBGM());
}
-void sub_806E694(u16 songId)
+// Identical to PlayMapChosenOrBattleBGM, but uses a task instead
+// Only used by Battle Dome
+#define tSongId data[0]
+void CreateTask_PlayMapChosenOrBattleBGM(u16 songId)
{
u8 taskId;
ResetMapMusic();
m4aMPlayAllStop();
- taskId = CreateTask(sub_806E6CC, 0);
- gTasks[taskId].data[0] = songId;
+ taskId = CreateTask(Task_PlayMapChosenOrBattleBGM, 0);
+ gTasks[taskId].tSongId = songId;
}
-static void sub_806E6CC(u8 taskId)
+static void Task_PlayMapChosenOrBattleBGM(u8 taskId)
{
- if (gTasks[taskId].data[0])
- PlayNewMapMusic(gTasks[taskId].data[0]);
+ if (gTasks[taskId].tSongId)
+ PlayNewMapMusic(gTasks[taskId].tSongId);
else
PlayNewMapMusic(GetBattleBGM());
DestroyTask(taskId);
}
+#undef tSongId
+
const u32 *GetMonFrontSpritePal(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
@@ -6592,12 +6580,12 @@ const u8 *GetTrainerPartnerName(void)
#define READ_PTR_FROM_TASK(taskId, dataId) \
(void*)( \
((u16)(gTasks[taskId].data[dataId]) | \
- ((u16)(gTasks[taskId].data[dataId + 1]) << 0x10)))
+ ((u16)(gTasks[taskId].data[dataId + 1]) << 16)))
#define STORE_PTR_IN_TASK(ptr, taskId, dataId) \
{ \
gTasks[taskId].data[dataId] = (u32)(ptr); \
- gTasks[taskId].data[dataId + 1] = (u32)(ptr) >> 0x10; \
+ gTasks[taskId].data[dataId + 1] = (u32)(ptr) >> 16; \
}
static void Task_AnimateAfterDelay(u8 taskId)
@@ -6614,14 +6602,14 @@ static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId)
if (--gTasks[taskId].data[3] == 0)
{
StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]);
- SummaryScreen_SetUnknownTaskId(0xFF);
+ SummaryScreen_SetAnimDelayTaskId(TASK_NONE);
DestroyTask(taskId);
}
}
void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3)
{
- if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
+ if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)))
DoMonFrontSpriteAnimation(sprite, species, noCry, arg3 | 0x80);
else
DoMonFrontSpriteAnimation(sprite, species, noCry, arg3);
@@ -6681,7 +6669,7 @@ void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneF
STORE_PTR_IN_TASK(sprite, taskId, 0);
gTasks[taskId].data[2] = sMonFrontAnimIdsTable[species - 1];
gTasks[taskId].data[3] = sMonAnimationDelayTable[species - 1];
- SummaryScreen_SetUnknownTaskId(taskId);
+ SummaryScreen_SetAnimDelayTaskId(taskId);
SetSpriteCB_MonAnimDummy(sprite);
}
else
@@ -6693,13 +6681,13 @@ void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneF
void StopPokemonAnimationDelayTask(void)
{
u8 delayTaskId = FindTaskIdByFunc(Task_PokemonSummaryAnimateAfterDelay);
- if (delayTaskId != 0xFF)
+ if (delayTaskId != TASK_NONE)
DestroyTask(delayTaskId);
}
void BattleAnimateBackSprite(struct Sprite* sprite, u16 species)
{
- if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
+ if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)))
{
sprite->callback = SpriteCallbackDummy;
}
@@ -6819,7 +6807,7 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr)
u16 i, j;
for (i = 0; i < structPtr->field_0_0; i++)
{
- structPtr->templates[i] = gUnknown_08329D98[i];
+ structPtr->templates[i] = gBattlerSpriteTemplates[i];
for (j = 0; j < structPtr->field_1; j++)
{
structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800];
@@ -6839,7 +6827,7 @@ static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr)
structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800];
}
structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0];
- structPtr->templates[i].anims = gUnknown_082FF70C;
+ structPtr->templates[i].anims = gAnims_MonPic;
structPtr->templates[i].paletteTag = i;
}
}
@@ -6884,7 +6872,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
else
{
for (i = 0; i < structPtr->field_0_0; i++)
- structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD));
+ structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 13));
}
structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0);