#include "global.h" #include "pokemon.h" #include "sprite.h" #include "pokemon_animation.h" #include "trig.h" #include "task.h" #include "util.h" #include "constants/rgb.h" struct UnkAnimStruct { u16 field_0; s16 field_2; s16 field_4; s16 field_6; s16 field_8; }; extern u16 gBattlerPartyIndexes[]; // this file's functions static void pokemonanimfunc_00(struct Sprite *sprite); static void pokemonanimfunc_01(struct Sprite *sprite); static void pokemonanimfunc_02(struct Sprite *sprite); static void pokemonanimfunc_03(struct Sprite *sprite); static void pokemonanimfunc_04(struct Sprite *sprite); static void pokemonanimfunc_05(struct Sprite *sprite); static void pokemonanimfunc_06(struct Sprite *sprite); static void pokemonanimfunc_07(struct Sprite *sprite); static void pokemonanimfunc_08(struct Sprite *sprite); static void pokemonanimfunc_09(struct Sprite *sprite); static void pokemonanimfunc_0A(struct Sprite *sprite); static void pokemonanimfunc_0B(struct Sprite *sprite); static void pokemonanimfunc_0C(struct Sprite *sprite); static void pokemonanimfunc_0D(struct Sprite *sprite); static void pokemonanimfunc_0E(struct Sprite *sprite); static void pokemonanimfunc_0F(struct Sprite *sprite); static void pokemonanimfunc_10(struct Sprite *sprite); static void pokemonanimfunc_11(struct Sprite *sprite); static void pokemonanimfunc_12(struct Sprite *sprite); static void pokemonanimfunc_13(struct Sprite *sprite); static void pokemonanimfunc_14(struct Sprite *sprite); static void pokemonanimfunc_15(struct Sprite *sprite); static void pokemonanimfunc_16(struct Sprite *sprite); static void pokemonanimfunc_17(struct Sprite *sprite); static void pokemonanimfunc_18(struct Sprite *sprite); static void pokemonanimfunc_19(struct Sprite *sprite); static void pokemonanimfunc_1A(struct Sprite *sprite); static void pokemonanimfunc_1B(struct Sprite *sprite); static void pokemonanimfunc_1C(struct Sprite *sprite); static void pokemonanimfunc_1D(struct Sprite *sprite); static void pokemonanimfunc_1E(struct Sprite *sprite); static void pokemonanimfunc_1F(struct Sprite *sprite); static void pokemonanimfunc_20(struct Sprite *sprite); static void pokemonanimfunc_21(struct Sprite *sprite); static void pokemonanimfunc_22(struct Sprite *sprite); static void pokemonanimfunc_23(struct Sprite *sprite); static void pokemonanimfunc_24(struct Sprite *sprite); static void pokemonanimfunc_25(struct Sprite *sprite); static void pokemonanimfunc_26(struct Sprite *sprite); static void pokemonanimfunc_27(struct Sprite *sprite); static void pokemonanimfunc_28(struct Sprite *sprite); static void pokemonanimfunc_29(struct Sprite *sprite); static void pokemonanimfunc_2A(struct Sprite *sprite); static void pokemonanimfunc_2B(struct Sprite *sprite); static void pokemonanimfunc_2C(struct Sprite *sprite); static void pokemonanimfunc_2D(struct Sprite *sprite); static void pokemonanimfunc_2E(struct Sprite *sprite); static void pokemonanimfunc_2F(struct Sprite *sprite); static void pokemonanimfunc_30(struct Sprite *sprite); static void pokemonanimfunc_31(struct Sprite *sprite); static void pokemonanimfunc_32(struct Sprite *sprite); static void pokemonanimfunc_33(struct Sprite *sprite); static void pokemonanimfunc_34(struct Sprite *sprite); static void pokemonanimfunc_35(struct Sprite *sprite); static void pokemonanimfunc_36(struct Sprite *sprite); static void pokemonanimfunc_37(struct Sprite *sprite); static void pokemonanimfunc_38(struct Sprite *sprite); static void pokemonanimfunc_39(struct Sprite *sprite); static void pokemonanimfunc_3A(struct Sprite *sprite); static void pokemonanimfunc_3B(struct Sprite *sprite); static void pokemonanimfunc_3C(struct Sprite *sprite); static void pokemonanimfunc_3D(struct Sprite *sprite); static void pokemonanimfunc_3E(struct Sprite *sprite); static void pokemonanimfunc_3F(struct Sprite *sprite); static void pokemonanimfunc_40(struct Sprite *sprite); static void pokemonanimfunc_41(struct Sprite *sprite); static void pokemonanimfunc_42(struct Sprite *sprite); static void pokemonanimfunc_43(struct Sprite *sprite); static void pokemonanimfunc_44(struct Sprite *sprite); static void pokemonanimfunc_45(struct Sprite *sprite); static void pokemonanimfunc_46(struct Sprite *sprite); static void pokemonanimfunc_47(struct Sprite *sprite); static void pokemonanimfunc_48(struct Sprite *sprite); static void pokemonanimfunc_49(struct Sprite *sprite); static void pokemonanimfunc_4A(struct Sprite *sprite); static void pokemonanimfunc_4B(struct Sprite *sprite); static void pokemonanimfunc_4C(struct Sprite *sprite); static void pokemonanimfunc_4D(struct Sprite *sprite); static void pokemonanimfunc_4E(struct Sprite *sprite); static void pokemonanimfunc_4F(struct Sprite *sprite); static void pokemonanimfunc_50(struct Sprite *sprite); static void pokemonanimfunc_51(struct Sprite *sprite); static void pokemonanimfunc_52(struct Sprite *sprite); static void pokemonanimfunc_53(struct Sprite *sprite); static void pokemonanimfunc_54(struct Sprite *sprite); static void pokemonanimfunc_55(struct Sprite *sprite); static void pokemonanimfunc_56(struct Sprite *sprite); static void pokemonanimfunc_57(struct Sprite *sprite); static void pokemonanimfunc_58(struct Sprite *sprite); static void pokemonanimfunc_59(struct Sprite *sprite); static void pokemonanimfunc_5A(struct Sprite *sprite); static void pokemonanimfunc_5B(struct Sprite *sprite); static void pokemonanimfunc_5C(struct Sprite *sprite); static void pokemonanimfunc_5D(struct Sprite *sprite); static void pokemonanimfunc_5E(struct Sprite *sprite); static void pokemonanimfunc_5F(struct Sprite *sprite); static void pokemonanimfunc_60(struct Sprite *sprite); static void pokemonanimfunc_61(struct Sprite *sprite); static void pokemonanimfunc_62(struct Sprite *sprite); static void pokemonanimfunc_63(struct Sprite *sprite); static void pokemonanimfunc_64(struct Sprite *sprite); static void pokemonanimfunc_65(struct Sprite *sprite); static void pokemonanimfunc_66(struct Sprite *sprite); static void pokemonanimfunc_67(struct Sprite *sprite); static void pokemonanimfunc_68(struct Sprite *sprite); static void pokemonanimfunc_69(struct Sprite *sprite); static void pokemonanimfunc_6A(struct Sprite *sprite); static void pokemonanimfunc_6B(struct Sprite *sprite); static void pokemonanimfunc_6C(struct Sprite *sprite); static void pokemonanimfunc_6D(struct Sprite *sprite); static void pokemonanimfunc_6E(struct Sprite *sprite); static void pokemonanimfunc_6F(struct Sprite *sprite); static void pokemonanimfunc_70(struct Sprite *sprite); static void pokemonanimfunc_71(struct Sprite *sprite); static void pokemonanimfunc_72(struct Sprite *sprite); static void pokemonanimfunc_73(struct Sprite *sprite); static void pokemonanimfunc_74(struct Sprite *sprite); static void pokemonanimfunc_75(struct Sprite *sprite); static void pokemonanimfunc_76(struct Sprite *sprite); static void pokemonanimfunc_77(struct Sprite *sprite); static void pokemonanimfunc_78(struct Sprite *sprite); static void pokemonanimfunc_79(struct Sprite *sprite); static void pokemonanimfunc_7A(struct Sprite *sprite); static void pokemonanimfunc_7B(struct Sprite *sprite); static void pokemonanimfunc_7C(struct Sprite *sprite); static void pokemonanimfunc_7D(struct Sprite *sprite); static void pokemonanimfunc_7E(struct Sprite *sprite); static void pokemonanimfunc_7F(struct Sprite *sprite); static void pokemonanimfunc_80(struct Sprite *sprite); static void pokemonanimfunc_81(struct Sprite *sprite); static void pokemonanimfunc_82(struct Sprite *sprite); static void pokemonanimfunc_83(struct Sprite *sprite); static void pokemonanimfunc_84(struct Sprite *sprite); static void pokemonanimfunc_85(struct Sprite *sprite); static void pokemonanimfunc_86(struct Sprite *sprite); static void pokemonanimfunc_87(struct Sprite *sprite); static void pokemonanimfunc_88(struct Sprite *sprite); static void pokemonanimfunc_89(struct Sprite *sprite); static void pokemonanimfunc_8A(struct Sprite *sprite); static void pokemonanimfunc_8B(struct Sprite *sprite); static void pokemonanimfunc_8C(struct Sprite *sprite); static void pokemonanimfunc_8D(struct Sprite *sprite); static void pokemonanimfunc_8E(struct Sprite *sprite); static void pokemonanimfunc_8F(struct Sprite *sprite); static void pokemonanimfunc_90(struct Sprite *sprite); static void pokemonanimfunc_91(struct Sprite *sprite); static void pokemonanimfunc_92(struct Sprite *sprite); static void pokemonanimfunc_93(struct Sprite *sprite); static void pokemonanimfunc_94(struct Sprite *sprite); static void pokemonanimfunc_95(struct Sprite *sprite); static void pokemonanimfunc_96(struct Sprite *sprite); static void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite); #define STRUCT_COUNT 4 // IWRAM bss static IWRAM_DATA struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; static IWRAM_DATA u8 sUnknown_03001270; static IWRAM_DATA bool32 sUnknown_03001274; // const rom data static const u8 sSpeciesToBackAnimSet[] = { 0x00, // SPECIES_NONE 0x13, // SPECIES_BULBASAUR 0x02, // SPECIES_IVYSAUR 0x08, // SPECIES_VENUSAUR 0x12, // SPECIES_CHARMANDER 0x15, // SPECIES_CHARMELEON 0x17, // SPECIES_CHARIZARD 0x12, // SPECIES_SQUIRTLE 0x12, // SPECIES_WARTORTLE 0x19, // SPECIES_BLASTOISE 0x02, // SPECIES_CATERPIE 0x13, // SPECIES_METAPOD 0x11, // SPECIES_BUTTERFREE 0x02, // SPECIES_WEEDLE 0x13, // SPECIES_KAKUNA 0x01, // SPECIES_BEEDRILL 0x0f, // SPECIES_PIDGEY 0x15, // SPECIES_PIDGEOTTO 0x0f, // SPECIES_PIDGEOT 0x0a, // SPECIES_RATTATA 0x0a, // SPECIES_RATICATE 0x0f, // SPECIES_SPEAROW 0x15, // SPECIES_FEAROW 0x0f, // SPECIES_EKANS 0x09, // SPECIES_ARBOK 0x16, // SPECIES_PIKACHU 0x16, // SPECIES_RAICHU 0x12, // SPECIES_SANDSHREW 0x10, // SPECIES_SANDSLASH 0x12, // SPECIES_NIDORAN_F 0x15, // SPECIES_NIDORINA 0x09, // SPECIES_NIDOQUEEN 0x12, // SPECIES_NIDORAN_M 0x15, // SPECIES_NIDORINO 0x09, // SPECIES_NIDOKING 0x13, // SPECIES_CLEFAIRY 0x13, // SPECIES_CLEFABLE 0x10, // SPECIES_VULPIX 0x01, // SPECIES_NINETALES 0x13, // SPECIES_JIGGLYPUFF 0x06, // SPECIES_WIGGLYTUFF 0x11, // SPECIES_ZUBAT 0x09, // SPECIES_GOLBAT 0x02, // SPECIES_ODDISH 0x02, // SPECIES_GLOOM 0x14, // SPECIES_VILEPLUME 0x02, // SPECIES_PARAS 0x08, // SPECIES_PARASECT 0x0a, // SPECIES_VENONAT 0x11, // SPECIES_VENOMOTH 0x09, // SPECIES_DIGLETT 0x09, // SPECIES_DUGTRIO 0x10, // SPECIES_MEOWTH 0x0f, // SPECIES_PERSIAN 0x02, // SPECIES_PSYDUCK 0x14, // SPECIES_GOLDUCK 0x10, // SPECIES_MANKEY 0x10, // SPECIES_PRIMEAPE 0x15, // SPECIES_GROWLITHE 0x15, // SPECIES_ARCANINE 0x12, // SPECIES_POLIWAG 0x09, // SPECIES_POLIWHIRL 0x0e, // SPECIES_POLIWRATH 0x14, // SPECIES_ABRA 0x14, // SPECIES_KADABRA 0x0d, // SPECIES_ALAKAZAM 0x15, // SPECIES_MACHOP 0x09, // SPECIES_MACHOKE 0x09, // SPECIES_MACHAMP 0x0b, // SPECIES_BELLSPROUT 0x0b, // SPECIES_WEEPINBELL 0x0b, // SPECIES_VICTREEBEL 0x02, // SPECIES_TENTACOOL 0x02, // SPECIES_TENTACRUEL 0x0e, // SPECIES_GEODUDE 0x08, // SPECIES_GRAVELER 0x08, // SPECIES_GOLEM 0x17, // SPECIES_PONYTA 0x15, // SPECIES_RAPIDASH 0x02, // SPECIES_SLOWPOKE 0x13, // SPECIES_SLOWBRO 0x0f, // SPECIES_MAGNEMITE 0x0f, // SPECIES_MAGNETON 0x02, // SPECIES_FARFETCHD 0x0f, // SPECIES_DODUO 0x15, // SPECIES_DODRIO 0x13, // SPECIES_SEEL 0x02, // SPECIES_DEWGONG 0x0b, // SPECIES_GRIMER 0x0c, // SPECIES_MUK 0x13, // SPECIES_SHELLDER 0x0f, // SPECIES_CLOYSTER 0x01, // SPECIES_GASTLY 0x01, // SPECIES_HAUNTER 0x14, // SPECIES_GENGAR 0x09, // SPECIES_ONIX 0x13, // SPECIES_DROWZEE 0x14, // SPECIES_HYPNO 0x0a, // SPECIES_KRABBY 0x09, // SPECIES_KINGLER 0x15, // SPECIES_VOLTORB 0x15, // SPECIES_ELECTRODE 0x02, // SPECIES_EXEGGCUTE 0x10, // SPECIES_EXEGGUTOR 0x15, // SPECIES_CUBONE 0x10, // SPECIES_MAROWAK 0x02, // SPECIES_HITMONLEE 0x0f, // SPECIES_HITMONCHAN 0x02, // SPECIES_LICKITUNG 0x06, // SPECIES_KOFFING 0x06, // SPECIES_WEEZING 0x0e, // SPECIES_RHYHORN 0x0e, // SPECIES_RHYDON 0x12, // SPECIES_CHANSEY 0x0b, // SPECIES_TANGELA 0x12, // SPECIES_KANGASKHAN 0x13, // SPECIES_HORSEA 0x11, // SPECIES_SEADRA 0x11, // SPECIES_GOLDEEN 0x11, // SPECIES_SEAKING 0x13, // SPECIES_STARYU 0x19, // SPECIES_STARMIE 0x14, // SPECIES_MR_MIME 0x0f, // SPECIES_SCYTHER 0x13, // SPECIES_JYNX 0x16, // SPECIES_ELECTABUZZ 0x17, // SPECIES_MAGMAR 0x0e, // SPECIES_PINSIR 0x0e, // SPECIES_TAUROS 0x10, // SPECIES_MAGIKARP 0x09, // SPECIES_GYARADOS 0x19, // SPECIES_LAPRAS 0x05, // SPECIES_DITTO 0x12, // SPECIES_EEVEE 0x19, // SPECIES_VAPOREON 0x16, // SPECIES_JOLTEON 0x17, // SPECIES_FLAREON 0x01, // SPECIES_PORYGON 0x13, // SPECIES_OMANYTE 0x13, // SPECIES_OMASTAR 0x13, // SPECIES_KABUTO 0x15, // SPECIES_KABUTOPS 0x15, // SPECIES_AERODACTYL 0x13, // SPECIES_SNORLAX 0x19, // SPECIES_ARTICUNO 0x16, // SPECIES_ZAPDOS 0x17, // SPECIES_MOLTRES 0x02, // SPECIES_DRATINI 0x0f, // SPECIES_DRAGONAIR 0x09, // SPECIES_DRAGONITE 0x0d, // SPECIES_MEWTWO 0x12, // SPECIES_MEW 0x12, // SPECIES_CHIKORITA 0x02, // SPECIES_BAYLEEF 0x09, // SPECIES_MEGANIUM 0x12, // SPECIES_CYNDAQUIL 0x15, // SPECIES_QUILAVA 0x17, // SPECIES_TYPHLOSION 0x15, // SPECIES_TOTODILE 0x15, // SPECIES_CROCONAW 0x09, // SPECIES_FERALIGATR 0x12, // SPECIES_SENTRET 0x10, // SPECIES_FURRET 0x11, // SPECIES_HOOTHOOT 0x0f, // SPECIES_NOCTOWL 0x0a, // SPECIES_LEDYBA 0x11, // SPECIES_LEDIAN 0x0a, // SPECIES_SPINARAK 0x02, // SPECIES_ARIADOS 0x0f, // SPECIES_CROBAT 0x0b, // SPECIES_CHINCHOU 0x16, // SPECIES_LANTURN 0x12, // SPECIES_PICHU 0x13, // SPECIES_CLEFFA 0x13, // SPECIES_IGGLYBUFF 0x13, // SPECIES_TOGEPI 0x11, // SPECIES_TOGETIC 0x12, // SPECIES_NATU 0x14, // SPECIES_XATU 0x12, // SPECIES_MAREEP 0x13, // SPECIES_FLAAFFY 0x16, // SPECIES_AMPHAROS 0x11, // SPECIES_BELLOSSOM 0x12, // SPECIES_MARILL 0x13, // SPECIES_AZUMARILL 0x02, // SPECIES_SUDOWOODO 0x10, // SPECIES_POLITOED 0x11, // SPECIES_HOPPIP 0x11, // SPECIES_SKIPLOOM 0x11, // SPECIES_JUMPLUFF 0x10, // SPECIES_AIPOM 0x13, // SPECIES_SUNKERN 0x02, // SPECIES_SUNFLORA 0x11, // SPECIES_YANMA 0x0b, // SPECIES_WOOPER 0x02, // SPECIES_QUAGSIRE 0x14, // SPECIES_ESPEON 0x14, // SPECIES_UMBREON 0x12, // SPECIES_MURKROW 0x13, // SPECIES_SLOWKING 0x01, // SPECIES_MISDREAVUS 0x14, // SPECIES_UNOWN 0x0b, // SPECIES_WOBBUFFET 0x14, // SPECIES_GIRAFARIG 0x08, // SPECIES_PINECO 0x09, // SPECIES_FORRETRESS 0x0f, // SPECIES_DUNSPARCE 0x05, // SPECIES_GLIGAR 0x09, // SPECIES_STEELIX 0x15, // SPECIES_SNUBBULL 0x09, // SPECIES_GRANBULL 0x0d, // SPECIES_QWILFISH 0x15, // SPECIES_SCIZOR 0x13, // SPECIES_SHUCKLE 0x15, // SPECIES_HERACROSS 0x0f, // SPECIES_SNEASEL 0x13, // SPECIES_TEDDIURSA 0x09, // SPECIES_URSARING 0x17, // SPECIES_SLUGMA 0x17, // SPECIES_MAGCARGO 0x0a, // SPECIES_SWINUB 0x08, // SPECIES_PILOSWINE 0x02, // SPECIES_CORSOLA 0x02, // SPECIES_REMORAID 0x05, // SPECIES_OCTILLERY 0x0f, // SPECIES_DELIBIRD 0x02, // SPECIES_MANTINE 0x15, // SPECIES_SKARMORY 0x09, // SPECIES_HOUNDOUR 0x09, // SPECIES_HOUNDOOM 0x19, // SPECIES_KINGDRA 0x15, // SPECIES_PHANPY 0x0e, // SPECIES_DONPHAN 0x01, // SPECIES_PORYGON2 0x13, // SPECIES_STANTLER 0x02, // SPECIES_SMEARGLE 0x0f, // SPECIES_TYROGUE 0x07, // SPECIES_HITMONTOP 0x02, // SPECIES_SMOOCHUM 0x08, // SPECIES_ELEKID 0x17, // SPECIES_MAGBY 0x02, // SPECIES_MILTANK 0x13, // SPECIES_BLISSEY 0x16, // SPECIES_RAIKOU 0x17, // SPECIES_ENTEI 0x19, // SPECIES_SUICUNE 0x0e, // SPECIES_LARVITAR 0x09, // SPECIES_PUPITAR 0x0e, // SPECIES_TYRANITAR 0x19, // SPECIES_LUGIA 0x17, // SPECIES_HO_OH 0x18, // SPECIES_CELEBI 0x00, // SPECIES_OLD_UNOWN_B 0x00, // SPECIES_OLD_UNOWN_C 0x00, // SPECIES_OLD_UNOWN_D 0x00, // SPECIES_OLD_UNOWN_E 0x00, // SPECIES_OLD_UNOWN_F 0x00, // SPECIES_OLD_UNOWN_G 0x00, // SPECIES_OLD_UNOWN_H 0x00, // SPECIES_OLD_UNOWN_I 0x00, // SPECIES_OLD_UNOWN_J 0x00, // SPECIES_OLD_UNOWN_K 0x00, // SPECIES_OLD_UNOWN_L 0x00, // SPECIES_OLD_UNOWN_M 0x00, // SPECIES_OLD_UNOWN_N 0x00, // SPECIES_OLD_UNOWN_O 0x00, // SPECIES_OLD_UNOWN_P 0x00, // SPECIES_OLD_UNOWN_Q 0x00, // SPECIES_OLD_UNOWN_R 0x00, // SPECIES_OLD_UNOWN_S 0x00, // SPECIES_OLD_UNOWN_T 0x00, // SPECIES_OLD_UNOWN_U 0x00, // SPECIES_OLD_UNOWN_V 0x00, // SPECIES_OLD_UNOWN_W 0x00, // SPECIES_OLD_UNOWN_X 0x00, // SPECIES_OLD_UNOWN_Y 0x00, // SPECIES_OLD_UNOWN_Z 0x10, // SPECIES_TREECKO 0x15, // SPECIES_GROVYLE 0x09, // SPECIES_SCEPTILE 0x12, // SPECIES_TORCHIC 0x10, // SPECIES_COMBUSKEN 0x17, // SPECIES_BLAZIKEN 0x02, // SPECIES_MUDKIP 0x12, // SPECIES_MARSHTOMP 0x19, // SPECIES_SWAMPERT 0x12, // SPECIES_POOCHYENA 0x08, // SPECIES_MIGHTYENA 0x0f, // SPECIES_ZIGZAGOON 0x15, // SPECIES_LINOONE 0x0b, // SPECIES_WURMPLE 0x08, // SPECIES_SILCOON 0x11, // SPECIES_BEAUTIFLY 0x08, // SPECIES_CASCOON 0x0f, // SPECIES_DUSTOX 0x02, // SPECIES_LOTAD 0x10, // SPECIES_LOMBRE 0x10, // SPECIES_LUDICOLO 0x13, // SPECIES_SEEDOT 0x09, // SPECIES_NUZLEAF 0x14, // SPECIES_SHIFTRY 0x0a, // SPECIES_NINCADA 0x01, // SPECIES_NINJASK 0x14, // SPECIES_SHEDINJA 0x12, // SPECIES_TAILLOW 0x15, // SPECIES_SWELLOW 0x13, // SPECIES_SHROOMISH 0x15, // SPECIES_BRELOOM 0x07, // SPECIES_SPINDA 0x11, // SPECIES_WINGULL 0x11, // SPECIES_PELIPPER 0x03, // SPECIES_SURSKIT 0x11, // SPECIES_MASQUERAIN 0x19, // SPECIES_WAILMER 0x19, // SPECIES_WAILORD 0x13, // SPECIES_SKITTY 0x12, // SPECIES_DELCATTY 0x01, // SPECIES_KECLEON 0x13, // SPECIES_BALTOY 0x14, // SPECIES_CLAYDOL 0x0e, // SPECIES_NOSEPASS 0x17, // SPECIES_TORKOAL 0x01, // SPECIES_SABLEYE 0x0b, // SPECIES_BARBOACH 0x09, // SPECIES_WHISCASH 0x04, // SPECIES_LUVDISC 0x0f, // SPECIES_CORPHISH 0x15, // SPECIES_CRAWDAUNT 0x03, // SPECIES_FEEBAS 0x19, // SPECIES_MILOTIC 0x04, // SPECIES_CARVANHA 0x15, // SPECIES_SHARPEDO 0x13, // SPECIES_TRAPINCH 0x01, // SPECIES_VIBRAVA 0x0f, // SPECIES_FLYGON 0x0e, // SPECIES_MAKUHITA 0x0e, // SPECIES_HARIYAMA 0x15, // SPECIES_ELECTRIKE 0x09, // SPECIES_MANECTRIC 0x0e, // SPECIES_NUMEL 0x17, // SPECIES_CAMERUPT 0x13, // SPECIES_SPHEAL 0x09, // SPECIES_SEALEO 0x09, // SPECIES_WALREIN 0x0a, // SPECIES_CACNEA 0x08, // SPECIES_CACTURNE 0x0f, // SPECIES_SNORUNT 0x0f, // SPECIES_GLALIE 0x13, // SPECIES_LUNATONE 0x13, // SPECIES_SOLROCK 0x10, // SPECIES_AZURILL 0x10, // SPECIES_SPOINK 0x14, // SPECIES_GRUMPIG 0x12, // SPECIES_PLUSLE 0x12, // SPECIES_MINUN 0x09, // SPECIES_MAWILE 0x14, // SPECIES_MEDITITE 0x14, // SPECIES_MEDICHAM 0x11, // SPECIES_SWABLU 0x11, // SPECIES_ALTARIA 0x12, // SPECIES_WYNAUT 0x01, // SPECIES_DUSKULL 0x01, // SPECIES_DUSCLOPS 0x18, // SPECIES_ROSELIA 0x02, // SPECIES_SLAKOTH 0x10, // SPECIES_VIGOROTH 0x08, // SPECIES_SLAKING 0x0b, // SPECIES_GULPIN 0x0b, // SPECIES_SWALOT 0x0e, // SPECIES_TROPIUS 0x13, // SPECIES_WHISMUR 0x09, // SPECIES_LOUDRED 0x0d, // SPECIES_EXPLOUD 0x13, // SPECIES_CLAMPERL 0x11, // SPECIES_HUNTAIL 0x11, // SPECIES_GOREBYSS 0x14, // SPECIES_ABSOL 0x01, // SPECIES_SHUPPET 0x01, // SPECIES_BANETTE 0x0b, // SPECIES_SEVIPER 0x15, // SPECIES_ZANGOOSE 0x02, // SPECIES_RELICANTH 0x15, // SPECIES_ARON 0x09, // SPECIES_LAIRON 0x0e, // SPECIES_AGGRON 0x11, // SPECIES_CASTFORM 0x11, // SPECIES_VOLBEAT 0x11, // SPECIES_ILLUMISE 0x0c, // SPECIES_LILEEP 0x0b, // SPECIES_CRADILY 0x0f, // SPECIES_ANORITH 0x09, // SPECIES_ARMALDO 0x14, // SPECIES_RALTS 0x14, // SPECIES_KIRLIA 0x14, // SPECIES_GARDEVOIR 0x09, // SPECIES_BAGON 0x09, // SPECIES_SHELGON 0x08, // SPECIES_SALAMENCE 0x0f, // SPECIES_BELDUM 0x15, // SPECIES_METANG 0x09, // SPECIES_METAGROSS 0x09, // SPECIES_REGIROCK 0x09, // SPECIES_REGICE 0x09, // SPECIES_REGISTEEL 0x19, // SPECIES_KYOGRE 0x17, // SPECIES_GROUDON 0x0d, // SPECIES_RAYQUAZA 0x01, // SPECIES_LATIAS 0x01, // SPECIES_LATIOS 0x11, // SPECIES_JIRACHI 0x14, // SPECIES_DEOXYS 0x11, // SPECIES_CHIMECHO }; static const u8 sUnknown_0860AA64[][2] = { {0, 5}, {1, 1}, {0, 15}, {1, 4}, {0, 2}, {1, 2}, {0, 2}, {1, 2}, {0, 2}, {1, 2}, {0, 2}, {1, 2}, {0, 2}, {0, 0xFF} }; static const u8 sUnknown_0860AA80[][2] = { {6, 30}, {0xFE, 15}, {6, 30}, {0xFF, 0} }; static void (* const sMonAnimFunctions[])(struct Sprite *sprite) = { pokemonanimfunc_00, pokemonanimfunc_01, pokemonanimfunc_02, pokemonanimfunc_03, pokemonanimfunc_04, pokemonanimfunc_05, pokemonanimfunc_06, pokemonanimfunc_07, pokemonanimfunc_08, pokemonanimfunc_09, pokemonanimfunc_0A, pokemonanimfunc_0B, pokemonanimfunc_0C, pokemonanimfunc_0D, pokemonanimfunc_0E, pokemonanimfunc_0F, pokemonanimfunc_10, pokemonanimfunc_11, pokemonanimfunc_12, pokemonanimfunc_13, pokemonanimfunc_14, pokemonanimfunc_15, pokemonanimfunc_16, pokemonanimfunc_17, pokemonanimfunc_18, pokemonanimfunc_19, pokemonanimfunc_1A, pokemonanimfunc_1B, pokemonanimfunc_1C, pokemonanimfunc_1D, pokemonanimfunc_1E, pokemonanimfunc_1F, pokemonanimfunc_20, pokemonanimfunc_21, pokemonanimfunc_22, pokemonanimfunc_23, pokemonanimfunc_24, pokemonanimfunc_25, pokemonanimfunc_26, pokemonanimfunc_27, pokemonanimfunc_28, pokemonanimfunc_29, pokemonanimfunc_2A, pokemonanimfunc_2B, pokemonanimfunc_2C, pokemonanimfunc_2D, pokemonanimfunc_2E, pokemonanimfunc_2F, pokemonanimfunc_30, pokemonanimfunc_31, pokemonanimfunc_32, pokemonanimfunc_33, pokemonanimfunc_34, pokemonanimfunc_35, pokemonanimfunc_36, pokemonanimfunc_37, pokemonanimfunc_38, pokemonanimfunc_39, pokemonanimfunc_3A, pokemonanimfunc_3B, pokemonanimfunc_3C, pokemonanimfunc_3D, pokemonanimfunc_3E, pokemonanimfunc_3F, pokemonanimfunc_40, pokemonanimfunc_41, pokemonanimfunc_42, pokemonanimfunc_43, pokemonanimfunc_44, pokemonanimfunc_45, pokemonanimfunc_46, pokemonanimfunc_47, pokemonanimfunc_48, pokemonanimfunc_49, pokemonanimfunc_4A, pokemonanimfunc_4B, pokemonanimfunc_4C, pokemonanimfunc_4D, pokemonanimfunc_4E, pokemonanimfunc_4F, pokemonanimfunc_50, pokemonanimfunc_51, pokemonanimfunc_52, pokemonanimfunc_53, pokemonanimfunc_54, pokemonanimfunc_55, pokemonanimfunc_56, pokemonanimfunc_57, pokemonanimfunc_58, pokemonanimfunc_59, pokemonanimfunc_5A, pokemonanimfunc_5B, pokemonanimfunc_5C, pokemonanimfunc_5D, pokemonanimfunc_5E, pokemonanimfunc_5F, pokemonanimfunc_60, pokemonanimfunc_61, pokemonanimfunc_62, pokemonanimfunc_63, pokemonanimfunc_64, pokemonanimfunc_65, pokemonanimfunc_66, pokemonanimfunc_67, pokemonanimfunc_68, pokemonanimfunc_69, pokemonanimfunc_6A, pokemonanimfunc_6B, pokemonanimfunc_6C, pokemonanimfunc_6D, pokemonanimfunc_6E, pokemonanimfunc_6F, pokemonanimfunc_70, pokemonanimfunc_71, pokemonanimfunc_72, pokemonanimfunc_73, pokemonanimfunc_74, pokemonanimfunc_75, pokemonanimfunc_76, pokemonanimfunc_77, pokemonanimfunc_78, pokemonanimfunc_79, pokemonanimfunc_7A, pokemonanimfunc_7B, pokemonanimfunc_7C, pokemonanimfunc_7D, pokemonanimfunc_7E, pokemonanimfunc_7F, pokemonanimfunc_80, pokemonanimfunc_81, pokemonanimfunc_82, pokemonanimfunc_83, pokemonanimfunc_84, pokemonanimfunc_85, pokemonanimfunc_86, pokemonanimfunc_87, pokemonanimfunc_88, pokemonanimfunc_89, pokemonanimfunc_8A, pokemonanimfunc_8B, pokemonanimfunc_8C, pokemonanimfunc_8D, pokemonanimfunc_8E, pokemonanimfunc_8F, pokemonanimfunc_90, pokemonanimfunc_91, pokemonanimfunc_92, pokemonanimfunc_93, pokemonanimfunc_94, pokemonanimfunc_95, pokemonanimfunc_96 }; // counting from Id 1, because 0 in sSpeciesToBackAnimSet is used for mons with no back animation static const u8 sBackAnimationIds[] = { 0x60, 0x5f, 0x02, // 1 0x5e, 0x03, 0x46, // 2 0x6d, 0x3e, 0x6e, // 3 0x6f, 0x70, 0x3f, // 4 0x71, 0x13, 0x72, // 5 0x6c, 0x6b, 0x3a, // 6 0x64, 0x14, 0x4f, // 7 0x5d, 0x0f, 0x4c, // 8 0x61, 0x57, 0x58, // 9 0x67, 0x66, 0x59, // 0xA 0x74, 0x73, 0x5a, // 0xB 0x75, 0x76, 0x5b, // 0xC 0x77, 0x78, 0x65, // 0xD 0x63, 0x5c, 0x62, // 0xE 0x6a, 0x69, 0x68, // 0xF 0x7b, 0x7a, 0x79, // 0x10 0x7e, 0x7d, 0x7c, // 0x11 0x81, 0x80, 0x7f, // 0x12 0x84, 0x82, 0x83, // 0x13 0x85, 0x86, 0x87, // 0x14 0x88, 0x89, 0x8a, // 0x15 0x8b, 0x8c, 0x8d, // 0x16 0x8e, 0x8f, 0x90, // 0x17 0x91, 0x92, 0x93, // 0x18 0x94, 0x95, 0x96, // 0x19 }; static const u8 sBackAnimNatureModTable[] = { 0x00, // NATURE_HARDY 0x02, // NATURE_LONELY 0x00, // NATURE_BRAVE 0x00, // NATURE_ADAMANT 0x00, // NATURE_NAUGHTY 0x01, // NATURE_BOLD 0x01, // NATURE_DOCILE 0x01, // NATURE_RELAXED 0x00, // NATURE_IMPISH 0x01, // NATURE_LAX 0x02, // NATURE_TIMID 0x00, // NATURE_HASTY 0x01, // NATURE_SERIOUS 0x00, // NATURE_JOLLY 0x00, // NATURE_NAIVE 0x02, // NATURE_MODEST 0x02, // NATURE_MILD 0x02, // NATURE_QUIET 0x02, // NATURE_BASHFUL 0x01, // NATURE_RASH 0x01, // NATURE_CALM 0x02, // NATURE_GENTLE 0x01, // NATURE_SASSY 0x02, // NATURE_CAREFUL 0x01, // NATURE_QUIRKY }; static const union AffineAnimCmd sSpriteAffineAnim_860AD48[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 0), AFFINEANIMCMDTYPE_END }; static const union AffineAnimCmd sSpriteAffineAnim_860AD58[] = { AFFINEANIMCMD_FRAME(-256, 256, 0, 0), AFFINEANIMCMDTYPE_END }; static const union AffineAnimCmd *const sSpriteAffineAnimTable_860AD68[] = { sSpriteAffineAnim_860AD48, sSpriteAffineAnim_860AD58 }; // code static void MonAnimDummySpriteCallback(struct Sprite *sprite) { } static void sub_817F3F0(struct Sprite *sprite, u16 index, s16 amplitudeX, s16 amplitudeY) { s16 xAdder, yAdder; amplitudeX *= -1; amplitudeY *= -1; xAdder = Cos(index, amplitudeX) - Sin(index, amplitudeY); yAdder = Cos(index, amplitudeY) + Sin(index, amplitudeX); amplitudeX *= -1; amplitudeY *= -1; sprite->pos2.x = xAdder + amplitudeX; sprite->pos2.y = yAdder + amplitudeY; } u8 GetSpeciesBackAnimSet(u16 species) { if (sSpeciesToBackAnimSet[species] != 0) return sSpeciesToBackAnimSet[species] - 1; else return 0; } #define tState data[0] #define tPtrLO data[1] #define tPtrHI data[2] #define tAnimId data[3] #define tSaved0 data[4] #define tSaved2 data[5] static void Task_HandleMonAnimation(u8 taskId) { u32 i; struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].tPtrLO << 0x10) | (gTasks[taskId].tPtrHI)); if (gTasks[taskId].tState == 0) { gTasks[taskId].tSaved0 = sprite->data[0]; gTasks[taskId].tSaved2 = sprite->data[2]; sprite->data[1] = 1; sprite->data[0] = 0; for (i = 2; i < ARRAY_COUNT(sprite->data); i++) sprite->data[i] = 0; sprite->callback = sMonAnimFunctions[gTasks[taskId].tAnimId]; sUnknown_03001274 = FALSE; gTasks[taskId].tState++; } if (sprite->callback == SpriteCallbackDummy) { sprite->data[0] = gTasks[taskId].tSaved0; sprite->data[2] = gTasks[taskId].tSaved2; sprite->data[1] = 0; DestroyTask(taskId); } } void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) { u8 taskId = CreateTask(Task_HandleMonAnimation, 128); gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; gTasks[taskId].tPtrHI = (u32)(sprite); gTasks[taskId].tAnimId = frontAnimId; } void StartMonSummaryAnimation(struct Sprite *sprite, u8 frontAnimId) { sUnknown_03001274 = TRUE; sprite->callback = sMonAnimFunctions[frontAnimId]; } void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) { u8 nature, taskId, animId, battlerId; taskId = CreateTask(Task_HandleMonAnimation, 128); gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; gTasks[taskId].tPtrHI = (u32)(sprite); battlerId = sprite->data[0]; nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]); animId = 3 * backAnimSet + sBackAnimNatureModTable[nature]; gTasks[taskId].tAnimId = sBackAnimationIds[animId]; } #undef tState #undef tPtrLO #undef tPtrHI #undef tAnimId #undef tSaved0 #undef tSaved2 void SetSpriteCB_MonAnimDummy(struct Sprite *sprite) { sprite->callback = MonAnimDummySpriteCallback; } static void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) { u8 matrixNum; struct ObjAffineSrcData affineSrcData; struct OamMatrix dest; affineSrcData.xScale = xScale; affineSrcData.yScale = yScale; affineSrcData.rotation = rotation; matrixNum = sprite->oam.matrixNum; ObjAffineSet(&affineSrcData, &dest, 1, 2); gOamMatrices[matrixNum].a = dest.a; gOamMatrices[matrixNum].b = dest.b; gOamMatrices[matrixNum].c = dest.c; gOamMatrices[matrixNum].d = dest.d; } static void HandleStartAffineAnim(struct Sprite *sprite) { sprite->oam.affineMode = 3; sprite->affineAnims = sSpriteAffineAnimTable_860AD68; if (sUnknown_03001274 == TRUE) InitSpriteAffineAnim(sprite); if (!sprite->data[1]) StartSpriteAffineAnim(sprite, 1); else StartSpriteAffineAnim(sprite, 0); CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); sprite->affineAnimPaused = 1; } static void HandleSetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation) { if (!sprite->data[1]) { xScale *= -1; rotation *= -1; } SetAffineData(sprite, xScale, yScale, rotation); } static void sub_817F70C(struct Sprite *sprite) { if (!sprite->data[1]) sprite->pos2.x *= -1; } static bool32 sub_817F724(u8 id) { if (id >= STRUCT_COUNT) { return FALSE; } else { sUnknown_03001240[id].field_6 = 0; sUnknown_03001240[id].field_0 = 0; sUnknown_03001240[id].field_4 = 1; sUnknown_03001240[id].field_2 = 0; sUnknown_03001240[id].field_8 = 0; return TRUE; } } static u8 sub_817F758(void) { sUnknown_03001270 = (sUnknown_03001270 + 1) % STRUCT_COUNT; sub_817F724(sUnknown_03001270); return sUnknown_03001270; } static void sub_817F77C(struct Sprite *sprite) { sprite->oam.affineMode = 1; CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); if (sUnknown_03001274 == TRUE) { if (!sprite->data[1]) sprite->hFlip = 1; else sprite->hFlip = 0; FreeOamMatrix(sprite->oam.matrixNum); sprite->oam.matrixNum |= (sprite->hFlip << 3); sprite->oam.affineMode = 0; } } static void pokemonanimfunc_01(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 40) { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 var = (sprite->data[2] * 512 / 40) % 256; sprite->data[4] = Sin(var, 32) + 256; sprite->data[5] = Cos(var, 32) + 256; HandleSetAffineData(sprite, sprite->data[4], sprite->data[5], 0); } sprite->data[2]++; } static void pokemonanimfunc_02(struct Sprite *sprite) { if (sprite->data[2] > 40) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { s8 sign; if (!(sprite->data[2] & 1)) sign = 1; else sign = -1; sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 6) * sign; } sprite->data[2]++; } static void sub_817F8FC(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > sprite->data[0]) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { sprite->pos2.x = Sin((sprite->data[2] * 384 / sprite->data[0]) % 256, 6); } sprite->data[2]++; sub_817F70C(sprite); } static void pokemonanimfunc_03(struct Sprite *sprite) { sprite->data[0] = 40; sub_817F8FC(sprite); sprite->callback = sub_817F8FC; } static void sub_817F978(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > sprite->data[0]) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; } else { sprite->pos2.y = -(Sin((sprite->data[2] * 384 / sprite->data[0]) % 256, 6)); } sprite->data[2]++; sub_817F70C(sprite); } static void pokemonanimfunc_04(struct Sprite *sprite) { sprite->data[0] = 40; sub_817F978(sprite); sprite->callback = sub_817F978; } #ifdef NONMATCHING static void sub_817F9F4(struct Sprite *sprite) { s32 counter = sprite->data[2]; if (counter > 384) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; sprite->pos2.y = 0; } else { s32 divCounter = counter / 128; switch (divCounter) { case 0: case 1: sprite->pos2.y = -(Sin(counter % 128, sprite->data[0] * 2)); break; case 2: case 3: sprite->pos2.y = -(Sin(counter - 256, sprite->data[0] * 3)); break; } } sprite->data[2] += 12; } #else NAKED static void sub_817F9F4(struct Sprite *sprite) { asm(".syntax unified\n\ push {r4,lr}\n\ adds r4, r0, 0\n\ movs r0, 0x32\n\ ldrsh r1, [r4, r0]\n\ movs r0, 0xC0\n\ lsls r0, 1\n\ cmp r1, r0\n\ ble _0817FA14\n\ ldr r0, =SpriteCB_SetDummyOnAnimEnd\n\ str r0, [r4, 0x1C]\n\ movs r0, 0\n\ strh r0, [r4, 0x24]\n\ b _0817FA5E\n\ .pool\n\ _0817FA14:\n\ adds r0, r1, 0\n\ cmp r1, 0\n\ bge _0817FA1C\n\ adds r0, 0x7F\n\ _0817FA1C:\n\ asrs r2, r0, 7\n\ lsls r0, r2, 16\n\ asrs r0, 16\n\ cmp r0, 0\n\ blt _0817FA60\n\ cmp r0, 0x1\n\ ble _0817FA48\n\ cmp r0, 0x3\n\ bgt _0817FA60\n\ ldr r2, =0xffffff00\n\ adds r1, r2\n\ lsls r0, r1, 16\n\ asrs r0, 16\n\ movs r1, 0x2E\n\ ldrsh r2, [r4, r1]\n\ lsls r1, r2, 1\n\ adds r1, r2\n\ lsls r1, 16\n\ b _0817FA56\n\ .pool\n\ _0817FA48:\n\ lsls r0, r2, 7\n\ subs r0, r1, r0\n\ lsls r0, 16\n\ asrs r0, 16\n\ movs r2, 0x2E\n\ ldrsh r1, [r4, r2]\n\ lsls r1, 17\n\ _0817FA56:\n\ asrs r1, 16\n\ bl Sin\n\ negs r0, r0\n\ _0817FA5E:\n\ strh r0, [r4, 0x26]\n\ _0817FA60:\n\ ldrh r0, [r4, 0x32]\n\ adds r0, 0xC\n\ strh r0, [r4, 0x32]\n\ pop {r4}\n\ pop {r0}\n\ bx r0\n\ .syntax divided"); } #endif // NONMATCHING static void pokemonanimfunc_1E(struct Sprite *sprite) { sprite->data[0] = 4; sub_817F9F4(sprite); sprite->callback = sub_817F9F4; } static void pokemonanimfunc_06(struct Sprite *sprite) { s32 counter = sprite->data[2]; if (counter > 768) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; sprite->pos2.y = 0; } else { s16 divCounter = counter / 128; switch (divCounter) { case 0: case 1: sprite->pos2.x = 0; break; case 2: counter = 0; break; case 3: sprite->pos2.x = -(counter % 128 * 8) / 128; break; case 4: sprite->pos2.x = (counter % 128) / 8 - 8; break; case 5: sprite->pos2.x = -(counter % 128 * 8) / 128 + 8; break; } sprite->pos2.y = -(Sin(counter % 128, 8)); } sprite->data[2] += 12; } static void pokemonanimfunc_09(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 40) { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 index = (sprite->data[2] * 256 / 40) % 256; if (sprite->data[2] % 2 == 0) { sprite->data[4] = Sin(index, 32) + 256; sprite->data[5] = Sin(index, 32) + 256; } else { sprite->data[4] = Sin(index, 8) + 256; sprite->data[5] = Sin(index, 8) + 256; } HandleSetAffineData(sprite, sprite->data[4], sprite->data[5], 0); } sprite->data[2]++; } static const s8 sUnknown_0860AD70[][3] = { {-1, -1, 6}, {2, 0, 6}, {-2, 2, 6}, {2, 0, 6}, {-2, -2, 6}, {2, 0, 6}, {-2, 2, 6}, {2, 0, 6}, {-1, -1, 6}, {0, 0, 0}, }; static void sub_817FC20(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) sprite->data[3] = 0; if (sUnknown_0860AD70[sprite->data[3]][2] == sprite->data[2]) { if (sUnknown_0860AD70[sprite->data[3]][2] == 0) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[3]++; sprite->data[2] = 0; } } if (sUnknown_0860AD70[sprite->data[3]][2] == 0) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->pos2.x += sUnknown_0860AD70[sprite->data[3]][0]; sprite->pos2.y += sUnknown_0860AD70[sprite->data[3]][1]; sprite->data[2]++; sub_817F70C(sprite); } } static void pokemonanimfunc_0A(struct Sprite *sprite) { sub_817FC20(sprite); sprite->callback = sub_817FC20; } static void sub_817FCDC(struct Sprite *sprite) { s32 counter = sprite->data[2]; if (counter > 2304) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { sprite->pos2.x = Sin(counter % 256, sprite->data[7]); } sprite->data[2] += sprite->data[0]; } static void pokemonanimfunc_0F(struct Sprite *sprite) { sprite->data[0] = 60; sprite->data[7] = 3; sub_817FCDC(sprite); sprite->callback = sub_817FCDC; } static void sub_817FD44(struct Sprite *sprite) { s32 counter = sprite->data[2]; if (counter > 2304) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; } else { sprite->pos2.y = Sin(counter % 256, 3); } sprite->data[2] += sprite->data[0]; } static void pokemonanimfunc_10(struct Sprite *sprite) { sprite->data[0] = 60; sub_817FD44(sprite); sprite->callback = sub_817FD44; } static void pokemonanimfunc_11(struct Sprite *sprite) { if (sprite->data[2] > 512) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; sprite->pos2.y = 0; } else { s8 sign; s32 index, amplitude; if (!(sprite->data[2] & 1)) sign = 1; else sign = -1; amplitude = Sin(sprite->data[2] / 4, 8); index = sprite->data[2] % 256; sprite->pos2.y = Sin(index, amplitude) * sign; sprite->pos2.x = Cos(index, amplitude) * sign; } sprite->data[2] += 9; } static void sub_817FE30(struct Sprite *sprite) { s16 id = sprite->data[0]; if (sUnknown_03001240[id].field_0 != 0) { sUnknown_03001240[id].field_0--; } else { if (sprite->data[2] == 0 && sUnknown_03001240[id].field_8 == 0) { HandleStartAffineAnim(sprite); sUnknown_03001240[id].field_8++; } if (sprite->data[2] > sUnknown_03001240[id].field_6) { HandleSetAffineData(sprite, 256, 256, 0); if (sUnknown_03001240[id].field_4 > 1) { sUnknown_03001240[id].field_4--; sUnknown_03001240[id].field_0 = 10; sprite->data[2] = 0; } else { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } else { sprite->data[6] = Sin(sprite->data[2] % 256, 4096); HandleSetAffineData(sprite, 256, 256, sprite->data[6]); } sprite->data[2] += 16; } } static void pokemonanimfunc_12(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 512; sUnknown_03001240[id].field_0 = 0; sub_817FE30(sprite); sprite->callback = sub_817FE30; } static void sub_817FF3C(struct Sprite *sprite) { u8 id = sprite->data[0]; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > sUnknown_03001240[id].field_0) { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = (65536 / sUnknown_03001240[id].field_8) * sprite->data[2]; HandleSetAffineData(sprite, 256, 256, sprite->data[6]); } sprite->data[2]++; } static void pokemonanimfunc_1F(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_0 = 60; sUnknown_03001240[id].field_8 = 20; sub_817FF3C(sprite); sprite->callback = sub_817FF3C; } static void sub_817FFF0(struct Sprite *sprite) { u8 id = sprite->data[0]; sub_817F70C(sprite); if (sprite->data[2] > sUnknown_03001240[id].field_6) { sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 index = (sprite->data[2] + 192) % 256; sprite->pos2.x = -(Cos(index, sUnknown_03001240[id].field_8 * 2)); sprite->pos2.y = Sin(index, sUnknown_03001240[id].field_8) + sUnknown_03001240[id].field_8; } sprite->data[2] += sUnknown_03001240[id].field_2; sub_817F70C(sprite); } static void pokemonanimfunc_14(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 512; sUnknown_03001240[id].field_8 = 6; sUnknown_03001240[id].field_2 = 24; sub_817FFF0(sprite); sprite->callback = sub_817FFF0; } static void pokemonanimfunc_15(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; if (sprite->data[2] > 128) { BlendPalette(sprite->data[7], 0x10, 0, RGB_BLACK); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 16); BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_BLACK); } sprite->data[2]++; } static void pokemonanimfunc_16(struct Sprite *sprite) { s16 index1 = 0, index2 = 0; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 40) { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { index2 = (sprite->data[2] * 128) / 40; if (sprite->data[2] >= 10 && sprite->data[2] <= 29) { sprite->data[7] += 51; index1 = 0xFF & sprite->data[7]; } if (sprite->data[1] == 0) sprite->data[4] = (Sin(index2, 40) - 256) + Sin(index1, 16); else sprite->data[4] = (256 - Sin(index2, 40)) - Sin(index1, 16); sprite->data[5] = Sin(index2, 16) + 256; SetAffineData(sprite, sprite->data[4], sprite->data[5], 0); } sprite->data[2]++; } static void pokemonanimfunc_17(struct Sprite *sprite) { s16 posY = 0, index1 = 0, index2 = 0; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 40) { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = posY; } else { index2 = (sprite->data[2] * 128) / 40; if (sprite->data[2] >= 10 && sprite->data[2] <= 29) { sprite->data[7] += 51; index1 = 0xFF & sprite->data[7]; } if (sprite->data[1] == 0) sprite->data[4] = -(Sin(index2, 16)) - 256; else sprite->data[4] = Sin(index2, 16) + 256; sprite->data[5] = (256 - Sin(index2, 40)) - Sin(index1, 8); if (sprite->data[5] != 256) posY = (256 - sprite->data[5]) / 8; sprite->pos2.y = -(posY); SetAffineData(sprite, sprite->data[4], sprite->data[5], 0); } sprite->data[2]++; } static void sub_818031C(struct Sprite *sprite) { u8 index = sprite->data[2]; u8 var7 = sprite->data[6]; u8 var5 = sUnknown_0860AA80[sprite->data[5]][0]; u8 var6 = sUnknown_0860AA80[sprite->data[5]][1]; u8 amplitude = 0; if (var5 != 0xFE) amplitude = (var6 - var7) * var5 / var6; else amplitude = 0; if (var5 == 0xFF) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; } else { sprite->pos2.y = Sin(index, amplitude); if (var7 == var6) { sprite->data[5]++; sprite->data[6] = 0; } else { sprite->data[2] += sprite->data[0]; sprite->data[6]++; } } } static void pokemonanimfunc_19(struct Sprite *sprite) { sprite->data[0] = 48; sub_818031C(sprite); sprite->callback = sub_818031C; } static void pokemonanimfunc_1A(struct Sprite *sprite) { u8 counter = 0; sub_817F70C(sprite); counter = sprite->data[2]; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 35) { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { s16 index = ((counter - 10) * 128) / 20; if (counter < 10) HandleSetAffineData(sprite, 256, 256, counter / 2 * 512); else if (counter >= 10 && counter <= 29) sprite->pos2.x = -(Sin(index, 5)); else HandleSetAffineData(sprite, 256, 256, (35 - counter) / 2 * 1024); } sprite->data[2]++; sub_817F70C(sprite); } static void pokemonanimfunc_1B(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 100) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 index = (sprite->data[2] * 256) / 100; sprite->pos2.y = Sin(index, 10); HandleSetAffineData(sprite, 256, 256, Sin(index, 3276)); } sprite->data[2]++; } static void sub_81804F8(struct Sprite *sprite) { s32 var = 0; s16 index = 0; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 100) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { index = (sprite->data[2] * 256) / 100; var = (sprite->data[2] * 512) / 100; var &= 0xFF; sprite->pos2.y = Sin(index, sprite->data[0]); HandleSetAffineData(sprite, 256, 256, Sin(var, 3276)); } sprite->data[2]++; } static void pokemonanimfunc_1C(struct Sprite *sprite) { sprite->data[0] = 10; sub_81804F8(sprite); sprite->callback = sub_81804F8; } static void sub_81805B0(struct Sprite *sprite) { s32 var = 0; s16 index = 0; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 100) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { index = (sprite->data[2] * 256) / 100; var = (sprite->data[2] * 512) / 100; var &= 0xFF; sprite->pos2.y = -(Sin(index / 2, sprite->data[0] * 2)); HandleSetAffineData(sprite, 256, 256, Sin(var, 3276)); } sprite->data[2]++; } static void pokemonanimfunc_18(struct Sprite *sprite) { sprite->data[0] = 5; sub_81805B0(sprite); sprite->callback = sub_81805B0; } static void pokemonanimfunc_1D(struct Sprite *sprite) { s32 var; s16 index = 0; sub_817F70C(sprite); var = 0; if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); if (sprite->data[2] > 100) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 toDiv = 100; index = (sprite->data[2] * 256) / toDiv; var = (sprite->data[2] * 512) / toDiv; var &= 0xFF; sprite->pos2.x = Sin(index, 8); HandleSetAffineData(sprite, 256, 256, Sin(var, 3276)); } sprite->data[2]++; sub_817F70C(sprite); } static void sub_8180714(struct Sprite *sprite) { s16 posY = 0; if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[3] = 0; } sub_817F70C(sprite); if (sprite->data[2] > sprite->data[0] * 3) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 yScale = Sin(sprite->data[4], 32) + 256; if (sprite->data[2] > sprite->data[0] && sprite->data[2] < sprite->data[0] * 2) sprite->data[3] += (128 / sprite->data[0]); if (yScale > 256) posY = (256 - yScale) / 8; sprite->pos2.y = -(Sin(sprite->data[3], 10)) - posY; HandleSetAffineData(sprite, 256 - Sin(sprite->data[4], 32), yScale, 0); sprite->data[2]++; sprite->data[4] = (sprite->data[4] + 128 / sprite->data[0]) & 0xFF; } sub_817F70C(sprite); } static void pokemonanimfunc_00(struct Sprite *sprite) { sprite->data[0] = 16; sub_8180714(sprite); sprite->callback = sub_8180714; } static void sub_8180828(struct Sprite *sprite) { s16 posY = 0; if (sprite->data[2] > (128 / sprite->data[6]) * sprite->data[7]) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 yScale = Sin(sprite->data[4], 32) + 256; if (yScale > 256) posY = (256 - yScale) / 8; sprite->pos2.y = -(posY); HandleSetAffineData(sprite, Sin(sprite->data[4], 48) + 256, yScale, 0); sprite->data[2]++; sprite->data[4] = (sprite->data[4] + sprite->data[6]) & 0xFF; } } static void pokemonanimfunc_13(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[7] = 3; sprite->data[6] = 8; } sub_8180828(sprite); } static const s8 sUnknown_0860AD8E[][8][3] = { { {0, 8, 8}, {8, -8, 12}, {-8, 8, 12}, {8, -8, 12}, {-8, 8, 12}, {8, -8, 12}, {-8, 0, 12}, {0, 0, 0} }, { {0, 8, 16}, {8, -8, 24}, {-8, 8, 24}, {8, -8, 24}, {-8, 8, 24}, {8, -8, 24}, {-8, 0, 24}, {0, 0, 0} }, }; static void sub_8180900(struct Sprite *sprite) { s16 var; u8 structId; s8 r9; s16 r10; s16 r7; u32 arrId; sub_817F70C(sprite); structId = sprite->data[0]; var = sUnknown_03001240[structId].field_6; r9 = sUnknown_0860AD8E[sUnknown_03001240[structId].field_8][sprite->data[4]][0]; r10 = sUnknown_0860AD8E[sUnknown_03001240[structId].field_8][sprite->data[4]][1] - r9; arrId = sUnknown_03001240[structId].field_8; r7 = sprite->data[3]; if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; } if (sUnknown_0860AD8E[arrId][sprite->data[4]][2] == 0) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { u16 rotation; sprite->pos2.y = -(Sin(r7 * 128 / sUnknown_0860AD8E[arrId][sprite->data[4]][2], 10)); sprite->pos2.x = (r10 * r7 / sUnknown_0860AD8E[arrId][sprite->data[4]][2]) + r9; rotation = -(var * sprite->pos2.x) / 8; HandleSetAffineData(sprite, 256, 256, rotation); if (r7 == sUnknown_0860AD8E[arrId][sprite->data[4]][2]) { sprite->data[4]++; sprite->data[3] = 0; } else { sprite->data[3]++; } } sub_817F70C(sprite); } static void pokemonanimfunc_05(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 4096; sUnknown_03001240[id].field_8 = sprite->data[6]; sub_8180900(sprite); sprite->callback = sub_8180900; } static void pokemonanimfunc_20(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; if (sprite->data[2] > 128) { BlendPalette(sprite->data[7], 0x10, 0, RGB(31, 22, 0)); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 12); BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB(31, 22, 0)); } sprite->data[2] += 2; } static void pokemonanimfunc_21(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; if (sprite->data[2] > 128) { BlendPalette(sprite->data[7], 0x10, 0, RGB_RED); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 12); BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_RED); } sprite->data[2] += 2; } static void pokemonanimfunc_22(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; if (sprite->data[2] > 128) { BlendPalette(sprite->data[7], 0x10, 0, RGB_BLUE); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 12); BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_BLUE); } sprite->data[2] += 2; } static void pokemonanimfunc_23(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; if (sprite->data[2] > 128) { BlendPalette(sprite->data[7], 0x10, 0, RGB_YELLOW); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 12); BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB_YELLOW); } sprite->data[2] += 2; } static void pokemonanimfunc_24(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; if (sprite->data[2] > 128) { BlendPalette(sprite->data[7], 0x10, 0, RGB(24, 0, 24)); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 12); BlendPalette(sprite->data[7], 0x10, sprite->data[6], RGB(24, 0, 24)); } sprite->data[2] += 2; } static void sub_8180CB4(struct Sprite *sprite); static void sub_8180CE8(struct Sprite *sprite); static void sub_8180D44(struct Sprite *sprite); static void sub_8180DC0(struct Sprite *sprite); static void sub_8180E28(struct Sprite *sprite); static void pokemonanimfunc_25(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_8180CB4; } static void sub_8180CB4(struct Sprite *sprite) { sub_817F70C(sprite); if (++sprite->pos2.x > 7) { sprite->pos2.x = 8; sprite->data[7] = 2; sprite->callback = sub_8180CE8; } sub_817F70C(sprite); } static void sub_8180CE8(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x -= sprite->data[7]; sprite->data[7]++; if (sprite->pos2.x <= 0) { s16 subResult; u8 var = sprite->data[7]; sprite->data[6] = 0; subResult = sprite->pos2.x; do { subResult -= var; sprite->data[6]++; var++; } while (subResult > -8); sprite->data[5] = 1; sprite->callback = sub_8180D44; } sub_817F70C(sprite); } static void sub_8180D44(struct Sprite *sprite) { u8 rotation; sub_817F70C(sprite); sprite->pos2.x -= sprite->data[7]; sprite->data[7]++; rotation = (sprite->data[5] * 6) / sprite->data[6]; if (++sprite->data[5] > sprite->data[6]) sprite->data[5] = sprite->data[6]; HandleSetAffineData(sprite, 256, 256, rotation * 256); if (sprite->pos2.x < -8) { sprite->pos2.x = -8; sprite->data[4] = 2; sprite->data[3] = 0; sprite->data[2] = rotation; sprite->callback = sub_8180DC0; } sub_817F70C(sprite); } static void sub_8180DC0(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[3] > 11) { sprite->data[2] -= 2; if (sprite->data[2] < 0) sprite->data[2] = 0; HandleSetAffineData(sprite, 256, 256, sprite->data[2] << 8); if (sprite->data[2] == 0) sprite->callback = sub_8180E28; } else { sprite->pos2.x += sprite->data[4]; sprite->data[4] *= -1; sprite->data[3]++; } sub_817F70C(sprite); } static void sub_8180E28(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x += 2; if (sprite->pos2.x > 0) { sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } static void sub_8180E78(struct Sprite *sprite); static void sub_8180ED0(struct Sprite *sprite); static void sub_8180F2C(struct Sprite *sprite); static void pokemonanimfunc_26(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[3] = 0; sprite->callback = sub_8180E78; } static void sub_8180E78(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x++; sprite->pos2.y--; if (sprite->pos2.x % 2 == 0 && sprite->data[3] <= 0) sprite->data[3] = 10; if (sprite->pos2.x > 7) { sprite->pos2.x = 8; sprite->pos2.y = -8; sprite->data[4] = 0; sprite->callback = sub_8180ED0; } sub_817F70C(sprite); } static void sub_8180ED0(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x = Cos(sprite->data[4], 16) - 8; sprite->pos2.y = Sin(sprite->data[4], 16) - 8; if (sprite->data[4] > 63) { sprite->data[2] = 160; sprite->data[3] = 10; sprite->callback = sub_8180F2C; } sprite->data[4] += 8; if (sprite->data[4] > 64) sprite->data[4] = 64; sub_817F70C(sprite); } static void sub_8180F2C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[3] > 0) { sprite->data[3]--; } else { u32 rotation; sprite->pos2.x = Cos(sprite->data[2], 5) - 4; sprite->pos2.y = -(Sin(sprite->data[2], 5)) + 4; sprite->data[2] -= 4; rotation = sprite->data[2] - 32; HandleSetAffineData(sprite, 256, 256, rotation * 512); if (sprite->data[2] <= 32) { sprite->pos2.x = 0; sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } sub_817F70C(sprite); } static void pokemonanimfunc_27(struct Sprite *sprite) { if (sprite->data[3] > 0) { sprite->data[3]--; } else { sprite->data[4] = (sprite->data[4] == 0) ? 1 : 0; sprite->invisible = sprite->data[4]; if (++sprite->data[2] > 19) { sprite->invisible = FALSE; sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sprite->data[3] = 2; } } static void sub_8181024(struct Sprite *sprite); static void sub_8181068(struct Sprite *sprite); static void sub_81810C4(struct Sprite *sprite); static void pokemonanimfunc_28(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_8181024; } static void sub_8181024(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x--; sprite->pos2.y++; if (sprite->pos2.x <= -16) { sprite->pos2.x = -16; sprite->pos2.y = 16; sprite->callback = sub_8181068; sprite->data[2] = 160; } sub_817F70C(sprite); } static void sub_8181068(struct Sprite *sprite) { u32 rotation; sub_817F70C(sprite); sprite->data[2] -= 4; sprite->pos2.x = Cos(sprite->data[2], 22); sprite->pos2.y = -(Sin(sprite->data[2], 22)); rotation = sprite->data[2] - 32; HandleSetAffineData(sprite, 256, 256, rotation * 512); if (sprite->data[2] <= 32) sprite->callback = sub_81810C4; sub_817F70C(sprite); } static void sub_81810C4(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x--; sprite->pos2.y++; if (sprite->pos2.x <= 0) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } static void sub_8181110(struct Sprite *sprite); static void sub_8181144(struct Sprite *sprite); static void sub_81811A4(struct Sprite *sprite); static void pokemonanimfunc_29(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_8181110; } static void sub_8181110(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x++; sprite->pos2.y--; if (sprite->pos2.x > 15) { sprite->data[2] = 0; sprite->callback = sub_8181144; } sub_817F70C(sprite); } static void sub_8181144(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[2] += 16; if (sprite->pos2.x <= -16) { sprite->pos2.x = -16; sprite->pos2.y = 16; sprite->data[2] = 0; sprite->callback = sub_81811A4; } else { sprite->pos2.x -= 2; sprite->pos2.y += 2; } HandleSetAffineData(sprite, 256, 256, sprite->data[2] << 8); sub_817F70C(sprite); } static void sub_81811A4(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x++; sprite->pos2.y--;; if (sprite->pos2.x >= 0) { sprite->pos2.x = 0; sprite->pos2.y = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } static void sub_8181214(struct Sprite *sprite); static void pokemonanimfunc_2A(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_2 = 2; sub_8181214(sprite); sprite->callback = sub_8181214; } static void sub_8181214(struct Sprite *sprite) { if (sUnknown_03001240[sprite->data[0]].field_0 != 0) { sUnknown_03001240[sprite->data[0]].field_0--; } else { sub_817F70C(sprite); if (sprite->data[2] == 0) { sprite->data[2]++; HandleStartAffineAnim(sprite); sprite->data[7] = sUnknown_03001240[sprite->data[0]].field_2; sprite->data[3] = -1; sprite->data[4] = -1; sprite->data[5] = 0; sprite->data[6] = 0; } sprite->pos2.x += (sprite->data[7] * 2 * sprite->data[3]); sprite->pos2.y += (sprite->data[7] * sprite->data[4]); sprite->data[6] += 8; if (sprite->pos2.x <= -16 || sprite->pos2.x >= 16) { sprite->pos2.x = sprite->data[3] * 16; sprite->data[3] *= -1; sprite->data[5]++; } else if (sprite->pos2.y <= -16 || sprite->pos2.y >= 16) { sprite->pos2.y = sprite->data[4] * 16; sprite->data[4] *= -1; sprite->data[5]++; } if (sprite->data[5] > 5 && sprite->pos2.x <= 0) { sprite->pos2.x = 0; sprite->pos2.y = 0; if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[5] = 0; sprite->data[6] = 0; sUnknown_03001240[sprite->data[0]].field_0 = 10; } else { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } HandleSetAffineData(sprite, 256, 256, sprite->data[6] << 8); sub_817F70C(sprite); } } static void sub_8181370(struct Sprite *sprite); static void pokemonanimfunc_2B(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[6] = 0; sprite->data[7] = 0; sprite->callback = sub_8181370; } static void sub_8181370(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[6] += 4; sprite->pos2.x = -(Sin(sprite->data[6], 16)); sprite->pos2.y = -(Sin((sprite->data[6] * 2) & 0xFF, 8)); if (sprite->data[6] > 192 && sprite->data[7] == 1) { HandleSetAffineData(sprite, 256, 256, 0); sprite->data[7]++; } else if (sprite->data[6] > 64 && sprite->data[7] == 0) { HandleSetAffineData(sprite, -256, 256, 0); sprite->data[7]++; } if (sprite->data[6] > 255) { sprite->pos2.x = 0; sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } static void pokemonanimfunc_2C(struct Sprite *sprite) { if (++sprite->data[2] == 1) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; } if (sUnknown_0860AA64[sprite->data[6]][1] == 0xFF) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { if (sprite->data[4] == 1) { if (sUnknown_0860AA64[sprite->data[6]][0] != 0) BlendPalette(sprite->data[7], 0x10, 0x10, RGB_YELLOW); else BlendPalette(sprite->data[7], 0x10, 0, RGB_YELLOW); sprite->data[4] = 0; } if (sUnknown_0860AA64[sprite->data[6]][1] == sprite->data[5]) { sprite->data[4] = 1; sprite->data[5] = 0; sprite->data[6]++; } else { sprite->data[5]++; } } } static void sub_81814D4(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); sub_817F70C(sprite); if (sprite->data[2] > sUnknown_03001240[sprite->data[0]].field_8) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[2] = 0; } else { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } else { s16 index = (sprite->data[2] * 256) / sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = -(Sin(index, 10)); HandleSetAffineData(sprite, 256, 256, Sin(index, 3276)); } sprite->data[2]++; sub_817F70C(sprite); } static void pokemonanimfunc_2D(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 50; sub_81814D4(sprite); sprite->callback = sub_81814D4; } static void sub_81815D4(struct Sprite *sprite) { if (sprite->data[2] == 0) HandleStartAffineAnim(sprite); sub_817F70C(sprite); if (sprite->data[2] > sUnknown_03001240[sprite->data[0]].field_8) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[2] = 0; } else { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } else { s16 index = (sprite->data[2] * 256) / sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = -(Sin(index, 10)); HandleSetAffineData(sprite, 256, 256, -(Sin(index, 3276))); } sprite->data[2]++; sub_817F70C(sprite); } static void pokemonanimfunc_2E(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 50; sub_81815D4(sprite); sprite->callback = sub_81815D4; } static void sub_8181708(struct Sprite *sprite); static void sub_8181770(struct Sprite *sprite); static void sub_8181794(struct Sprite *sprite); static void pokemonanimfunc_2F(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[6] = -(14 * sprite->centerToCornerVecX / 10); sprite->data[7] = 128; sprite->callback = sub_8181708; } static void sub_8181708(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7]--; sprite->pos2.x = Cos(sprite->data[7], sprite->data[6]) + sprite->data[6]; sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6] += 0)); // dummy += 0 is needed to match HandleSetAffineData(sprite, 256, 256, (sprite->data[7] - 128) << 8); if (sprite->data[7] <= 120) { sprite->data[7] = 120; sprite->data[3] = 0; sprite->callback = sub_8181770; } sub_817F70C(sprite); } static void sub_8181770(struct Sprite *sprite) { if (sprite->data[3] == 20) { sprite->callback = sub_8181794; sprite->data[3] = 0; } sprite->data[3]++; } static void sub_8181794(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7] += 2; sprite->pos2.x = Cos(sprite->data[7], sprite->data[6]) + sprite->data[6]; sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6] += 0)); // dummy += 0 is needed to match HandleSetAffineData(sprite, 256, 256, (sprite->data[7] - 128) << 8); if (sprite->data[7] >= 128) { sprite->pos2.x = 0; sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); sprite->data[2] = 0; sub_817F77C(sprite); sprite->callback = pokemonanimfunc_10; } sub_817F70C(sprite); } static void sub_8181810(struct Sprite *sprite) { if (sUnknown_03001240[sprite->data[0]].field_0 != 0) { sUnknown_03001240[sprite->data[0]].field_0--; } else { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[4] = 0; sprite->data[5] = 0; sprite->data[2] = 1; } if (sprite->data[5] == 0) { sprite->data[7] = Sin(sprite->data[4], 256); sprite->pos2.y = Sin(sprite->data[4], 16); sprite->data[6] = Sin(sprite->data[4], 32); HandleSetAffineData(sprite, 256 - sprite->data[6], 256 + sprite->data[7], 0); if (sprite->data[4] == 128) { sprite->data[4] = 0; sprite->data[5] = 1; } } else if (sprite->data[5] == 1) { sprite->data[7] = Sin(sprite->data[4], 32); sprite->pos2.y = -(Sin(sprite->data[4], 8)); sprite->data[6] = Sin(sprite->data[4], 128); HandleSetAffineData(sprite, 256 + sprite->data[6], 256 - sprite->data[7], 0); if (sprite->data[4] == 128) { if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { sUnknown_03001240[sprite->data[0]].field_4--; sUnknown_03001240[sprite->data[0]].field_0 = 10; sprite->data[4] = 0; sprite->data[5] = 0; } else { HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } } sprite->data[4] += sUnknown_03001240[sprite->data[0]].field_6; } } static void pokemonanimfunc_30(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 4; sub_8181810(sprite); sprite->callback = sub_8181810; } static void pokemonanimfunc_31(struct Sprite *sprite) { s32 counter = sprite->data[2]; sub_817F70C(sprite); if (counter > 512) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; sprite->pos2.y = 0; } else { switch (sprite->data[2] / 128) { case 0: sprite->pos2.x = -(counter % 128 * 8) / 128; break; case 1: sprite->pos2.x = (counter % 128 / 16) - 8; break; case 2: sprite->pos2.x = (counter % 128 / 16); break; case 3: sprite->pos2.x = -(counter % 128 * 8) / 128 + 8; break; } sprite->pos2.y = -(Sin(counter % 128, 8)); } sprite->data[2] += 12; sub_817F70C(sprite); } static void sub_8181ABC(struct Sprite *sprite); static void sub_8181B4C(struct Sprite *sprite); static void sub_8181C2C(struct Sprite *sprite); static void pokemonanimfunc_32(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = -1; HandleStartAffineAnim(sprite); sprite->data[3] = 0; sub_8181ABC(sprite); sprite->callback = sub_8181ABC; } static void sub_8181ABC(struct Sprite *sprite) { if (sUnknown_03001240[sprite->data[0]].field_0 != 0) { sUnknown_03001240[sprite->data[0]].field_0--; } else { s32 counter; sub_817F70C(sprite); counter = sprite->data[2]; if (sprite->data[2] > 128) { sprite->data[2] = 0; sprite->callback = sub_8181B4C; } else { s32 var = 8 * sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = var * (counter % 128) / 128; sprite->pos2.y = -(Sin(counter % 128, 8)); sprite->data[2] += 12; } sub_817F70C(sprite); } } static void sub_8181B4C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 48) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.y = 0; sprite->data[2] = 0; sprite->callback = sub_8181C2C; } else { s16 yDelta; s16 yScale = Sin(sprite->data[4], 64) + 256; if (sprite->data[2] >= 16 && sprite->data[2] <= 31) { sprite->data[3] += 8; sprite->pos2.x -= sUnknown_03001240[sprite->data[0]].field_8; } yDelta = 0; if (yScale > 256) yDelta = (256 - yScale) / 8; sprite->pos2.y = -(Sin(sprite->data[3], 20)) - yDelta; HandleSetAffineData(sprite, 256 - Sin(sprite->data[4], 32), yScale, 0); sprite->data[2]++; sprite->data[4] += 8; sprite->data[4] &= 0xFF; } sub_817F70C(sprite); } static void sub_8181C2C(struct Sprite *sprite) { s32 counter; sub_817F70C(sprite); counter = sprite->data[2]; if (counter > 128) { if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { sUnknown_03001240[sprite->data[0]].field_4--; sUnknown_03001240[sprite->data[0]].field_0 = 10; sprite->data[3] = 0; sprite->data[2] = 0; sprite->data[4] = 0; sprite->callback = sub_8181ABC; } else { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sprite->pos2.x = 0; sprite->pos2.y = 0; } else { register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8; sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (sUnknown_03001240[sprite->data[0]].field_8 * 8); sprite->pos2.y = -(Sin(counter % 128, 8)); } sprite->data[2] += 12; sub_817F70C(sprite); } static void sub_8181CE8(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; } sub_817F70C(sprite); if (sprite->data[7] > 254) { sprite->pos2.x = 0; sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); if (sUnknown_03001240[sprite->data[0]].field_4 > 1) { sUnknown_03001240[sprite->data[0]].field_4--; sprite->data[2] = 0; sprite->data[7] = 0; } else { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } else { u16 rotation; sprite->pos2.x = -(Sin(sprite->data[7], 16)); rotation = Sin(sprite->data[7], 32); HandleSetAffineData(sprite, 256, 256, rotation << 8); sprite->data[7] += sUnknown_03001240[sprite->data[0]].field_6; sub_817F70C(sprite); } } static void pokemonanimfunc_33(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 4; sub_8181CE8(sprite); sprite->callback = sub_8181CE8; } static void pokemonanimfunc_34(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; } sub_817F70C(sprite); if (sprite->data[7] > 254) { sprite->pos2.x = 0; sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sub_817F70C(sprite); } else { u16 rotation; sprite->pos2.x = -(Sin(sprite->data[7], 16)); sprite->pos2.y = -(Sin(sprite->data[7] % 128, 16)); rotation = Sin(sprite->data[7], 32); HandleSetAffineData(sprite, 256, 256, rotation << 8); sprite->data[7] += 8; sub_817F70C(sprite); } } static void pokemonanimfunc_35(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[7] = 0; if (sprite->data[2] == sprite->data[7]) { sprite->data[7] = 0; sprite->data[2]++; sprite->invisible = FALSE; } else { sprite->data[7]++; sprite->invisible = TRUE; } if (sprite->data[2] > 10) { sprite->invisible = FALSE; sprite->callback = SpriteCB_SetDummyOnAnimEnd; } } static void sub_8181F14(struct Sprite *sprite); static void sub_8181F50(struct Sprite *sprite); static void sub_8181FC0(struct Sprite *sprite); static void pokemonanimfunc_36(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 0; sprite->callback = sub_8181F14; } static void sub_8181F14(struct Sprite *sprite) { if (sprite->data[7] > 31) { sprite->data[7] = 32; sprite->data[2] = 0; sprite->callback = sub_8181F50; } else { sprite->data[7] += 4; } HandleSetAffineData(sprite, 256, 256, sprite->data[7] << 8); } static void sub_8181F50(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 512) { sprite->callback = sub_8181FC0; sprite->data[6] = 0; } else { sprite->pos2.x = -(sprite->data[2] * 16) / 512; sprite->pos2.y = -(Sin(sprite->data[2] % 128, 4)); sprite->data[2] += 12; } sub_817F70C(sprite); } static void sub_8181FC0(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7] -= 2; if (sprite->data[7] < 0) { sprite->data[7] = 0; sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->pos2.x = -(Sin(sprite->data[7] * 2, 16)); } HandleSetAffineData(sprite, 256, 256, sprite->data[7] << 8); sub_817F70C(sprite); } static void pokemonanimfunc_37(struct Sprite *sprite) { u16 rotation; if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; } sub_817F70C(sprite); if (sprite->data[7] > 255) { sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[7] = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[7] += 16; sprite->pos2.x = -(Sin(sprite->data[7] % 128, 8)); sprite->pos2.y = -(Sin(sprite->data[7] % 128, 8)); } rotation = Sin(sprite->data[7] % 128, 16); HandleSetAffineData(sprite, 256, 256, rotation << 8); sub_817F70C(sprite); } static void sub_81820FC(struct Sprite *sprite); static void sub_818216C(struct Sprite *sprite); static void sub_81821CC(struct Sprite *sprite); static void sub_8182248(struct Sprite *sprite); static void pokemonanimfunc_38(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 0; sprite->data[4] = 0; sprite->callback = sub_81820FC; } static void sub_81820FC(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[7] > 24) { if (++sprite->data[4] > 4) { sprite->data[4] = 0; sprite->callback = sub_818216C; } } else { sprite->data[7] += 2; sprite->pos2.x = Sin(sprite->data[7], 8); sprite->pos2.y = -(Sin(sprite->data[7], 8)); } HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } static void sub_818216C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[7] > 32) { sprite->data[6] = 1; sprite->callback = sub_81821CC; } else { sprite->data[7] += 2; sprite->pos2.x = Sin(sprite->data[7], 8); sprite->pos2.y = -(Sin(sprite->data[7], 8)); } HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } static void sub_81821CC(struct Sprite *sprite) { sub_817F70C(sprite); sprite->data[7] += (sprite->data[6] * 4); if (sprite->data[5] > 9) { sprite->data[7] = 32; sprite->callback = sub_8182248; } sprite->pos2.x = Sin(sprite->data[7], 8); sprite->pos2.y = -(Sin(sprite->data[7], 8)); if (sprite->data[7] <= 28 || sprite->data[7] >= 36) { sprite->data[6] *= -1; sprite->data[5]++; } HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } static void sub_8182248(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[7] <= 0) { sprite->data[7] = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[7] -= 2; sprite->pos2.x = Sin(sprite->data[7], 8); sprite->pos2.y = -(Sin(sprite->data[7], 8)); } HandleSetAffineData(sprite, 256, 256, -(sprite->data[7]) << 8); sub_817F70C(sprite); } static void pokemonanimfunc_39(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 40) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { s8 sign; if (!(sprite->data[2] & 1)) sign = 1; else sign = -1; if ((sprite->data[2] % 4) / 2 == 0) { sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 16) * sign; sprite->pos2.y = -(sprite->pos2.x); } else { sprite->pos2.x = -(Sin((sprite->data[2] * 128 / 40) % 256, 16)) * sign; sprite->pos2.y = sprite->pos2.x; } } sprite->data[2]++; sub_817F70C(sprite); } static void pokemonanimfunc_3A(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[5] = 0; sprite->data[6] = 0; sprite->data[7] = 0; sprite->data[2]++; } if (sprite->data[6] > 0) { sprite->data[6]--; if (sprite->data[5] != 3) { s16 scale = (8 * sprite->data[6]) / 20; scale = Sin(sprite->data[7] - scale, 64); HandleSetAffineData(sprite, 256 - scale, 256 - scale, 0); } } else { s16 var; if (sprite->data[5] == 3) { if (sprite->data[7] > 63) { sprite->data[7] = 64; HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } var = Cos(sprite->data[7], 64); } else { var = Sin(sprite->data[7], 64); if (sprite->data[7] > 63) { sprite->data[5] = 3; sprite->data[6] = 10; sprite->data[7] = 0; } else { if (var > 48 && sprite->data[5] == 1) { sprite->data[5] = 2; sprite->data[6] = 20; } else if (var > 16 && sprite->data[5] == 0) { sprite->data[5] = 1; sprite->data[6] = 20; } } } sprite->data[7] += 2; HandleSetAffineData(sprite, 256 - var, 256 - var, 0); } sub_817F70C(sprite); } static void pokemonanimfunc_3B(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; } if (sprite->data[7] > 512) { sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 yScale; sprite->pos2.y = Sin(sprite->data[7] % 256, 8); sprite->data[7] += 8; yScale = Sin(sprite->data[7] % 128, 96); HandleSetAffineData(sprite, 256, yScale + 256, 0); } } static void pokemonanimfunc_3C(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; } if (sprite->data[7] > 256) { sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 yScale; sprite->pos2.y = Sin(sprite->data[7], 16); sprite->data[7] += 4; yScale = Sin((sprite->data[7] % 64) * 2, 128); HandleSetAffineData(sprite, 256, yScale + 256, 0); } } static void sub_81825F8(struct Sprite *sprite); static void sub_8182648(struct Sprite *sprite); static void sub_81826F8(struct Sprite *sprite); static void pokemonanimfunc_3D(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->callback = sub_81825F8; sprite->data[7] = 0; } static void sub_81825F8(struct Sprite *sprite) { s16 yScale; sprite->data[7] += 8; if (sprite->data[7] > 63) { sprite->data[7] = 0; sprite->data[6] = 0; sprite->callback = sub_8182648; yScale = Sin(64, 128); // 128 * 1 = 128 } else { yScale = Sin(sprite->data[7], 128); } HandleSetAffineData(sprite, 256, 256 + yScale, 0); } static void sub_8182648(struct Sprite *sprite) { s16 yScale; sprite->data[7] += 4; if (sprite->data[7] > 95) { yScale = Cos(0, 128); // 128 * (-1) = -128 sprite->data[7] = 0; sprite->data[6]++; } else { s16 sign, index; sprite->pos2.y = -(sprite->data[6] * 4) - Sin(sprite->data[7], 8); if (sprite->data[7] > 63) { sign = -1; index = sprite->data[7] - 64; } else { sign = 1; index = 0; } yScale = Cos((index * 2) + sprite->data[7], 128) * sign; } HandleSetAffineData(sprite, 256, 256 + yScale, 0); if (sprite->data[6] == 3) { sprite->data[7] = 0; sprite->callback = sub_81826F8; } } static void sub_81826F8(struct Sprite *sprite) { s16 yScale; sprite->data[7] += 8; yScale = Cos(sprite->data[7], 128); sprite->pos2.y = -(Cos(sprite->data[7], 12)); if (sprite->data[7] > 63) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); } HandleSetAffineData(sprite, 256, 256 + yScale, 0); } static void sub_8182764(struct Sprite *sprite) { if (sprite->data[7] > sprite->data[5]) { sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; HandleSetAffineData(sprite, 256, 256, 0); } else { s16 xScale; sprite->pos2.x = Sin(sprite->data[7] % 256, sprite->data[4]); sprite->data[7] += sprite->data[6]; xScale = Sin(sprite->data[7] % 128, 96); HandleSetAffineData(sprite, 256 + xScale, 256, 0); } } static void pokemonanimfunc_3E(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 8; sprite->data[5] = 512; sprite->data[4] = 8; } sub_8182764(sprite); } static void sub_8182830(struct Sprite *sprite) { if (sprite->data[7] > sprite->data[5]) { sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; HandleSetAffineData(sprite, 256, 256, 0); } else { s16 xScale; sprite->pos2.x = Sin(sprite->data[7] % 256, sprite->data[4]); sprite->data[7] += sprite->data[6]; xScale = Sin((sprite->data[7] % 64) * 2, 128); HandleSetAffineData(sprite, 256 + xScale, 256, 0); } } static void pokemonanimfunc_3F(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 4; sprite->data[5] = 256; sprite->data[4] = 16; } sub_8182830(sprite); } static void pokemonanimfunc_40(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; } if (sprite->data[7] > 512) { sprite->pos2.x = 0; sub_817F77C(sprite); HandleSetAffineData(sprite, 256, 256, 0); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 scale; sprite->pos2.x = Sin(sprite->data[7] % 256, 8); sprite->data[7] += 8; scale = Sin(sprite->data[7] % 128, 96); HandleSetAffineData(sprite, 256 + scale, 256 + scale, 0); } sub_817F70C(sprite); } static void pokemonanimfunc_41(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; } if (sprite->data[7] > 512) { sprite->pos2.x = 0; sub_817F77C(sprite); HandleSetAffineData(sprite, 256, 256, 0); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 scale; sprite->pos2.x = -(Sin((sprite->data[7] % 256) / 2, 16)); sprite->data[7] += 8; scale = -(Sin((sprite->data[7] % 256) / 2, 64)); HandleSetAffineData(sprite, 256 + scale, 256 + scale, 0); } sub_817F70C(sprite); } static void pokemonanimfunc_42(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; } if (sprite->data[7] > 512) { sprite->pos2.x = 0; sub_817F77C(sprite); HandleSetAffineData(sprite, 256, 256, 0); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { s16 scale; sprite->pos2.x = -(Sin(sprite->data[7] % 256 , 8)); sprite->data[7] += 8; scale = Sin((sprite->data[7] % 256) / 2, 96); HandleSetAffineData(sprite, 256 + scale, 256 + scale, 0); } sub_817F70C(sprite); } static void pokemonanimfunc_43(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->data[6] = 0; } else { s16 caseVar = (sprite->data[2] / 512) % 4; switch (caseVar) { case 0: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512; break; case 1: sprite->pos2.x = (sprite->data[2] % 512 / 32) - 16; break; case 2: sprite->pos2.x = (sprite->data[2] % 512) / 32; break; case 3: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512 + 16; break; } sprite->pos2.y = -(Sin(sprite->data[2] % 128, 4)); sprite->data[2] += 24; } sub_817F70C(sprite); } static void pokemonanimfunc_44(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { sprite->data[6] = 0; sprite->data[7] = 64; sprite->data[2]++; } sprite->data[7] += 8; if (sprite->data[6] == 4) { if (sprite->data[7] > 63) { sprite->data[7] = 0; sprite->data[6]++; } } else { if (sprite->data[7] > 127) { sprite->data[7] = 0; sprite->data[6]++; } } switch (sprite->data[6]) { case 1: sprite->pos2.x = -(Cos(sprite->data[7], 8)); sprite->pos2.y = Sin(sprite->data[7], 8) - 8; break; case 2: sprite->pos2.x = Sin(sprite->data[7] + 128, 8) + 8; sprite->pos2.y = -(Cos(sprite->data[7], 8)); break; case 3: sprite->pos2.x = Cos(sprite->data[7], 8); sprite->pos2.y = Sin(sprite->data[7] + 128, 8) + 8; break; case 0: case 4: sprite->pos2.x = Sin(sprite->data[7], 8) - 8; sprite->pos2.y = Cos(sprite->data[7], 8); break; default: sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->callback = SpriteCB_SetDummyOnAnimEnd; break; } sub_817F70C(sprite); } static void pokemonanimfunc_45(struct Sprite *sprite) { sprite->data[0] = 32; sub_8180714(sprite); sprite->callback = sub_8180714; } static void pokemonanimfunc_46(struct Sprite *sprite) { sprite->data[0] = 80; sub_817F8FC(sprite); sprite->callback = sub_817F8FC; } static void pokemonanimfunc_47(struct Sprite *sprite) { sprite->data[0] = 80; sub_817F978(sprite); sprite->callback = sub_817F978; } static void pokemonanimfunc_48(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 2048; sUnknown_03001240[id].field_8 = sprite->data[6]; sub_8180900(sprite); sprite->callback = sub_8180900; } static void pokemonanimfunc_49(struct Sprite *sprite) { sprite->data[6] = 1; pokemonanimfunc_05(sprite); } static void pokemonanimfunc_4A(struct Sprite *sprite) { sprite->data[6] = 1; pokemonanimfunc_48(sprite); } static void pokemonanimfunc_4B(struct Sprite *sprite) { if (sprite->data[2] == 0) sprite->data[0] = 0; if (sprite->data[0] <= 0) { sub_817FC20(sprite); sprite->data[0] = 1; } else { sprite->data[0]--; } } static void pokemonanimfunc_4C(struct Sprite *sprite) { sprite->data[0] = 30; sprite->data[7] = 3; sub_817FCDC(sprite); sprite->callback = sub_817FCDC; } static void pokemonanimfunc_4D(struct Sprite *sprite) { sprite->data[0] = 30; sub_817FD44(sprite); sprite->callback = sub_817FD44; } static void pokemonanimfunc_4E(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 1024; sUnknown_03001240[id].field_0 = 0; sUnknown_03001240[id].field_4 = 2; sub_817FE30(sprite); sprite->callback = sub_817FE30; } static void pokemonanimfunc_4F(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 512; sUnknown_03001240[id].field_8 = 3; sUnknown_03001240[id].field_2 = 12; sub_817FFF0(sprite); sprite->callback = sub_817FFF0; } static void pokemonanimfunc_50(struct Sprite *sprite) { sprite->data[0] = 24; sub_818031C(sprite); sprite->callback = sub_818031C; } static void pokemonanimfunc_51(struct Sprite *sprite) { sprite->data[0] = 5; sub_81804F8(sprite); sprite->callback = sub_81804F8; } static void pokemonanimfunc_52(struct Sprite *sprite) { sprite->data[0] = 3; sub_817F9F4(sprite); sprite->callback = sub_817F9F4; } static void pokemonanimfunc_53(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_0 = 60; sUnknown_03001240[id].field_8 = 30; sub_817FF3C(sprite); sprite->callback = sub_817FF3C; } static void pokemonanimfunc_54(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_2 = 1; sUnknown_03001240[id].field_4 = 2; sub_8181214(sprite); sprite->callback = sub_8181214; } static void pokemonanimfunc_55(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 4; sUnknown_03001240[id].field_4 = 2; sub_8181810(sprite); sprite->callback = sub_8181810; } static void pokemonanimfunc_56(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 1; sUnknown_03001240[id].field_4 = 2; HandleStartAffineAnim(sprite); sprite->data[3] = 0; sub_8181ABC(sprite); sprite->callback = sub_8181ABC; } static void pokemonanimfunc_07(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 2; sub_8181CE8(sprite); sprite->callback = sub_8181CE8; } static void pokemonanimfunc_08(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 4; sUnknown_03001240[id].field_4 = 2; sub_8181CE8(sprite); sprite->callback = sub_8181CE8; } static void pokemonanimfunc_0B(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 100; sub_81814D4(sprite); sprite->callback = sub_81814D4; } static void pokemonanimfunc_0C(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 50; sUnknown_03001240[id].field_4 = 2; sub_81814D4(sprite); sprite->callback = sub_81814D4; } static void pokemonanimfunc_0D(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 100; sub_81815D4(sprite); sprite->callback = sub_81815D4; } static void pokemonanimfunc_0E(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_8 = 50; sUnknown_03001240[id].field_4 = 2; sub_81815D4(sprite); sprite->callback = sub_81815D4; } static void sub_8183140(struct Sprite *sprite) { s32 counter = sprite->data[2]; if (counter > 2304) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; } else { sprite->pos2.y = Sin((counter + 192) % 256, sprite->data[7]) + sprite->data[7]; } sprite->data[2] += sprite->data[0]; } static void pokemonanimfunc_57(struct Sprite *sprite) { sprite->data[0] = 60; sprite->data[7] = 3; sub_8183140(sprite); sprite->callback = sub_8183140; } static void pokemonanimfunc_58(struct Sprite *sprite) { sprite->data[0] = 30; sprite->data[7] = 3; sub_8183140(sprite); sprite->callback = sub_8183140; } static void pokemonanimfunc_59(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->data[6] = 0; } else { s16 divCase = (sprite->data[2] / 512) % 4; switch (divCase) { case 0: sprite->pos2.x = (sprite->data[2] % 512) / 32; break; case 2: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512; break; case 1: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512 + 16; break; case 3: sprite->pos2.x = (sprite->data[2] % 512) / 32 - 16; break; } sprite->pos2.y = Sin(sprite->data[2] % 128, 4); sprite->data[2] += 24; } sub_817F70C(sprite); } static void sub_81832C8(struct Sprite *sprite) { s16 index1 = 0, index2 = 0; if (sprite->data[5] > sprite->data[6]) { sprite->pos2.y = 0; sprite->data[5] = 0; HandleSetAffineData(sprite, 256, 256, 0); if (sprite->data[4] <= 1) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[4]--; sprite->data[7] = 0; } } else { u8 amplitude, cmpVal1, cmpVal2; s16 xScale, yScale; index2 = (sprite->data[5] * 128) / sprite->data[6]; cmpVal1 = sprite->data[6] / 4; cmpVal2 = cmpVal1 * 3; if (sprite->data[5] >= cmpVal1 && sprite->data[5] < cmpVal2) { sprite->data[7] += 51; index1 = sprite->data[7] & 0xFF; } if (sprite->data[1] == 0) xScale = -256 - Sin(index2, 16); else xScale = 256 + Sin(index2, 16); amplitude = sprite->data[3]; yScale = 256 - Sin(index2, amplitude) - Sin(index1, amplitude / 5); SetAffineData(sprite, xScale, yScale, 0); sprite->data[5]++; } } static void pokemonanimfunc_5A(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 1; sprite->data[6] = 40; sprite->data[3] = 40; sprite->data[5] = 0; sprite->data[7] = 0; } sub_81832C8(sprite); } static void sub_8183418(struct Sprite *sprite) { s16 index1 = 0, index2; if (sprite->data[5] > sprite->data[6]) { sprite->data[5] = 0; HandleSetAffineData(sprite, 256, 256, 0); if (sprite->data[4] <= 1) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[4]--; sprite->data[7] = 0; } } else { u8 amplitude, cmpVal1, cmpVal2; s16 xScale; index2 = (sprite->data[5] * 128) / sprite->data[6]; cmpVal1 = sprite->data[6] / 4; cmpVal2 = cmpVal1 * 3; if (sprite->data[5] >= cmpVal1 && sprite->data[5] < cmpVal2) { sprite->data[7] += 51; index1 = sprite->data[7] & 0xFF; } amplitude = sprite->data[3]; if (sprite->data[1] == 0) xScale = -256 + Sin(index2, amplitude) + Sin(index1, amplitude / 5 * 2); else xScale = 256 - Sin(index2, amplitude) - Sin(index1, amplitude / 5 * 2); SetAffineData(sprite, xScale, 256, 0); sprite->data[5]++; } } static void pokemonanimfunc_5B(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 1; sprite->data[6] = 40; sprite->data[3] = 40; sprite->data[5] = 0; sprite->data[7] = 0; } sub_8183418(sprite); } static void sub_8183574(struct Sprite *sprite) { u8 var6, var7; u8 var8 = sprite->data[2]; u8 var9 = sprite->data[6]; u8 var5 = sUnknown_0860AA80[sprite->data[5]][0]; u8 var2 = var5; if (var5 != 0xFF) var5 = sprite->data[7]; else var5 = 0xFF; // needed to match var6 = sUnknown_0860AA80[sprite->data[5]][1]; var7 = 0; if (var2 != 0xFE) var7 = (var6 - var9) * var5 / var6; if (var5 == 0xFF) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.y = 0; } else { sprite->pos2.y = Sin((var8 + 192) % 256, var7) + var7; if (var9 == var6) { sprite->data[5]++; sprite->data[6] = 0; } else { sprite->data[2] += sprite->data[0]; sprite->data[6]++; } } } static void pokemonanimfunc_5C(struct Sprite *sprite) { sprite->data[0] = 40; sprite->data[7] = 6; sub_8183574(sprite); sprite->callback = sub_8183574; } static void pokemonanimfunc_5D(struct Sprite *sprite) { sprite->data[0] = 70; sprite->data[7] = 6; sub_817FCDC(sprite); sprite->callback = sub_817FCDC; } static void pokemonanimfunc_5E(struct Sprite *sprite) { sprite->data[0] = 20; sub_817F8FC(sprite); sprite->callback = sub_817F8FC; } static void pokemonanimfunc_5F(struct Sprite *sprite) { if (sprite->data[2] > 40) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { s8 sign; if (!(sprite->data[2] & 1)) sign = 1; else sign = -1; sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 9) * sign; } sprite->data[2]++; } static void pokemonanimfunc_60(struct Sprite *sprite) { if (sprite->data[2] > 40) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; } else { s8 sign; if (!(sprite->data[2] & 1)) sign = 1; else sign = -1; sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 12) * sign; } sprite->data[2]++; } static void pokemonanimfunc_61(struct Sprite *sprite) { sprite->data[0] = 70; sprite->data[7] = 6; sub_8183140(sprite); sprite->callback = sub_8183140; } static void pokemonanimfunc_62(struct Sprite *sprite) { sprite->data[0] = 24; sprite->data[7] = 6; sub_8183574(sprite); sprite->callback = sub_8183574; } static void pokemonanimfunc_63(struct Sprite *sprite) { sprite->data[0] = 56; sprite->data[7] = 9; sub_8183574(sprite); sprite->callback = sub_8183574; } static void pokemonanimfunc_64(struct Sprite *sprite) { u8 id = sprite->data[0] = sub_817F758(); sUnknown_03001240[id].field_6 = 1024; sUnknown_03001240[id].field_8 = 6; sUnknown_03001240[id].field_2 = 24; sub_817FFF0(sprite); sprite->callback = sub_817FFF0; } static void sub_81837DC(struct Sprite *sprite) { s16 index1 = 0, index2 = 0; if (sprite->data[5] > sprite->data[6]) { sprite->pos2.y = 0; sprite->data[5] = 0; HandleSetAffineData(sprite, 256, 256, 0); if (sprite->data[4] <= 1) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[4]--; sprite->data[7] = 0; } } else { u8 amplitude, cmpVal1, cmpVal2; s16 xScale, yScale; index2 = (sprite->data[5] * 128) / sprite->data[6]; cmpVal1 = sprite->data[6] / 4; cmpVal2 = cmpVal1 * 3; if (sprite->data[5] >= cmpVal1 && sprite->data[5] < cmpVal2) { sprite->data[7] += 51; index1 = sprite->data[7] & 0xFF; } amplitude = sprite->data[3]; if (sprite->data[1] == 0) xScale = Sin(index2, amplitude) + (Sin(index1, amplitude / 5 * 2) - 256); else xScale = 256 - Sin(index1, amplitude / 5 * 2) - Sin(index2, amplitude); yScale = 256 - Sin(index1, amplitude / 5) - Sin(index2, amplitude); SetAffineData(sprite, xScale, yScale, 0); sprite->data[5]++; } } static void pokemonanimfunc_65(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 1; sprite->data[6] = 40; sprite->data[3] = 40; sprite->data[5] = 0; sprite->data[7] = 0; } sub_81837DC(sprite); } static void pokemonanimfunc_66(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->data[6] = 0; } else { s16 divCase = (sprite->data[2] / 512) % 4; switch (divCase) { case 0: sprite->pos2.x = (sprite->data[2] % 512) / 32; break; case 2: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512; break; case 1: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512 + 16; break; case 3: sprite->pos2.x = (sprite->data[2] % 512) / 32 - 16; break; } sprite->pos2.y = Sin(sprite->data[2] % 128, 4); sprite->data[2] += 48; } sub_817F70C(sprite); } static void pokemonanimfunc_67(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] > 2048) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->data[6] = 0; } else { s16 divCase = (sprite->data[2] / 512) % 4; switch (divCase) { case 0: sprite->pos2.x = (sprite->data[2] % 512) / 32; break; case 2: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512; break; case 1: sprite->pos2.x = -(sprite->data[2] % 512 * 16) / 512 + 16; break; case 3: sprite->pos2.x = (sprite->data[2] % 512) / 32 - 16; break; } sprite->pos2.y = Sin(sprite->data[2] % 96, 4); sprite->data[2] += 64; } sub_817F70C(sprite); } static const s8 sUnknown_0860ADBE[][3] = { // x y timer {1, 1, 12}, {-2, 0, 12}, {1, -1, 12}, {0, 0, 0} }; static void sub_8183B4C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) sprite->data[3] = 0; if (sUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == sprite->data[2]) { sprite->data[3]++; sprite->data[2] = 0; } if (sUnknown_0860ADBE[sprite->data[3]][2] / sprite->data[5] == 0) { if (--sprite->data[6] == 0) sprite->callback = SpriteCB_SetDummyOnAnimEnd; else sprite->data[2] = 0; } else { s32 amplitude = sprite->data[5]; sprite->pos2.x += (sUnknown_0860ADBE[sprite->data[3]][0] * amplitude); sprite->pos2.y += (sUnknown_0860ADBE[sprite->data[3]][1] * sprite->data[5]); // what's the point of the var if you're not reusing it? sprite->data[2]++; sub_817F70C(sprite); } } static void pokemonanimfunc_68(struct Sprite *sprite) { sprite->data[5] = 1; sprite->data[6] = 1; sub_8183B4C(sprite); sprite->callback = sub_8183B4C; } static void pokemonanimfunc_69(struct Sprite *sprite) { sprite->data[5] = 2; sprite->data[6] = 1; sub_8183B4C(sprite); sprite->callback = sub_8183B4C; } static void pokemonanimfunc_6A(struct Sprite *sprite) { sprite->data[5] = 2; sprite->data[6] = 2; sub_8183B4C(sprite); sprite->callback = sub_8183B4C; } static void sub_8183C6C(struct Sprite *sprite) { if (sprite->data[7] > 255) { if (sprite->data[5] <= 1) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; HandleSetAffineData(sprite, 256, 256, 0); } else { sprite->data[5]--; sprite->data[7] = 0; } } else { s16 scale; sprite->data[7] += sprite->data[6]; if (sprite->data[7] > 256) sprite->data[7] = 256; scale = Sin(sprite->data[7] / 2, 64); HandleSetAffineData(sprite, 256 - scale, 256 - scale, 0); } } static void pokemonanimfunc_6B(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 4; sprite->data[5] = 1; } sub_8183C6C(sprite); sub_817F70C(sprite); } static void pokemonanimfunc_6C(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 8; sprite->data[5] = 2; } sub_8183C6C(sprite); sub_817F70C(sprite); } static void pokemonanimfunc_6D(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 8; sprite->data[5] = 512; sprite->data[4] = 16; } sub_8182764(sprite); } static void pokemonanimfunc_6E(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 4; sprite->data[5] = 256; sprite->data[4] = 16; } sub_8182764(sprite); } static void pokemonanimfunc_6F(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 8; sprite->data[5] = 512; sprite->data[4] = 16; } sub_8182830(sprite); } static void pokemonanimfunc_70(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[2]++; sprite->data[7] = 0; sprite->data[6] = 8; sprite->data[5] = 512; sprite->data[4] = 8; } sub_8182830(sprite); } static void pokemonanimfunc_71(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[7] = 5; sprite->data[6] = 8; } sub_8180828(sprite); } static void pokemonanimfunc_72(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[7] = 3; sprite->data[6] = 4; } sub_8180828(sprite); } static void pokemonanimfunc_73(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 1; sprite->data[6] = 30; sprite->data[3] = 60; sprite->data[7] = 0; } sub_81832C8(sprite); } static void pokemonanimfunc_74(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 2; sprite->data[6] = 20; sprite->data[3] = 70; sprite->data[7] = 0; } sub_81832C8(sprite); } static void pokemonanimfunc_75(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 2; sprite->data[6] = 20; sprite->data[3] = 70; sprite->data[5] = 0; sprite->data[7] = 0; } sub_8183418(sprite); } static void pokemonanimfunc_76(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 1; sprite->data[6] = 30; sprite->data[3] = 60; sprite->data[5] = 0; sprite->data[7] = 0; } sub_8183418(sprite); } static void pokemonanimfunc_77(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 2; sprite->data[6] = 20; sprite->data[3] = 70; sprite->data[5] = 0; sprite->data[7] = 0; } sub_81837DC(sprite); } static void pokemonanimfunc_78(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; HandleStartAffineAnim(sprite); sprite->data[4] = 1; sprite->data[6] = 30; sprite->data[3] = 60; sprite->data[5] = 0; sprite->data[7] = 0; } sub_81837DC(sprite); } static void sub_8183FA8(struct Sprite *sprite) { if (sprite->data[7] > 255) { if (sprite->data[6] <= 1) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; sprite->pos2.x = 0; sprite->pos2.y = 0; } else { sprite->data[7] %= 256; sprite->data[6]--; } } else { sprite->pos2.x = -(Sin(sprite->data[7], sprite->data[5])); sprite->pos2.y = Sin((sprite->data[7] + 192) % 256, sprite->data[4]); if (sprite->pos2.y > 0) sprite->pos2.y *= -1; sprite->pos2.y += sprite->data[4]; sprite->data[7] += sprite->data[3]; } } static void pokemonanimfunc_79(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 1; sprite->data[7] = 0; sprite->data[5] = 12; sprite->data[4] = 12; sprite->data[3] = 4; } sub_8183FA8(sprite); } static void pokemonanimfunc_7A(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 1; sprite->data[7] = 0; sprite->data[5] = 12; sprite->data[4] = 12; sprite->data[3] = 6; } sub_8183FA8(sprite); } static void pokemonanimfunc_7B(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 2; sprite->data[7] = 0; sprite->data[5] = 12; sprite->data[4] = 12; sprite->data[3] = 8; } sub_8183FA8(sprite); } static void sub_81840C4(struct Sprite *sprite) { if (sprite->data[7] > 256) { if (sprite->data[6] <= sprite->data[4]) { sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[4]++; sprite->data[7] = 0; } sprite->pos2.x = 0; sprite->pos2.y = 0; } else { s16 posX; if (sprite->data[7] > 159) { if (sprite->data[7] > 256) sprite->data[7] = 256; sprite->pos2.y = -(Sin(sprite->data[7] % 256, 8)); } else if (sprite->data[7] > 95) { sprite->pos2.y = Sin(96, 6) - Sin((sprite->data[7] - 96) * 2, 4); } else { sprite->pos2.y = Sin(sprite->data[7], 6); } posX = -(Sin(sprite->data[7] / 2, sprite->data[5])); if (sprite->data[4] % 2 == 0) posX *= -1; sprite->pos2.x = posX; sprite->data[7] += sprite->data[3]; } } static void pokemonanimfunc_7C(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 2; sprite->data[7] = 0; sprite->data[5] = 16; sprite->data[4] = 1; sprite->data[3] = 4; } sub_81840C4(sprite); } static void pokemonanimfunc_7D(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 2; sprite->data[7] = 0; sprite->data[5] = 16; sprite->data[4] = 1; sprite->data[3] = 6; } sub_81840C4(sprite); } static void pokemonanimfunc_7E(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 3; sprite->data[7] = 0; sprite->data[5] = 16; sprite->data[4] = 1; sprite->data[3] = 8; } sub_81840C4(sprite); } static void pokemonanimfunc_7F(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 1; sprite->data[7] = 0; sprite->data[5] = 4; sprite->data[4] = 6; sprite->data[3] = 4; } sub_8183FA8(sprite); } static void pokemonanimfunc_80(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 1; sprite->data[7] = 0; sprite->data[5] = 4; sprite->data[4] = 6; sprite->data[3] = 6; } sub_8183FA8(sprite); } static void pokemonanimfunc_81(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[2] = 1; sprite->data[6] = 2; sprite->data[7] = 0; sprite->data[5] = 4; sprite->data[4] = 6; sprite->data[3] = 8; } sub_8183FA8(sprite); } static void sub_8184290(struct Sprite *sprite) { u16 index = Sin((sprite->data[2] * 128) / sprite->data[7], sprite->data[5]); sprite->data[6] = -(index << 8); sub_817F3F0(sprite, index, sprite->data[4], 0); HandleSetAffineData(sprite, 256, 256, sprite->data[6]); } static void pokemonanimfunc_82(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[7] = 60; sprite->data[5] = 8; sprite->data[4] = -32; sprite->data[3] = 1; sprite->data[0] = 0; } if (sprite->data[2] > sprite->data[7]) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0]++; if (sprite->data[3] <= sprite->data[0]) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; return; } else { sprite->data[2] = 0; } } else { sub_8184290(sprite); } sprite->data[2]++; } static void pokemonanimfunc_83(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[7] = 90; sprite->data[5] = 8; sprite->data[4] = -32; sprite->data[3] = 1; sprite->data[0] = 0; } if (sprite->data[2] > sprite->data[7]) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0]++; if (sprite->data[3] <= sprite->data[0]) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; return; } else { sprite->data[2] = 0; } } else { sub_8184290(sprite); } sprite->data[2]++; } static void pokemonanimfunc_84(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->data[7] = 30; sprite->data[5] = 8; sprite->data[4] = -32; sprite->data[3] = 2; sprite->data[0] = 0; } if (sprite->data[2] > sprite->data[7]) { HandleSetAffineData(sprite, 256, 256, 0); sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0]++; if (sprite->data[3] <= sprite->data[0]) { sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; return; } else { sprite->data[2] = 0; } } else { sub_8184290(sprite); } sprite->data[2]++; } static void sub_8184468(struct Sprite *sprite) { if (sprite->data[2] > sprite->data[7]) { sprite->pos2.y = 0; HandleSetAffineData(sprite, 256, 256, 0); sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { u8 posY_unsigned; s8 posY_signed; s32 posY; s16 index = (u16)(sprite->data[2] % sprite->data[6] * 256) / sprite->data[6] % 256; if (sprite->data[2] % 2 == 0) { sprite->data[4] = Sin(index, 32) + 256; sprite->data[5] = Sin(index, 32) + 256; posY_unsigned = Sin(index, 32); posY_signed = posY_unsigned; } else { sprite->data[4] = Sin(index, 8) + 256; sprite->data[5] = Sin(index, 8) + 256; posY_unsigned = Sin(index, 8); posY_signed = posY_unsigned; } posY = posY_signed; if (posY < 0) posY += 7; sprite->pos2.y = (u32)(posY) >> 3; HandleSetAffineData(sprite, sprite->data[4], sprite->data[5], 0); } sprite->data[2]++; } static void pokemonanimfunc_85(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->pos2.y += 2; sprite->data[6] = 40; sprite->data[7] = 80; } sub_8184468(sprite); } static void pokemonanimfunc_86(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->pos2.y += 2; sprite->data[6] = 40; sprite->data[7] = 40; } sub_8184468(sprite); } static void pokemonanimfunc_87(struct Sprite *sprite) { if (sprite->data[2] == 0) { HandleStartAffineAnim(sprite); sprite->pos2.y += 2; sprite->data[6] = 80; sprite->data[7] = 80; } sub_8184468(sprite); } static void sub_8184610(struct Sprite *sprite); static void sub_8184640(struct Sprite *sprite); static void sub_8184678(struct Sprite *sprite); static void sub_81846B8(struct Sprite *sprite); static void sub_81845D4(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x -= sprite->data[2]; if (sprite->pos2.x <= -sprite->data[6]) { sprite->pos2.x = -sprite->data[6]; sprite->data[7] = 2; sprite->callback = sub_8184610; } sub_817F70C(sprite); } static void sub_8184610(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x += sprite->data[7]; sprite->data[7]++; if (sprite->pos2.x >= 0) sprite->callback = sub_8184640; sub_817F70C(sprite); } static void sub_8184640(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x += sprite->data[7]; sprite->data[7]++; if (sprite->pos2.x > sprite->data[6]) { sprite->pos2.x = sprite->data[6]; sprite->callback = sub_8184678; } sub_817F70C(sprite); } static void sub_8184678(struct Sprite *sprite) { sub_817F70C(sprite); if (sprite->data[3] >= sprite->data[5]) { sprite->callback = sub_81846B8; } else { sprite->pos2.x += sprite->data[4]; sprite->data[4] *= -1; sprite->data[3]++; } sub_817F70C(sprite); } static void sub_81846B8(struct Sprite *sprite) { sub_817F70C(sprite); sprite->pos2.x -= 2; if (sprite->pos2.x <= 0) { sprite->pos2.x = 0; sub_817F77C(sprite); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } sub_817F70C(sprite); } static void pokemonanimfunc_88(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 4; sprite->data[6] = 12; sprite->data[5] = 16; sprite->data[4] = 4; sprite->data[3] = 0; sprite->data[2] = 2; sprite->callback = sub_81845D4; } static void pokemonanimfunc_89(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 2; sprite->data[6] = 8; sprite->data[5] = 12; sprite->data[4] = 2; sprite->data[3] = 0; sprite->data[2] = 1; sprite->callback = sub_81845D4; } static void pokemonanimfunc_8A(struct Sprite *sprite) { HandleStartAffineAnim(sprite); sprite->data[7] = 0; sprite->data[6] = 6; sprite->data[5] = 6; sprite->data[4] = 2; sprite->data[3] = 0; sprite->data[2] = 1; sprite->callback = sub_81845D4; } static void sub_8184770(struct Sprite *sprite) { sprite->pos2.x = sprite->data[1]; if (sprite->data[0] > 1) { sprite->data[1] *= -1; sprite->data[0] = 0; } else { sprite->data[0]++; } } struct YellowBlendStruct { u8 field_0; u8 field_1; }; static const struct YellowBlendStruct sUnknown_0860ADCC[] = { {0, 1}, {1, 2}, {0, 15}, {1, 1}, {0, 15}, {1, 1}, {0, 15}, {1, 1}, {0, 1}, {1, 1}, {0, 1}, {1, 1}, {0, 1}, {1, 1}, {0, 1}, {1, 1}, {0, 1}, {1, 1}, {0, 1}, {0, 0xFF} }; static const struct YellowBlendStruct sUnknown_0860AE1C[] = { {0, 5}, {1, 1}, {0, 15}, {1, 4}, {0, 2}, {1, 2}, {0, 2}, {1, 2}, {0, 2}, {1, 2}, {0, 2}, {1, 2}, {0, 2}, {0, 0xFF} }; static const struct YellowBlendStruct sUnknown_0860AE54[] = { {0, 1}, {1, 1}, {0, 20}, {1, 1}, {0, 20}, {1, 1}, {0, 20}, {1, 1}, {0, 1}, {0, 0xFF} }; static const struct YellowBlendStruct *const sUnknown_0860AE7C[] = { sUnknown_0860ADCC, sUnknown_0860AE1C, sUnknown_0860AE54 }; static void BackAnimBlendYellow(struct Sprite *sprite) { const struct YellowBlendStruct *array = sUnknown_0860AE7C[sprite->data[3]]; sub_8184770(sprite); if (array[sprite->data[6]].field_1 == 0xFF) { sprite->pos2.x = 0; sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { if (sprite->data[4] == 1) { if (array[sprite->data[6]].field_0 != 0) BlendPalette(sprite->data[7], 0x10, 0x10, RGB_YELLOW); else BlendPalette(sprite->data[7], 0x10, 0, RGB_YELLOW); sprite->data[4] = 0; } if (array[sprite->data[6]].field_1 == sprite->data[5]) { sprite->data[4] = 1; sprite->data[5] = 0; sprite->data[6]++; } else { sprite->data[5]++; } } } static void pokemonanimfunc_8B(struct Sprite *sprite) { if (++sprite->data[2] == 1) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; sprite->data[3] = 0; } BackAnimBlendYellow(sprite); } static void pokemonanimfunc_8C(struct Sprite *sprite) { if (++sprite->data[2] == 1) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; sprite->data[3] = 1; } BackAnimBlendYellow(sprite); } static void pokemonanimfunc_8D(struct Sprite *sprite) { if (++sprite->data[2] == 1) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; sprite->data[3] = 2; } BackAnimBlendYellow(sprite); } static void BackAnimBlend(struct Sprite *sprite) { static const u16 sColors[] = { RGB_RED, RGB_GREEN, RGB_BLUE, RGB_BLACK }; if (sprite->data[2] > 127) { BlendPalette(sprite->data[7], 0x10, 0, RGB_RED); sprite->callback = SpriteCB_SetDummyOnAnimEnd; } else { sprite->data[6] = Sin(sprite->data[2], 12); BlendPalette(sprite->data[7], 0x10, sprite->data[6], sColors[sprite->data[1]]); } } static void sub_8184934(struct Sprite *sprite) { if (sprite->data[3] < sprite->data[4]) { sub_817F70C(sprite); if (sprite->data[5] > sprite->data[0]) { if (++sprite->data[3] < sprite->data[4]) sprite->data[5] = 0; sprite->pos2.x = 0; } else { s8 sign = 1 - (sprite->data[3] % 2 * 2); sprite->pos2.x = sign * Sin((sprite->data[5] * 384 / sprite->data[0]) % 256, 6); sprite->data[5]++; } sub_817F70C(sprite); } } static void pokemonanimfunc_8E(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 10; sprite->data[5] = 0; sprite->data[4] = 2; sprite->data[3] = 0; sprite->data[1] = 0; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_8F(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 20; sprite->data[5] = 0; sprite->data[4] = 1; sprite->data[3] = 0; sprite->data[1] = 0; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_90(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 80; sprite->data[5] = 0; sprite->data[4] = 1; sprite->data[3] = 0; sprite->data[1] = 0; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_91(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 10; sprite->data[5] = 0; sprite->data[4] = 2; sprite->data[3] = 0; sprite->data[1] = 1; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_92(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 20; sprite->data[5] = 0; sprite->data[4] = 1; sprite->data[3] = 0; sprite->data[1] = 1; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_93(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 80; sprite->data[5] = 0; sprite->data[4] = 1; sprite->data[3] = 0; sprite->data[1] = 1; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_94(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 10; sprite->data[5] = 0; sprite->data[4] = 2; sprite->data[3] = 0; sprite->data[1] = 2; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_95(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 20; sprite->data[5] = 0; sprite->data[4] = 1; sprite->data[3] = 0; sprite->data[1] = 2; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void pokemonanimfunc_96(struct Sprite *sprite) { if (sprite->data[2] == 0) { sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; sprite->data[0] = 80; sprite->data[5] = 0; sprite->data[4] = 1; sprite->data[3] = 0; sprite->data[1] = 2; } if (sprite->data[2] % 2 == 0) BackAnimBlend(sprite); if (sprite->data[2] >= (128 - sprite->data[0] * sprite->data[4]) / 2) sub_8184934(sprite); sprite->data[2]++; } static void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite) { if (sprite->animEnded) sprite->callback = SpriteCallbackDummy; }