diff options
author | luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> | 2021-06-01 20:40:27 -0400 |
---|---|---|
committer | luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> | 2021-06-01 20:40:27 -0400 |
commit | f0b41debc35c2084aad6d369eab11a2d2df4ab44 (patch) | |
tree | 9b720ab0b617fa207051efc7ff9373669f7dc47b /src/pokemon.c | |
parent | a839463c849679974c986bf9c9c260eff0e94cb7 (diff) | |
parent | 9f5bf65fb336cf7a3ba68d32267bf993f0f6a494 (diff) |
Merge branch 'master' of https://github.com/pret/pokeemerald into remove-temps
Diffstat (limited to 'src/pokemon.c')
-rw-r--r-- | src/pokemon.c | 1992 |
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); |